diff --git a/main.py b/main.py index b96d822..9f7e512 100644 --- a/main.py +++ b/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() diff --git a/obsidian/notes_parser.py b/obsidian/notes_parser.py index bdca995..61527f2 100644 --- a/obsidian/notes_parser.py +++ b/obsidian/notes_parser.py @@ -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\d+.\d+.\d+)\s\((?P.+)-(?P.+)\)" 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:]) diff --git a/obsidian/py_models.py b/obsidian/py_models.py index baf3921..25fe1c9 100644 --- a/obsidian/py_models.py +++ b/obsidian/py_models.py @@ -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 diff --git a/obsidian/tests/test_obsidian_parser.py b/obsidian/tests/test_obsidian_parser.py index d72b8b5..b40a4a1 100644 --- a/obsidian/tests/test_obsidian_parser.py +++ b/obsidian/tests/test_obsidian_parser.py @@ -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