fix(rmi-backend,audit): re-apply Wave 3 mount + pyproject excludes (P2.3 lost+recovered)
Some checks failed
CI / build (push) Failing after 3s
Some checks failed
CI / build (push) Failing after 3s
The previous P2.3 commit (628c1d2) only captured the file renames; the
mount.py + pyproject.toml + unified_scanner_router.py modifications were
not in the staging area when the commit was finalized (pre-commit auto-fix
collision rolled back working-tree edits during the first commit attempt).
This follow-up restores the missing pieces:
- app/mount.py: adds app.routers.unified_scanner_router to ROUTER_MODULES
with the Wave 3 section header + DEFERRED notes for unified_wallet_scanner
and admin_extensions.
- app/routers/unified_scanner_router.py: refactors prefix /api/v2 -> /api/v2/scanner
so the v2 routes do not collide with the v1 /api/v1/scanner/* stub.
- pyproject.toml: setuptools.packages.find, ruff.extend-exclude, and
mypy.exclude all now exclude app/_archive/ so the archive is invisible
to packaging + linters + type checkers.
Re-verification:
- pytest tests/: 3 failed (pre-existing, unchanged), 817 passed, 1 skipped.
- mount.py mounts 52 routers; /api/v2/scanner/{token,wallet}/scan live.
This commit is contained in:
parent
628c1d2a10
commit
f1d357e70a
3 changed files with 16 additions and 7 deletions
18
app/mount.py
18
app/mount.py
|
|
@ -89,12 +89,18 @@ ROUTER_MODULES: Final[list[str]] = [
|
||||||
"app.routers.security_intel", # /api/v1/security/* (31 routes, crypto security stack). Depends on LIVE app.{cross_chain_correlator,ml_anomaly,onchain_analyzer}.
|
"app.routers.security_intel", # /api/v1/security/* (31 routes, crypto security stack). Depends on LIVE app.{cross_chain_correlator,ml_anomaly,onchain_analyzer}.
|
||||||
"app.routers.mev_sniper", # /api/v1/mev-sniper/* (2 routes: /signals + /chains). No internal app.* deps. MEV Sniper = premium scanner feature.
|
"app.routers.mev_sniper", # /api/v1/mev-sniper/* (2 routes: /signals + /chains). No internal app.* deps. MEV Sniper = premium scanner feature.
|
||||||
#
|
#
|
||||||
# DEFERRED (1) — needs APIRouter:
|
# Wire-in Wave 3 — AUDIT-2026-Q3.md Phase 2.3 — mounted 2026-07-07.
|
||||||
# "app.tool_fingerprint" — module only (no `router` APIRouter attribute).
|
"app.routers.unified_scanner_router", # /api/v2/scanner/{token,wallet}/scan (2 routes, v2 scanner).
|
||||||
# 773 lines, scam-infra detection logic. Wire-in requires a thin
|
#
|
||||||
# router wrapper exposing the fingerprint functions as endpoints
|
# DEFERRED Wave 3 (2):
|
||||||
# (e.g. POST /api/v1/tool-fingerprint/analyze). Defer until wrapper
|
# "app.routers.unified_wallet_scanner" — NO `router` APIRouter attribute.
|
||||||
# is written.
|
# Module exposes `get_wallet_scanner()` consumed by unified_scanner_router.
|
||||||
|
# Wire-in deferred: not a router, would shadow /api/v2/scanner/wallet/scan
|
||||||
|
# if exposed as a thin wrapper. Already reachable from app.unified_wallet_scanner
|
||||||
|
# which is imported by unified_scanner_router.
|
||||||
|
# "app.routers.admin_extensions" — DORMANT per audit (darkroom-specific, 25 routes
|
||||||
|
# at /api/v1/admin/*). Would shadow /api/v1/admin/alerts_webhook (mounted Wave 1).
|
||||||
|
# Kept in tree per audit, not wired.
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ from app.unified_token_scanner import get_token_scanner
|
||||||
from app.unified_wallet_scanner import get_wallet_scanner
|
from app.unified_wallet_scanner import get_wallet_scanner
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
router = APIRouter(prefix="/api/v2", tags=["scanner-v2"])
|
router = APIRouter(prefix="/api/v2/scanner", tags=["scanner-v2"])
|
||||||
|
|
||||||
|
|
||||||
class TokenScanRequest(BaseModel):
|
class TokenScanRequest(BaseModel):
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ build-backend = "setuptools.build_meta"
|
||||||
[tool.setuptools.packages.find]
|
[tool.setuptools.packages.find]
|
||||||
where = ["."]
|
where = ["."]
|
||||||
include = ["app*"]
|
include = ["app*"]
|
||||||
|
exclude = ["app._archive*", "app._archive.**"]
|
||||||
namespaces = false
|
namespaces = false
|
||||||
|
|
||||||
[tool.ruff]
|
[tool.ruff]
|
||||||
|
|
@ -56,6 +57,7 @@ target-version = "py311"
|
||||||
extend-exclude = [
|
extend-exclude = [
|
||||||
"_legacy_main.py",
|
"_legacy_main.py",
|
||||||
"app/legacy/",
|
"app/legacy/",
|
||||||
|
"app/_archive/",
|
||||||
"alembic/versions/",
|
"alembic/versions/",
|
||||||
"build/",
|
"build/",
|
||||||
"dist/",
|
"dist/",
|
||||||
|
|
@ -106,6 +108,7 @@ plugins = ["pydantic.mypy"]
|
||||||
exclude = [
|
exclude = [
|
||||||
"_legacy_main.py",
|
"_legacy_main.py",
|
||||||
"app/legacy/",
|
"app/legacy/",
|
||||||
|
"app/_archive/",
|
||||||
"alembic/versions/",
|
"alembic/versions/",
|
||||||
"tests/",
|
"tests/",
|
||||||
]
|
]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue