Adapting existing tests to new parser

This commit is contained in:
Jamie Hardt
2021-06-01 23:30:30 -07:00
parent 8654fdb847
commit 8d4058d026
4 changed files with 50 additions and 66 deletions

View File

@@ -81,6 +81,10 @@ class DocParserVisitor(NodeVisitor):
clips=clips clips=clips
) )
@staticmethod
def visit_frame_rate(node, _):
return node.text
@staticmethod @staticmethod
def visit_track_listing(_, visited_children): def visit_track_listing(_, visited_children):
return visited_children[1] return visited_children[1]

View File

@@ -7,11 +7,12 @@ protools_text_export_grammar = Grammar(
"SAMPLE RATE:" fs float_value rs "SAMPLE RATE:" fs float_value rs
"BIT DEPTH:" fs integer_value "-bit" rs "BIT DEPTH:" fs integer_value "-bit" rs
"SESSION START TIMECODE:" fs string_value rs "SESSION START TIMECODE:" fs string_value rs
"TIMECODE FORMAT:" fs float_value " Drop"? " Frame" rs "TIMECODE FORMAT:" fs frame_rate " Drop"? " Frame" rs
"# OF AUDIO TRACKS:" fs integer_value rs "# OF AUDIO TRACKS:" fs integer_value rs
"# OF AUDIO CLIPS:" fs integer_value rs "# OF AUDIO CLIPS:" fs integer_value rs
"# OF AUDIO FILES:" fs integer_value rs block_ending "# OF AUDIO FILES:" fs integer_value rs block_ending
frame_rate = ("60" / "59.94" / "30" / "29.97" / "24" / "23.976")
files_section = files_header files_column_header file_record* block_ending files_section = files_header files_column_header file_record* block_ending
files_header = "F I L E S I N S E S S I O N" rs files_header = "F I L E S I N S E S S I O N" rs
files_column_header = "Filename" isp fs "Location" rs files_column_header = "Filename" isp fs "Location" rs

View File

@@ -36,8 +36,8 @@ class TagCompiler:
track_comment_tags: dict, track_comment_tags: dict,
timespan_tags: dict, timespan_tags: dict,
marker_tags: dict, session_tags: dict): marker_tags: dict, session_tags: dict):
effective_tags = dict()
effective_tags = session_tags effective_tags.update(session_tags)
effective_tags.update(marker_tags) effective_tags.update(marker_tags)
effective_tags.update(timespan_tags) effective_tags.update(timespan_tags)
effective_tags.update(track_comment_tags) effective_tags.update(track_comment_tags)
@@ -99,7 +99,7 @@ class TagCompiler:
@staticmethod @staticmethod
def _time_span_tags(at_time: Fraction, applicable_spans) -> dict: def _time_span_tags(at_time: Fraction, applicable_spans) -> dict:
retval = dict() retval = dict()
for tags in [a[0] for a in applicable_spans if a.start <= at_time <= a.finish]: for tags in [a[0] for a in applicable_spans if a[1] <= at_time <= a[2]]:
retval.update(tags) retval.update(tags)
return retval return retval

View File

@@ -1,5 +1,5 @@
import unittest import unittest
import ptulsconv from ptulsconv.docparser import doc_entity, doc_parser_visitor, ptuls_grammar, tag_compiler
import os.path import os.path
@@ -8,83 +8,62 @@ class TaggingIntegratedTests(unittest.TestCase):
def test_event_list(self): def test_event_list(self):
with open(self.path, 'r') as f: with open(self.path, 'r') as f:
visitor = ptulsconv.DictionaryParserVisitor() document_ast = ptuls_grammar.protools_text_export_grammar.parse(f.read())
result = ptulsconv.protools_text_export_grammar.parse(f.read()) document: doc_entity.SessionDescriptor = doc_parser_visitor.DocParserVisitor().visit(document_ast)
parsed: dict = visitor.visit(result) compiler = tag_compiler.TagCompiler()
compiler.session = document
tcxform = ptulsconv.transformations.TimecodeInterpreter() events = list(compiler.compile_events())
tagxform = ptulsconv.transformations.TagInterpreter(show_progress=False,
ignore_muted=True,
log_output=False)
parsed = tcxform.transform(parsed) self.assertEqual(9, len(events))
parsed = tagxform.transform(parsed) self.assertEqual("Clip Name", events[0].clip_name)
self.assertEqual("Lorem ipsum", events[1].clip_name)
self.assertEqual(9, len(parsed['events'])) self.assertEqual("Dolor sic amet the rain in spain", events[2].clip_name)
self.assertEqual("Clip Name", parsed['events'][0]['PT.Clip.Name']) self.assertEqual("A B C", events[3].clip_name)
self.assertEqual("Lorem ipsum", parsed['events'][1]['PT.Clip.Name']) self.assertEqual("Silver Bridge", events[4].clip_name)
self.assertEqual("Dolor sic amet the rain in spain", parsed['events'][2]['PT.Clip.Name']) self.assertEqual("Region 02", events[5].clip_name)
self.assertEqual("A B C", parsed['events'][3]['PT.Clip.Name']) self.assertEqual("Region 12", events[6].clip_name)
self.assertEqual("Silver Bridge", parsed['events'][4]['PT.Clip.Name']) self.assertEqual("Region 22", events[7].clip_name)
self.assertEqual("Region 02", parsed['events'][5]['PT.Clip.Name']) self.assertEqual("Region 04", events[8].clip_name)
self.assertEqual("Region 12", parsed['events'][6]['PT.Clip.Name'])
self.assertEqual("Region 22", parsed['events'][7]['PT.Clip.Name'])
self.assertEqual("Region 04", parsed['events'][8]['PT.Clip.Name'])
def test_append(self): def test_append(self):
with open(self.path, 'r') as f: with open(self.path, 'r') as f:
visitor = ptulsconv.DictionaryParserVisitor() document_ast = ptuls_grammar.protools_text_export_grammar.parse(f.read())
result = ptulsconv.protools_text_export_grammar.parse(f.read()) document: doc_entity.SessionDescriptor = doc_parser_visitor.DocParserVisitor().visit(document_ast)
parsed: dict = visitor.visit(result) compiler = tag_compiler.TagCompiler()
compiler.session = document
tcxform = ptulsconv.transformations.TimecodeInterpreter() events = list(compiler.compile_events())
tagxform = ptulsconv.transformations.TagInterpreter(show_progress=False,
ignore_muted=True,
log_output=False)
parsed = tcxform.transform(parsed) self.assertTrue(len(events) > 2)
parsed = tagxform.transform(parsed)
self.assertTrue(len(parsed['events']) > 2) self.assertEqual("Dolor sic amet the rain in spain", events[2].clip_name)
self.assertEqual("Dolor sic amet the rain in spain", self.assertEqual(document.header.convert_timecode("01:00:10:00"), events[2].start)
parsed['events'][2]['PT.Clip.Name']) self.assertEqual(document.header.convert_timecode("01:00:25:00"), events[2].finish)
self.assertTrue("01:00:10:00", parsed['events'][2]['PT.Clip.Start']) self.assertIn('X', events[2].tags.keys())
self.assertTrue("01:00:25:00", parsed['events'][2]['PT.Clip.Finish']) self.assertIn('ABC', events[2].tags.keys())
self.assertTrue(240, parsed['events'][2]['PT.Clip.Start_Frames']) self.assertIn('A', events[2].tags.keys())
self.assertTrue(600, parsed['events'][2]['PT.Clip.Finish_Frames']) self.assertEqual('302', events[2].tags['X'])
self.assertEqual('ABC', events[2].tags['ABC'])
self.assertIn('X', parsed['events'][2].keys()) self.assertEqual('1', events[2].tags['A'])
self.assertIn('ABC', parsed['events'][2].keys())
self.assertIn('A', parsed['events'][2].keys())
self.assertEqual('302', parsed['events'][2]['X'])
self.assertEqual('ABC', parsed['events'][2]['ABC'])
self.assertEqual('1', parsed['events'][2]['A'])
def test_successive_appends(self): def test_successive_appends(self):
with open(self.path, 'r') as f: with open(self.path, 'r') as f:
visitor = ptulsconv.DictionaryParserVisitor() document_ast = ptuls_grammar.protools_text_export_grammar.parse(f.read())
result = ptulsconv.protools_text_export_grammar.parse(f.read()) document: doc_entity.SessionDescriptor = doc_parser_visitor.DocParserVisitor().visit(document_ast)
parsed: dict = visitor.visit(result) compiler = tag_compiler.TagCompiler()
compiler.session = document
tcxform = ptulsconv.transformations.TimecodeInterpreter() events = list(compiler.compile_events())
tagxform = ptulsconv.transformations.TagInterpreter(show_progress=False,
ignore_muted=True,
log_output=False)
parsed = tcxform.transform(parsed) self.assertTrue(len(events) > 3)
parsed = tagxform.transform(parsed)
self.assertTrue(len(parsed['events']) > 3) self.assertEqual("A B C", events[3].clip_name)
self.assertEqual("A B C", self.assertEqual(document.header.convert_timecode("01:00:15:00"), events[3].start)
parsed['events'][3]['PT.Clip.Name']) self.assertEqual(document.header.convert_timecode("01:00:45:00"), events[3].finish)
self.assertTrue("01:00:15:00", parsed['events'][3]['PT.Clip.Start'])
self.assertTrue("01:00:45:00", parsed['events'][3]['PT.Clip.Finish'])
self.assertTrue(80, parsed['events'][3]['PT.Clip.Start_Frames'])
self.assertTrue(1080, parsed['events'][3]['PT.Clip.Finish_Frames'])
if __name__ == '__main__': if __name__ == '__main__':