Improved dynamic modules support

This commit is contained in:
2021-11-15 21:52:28 +01:00
parent 4763c41b10
commit f2ee3d64f6
7 changed files with 40 additions and 21 deletions

View File

@@ -1,7 +1,13 @@
from os import path
import discord
from cpl_core.dependency_injection.service_provider_abc import \
ServiceProviderABC
from cpl_core.environment.application_environment_abc import \
ApplicationEnvironmentABC
from cpl_core.logging import LoggerABC
from cpl_query.extension import List
from discord.ext import commands
from modules_core.abc.module_abc import ModuleABC
from modules_core.abc.module_service_abc import ModuleServiceABC
@@ -9,13 +15,17 @@ from modules_core.abc.module_service_abc import ModuleServiceABC
class ModuleService(ModuleServiceABC):
def __init__(self, logger: LoggerABC, env: ApplicationEnvironmentABC):
def __init__(self, logger: LoggerABC, services: ServiceProviderABC, env: ApplicationEnvironmentABC):
self._logger = logger
self._services = services
self._env = env
self._modules: List[ModuleABC] = List()
self._modules.extend(ModuleABC.__subclasses__())
def register(self, module: ModuleABC):
self._modules.append(module)
def start_modules(self):
self._modules.for_each(lambda m: m.echo())
async def start_modules(self):
self._logger.info(__name__, self._modules)
modules = self._modules.where(lambda m: hasattr(m, 'on_ready'))
self._logger.info(__name__, f'HIER: {modules}')
for module_type in modules:
module = self._services.get_service(module_type)
await module.on_ready()