From 04e8e6400311607478427603ea998325465304ff Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 3 Oct 2022 13:39:09 +0200 Subject: [PATCH] Improved feature-flags & fixed logging --- src/bot/config/appsettings.development.json | 8 --- .../config/appsettings.edrafts-pc-ubuntu.json | 8 --- src/bot/config/appsettings.production.json | 8 --- src/bot/config/appsettings.staging.json | 8 --- src/bot/config/feature-flags.json | 13 ++++ src/bot/main.py | 5 +- src/bot/startup.py | 29 +++++++- src/bot/startup_module_extension.py | 2 +- src/bot/startup_settings_extension.py | 5 +- src/bot_core/abc/module_abc.py | 7 +- .../configuration/feature_flags_enum.py | 17 +++++ .../configuration/feature_flags_settings.py | 72 +++++++------------ .../core_extension/core_extension_module.py | 3 +- src/bot_core/core_module.py | 18 +---- src/bot_core/events/core_on_ready_event.py | 4 +- src/bot_core/service/client_utils_service.py | 9 ++- src/bot_data/data_module.py | 3 +- src/modules/admin/admin_module.py | 3 +- src/modules/base/base_module.py | 3 +- src/modules/boot_log/boot_log_extension.py | 3 +- src/modules/boot_log/boot_log_module.py | 3 +- src/modules/database/database_extension.py | 3 +- src/modules/database/database_module.py | 3 +- src/modules/moderator/moderator_module.py | 3 +- src/modules/permission/permission_module.py | 3 +- 25 files changed, 125 insertions(+), 118 deletions(-) create mode 100644 src/bot/config/feature-flags.json create mode 100644 src/bot_core/configuration/feature_flags_enum.py diff --git a/src/bot/config/appsettings.development.json b/src/bot/config/appsettings.development.json index 1b3dfa6da0..84e61a332a 100644 --- a/src/bot/config/appsettings.development.json +++ b/src/bot/config/appsettings.development.json @@ -37,14 +37,6 @@ "de" ] }, - "FeatureFlags": { - "AdminModule": true, - "BaseModule": true, - "BootLogModule": true, - "DatabaseModule": true, - "ModeratorModule": true, - "PermissionModule": true - }, "DiscordBot": { "Token": "OTk4MTU5NjczODkzMDYwNzM4.GN3QyA.yvWO6L7Eu36gXQ7ARDs0Jg2J1VqIDnHLou5lT4", "Prefix": "!kd " diff --git a/src/bot/config/appsettings.edrafts-pc-ubuntu.json b/src/bot/config/appsettings.edrafts-pc-ubuntu.json index 62c82eaa39..076ae8d88a 100644 --- a/src/bot/config/appsettings.edrafts-pc-ubuntu.json +++ b/src/bot/config/appsettings.edrafts-pc-ubuntu.json @@ -39,14 +39,6 @@ "Token": "OTk4MTYwNDI3Njg5MTgxMjM3.GI7h67.BqD6Lu1Tz0MuG8iktYrcLnHi1pNozyMiWFGTKI", "Prefix": "!ke " }, - "FeatureFlags": { - "AdminModule": true, - "BaseModule": true, - "BootLogModule": true, - "DatabaseModule": true, - "ModeratorModule": true, - "PermissionModule": true - }, "Bot": { "910199451145076828": { "MessageDeleteTimer": 2 diff --git a/src/bot/config/appsettings.production.json b/src/bot/config/appsettings.production.json index 8b195269b0..346fff41da 100644 --- a/src/bot/config/appsettings.production.json +++ b/src/bot/config/appsettings.production.json @@ -48,14 +48,6 @@ "Buffered": "true", "AuthPlugin": "mysql_native_password" }, - "FeatureFlags": { - "AdminModule": true, - "BaseModule": true, - "BootLogModule": true, - "DatabaseModule": true, - "ModeratorModule": true, - "PermissionModule": true - }, "Bot": { "650366049023295514": { "MessageDeleteTimer": 2 diff --git a/src/bot/config/appsettings.staging.json b/src/bot/config/appsettings.staging.json index 7ccbbcb82c..c8a9d88b10 100644 --- a/src/bot/config/appsettings.staging.json +++ b/src/bot/config/appsettings.staging.json @@ -48,14 +48,6 @@ "Buffered": "true", "AuthPlugin": "mysql_native_password" }, - "FeatureFlags": { - "AdminModule": true, - "BaseModule": true, - "BootLogModule": true, - "DatabaseModule": true, - "ModeratorModule": true, - "PermissionModule": true - }, "Bot": { "910199451145076828": { "MessageDeleteTimer": 4 diff --git a/src/bot/config/feature-flags.json b/src/bot/config/feature-flags.json new file mode 100644 index 0000000000..5c3476446e --- /dev/null +++ b/src/bot/config/feature-flags.json @@ -0,0 +1,13 @@ +{ + "FeatureFlags": { + "AdminModule": true, + "BaseModule": true, + "BootLogModule": true, + "CoreModule": true, + "CoreExtensionModule": true, + "DatabaseModule": true, + "ModeratorModule": true, + "PermissionModule": true, + "PresenceModule": true + } +} diff --git a/src/bot/main.py b/src/bot/main.py index b00c94185e..d2bbdb5a5e 100644 --- a/src/bot/main.py +++ b/src/bot/main.py @@ -1,4 +1,5 @@ import asyncio +import traceback from typing import Optional from cpl_core.application import ApplicationBuilder @@ -45,12 +46,12 @@ def main(): except KeyboardInterrupt: asyncio.run(program.stop()) except Exception as e: - Console.error(f'[ ERROR ] [ {__name__} ]: Cannot start the bot', str(e)) + Console.error(f'[ ERROR ] [ {__name__} ]: Cannot start the bot', f'{e} -> {traceback.format_exc()}') finally: try: asyncio.run(program.stop()) except Exception as e: - Console.error(f'[ ERROR ] [ {__name__} ]: Cannot stop the bot', str(e)) + Console.error(f'[ ERROR ] [ {__name__} ]: Cannot stop the bot', f'{e} -> {traceback.format_exc()}') if program.app is not None and program.app.is_restart(): del program diff --git a/src/bot/startup.py b/src/bot/startup.py index 6a1fa559e8..f1c123c5b0 100644 --- a/src/bot/startup.py +++ b/src/bot/startup.py @@ -4,9 +4,17 @@ from typing import Optional from cpl_core.application import StartupABC from cpl_core.configuration import ConfigurationABC from cpl_core.database import DatabaseSettings -from cpl_core.dependency_injection import ServiceProviderABC, ServiceCollectionABC +from cpl_core.dependency_injection import ServiceCollectionABC +from cpl_core.dependency_injection import ServiceProviderABC from cpl_core.environment import ApplicationEnvironment +from cpl_core.logging import LoggerABC +from bot_core.abc.custom_file_logger_abc import CustomFileLoggerABC +from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum +from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings +from bot_core.logging.command_logger import CommandLogger +from bot_core.logging.database_logger import DatabaseLogger +from bot_core.logging.message_logger import MessageLogger from bot_data.db_context import DBContext @@ -17,15 +25,32 @@ class Startup(StartupABC): self._start_time = datetime.now() self._config: Optional[ConfigurationABC] = None + self._feature_flags: Optional[FeatureFlagsSettings] = None def configure_configuration(self, configuration: ConfigurationABC, environment: ApplicationEnvironment) -> ConfigurationABC: self._config = configuration + self._feature_flags = configuration.get_configuration(FeatureFlagsSettings) return configuration def configure_services(self, services: ServiceCollectionABC, environment: ApplicationEnvironment) -> ServiceProviderABC: services.add_logging() + if self._feature_flags.get_flag(FeatureFlagsEnum.core_module): + # custom logging + services.add_singleton(CustomFileLoggerABC, CommandLogger) + services.add_singleton(CustomFileLoggerABC, DatabaseLogger) + services.add_singleton(CustomFileLoggerABC, MessageLogger) services.add_translation() services.add_db_context(DBContext, self._config.get_configuration(DatabaseSettings)) - return services.build_service_provider() + provider = services.build_service_provider() + # instantiate custom logger + for c in CustomFileLoggerABC.__subclasses__(): + i: LoggerABC = provider.get_service(c) + + + logger: LoggerABC = provider.get_service(LoggerABC) + for flag in [f for f in FeatureFlagsEnum]: + logger.debug(__name__, f'Loaded feature-flag: {flag} = {self._feature_flags.get_flag(flag)}') + + return provider diff --git a/src/bot/startup_module_extension.py b/src/bot/startup_module_extension.py index 2bf736999b..70f1b184af 100644 --- a/src/bot/startup_module_extension.py +++ b/src/bot/startup_module_extension.py @@ -29,7 +29,7 @@ class StartupModuleExtension(StartupExtensionABC): for module_type in self._modules: module = module_type(dc_collection) - if not module.feature_flag(self._feature_flags): + if not self._feature_flags.get_flag(module.feature_flag): continue Console.set_foreground_color(ForegroundColorEnum.green) diff --git a/src/bot/startup_settings_extension.py b/src/bot/startup_settings_extension.py index 0a9b80911d..4dcee8bf4d 100644 --- a/src/bot/startup_settings_extension.py +++ b/src/bot/startup_settings_extension.py @@ -6,12 +6,9 @@ from cpl_core.application import StartupExtensionABC from cpl_core.configuration import ConfigurationABC from cpl_core.dependency_injection import ServiceCollectionABC from cpl_core.environment import ApplicationEnvironmentABC -from cpl_core.logging import LoggerABC from bot_core.configuration.bot_logging_settings import BotLoggingSettings from bot_core.configuration.bot_settings import BotSettings -from bot_core.logging.command_logger import CommandLogger -from bot_core.logging.database_logger import DatabaseLogger from modules.base.configuration.base_settings import BaseSettings from modules.boot_log.configuration.boot_log_settings import BootLogSettings from modules.permission.configuration.permission_settings import PermissionSettings @@ -31,6 +28,8 @@ class StartupSettingsExtension(StartupExtensionABC): configuration.add_json_file(f'config/appsettings.json', optional=False) configuration.add_json_file(f'config/appsettings.{environment.environment_name}.json', optional=True) configuration.add_json_file(f'config/appsettings.{environment.host_name}.json', optional=True) + # load feature-flags + configuration.add_json_file(f'config/feature-flags.json', optional=False) configuration.add_configuration('Startup_StartTime', str(self._start_time)) self._configure_settings_with_sub_settings(configuration, BotSettings, lambda x: x.servers, lambda x: x.id) diff --git a/src/bot_core/abc/module_abc.py b/src/bot_core/abc/module_abc.py index af52acf0e1..45f5f5b2cc 100644 --- a/src/bot_core/abc/module_abc.py +++ b/src/bot_core/abc/module_abc.py @@ -1,19 +1,20 @@ from abc import abstractmethod -from typing import Callable from cpl_core.application import StartupExtensionABC from cpl_discord.service.discord_collection_abc import DiscordCollectionABC +from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum + class ModuleABC(StartupExtensionABC): @abstractmethod - def __init__(self, dc: DiscordCollectionABC, feature_flag: Callable = None): + def __init__(self, dc: DiscordCollectionABC, feature_flag: FeatureFlagsEnum): StartupExtensionABC.__init__(self) self._dc = dc self._feature_flag = feature_flag @property - def feature_flag(self) -> Callable: + def feature_flag(self) -> FeatureFlagsEnum: return self._feature_flag diff --git a/src/bot_core/configuration/feature_flags_enum.py b/src/bot_core/configuration/feature_flags_enum.py new file mode 100644 index 0000000000..91e2ca9169 --- /dev/null +++ b/src/bot_core/configuration/feature_flags_enum.py @@ -0,0 +1,17 @@ +from enum import Enum + + +class FeatureFlagsEnum(Enum): + + # modules + admin_module = 'AdminModule' + base_module = 'BaseModule' + boot_log_module = 'BootLogModule' + core_module = 'CoreModule' + core_extension_module = 'CoreExtensionModule' + data_module = 'DataModule', + database_module = 'DatabaseModule', + moderator_module = 'ModeratorModule' + permission_module = 'PermissionModule' + # features + presence = 'Presence' diff --git a/src/bot_core/configuration/feature_flags_settings.py b/src/bot_core/configuration/feature_flags_settings.py index 8d2807445d..8fb815f773 100644 --- a/src/bot_core/configuration/feature_flags_settings.py +++ b/src/bot_core/configuration/feature_flags_settings.py @@ -1,65 +1,47 @@ import traceback -from typing import Optional +from typing import Optional, Callable from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC from cpl_core.console import Console +from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum + class FeatureFlagsSettings(ConfigurationModelABC): def __init__(self): ConfigurationModelABC.__init__(self) - self._admin_module = False # 02.10.2022 #48 - self._base_module = True # 02.10.2022 #48 - self._boot_log_module = True # 02.10.2022 #48 - self._database_module = True # 02.10.2022 #48 - self._moderator_module = False # 02.10.2022 #48 - self._permission_module = True # 02.10.2022 #48 + self._flags = { + # modules + FeatureFlagsEnum.admin_module.value: False, # 02.10.2022 #48 + FeatureFlagsEnum.base_module.value: True, # 02.10.2022 #48 + FeatureFlagsEnum.boot_log_module.value: True, # 02.10.2022 #48 + FeatureFlagsEnum.core_module.value: True, # 03.10.2022 #56 + FeatureFlagsEnum.core_extension_module.value: True, # 03.10.2022 #56 + FeatureFlagsEnum.data_module.value: True, # 03.10.2022 #56 + FeatureFlagsEnum.database_module.value: True, # 02.10.2022 #48 + FeatureFlagsEnum.moderator_module.value: False, # 02.10.2022 #48 + FeatureFlagsEnum.permission_module.value: True, # 02.10.2022 #48 + # features + FeatureFlagsEnum.presence.value: True, # 03.10.2022 #56 + } - @property - def admin_module(self) -> bool: - return self._admin_module + def get_flag(self, key: FeatureFlagsEnum) -> bool: + if key.value not in self._flags: + return False + return self._flags[key.value] - @property - def base_module(self) -> bool: - return self._base_module + def _load_flag(self, settings: dict, key: FeatureFlagsEnum): + if key.value not in settings: + return - @property - def boot_log_module(self) -> bool: - return self._boot_log_module - - @property - def database_module(self) -> bool: - return self._database_module - - @property - def moderator_module(self) -> bool: - return self._moderator_module - - @property - def permission_module(self) -> bool: - return self._permission_module + self._flags[key.value] = bool(settings[key.value]) def from_dict(self, settings: dict): try: - if 'AdminModule' in settings: - self._admin_module = settings['AdminModule'] - - if 'BaseModule' in settings: - self._base_module = settings['BaseModule'] - - if 'BootLogModule' in settings: - self._boot_log_module = settings['BootLogModule'] - - if 'DatabaseModule' in settings: - self._database_module = settings['DatabaseModule'] - - if 'ModeratorModule' in settings: - self._moderator_module = settings['ModeratorModule'] - - if 'PermissionModule' in settings: - self._permission_module = settings['PermissionModule'] + for flag in [f.value for f in FeatureFlagsEnum]: + self._load_flag(settings, FeatureFlagsEnum(flag)) except Exception as e: Console.error(f'[ ERROR ] [ {__name__} ]: Reading error in {type(self).__name__} settings') Console.error(f'[ EXCEPTION ] [ {__name__} ]: {e} -> {traceback.format_exc()}') diff --git a/src/bot_core/core_extension/core_extension_module.py b/src/bot_core/core_extension/core_extension_module.py index 198e0b3301..26f1a06341 100644 --- a/src/bot_core/core_extension/core_extension_module.py +++ b/src/bot_core/core_extension/core_extension_module.py @@ -5,13 +5,14 @@ from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum from cpl_discord.service.discord_collection_abc import DiscordCollectionABC from bot_core.abc.module_abc import ModuleABC +from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum from bot_core.core_extension.core_extension_on_ready_event import CoreExtensionOnReadyEvent class CoreExtensionModule(ModuleABC): def __init__(self, dc: DiscordCollectionABC): - ModuleABC.__init__(self, dc, lambda x: x.base_module) + ModuleABC.__init__(self, dc, FeatureFlagsEnum.core_extension_module) def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): pass diff --git a/src/bot_core/core_module.py b/src/bot_core/core_module.py index f8320d6b7d..60d4337a84 100644 --- a/src/bot_core/core_module.py +++ b/src/bot_core/core_module.py @@ -1,18 +1,14 @@ from cpl_core.configuration import ConfigurationABC from cpl_core.dependency_injection import ServiceCollectionABC from cpl_core.environment import ApplicationEnvironmentABC -from cpl_core.logging import LoggerABC from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum from cpl_discord.service.discord_collection_abc import DiscordCollectionABC from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC -from bot_core.abc.custom_file_logger_abc import CustomFileLoggerABC from bot_core.abc.message_service_abc import MessageServiceABC from bot_core.abc.module_abc import ModuleABC +from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum from bot_core.events.core_on_ready_event import CoreOnReadyEvent -from bot_core.logging.command_logger import CommandLogger -from bot_core.logging.database_logger import DatabaseLogger -from bot_core.logging.message_logger import MessageLogger from bot_core.pipes.date_time_offset_pipe import DateTimeOffsetPipe from bot_core.service.client_utils_service import ClientUtilsService from bot_core.service.message_service import MessageService @@ -21,17 +17,12 @@ from bot_core.service.message_service import MessageService class CoreModule(ModuleABC): def __init__(self, dc: DiscordCollectionABC): - ModuleABC.__init__(self, dc, lambda x: x.base_module) + ModuleABC.__init__(self, dc, FeatureFlagsEnum.core_module) def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): pass def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC): - # custom logging - services.add_singleton(CustomFileLoggerABC, CommandLogger) - services.add_singleton(CustomFileLoggerABC, DatabaseLogger) - services.add_singleton(CustomFileLoggerABC, MessageLogger) - services.add_transient(MessageServiceABC, MessageService) services.add_transient(ClientUtilsServiceABC, ClientUtilsService) @@ -39,8 +30,3 @@ class CoreModule(ModuleABC): services.add_transient(DateTimeOffsetPipe) self._dc.add_event(DiscordEventTypesEnum.on_ready.value, CoreOnReadyEvent) - - provider = services.build_service_provider() - # instantiate custom logger - for c in CustomFileLoggerABC.__subclasses__(): - i: LoggerABC = provider.get_service(c) diff --git a/src/bot_core/events/core_on_ready_event.py b/src/bot_core/events/core_on_ready_event.py index f438884f28..540f9d1f71 100644 --- a/src/bot_core/events/core_on_ready_event.py +++ b/src/bot_core/events/core_on_ready_event.py @@ -1,5 +1,3 @@ -import asyncio - from cpl_core.logging import LoggerABC from cpl_discord.events import OnReadyABC from cpl_discord.service import DiscordBotServiceABC @@ -15,7 +13,7 @@ class CoreOnReadyEvent(OnReadyABC): logger: LoggerABC, bot: DiscordBotServiceABC, client_utils: ClientUtilsServiceABC, - t: TranslatePipe + t: TranslatePipe, ): OnReadyABC.__init__(self) diff --git a/src/bot_core/service/client_utils_service.py b/src/bot_core/service/client_utils_service.py index 2adfb28903..733e3903b0 100644 --- a/src/bot_core/service/client_utils_service.py +++ b/src/bot_core/service/client_utils_service.py @@ -9,6 +9,8 @@ from discord.ext.commands import Context from bot_core.abc.client_utils_service_abc import ClientUtilsServiceABC from bot_core.abc.message_service_abc import MessageServiceABC +from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum +from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings from bot_data.abc.client_repository_abc import ClientRepositoryABC from bot_data.abc.server_repository_abc import ServerRepositoryABC @@ -24,7 +26,8 @@ class ClientUtilsService(ClientUtilsServiceABC): clients: ClientRepositoryABC, message_service: MessageServiceABC, db: DatabaseContextABC, - t: TranslatePipe + t: TranslatePipe, + feature_flags: FeatureFlagsSettings ): ClientUtilsServiceABC.__init__(self) self._config = config @@ -35,6 +38,7 @@ class ClientUtilsService(ClientUtilsServiceABC): self._message_service = message_service self._db = db self._t = t + self._feature_flags = feature_flags def received_command(self, guild_id: int): server = self._servers.get_server_by_discord_id(guild_id) @@ -64,6 +68,9 @@ class ClientUtilsService(ClientUtilsServiceABC): return False async def presence_game(self, t_key: str): + if not self._feature_flags.get_flag(FeatureFlagsEnum.presence): + return + import bot name = self._t.transform(t_key).format(bot.__version__) await self._bot.change_presence(activity=discord.Game(name=name)) diff --git a/src/bot_data/data_module.py b/src/bot_data/data_module.py index cbceaa4e2b..099ba2fd59 100644 --- a/src/bot_data/data_module.py +++ b/src/bot_data/data_module.py @@ -4,6 +4,7 @@ from cpl_core.environment import ApplicationEnvironmentABC from cpl_discord.service.discord_collection_abc import DiscordCollectionABC from bot_core.abc.module_abc import ModuleABC +from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum from bot_data.abc.client_repository_abc import ClientRepositoryABC from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC from bot_data.abc.server_repository_abc import ServerRepositoryABC @@ -21,7 +22,7 @@ from bot_data.service.user_repository_service import UserRepositoryService class DataModule(ModuleABC): def __init__(self, dc: DiscordCollectionABC): - ModuleABC.__init__(self, dc, lambda x: x.base_module) + ModuleABC.__init__(self, dc, FeatureFlagsEnum.data_module) def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): pass diff --git a/src/modules/admin/admin_module.py b/src/modules/admin/admin_module.py index 6df25d175c..48f76afac3 100644 --- a/src/modules/admin/admin_module.py +++ b/src/modules/admin/admin_module.py @@ -4,6 +4,7 @@ from cpl_core.environment import ApplicationEnvironmentABC from cpl_discord.service.discord_collection_abc import DiscordCollectionABC from bot_core.abc.module_abc import ModuleABC +from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum from modules.admin.command.restart_command import RestartCommand from modules.admin.command.shutdown_command import ShutdownCommand @@ -11,7 +12,7 @@ from modules.admin.command.shutdown_command import ShutdownCommand class AdminModule(ModuleABC): def __init__(self, dc: DiscordCollectionABC): - ModuleABC.__init__(self, dc, lambda x: x.admin_module) + ModuleABC.__init__(self, dc, FeatureFlagsEnum.admin_module) def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): pass diff --git a/src/modules/base/base_module.py b/src/modules/base/base_module.py index d666a823cd..ef52df053f 100644 --- a/src/modules/base/base_module.py +++ b/src/modules/base/base_module.py @@ -5,6 +5,7 @@ from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum from cpl_discord.service.discord_collection_abc import DiscordCollectionABC from bot_core.abc.module_abc import ModuleABC +from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum from modules.base.abc.base_helper_abc import BaseHelperABC from modules.base.command.afk_command import AFKCommand from modules.base.command.help_command import HelpCommand @@ -23,7 +24,7 @@ from modules.base.service.base_helper_service import BaseHelperService class BaseModule(ModuleABC): def __init__(self, dc: DiscordCollectionABC): - ModuleABC.__init__(self, dc, lambda x: x.base_module) + ModuleABC.__init__(self, dc, FeatureFlagsEnum.base_module) def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): pass diff --git a/src/modules/boot_log/boot_log_extension.py b/src/modules/boot_log/boot_log_extension.py index 42db4b8eba..bec9f1f769 100644 --- a/src/modules/boot_log/boot_log_extension.py +++ b/src/modules/boot_log/boot_log_extension.py @@ -5,6 +5,7 @@ from cpl_core.configuration import ConfigurationABC from cpl_core.dependency_injection import ServiceProviderABC from cpl_core.logging import LoggerABC +from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings @@ -15,7 +16,7 @@ class BootLogExtension(ApplicationExtensionABC): async def run(self, config: ConfigurationABC, services: ServiceProviderABC): feature_flags: FeatureFlagsSettings = config.get_configuration(FeatureFlagsSettings) - if not feature_flags.boot_log_module: + if not feature_flags.get_flag(FeatureFlagsEnum.boot_log_module): return logger: LoggerABC = services.get_service(LoggerABC) logger.debug(__name__, 'BootLog extension started') diff --git a/src/modules/boot_log/boot_log_module.py b/src/modules/boot_log/boot_log_module.py index 3ce3ca13e4..ac7ae4bb1d 100644 --- a/src/modules/boot_log/boot_log_module.py +++ b/src/modules/boot_log/boot_log_module.py @@ -5,13 +5,14 @@ from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum from cpl_discord.service.discord_collection_abc import DiscordCollectionABC from bot_core.abc.module_abc import ModuleABC +from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum from modules.boot_log.boot_log_on_ready_event import BootLogOnReadyEvent class BootLogModule(ModuleABC): def __init__(self, dc: DiscordCollectionABC): - ModuleABC.__init__(self, dc, lambda x: x.boot_log_module) + ModuleABC.__init__(self, dc, FeatureFlagsEnum.boot_log_module) def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): pass diff --git a/src/modules/database/database_extension.py b/src/modules/database/database_extension.py index f5d4a492e4..8bc111e9a9 100644 --- a/src/modules/database/database_extension.py +++ b/src/modules/database/database_extension.py @@ -5,6 +5,7 @@ from cpl_core.configuration import ConfigurationABC from cpl_core.dependency_injection import ServiceProviderABC from cpl_core.logging import LoggerABC +from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum from bot_core.configuration.feature_flags_settings import FeatureFlagsSettings from bot_core.logging.database_logger import DatabaseLogger from bot_data.service.migration_service import MigrationService @@ -17,7 +18,7 @@ class DatabaseExtension(ApplicationExtensionABC): async def run(self, config: ConfigurationABC, services: ServiceProviderABC): feature_flags: FeatureFlagsSettings = config.get_configuration(FeatureFlagsSettings) - if not feature_flags.database_module: + if not feature_flags.get_flag(FeatureFlagsEnum.data_module): return logger: LoggerABC = services.get_service(DatabaseLogger) logger.debug(__name__, 'Database extension started') diff --git a/src/modules/database/database_module.py b/src/modules/database/database_module.py index 3234ab18d2..52fdac9c36 100644 --- a/src/modules/database/database_module.py +++ b/src/modules/database/database_module.py @@ -5,13 +5,14 @@ from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum from cpl_discord.service.discord_collection_abc import DiscordCollectionABC from bot_core.abc.module_abc import ModuleABC +from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum from modules.database.database_on_ready_event import DatabaseOnReadyEvent class DatabaseModule(ModuleABC): def __init__(self, dc: DiscordCollectionABC): - ModuleABC.__init__(self, dc, lambda x: x.database_module) + ModuleABC.__init__(self, dc, FeatureFlagsEnum.database_module) def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): pass diff --git a/src/modules/moderator/moderator_module.py b/src/modules/moderator/moderator_module.py index d5240ac13d..e47d994dfd 100644 --- a/src/modules/moderator/moderator_module.py +++ b/src/modules/moderator/moderator_module.py @@ -4,13 +4,14 @@ from cpl_core.environment import ApplicationEnvironmentABC from cpl_discord.service.discord_collection_abc import DiscordCollectionABC from bot_core.abc.module_abc import ModuleABC +from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum from modules.moderator.command.purge_command import PurgeCommand class ModeratorModule(ModuleABC): def __init__(self, dc: DiscordCollectionABC): - ModuleABC.__init__(self, dc, lambda x: x.moderator_module) + ModuleABC.__init__(self, dc, FeatureFlagsEnum.moderator_module) def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): pass diff --git a/src/modules/permission/permission_module.py b/src/modules/permission/permission_module.py index 7284b99ca2..63615b55d3 100644 --- a/src/modules/permission/permission_module.py +++ b/src/modules/permission/permission_module.py @@ -5,6 +5,7 @@ from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum from cpl_discord.service.discord_collection_abc import DiscordCollectionABC from bot_core.abc.module_abc import ModuleABC +from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum from modules.permission.abc.permission_service_abc import PermissionServiceABC from modules.permission.events.permission_on_member_update_event import PermissionOnMemberUpdateEvent from modules.permission.events.permission_on_ready_event import PermissionOnReadyEvent @@ -14,7 +15,7 @@ from modules.permission.service.permission_service import PermissionService class PermissionModule(ModuleABC): def __init__(self, dc: DiscordCollectionABC): - ModuleABC.__init__(self, dc, lambda x: x.permission_module) + ModuleABC.__init__(self, dc, FeatureFlagsEnum.permission_module) def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC): pass