refactor: address high-priority debt and publish to PyPI
- Fix TOCTOU race conditions by wrapping read-modify-write cycles under single-file locks in execution_state, portfolio_service, precheck_state, state_manager, and precheck_service. - Add missing test coverage (96 tests total): - test_review_service.py (15 tests) - test_check_api.py (6 tests) - test_external_gate.py main branches (+10 tests) - test_trade_execution.py new commands (+8 tests) - Unify all agent-consumed JSON messages to English. - Config-ize hardcoded values (volume filter, schema_version) via get_user_config with sensible defaults. - Add 1-hour TTL to exchange cache with force_new override. - Add ruff and mypy to dev dependencies; fix all type errors. - Add __all__ declarations to 11 service modules. - Sync README with new commands, config tuning docs, and PyPI badge. - Publish package as coinhunter==1.0.0 on PyPI with MIT license. - Deprecate coinhunter-cli==1.0.1 with runtime warning. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
24
src/coinhunter/commands/review_engine.py
Normal file
24
src/coinhunter/commands/review_engine.py
Normal file
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env python3
|
||||
"""CLI adapter for review engine."""
|
||||
|
||||
import json
|
||||
import sys
|
||||
|
||||
from ..services.review_service import generate_review, save_review
|
||||
|
||||
|
||||
def main():
|
||||
try:
|
||||
hours = int(sys.argv[1]) if len(sys.argv) > 1 else 1
|
||||
review = generate_review(hours)
|
||||
path = save_review(review)
|
||||
print(json.dumps({"ok": True, "saved_path": path, "review": review}, ensure_ascii=False, indent=2))
|
||||
except Exception as e:
|
||||
from ..logger import log_error
|
||||
log_error("review_engine", e)
|
||||
print(json.dumps({"ok": False, "error": str(e)}, ensure_ascii=False), file=sys.stderr)
|
||||
raise SystemExit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user