From 7119be58ac22adcb59ed6d6e9432c345f8c01762 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Sat, 1 Dec 2018 12:20:19 -0800 Subject: [PATCH] Modified channel parsing, another test case here --- pycmx/parse_cmx.py | 55 +++++++++++++++++++++++++++++++++++++++ tests/.test_parse.py.swp | Bin 12288 -> 12288 bytes tests/test_parse.py | 9 ++++--- 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/pycmx/parse_cmx.py b/pycmx/parse_cmx.py index 30569bc..a1960c1 100644 --- a/pycmx/parse_cmx.py +++ b/pycmx/parse_cmx.py @@ -4,6 +4,8 @@ from .parse_cmx_statements import parse_cmx3600_statements from collections import namedtuple +from re import compile, match + class NamedTupleParser: def __init__(self, tuple_list): @@ -34,6 +36,9 @@ class NamedTupleParser: class CmxChannelMap: + """ + Represents a set of all the channels to which an event applies. + """ chan_map = { "V" : (True, False, False), "A" : (False, True, False), @@ -46,19 +51,69 @@ class CmxChannelMap: def __init__(self, v=False, a1=False, a2=False, a3=False, a4=False): + self._audio_channel_set = set() self.v = v self.a1 = a1 self.a2 = a2 self.a3 = a3 self.a4 = a4 + @property + def a1(self): + return self.get_audio_channel(1) + + @a1.setter + def a1(self,val): + self.set_audio_channel(1,val) + + @property + def a2(self): + return self.get_audio_channel(2) + + @a1.setter + def a2(self,val): + self.set_audio_channel(2,val) + + @property + def a3(self): + return self.get_audio_channel(3) + + @a1.setter + def a3(self,val): + self.set_audio_channel(3,val) + + @property + def a4(self): + return self.get_audio_channel(4) + + @a1.setter + def a4(self,val): + self.set_audio_channel(4,val) + + + def get_audio_channel(self,chan_num): + return (chan_num in self._audio_channel_set) + + def set_audio_channel(self,chan_num,enabled): + if enabled: + self._audio_channel_set.add(chan_num) + elif self.get_audio_channel(chan_num): + self._audio_channel_set.remove(chan_num) + def appendEvent(self, event_str): + alt_channel_re = compile('^A(\d+)') 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] + else: + matchresult = match(alt_channel_re, event_str) + if matchresult: + self.set_audio_channel(int( matchresult.group(1)), True ) + + def appendExt(self, audio_ext): diff --git a/tests/.test_parse.py.swp b/tests/.test_parse.py.swp index 12d32ad08c868069d3ecaf036d34a4bf2be5c5fc..a9d31429e6bba67af9e06f1e38f8bf73962d0da3 100644 GIT binary patch delta 219 zcmZojXh@JsG6?hZRj|-AWB>vI28J(hm||iXr!cO5u~F(9KcnboL4nWwyyd(M49|fW zq(XGEpn|rZBtHYgA3g?#S3vv_h_?grHXz;##2rBF1;j6bI$nTvZdMei=bdb&XQZp6 zkfxMcQIMKklA5AWos*iUky@6TS5mB5tB_P$qL7wfngYnU xiuF@da*Fk<)AE4AEA@iebQBCtEEFdH(KF(34Gz%*$|_Bk)Hh+&ne3~-8350QJ{tf4 delta 198 zcmZojXh@JsG6?hZRj|-AWB>vI1_r&;j4@(;lNo(4ZQyldK-vu0r5>BUIWB=Kx_rXmOu>BWdp?OP_{YWW<`M|ymAUq zkXn|SSHi%6!YwwM{9M;$vWK3wkWxu%aY?a$YD!MAzLJ8rLR#MBR=wcK_w*~u- I_SN4E0NDO4&j0`b diff --git a/tests/test_parse.py b/tests/test_parse.py index b03d212..4d5ce56 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -7,14 +7,15 @@ class TestParse(TestCase): def test_edls(self): files = ["INS4_R1_010417.edl" , "STP R1 v082517.edl", - "ToD_R4_LOCK3.1_030618_Video.edl" + "ToD_R4_LOCK3.1_030618_Video.edl", + "TEST.edl" ] - counts = [ 287, 250 , 376 ] + counts = [ 287, 250 , 376, 148 ] for fn, count in zip(files, counts): - events = pycmx.parse_cmx3600("tests/edls/" + fn ) - self.assertTrue( len(events) == count ) + events = pycmx.parse_cmx3600(f"tests/edls/{fn}" ) + self.assertTrue( len(events) == count , f"expected {len(events)} but found {count}")