Coverage for src/jsoncrack_for_sphinx/schema/schema_finder.py: 100%
31 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"""
2Schema file search functionality.
3"""
5from pathlib import Path
6from typing import Optional, Tuple
8from sphinx.util import logging
10from ..patterns.pattern_generator import generate_search_patterns
11from ..search.search_policy import SearchPolicy
13logger = logging.getLogger(__name__)
16def find_schema_for_object(
17 obj_name: str, schema_dir: str, search_policy: Optional[SearchPolicy] = None
18) -> Optional[Tuple[Path, str]]:
19 """
20 Find schema file for a given object (function/method).
22 Args:
23 obj_name: Full name of the object (e.g., "example_module.User.create")
24 schema_dir: Directory containing schema files
25 search_policy: Search policy to use (optional, uses default if None)
27 Returns:
28 Tuple of (Path to schema file, file type) if found, None otherwise
29 File type is either 'schema' for .schema.json files or 'json' for .json files
30 """
31 logger.debug(f"Looking for schema for object: {obj_name}")
32 logger.debug(f"Schema directory: {schema_dir}")
34 if not schema_dir:
35 logger.debug("No schema directory configured")
36 return None
38 schema_dir_path = Path(schema_dir)
39 if not schema_dir_path.exists():
40 logger.warning(f"Schema directory does not exist: {schema_dir}")
41 return None
43 # Use default search policy if none provided
44 if search_policy is None:
45 search_policy = SearchPolicy()
46 logger.debug("Using default search policy")
47 else:
48 logger.debug(f"Using custom search policy: {search_policy}")
50 # Generate search patterns using the policy
51 patterns = generate_search_patterns(obj_name, search_policy)
53 logger.debug(f"Trying {len(patterns)} patterns:")
54 for pattern, file_type in patterns:
55 logger.debug(f" Checking pattern: {pattern}")
56 schema_path = schema_dir_path / pattern
57 if schema_path.exists():
58 logger.info(
59 f"Found schema file: {schema_path} (type: {file_type}) "
60 f"for object: {obj_name}"
61 )
62 return schema_path, file_type
63 else:
64 logger.debug(f" File not found: {schema_path}")
66 logger.warning(f"No schema file found for object: {obj_name}")
67 return None