polish(sprint-0): clean code per ruff + mypy strict
Run the dev linters over Sprint 0's core/library/shared modules and address every finding. Behaviour unchanged; tests still 80/80 green. Changes: - Replace `class Foo(str, Enum)` with `class Foo(StrEnum)` (PEP 663 / Python 3.11+) in 7 enum classes: ActuatorType, AlarmSeverity, AlarmType, KnobMode, KnobFunction, AutopilotMode, AccessLevel, VesselType. Pydantic v2 serialises StrEnum the same way, so YAML/JSON round-trips are byte-identical. - Use `datetime.UTC` alias in place of `datetime.timezone.utc` (UP017) across alarms.py, knob_state.py, project_config.py, and test_knob_state.py. - Remove now-unnecessary forward-reference quotes from method return type annotations (UP037) — `from __future__ import annotations` is already in scope everywhere. - Tighten `_read_json_resource` / `_read_yaml_resource` in the library loader: validate that the deserialised payload is actually a dict before returning, instead of leaking `Any` from json.loads / yaml.safe_load. Fixes the only two `mypy --strict` findings. - Add `.claude/settings.local.json` to .gitignore (personal Claude Code overrides are not committed). Verification: ruff check arautopilot/ -> All checks passed mypy arautopilot/core library shared -> Success, 0 issues, 12 files pytest -> 80 passed in 0.25s Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -65,10 +65,16 @@ def load_default_tuning_from_path(path: Path | str) -> PidConfig:
|
||||
|
||||
|
||||
def _read_json_resource(package: str, filename: str) -> dict[str, Any]:
|
||||
return json.loads(resources.files(package).joinpath(filename).read_text(encoding="utf-8"))
|
||||
text = resources.files(package).joinpath(filename).read_text(encoding="utf-8")
|
||||
data = json.loads(text)
|
||||
if not isinstance(data, dict):
|
||||
raise ValueError(f"{package}/{filename}: expected a JSON object at the top level")
|
||||
return data
|
||||
|
||||
|
||||
def _read_yaml_resource(package: str, filename: str) -> dict[str, Any]:
|
||||
return yaml.safe_load(
|
||||
resources.files(package).joinpath(filename).read_text(encoding="utf-8")
|
||||
)
|
||||
text = resources.files(package).joinpath(filename).read_text(encoding="utf-8")
|
||||
data = yaml.safe_load(text)
|
||||
if not isinstance(data, dict):
|
||||
raise ValueError(f"{package}/{filename}: expected a YAML mapping at the top level")
|
||||
return data
|
||||
|
||||
Reference in New Issue
Block a user