|
|
"""Platform controller factory to create a platform controller.""" |
|
|
|
|
|
from typing import Dict, List, Union |
|
|
|
|
|
from openbb_cli.argparse_translator.argparse_class_processor import ( |
|
|
ArgparseClassProcessor, |
|
|
) |
|
|
from openbb_cli.controllers.base_platform_controller import PlatformController |
|
|
|
|
|
|
|
|
class PlatformControllerFactory: |
|
|
"""Factory to create a platform controller.""" |
|
|
|
|
|
def __init__(self, platform_router: type, **kwargs): |
|
|
"""Create the controller name.""" |
|
|
self.platform_router = platform_router |
|
|
self._translated_target = ArgparseClassProcessor( |
|
|
target_class=self.platform_router, reference=kwargs.get("reference", {}) |
|
|
) |
|
|
self.router_name = ( |
|
|
str(type(self.platform_router)) |
|
|
.rsplit(".", maxsplit=1)[-1] |
|
|
.replace("'>", "") |
|
|
.replace("ROUTER_", "") |
|
|
.lower() |
|
|
) |
|
|
self.controller_name = f"{self.router_name.capitalize()}Controller" |
|
|
|
|
|
def create(self) -> type: |
|
|
"""Create the platform controller.""" |
|
|
ClassName = self.controller_name |
|
|
Parents = (PlatformController,) |
|
|
Attributes: Dict[str, Union[bool, List[str]]] = {"CHOICES_GENERATION": True} |
|
|
|
|
|
|
|
|
choices_menus: List[str] = [] |
|
|
choices_commands: List[str] = [] |
|
|
translators = self._translated_target.translators |
|
|
paths = self._translated_target.paths |
|
|
|
|
|
for key, value in paths.items(): |
|
|
if value == "path": |
|
|
continue |
|
|
choices_menus.append(key) |
|
|
|
|
|
for name, _ in translators.items(): |
|
|
if any(f"{self.router_name}_{path}" in name for path in paths): |
|
|
continue |
|
|
new_name = name.replace(f"{self.router_name}_", "") |
|
|
choices_commands.append(new_name) |
|
|
|
|
|
Attributes["CHOICES_MENUS"] = choices_menus |
|
|
Attributes["CHOICES_COMMANDS"] = choices_commands |
|
|
|
|
|
|
|
|
DynamicClass = type(ClassName, Parents, Attributes) |
|
|
|
|
|
return DynamicClass |
|
|
|