示例#1
0
    def test_creation_with_attributes(self):
        mi = TimeCode('00:00:00:01')
        mo = TimeCode('00:00:00:03')
        gi = TimeCode('00:00:01:01')
        go = TimeCode('00:00:02:01')

        e = Edit(mi, mo, gi, go, name='stuff', number=1, blerg='wek')
        self.assertEquals(e.attributes(), {'name': 'stuff',
                                           'number': 1,
                                           'blerg': 'wek'})
示例#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.e = Edit(self.mi, self.mo, self.gi, self.go, name='stuff', number=1, blerg='wek')
示例#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
示例#4
0
class TestEditMethods(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.e = Edit(self.mi, self.mo, self.gi, self.go, name='stuff', number=1, blerg='wek')

    def test_get_media_in(self):
        self.assertEquals(self.e.mediaIn(), self.mi)

    def test_get_media_out(self):
        self.assertEquals(self.e.mediaOut(), self.mo)

    def test_get_global_in(self):
        self.assertEquals(self.e.globalIn(), self.gi)

    def test_get_global_in_with_ref_tc(self):
        ref_tc = TimeCode('00:00:02:00')
        self.assertEquals(self.e.globalIn(ref_tc).frames(), -23)

    def test_get_global_out(self):
        self.assertEquals(self.e.globalOut(), self.go)

    def test_get_global_out_with_ref_tc(self):
        ref_tc = TimeCode('00:00:02:00')
        self.assertEquals(self.e.globalOut(ref_tc).frames(), 1)

    def test_get_mediaInOut(self):
        self.assertEquals(self.e.mediaInOut(), (self.mi, self.mo))

    def test_get_globalInOut(self):
        self.assertEquals(self.e.globalInOut(), (self.gi, self.go))

    def test_get_globalInOut_with_ref_tc(self):
        ref_tc = TimeCode('00:00:02:00')
        g_in, g_out = self.e.globalInOut(ref_tc)
        self.assertEquals(g_in.frames(), -23)
        self.assertEquals(g_out.frames(), 1)

    def test_set_mediaIn(self):
        new_TC = TimeCode('00:00:00:05', base=24)
        self.e.setMediaIn(new_TC)
        self.assertEquals(self.e.mediaIn(), new_TC)

    def test_set_mediaIn_wrongBase(self):
        new_TC = TimeCode('00:00:00:05', base=10)
        with self.assertRaises(EditError):
            self.e.setMediaIn(new_TC)

    def test_set_mediaOut(self):
        new_TC = TimeCode('00:00:00:15', base=24)
        self.e.setMediaOut(new_TC)
        self.assertEquals(self.e.mediaOut(), new_TC)

    def test_set_mediaOut_wrongBase(self):
        new_TC = TimeCode('00:00:00:15', base=10)
        with self.assertRaises(EditError):
            self.e.setMediaOut(new_TC)

    def test_set_globalIn(self):
        new_TC = TimeCode('00:00:00:04', base=24)
        self.e.setGlobalIn(new_TC)
        self.assertEquals(self.e.globalIn(), new_TC)

    def test_set_globalIn_wrongBase(self):
        new_TC = TimeCode('00:00:00:04', base=10)
        with self.assertRaises(EditError):
            self.e.setGlobalIn(new_TC)

    def test_set_globalOut(self):
        new_TC = TimeCode('00:00:00:04', base=24)
        self.e.setGlobalOut(new_TC)
        self.assertEquals(self.e.globalOut(), new_TC)

    def test_set_globalOut_wrongBase(self):
        new_TC = TimeCode('00:00:00:04', base=10)
        with self.assertRaises(EditError):
            self.e.setGlobalOut(new_TC)

    def test_attribute_set_get(self):
        self.e.set('integer', 15)
        self.e.set('float', 1.0)
        self.e.set('string', 'this is')
        self.e.set('bool', False)

        self.assertEquals(self.e.get('integer'), 15)
        self.assertEquals(self.e.get('float'), 1.0)
        self.assertEquals(self.e.get('string'), 'this is')
        self.assertEquals(self.e.get('bool'), False)

    def test_attribute_get_default(self):
        assert self.e.get('get me some None') is None
        self.assertEquals(self.e.get('get me some defaults', 'default'), 'default')

    def test_repr(self):
        self.assertEquals(str(self.e), '< Edit: 00:00:01:01[00:00:00:01;00:00:00:03]00:00:02:01>')