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

1""" 

2Custom pattern processing utilities. 

3""" 

4 

5from typing import List, Tuple 

6 

7from ..search.search_policy import SearchPolicy 

8 

9 

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 = [] 

15 

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) 

25 

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 ) 

41 

42 return patterns