extension.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from typing import cast
  2. from core.extension.extensible import Extensible, ExtensionModule, ModuleExtension
  3. from core.external_data_tool.base import ExternalDataTool
  4. from core.moderation.base import Moderation
  5. class Extension:
  6. __module_extensions: dict[str, dict[str, ModuleExtension]] = {}
  7. module_classes = {ExtensionModule.MODERATION: Moderation, ExtensionModule.EXTERNAL_DATA_TOOL: ExternalDataTool}
  8. def init(self):
  9. for module, module_class in self.module_classes.items():
  10. m = cast(Extensible, module_class)
  11. self.__module_extensions[module.value] = m.scan_extensions()
  12. def module_extensions(self, module: str) -> list[ModuleExtension]:
  13. module_extensions = self.__module_extensions.get(module)
  14. if not module_extensions:
  15. raise ValueError(f"Extension Module {module} not found")
  16. return list(module_extensions.values())
  17. def module_extension(self, module: ExtensionModule, extension_name: str) -> ModuleExtension:
  18. module_extensions = self.__module_extensions.get(module.value)
  19. if not module_extensions:
  20. raise ValueError(f"Extension Module {module} not found")
  21. module_extension = module_extensions.get(extension_name)
  22. if not module_extension:
  23. raise ValueError(f"Extension {extension_name} not found")
  24. return module_extension
  25. def extension_class(self, module: ExtensionModule, extension_name: str) -> type:
  26. module_extension = self.module_extension(module, extension_name)
  27. t: type = module_extension.extension_class
  28. return t
  29. def validate_form_schema(self, module: ExtensionModule, extension_name: str, config: dict) -> None:
  30. module_extension = self.module_extension(module, extension_name)
  31. form_schema = module_extension.form_schema
  32. # TODO validate form_schema