From fdfb0f9324c3ee7ff7b9e09c00ee338cb98c29c4 Mon Sep 17 00:00:00 2001 From: Eliott Jacopin Date: Thu, 16 Apr 2026 04:15:21 +0900 Subject: [PATCH 1/2] fix(validator): decouple validate_package from hatch_metadata.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hatch CLI is migrating from hatch_metadata.json to server.json as the package descriptor. Once that file is gone, every validate_package call fails with "file not found". Adding an optional metadata kwarg lets callers pass a pre-extracted flat dict and skip file I/O — the legacy path is preserved for existing callers. --- hatch_validator/package_validator.py | 42 +++++++++++++++------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/hatch_validator/package_validator.py b/hatch_validator/package_validator.py index 70716ef..a8363cd 100644 --- a/hatch_validator/package_validator.py +++ b/hatch_validator/package_validator.py @@ -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 @@ -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: From fbd38c60bd8cbf20c67186ab44ab68113f58533c Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 15 Apr 2026 20:34:16 +0000 Subject: [PATCH 2/2] chore(release): 0.9.1-dev.1 ## 0.9.1-dev.1 (2026-04-15) * fix(validator): decouple validate_package from hatch_metadata.json ([fdfb0f9](https://github.com/CrackingShells/Hatch-Validator/commit/fdfb0f9)) --- CHANGELOG.md | 4 ++++ pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6834de6..f5ad202 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.9.1-dev.1 (2026-04-15) + +* 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) diff --git a/pyproject.toml b/pyproject.toml index f880b49..01d1dcb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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"