Example #1
0
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
Example #2
0
    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')
Example #3
0
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
Example #4
0
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))
Example #5
0
 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)
Example #6
0
 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)
Example #7
0
 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)