Files
OpenBB/openbb_platform/tests/test_extension_map.py
Danglewood 9f0d592839 [Feature] Remove Python 3.9 (#7235)
* remove python 3.9 support and code

* black

* more cli lint

* more linting

* more lint

* fix for tests

* docstring grammar police

* add lock to to build function to avoid async import race conditions

* grammar police

* lots more linting

* relock
2025-10-10 23:16:16 +00:00

77 lines
2.9 KiB
Python

"""Test the extension map."""
import json
from pathlib import Path
import pytest
from poetry.core.constraints.version import Version, VersionConstraint, parse_constraint
from poetry.core.pyproject.toml import PyProjectTOML
def create_ext_map(extensions: dict) -> dict[str, Version]:
"""Create the extension map from extension."""
ext_map = {}
for _, v in extensions.items():
for value in v:
name, version = value.split("@")
ext_map[name] = Version.parse(version)
return ext_map
def load_req_ext(file: Path) -> dict[str, VersionConstraint]:
"""Load the required extensions from pyproject.toml."""
pyproject = PyProjectTOML(file)
deps = pyproject.data["tool"]["poetry"]["dependencies"]
req_ext = {}
for k, v in deps.items():
if k.startswith("openbb-") and k not in ("openbb-core"):
name = k[7:].replace("-", "_")
if isinstance(v, str):
req_ext[name] = parse_constraint(v)
elif isinstance(v, dict) and not v.get("optional", False):
req_ext[name] = parse_constraint(v["version"])
return req_ext
@pytest.mark.order(1)
def test_extension_map():
"""Ensure package folder exists, __init__.py is present, no static assets, and reference.json core version matches."""
this_dir = Path(__file__).parent
package_dir = Path(this_dir, "..", "core", "openbb", "package").resolve()
assert (
package_dir.exists() and package_dir.is_dir()
), f"Package directory '{package_dir}' does not exist."
init_file = package_dir / "__init__.py"
assert (
init_file.exists() and init_file.is_file()
), f"'__init__.py' not found in package directory '{package_dir}'."
contents = [
p.name
for p in package_dir.iterdir()
if p.name not in ("__init__.py", "__pycache__")
]
assert not contents, (
"If you are running this test locally, you can ignore this failure."
+ " This test is to ensure files are not added to the repository."
+ " Do not add these files to a commit."
f" Unexpected files or folders found in package directory: {contents}"
)
# Check reference.json core version matches pyproject.toml openbb-core version
ref_path = Path(this_dir, "..", "core", "openbb", "assets", "reference.json")
with open(ref_path, encoding="utf-8") as f:
reference = json.load(f)
core_version = reference.get("info", {}).get("core")
pyproject_path = Path(this_dir, "..", "pyproject.toml")
pyproject = PyProjectTOML(pyproject_path)
openbb_core_version = pyproject.data["tool"]["poetry"]["dependencies"][
"openbb-core"
]
if isinstance(openbb_core_version, dict):
openbb_core_version = openbb_core_version["version"]
assert core_version == openbb_core_version.lstrip("^"), (
f"reference.json core version '{core_version}'"
f" does not match pyproject.toml openbb-core version '{openbb_core_version}'"
)