From ce31cbb87971d7d213d493058eca7b59180d408f Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Sat, 29 Dec 2018 14:06:22 -0800 Subject: [PATCH] Read transition names --- pycmx/edit.py | 15 ++++++++++----- pycmx/event.py | 21 ++++++++++++++++----- pycmx/transition.py | 3 ++- tests/test_parse.py | 5 +++++ 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/pycmx/edit.py b/pycmx/edit.py index 7b226df..bbbbab3 100644 --- a/pycmx/edit.py +++ b/pycmx/edit.py @@ -3,18 +3,19 @@ from .transition import Transition from .channel_map import ChannelMap +from .parse_cmx_statements import StmtEffectsName class Edit: """ An individual source-to-record operation, with a source roll, source and recorder timecode in and out, a transition and channels. """ - def __init__(self, edit_statement, audio_ext_statement, clip_name_statement, source_file_statement, other_statements = []): + def __init__(self, edit_statement, audio_ext_statement, clip_name_statement, source_file_statement, trans_name_statement = None): self.edit_statement = edit_statement self.audio_ext = audio_ext_statement self.clip_name_statement = clip_name_statement self.source_file_statement = source_file_statement - self.other_statements = other_statements + self.trans_name_statement = trans_name_statement @property def line_number(self): @@ -41,8 +42,11 @@ class Edit: """ Get the :obj:`Transition` object associated with this edit. """ - return Transition(self.edit_statement.trans, self.edit_statement.trans_op) - + if self.trans_name_statement: + return Transition(self.edit_statement.trans, self.edit_statement.trans_op, self.trans_name_statement.name) + else: + return Transition(self.edit_statement.trans, self.edit_statement.trans_op, None) + @property def source_in(self): """ @@ -107,7 +111,6 @@ class Edit: else: return self.source_file_statement.filename - @property def clip_name(self): """ @@ -119,3 +122,5 @@ class Edit: return None else: return self.clip_name_statement.name + + diff --git a/pycmx/event.py b/pycmx/event.py index accc5c5..f43e8f8 100644 --- a/pycmx/event.py +++ b/pycmx/event.py @@ -1,7 +1,7 @@ # pycmx # (c) 2018 Jamie Hardt -from .parse_cmx_statements import (StmtEvent, StmtClipName, StmtSourceFile, StmtAudioExt, StmtUnrecognized) +from .parse_cmx_statements import (StmtEvent, StmtClipName, StmtSourceFile, StmtAudioExt, StmtUnrecognized, StmtEffectsName) from .edit import Edit class Event: @@ -29,7 +29,7 @@ class Event: edits_audio = list( self._statements_with_audio_ext() ) clip_names = self._clip_name_statements() source_files= self._source_file_statements() - + the_zip = [edits_audio] if len(edits_audio) == 2: @@ -41,7 +41,6 @@ class Event: cn[1] = clip_name the_zip.append(cn) - else: if len(edits_audio) == len(clip_names): the_zip.append(clip_names) @@ -54,9 +53,18 @@ class Event: the_zip.append( source_files * len(edits_audio) ) else: the_zip.append([None] * len(edits_audio) ) + + # attach trans name to last event + try: + trans_statement = self._trans_name_statements()[0] + trans_names = [None] * (len(edits_audio) - 1) + trans_names.append(trans_statement) + the_zip.append(trans_names) + except IndexError: + the_zip.append([None] * len(edits_audio) ) - return [ Edit(e1[0],e1[1],n1,s1) for (e1,n1,s1) in zip(*the_zip) ] + return [ Edit(e1[0],e1[1],n1,s1,u1) for (e1,n1,s1,u1) in zip(*the_zip) ] @property def unrecognized_statements(self): @@ -65,7 +73,10 @@ class Event: """ for s in self.statements: if type(s) is StmtUnrecognized: - yield s + yield s + + def _trans_name_statements(self): + return [s for s in self.statements if type(s) is StmtEffectsName] def _edit_statements(self): return [s for s in self.statements if type(s) is StmtEvent] diff --git a/pycmx/transition.py b/pycmx/transition.py index 714cd09..815f7d0 100644 --- a/pycmx/transition.py +++ b/pycmx/transition.py @@ -13,9 +13,10 @@ class Transition: Key = "K" KeyOut = "KO" - def __init__(self, transition, operand): + def __init__(self, transition, operand, name=None): self.transition = transition self.operand = operand + self.name = name @property def kind(self): diff --git a/tests/test_parse.py b/tests/test_parse.py index 8653e04..58bc0cd 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -98,3 +98,8 @@ class TestParse(TestCase): self.assertEqual( events[14].edits[0].line_number, 45) self.assertEqual( events[180].edits[0].line_number, 544) + def test_transition_name(self): + with open("tests/edls/test_25.edl","r") as f: + edl = pycmx.parse_cmx3600(f) + events = list(edl.events) + self.assertEqual( events[4].edits[1].transition.name , "CROSS DISSOLVE" )