Basic injects

This commit is contained in:
Piotr Dec 2025-10-12 20:30:43 +02:00
parent 2d3699ad00
commit 232920683a
Signed by: stawros
GPG key ID: 74B18A3F0F1E99C0
7 changed files with 29 additions and 19 deletions

View file

@ -1,24 +1,20 @@
from typing import Annotated
from injectable import injectable, autowired, Autowired
from app.model.healthcheck import HealthCheck from app.model.healthcheck import HealthCheck
from app.services import DockerService, GitService, Passwords from app.services import DockerService, GitService, Passwords
# @injectable
class WebhookProcessor: class WebhookProcessor:
def __init__(self): @autowired
try: def __init__(self, docker: Annotated[DockerService, Autowired],
self._docker = DockerService() git: Annotated[GitService, Autowired],
except Exception as e: keepass: Annotated[Passwords, Autowired]):
self._docker = None self._docker = docker
print(e) self._git = git
try: self._keepass = keepass
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)
@property @property
def health(self) -> HealthCheck: def health(self) -> HealthCheck:

View file

@ -1,5 +1,6 @@
from fastapi import FastAPI, Request from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse from fastapi.responses import HTMLResponse
from injectable import load_injection_container
from jinja2 import Environment, FileSystemLoader, select_autoescape from jinja2 import Environment, FileSystemLoader, select_autoescape
from app.api.v1 import router as api_v1_router 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.include_router(api_v1_router, prefix="/api/v1", tags=["v1"])
# app.add_event_handler() # app.add_event_handler()
load_injection_container()
webhook_service = WebhookProcessor() webhook_service = WebhookProcessor()
print(webhook_service.health) print(webhook_service.health)

View file

@ -1,9 +1,11 @@
import docker import docker
from docker.models.containers import Container from docker.models.containers import Container
from injectable import injectable
from app.model.containers import Tree, Compose, SimpleContainer from app.model.containers import Tree, Compose, SimpleContainer
@injectable(singleton=True)
class DockerService: class DockerService:
def __init__(self): def __init__(self):
self._client = docker.from_env() self._client = docker.from_env()

View file

@ -1,8 +1,10 @@
import os.path import os.path
from injectable import injectable
from pykeepass import PyKeePass, create_database, Group from pykeepass import PyKeePass, create_database, Group
@injectable(singleton=True)
class Passwords: class Passwords:
def __init__(self): def __init__(self):
from app.config import get_settings from app.config import get_settings

View file

@ -1,13 +1,18 @@
from git import Repo, Remote from git import Repo, Remote
from injectable import injectable
from app.config import get_settings from app.config import get_settings
@injectable(singleton=True)
class GitService: class GitService:
def __init__(self): def __init__(self):
self._settings = get_settings() self._settings = get_settings()
self._repo = Repo(self._settings.git.directory) try: # TODO: clone if not exists
self._origin: Remote = self._repo.remotes.origin 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: def get_modified_compose(self) -> str | None:
self._update() self._update()

View file

@ -2,6 +2,8 @@ app:
host: "127.0.0.1" host: "127.0.0.1"
port: 8000 port: 8000
reload: true reload: true
git:
directory: "F:/IdeaProjects/paas/karl/.compose_repository"
kp: kp:
file: "config/kp.kdbx" file: "config/kp.kdbx"
secret: "config/secret.txt" secret: "config/secret.txt"

View file

@ -13,7 +13,8 @@ dependencies = [
"pyyaml>=6.0.2", "pyyaml>=6.0.2",
"gitpython>=3.1.45", "gitpython>=3.1.45",
"pykeepass>=4.1.1.post1", "pykeepass>=4.1.1.post1",
"docker>=7.1.0" "docker>=7.1.0",
"injectable==4.0.1",
] ]
[project.optional-dependencies] [project.optional-dependencies]