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
uv.lock
**/*.kdbx*
.compose_repository
__pycache__/
**/dist/

View file

@ -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

View file

@ -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:

View file

@ -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)

View file

@ -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()

View file

@ -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

View file

@ -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()

View file

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

View file

@ -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]