Files
FeatureOrientedSkeleton/kernel/application/application.py
2026-07-08 23:01:55 +04:00

40 lines
1.1 KiB
Python

from typing import List, Callable, Concatenate, Awaitable
from abc import ABC, abstractmethod
from punq import Container
from kernel.feature.provider import Provider
from kernel.application.kernel import Kernel
class Application(ABC):
__kernel: Kernel
__features: List[Provider]
@abstractmethod
async def do(
self,
callback: Callable[Concatenate[Container, ...], Awaitable[None]]
) -> None:
pass
def __init__(self, kernel: Kernel, features: List[type[Provider]]) -> None:
self.__kernel = kernel
self.__features = []
for feature in features:
feature_instance = feature(kernel.get_container())
feature_instance.register()
self.__features.append(feature_instance)
async def launch(
self,
callback: Callable[Concatenate[Container, ...], Awaitable[None]]
) -> None:
for feature in self.__features:
feature.bootstrap()
await self.do(callback)
def get_container(self) -> Container:
return self.__kernel.get_container()