Bug ruff 2026 (#19)

* Updated Ruff to v0.16 and fixed for default checks 

* Nudge version and removed license classifier

---------

Co-authored-by: Jamie Hardt <jamie@squad51.us>
This commit is contained in:
Jamie Hardt
2026-09-19 16:35:56 -07:00
committed by GitHub
parent 2fc8a653cd
commit e0e3024280
39 changed files with 2031 additions and 1582 deletions
+24 -21
View File
@@ -1,38 +1,41 @@
import unittest
from ptulsconv.docparser.tag_compiler import Event
from ptulsconv.docparser.adr_entity import ADRLine, make_entity
from fractions import Fraction
from ptulsconv.docparser.adr_entity import ADRLine, make_entity
from ptulsconv.docparser.tag_compiler import Event
class TestADREntity(unittest.TestCase):
def test_event2line(self):
tags = {
'Ver': '1.0',
'Actor': "Bill",
'CN': "1",
'QN': 'J1001',
'R': 'Noise',
'EFF': 'EFF'
"Ver": "1.0",
"Actor": "Bill",
"CN": "1",
"QN": "J1001",
"R": "Noise",
"EFF": "EFF",
}
event = Event(clip_name='"This is a test." (sotto voce)',
track_name="Justin",
session_name="Test Project",
tags=tags,
start=Fraction(0, 1), finish=Fraction(1, 1))
event = Event(
clip_name='"This is a test." (sotto voce)',
track_name="Justin",
session_name="Test Project",
tags=tags,
start=Fraction(0, 1),
finish=Fraction(1, 1),
)
line = make_entity(event)
self.assertIsInstance(line, ADRLine)
self.assertEqual('Bill', line.actor_name)
self.assertEqual('Justin', line.character_name)
self.assertEqual("Bill", line.actor_name)
self.assertEqual("Justin", line.character_name)
self.assertEqual('"This is a test." (sotto voce)', line.prompt)
self.assertEqual('Noise', line.reason)
self.assertEqual('J1001', line.cue_number)
self.assertEqual("Noise", line.reason)
self.assertEqual("J1001", line.cue_number)
self.assertEqual(True, line.effort)
self.assertEqual('Test Project', line.title)
self.assertEqual('1.0', line.version)
self.assertEqual("Test Project", line.title)
self.assertEqual("1.0", line.version)
if __name__ == '__main__':
if __name__ == "__main__":
unittest.main()
+10 -4
View File
@@ -1,7 +1,9 @@
import unittest
from ptulsconv import broadcast_timecode
from fractions import Fraction
from ptulsconv import broadcast_timecode
class TestBroadcastTimecode(unittest.TestCase):
def test_basic_to_frame_count(self):
r1 = "01:00:00:00"
@@ -66,7 +68,9 @@ class TestBroadcastTimecode(unittest.TestCase):
def test_seconds_to_smpte(self):
secs = Fraction(25, 24)
frame_duration = Fraction(1, 24)
tc_format = broadcast_timecode.TimecodeFormat(frame_duration=frame_duration, logical_fps=24, drop_frame=False)
tc_format = broadcast_timecode.TimecodeFormat(
frame_duration=frame_duration, logical_fps=24, drop_frame=False
)
s1 = tc_format.seconds_to_smpte(secs)
self.assertEqual(s1, "00:00:01:01")
@@ -77,9 +81,11 @@ class TestBroadcastTimecode(unittest.TestCase):
def test_unparseable_timecode(self):
time_str = "11.32-19"
s1 = broadcast_timecode.smpte_to_frame_count(time_str, frames_per_logical_second=24)
s1 = broadcast_timecode.smpte_to_frame_count(
time_str, frames_per_logical_second=24
)
self.assertIsNone(s1)
if __name__ == '__main__':
if __name__ == "__main__":
unittest.main()
+14 -12
View File
@@ -1,24 +1,26 @@
import unittest
from ptulsconv.docparser.doc_entity import HeaderDescriptor
from fractions import Fraction
from ptulsconv.docparser.doc_entity import HeaderDescriptor
class DocParserTestCase(unittest.TestCase):
def test_header(self):
header = HeaderDescriptor(session_name="Test Session",
sample_rate=48000.0,
bit_depth=24,
start_timecode="00:59:52:00",
timecode_format="30",
timecode_drop_frame=False,
count_audio_tracks=0,
count_clips=0,
count_files=0)
header = HeaderDescriptor(
session_name="Test Session",
sample_rate=48000.0,
bit_depth=24,
start_timecode="00:59:52:00",
timecode_format="30",
timecode_drop_frame=False,
count_audio_tracks=0,
count_clips=0,
count_files=0,
)
self.assertEqual(header.session_name, "Test Session")
self.assertEqual(header.start_time, Fraction((59 * 60 + 52) * 30, 30))
if __name__ == '__main__':
if __name__ == "__main__":
unittest.main()
+2 -2
View File
@@ -1,6 +1,8 @@
import unittest
from ptulsconv import footage
class TestFootage(unittest.TestCase):
def test_basic_footage(self):
r1 = "90+0"
@@ -11,5 +13,3 @@ class TestFootage(unittest.TestCase):
r1 = "1+8"
f1 = footage.footage_to_seconds(r1)
self.assertEqual(float(f1 or 0), 1.0)
+116 -82
View File
@@ -1,12 +1,11 @@
import unittest
from fractions import Fraction
import ptulsconv.docparser.tag_compiler
from ptulsconv.docparser import doc_entity
from fractions import Fraction
class TestTagCompiler(unittest.TestCase):
def test_one_track(self):
c = ptulsconv.docparser.tag_compiler.TagCompiler()
@@ -16,31 +15,48 @@ class TestTagCompiler(unittest.TestCase):
events = c.compile_events()
event1 = next(events)
self.assertEqual('This is clip 1', event1.clip_name)
self.assertEqual('Track 1', event1.track_name)
self.assertEqual('Test Session', event1.session_name)
self.assertEqual(dict(A='A',
Color='Blue',
Ver='1.1',
Mode='2',
Comment='This is some text in the comments',
Part='1'), event1.tags)
self.assertEqual("This is clip 1", event1.clip_name)
self.assertEqual("Track 1", event1.track_name)
self.assertEqual("Test Session", event1.session_name)
self.assertEqual(
dict(
A="A",
Color="Blue",
Ver="1.1",
Mode="2",
Comment="This is some text in the comments",
Part="1",
),
event1.tags,
)
self.assertEqual(Fraction(3600, 1), event1.start)
event2 = next(events)
self.assertEqual("This is the second clip ...and this is the last clip", event2.clip_name)
self.assertEqual('Track 1', event2.track_name)
self.assertEqual('Test Session', event2.session_name)
self.assertEqual(dict(R='Noise', A='A', B='B',
Color='Red',
Comment='This is some text in the comments',
N='1', Mode='2',
Ver='1.1',
M1='M1',
Part='2'), event2.tags)
self.assertEqual(
"This is the second clip ...and this is the last clip", event2.clip_name
)
self.assertEqual("Track 1", event2.track_name)
self.assertEqual("Test Session", event2.session_name)
self.assertEqual(
dict(
R="Noise",
A="A",
B="B",
Color="Red",
Comment="This is some text in the comments",
N="1",
Mode="2",
Ver="1.1",
M1="M1",
Part="2",
),
event2.tags,
)
self.assertEqual(c.session.header.convert_timecode('01:00:01:10'), event2.start)
self.assertEqual(c.session.header.convert_timecode('01:00:03:00'), event2.finish)
self.assertEqual(c.session.header.convert_timecode("01:00:01:10"), event2.start)
self.assertEqual(
c.session.header.convert_timecode("01:00:03:00"), event2.finish
)
self.assertIsNone(next(events, None))
@@ -51,76 +67,94 @@ class TestTagCompiler(unittest.TestCase):
all_tags = c.compile_tag_list()
self.assertTrue(all_tags['Mode'] == {'2', '1'})
self.assertTrue(all_tags["Mode"] == {"2", "1"})
@staticmethod
def make_test_session():
test_header = doc_entity.HeaderDescriptor(session_name="Test Session $Ver=1.1",
sample_rate=48000,
timecode_format="24",
timecode_drop_frame=False,
bit_depth=24,
start_timecode='00:59:00:00',
count_audio_tracks=1,
count_clips=3,
count_files=0
)
test_header = doc_entity.HeaderDescriptor(
session_name="Test Session $Ver=1.1",
sample_rate=48000,
timecode_format="24",
timecode_drop_frame=False,
bit_depth=24,
start_timecode="00:59:00:00",
count_audio_tracks=1,
count_clips=3,
count_files=0,
)
test_clips = [
doc_entity.TrackClipDescriptor(channel=1, event=1,
clip_name='This is clip 1 {Color=Blue} $Mode=2',
start_time='01:00:00:00',
finish_time='01:00:01:03',
duration='00:00:01:03',
state='Unmuted',
timestamp=None),
doc_entity.TrackClipDescriptor(channel=1, event=2,
clip_name='This is the second clip {R=Noise} [B] $Mode=2',
start_time='01:00:01:10',
finish_time='01:00:02:00',
duration='00:00:00:14',
state='Unmuted',
timestamp=None),
doc_entity.TrackClipDescriptor(channel=1, event=3,
clip_name='& ...and this is the last clip $N=1 $Mode=2',
start_time='01:00:02:00',
finish_time='01:00:03:00',
duration='00:00:01:00',
state='Unmuted',
timestamp=None),
doc_entity.TrackClipDescriptor(
channel=1,
event=1,
clip_name="This is clip 1 {Color=Blue} $Mode=2",
start_time="01:00:00:00",
finish_time="01:00:01:03",
duration="00:00:01:03",
state="Unmuted",
timestamp=None,
),
doc_entity.TrackClipDescriptor(
channel=1,
event=2,
clip_name="This is the second clip {R=Noise} [B] $Mode=2",
start_time="01:00:01:10",
finish_time="01:00:02:00",
duration="00:00:00:14",
state="Unmuted",
timestamp=None,
),
doc_entity.TrackClipDescriptor(
channel=1,
event=3,
clip_name="& ...and this is the last clip $N=1 $Mode=2",
start_time="01:00:02:00",
finish_time="01:00:03:00",
duration="00:00:01:00",
state="Unmuted",
timestamp=None,
),
]
test_track = doc_entity.TrackDescriptor(
index=0,
name="Track 1 [A] {Color=Red} $Mode=1",
comments="{Comment=This is some text in the comments}",
user_delay_samples=0,
plugins=[],
state=[],
clips=test_clips)
comments="{Comment=This is some text in the comments}",
user_delay_samples=0,
plugins=[],
state=[],
clips=test_clips,
)
markers = [doc_entity.MarkerDescriptor(number=1,
location="01:00:00:00",
time_reference=48000 * 3600,
units="Samples",
name="Marker 1 {Part=1}",
comments="", track_marker=False,
),
doc_entity.MarkerDescriptor(number=2,
location="01:00:01:00",
time_reference=48000 * 3601,
units="Samples",
name="Marker 2 {Part=2}",
comments="[M1]", track_marker=False,
),
]
markers = [
doc_entity.MarkerDescriptor(
number=1,
location="01:00:00:00",
time_reference=48000 * 3600,
units="Samples",
name="Marker 1 {Part=1}",
comments="",
track_marker=False,
),
doc_entity.MarkerDescriptor(
number=2,
location="01:00:01:00",
time_reference=48000 * 3601,
units="Samples",
name="Marker 2 {Part=2}",
comments="[M1]",
track_marker=False,
),
]
test_session = doc_entity.SessionDescriptor(header=test_header,
tracks=[test_track],
clips=[],
files=[],
markers=markers,
plugins=[])
test_session = doc_entity.SessionDescriptor(
header=test_header,
tracks=[test_track],
clips=[],
files=[],
markers=markers,
plugins=[],
)
return test_session
if __name__ == '__main__':
if __name__ == "__main__":
unittest.main()
+6 -6
View File
@@ -1,6 +1,6 @@
import unittest
from ptulsconv.docparser.tagged_string_parser_visitor import parse_tags, TagPreModes
from ptulsconv.docparser.tagged_string_parser_visitor import TagPreModes, parse_tags
class TestTagInterpreter(unittest.TestCase):
@@ -17,12 +17,12 @@ class TestTagInterpreter(unittest.TestCase):
def test_tags(self):
s1 = parse_tags("{a=100}")
self.assertEqual(s1.tag_dict['a'], "100")
self.assertEqual(s1.tag_dict["a"], "100")
s2 = parse_tags("{b=This is a test} [option] $X=9")
self.assertEqual(s2.tag_dict['b'], 'This is a test')
self.assertEqual(s2.tag_dict['option'], 'option')
self.assertEqual(s2.tag_dict['X'], "9")
self.assertEqual(s2.tag_dict["b"], "This is a test")
self.assertEqual(s2.tag_dict["option"], "option")
self.assertEqual(s2.tag_dict["X"], "9")
def test_modes(self):
s1 = parse_tags("@ Monday Tuesday {a=1}")
@@ -35,5 +35,5 @@ class TestTagInterpreter(unittest.TestCase):
self.assertEqual(s3.mode, TagPreModes.APPEND)
if __name__ == '__main__':
if __name__ == "__main__":
unittest.main()
+35 -20
View File
@@ -1,15 +1,18 @@
import unittest
from ptulsconv.docparser import doc_entity, pt_doc_parser, tag_compiler
import os.path
import unittest
from ptulsconv.docparser import doc_entity, pt_doc_parser, tag_compiler
class TaggingIntegratedTests(unittest.TestCase):
path = os.path.dirname(__file__) + '/../export_cases/Tag Tests/Tag Tests.txt'
path = os.path.dirname(__file__) + "/../export_cases/Tag Tests/Tag Tests.txt"
def test_event_list(self):
with open(self.path, 'r') as f:
with open(self.path, "r") as f:
document_ast = pt_doc_parser.protools_text_export_grammar.parse(f.read())
document: doc_entity.SessionDescriptor = pt_doc_parser.DocParserVisitor().visit(document_ast)
document: doc_entity.SessionDescriptor = (
pt_doc_parser.DocParserVisitor().visit(document_ast)
)
compiler = tag_compiler.TagCompiler()
compiler.session = document
@@ -27,9 +30,11 @@ class TaggingIntegratedTests(unittest.TestCase):
self.assertEqual("Region 04", events[8].clip_name)
def test_append(self):
with open(self.path, 'r') as f:
with open(self.path, "r") as f:
document_ast = pt_doc_parser.protools_text_export_grammar.parse(f.read())
document: doc_entity.SessionDescriptor = pt_doc_parser.DocParserVisitor().visit(document_ast)
document: doc_entity.SessionDescriptor = (
pt_doc_parser.DocParserVisitor().visit(document_ast)
)
compiler = tag_compiler.TagCompiler()
compiler.session = document
@@ -39,20 +44,26 @@ class TaggingIntegratedTests(unittest.TestCase):
self.assertEqual("Dolor sic amet the rain in spain", events[2].clip_name)
self.assertEqual(document.header.convert_timecode("01:00:10:00"), events[2].start)
self.assertEqual(document.header.convert_timecode("01:00:25:00"), events[2].finish)
self.assertEqual(
document.header.convert_timecode("01:00:10:00"), events[2].start
)
self.assertEqual(
document.header.convert_timecode("01:00:25:00"), events[2].finish
)
self.assertIn('X', events[2].tags.keys())
self.assertIn('ABC', events[2].tags.keys())
self.assertIn('A', events[2].tags.keys())
self.assertEqual('302', events[2].tags['X'])
self.assertEqual('ABC', events[2].tags['ABC'])
self.assertEqual('1', events[2].tags['A'])
self.assertIn("X", events[2].tags.keys())
self.assertIn("ABC", events[2].tags.keys())
self.assertIn("A", events[2].tags.keys())
self.assertEqual("302", events[2].tags["X"])
self.assertEqual("ABC", events[2].tags["ABC"])
self.assertEqual("1", events[2].tags["A"])
def test_successive_appends(self):
with open(self.path, 'r') as f:
with open(self.path, "r") as f:
document_ast = pt_doc_parser.protools_text_export_grammar.parse(f.read())
document: doc_entity.SessionDescriptor = pt_doc_parser.DocParserVisitor().visit(document_ast)
document: doc_entity.SessionDescriptor = (
pt_doc_parser.DocParserVisitor().visit(document_ast)
)
compiler = tag_compiler.TagCompiler()
compiler.session = document
@@ -62,9 +73,13 @@ class TaggingIntegratedTests(unittest.TestCase):
self.assertEqual("A B C", events[3].clip_name)
self.assertEqual(document.header.convert_timecode("01:00:15:00"), events[3].start)
self.assertEqual(document.header.convert_timecode("01:00:45:00"), events[3].finish)
self.assertEqual(
document.header.convert_timecode("01:00:15:00"), events[3].start
)
self.assertEqual(
document.header.convert_timecode("01:00:45:00"), events[3].finish
)
if __name__ == '__main__':
if __name__ == "__main__":
unittest.main()
+3 -3
View File
@@ -8,13 +8,13 @@ class MyTestCase(unittest.TestCase):
v = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
expected = [1, 2, 7, 5, 6, 15, 9, 10]
should = (lambda x, y: y % 4 == 0)
do_combine = (lambda x, y: x + y)
should = lambda x, y: y % 4 == 0
do_combine = lambda x, y: x + y
r = apply_appends(iter(v), should, do_combine)
r1 = list(r)
self.assertEqual(r1, expected)
if __name__ == '__main__':
if __name__ == "__main__":
unittest.main()