From 79851054fd3b324c04bc6fb8e9f0c9c715ba0894 Mon Sep 17 00:00:00 2001 From: CarterPerez-dev Date: Fri, 31 Jul 2026 19:09:36 -0400 Subject: [PATCH] fix(dlp-scanner): a call site that already names its arguments should say so in the signature ruff 0.16.0 stabilized PLR0917 (too-many-positional-arguments) out of preview. The project selects PL wholesale and CI installs ruff unpinned, so the rule switched on by itself and four signatures went red without a line of source changing. Every flagged call site already passed the tail arguments by keyword, so the signatures were understating a contract the code had already adopted. Mark that tail keyword-only: DetectorRegistry.__init__ - six optional config knobs, all keyword _append_findings - matches/text positional, context keyword _process_dns_packet - packet data positional, context keyword _make_packet (test helper) - eight defaulted fields, all keyword _process_dns_packet was the only caller passing positionally; it now names path/packet_num/dns_detector/result like every sibling call does. 313 tests pass, ruff clean on both 0.15.7 and 0.16.1, mypy unchanged at its three pre-existing errors. --- .../dlp-scanner/src/dlp_scanner/detectors/registry.py | 1 + .../dlp-scanner/src/dlp_scanner/scanners/db_scanner.py | 1 + .../src/dlp_scanner/scanners/network_scanner.py | 9 +++++---- .../dlp-scanner/tests/test_network/test_flow_tracker.py | 1 + 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/PROJECTS/intermediate/dlp-scanner/src/dlp_scanner/detectors/registry.py b/PROJECTS/intermediate/dlp-scanner/src/dlp_scanner/detectors/registry.py index 55e2f46c..635e8a1c 100644 --- a/PROJECTS/intermediate/dlp-scanner/src/dlp_scanner/detectors/registry.py +++ b/PROJECTS/intermediate/dlp-scanner/src/dlp_scanner/detectors/registry.py @@ -39,6 +39,7 @@ class DetectorRegistry: """ def __init__( self, + *, enable_patterns: list[str] | None = None, disable_patterns: list[str] | None = None, allowlist_values: frozenset[str] | None = None, diff --git a/PROJECTS/intermediate/dlp-scanner/src/dlp_scanner/scanners/db_scanner.py b/PROJECTS/intermediate/dlp-scanner/src/dlp_scanner/scanners/db_scanner.py index 125a632d..a3a95532 100644 --- a/PROJECTS/intermediate/dlp-scanner/src/dlp_scanner/scanners/db_scanner.py +++ b/PROJECTS/intermediate/dlp-scanner/src/dlp_scanner/scanners/db_scanner.py @@ -475,6 +475,7 @@ class DatabaseScanner: self, matches: list[DetectorMatch], text: str, + *, table_name: str, uri: str, result: ScanResult, diff --git a/PROJECTS/intermediate/dlp-scanner/src/dlp_scanner/scanners/network_scanner.py b/PROJECTS/intermediate/dlp-scanner/src/dlp_scanner/scanners/network_scanner.py index 936b9212..e7aa9f88 100644 --- a/PROJECTS/intermediate/dlp-scanner/src/dlp_scanner/scanners/network_scanner.py +++ b/PROJECTS/intermediate/dlp-scanner/src/dlp_scanner/scanners/network_scanner.py @@ -137,10 +137,10 @@ class NetworkScanner: packet.payload, packet.src_ip, packet.dst_ip, - path, - packet_count, - dns_detector, - result, + path = path, + packet_num = packet_count, + dns_detector = dns_detector, + result = result, ) if packet.payload: @@ -175,6 +175,7 @@ class NetworkScanner: payload: bytes, src_ip: str, dst_ip: str, + *, path: Path, packet_num: int, dns_detector: DnsExfilDetector, diff --git a/PROJECTS/intermediate/dlp-scanner/tests/test_network/test_flow_tracker.py b/PROJECTS/intermediate/dlp-scanner/tests/test_network/test_flow_tracker.py index 642e56bf..91ddbd42 100644 --- a/PROJECTS/intermediate/dlp-scanner/tests/test_network/test_flow_tracker.py +++ b/PROJECTS/intermediate/dlp-scanner/tests/test_network/test_flow_tracker.py @@ -12,6 +12,7 @@ from dlp_scanner.network.pcap import PacketInfo def _make_packet( + *, src_ip: str = "192.168.1.1", dst_ip: str = "10.0.0.1", src_port: int = 12345,