diff --git a/.gitignore b/.gitignore index b85bc8b..8395e24 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ *.iml uv.lock **/*.kdbx* +.compose_repository __pycache__/ **/dist/ diff --git a/app/config/settings.py b/app/config/settings.py index 06f75e3..7e072aa 100644 --- a/app/config/settings.py +++ b/app/config/settings.py @@ -8,7 +8,7 @@ from pydantic_settings import BaseSettings, SettingsConfigDict class AppConfig(BaseModel): host: str = "127.0.0.1" - port: int = 8000 + port: int = 8081 reload: bool = True diff --git a/app/core/core.py b/app/core/core.py index bb6cad4..9e3acec 100644 --- a/app/core/core.py +++ b/app/core/core.py @@ -1,24 +1,20 @@ +from typing import Annotated + +from injectable import injectable, autowired, Autowired + from app.model.healthcheck import HealthCheck from app.services import DockerService, GitService, Passwords +# @injectable class WebhookProcessor: - def __init__(self): - try: - self._docker = DockerService() - except Exception as e: - self._docker = None - print(e) - try: - self._git = GitService() - except Exception as e: - self._git = None - print(f"{type(e).__name__}: {e}") - try: - self._keepass = Passwords() - except Exception as e: - self._keepass = None - print(e) + @autowired + def __init__(self, docker: Annotated[DockerService, Autowired], + git: Annotated[GitService, Autowired], + keepass: Annotated[Passwords, Autowired]): + self._docker = docker + self._git = git + self._keepass = keepass @property def health(self) -> HealthCheck: diff --git a/app/main.py b/app/main.py index 7eb04a5..5bf8c98 100644 --- a/app/main.py +++ b/app/main.py @@ -1,6 +1,7 @@ import logging from fastapi import FastAPI +from injectable import load_injection_container from app.config import get_settings from app.core.core import WebhookProcessor @@ -8,13 +9,18 @@ from app.util.logging import LoggingHandler, ExternalLoggingHandler class KarlApplication: + from starlette.types import Receive, Scope, Send def __init__(self) -> None: self._set_logging() - app = FastAPI(title="Karl", version="0.1.0") - self._set_routes(app) - self._set_events(app) + _app = FastAPI(title="Karl", version="0.1.0") + self._set_routes(_app) + self._set_events(_app) self._init_services() - pass + + self._app = _app + + async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: + await self._app.__call__(scope, receive, send) def _set_logging(self): logging.basicConfig(level=logging.INFO, handlers=[LoggingHandler()]) @@ -45,7 +51,7 @@ class KarlApplication: def _init_services(self): logger = logging.getLogger(__name__) - + load_injection_container() webhook_service = WebhookProcessor() logger.info(webhook_service.health) diff --git a/app/services/containers.py b/app/services/containers.py index 6a4814c..ef891e3 100644 --- a/app/services/containers.py +++ b/app/services/containers.py @@ -1,9 +1,11 @@ import docker from docker.models.containers import Container +from injectable import injectable from app.model.containers import Tree, Compose, SimpleContainer +@injectable(singleton=True) class DockerService: def __init__(self): self._client = docker.from_env() diff --git a/app/services/passwords.py b/app/services/passwords.py index 9dca423..18d8519 100644 --- a/app/services/passwords.py +++ b/app/services/passwords.py @@ -1,8 +1,10 @@ import os.path +from injectable import injectable from pykeepass import PyKeePass, create_database, Group +@injectable(singleton=True) class Passwords: def __init__(self): from app.config import get_settings diff --git a/app/services/vcs.py b/app/services/vcs.py index 2f0a1a2..a7d83b0 100644 --- a/app/services/vcs.py +++ b/app/services/vcs.py @@ -1,8 +1,10 @@ from git import Repo, Remote +from injectable import injectable from app.config import GitConfig, get_settings +@injectable(singleton=True) class GitService: def __init__(self): self._settings = get_settings() diff --git a/config/config.yaml b/config/config.yaml index 6d4400f..856d24e 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -1,6 +1,6 @@ app: host: "127.0.0.1" - port: 8000 + port: 8081 reload: true git: path: "F:/IdeaProjects/paas/karl/.compose_repository" diff --git a/pyproject.toml b/pyproject.toml index 13d3179..c79d3af 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,8 @@ dependencies = [ "pyyaml>=6.0.2", "gitpython>=3.1.45", "pykeepass>=4.1.1.post1", - "docker>=7.1.0" + "docker>=7.1.0", + "injectable==4.0.1", ] [project.optional-dependencies]