This commit is contained in:
Raykov-MS 2026-06-22 11:48:39 +03:00
parent eccfcc543f
commit 636acd1087
4 changed files with 14 additions and 4 deletions

View File

@ -4,7 +4,7 @@ import re
from datetime import datetime from datetime import datetime
FILE_NAME_PATTERNS = ( FILE_NAME_PATTERNS = (
re.compile(r"^SKO115FZ_\d{2}_[A-Za-zА-Яа-я0-9]{9}_\d{8}_[ХX]\d{5}\.xml$"), re.compile(r"^SKO115FZ_\d{2}_[A-Za-zА-Яа-я0-9]{9}_\d{8}_(?:[ХX]\d{5}|\d{6})\.xml$"),
) )
DEFAULT_OUTPUT_DIR_NAME = "Out" DEFAULT_OUTPUT_DIR_NAME = "Out"

View File

@ -55,7 +55,7 @@ def parse_xml_content(file_name: str, xml_content: bytes | str) -> FileParseResu
result = FileParseResult(file_name=file_name) result = FileParseResult(file_name=file_name)
if not validate_file_name(file_name): if not validate_file_name(file_name):
result.fatal_error = "Некорректное имя файла" result.fatal_error = "Некорректное имя XML-файла"
return result return result
try: try:

View File

@ -277,7 +277,8 @@ def _upload_artifacts(
write_report(report_rows, local_report) write_report(report_rows, local_report)
write_protocol(protocol_rows, local_protocol) write_protocol(protocol_rows, local_protocol)
local_log.write_text("\n".join(log_lines) + "\n", encoding="utf-8") # Use CRLF to keep one-record-per-line in Windows viewers.
local_log.write_text("\r\n".join(log_lines) + "\r\n", encoding="utf-8")
upload_local_file(local_report, report_path, samba_conn=samba_conn) upload_local_file(local_report, report_path, samba_conn=samba_conn)
upload_local_file(local_protocol, protocol_path, samba_conn=samba_conn) upload_local_file(local_protocol, protocol_path, samba_conn=samba_conn)

View File

@ -20,7 +20,7 @@ def _base_xml(operations: str) -> str:
def test_parse_xml_with_invalid_name_returns_fatal() -> None: def test_parse_xml_with_invalid_name_returns_fatal() -> None:
result = parse_xml_content("broken.xml", "<СообщОперКО/>") result = parse_xml_content("broken.xml", "<СообщОперКО/>")
assert result.is_fatal assert result.is_fatal
assert "Некорректное имя файла" in (result.fatal_error or "") assert "Некорректное имя XML-файла" in (result.fatal_error or "")
def test_parse_xml_with_malformed_xml_returns_fatal() -> None: def test_parse_xml_with_malformed_xml_returns_fatal() -> None:
@ -82,3 +82,12 @@ def test_parse_xml_operation_error_marks_partial(monkeypatch) -> None:
assert not result.is_fatal assert not result.is_fatal
assert result.operation_errors assert result.operation_errors
assert result.operation_errors[0].record_id == "OP3" assert result.operation_errors[0].record_id == "OP3"
def test_parse_xml_with_numeric_suffix_file_name_is_valid() -> None:
xml = _base_xml(
"<Операция><ИдентификаторЗаписи>OP4</ИдентификаторЗаписи><СуммаОпер>100</СуммаОпер></Операция>"
)
result = parse_xml_content("SKO115FZ_01_044525111_20251224_000051.xml", xml)
assert not result.is_fatal
assert len(result.rows) == 1