config.py

This commit is contained in:
Jörn-Michael Miehe 2022-11-04 18:49:31 +00:00
parent 78d9f7d194
commit 65922626bb
6 changed files with 41 additions and 17 deletions

View file

@ -0,0 +1,16 @@
import tomli
from pydantic import BaseModel
from .dav_common import dav_get_textfile_content
from .settings import SETTINGS
class Config(BaseModel):
admin_password: str
solution: str
async def get_config() -> Config:
txt = await dav_get_textfile_content(path=SETTINGS.config_filename)
return Config.parse_obj(tomli.loads(txt))

View file

@ -2,18 +2,12 @@ import itertools
import random import random
from typing import Any, Sequence from typing import Any, Sequence
from advent22_api.settings import SETTINGS from ..config import get_config
from ..dav_common import dav_get_textfile_content
async def get_loesungswort() -> str:
return await dav_get_textfile_content(SETTINGS.solution_filename)
async def get_rnd(bonus_salt: Any = "") -> random.Random: async def get_rnd(bonus_salt: Any = "") -> random.Random:
loesungswort = await get_loesungswort() cfg = await get_config()
return random.Random(f"{loesungswort}{bonus_salt}") return random.Random(f"{cfg.solution}{bonus_salt}")
async def set_length(seq: Sequence, length: int) -> list: async def set_length(seq: Sequence, length: int) -> list:

View file

@ -6,26 +6,27 @@ from fastapi import APIRouter, Depends
from fastapi.responses import StreamingResponse from fastapi.responses import StreamingResponse
from PIL import ImageFont from PIL import ImageFont
from ..config import Config, get_config
from ..dav_common import dav_get_file, dav_list_files from ..dav_common import dav_get_file, dav_list_files
from ._image import AdventImage from ._image import AdventImage
from ._misc import get_loesungswort, get_rnd, set_length, shuffle from ._misc import get_rnd, set_length, shuffle
router = APIRouter(prefix="/days", tags=["days"]) router = APIRouter(prefix="/days", tags=["days"])
@router.on_event("startup") @router.on_event("startup")
async def startup() -> None: async def startup() -> None:
loesungswort = await get_loesungswort() cfg = await get_config()
print(loesungswort) print(cfg.solution)
print("".join(await shuffle(loesungswort))) print("".join(await shuffle(cfg.solution)))
@router.get("/letter/{index}") @router.get("/letter/{index}")
async def get_letter( async def get_letter(
index: int, index: int,
loesungswort: str = Depends(get_loesungswort), cfg: Config = Depends(get_config),
) -> str: ) -> str:
return (await shuffle(loesungswort))[index] return (await shuffle(cfg.solution))[index]
# @router.get("/date") # @router.get("/date")

View file

@ -52,7 +52,7 @@ class Settings(BaseSettings):
webdav: DavSettings = DavSettings() webdav: DavSettings = DavSettings()
cache_ttl: int = 30 cache_ttl: int = 30
solution_filename: str = "loesungswort.txt" config_filename: str = "config.toml"
class Config: class Config:
env_file = ".env" env_file = ".env"

14
api/poetry.lock generated
View file

@ -233,6 +233,14 @@ anyio = ">=3.4.0,<5"
[package.extras] [package.extras]
full = ["itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests"] full = ["itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests"]
[[package]]
name = "tomli"
version = "2.0.1"
description = "A lil' TOML parser"
category = "main"
optional = false
python-versions = ">=3.7"
[[package]] [[package]]
name = "typing-extensions" name = "typing-extensions"
version = "4.4.0" version = "4.4.0"
@ -324,7 +332,7 @@ python-versions = ">=3.7"
[metadata] [metadata]
lock-version = "1.1" lock-version = "1.1"
python-versions = "^3.10" python-versions = "^3.10"
content-hash = "d37ea64eccdac520a3649119169642395eaeeb42ab20668c444774f2baccede3" content-hash = "b79fd848be37a72a7fb711d7e34b33dc22dc6cdea6cb2cfe1943359767728782"
[metadata.files] [metadata.files]
anyio = [ anyio = [
@ -671,6 +679,10 @@ starlette = [
{file = "starlette-0.20.4-py3-none-any.whl", hash = "sha256:c0414d5a56297d37f3db96a84034d61ce29889b9eaccf65eb98a0b39441fcaa3"}, {file = "starlette-0.20.4-py3-none-any.whl", hash = "sha256:c0414d5a56297d37f3db96a84034d61ce29889b9eaccf65eb98a0b39441fcaa3"},
{file = "starlette-0.20.4.tar.gz", hash = "sha256:42fcf3122f998fefce3e2c5ad7e5edbf0f02cf685d646a83a08d404726af5084"}, {file = "starlette-0.20.4.tar.gz", hash = "sha256:42fcf3122f998fefce3e2c5ad7e5edbf0f02cf685d646a83a08d404726af5084"},
] ]
tomli = [
{file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
]
typing-extensions = [ typing-extensions = [
{file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"},
{file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"},

View file

@ -16,6 +16,7 @@ Pillow = "^9.2.0"
numpy = "^1.23.3" numpy = "^1.23.3"
webdavclient3 = "3.14.5" webdavclient3 = "3.14.5"
async-cache = "^1.1.1" async-cache = "^1.1.1"
tomli = "^2.0.1"
[tool.poetry.dev-dependencies] [tool.poetry.dev-dependencies]