Rewrite FastAPI app and pipeline worker entrypoint.

Worker still refuses to import backend.main. Auth router is mounted
unchanged; CORS stays outermost so 401s keep headers.
This commit is contained in:
2026-09-20 19:23:33 +02:00
parent d0bbd582a8
commit 7c3c7d17d8
3 changed files with 332 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
"""Native FastAPI app and worker entrypoint resolve from src."""
from __future__ import annotations
import ast
from pathlib import Path
import backend.main as main_mod
import backend.pipeline_worker as worker_mod
from backend.main import LOCAL_DEV_USER, app
def _src(mod, name: str) -> Path:
path = Path(mod.__file__).resolve()
assert path.name == name
assert "src" in path.parts
assert "Native Periscope overlay" not in path.read_text(encoding="utf-8")[:400]
return path
def test_main_and_worker_are_src():
_src(main_mod, "main.py")
_src(worker_mod, "pipeline_worker.py")
def test_worker_does_not_import_fastapi_app():
tree = ast.parse(Path(worker_mod.__file__).read_text(encoding="utf-8"))
for node in ast.walk(tree):
if isinstance(node, ast.Import):
for alias in node.names:
assert alias.name != "backend.main"
if isinstance(node, ast.ImportFrom) and node.module:
assert not node.module.startswith("backend.main")
if node.module == "backend":
for alias in node.names:
assert alias.name != "main"
def test_app_mounts_auth_and_public_user():
paths = set(app.openapi()["paths"])
assert any(p.startswith("/api/auth") for p in paths)
assert any(p.startswith("/api/projects") for p in paths)
assert LOCAL_DEV_USER == "local"
assert "/api/auth/login" in main_mod._PUBLIC_PATHS
assert "/api/contact" in main_mod._PUBLIC_PATHS