diff --git a/.gitignore b/.gitignore index ae69a1f..24c743c 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ evaluations/results/ # Installed locally from an exact source lock. Upstream redistribution permission is unresolved. skills/alibabacloud-resourcecenter-search/ venv/ +.venv/ diff --git a/src/titmas_action_gate/contracts.py b/src/titmas_action_gate/contracts.py index c93ea3e..4c9e26c 100644 --- a/src/titmas_action_gate/contracts.py +++ b/src/titmas_action_gate/contracts.py @@ -47,6 +47,17 @@ def schema_directory() -> Path: ) +@functools.cache +def _schema_registry() -> Registry: + directory = schema_directory() + resources = [] + for path in directory.glob("*.schema.json"): + candidate = json.loads(path.read_text(encoding="utf-8")) + if isinstance(candidate.get("$id"), str): + resources.append((candidate["$id"], Resource.from_contents(candidate))) + return Registry().with_resources(resources) + + @functools.cache def _validator(contract: str) -> Draft202012Validator: try: @@ -55,12 +66,7 @@ def _validator(contract: str) -> Draft202012Validator: raise ContractValidationError("SCHEMA_UNKNOWN", f"Unknown contract: {contract}") from exc directory = schema_directory() schema = json.loads((directory / filename).read_text(encoding="utf-8")) - resources = [] - for path in directory.glob("*.schema.json"): - candidate = json.loads(path.read_text(encoding="utf-8")) - if isinstance(candidate.get("$id"), str): - resources.append((candidate["$id"], Resource.from_contents(candidate))) - registry = Registry().with_resources(resources) + registry = _schema_registry() return Draft202012Validator(schema, registry=registry, format_checker=FormatChecker()) diff --git a/src/titmas_action_gate/service.py b/src/titmas_action_gate/service.py index 90d7164..df6bc08 100644 --- a/src/titmas_action_gate/service.py +++ b/src/titmas_action_gate/service.py @@ -5,6 +5,7 @@ import hashlib import hmac import json +from dataclasses import dataclass from datetime import datetime, timedelta from pathlib import Path from typing import Any @@ -20,7 +21,6 @@ from .provider import GitHubProvider from .signing import HmacRecordSigner from .store import AppendOnlyStore -from dataclasses import dataclass @dataclass(frozen=True) diff --git a/tests/test_security_argument_injection.py b/tests/test_security_argument_injection.py index 3990256..4d8bb42 100644 --- a/tests/test_security_argument_injection.py +++ b/tests/test_security_argument_injection.py @@ -1,9 +1,8 @@ import unittest -import subprocess -from unittest.mock import patch, MagicMock +from unittest.mock import MagicMock, patch from titmas_action_gate.provider import GhCliProvider -from titmas_action_gate.errors import ActionGateError + class ProviderSecurityTests(unittest.TestCase): @patch("subprocess.run") diff --git a/tests/test_workflow.py b/tests/test_workflow.py index 61c356d..461a3bf 100644 --- a/tests/test_workflow.py +++ b/tests/test_workflow.py @@ -1,8 +1,8 @@ +import json import tempfile import unittest from pathlib import Path -import json from titmas_action_gate.workflow import validate_agentteams_template, write_demo_report @@ -83,7 +83,7 @@ def test_write_demo_report(self): self.assertEqual(result_path, output_file) self.assertTrue(output_file.exists()) - with open(output_file, "r", encoding="utf-8") as f: + with open(output_file, encoding="utf-8") as f: content = json.load(f) self.assertEqual(content, report_data) @@ -95,7 +95,7 @@ def test_write_demo_report_creates_directories(self): write_demo_report(report_data, output_file) self.assertTrue(output_file.exists()) - with open(output_file, "r", encoding="utf-8") as f: + with open(output_file, encoding="utf-8") as f: content = json.load(f) self.assertEqual(content, report_data)