Read transition names

This commit is contained in:
Jamie Hardt
2018-12-29 14:06:22 -08:00
parent 914e8d5525
commit ce31cbb879
4 changed files with 33 additions and 11 deletions

View File

@@ -3,18 +3,19 @@
from .transition import Transition from .transition import Transition
from .channel_map import ChannelMap from .channel_map import ChannelMap
from .parse_cmx_statements import StmtEffectsName
class Edit: class Edit:
""" """
An individual source-to-record operation, with a source roll, source and An individual source-to-record operation, with a source roll, source and
recorder timecode in and out, a transition and channels. 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.edit_statement = edit_statement
self.audio_ext = audio_ext_statement self.audio_ext = audio_ext_statement
self.clip_name_statement = clip_name_statement self.clip_name_statement = clip_name_statement
self.source_file_statement = source_file_statement self.source_file_statement = source_file_statement
self.other_statements = other_statements self.trans_name_statement = trans_name_statement
@property @property
def line_number(self): def line_number(self):
@@ -41,8 +42,11 @@ class Edit:
""" """
Get the :obj:`Transition` object associated with this 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 @property
def source_in(self): def source_in(self):
""" """
@@ -107,7 +111,6 @@ class Edit:
else: else:
return self.source_file_statement.filename return self.source_file_statement.filename
@property @property
def clip_name(self): def clip_name(self):
""" """
@@ -119,3 +122,5 @@ class Edit:
return None return None
else: else:
return self.clip_name_statement.name return self.clip_name_statement.name

View File

@@ -1,7 +1,7 @@
# pycmx # pycmx
# (c) 2018 Jamie Hardt # (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 from .edit import Edit
class Event: class Event:
@@ -29,7 +29,7 @@ class Event:
edits_audio = list( self._statements_with_audio_ext() ) edits_audio = list( self._statements_with_audio_ext() )
clip_names = self._clip_name_statements() clip_names = self._clip_name_statements()
source_files= self._source_file_statements() source_files= self._source_file_statements()
the_zip = [edits_audio] the_zip = [edits_audio]
if len(edits_audio) == 2: if len(edits_audio) == 2:
@@ -41,7 +41,6 @@ class Event:
cn[1] = clip_name cn[1] = clip_name
the_zip.append(cn) the_zip.append(cn)
else: else:
if len(edits_audio) == len(clip_names): if len(edits_audio) == len(clip_names):
the_zip.append(clip_names) the_zip.append(clip_names)
@@ -54,9 +53,18 @@ class Event:
the_zip.append( source_files * len(edits_audio) ) the_zip.append( source_files * len(edits_audio) )
else: else:
the_zip.append([None] * len(edits_audio) ) 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 @property
def unrecognized_statements(self): def unrecognized_statements(self):
@@ -65,7 +73,10 @@ class Event:
""" """
for s in self.statements: for s in self.statements:
if type(s) is StmtUnrecognized: 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): def _edit_statements(self):
return [s for s in self.statements if type(s) is StmtEvent] return [s for s in self.statements if type(s) is StmtEvent]

View File

@@ -13,9 +13,10 @@ class Transition:
Key = "K" Key = "K"
KeyOut = "KO" KeyOut = "KO"
def __init__(self, transition, operand): def __init__(self, transition, operand, name=None):
self.transition = transition self.transition = transition
self.operand = operand self.operand = operand
self.name = name
@property @property
def kind(self): def kind(self):

View File

@@ -98,3 +98,8 @@ class TestParse(TestCase):
self.assertEqual( events[14].edits[0].line_number, 45) self.assertEqual( events[14].edits[0].line_number, 45)
self.assertEqual( events[180].edits[0].line_number, 544) 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" )