Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## <small>0.9.1-dev.1 (2026-04-15)</small>

* fix(validator): decouple validate_package from hatch_metadata.json ([fdfb0f9](https://github.com/CrackingShells/Hatch-Validator/commit/fdfb0f9))

## 0.9.0 (2026-04-15)

* Merge pull request #20 from HartreeY/feat/schema-v2.0.0-extension ([9c1b618](https://github.com/CrackingShells/Hatch-Validator/commit/9c1b618)), closes [#20](https://github.com/CrackingShells/Hatch-Validator/issues/20)
Expand Down
42 changes: 22 additions & 20 deletions hatch_validator/package_validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,16 +112,18 @@ def validate_registry_metadata(self, metadata: Dict) -> Tuple[bool, List[str]]:
except Exception as e:
return False, [f"Error during registry validation: {str(e)}"]

def validate_package(self, package_dir: Path, pending_update: Optional[Tuple[str, Dict]] = None) -> Tuple[bool, Dict[str, Any]]:
def validate_package(self, package_dir: Path, metadata: Optional[Dict[str, Any]] = None, pending_update: Optional[Tuple[str, Dict]] = None) -> Tuple[bool, Dict[str, Any]]:
"""Validate a Hatch package in the specified directory.

Uses the new Chain of Responsibility validator system for comprehensive
package validation including metadata, dependencies, entry points, and tools.

Args:
package_dir (Path): Path to the package directory
metadata (Dict[str, Any], optional): Pre-extracted flat metadata dict. When supplied,
skips file I/O entirely. When absent, loads hatch_metadata.json from package_dir.
pending_update (Tuple[str, Dict], optional): Optional tuple (pkg_name, metadata) with pending update information. Defaults to None.

Returns:
Tuple[bool, Dict[str, Any]]: Tuple containing:
- bool: Whether validation was successful
Expand All @@ -142,22 +144,22 @@ def validate_package(self, package_dir: Path, pending_update: Optional[Tuple[str
results['metadata_schema']['errors'].append(f"Package directory does not exist: {package_dir}")
return False, results

# Check for metadata file
metadata_path = package_dir / "hatch_metadata.json"
if not metadata_path.exists():
results['valid'] = False
results['metadata_schema']['errors'].append("hatch_metadata.json not found")
return False, results

# Load metadata
try:
with open(metadata_path, 'r') as f:
metadata = json.load(f)
results['metadata'] = metadata
except (json.JSONDecodeError, UnicodeDecodeError) as e:
results['valid'] = False
results['metadata_schema']['errors'].append(f"Failed to parse metadata: {e}")
return False, results
# Load metadata from file if not supplied by caller
if metadata is None:
metadata_path = package_dir / "hatch_metadata.json"
if not metadata_path.exists():
results['valid'] = False
results['metadata_schema']['errors'].append("hatch_metadata.json not found")
return False, results
try:
with open(metadata_path, 'r') as f:
metadata = json.load(f)
except (json.JSONDecodeError, UnicodeDecodeError) as e:
results['valid'] = False
results['metadata_schema']['errors'].append(f"Failed to parse metadata: {e}")
return False, results

results['metadata'] = metadata

# Use new validation system for comprehensive validation
try:
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "hatch-validator"
version = "0.9.0"
version = "0.9.1-dev.1"
description = "Package validator for Hatch packages"
readme = "README.md"
requires-python = ">=3.7"
Expand Down
Loading