test fix import ndpi
All checks were successful
Build and Deploy MITM Webserver / build (push) Successful in 1m40s

This commit is contained in:
2026-03-06 22:31:51 +01:00
parent e3589fd7c3
commit 47127234a4
2 changed files with 50 additions and 6 deletions

View File

@@ -8,6 +8,7 @@ This module keeps nDPI integration optional:
from __future__ import annotations from __future__ import annotations
import logging import logging
import importlib
import time import time
from dataclasses import dataclass from dataclasses import dataclass
from typing import Any, Dict, Optional, Tuple from typing import Any, Dict, Optional, Tuple
@@ -16,10 +17,14 @@ from scapy.all import IP, IPv6, TCP, UDP # type: ignore
logger = logging.getLogger("ndpi_classifier") logger = logging.getLogger("ndpi_classifier")
try: ndpi = None # type: ignore
import ndpi # type: ignore _ndpi_import_error: Optional[str] = None
except Exception: # pragma: no cover - optional dependency for _module_name in ("ndpi", "pyndpi"):
ndpi = None try: # pragma: no cover - import depends on host runtime
ndpi = importlib.import_module(_module_name) # type: ignore
break
except Exception as exc:
_ndpi_import_error = f"{_module_name}: {exc!r}"
def _is_jsonable_scalar(value: Any) -> bool: def _is_jsonable_scalar(value: Any) -> bool:
@@ -63,13 +68,21 @@ class NDPIClassifier:
self._initialized = True self._initialized = True
if ndpi is None: if ndpi is None:
logger.warning("nDPI Python bindings not installed; DPI enrichment disabled") logger.warning(
"nDPI Python bindings unavailable; DPI enrichment disabled (%s)",
_ndpi_import_error or "no ndpi module found",
)
return return
try: try:
engine_cls = getattr(ndpi, "NDPI", None) engine_cls = getattr(ndpi, "NDPI", None)
if engine_cls is None: if engine_cls is None:
logger.warning("nDPI bindings found but NDPI class missing; DPI enrichment disabled") exported = [name for name in dir(ndpi) if name.lower().startswith("ndpi")]
logger.warning(
"nDPI bindings imported but NDPI class missing (module=%s, ndpi* exports=%s); DPI enrichment disabled",
getattr(ndpi, "__name__", "unknown"),
exported[:20],
)
return return
self._engine = engine_cls() self._engine = engine_cls()
logger.info("nDPI classifier initialized") logger.info("nDPI classifier initialized")

View File

@@ -88,6 +88,25 @@ if [ -d "/tmp/nDPI/python" ]; then
pip install "setuptools<81" "packaging<25" wheel pip install "setuptools<81" "packaging<25" wheel
if ! pip install --no-build-isolation /tmp/nDPI/python; then if ! pip install --no-build-isolation /tmp/nDPI/python; then
echo "==> WARNING: nDPI Python bindings install failed, backend will run without DPI enrichment" echo "==> WARNING: nDPI Python bindings install failed, backend will run without DPI enrichment"
else
if python - <<'PY'
import importlib
mods = []
for name in ("ndpi", "pyndpi"):
try:
m = importlib.import_module(name)
mods.append((name, getattr(m, "__file__", "unknown")))
except Exception:
pass
if not mods:
raise SystemExit(1)
print("nDPI Python modules:", mods)
PY
then
echo "==> nDPI Python import check passed"
else
echo "==> WARNING: nDPI installed but import failed in backend venv"
fi
fi fi
fi fi
@@ -234,6 +253,18 @@ if [ -d "/tmp/nDPI/python" ]; then
pip install "setuptools<81" "packaging<25" wheel pip install "setuptools<81" "packaging<25" wheel
if ! pip install --no-build-isolation /tmp/nDPI/python; then if ! pip install --no-build-isolation /tmp/nDPI/python; then
echo "WARNING: nDPI Python bindings install failed during runner build" echo "WARNING: nDPI Python bindings install failed during runner build"
else
python - <<'PY' || echo "WARNING: nDPI import check failed during runner build"
import importlib
for name in ("ndpi", "pyndpi"):
try:
m = importlib.import_module(name)
print("nDPI import OK:", name, getattr(m, "__file__", "unknown"))
raise SystemExit(0)
except Exception:
pass
raise SystemExit(1)
PY
fi fi
fi fi
pip install -r requirements.txt pip install -r requirements.txt