diff --git a/pycmx/__init__.py b/pycmx/__init__.py index 5305336..09d503e 100644 --- a/pycmx/__init__.py +++ b/pycmx/__init__.py @@ -1,5 +1,5 @@ # pycmx init -from .parse_cmx import parse_cmx3600 +from .parse_cmx_events import parse_cmx3600 __version__ = '0.6' diff --git a/pycmx/parse_cmx_events.py b/pycmx/parse_cmx_events.py index d9f0619..a8915d4 100644 --- a/pycmx/parse_cmx_events.py +++ b/pycmx/parse_cmx_events.py @@ -1,8 +1,52 @@ # pycmx # (c) 2018 Jamie Hardt -def events(statements=[]): - if statements[0]. +from .parse_cmx_statements import (parse_cmx3600_statements, + StmtEvent, StmtFCM, StmtTitle) + +def parse_cmx3600(path): + statements = parse_cmx3600_statements(path) + return EditList(statements) + + +class EditList: + def __init__(self, statements): + self.title_statement = statements[0] + self.event_statements = statements[1:] + + def title(self): + 'The title of the edit list' + return self.title_statement.title + + def events(self): + 'Each event in the edit list' + def events_p(statements_rest, curr_event_num, + statements_event, events, is_drop): + + stmt = statements_rest[0] + rem = statements_rest[1:] + + + if type(stmt) is StmtEvent: + if stmt.event == curr_event_num: + return ( rem,curr_event_num,statements_event + [stmt],events,is_drop) + else: + new_event = Event(statements_event) + return ( rem,stmt.event, [stmt], events + [new_event],is_drop ) + + elif type(stmt) is StmtFCM: + return ( rem, curr_event_num, statements_event, events,stmt.drop) + else: + return ( rem, curr_event_num, statements_event + [stmt],events, is_drop) + + + result = events_p(self.event_statements, None, [], [], False) + while True: + if len(result[0]) == 0: + return result[3] + else: + result = events_p(*result) + class Event: def __init__(self, statements): @@ -10,4 +54,6 @@ class Event: def number(): return statements[0].event - + + + diff --git a/tests/test_parse.py b/tests/test_parse.py index 1968497..62a5151 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -11,24 +11,13 @@ class TestParse(TestCase): "TEST.edl" ] - counts = [ 287, 250 , 376, 148 ] + counts = [ 287, 250 , 376, 120 ] for fn, count in zip(files, counts): - events = pycmx.parse_cmx3600(f"tests/edls/{fn}" ) - self.assertTrue( len(events) == count , f"expected {len(events)} but found {count}") + edl = pycmx.parse_cmx3600(f"tests/edls/{fn}" ) + actual = len(edl.events()) + self.assertTrue( actual == count , f"expected {count} but found {actual}") + - def test_audio_channels(self): - events = pycmx.parse_cmx3600(f"tests/edls/TEST.edl" ) - self.assertTrue(events[0].channels.a2) - self.assertFalse(events[0].channels.a1) - self.assertTrue(events[2].channels.get_audio_channel(7)) - self.assertFalse(events[2].channels.get_audio_channel(1)) - self.assertFalse(events[2].channels.get_audio_channel(2)) - self.assertFalse(events[2].channels.get_audio_channel(3)) - self.assertFalse(events[2].channels.get_audio_channel(4)) - self.assertFalse(events[2].channels.get_audio_channel(10)) - self.assertFalse(events[2].channels.get_audio_channel(11)) - self.assertFalse(events[2].channels.get_audio_channel(12)) - self.assertFalse(events[2].channels.get_audio_channel(13))