Merge pull request 'Injectables' (#7) from di into develop

Reviewed-on: https://hattori.ztsh.eu/paas/karl/pulls/7
This commit is contained in:
Piotr Dec 2025-10-16 21:39:53 +02:00
commit 4d730c8bfb
9 changed files with 34 additions and 24 deletions

1
.gitignore vendored
View file

@ -2,6 +2,7 @@
*.iml *.iml
uv.lock uv.lock
**/*.kdbx* **/*.kdbx*
.compose_repository
__pycache__/ __pycache__/
**/dist/ **/dist/

View file

@ -8,7 +8,7 @@ from pydantic_settings import BaseSettings, SettingsConfigDict
class AppConfig(BaseModel): class AppConfig(BaseModel):
host: str = "127.0.0.1" host: str = "127.0.0.1"
port: int = 8000 port: int = 8081
reload: bool = True reload: bool = True

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,6 +1,7 @@
import logging import logging
from fastapi import FastAPI from fastapi import FastAPI
from injectable import load_injection_container
from app.config import get_settings from app.config import get_settings
from app.core.core import WebhookProcessor from app.core.core import WebhookProcessor
@ -8,13 +9,18 @@ from app.util.logging import LoggingHandler, ExternalLoggingHandler
class KarlApplication: class KarlApplication:
from starlette.types import Receive, Scope, Send
def __init__(self) -> None: def __init__(self) -> None:
self._set_logging() self._set_logging()
app = FastAPI(title="Karl", version="0.1.0") _app = FastAPI(title="Karl", version="0.1.0")
self._set_routes(app) self._set_routes(_app)
self._set_events(app) self._set_events(_app)
self._init_services() 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): def _set_logging(self):
logging.basicConfig(level=logging.INFO, handlers=[LoggingHandler()]) logging.basicConfig(level=logging.INFO, handlers=[LoggingHandler()])
@ -45,7 +51,7 @@ class KarlApplication:
def _init_services(self): def _init_services(self):
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
load_injection_container()
webhook_service = WebhookProcessor() webhook_service = WebhookProcessor()
logger.info(webhook_service.health) logger.info(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,8 +1,10 @@
from git import Repo, Remote from git import Repo, Remote
from injectable import injectable
from app.config import GitConfig, get_settings from app.config import GitConfig, get_settings
@injectable(singleton=True)
class GitService: class GitService:
def __init__(self): def __init__(self):
self._settings = get_settings() self._settings = get_settings()

View file

@ -1,6 +1,6 @@
app: app:
host: "127.0.0.1" host: "127.0.0.1"
port: 8000 port: 8081
reload: true reload: true
git: git:
path: "F:/IdeaProjects/paas/karl/.compose_repository" path: "F:/IdeaProjects/paas/karl/.compose_repository"

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]