Coverage for src/jsoncrack_for_sphinx/patterns/custom_patterns.py: 100%
18 statements
« prev ^ index » next coverage.py v7.10.0, created at 2025-07-24 22:26 +0000
« prev ^ index » next coverage.py v7.10.0, created at 2025-07-24 22:26 +0000
1"""
2Custom pattern processing utilities.
3"""
5from typing import List, Tuple
7from ..search.search_policy import SearchPolicy
10def process_custom_patterns(
11 parts: List[str], obj_name: str, search_policy: SearchPolicy
12) -> List[Tuple[str, str]]:
13 """Process custom patterns with placeholder substitution."""
14 patterns = []
16 for custom_pattern in search_policy.custom_patterns:
17 # Substitute placeholders in custom patterns
18 expanded_pattern = custom_pattern
19 if len(parts) >= 2:
20 class_name = parts[-2] # Second to last part
21 method_name = parts[-1] # Last part
22 expanded_pattern = expanded_pattern.replace("{class_name}", class_name)
23 expanded_pattern = expanded_pattern.replace("{method_name}", method_name)
24 expanded_pattern = expanded_pattern.replace("{object_name}", obj_name)
26 # Check if pattern already has file extension
27 if expanded_pattern.endswith((".json", ".schema.json")):
28 # Pattern already includes extension, add as-is
29 if expanded_pattern.endswith(".schema.json"):
30 patterns.append((expanded_pattern, "schema"))
31 else:
32 patterns.append((expanded_pattern, "json"))
33 else:
34 # Pattern doesn't have extension, add both variants
35 patterns.extend(
36 [
37 (f"{expanded_pattern}.schema.json", "schema"),
38 (f"{expanded_pattern}.json", "json"),
39 ]
40 )
42 return patterns