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
« prev ^ index » next coverage.py v7.10.0, created at 2025-07-24 22:26 +0000
1"""
2Search pattern generation functionality.
3"""
5from typing import List, Tuple
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
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.
22 Args:
23 obj_name: Full object name (e.g.,
24 "perekrestok_api.endpoints.catalog.ProductService.similar")
25 search_policy: Search policy configuration
27 Returns:
28 List of (pattern, file_type) tuples to try
29 """
30 patterns = []
31 parts = obj_name.split(".")
33 # Add custom patterns first (highest priority)
34 patterns.extend(process_custom_patterns(parts, obj_name, search_policy))
36 if len(parts) >= 2:
37 # Strategy 1: Class.method only (most common case)
38 patterns.extend(add_class_method_patterns(parts, search_policy))
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))
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))
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 )
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 )
65 return remove_duplicates(patterns)