def parse(edl_path, start_tc=None): if not os.path.exists(edl_path): raise IOError( 'Path does not exist: %s' % edl_path ) edl_file = open(edl_path,'rt') edl_lines = edl_file.readlines() edl_file.close() # check if we there is a TITLE specified search = re.search(r'TITLE:\s+(.*)', edl_lines[0]) if not search: edl_name = 'edl' else: edl_name = search.groups(0)[0].strip() if start_tc: the_edl = EDL(edl_name, edl_path, start_timecode=TimeCode(start_tc)) else: the_edl = EDL(edl_name, edl_path) edit_number_exp = re.compile(r'(\d{3})') edit_search_exp = re.compile(r'\d{3}.*[A-Z]\s(.*)') edit_name_exp = re.compile(r'\*\sFROM\sCLIP\sNAME:\s(.*)') for i in range(2,len(edl_lines),2): tc_line = edl_lines[i] name_line = edl_lines[i+1] edit_search = re.search(edit_search_exp, tc_line) if edit_search: edit_tc = edit_search.groups(0)[0].strip() else: continue edit_number_search = re.search(edit_number_exp, tc_line) if edit_number_search: edit_number = int(edit_number_search.groups(0)[0]) else: edit_number = 1 edit_name_search = re.search(edit_name_exp, name_line) if edit_name_search: edit_name = edit_name_search.groups(0)[0].strip() else: edit_name = 'edit' tc_parts = edit_tc.split(' ') media_in_out = (TimeCode(tc_parts[0]), TimeCode(tc_parts[1])) global_in_out = (TimeCode(tc_parts[2]), TimeCode(tc_parts[3])) current_edit = Edit(edit_number, edit_name, media_in_out, global_in_out) the_edl.appendEdit(current_edit) return the_edl
def setUp(self): self.mi = TimeCode('00:00:00:01') self.mo = TimeCode('00:00:00:03') self.gi = TimeCode('00:00:01:01') self.go = TimeCode('00:00:02:01') self.edit_c = Edit(self.mi, self.mo, self.gi, self.go) self.edit_a = Edit(self.mi, self.mo, self.gi, self.go) self.edit_b = Edit(self.mi, self.mo, self.gi, self.go) #print self.edit_c self.edl = EDL('testEDL', 'edlpath', startTimeCode='00:00:01:05')
def parse(edl_path, start_tc=None): if not os.path.exists(edl_path): raise IOError('Path does not exist: %s' % edl_path) edl_file = open(edl_path, 'rt') edl_lines = edl_file.readlines() edl_file.close() # check if we there is a TITLE specified search = re.search(r'TITLE:\s+(.*)', edl_lines[0]) if not search: edl_name = 'edl' else: edl_name = search.groups(0)[0].strip() if start_tc: the_edl = EDL(edl_name, edl_path, start_timecode=TimeCode(start_tc)) else: the_edl = EDL(edl_name, edl_path) edit_number_exp = re.compile(r'(\d{3})') edit_search_exp = re.compile(r'\d{3}.*[A-Z]\s(.*)') edit_name_exp = re.compile(r'\*\sFROM\sCLIP\sNAME:\s(.*)') for i in range(2, len(edl_lines), 2): tc_line = edl_lines[i] name_line = edl_lines[i + 1] edit_search = re.search(edit_search_exp, tc_line) if edit_search: edit_tc = edit_search.groups(0)[0].strip() else: continue edit_number_search = re.search(edit_number_exp, tc_line) if edit_number_search: edit_number = int(edit_number_search.groups(0)[0]) else: edit_number = 1 edit_name_search = re.search(edit_name_exp, name_line) if edit_name_search: edit_name = edit_name_search.groups(0)[0].strip() else: edit_name = 'edit' tc_parts = edit_tc.split(' ') media_in_out = (TimeCode(tc_parts[0]), TimeCode(tc_parts[1])) global_in_out = (TimeCode(tc_parts[2]), TimeCode(tc_parts[3])) current_edit = Edit(edit_number, edit_name, media_in_out, global_in_out) the_edl.appendEdit(current_edit) return the_edl
class TestEditManagement(unittest.TestCase): def setUp(self): self.mi = TimeCode('00:00:00:01') self.mo = TimeCode('00:00:00:03') self.gi = TimeCode('00:00:01:01') self.go = TimeCode('00:00:02:01') self.edit_c = Edit(self.mi, self.mo, self.gi, self.go) self.edit_a = Edit(self.mi, self.mo, self.gi, self.go) self.edit_b = Edit(self.mi, self.mo, self.gi, self.go) #print self.edit_c self.edl = EDL('testEDL', 'edlpath', startTimeCode='00:00:01:05') def test_add_edits(self): self.assertEquals(len(self.edl.getAllEdits()), 0) self.edl.appendEdit(self.edit_a) self.edl.appendEdit(self.edit_b) self.assertEquals(len(self.edl.getAllEdits()), 2) def test_insert_edits(self): self.edl.appendEdit(self.edit_a) self.assertEquals(self.edl.getAllEdits(), [self.edit_a]) self.edl.insertEdit(0, self.edit_b) self.assertEquals(self.edl.getAllEdits(), [self.edit_b, self.edit_a]) def test_get_edits(self): self.edl.appendEdit(self.edit_a) self.edl.appendEdit(self.edit_b) self.assertEquals(self.edl.getEdit(0), self.edit_a) self.assertIsNone(self.edl.getEdit(8))
def test_custom_timecode_base_creation_ok(self): edl = EDL('testEDL', 'edlpath', startTimeCode='00:00:01:05', base=20) self.assertEquals(edl.start_tc().tc(), '00:00:01:05') self.assertEquals(edl.start_tc().base(), 20) self.assertEquals(edl.start_tc().frames(), 25)
def test_custom_base_creation(self): edl = EDL('testEDL', 'edlpath', base=30) self.assertEquals(edl.start_tc().tc(), '01:00:00:00') self.assertEquals(edl.start_tc().base(), 30)
def test_default_creation(self): edl = EDL('testEDL', 'edlpath') self.assertEquals(edl.title(), 'testEDL') self.assertEquals(edl.path(), 'edlpath') self.assertEquals(edl.start_tc().tc(), '01:00:00:00') self.assertEquals(edl.start_tc().base(), 25)