[Feature] - Create repo assets directory (#6384)

* feat: create scripts to generate repo assets

* move script

* publish.md

* deletes unmaintained .md files

* ruff

* pylint

* fix: website urls

* fix: website urls

* rename script

* renames

* create folder

* mypy

* PyDocstyle

* fix: descriptions & websites

* camelCase

* change json structure

* logo url

* reprName

* finra

* logos

* logo

* logo

* logo

* logo

* pylint

---------

Co-authored-by: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com>
This commit is contained in:
montezdesousa
2024-05-10 20:16:09 +01:00
committed by GitHub
parent c29200aa17
commit 5b7428070a
37 changed files with 646 additions and 195 deletions

View File

@@ -0,0 +1,115 @@
"""Generate assets from modules."""
from importlib import import_module
from json import dump
from pathlib import Path
from typing import Any, Dict, List
from poetry.core.pyproject.toml import PyProjectTOML
THIS_DIR = Path(__file__).parent
PROVIDERS_PATH = Path(THIS_DIR, "..", "..", "openbb_platform/providers")
EXTENSIONS_PATH = Path(THIS_DIR, "..", "..", "openbb_platform/extensions")
OBBJECT_EXTENSIONS_PATH = Path(
THIS_DIR, "..", "..", "openbb_platform/obbject_extensions"
)
def to_title(string: str) -> str:
"""Format string to title."""
return " ".join(string.split("_")).title()
def get_packages(path: Path, plugin_key: str) -> Dict[str, Any]:
"""Get packages."""
SKIP = ["tests", "__pycache__"]
folders = [f for f in path.glob("*") if f.is_dir() and f.stem not in SKIP]
packages: Dict[str, Any] = {}
for f in folders:
pyproject = PyProjectTOML(Path(f, "pyproject.toml"))
poetry = pyproject.data["tool"]["poetry"]
name = poetry["name"]
plugin = poetry.get("plugins", {}).get(plugin_key)
packages[name] = list(plugin.values())[0] if plugin else ""
return packages
def write(filename: str, data: Any):
"""Write to json."""
with open(Path(THIS_DIR, "..", "extensions", f"{filename}.json"), "w") as json_file:
dump(data, json_file, indent=4)
def to_camel(string: str):
"""Convert string to camel case."""
components = string.split("_")
return components[0] + "".join(x.title() for x in components[1:])
def createItem(package_name: str, obj: object, attrs: List[str]) -> Dict[str, str]:
"""Create dictionary item from object attributes."""
item = {"packageName": package_name}
item.update(
{to_camel(a): getattr(obj, a) for a in attrs if getattr(obj, a) is not None}
)
return item
def generate_provider_extensions() -> None:
"""Generate providers_extensions.json."""
packages = get_packages(PROVIDERS_PATH, "openbb_provider_extension")
data: List[Dict[str, str]] = []
attrs = [
"repr_name",
"description",
"credentials",
"v3_credentials",
"website",
"instructions",
"logo_url",
]
for pkg_name, plugin in sorted(packages.items()):
file_obj = plugin.split(":")
if len(file_obj) == 2:
file, obj = file_obj[0], file_obj[1]
module = import_module(file)
provider_obj = getattr(module, obj)
data.append(createItem(pkg_name, provider_obj, attrs))
write("provider", data)
def generate_router_extensions() -> None:
"""Generate router_extensions.json."""
packages = get_packages(EXTENSIONS_PATH, "openbb_core_extension")
data: List[Dict[str, str]] = []
attrs = ["description"]
for pkg_name, plugin in sorted(packages.items()):
file_obj = plugin.split(":")
if len(file_obj) == 2:
file, obj = file_obj[0], file_obj[1]
module = import_module(file)
router_obj = getattr(module, obj)
data.append(createItem(pkg_name, router_obj, attrs))
write("router", data)
def generate_obbject_extensions() -> None:
"""Generate obbject_extensions.json."""
packages = get_packages(OBBJECT_EXTENSIONS_PATH, "openbb_obbject_extension")
data: List[Dict[str, str]] = []
attrs = ["description"]
for pkg_name, plugin in sorted(packages.items()):
file_obj = plugin.split(":")
if len(file_obj) == 2:
file, obj = file_obj[0], file_obj[1]
module = import_module(file)
ext_obj = getattr(module, obj)
data.append(createItem(pkg_name, ext_obj, attrs))
write("obbject", data)
if __name__ == "__main__":
generate_provider_extensions()
generate_router_extensions()
generate_obbject_extensions()