def test_from_xml_method_is_working_properly(self): """testing if the from_xml method will fill object attributes from the given xml node """ from xml.etree import ElementTree file_node = ElementTree.Element('file') duration_node = ElementTree.SubElement(file_node, 'duration') duration_node.text = '30' name_node = ElementTree.SubElement(file_node, 'name') name_node.text = 'shot' pathurl_node = ElementTree.SubElement(file_node, 'pathurl') pathurl = 'file://localhost/' \ 'home/eoyilmaz/maya/projects/default/data/shot.mov' pathurl_node.text = pathurl f = File() # test starting condition self.assertEqual(0, f.duration) self.assertEqual('', f.name) self.assertEqual('', f.pathurl) f.from_xml(file_node) self.assertEqual(30, f.duration) self.assertEqual('shot', f.name) self.assertEqual(pathurl, f.pathurl)
def test_id_after_a_second_call_to_to_xml_will_change_id_id(self): """testing if the id attribute will be changed to an element with just id attribute """ f = File( pathurl='file://localhost/S:/KKS/Sequences/SEQ001/001A_TNGE/Shots' '/Seq001_001A_TNGE_0010/Comp/Outputs/Main/v001/exr/' 'KKS_Seq001_001A_TNGE_0010_Comp_Main_v001.%5B000-379%5D' '.exr' ) # the first call call1 = f.to_xml() # the second call call2 = f.to_xml() # the third call call3 = f.to_xml() # now the first call should be different than the others self.assertNotEqual(call1, call2) # but the second and third call should be the same self.assertEqual(call2, call3) # and it should be a file element with just the id attribute self.assertEqual( call2, '<file id="%s"/>' % f.id )
def test_pathurl_attribute_is_working_properly(self): """testing if the pathurl attribute value can be correctly changed """ f = File(pathurl='shot1') test_value = 'shot2' self.assertNotEqual(test_value, f.pathurl) f.pathurl = test_value self.assertEqual(test_value, f.pathurl)
def test_pathurl_will_set_the_id_attribute(self): """testing if setting the pathurl attribute will also set the id attribute """ f = File() self.assertEqual(f.id, '') f.pathurl = 'shot2' self.assertEqual(f.id, 'shot2')
def test_pathurl_attribute_is_not_a_string(self): """testing if a TypeError will be raised when the pathurl attribute is set to a value other than a string """ f = File(pathurl='shot1') with self.assertRaises(TypeError) as cm: f.pathurl = 123 self.assertEqual(cm.exception.message, 'File.pathurl should be a string, not int')
def test_pathurl_attribute_is_not_a_string(self): """testing if a TypeError will be raised when the pathurl attribute is set to a value other than a string """ f = File(pathurl='shot1') with self.assertRaises(TypeError) as cm: f.pathurl = 123 self.assertEqual( cm.exception.message, 'File.pathurl should be a string, not int' )
def test_pathurl_argument_is_working_properly(self): """testing if the pathurl argument value is correctly passed to the pathurl attribute """ f = File(pathurl='shot2') self.assertEqual('file://localhost/shot2', f.pathurl)
def test_rate_attribute_is_valid_to_xml_is_working_properly(self): """testing if the rate attribute will be included int the xml output if it is not None """ f = File() f.duration = 34 f.name = 'shot2' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov' c = Clip() c.id = 'shot2' c.start = 1 c.end = 35 c.name = 'shot2' c.enabled = True c.duration = 34 c.in_ = 0 c.out = 34 c.file = f c.rate = Rate(timebase='25') expected_xml = \ """<clipitem id="shot2"> <end>35</end> <name>shot2</name> <enabled>True</enabled> <start>1</start> <in>0</in> <duration>34</duration> <rate> <timebase>25</timebase> <ntsc>FALSE</ntsc> </rate> <out>34</out> <file id="shot2.mov"> <duration>34</duration> <name>shot2</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov</pathurl> </file> </clipitem>""" self.maxDiff = None self.assertEqual( expected_xml, c.to_xml() )
def test_pathurl_argument_is_not_a_string(self): """testing if a TypeError will be raised when the pathurl argument is not a string instance """ with self.assertRaises(TypeError) as cm: File(pathurl=123) self.assertEqual(cm.exception.message, 'File.pathurl should be a string, not int')
def test_to_xml_method_is_working_properly_with_tab_with_argument(self): """testing if the to xml method is working properly """ f = File() f.duration = 34.0 f.name = 'shot2' f.pathurl = 'file:///home/eoyilmaz/maya/projects/default/data/shot2.mov' expected_xml = \ """ <file> <duration>34.0</duration> <name>shot2</name> <pathurl>file:///home/eoyilmaz/maya/projects/default/data/shot2.mov</pathurl> </file>""" self.assertEqual( expected_xml, f.to_xml(indentation=2, pre_indent=2) )
def test_rate_attribute_is_valid_to_xml_is_working_properly(self): """testing if the rate attribute will be included int the xml output if it is not None """ f = File() f.duration = 34 f.name = 'shot2' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov' c = Clip() c.id = 'shot2' c.start = 1 c.end = 35 c.name = 'shot2' c.enabled = True c.duration = 34 c.in_ = 0 c.out = 34 c.file = f c.rate = Rate(timebase='25') expected_xml = \ """<clipitem id="shot2"> <end>35</end> <name>shot2</name> <enabled>True</enabled> <start>1</start> <in>0</in> <duration>34</duration> <rate> <timebase>25</timebase> <ntsc>FALSE</ntsc> </rate> <out>34</out> <file id="shot2.mov"> <duration>34</duration> <name>shot2</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov</pathurl> </file> </clipitem>""" self.maxDiff = None self.assertEqual(expected_xml, c.to_xml())
def test_to_xml_method_is_working_properly(self): """testing if the to xml method is working properly """ f = File() f.duration = 34 f.name = 'shot2' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/' \ 'shot2.mov' expected_xml = \ """<file id="shot2.mov"> <duration>34</duration> <name>shot2</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov</pathurl> </file>""" self.assertEqual( expected_xml, f.to_xml() )
def test_id_is_generated_from_pathurl(self): """testing if the id attribute is generated from pathurl and it is equal to the file name """ f = File( pathurl='file://localhost/S:/KKS/Sequences/SEQ001/001A_TNGE/Shots' '/Seq001_001A_TNGE_0010/Comp/Outputs/Main/v001/exr/' 'KKS_Seq001_001A_TNGE_0010_Comp_Main_v001.%5B000-379%5D' '.exr') expected_result = 'KKS_Seq001_001A_TNGE_0010_Comp_Main_v001.' \ '[000-379].exr' self.assertEqual(expected_result, f.id)
def test_id_after_a_second_call_to_to_xml_will_change_id_id(self): """testing if the id attribute will be changed to an element with just id attribute """ f = File( pathurl='file://localhost/S:/KKS/Sequences/SEQ001/001A_TNGE/Shots' '/Seq001_001A_TNGE_0010/Comp/Outputs/Main/v001/exr/' 'KKS_Seq001_001A_TNGE_0010_Comp_Main_v001.%5B000-379%5D' '.exr') # the first call call1 = f.to_xml() # the second call call2 = f.to_xml() # the third call call3 = f.to_xml() # now the first call should be different than the others self.assertNotEqual(call1, call2) # but the second and third call should be the same self.assertEqual(call2, call3) # and it should be a file element with just the id attribute self.assertEqual(call2, '<file id="%s"/>' % f.id)
def test_to_xml_method_is_working_properly(self): """testing if the to xml method is working properly """ f = File() f.duration = 34 f.name = 'shot2' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov' c = Clip() c.id = 'shot2' c.start = 1 c.end = 35 c.name = 'shot2' c.enabled = True c.duration = 34 c.in_ = 0 c.out = 34 c.file = f expected_xml = \ """<clipitem id="shot2"> <end>35</end> <name>shot2</name> <enabled>True</enabled> <start>1</start> <in>0</in> <duration>34</duration> <out>34</out> <file id="shot2.mov"> <duration>34</duration> <name>shot2</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov</pathurl> </file> </clipitem>""" self.assertEqual( expected_xml, c.to_xml() )
def test_to_xml_method_is_working_properly(self): """testing if the to xml method is working properly """ f = File() f.duration = 34.0 f.name = 'shot2' f.pathurl = 'file:///home/eoyilmaz/maya/projects/default/data/shot2.mov' c = Clip() c.id = 'shot2' c.start = 1.0 c.end = 35.0 c.name = 'shot2' c.enabled = True c.duration = 34.0 c.in_ = 0.0 c.out = 34.0 c.file = f expected_xml = \ """<clipitem id="shot2"> <end>35.0</end> <name>shot2</name> <enabled>True</enabled> <start>1.0</start> <in>0.0</in> <duration>34.0</duration> <out>34.0</out> <file> <duration>34.0</duration> <name>shot2</name> <pathurl>file:///home/eoyilmaz/maya/projects/default/data/shot2.mov</pathurl> </file> </clipitem>""" self.assertEqual(expected_xml, c.to_xml())
def test_to_xml_method_is_working_properly_with_tab_with_argument(self): """testing if the to xml method is working properly """ f = File() f.duration = 34.0 f.name = 'shot2' f.pathurl = 'file:///home/eoyilmaz/maya/projects/default/data/shot2.mov' expected_xml = \ """ <file> <duration>34.0</duration> <name>shot2</name> <pathurl>file:///home/eoyilmaz/maya/projects/default/data/shot2.mov</pathurl> </file>""" self.assertEqual(expected_xml, f.to_xml(indentation=2, pre_indent=2))
def test_to_xml_method_is_working_properly(self): """testing if the to xml method is working properly """ f = File() f.duration = 34 f.name = 'shot2' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/' \ 'shot2.mov' expected_xml = \ """<file id="shot2.mov"> <duration>34</duration> <name>shot2</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov</pathurl> </file>""" self.assertEqual(expected_xml, f.to_xml())
def test_to_xml_method_is_working_properly(self): """testing if the to xml method is working properly """ t = Track() t.enabled = True t.locked = False # clip 1 f = File() f.duration = 34.0 f.name = 'shot2' f.pathurl = 'file:///home/eoyilmaz/maya/projects/default/data/shot2.mov' c = Clip() c.id = 'shot2' c.start = 1.0 c.end = 35.0 c.name = 'shot2' c.enabled = True c.duration = 34.0 c.in_ = 0.0 c.out = 34.0 c.file = f t.clips.append(c) # clip 2 f = File() f.duration = 30.0 f.name = 'shot' f.pathurl = 'file:///home/eoyilmaz/maya/projects/default/data/shot.mov' c = Clip() c.id = 'shot' c.start = 35.0 c.end = 65.0 c.name = 'shot' c.enabled = True c.duration = 30.0 c.in_ = 0.0 c.out = 30.0 c.file = f t.clips.append(c) # clip 3 f = File() f.duration = 45.0 f.name = 'shot1' f.pathurl = 'file:///home/eoyilmaz/maya/projects/default/data/shot1.mov' c = Clip() c.id = 'shot1' c.start = 65.0 c.end = 110.0 c.name = 'shot1' c.enabled = True c.duration = 45.0 c.in_ = 0.0 c.out = 45.0 c.file = f t.clips.append(c) expected_xml = \ """<track> <locked>FALSE</locked> <enabled>TRUE</enabled> <clipitem id="shot2"> <end>35.0</end> <name>shot2</name> <enabled>True</enabled> <start>1.0</start> <in>0.0</in> <duration>34.0</duration> <out>34.0</out> <file> <duration>34.0</duration> <name>shot2</name> <pathurl>file:///home/eoyilmaz/maya/projects/default/data/shot2.mov</pathurl> </file> </clipitem> <clipitem id="shot"> <end>65.0</end> <name>shot</name> <enabled>True</enabled> <start>35.0</start> <in>0.0</in> <duration>30.0</duration> <out>30.0</out> <file> <duration>30.0</duration> <name>shot</name> <pathurl>file:///home/eoyilmaz/maya/projects/default/data/shot.mov</pathurl> </file> </clipitem> <clipitem id="shot1"> <end>110.0</end> <name>shot1</name> <enabled>True</enabled> <start>65.0</start> <in>0.0</in> <duration>45.0</duration> <out>45.0</out> <file> <duration>45.0</duration> <name>shot1</name> <pathurl>file:///home/eoyilmaz/maya/projects/default/data/shot1.mov</pathurl> </file> </clipitem> </track>""" self.assertEqual( expected_xml, t.to_xml() )
def test_optimize_clips_is_working_properly(self): """testing if the optimize_clips method will optimize the clips to use the same file node if the file pathurls are same """ t = Track() t.enabled = True t.locked = False # clip 1 f = File() f.duration = 34 f.name = 'shot2' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov' c = Clip() c.id = 'shot2' c.start = 1 c.end = 35 c.name = 'shot2' c.enabled = True c.duration = 34 c.in_ = 0 c.out = 34 c.file = f t.clips.append(c) # clip 2 f = File() f.duration = 30 f.name = 'shot' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov' c = Clip() c.id = 'shot' c.start = 35 c.end = 65 c.name = 'shot' c.enabled = True c.duration = 30 c.in_ = 0 c.out = 30 c.file = f t.clips.append(c) # clip 3 f = File() f.duration = 45 f.name = 'shot1' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot1.mov' c = Clip() c.id = 'shot1' c.start = 65 c.end = 110 c.name = 'shot1' c.enabled = True c.duration = 45 c.in_ = 0 c.out = 45 c.file = f t.clips.append(c) # check if the file objects are different self.assertNotEqual(t.clips[0].file, t.clips[1].file) self.assertNotEqual(t.clips[0].file, t.clips[2].file) self.assertNotEqual(t.clips[1].file, t.clips[2].file) # now optimize the clips t.optimize_clips() # check if the file[0] and file[1] is the same file node # and the file[2] is different than the others self.assertEqual(t.clips[0].file, t.clips[1].file) self.assertNotEqual(t.clips[0].file, t.clips[2].file) self.assertNotEqual(t.clips[1].file, t.clips[2].file)
def test_to_xml_method_with_optimized_clips_is_working_properly(self): """testing if the to xml method is working properly with the clips are optimized """ t = Track() t.enabled = True t.locked = False # clip 1 f = File() f.duration = 34 f.name = 'shot2' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov' c = Clip() c.id = 'shot2' c.start = 1 c.end = 35 c.name = 'shot2' c.enabled = True c.duration = 34 c.in_ = 0 c.out = 34 c.file = f t.clips.append(c) # clip 2 f = File() f.duration = 30 f.name = 'shot' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov' c = Clip() c.id = 'shot2' c.start = 35 c.end = 65 c.name = 'shot2' c.enabled = True c.duration = 30 c.in_ = 0 c.out = 30 c.file = f t.clips.append(c) # clip 3 f = File() f.duration = 45 f.name = 'shot1' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot1.mov' c = Clip() c.id = 'shot1' c.start = 65 c.end = 110 c.name = 'shot1' c.enabled = True c.duration = 45 c.in_ = 0 c.out = 45 c.file = f t.clips.append(c) expected_xml = \ """<track> <locked>FALSE</locked> <enabled>TRUE</enabled> <clipitem id="shot2"> <end>35</end> <name>shot2</name> <enabled>True</enabled> <start>1</start> <in>0</in> <duration>34</duration> <out>34</out> <file id="shot2.mov"> <duration>34</duration> <name>shot2</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov</pathurl> </file> </clipitem> <clipitem id="shot2 2"> <end>65</end> <name>shot2</name> <enabled>True</enabled> <start>35</start> <in>0</in> <duration>30</duration> <out>30</out> <file id="shot2.mov"/> </clipitem> <clipitem id="shot1"> <end>110</end> <name>shot1</name> <enabled>True</enabled> <start>65</start> <in>0</in> <duration>45</duration> <out>45</out> <file id="shot1.mov"> <duration>45</duration> <name>shot1</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot1.mov</pathurl> </file> </clipitem> </track>""" t.optimize_clips() self.assertEqual(expected_xml, t.to_xml())
def test_to_xml_method_is_working_properly(self): """testing if the to xml method is working properly """ v = Video() v.width = 1024 v.height = 778 t = Track() t.enabled = True t.locked = False v.tracks.append(t) # clip 1 f = File() f.duration = 34 f.name = 'shot2' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov' c = Clip() c.id = 'shot2' c.start = 1 c.end = 35 c.name = 'shot2' c.enabled = True c.duration = 34 c.in_ = 0 c.out = 34 c.file = f t.clips.append(c) # clip 2 f = File() f.duration = 30 f.name = 'shot' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot.mov' c = Clip() c.id = 'shot' c.start = 35 c.end = 65 c.name = 'shot' c.enabled = True c.duration = 30 c.in_ = 0 c.out = 30 c.file = f t.clips.append(c) # clip 3 f = File() f.duration = 45 f.name = 'shot1' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot1.mov' c = Clip() c.id = 'shot1' c.start = 65 c.end = 110 c.name = 'shot1' c.enabled = True c.duration = 45 c.in_ = 0 c.out = 45 c.file = f t.clips.append(c) expected_xml = \ """<video> <format> <samplecharacteristics> <width>1024</width> <height>778</height> </samplecharacteristics> </format> <track> <locked>FALSE</locked> <enabled>TRUE</enabled> <clipitem id="shot2"> <end>35</end> <name>shot2</name> <enabled>True</enabled> <start>1</start> <in>0</in> <duration>34</duration> <out>34</out> <file id="shot2.mov"> <duration>34</duration> <name>shot2</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov</pathurl> </file> </clipitem> <clipitem id="shot"> <end>65</end> <name>shot</name> <enabled>True</enabled> <start>35</start> <in>0</in> <duration>30</duration> <out>30</out> <file id="shot.mov"> <duration>30</duration> <name>shot</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot.mov</pathurl> </file> </clipitem> <clipitem id="shot1"> <end>110</end> <name>shot1</name> <enabled>True</enabled> <start>65</start> <in>0</in> <duration>45</duration> <out>45</out> <file id="shot1.mov"> <duration>45</duration> <name>shot1</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot1.mov</pathurl> </file> </clipitem> </track> </video>""" self.assertEqual( expected_xml, v.to_xml() )
def generate_sequence_structure(self): """Generates a Sequence structure suitable for XML<->EDL conversion :return: Sequence """ import timecode from anima.env.mayaEnv import Maya m = Maya() fps = m.get_fps() # export only the first sequence, ignore others sequencers = self.sequences.get() if len(sequencers) == 0: return None sequencer = sequencers[0] time = pm.PyNode('time1') seq = Sequence() seq.name = str(sequencer.get_sequence_name()) seq.rate = Rate(timebase=str(fps), ntsc=False) seq.timecode = str(timecode.Timecode( framerate=seq.rate.timebase, frames=time.timecodeProductionStart.get() + 1 )) seq.duration = sequencer.duration media = Media() video = Video() media.video = video for shot in sequencer.shots.get(): clip = Clip() clip.id = str(shot.full_shot_name) clip.name = str(shot.full_shot_name) clip.duration = shot.duration + 2 * shot.handle.get() clip.enabled = True clip.start = shot.sequenceStartFrame.get() clip.end = shot.sequenceEndFrame.get() + 1 # clips always start from 0 and includes the shot handle clip.in_ = shot.handle.get() # handle at start clip.out = shot.handle.get() + shot.duration # handle at end clip.type = 'Video' # always video for now f = File() f.name = os.path.splitext( os.path.basename(str(shot.output.get())) )[0] f.duration = shot.duration + 2 * shot.handle.get() f.pathurl = str('file://localhost/%s' % shot.output.get()) clip.file = f track_number = shot.track.get() - 1 # tracks should start from 0 try: track = video.tracks[track_number] except IndexError: track = Track() video.tracks.append(track) track.clips.append(clip) # set video resolution video.width = shot.wResolution.get() video.height = shot.hResolution.get() seq.media = media return seq
def test_to_xml_method_with_optimized_clips_is_working_properly(self): """testing if the to xml method is working properly with the clips are optimized """ t = Track() t.enabled = True t.locked = False # clip 1 f = File() f.duration = 34 f.name = 'shot2' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov' c = Clip() c.id = 'shot2' c.start = 1 c.end = 35 c.name = 'shot2' c.enabled = True c.duration = 34 c.in_ = 0 c.out = 34 c.file = f t.clips.append(c) # clip 2 f = File() f.duration = 30 f.name = 'shot' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov' c = Clip() c.id = 'shot2' c.start = 35 c.end = 65 c.name = 'shot2' c.enabled = True c.duration = 30 c.in_ = 0 c.out = 30 c.file = f t.clips.append(c) # clip 3 f = File() f.duration = 45 f.name = 'shot1' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot1.mov' c = Clip() c.id = 'shot1' c.start = 65 c.end = 110 c.name = 'shot1' c.enabled = True c.duration = 45 c.in_ = 0 c.out = 45 c.file = f t.clips.append(c) expected_xml = \ """<track> <locked>FALSE</locked> <enabled>TRUE</enabled> <clipitem id="shot2"> <end>35</end> <name>shot2</name> <enabled>True</enabled> <start>1</start> <in>0</in> <duration>34</duration> <out>34</out> <file id="shot2.mov"> <duration>34</duration> <name>shot2</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov</pathurl> </file> </clipitem> <clipitem id="shot2 2"> <end>65</end> <name>shot2</name> <enabled>True</enabled> <start>35</start> <in>0</in> <duration>30</duration> <out>30</out> <file id="shot2.mov"/> </clipitem> <clipitem id="shot1"> <end>110</end> <name>shot1</name> <enabled>True</enabled> <start>65</start> <in>0</in> <duration>45</duration> <out>45</out> <file id="shot1.mov"> <duration>45</duration> <name>shot1</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot1.mov</pathurl> </file> </clipitem> </track>""" t.optimize_clips() self.assertEqual( expected_xml, t.to_xml() )
def test_pathurl_argument_is_skipped(self): """testing if the default value will be used when the pathurl argument is skipped """ f = File() self.assertEqual('', f.pathurl)
def test_to_xml_method_is_working_properly(self): """testing if the to xml method is working properly """ v = Video() v.width = 1024 v.height = 778 t = Track() t.enabled = True t.locked = False v.tracks.append(t) # clip 1 f = File() f.duration = 34 f.name = 'shot2' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov' c = Clip() c.id = 'shot2' c.start = 1 c.end = 35 c.name = 'shot2' c.enabled = True c.duration = 34 c.in_ = 0 c.out = 34 c.file = f t.clips.append(c) # clip 2 f = File() f.duration = 30 f.name = 'shot' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot.mov' c = Clip() c.id = 'shot' c.start = 35 c.end = 65 c.name = 'shot' c.enabled = True c.duration = 30 c.in_ = 0 c.out = 30 c.file = f t.clips.append(c) # clip 3 f = File() f.duration = 45 f.name = 'shot1' f.pathurl = 'file://localhost/home/eoyilmaz/maya/projects/default/data/shot1.mov' c = Clip() c.id = 'shot1' c.start = 65 c.end = 110 c.name = 'shot1' c.enabled = True c.duration = 45 c.in_ = 0 c.out = 45 c.file = f t.clips.append(c) expected_xml = \ """<video> <format> <samplecharacteristics> <width>1024</width> <height>778</height> </samplecharacteristics> </format> <track> <locked>FALSE</locked> <enabled>TRUE</enabled> <clipitem id="shot2"> <end>35</end> <name>shot2</name> <enabled>True</enabled> <start>1</start> <in>0</in> <duration>34</duration> <out>34</out> <file id="shot2.mov"> <duration>34</duration> <name>shot2</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov</pathurl> </file> </clipitem> <clipitem id="shot"> <end>65</end> <name>shot</name> <enabled>True</enabled> <start>35</start> <in>0</in> <duration>30</duration> <out>30</out> <file id="shot.mov"> <duration>30</duration> <name>shot</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot.mov</pathurl> </file> </clipitem> <clipitem id="shot1"> <end>110</end> <name>shot1</name> <enabled>True</enabled> <start>65</start> <in>0</in> <duration>45</duration> <out>45</out> <file id="shot1.mov"> <duration>45</duration> <name>shot1</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot1.mov</pathurl> </file> </clipitem> </track> </video>""" self.assertEqual(expected_xml, v.to_xml())
def test_to_metafuze_xml_is_working_properly(self): """testing if to_metafuze_xml method is working properly """ s = Sequence() s.duration = 109 s.name = 'SEQ001_HSNI_003' s.timecode = '00:00:00:00' r = Rate() s.rate = r r.ntsc = False r.timebase = '24' m = Media() s.media = m v = Video() v.width = 1024 v.height = 778 m.video = v t = Track() t.enabled = True t.locked = False v.tracks.append(t) # clip 1 f = File() f.duration = 34 f.name = 'SEQ001_HSNI_003_0010_v001' f.pathurl = 'file://localhost/tmp/SEQ001_HSNI_003_0010_v001.mov' c = Clip() c.id = '0010' c.start = 1 c.end = 35 c.name = 'SEQ001_HSNI_003_0010_v001' c.enabled = True c.duration = 34 c.in_ = 0 c.out = 34 c.file = f t.clips.append(c) # clip 2 f = File() f.duration = 30 f.name = 'SEQ001_HSNI_003_0020_v001' f.pathurl = 'file://localhost/tmp/SEQ001_HSNI_003_0020_v001.mov' c = Clip() c.id = '0020' c.start = 35 c.end = 65 c.name = 'SEQ001_HSNI_003_0020_v001' c.enabled = True c.duration = 30 c.in_ = 0 c.out = 30 c.file = f t.clips.append(c) # clip 3 f = File() f.duration = 45 f.name = 'SEQ001_HSNI_003_0030_v001' f.pathurl = 'file://localhost/tmp/SEQ001_HSNI_003_0030_v001.mov' c = Clip() c.id = '0030' c.start = 65 c.end = 110 c.name = 'SEQ001_HSNI_003_0030_v001' c.enabled = True c.duration = 45 c.in_ = 0 c.out = 45 c.file = f t.clips.append(c) expected_xmls = [ """<?xml version='1.0' encoding='UTF-8'?> <MetaFuze_BatchTranscode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MetaFuzeBatchTranscode.xsd"> <Configuration> <Local>8</Local> <Remote>8</Remote> </Configuration> <Group> <FileList> <File>\\tmp\\SEQ001_HSNI_003_0010_v001.mov</File> </FileList> <Transcode> <Version>1.0</Version> <File>\\tmp\\SEQ001_HSNI_003_0010_v001.mxf</File> <ClipName>SEQ001_HSNI_003_0010_v001</ClipName> <ProjectName>SEQ001_HSNI_003</ProjectName> <TapeName>SEQ001_HSNI_003_0010_v001</TapeName> <TC_Start>00:00:00:00</TC_Start> <DropFrame>false</DropFrame> <EdgeTC>** TimeCode N/A **</EdgeTC> <FilmType>35.4</FilmType> <KN_Start>AAAAAAAA-0000+00</KN_Start> <Frames>33</Frames> <Width>1024</Width> <Height>778</Height> <PixelRatio>1.0000</PixelRatio> <UseFilmInfo>false</UseFilmInfo> <UseTapeInfo>true</UseTapeInfo> <AudioChannelCount>0</AudioChannelCount> <UseMXFAudio>false</UseMXFAudio> <UseWAVAudio>false</UseWAVAudio> <SrcBitsPerChannel>8</SrcBitsPerChannel> <OutputPreset>DNxHD 36</OutputPreset> <OutputPreset> <Version>2.0</Version> <Name>DNxHD 36</Name> <ColorModel>YCC 709</ColorModel> <BitDepth>8</BitDepth> <Format>1080 24p</Format> <Compression>DNxHD 36</Compression> <Conversion>Letterbox (center)</Conversion> <VideoFileType>.mxf</VideoFileType> <IsDefault>false</IsDefault> </OutputPreset> <Eye></Eye> <Scene></Scene> <Comment></Comment> </Transcode> </Group> </MetaFuze_BatchTranscode>""", """<?xml version='1.0' encoding='UTF-8'?> <MetaFuze_BatchTranscode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MetaFuzeBatchTranscode.xsd"> <Configuration> <Local>8</Local> <Remote>8</Remote> </Configuration> <Group> <FileList> <File>\\tmp\\SEQ001_HSNI_003_0020_v001.mov</File> </FileList> <Transcode> <Version>1.0</Version> <File>\\tmp\\SEQ001_HSNI_003_0020_v001.mxf</File> <ClipName>SEQ001_HSNI_003_0020_v001</ClipName> <ProjectName>SEQ001_HSNI_003</ProjectName> <TapeName>SEQ001_HSNI_003_0020_v001</TapeName> <TC_Start>00:00:00:00</TC_Start> <DropFrame>false</DropFrame> <EdgeTC>** TimeCode N/A **</EdgeTC> <FilmType>35.4</FilmType> <KN_Start>AAAAAAAA-0000+00</KN_Start> <Frames>29</Frames> <Width>1024</Width> <Height>778</Height> <PixelRatio>1.0000</PixelRatio> <UseFilmInfo>false</UseFilmInfo> <UseTapeInfo>true</UseTapeInfo> <AudioChannelCount>0</AudioChannelCount> <UseMXFAudio>false</UseMXFAudio> <UseWAVAudio>false</UseWAVAudio> <SrcBitsPerChannel>8</SrcBitsPerChannel> <OutputPreset>DNxHD 36</OutputPreset> <OutputPreset> <Version>2.0</Version> <Name>DNxHD 36</Name> <ColorModel>YCC 709</ColorModel> <BitDepth>8</BitDepth> <Format>1080 24p</Format> <Compression>DNxHD 36</Compression> <Conversion>Letterbox (center)</Conversion> <VideoFileType>.mxf</VideoFileType> <IsDefault>false</IsDefault> </OutputPreset> <Eye></Eye> <Scene></Scene> <Comment></Comment> </Transcode> </Group> </MetaFuze_BatchTranscode>""", """<?xml version='1.0' encoding='UTF-8'?> <MetaFuze_BatchTranscode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="MetaFuzeBatchTranscode.xsd"> <Configuration> <Local>8</Local> <Remote>8</Remote> </Configuration> <Group> <FileList> <File>\\tmp\\SEQ001_HSNI_003_0030_v001.mov</File> </FileList> <Transcode> <Version>1.0</Version> <File>\\tmp\\SEQ001_HSNI_003_0030_v001.mxf</File> <ClipName>SEQ001_HSNI_003_0030_v001</ClipName> <ProjectName>SEQ001_HSNI_003</ProjectName> <TapeName>SEQ001_HSNI_003_0030_v001</TapeName> <TC_Start>00:00:00:00</TC_Start> <DropFrame>false</DropFrame> <EdgeTC>** TimeCode N/A **</EdgeTC> <FilmType>35.4</FilmType> <KN_Start>AAAAAAAA-0000+00</KN_Start> <Frames>44</Frames> <Width>1024</Width> <Height>778</Height> <PixelRatio>1.0000</PixelRatio> <UseFilmInfo>false</UseFilmInfo> <UseTapeInfo>true</UseTapeInfo> <AudioChannelCount>0</AudioChannelCount> <UseMXFAudio>false</UseMXFAudio> <UseWAVAudio>false</UseWAVAudio> <SrcBitsPerChannel>8</SrcBitsPerChannel> <OutputPreset>DNxHD 36</OutputPreset> <OutputPreset> <Version>2.0</Version> <Name>DNxHD 36</Name> <ColorModel>YCC 709</ColorModel> <BitDepth>8</BitDepth> <Format>1080 24p</Format> <Compression>DNxHD 36</Compression> <Conversion>Letterbox (center)</Conversion> <VideoFileType>.mxf</VideoFileType> <IsDefault>false</IsDefault> </OutputPreset> <Eye></Eye> <Scene></Scene> <Comment></Comment> </Transcode> </Group> </MetaFuze_BatchTranscode>""", ] result = s.to_metafuze_xml() self.maxDiff = None self.assertEqual( expected_xmls[0], result[0] ) self.assertEqual( expected_xmls[1], result[1] ) self.assertEqual( expected_xmls[2], result[2] )
def test_to_xml_method_is_working_properly(self): """testing if the to xml method is working properly """ s = Sequence() s.duration = 109 s.name = 'previs_edit_v001' s.rate = Rate(timebase='24', ntsc=False) s.timecode = '00:00:00:00' m = Media() s.media = m v = Video() v.width = 1024 v.height = 778 m.video = v t = Track() t.enabled = True t.locked = False v.tracks.append(t) # clip 1 f = File() f.duration = 34 f.name = 'shot2' f.pathurl = 'file:///home/eoyilmaz/maya/projects/default/data/shot2.mov' c = Clip() c.id = 'shot2' c.start = 1 c.end = 35 c.name = 'shot2' c.enabled = True c.duration = 34 c.in_ = 0 c.out = 34 c.file = f t.clips.append(c) # clip 2 f = File() f.duration = 30 f.name = 'shot' f.pathurl = 'file:///home/eoyilmaz/maya/projects/default/data/shot.mov' c = Clip() c.id = 'shot' c.start = 35 c.end = 65 c.name = 'shot' c.enabled = True c.duration = 30 c.in_ = 0 c.out = 30 c.file = f t.clips.append(c) # clip 3 f = File() f.duration = 45 f.name = 'shot1' f.pathurl = 'file:///home/eoyilmaz/maya/projects/default/data/shot1.mov' c = Clip() c.id = 'shot1' c.start = 65 c.end = 110 c.name = 'shot1' c.enabled = True c.duration = 45 c.in_ = 0 c.out = 45 c.file = f t.clips.append(c) expected_xml = \ """<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xmeml> <xmeml version="5"> <sequence> <duration>109</duration> <name>previs_edit_v001</name> <rate> <timebase>24</timebase> <ntsc>FALSE</ntsc> </rate> <timecode> <string>00:00:00:00</string> </timecode> <media> <video> <format> <samplecharacteristics> <width>1024</width> <height>778</height> </samplecharacteristics> </format> <track> <locked>FALSE</locked> <enabled>TRUE</enabled> <clipitem id="shot2"> <end>35</end> <name>shot2</name> <enabled>True</enabled> <start>1</start> <in>0</in> <duration>34</duration> <out>34</out> <file id="shot2.mov"> <duration>34</duration> <name>shot2</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot2.mov</pathurl> </file> </clipitem> <clipitem id="shot"> <end>65</end> <name>shot</name> <enabled>True</enabled> <start>35</start> <in>0</in> <duration>30</duration> <out>30</out> <file id="shot.mov"> <duration>30</duration> <name>shot</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot.mov</pathurl> </file> </clipitem> <clipitem id="shot1"> <end>110</end> <name>shot1</name> <enabled>True</enabled> <start>65</start> <in>0</in> <duration>45</duration> <out>45</out> <file id="shot1.mov"> <duration>45</duration> <name>shot1</name> <pathurl>file://localhost/home/eoyilmaz/maya/projects/default/data/shot1.mov</pathurl> </file> </clipitem> </track> </video> </media> </sequence> </xmeml>""" self.assertEqual( expected_xml, s.to_xml() )