Some implementation of the ChannelMap class

This commit is contained in:
Jamie Hardt
2018-11-30 11:31:47 -08:00
parent 67a46010ad
commit c1f7407c4d
2 changed files with 49 additions and 45 deletions

View File

@@ -1,13 +1,5 @@
#!/usr/bin/env python
# coding: utf-8
# # CMX3600 EDL Parsing
#
# ## String Helper
#
# We start with a `colliate` function, which will help us divide a string into fixed-width columns.
# EDLs
# pycmx
# (c) 2018 Jamie Hardt
from .parse_cmx_statements import parse_cmx3600_statements
from collections import namedtuple
@@ -42,43 +34,45 @@ class NamedTupleParser:
class CmxChannelMap:
def __init__(self, cmx_string):
self.v = False
self.a1 = False
self.a2 = False
self.a3 = False
self.a4 = False
if cmx_string == "V":
self.v = True
elif cmx_string == "A":
self.a1 = True
elif cmx_string == "A2":
self.a2 = True
elif cmx_string == "AA":
self.a1 = True
self.a2 = True
elif cmx_string == "B":
self.v = True
self.a1 = True
elif cmx_string == "V/AA":
self.v = True
self.a1 = True
self.a2 = True
elif cmx_string == "V/A2":
self.v = True
self.a2 = True
chan_map = { "V" : (True, False, False),
"A" : (False, True, False),
"A2" : (False, False, True),
"AA" : (False, True, True),
"B" : (True, True, False),
"V/AA" : (True, True, True),
"V/A2" : (True, False, True)
}
def __init__(self, v=False, a1=False, a2=False, a3=False, a4=False):
self.v = v
self.a1 = a1
self.a2 = a2
self.a3 = a3
self.a4 = a4
def appendEvent(self, event_str):
if event_str in self.chan_map:
channels = self.chan_map[event_str]
self.v = channels[0]
self.a1 = channels[1]
self.a2 = channels[2]
def appendExt(self, audio_ext):
self.a3 = ext.audio3
self.a4 = ext.audio4
def __repr__(self):
return "CmxChannelMap(v="+ self.v.__repr__( ) + \
",a1=" + self.a1.__repr__() + \
",a2=" + self.a2.__repr__() + \
",a3=" + self.a3.__repr__() + \
",a4=" + self.a4.__repr__() +")"
Cmx3600Event = namedtuple("Cmx3600Event",['title','number','clip_name', 'source_name','channels',
'source_start','source_finish',
'record_start','record_finish',
'fcm_drop'])
def parse_cmx3600(file):
"""Accepts the path to a CMX EDL and returns a list of all events contained therein."""
statements = parse_cmx3600_statements(file)
@@ -88,7 +82,6 @@ def parse_cmx3600(file):
return event_list(title, parser)
def event_list(title, parser):
print("Parsing event list")
state = {"fcm_drop" : False}
events_result = []
@@ -102,9 +95,12 @@ def event_list(title, parser):
events_result.append(this_event)
raw_event = parser.current_token
channels = CmxChannelMap()
channels.appendEvent(raw_event.channels)
this_event = {'title': title, 'number': raw_event.event, 'clip_name': None ,
'source_name': raw_event.source,
'channels': CmxChannelMap(raw_event.channels),
'channels': channels,
'source_start': raw_event.source_in,
'source_finish': raw_event.source_out,
'record_start': raw_event.record_in,
@@ -116,8 +112,9 @@ def event_list(title, parser):
this_event['clip_name'] = parser.current_token.name
elif parser.accept('SourceFile'):
this_event['source_name'] = parser.current_token.filename
elif parser.accept('Trailer'):
break
else:
events_result.append(parser.current_token)
parser.next_token()
if this_event != None:

View File

@@ -16,6 +16,7 @@ StmtAudioExt = namedtuple("AudioExt",["audio3","audio4"])
StmtClipName = namedtuple("ClipName",["name"])
StmtSourceFile = namedtuple("SourceFile",["filename"])
StmtRemark = namedtuple("Remark",["text"])
StmtTrailer = namedtuple("Trailer",["text"])
StmtUnrecognized = namedtuple("Unrecognized",["content"])
@@ -55,6 +56,8 @@ def parse_cmx3600_line(line):
return parse_extended_audio_channels(line)
elif line.startswith("*"):
return parse_remark( line[1:].strip())
elif line.startswith(">>>"):
return parse_trailer_statement(line)
else:
return parse_unrecognized(line)
@@ -117,3 +120,7 @@ def parse_columns_for_standard_form(line, event_field_length, source_field_lengt
record_out=column_strings[16].strip())
def parse_trailer_statement(line):
trimmed = line[3:].strip()
return StmtTrailer(trimmed)