diff --git a/Dockerfile b/Dockerfile index cd5cace..18e77c6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,8 +37,12 @@ COPY scripts ./scripts ENV PATH="/app/.venv/bin:$PATH" \ PYTHONUNBUFFERED=1 \ - PYTHONDONTWRITEBYTECODE=1 \ - PYTHONPATH=/app/src + PYTHONDONTWRITEBYTECODE=1 +# NO PYTHONPATH: con uv workspace + layout doppio-nest, PYTHONPATH=/app/src +# farebbe ombra alla venv risolvendo le member-dir (multi_swarm_core/, +# strategy_crypto/) come namespace packages senza i sub-package del codice. +# I pacchetti sono installati come editable dal `uv sync --frozen` del builder +# e risolvibili direttamente via /app/.venv/. RUN useradd -m -u 1000 app \ && mkdir -p /app/data /app/series /app/state /app/strategies \ diff --git a/docker-compose.yml b/docker-compose.yml index 7008000..9e80445 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -109,4 +109,10 @@ services: - traefik.http.routers.strategy-crypto-gui.entrypoints=websecure - traefik.http.routers.strategy-crypto-gui.tls.certresolver=mytlschallenge - "traefik.http.services.strategy-crypto-gui.loadbalancer.server.port=${SWARM_DASHBOARD_PORT:-8080}" + # StripPrefix: rimuove /strategy_crypto_gui prima di girare al container. + # NiceGUI ha root_path=/strategy_crypto_gui per generare link assoluti corretti + # (lato browser), ma le route FastAPI interne restano "/", "/paper", ecc. — + # quindi il prefix esterno DEVE essere stripped dal proxy. + - "traefik.http.middlewares.strategy-crypto-stripprefix.stripprefix.prefixes=/strategy_crypto_gui" + - "traefik.http.routers.strategy-crypto-gui.middlewares=strategy-crypto-stripprefix" - com.centurylinklabs.watchtower.enable=true diff --git a/pyproject.toml b/pyproject.toml index 756c244..5e0daed 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,6 +4,13 @@ version = "0.1.0" description = "Multi-Swarm Coevolutive: monorepo workspace (core + strategie)" authors = [{ name = "Adriano Dal Pastro", email = "adrianodalpastro@tielogic.com" }] requires-python = ">=3.13" +# I due workspace member sono dipendenze runtime del deployable app root. +# Cosi' `uv sync --frozen --no-dev` (nel builder Docker) li installa entrambi +# come editable nella venv senza tirare pytest/ruff/mypy. +dependencies = [ + "multi-swarm-core", + "strategy-crypto", +] [tool.uv.workspace] members = ["src/multi_swarm_core", "src/strategy_crypto"] @@ -21,8 +28,6 @@ dev = [ "ruff>=0.7", "mypy>=1.13", "types-requests>=2.32", - "multi-swarm-core", - "strategy-crypto", ] [tool.ruff] diff --git a/uv.lock b/uv.lock index 73b728b..c64a9b6 100644 --- a/uv.lock +++ b/uv.lock @@ -897,32 +897,36 @@ wheels = [ name = "multi-swarm-coevolutive" version = "0.1.0" source = { virtual = "." } +dependencies = [ + { name = "multi-swarm-core" }, + { name = "strategy-crypto" }, +] [package.dev-dependencies] dev = [ - { name = "multi-swarm-core" }, { name = "mypy" }, { name = "pytest" }, { name = "pytest-asyncio" }, { name = "pytest-mock" }, { name = "responses" }, { name = "ruff" }, - { name = "strategy-crypto" }, { name = "types-requests" }, ] [package.metadata] +requires-dist = [ + { name = "multi-swarm-core", editable = "src/multi_swarm_core" }, + { name = "strategy-crypto", editable = "src/strategy_crypto" }, +] [package.metadata.requires-dev] dev = [ - { name = "multi-swarm-core", editable = "src/multi_swarm_core" }, { name = "mypy", specifier = ">=1.13" }, { name = "pytest", specifier = ">=8.3" }, { name = "pytest-asyncio", specifier = ">=0.24" }, { name = "pytest-mock", specifier = ">=3.14" }, { name = "responses", specifier = ">=0.25" }, { name = "ruff", specifier = ">=0.7" }, - { name = "strategy-crypto", editable = "src/strategy_crypto" }, { name = "types-requests", specifier = ">=2.32" }, ]