Files
OpenBB/openbb_platform/tests/test_pyproject_toml.py
Danglewood 327d9f222b [Feature] Remove Static Assets For Distribution (#7212)
* remove static assets for distribution

* don't need that conftest file

* comment cleanup

* fix yaml
2025-09-09 17:05:33 +00:00

78 lines
3.0 KiB
Python

"""Test the pyproject.toml file for consistency and its dependencies."""
from pathlib import Path
from tomlkit import load
ROOT_DIR = Path(__file__).parent.parent
def test_optional_packages():
"""Ensure only required extensions are built and versions respect pyproject.toml"""
with open(ROOT_DIR / "pyproject.toml") as f:
data = load(f)
dependencies = data["tool"]["poetry"]["dependencies"] # type: ignore
extras = data["tool"]["poetry"]["extras"] # type: ignore
all_packages = extras["all"] # type: ignore
default_packages = []
optional_packages = []
for package, details in dependencies.items(): # type: ignore
if isinstance(details, dict) and details.get("optional") is True:
optional_packages.append(package)
else:
default_packages.append(package)
# check that optional packages have the same content as all_packages and extras
assert sorted(optional_packages) == sorted(all_packages) # type: ignore
assert sorted(optional_packages) == sorted(extras["all"]) # type: ignore
# assert that there is no overlap between default and optional packages
assert set(default_packages).isdisjoint(set(optional_packages))
def test_extension_versions_match_main_pyproject():
"""Ensure every openbb- extension version in the main pyproject.toml matches its own pyproject.toml."""
main_pyproject = ROOT_DIR / "pyproject.toml"
with open(main_pyproject, encoding="utf-8") as f:
main_data = load(f)
main_deps = main_data["tool"]["poetry"]["dependencies"] # type: ignore
# Find all pyproject.toml files and build a map of package name -> file path
pyproject_files = list(ROOT_DIR.rglob("pyproject.toml"))
package_map = {}
for file_path in pyproject_files:
with open(file_path, encoding="utf-8") as f:
data = load(f)
pkg_name = data.get("tool", {}).get("poetry", {}).get("name", "")
if pkg_name:
package_map[pkg_name] = str(file_path)
# Now check each openbb- dependency in main pyproject.toml
for pkg, main_version in main_deps.items(): # type: ignore
if pkg.startswith("openbb-"):
assert (
pkg in package_map
), f"{pkg} listed in main pyproject.toml but no pyproject.toml found with that name"
# Load the extension's pyproject.toml
with open(package_map[pkg], encoding="utf-8") as f:
ext_data = load(f)
ext_version = ext_data["tool"]["poetry"]["version"] # type: ignore
# Normalize main_version if it's a dict
m_version = (
main_version.get("version", "")
if isinstance(main_version, dict)
else main_version
)
m_version = str(m_version).lstrip("^")
assert ext_version == m_version, (
f"Version mismatch for {pkg}: main pyproject.toml has"
f"{m_version}, extension pyproject.toml has {ext_version}"
)