Files
breakpilot-compliance/backend-compliance/mypy.ini
Sharang Parnerkar ae008d7d25 refactor(backend/api): extract DSFA schemas + services (Step 4 — file 14 of 18)
- Create compliance/schemas/dsfa.py (161 LOC) — extract DSFACreate,
  DSFAUpdate, DSFAStatusUpdate, DSFASectionUpdate, DSFAApproveRequest
- Create compliance/services/dsfa_service.py (386 LOC) — CRUD + helpers
  + stats + audit-log + CSV export; uses domain errors
- Create compliance/services/dsfa_workflow_service.py (347 LOC) — status
  update, section update, submit-for-review, approve, export JSON, versions
- Rewrite compliance/api/dsfa_routes.py (339 LOC) as thin handlers with
  Depends + translate_domain_errors(); re-export legacy symbols via __all__
- Add [mypy-compliance.api.dsfa_routes] ignore_errors = False to mypy.ini
- Update tests: 422 -> 400 for domain ValidationError (6 assertions)
- Regenerate OpenAPI baseline (360 paths / 484 operations — unchanged)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 19:20:48 +02:00

102 lines
3.6 KiB
INI

[mypy]
python_version = 3.12
strict = True
implicit_reexport = True
ignore_missing_imports = True
warn_unused_configs = True
exclude = (?x)(
^compliance/tests/
| ^compliance/data/
| ^compliance/scripts/
)
# Tests are not type-checked (legacy; will be tightened when TestClient-based
# integration tests land in Phase 1 Step 4 follow-up).
[mypy-compliance.tests.*]
ignore_errors = True
# ----------------------------------------------------------------------
# Phase 1 refactor policy:
# - compliance.domain / compliance.schemas : fully strict
# - compliance.api._http_errors : fully strict
# - compliance.services.<new_clean_arch_service> : strict (list explicitly)
# - compliance.repositories.* : strict with ORM arg-type
# ignore (see per-file)
# - compliance.db.* : loose (ORM models)
# - compliance.services.<legacy utility modules> : loose (pre-refactor)
# - compliance.api.<route files> : loose until Step 4
# ----------------------------------------------------------------------
# Legacy utility services that predate the Phase 1 refactor. Not touched
# by the clean-arch extraction. Left loose until their own refactor pass.
[mypy-compliance.services.ai_compliance_assistant]
ignore_errors = True
[mypy-compliance.services.audit_pdf_generator]
ignore_errors = True
[mypy-compliance.services.auto_risk_updater]
ignore_errors = True
[mypy-compliance.services.control_generator]
ignore_errors = True
[mypy-compliance.services.export_generator]
ignore_errors = True
[mypy-compliance.services.llm_provider]
ignore_errors = True
[mypy-compliance.services.pdf_extractor]
ignore_errors = True
[mypy-compliance.services.regulation_scraper]
ignore_errors = True
[mypy-compliance.services.report_generator]
ignore_errors = True
[mypy-compliance.services.seeder]
ignore_errors = True
[mypy-compliance.services.similarity_detector]
ignore_errors = True
[mypy-compliance.services.license_gate]
ignore_errors = True
[mypy-compliance.services.anchor_finder]
ignore_errors = True
[mypy-compliance.services.rag_client]
ignore_errors = True
# SQLAlchemy ORM layer: models use Column() rather than Mapped[T], so
# static analysis sees descriptors as Column[T] while runtime returns T.
# Loose for the whole db package until a future Mapped[T] migration.
[mypy-compliance.db.*]
ignore_errors = True
# Route files (Phase 1 Step 4 in progress): only the refactored ones are
# checked strictly via explicit extension of the strict scope in CI.
# Until each file is refactored, it stays loose.
[mypy-compliance.api.*]
ignore_errors = True
# Refactored route modules under Step 4 — override the blanket rule above.
[mypy-compliance.api.audit_routes]
ignore_errors = False
[mypy-compliance.api.banner_routes]
ignore_errors = False
[mypy-compliance.api.tom_routes]
ignore_errors = False
[mypy-compliance.api.company_profile_routes]
ignore_errors = False
[mypy-compliance.api.vvt_routes]
ignore_errors = False
[mypy-compliance.api.canonical_control_routes]
ignore_errors = False
[mypy-compliance.api.source_policy_router]
ignore_errors = False
[mypy-compliance.api.screening_routes]
ignore_errors = False
[mypy-compliance.api.evidence_routes]
ignore_errors = False
[mypy-compliance.api.email_template_routes]
ignore_errors = False
[mypy-compliance.api.incident_routes]
ignore_errors = False
[mypy-compliance.api.legal_document_routes]
ignore_errors = False
[mypy-compliance.api.dsfa_routes]
ignore_errors = False
[mypy-compliance.api._http_errors]
ignore_errors = False