Merge branch 'develop' into feature/drawrects

This commit is contained in:
Jörn-Michael Miehe 2023-09-03 16:03:11 +00:00
commit d654fb8f6b
9 changed files with 854 additions and 651 deletions

View file

@ -1,12 +1,19 @@
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.245.2/containers/python-3/.devcontainer/base.Dockerfile # See here for image contents: https://github.com/devcontainers/images/blob/main/src/python/.devcontainer/Dockerfile
# [Choice] Python version (use -bullseye variants on local arm64/Apple Silicon): 3, 3.10, 3.9, 3.8, 3.7, 3.6, 3-bullseye, 3.10-bullseye, 3.9-bullseye, 3.8-bullseye, 3.7-bullseye, 3.6-bullseye, 3-buster, 3.10-buster, 3.9-buster, 3.8-buster, 3.7-buster, 3.6-buster # [Choice] Python version (use -bullseye variants on local arm64/Apple Silicon):
ARG VARIANT="3.10-bullseye" # - 3, 3.11, 3.10, 3.9, 3.8, 3.7, 3.6
# - 3-bullseye, 3.11-bullseye, 3.10-bullseye, 3.9-bullseye, 3.8-bullseye, 3.7-bullseye, 3.6-bullseye
# - 3-buster, 3.11-buster, 3.10-buster, 3.9-buster, 3.8-buster, 3.7-buster, 3.6-buster
ARG VARIANT="3.11-bullseye"
FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT} FROM mcr.microsoft.com/vscode/devcontainers/python:0-${VARIANT}
# [Choice] Node.js version: none, lts/*, 16, 14, 12, 10 # [Choice] Node.js version: none, lts/*, 18, 16, 14, 12, 10
ARG NODE_VERSION="none" ARG NODE_VERSION="none"
RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi RUN set -ex; \
\
if [ "${NODE_VERSION}" != "none" ]; then \
su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; \
fi
# [Optional] If your pip requirements rarely change, uncomment this section to add them to the image. # [Optional] If your pip requirements rarely change, uncomment this section to add them to the image.
# COPY requirements.txt /tmp/pip-tmp/ # COPY requirements.txt /tmp/pip-tmp/
@ -17,12 +24,12 @@ RUN if [ "${NODE_VERSION}" != "none" ]; then su vscode -c "umask 0002 && . /usr/
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ # RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
# && apt-get -y install --no-install-recommends <your-package-list-here> # && apt-get -y install --no-install-recommends <your-package-list-here>
RUN set -ex; \ RUN set -ex; \
\ \
export DEBIAN_FRONTEND=noninteractive; \ export DEBIAN_FRONTEND=noninteractive; \
apt-get update; apt-get -y install --no-install-recommends \ apt-get update; apt-get install --yes --no-install-recommends \
git-flow \ git-flow \
git-lfs \
; rm -rf /var/lib/apt/lists/*; ; rm -rf /var/lib/apt/lists/*;
# [Optional] Uncomment this line to install global node packages. # [Optional] Uncomment this line to install global node packages.

View file

@ -1,15 +1,15 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: // For format details, see https://aka.ms/devcontainer.json. For config options, see the
// https://github.com/microsoft/vscode-dev-containers/tree/v0.245.2/containers/python-3 // README at: https://github.com/devcontainers/templates/tree/main/src/python
{ {
"name": "Python 3", "name": "Advent22 API",
"build": { "build": {
"dockerfile": "Dockerfile", "dockerfile": "Dockerfile",
"context": "..", "context": "..",
"args": { "args": {
// Update 'VARIANT' to pick a Python version: 3, 3.10, 3.9, 3.8, 3.7, 3.6 // Update 'VARIANT' to pick a Python version.
// Append -bullseye or -buster to pin to an OS version. // Append -bullseye or -buster to pin to an OS version.
// Use -bullseye variants on local on arm64/Apple Silicon. // Use -bullseye variants on local on arm64/Apple Silicon.
"VARIANT": "3.10", // "VARIANT": "3.11-bullseye",
// Options // Options
"NODE_VERSION": "none" "NODE_VERSION": "none"
} }
@ -35,17 +35,23 @@
}, },
// Add the IDs of extensions you want installed when the container is created. // Add the IDs of extensions you want installed when the container is created.
"extensions": [ "extensions": [
"be5invis.toml",
"mhutchie.git-graph",
"ms-python.python", "ms-python.python",
"ms-python.vscode-pylance", "ms-python.flake8",
"be5invis.toml" "ms-python.isort",
"ms-python.vscode-pylance"
] ]
} }
}, },
// Use 'postStartCommand' to run commands after the container is started.
"postStartCommand": "poetry install"
// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally. // Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [], // "forwardPorts": [],
// Use 'postCreateCommand' to run commands after the container is created. // Use 'postCreateCommand' to run commands after the container is created.
// "postCreateCommand": "pip3 install --user -r requirements.txt", // "postCreateCommand": "pip3 install --user -r requirements.txt",
"postStartCommand": "poetry install", // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. // "remoteUser": "root"
"remoteUser": "vscode"
} }

View file

@ -9,6 +9,9 @@
"type": "python", "type": "python",
"request": "launch", "request": "launch",
"module": "advent22_api.main", "module": "advent22_api.main",
"pythonArgs": [
"-Xfrozen_modules=off",
],
"justMyCode": true "justMyCode": true
} }
] ]

View file

@ -1,3 +0,0 @@
from .app import app
__all__ = ["app"]

View file

@ -21,32 +21,26 @@ app = FastAPI(
redoc_url=SETTINGS.redoc_url, redoc_url=SETTINGS.redoc_url,
) )
@app.on_event("startup")
async def add_middlewares() -> None:
if SETTINGS.production_mode:
# Mount frontend in production mode
app.mount(
path="/",
app=StaticFiles(
directory=SETTINGS.ui_directory,
html=True,
),
name="frontend",
)
else:
# Allow CORS in debug mode
app.add_middleware(
CORSMiddleware,
allow_origins=[
"*",
],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
expose_headers=["*"],
)
app.include_router(router) app.include_router(router)
if SETTINGS.production_mode:
# Mount frontend in production mode
app.mount(
path="/",
app=StaticFiles(
directory=SETTINGS.ui_directory,
html=True,
),
name="frontend",
)
else:
# Allow CORS in debug mode
app.add_middleware(
CORSMiddleware,
allow_credentials=True,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
expose_headers=["*"],
)

View file

@ -11,7 +11,7 @@ def main() -> None:
""" """
uvicorn.run( uvicorn.run(
app="advent22_api:app", app="advent22_api.app:app",
host="0.0.0.0", host="0.0.0.0",
port=8000, port=8000,
reload=not SETTINGS.production_mode, reload=not SETTINGS.production_mode,

View file

@ -1,4 +1,5 @@
from pydantic import BaseModel, BaseSettings from pydantic import BaseModel
from pydantic_settings import BaseSettings, SettingsConfigDict
class DavSettings(BaseModel): class DavSettings(BaseModel):
@ -30,6 +31,12 @@ class Settings(BaseSettings):
Per-run settings. Per-run settings.
""" """
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
env_nested_delimiter="__",
)
##### #####
# general settings # general settings
##### #####
@ -54,10 +61,5 @@ class Settings(BaseSettings):
cache_ttl: int = 30 cache_ttl: int = 30
config_filename: str = "config.toml" config_filename: str = "config.toml"
class Config:
env_file = ".env"
env_file_encoding = "utf-8"
env_nested_delimiter = "__"
SETTINGS = Settings() SETTINGS = Settings()

1367
api/poetry.lock generated

File diff suppressed because it is too large Load diff

View file

@ -9,19 +9,18 @@ name = "advent22_api"
version = "0.1.0" version = "0.1.0"
[tool.poetry.dependencies] [tool.poetry.dependencies]
fastapi = "^0.85.0" Pillow = "^10.0.0"
python = "^3.10"
uvicorn = {extras = ["standard"], version = "^0.18.3"}
Pillow = "^9.2.0"
numpy = "^1.23.3"
webdavclient3 = "3.14.5"
async-cache = "^1.1.1" async-cache = "^1.1.1"
fastapi = "^0.103.1"
numpy = "^1.25.2"
python = "^3.11"
tomli = "^2.0.1" tomli = "^2.0.1"
uvicorn = {extras = ["standard"], version = "^0.23.2"}
[tool.poetry.dev-dependencies] webdavclient3 = "^3.14.6"
pydantic-settings = "^2.0.3"
[tool.poetry.group.dev.dependencies] [tool.poetry.group.dev.dependencies]
flake8 = "^6.0.0" flake8 = "^6.1.0"
[build-system] [build-system]
build-backend = "poetry.core.masonry.api" build-backend = "poetry.core.masonry.api"