fix: use raw code without zero-padding, matching kyofilter_E behaviour

This commit is contained in:
Oliver Hofmann 2026-06-06 16:13:52 +02:00
parent bc0329861c
commit 50dec44d4a
3 changed files with 19 additions and 35 deletions

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
"""CUPS filter for TA 3505ci - injects department account code into PostScript stream."""
"""CUPS filter for TA 3505ci - injects department code into PostScript stream."""
import sys
@ -21,10 +21,7 @@ def get_account_code(options):
code = km[2:]
if not code.isdigit():
return None
if len(code) > 8:
sys.stderr.write(f"kyofilter: WARNING: department code '{code}' exceeds 8 digits, ignored\n")
return None
return code.zfill(8)
return code # raw digits, no zero-padding — matches kyofilter_E behaviour
def process_stream(lines, account_code):

View File

@ -3416,10 +3416,8 @@ userdict /180rotdetail true put
*OpenGroup: AccountingOptions/Job Accounting
*% ---------------------------------------------------------
*% Kostenstelle (5-stellig) eintragen - ohne fuehrende Nullen.
*% Zeile kopieren und Zahl anpassen:
*% Kostenstelle eintragen. Zeile kopieren und Zahl anpassen:
*% *KmManagment MG12345/Code 12345: ""
*% Zero-Padding auf 8 Stellen uebernimmt der Filter.
*% ---------------------------------------------------------
*OpenUI *KmManagment/Job Accounting: PickOne
*OrderDependency: 60 AnySetup *KmManagment

View File

@ -17,14 +17,11 @@ class TestParseOptions:
class TestGetAccountCode:
def test_five_digit_code_zero_padded_to_eight(self):
assert kyofilter.get_account_code({"KmManagment": "MG12345"}) == "00012345"
def test_five_digit_code_returned_as_is(self):
assert kyofilter.get_account_code({"KmManagment": "MG39321"}) == "39321"
def test_one_digit_code_zero_padded(self):
assert kyofilter.get_account_code({"KmManagment": "MG1"}) == "00000001"
def test_eight_digit_code_unchanged(self):
assert kyofilter.get_account_code({"KmManagment": "MG12345678"}) == "12345678"
def test_one_digit_code_returned_as_is(self):
assert kyofilter.get_account_code({"KmManagment": "MG1"}) == "1"
def test_default_returns_none(self):
assert kyofilter.get_account_code({"KmManagment": "Default"}) is None
@ -38,9 +35,6 @@ class TestGetAccountCode:
def test_non_numeric_code_returns_none(self):
assert kyofilter.get_account_code({"KmManagment": "MGabc45"}) is None
def test_nine_digit_code_returns_none(self):
assert kyofilter.get_account_code({"KmManagment": "MG123456789"}) is None
class TestProcessStream:
def _stream(self, text):
@ -53,38 +47,33 @@ class TestProcessStream:
ps = "%!PS\n%%BeginSetup\n%%EndSetup\n%%Page: 1 1\n"
assert self._collect(ps, None) == ps.encode()
def test_injects_before_end_setup(self):
def test_injects_raw_code_before_end_setup(self):
ps = "%!PS\n%%BeginSetup\n%%EndSetup\n%%Page: 1 1\n"
result = self._collect(ps, "00012345")
assert b"(00012345) statusdict /setmanagementnumber get exec\n%%EndSetup\n" in result
result = self._collect(ps, "39321")
assert b"(39321) statusdict /setmanagementnumber get exec\n%%EndSetup\n" in result
def test_end_setup_preserved_after_injection(self):
ps = "%!PS\n%%BeginSetup\n%%EndSetup\n"
result = self._collect(ps, "00012345")
result = self._collect(ps, "39321")
assert b"%%EndSetup\n" in result
def test_fallback_injects_before_first_page_when_no_end_setup(self):
ps = "%!PS\n%%Page: 1 1\nshowpage\n"
result = self._collect(ps, "00012345")
assert b"(00012345) statusdict /setmanagementnumber get exec\n%%Page: 1 1\n" in result
result = self._collect(ps, "39321")
assert b"(39321) statusdict /setmanagementnumber get exec\n%%Page: 1 1\n" in result
def test_injects_only_once(self):
ps = "%!PS\n%%BeginSetup\n%%EndSetup\n%%Page: 1 1\n%%Page: 2 1\n"
result = self._collect(ps, "00012345")
result = self._collect(ps, "39321")
assert result.count(b"setmanagementnumber") == 1
def test_content_before_injection_point_preserved(self):
ps = "%!PS\n%%BeginSetup\n/mydict 10 dict def\n%%EndSetup\n"
result = self._collect(ps, "00012345")
def test_content_preserved(self):
ps = "%!PS\n%%BeginSetup\n/mydict 10 dict def\n%%EndSetup\nshowpage\n"
result = self._collect(ps, "39321")
assert b"/mydict 10 dict def\n" in result
def test_content_after_injection_point_preserved(self):
ps = "%!PS\n%%BeginSetup\n%%EndSetup\nshowpage\n"
result = self._collect(ps, "00012345")
assert b"showpage\n" in result
def test_warns_when_no_injection_point(self, capsys):
ps = "%!PS\nshowpage\n"
self._collect(ps, "00012345")
captured = capsys.readouterr()
assert "WARNING" in captured.err
self._collect(ps, "39321")
assert "WARNING" in capsys.readouterr().err