fix(backend/store): remove camelcase truncation limit and add edge case tests

This commit is contained in:
Zamil Majdy
2026-03-14 23:38:28 +07:00
parent e706c5afc2
commit ec0d9ab6ff
3 changed files with 13 additions and 13 deletions

View File

@@ -177,6 +177,9 @@ def _get_enabled_blocks() -> types.MappingProxyType[str, Block[Any, Any]]:
and their set never changes while the process is running. The returned
mapping is wrapped in ``MappingProxyType`` so callers cannot accidentally
mutate the cached data.
The cached block instances are lightweight singletons (no heavy resources
or open connections), so pinning them for the process lifetime is fine.
"""
enabled: dict[str, Block[Any, Any]] = {}
for block_id, block_cls in get_blocks().items():

View File

@@ -1,11 +1,5 @@
"""Small text helpers shared across store search modules."""
import logging
logger = logging.getLogger(__name__)
_MAX_CAMELCASE_INPUT_LEN = 500
def split_camelcase(text: str) -> str:
"""Split CamelCase into separate words.
@@ -30,13 +24,6 @@ def split_camelcase(text: str) -> str:
>>> split_camelcase("OAuth2Block")
'OAuth2 Block'
"""
if len(text) > _MAX_CAMELCASE_INPUT_LEN:
logger.debug(
"split_camelcase: truncating input from %d to %d chars",
len(text),
_MAX_CAMELCASE_INPUT_LEN,
)
text = text[:_MAX_CAMELCASE_INPUT_LEN]
if len(text) <= 1:
return text

View File

@@ -27,6 +27,16 @@ from backend.api.features.store.text_utils import split_camelcase
# "ABlock" stays "ABlock" because the algorithm requires the left
# part of an uppercase run to retain at least 2 uppercase chars.
("ABlock", "ABlock"),
# Digit-to-uppercase transitions
("Base64Encoder", "Base64 Encoder"),
("UTF8Decoder", "UTF8 Decoder"),
# Pure digits — no camelCase boundaries to split
("123", "123"),
# Known limitation: single-letter uppercase segments after digits
# are not split from the following word. "3D" is only 1 uppercase
# char so the uppercase-run rule cannot fire, producing "3 DRenderer"
# rather than the ideal "3D Renderer".
("3DRenderer", "3 DRenderer"),
],
)
def test_split_camelcase(input_text: str, expected: str):