- _group_int_doc_ids: use type(value) is not int instead of isinstance, since bool is an int subclass and would otherwise stringify to "True"/"False" and corrupt legacy payloads on backfill. - Replace doc_id.isdigit() guards in 5 boundary sites (api/visualization, auth/viz_routes, search/context note/news_item/ deck_card branches) with a shared is_valid_nextcloud_doc_id helper that rejects "0", leading zeros, and Unicode digit classes (superscripts, Arabic-Indic, Devanagari) which pass isdigit() but cannot be valid MySQL AUTO_INCREMENT IDs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
16 lines
649 B
Python
16 lines
649 B
Python
"""Shared validators for primitive types crossing system boundaries."""
|
|
|
|
import re
|
|
|
|
# Nextcloud object IDs are unsigned ints from MySQL AUTO_INCREMENT, which
|
|
# starts at 1. Restrict to ASCII positive integers to exclude Unicode digit
|
|
# classes (e.g. superscripts, Arabic-Indic numerals) that pass str.isdigit()
|
|
# / str.isdecimal() but would never be valid Nextcloud IDs, and to reject "0"
|
|
# and leading zeros.
|
|
_NEXTCLOUD_DOC_ID_RE = re.compile(r"^[1-9][0-9]*$")
|
|
|
|
|
|
def is_valid_nextcloud_doc_id(value: str) -> bool:
|
|
"""True iff `value` is the str form of a positive ASCII integer (>= 1)."""
|
|
return bool(_NEXTCLOUD_DOC_ID_RE.fullmatch(value))
|