diff --git a/.idea/dictionaries/jamie.xml b/.idea/dictionaries/jamie.xml index 727aec9..448d4b5 100644 --- a/.idea/dictionaries/jamie.xml +++ b/.idea/dictionaries/jamie.xml @@ -1,6 +1,7 @@ + adlib fmpxml futura ptulsconv diff --git a/ptulsconv/docparser/__init__.py b/ptulsconv/docparser/__init__.py index e69de29..3531b6f 100644 --- a/ptulsconv/docparser/__init__.py +++ b/ptulsconv/docparser/__init__.py @@ -0,0 +1,15 @@ +from typing import Generator, Callable, Iterator + + +def apply_appends(source: Iterator, + should_append: Callable, + do_append: Callable) -> Generator: + this_element = next(source) + for element in source: + if should_append(this_element, element): + this_element = do_append(this_element, element) + else: + yield this_element + this_element = element + + yield this_element diff --git a/ptulsconv/docparser/adr_entity.py b/ptulsconv/docparser/adr_entity.py index 7394b23..2220183 100644 --- a/ptulsconv/docparser/adr_entity.py +++ b/ptulsconv/docparser/adr_entity.py @@ -1,5 +1,8 @@ -from .doc_entity import SessionDescriptor -from .tagged_string_parser_visitor import parse_tags +from .doc_entity import SessionDescriptor, TrackDescriptor, TrackClipDescriptor +from typing import Optional, Generator, List, Callable +from tagged_string_parser_visitor import parse_tags +from itertools import chain +from functools import reduce from fractions import Fraction # field_map maps tags in the text export to fields in FMPXMLRESULT @@ -69,14 +72,18 @@ class ADRLine: optional: bool done: bool + @staticmethod + def from_clip(clip: TrackClipDescriptor, + track: TrackDescriptor, + session: SessionDescriptor) -> Optional['ADRLine']: + pass -class ADRDocument: - document: SessionDescriptor + @staticmethod + def generate_lines(session: SessionDescriptor) -> Generator['ADRLine']: + for track in session.tracks: + for track_clip in track.clips: + line = ADRLine.from_clip(track_clip, track, session) + if line is not None: + yield line - def __init__(self, session: SessionDescriptor): - self.document = session - - def lines(self): - header_metadata = parse_tags(self.document.header.session_name) - #TODO continue diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 0000000..2fcf226 --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,20 @@ +import unittest + +from ptulsconv.docparser import apply_appends + + +class MyTestCase(unittest.TestCase): + def test_something(self): + v = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + expected = [1, 2, 7, 5, 6, 15, 9, 10] + + should = (lambda x, y: y % 4 == 0) + do_combine = (lambda x, y: x + y) + + r = apply_appends(iter(v), should, do_combine) + r1 = list(r) + self.assertEqual(r1, expected) + + +if __name__ == '__main__': + unittest.main()