Coverage for src/jsoncrack_for_sphinx/patterns/pattern_generator.py: 100%

18 statements  

« prev     ^ index     » next       coverage.py v7.10.0, created at 2025-07-24 22:26 +0000

1""" 

2Search pattern generation functionality. 

3""" 

4 

5from typing import List, Tuple 

6 

7from ..search.search_policy import SearchPolicy 

8from .pattern_strategies_impl import ( 

9 add_class_method_patterns, 

10 add_package_name_patterns, 

11 add_path_component_patterns, 

12) 

13from .pattern_utils import process_custom_patterns, remove_duplicates 

14 

15 

16def generate_search_patterns( 

17 obj_name: str, search_policy: SearchPolicy 

18) -> List[Tuple[str, str]]: 

19 """ 

20 Generate search patterns based on search policy. 

21 

22 Args: 

23 obj_name: Full object name (e.g., 

24 "perekrestok_api.endpoints.catalog.ProductService.similar") 

25 search_policy: Search policy configuration 

26 

27 Returns: 

28 List of (pattern, file_type) tuples to try 

29 """ 

30 patterns = [] 

31 parts = obj_name.split(".") 

32 

33 # Add custom patterns first (highest priority) 

34 patterns.extend(process_custom_patterns(parts, obj_name, search_policy)) 

35 

36 if len(parts) >= 2: 

37 # Strategy 1: Class.method only (most common case) 

38 patterns.extend(add_class_method_patterns(parts, search_policy)) 

39 

40 # Strategy 2: Path components based on include_path_to_file setting 

41 if search_policy.include_path_to_file and len(parts) >= 3: 

42 patterns.extend(add_path_component_patterns(parts, search_policy)) 

43 

44 # Strategy 3: Include package name if requested 

45 if search_policy.include_package_name: 

46 patterns.extend(add_package_name_patterns(parts, search_policy)) 

47 

48 # Strategy 4: Just method name 

49 method_name = parts[-1] 

50 patterns.extend( 

51 [ 

52 (f"{method_name}.schema.json", "schema"), 

53 (f"{method_name}.json", "json"), 

54 ] 

55 ) 

56 

57 # Strategy 5: Full object name as is (fallback) 

58 patterns.extend( 

59 [ 

60 (f"{obj_name}.schema.json", "schema"), 

61 (f"{obj_name}.json", "json"), 

62 ] 

63 ) 

64 

65 return remove_duplicates(patterns)