Skeleton ready
This commit is contained in:
39
kernel/application/application.py
Normal file
39
kernel/application/application.py
Normal file
@@ -0,0 +1,39 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user