fixup(cadastre): use importlib.util.find_spec instead of import (#168 PR3)

Root cause Blocker #2: `import app.workers.tasks.scrape_cadastre` at module
top-level REBOUND `app` from FastAPI instance (line 14) to the Python package.
All subsequent `app.dependency_overrides[get_db] = ...` failed with
AttributeError because `app` was now the namespace module.

Fix: probe module availability with importlib.util.find_spec — does not
import or rebind names. FastAPI `app` instance stays intact.

All 28 cadastre tests pass locally.
This commit is contained in:
lekss361 2026-05-15 13:24:24 +03:00
parent 32eeda5db1
commit 7e95c9776f

View file

@ -5,6 +5,12 @@
from __future__ import annotations
# scrape_cadastre зависит от app.scrapers.nspd_bulk_client (PR 2/5).
# Используем importlib.util.find_spec вместо прямого import — иначе
# `import app.workers...` пересоздаёт `app` как Python package и
# перебивает FastAPI instance, привязанный в строке выше → AttributeError
# на app.dependency_overrides.
import importlib.util
from typing import Any
from unittest.mock import MagicMock, patch
@ -13,13 +19,9 @@ from fastapi.testclient import TestClient
from app.main import app
# scrape_cadastre зависит от app.scrapers.nspd_bulk_client (PR 2/5).
# Если ветка ещё не rebased на main — тесты которые импортируют task помечаем skip.
_SCRAPE_CADASTRE_AVAILABLE = True
try:
import app.workers.tasks.scrape_cadastre
except ModuleNotFoundError:
_SCRAPE_CADASTRE_AVAILABLE = False
_SCRAPE_CADASTRE_AVAILABLE = (
importlib.util.find_spec("app.workers.tasks.scrape_cadastre") is not None
)
requires_scrape_cadastre = pytest.mark.skipif(
not _SCRAPE_CADASTRE_AVAILABLE,