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 4b13b8a..eb0d6ea 100644 --- a/app/main.py +++ b/app/main.py @@ -1,5 +1,6 @@ from fastapi import FastAPI, Request from fastapi.responses import HTMLResponse +from injectable import load_injection_container from jinja2 import Environment, FileSystemLoader, select_autoescape from app.api.v1 import router as api_v1_router @@ -18,6 +19,7 @@ app = FastAPI(title="Karl", version="0.1.0") app.include_router(api_v1_router, prefix="/api/v1", tags=["v1"]) # app.add_event_handler() +load_injection_container() webhook_service = WebhookProcessor() print(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 c137108..8e58277 100644 --- a/app/services/vcs.py +++ b/app/services/vcs.py @@ -1,13 +1,18 @@ from git import Repo, Remote +from injectable import injectable from app.config import get_settings +@injectable(singleton=True) class GitService: def __init__(self): self._settings = get_settings() - self._repo = Repo(self._settings.git.directory) - self._origin: Remote = self._repo.remotes.origin + try: # TODO: clone if not exists + self._repo = Repo(self._settings.git.directory) + self._origin: Remote = self._repo.remotes.origin + except: + self._repo = None def get_modified_compose(self) -> str | None: self._update() diff --git a/config/config.yaml b/config/config.yaml index 5b47197..c48d6e9 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -2,6 +2,8 @@ app: host: "127.0.0.1" port: 8000 reload: true +git: + directory: "F:/IdeaProjects/paas/karl/.compose_repository" kp: file: "config/kp.kdbx" secret: "config/secret.txt" 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]