mirror of
https://github.com/zvx-echo6/central.git
synced 2026-06-10 11:54:37 +02:00
v0.9.16: ruff baseline cleanup (routes.py, test_wfigs.py)
Mechanical lint fixes only — ruff 31 -> 0 across the two files. - E402 module-import-not-at-top: 15 -> 0 (relocated module-level `logger = logging.getLogger(...)` from mid-import to below the import block in routes.py; imports now contiguous at top of file) - F811 redefined-while-unused: 10 -> 0 (removed 10 redundant function-local `from central.gui.csrf import reuse_or_generate_pre_auth_csrf` re-imports; the module-level import at line 26 is now load-bearing) - F401 unused-import: 4 -> 0 (routes.py: fastapi.Depends, and central.gui.csrf.reuse_or_generate_pre_auth_csrf resolved by the F811 fix; test_wfigs.py: sqlite3, central.config_models.RegionConfig) - E702 multiple-statements-on-one-line-semicolon: 2 -> 0 (split the two semicolon-joined statements in _fused_bbox, indentation preserved) Deliberate function-local wizard imports (circular-import workaround) left untouched. pytest: 890 passed / 1 skipped, unchanged across 3 runs. no behavior change; ruff mechanical fixes only. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
eb97ffb24c
commit
c379e3688e
2 changed files with 9 additions and 18 deletions
|
|
@ -16,10 +16,7 @@ from central.config_store import ConfigStore
|
||||||
from central.tomtom_flow_parse import decode_flow_tile
|
from central.tomtom_flow_parse import decode_flow_tile
|
||||||
from central.gui.nats import get_js
|
from central.gui.nats import get_js
|
||||||
|
|
||||||
logger = logging.getLogger("central.gui.routes")
|
from fastapi import APIRouter, Form, Request
|
||||||
|
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, Form, Request
|
|
||||||
from fastapi.responses import HTMLResponse, JSONResponse, RedirectResponse, Response
|
from fastapi.responses import HTMLResponse, JSONResponse, RedirectResponse, Response
|
||||||
from central.bootstrap_config import get_settings
|
from central.bootstrap_config import get_settings
|
||||||
from central.gui.csrf import (
|
from central.gui.csrf import (
|
||||||
|
|
@ -65,6 +62,9 @@ from central.adapter_discovery import discover_adapters
|
||||||
from central.streams import STREAMS as STREAM_REGISTRY
|
from central.streams import STREAMS as STREAM_REGISTRY
|
||||||
from pydantic import ValidationError
|
from pydantic import ValidationError
|
||||||
|
|
||||||
|
logger = logging.getLogger("central.gui.routes")
|
||||||
|
|
||||||
|
|
||||||
@cache
|
@cache
|
||||||
def _adapter_classes() -> dict:
|
def _adapter_classes() -> dict:
|
||||||
"""Cached adapter class discovery.
|
"""Cached adapter class discovery.
|
||||||
|
|
@ -308,7 +308,6 @@ async def dashboard_polls(request: Request) -> HTMLResponse:
|
||||||
async def setup_operator_form(request: Request) -> HTMLResponse:
|
async def setup_operator_form(request: Request) -> HTMLResponse:
|
||||||
"""Render the setup operator form (step 1)."""
|
"""Render the setup operator form (step 1)."""
|
||||||
from central.gui.wizard import get_wizard_state
|
from central.gui.wizard import get_wizard_state
|
||||||
from central.gui.csrf import reuse_or_generate_pre_auth_csrf
|
|
||||||
|
|
||||||
templates = _get_templates()
|
templates = _get_templates()
|
||||||
settings = get_settings()
|
settings = get_settings()
|
||||||
|
|
@ -346,7 +345,6 @@ async def setup_operator_submit(
|
||||||
) -> Response:
|
) -> Response:
|
||||||
"""Process the setup operator form (step 1)."""
|
"""Process the setup operator form (step 1)."""
|
||||||
from central.gui.wizard import get_wizard_state, set_wizard_cookie, WizardState
|
from central.gui.wizard import get_wizard_state, set_wizard_cookie, WizardState
|
||||||
from central.gui.csrf import reuse_or_generate_pre_auth_csrf
|
|
||||||
|
|
||||||
templates = _get_templates()
|
templates = _get_templates()
|
||||||
settings = get_settings()
|
settings = get_settings()
|
||||||
|
|
@ -401,7 +399,6 @@ async def setup_operator_submit(
|
||||||
async def setup_system_form(request: Request) -> HTMLResponse:
|
async def setup_system_form(request: Request) -> HTMLResponse:
|
||||||
"""Render the system settings form (step 2)."""
|
"""Render the system settings form (step 2)."""
|
||||||
from central.gui.wizard import get_wizard_state
|
from central.gui.wizard import get_wizard_state
|
||||||
from central.gui.csrf import reuse_or_generate_pre_auth_csrf
|
|
||||||
|
|
||||||
settings = get_settings()
|
settings = get_settings()
|
||||||
|
|
||||||
|
|
@ -447,7 +444,6 @@ async def setup_system_form(request: Request) -> HTMLResponse:
|
||||||
async def setup_system_submit(request: Request) -> Response:
|
async def setup_system_submit(request: Request) -> Response:
|
||||||
"""Process the system settings form (step 2)."""
|
"""Process the system settings form (step 2)."""
|
||||||
from central.gui.wizard import get_wizard_state, set_wizard_cookie
|
from central.gui.wizard import get_wizard_state, set_wizard_cookie
|
||||||
from central.gui.csrf import reuse_or_generate_pre_auth_csrf
|
|
||||||
|
|
||||||
templates = _get_templates()
|
templates = _get_templates()
|
||||||
settings = get_settings()
|
settings = get_settings()
|
||||||
|
|
@ -514,7 +510,6 @@ async def setup_system_submit(request: Request) -> Response:
|
||||||
async def setup_keys_form(request: Request) -> HTMLResponse:
|
async def setup_keys_form(request: Request) -> HTMLResponse:
|
||||||
"""Render the API keys form (step 3)."""
|
"""Render the API keys form (step 3)."""
|
||||||
from central.gui.wizard import get_wizard_state
|
from central.gui.wizard import get_wizard_state
|
||||||
from central.gui.csrf import reuse_or_generate_pre_auth_csrf
|
|
||||||
|
|
||||||
settings = get_settings()
|
settings = get_settings()
|
||||||
|
|
||||||
|
|
@ -549,7 +544,6 @@ async def setup_keys_form(request: Request) -> HTMLResponse:
|
||||||
async def setup_keys_submit(request: Request) -> Response:
|
async def setup_keys_submit(request: Request) -> Response:
|
||||||
"""Process the API keys form (step 3)."""
|
"""Process the API keys form (step 3)."""
|
||||||
from central.gui.wizard import get_wizard_state, set_wizard_cookie
|
from central.gui.wizard import get_wizard_state, set_wizard_cookie
|
||||||
from central.gui.csrf import reuse_or_generate_pre_auth_csrf
|
|
||||||
from central.crypto import encrypt
|
from central.crypto import encrypt
|
||||||
|
|
||||||
templates = _get_templates()
|
templates = _get_templates()
|
||||||
|
|
@ -647,7 +641,6 @@ async def setup_keys_submit(request: Request) -> Response:
|
||||||
async def setup_adapters_form(request: Request) -> HTMLResponse:
|
async def setup_adapters_form(request: Request) -> HTMLResponse:
|
||||||
"""Render the adapters configuration form (step 4)."""
|
"""Render the adapters configuration form (step 4)."""
|
||||||
from central.gui.wizard import get_wizard_state
|
from central.gui.wizard import get_wizard_state
|
||||||
from central.gui.csrf import reuse_or_generate_pre_auth_csrf
|
|
||||||
|
|
||||||
settings = get_settings()
|
settings = get_settings()
|
||||||
|
|
||||||
|
|
@ -765,7 +758,6 @@ async def setup_adapters_form(request: Request) -> HTMLResponse:
|
||||||
async def setup_adapters_submit(request: Request) -> Response:
|
async def setup_adapters_submit(request: Request) -> Response:
|
||||||
"""Process the adapters configuration form (step 4)."""
|
"""Process the adapters configuration form (step 4)."""
|
||||||
from central.gui.wizard import get_wizard_state, set_wizard_cookie
|
from central.gui.wizard import get_wizard_state, set_wizard_cookie
|
||||||
from central.gui.csrf import reuse_or_generate_pre_auth_csrf
|
|
||||||
|
|
||||||
templates = _get_templates()
|
templates = _get_templates()
|
||||||
pool = get_pool()
|
pool = get_pool()
|
||||||
|
|
@ -985,7 +977,6 @@ async def setup_adapters_submit(request: Request) -> Response:
|
||||||
async def setup_finish_form(request: Request) -> HTMLResponse:
|
async def setup_finish_form(request: Request) -> HTMLResponse:
|
||||||
"""Render the finish setup page (step 5)."""
|
"""Render the finish setup page (step 5)."""
|
||||||
from central.gui.wizard import get_wizard_state
|
from central.gui.wizard import get_wizard_state
|
||||||
from central.gui.csrf import reuse_or_generate_pre_auth_csrf
|
|
||||||
|
|
||||||
settings = get_settings()
|
settings = get_settings()
|
||||||
|
|
||||||
|
|
@ -1038,7 +1029,6 @@ async def setup_finish_form(request: Request) -> HTMLResponse:
|
||||||
async def setup_finish_submit(request: Request) -> Response:
|
async def setup_finish_submit(request: Request) -> Response:
|
||||||
"""Complete the setup wizard - atomic commit of all wizard state."""
|
"""Complete the setup wizard - atomic commit of all wizard state."""
|
||||||
from central.gui.wizard import get_wizard_state, clear_wizard_cookie
|
from central.gui.wizard import get_wizard_state, clear_wizard_cookie
|
||||||
from central.gui.csrf import reuse_or_generate_pre_auth_csrf
|
|
||||||
from asyncpg.exceptions import UniqueViolationError
|
from asyncpg.exceptions import UniqueViolationError
|
||||||
|
|
||||||
templates = _get_templates()
|
templates = _get_templates()
|
||||||
|
|
@ -3471,8 +3461,10 @@ def _fused_bbox(params: dict) -> tuple[float, float, float, float] | None:
|
||||||
"""Parse optional north/south/east/west into (west, south, east, north), or
|
"""Parse optional north/south/east/west into (west, south, east, north), or
|
||||||
None if absent/degenerate/out-of-range (mirrors _parse_events_params)."""
|
None if absent/degenerate/out-of-range (mirrors _parse_events_params)."""
|
||||||
try:
|
try:
|
||||||
n = float(params["north"]); so = float(params["south"])
|
n = float(params["north"])
|
||||||
e = float(params["east"]); w = float(params["west"])
|
so = float(params["south"])
|
||||||
|
e = float(params["east"])
|
||||||
|
w = float(params["west"])
|
||||||
except (KeyError, TypeError, ValueError):
|
except (KeyError, TypeError, ValueError):
|
||||||
return None
|
return None
|
||||||
if -90 <= so < n <= 90 and -180 <= w < e <= 180:
|
if -90 <= so < n <= 90 and -180 <= w < e <= 180:
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,12 @@
|
||||||
"""Tests for WFIGS adapters."""
|
"""Tests for WFIGS adapters."""
|
||||||
|
|
||||||
import sqlite3
|
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from unittest.mock import AsyncMock, MagicMock, patch
|
from unittest.mock import AsyncMock, MagicMock, patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from central.config_models import AdapterConfig, RegionConfig
|
from central.config_models import AdapterConfig
|
||||||
from central.models import Event, Geo
|
from central.models import Event, Geo
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue