Remediate the 2026-09-03 feature-test findings
This commit is contained in:
@@ -36,16 +36,24 @@ class BadgeError(ValueError):
|
||||
|
||||
|
||||
def _parse_badge(badge):
|
||||
"""Return ('sso'|'payno', digits) or raise BadgeError on unknown shape."""
|
||||
badge = (badge or '').strip()
|
||||
if not badge:
|
||||
raise BadgeError('Scan or enter a badge')
|
||||
if badge.isdigit():
|
||||
return 'sso', badge
|
||||
match = _PAYNO_BADGE.match(badge)
|
||||
if match:
|
||||
return 'payno', match.group(1)
|
||||
raise BadgeError('Unrecognized badge format')
|
||||
"""Return ('sso'|'payno', digits) or raise BadgeError on unknown shape.
|
||||
|
||||
The shapes themselves live in shopdb.api (normalise_badge), because the USB
|
||||
kiosk reads the same physical badges and used to disagree: it took the
|
||||
string raw, so the PayNo wrapper resolved to nobody and an operator whose
|
||||
scanner emits it could take a part and not check out a drive.
|
||||
|
||||
That also closed a subtler hole. This used str.isdigit(), which is true for
|
||||
Arabic-Indic and other decimal forms, so a badge written in them was
|
||||
accepted, resolved against int() to a REAL employee, and then stored as an
|
||||
SSO string that joins to nothing.
|
||||
"""
|
||||
from shopdb.api import BadgeShapeError, badge_kind, normalise_badge
|
||||
|
||||
try:
|
||||
return badge_kind(badge), normalise_badge(badge)
|
||||
except BadgeShapeError as bad:
|
||||
raise BadgeError(str(bad))
|
||||
|
||||
|
||||
def _selfhosted_lookup(digits):
|
||||
|
||||
Reference in New Issue
Block a user