Update obsidian parser
Made it to state where it parses notes to pydantic models
This commit is contained in:
parent
44c569867b
commit
a8d18e7cbc
4 changed files with 25 additions and 50 deletions
4
main.py
4
main.py
|
@ -1,5 +1,3 @@
|
|||
from obsidian.notes_parser import parse_training_data
|
||||
from pprint import pprint
|
||||
|
||||
|
||||
pprint(parse_training_data()[1:])
|
||||
parse_training_data()
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import copy
|
||||
import os
|
||||
import re
|
||||
from pprint import pprint
|
||||
from typing import Dict, List, Tuple
|
||||
from typing import List, Tuple
|
||||
from datetime import datetime
|
||||
|
||||
from obsidian.py_models import Approach, Exercise, Training
|
||||
|
||||
|
@ -65,17 +65,14 @@ def parse_training_exercises(exercise_line: str) -> Exercise:
|
|||
raise ValueError
|
||||
if len(stripped) != 3:
|
||||
raise ValueError
|
||||
# return {
|
||||
# "name": stripped[0],
|
||||
# "weight": stripped[1],
|
||||
# "reps": stripped[2],
|
||||
# }
|
||||
return serialize_exercise(
|
||||
name=stripped[0], weight=stripped[1], reps=stripped[2]
|
||||
)
|
||||
|
||||
|
||||
def parse_training_header(training_data_line: str) -> Tuple[bool, str, str, str]:
|
||||
def parse_training_header(
|
||||
training_data_line: str,
|
||||
) -> Tuple[bool, str, str, str]:
|
||||
pattern: str = r"#\s(?P<date>\d+.\d+.\d+)\s\((?P<trainer>.+)-(?P<year_counter>.+)\)"
|
||||
match = re.search(pattern, training_data_line)
|
||||
if match:
|
||||
|
@ -83,7 +80,7 @@ def parse_training_header(training_data_line: str) -> Tuple[bool, str, str, str]
|
|||
trainer = match.group("trainer").strip()
|
||||
year_count = match.group("year_counter").strip()
|
||||
return True, date, trainer, year_count
|
||||
return False, None, None, None
|
||||
return False, "", "", ""
|
||||
|
||||
|
||||
def filter_training_data(training_data: str):
|
||||
|
@ -92,47 +89,28 @@ def filter_training_data(training_data: str):
|
|||
|
||||
|
||||
def parse_training_data():
|
||||
training_data: str = filter_training_data(read_example_file("notes.txt"))
|
||||
training_template: Dict = {
|
||||
"date": None,
|
||||
"trainer": None,
|
||||
"year_count": None,
|
||||
"exercises": [],
|
||||
}
|
||||
parsed_trainings: List[List[str]] = []
|
||||
current_training: Dict = {}
|
||||
training_data: str = filter_training_data(read_example_file("full.txt"))
|
||||
lines = training_data.splitlines()
|
||||
current_training = None
|
||||
trains = []
|
||||
for index, line in enumerate(lines):
|
||||
# Check for last line
|
||||
if index == len(lines) - 1:
|
||||
current_training["exercises"] = current_training["exercises"][1:]
|
||||
parsed_trainings.append(current_training)
|
||||
break
|
||||
header_parsed, date, trainer, year_count = parse_training_header(line)
|
||||
if index == len(lines) - 1:
|
||||
trains.append(current_training)
|
||||
if header_parsed:
|
||||
if not current_training:
|
||||
pass
|
||||
else:
|
||||
current_training["exercises"] = current_training["exercises"][1:]
|
||||
parsed_trainings.append(current_training)
|
||||
current_training = copy.deepcopy(training_template)
|
||||
current_training["date"] = date
|
||||
current_training["trainer"] = trainer
|
||||
current_training["year_count"] = year_count
|
||||
trains.append(current_training)
|
||||
current_training = Training(
|
||||
date=datetime.strptime(date, "%d.%m.%Y").date(), exercises=[]
|
||||
)
|
||||
continue
|
||||
try:
|
||||
exr = parse_training_exercises(line)
|
||||
current_training["exercises"].append(exr)
|
||||
current_training.exercises.append(exr)
|
||||
except ValueError:
|
||||
pass
|
||||
trainings: List[Training] = []
|
||||
for training in parsed_trainings:
|
||||
if not training:
|
||||
continue
|
||||
pprint(training)
|
||||
print("-" * 10)
|
||||
train = Training(date=training.get("date"), exercises=training.get("exercises"))
|
||||
|
||||
return trainings
|
||||
|
||||
for t in trains:
|
||||
pprint(t)
|
||||
print("\n")
|
||||
return trains
|
||||
|
||||
pprint(parse_training_data()[1:])
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from typing import List
|
||||
from typing import List, Optional
|
||||
from pydantic import BaseModel
|
||||
from datetime import date
|
||||
|
||||
|
@ -16,7 +16,7 @@ class Exercise(BaseModel):
|
|||
|
||||
class Training(BaseModel):
|
||||
date: date
|
||||
exercises: List[Exercise]
|
||||
exercises: Optional[List[Exercise]]
|
||||
|
||||
class Coach(BaseModel):
|
||||
name: str
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
from datetime import date, datetime
|
||||
from obsidian.notes_parser import serialize_exercise
|
||||
from obsidian.py_models import Approach, Exercise, Training
|
||||
from obsidian.py_models import Approach, Exercise
|
||||
import pytest
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue