summaryrefslogtreecommitdiffstats
path: root/openbb_platform/tests/test_pyproject_toml.py
blob: 7012b0797dc224f2a78b0e61f4ea2ddef7af0d81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
"""Test the pyproject.toml file for consistency and its dependencies."""

import glob
import os

import toml


def test_optional_packages():
    """Ensure only required extensions are built and versions respect pyproject.toml"""
    data = toml.load("openbb_platform/pyproject.toml")
    dependencies = data["tool"]["poetry"]["dependencies"]
    extras = data["tool"]["poetry"]["extras"]
    all_packages = extras["all"]

    default_packages = []
    optional_packages = []

    for package, details in dependencies.items():
        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)
    assert sorted(optional_packages) == sorted(extras["all"])

    # assert that there is no overlap between default and optional packages
    assert set(default_packages).isdisjoint(set(optional_packages))


def test_default_package_files():
    """Ensure only required extensions are built and versions respect pyproject.toml"""
    data = toml.load("openbb_platform/pyproject.toml")
    dependencies = data["tool"]["poetry"]["dependencies"]
    package_files = glob.glob("openbb_platform/openbb/package/*.py")

    invalid_packages = []
    default_packages = []

    for package, details in dependencies.items():
        if isinstance(details, dict) is False:
            default_packages.append(package)

    for file_path in package_files:
        package_name = os.path.basename(file_path).replace(".py", "")
        if package_name.startswith("_"):
            continue
        if "_" in package_name:
            base_package = package_name.split("_")[0]
            if "openbb-" + base_package not in default_packages:
                invalid_packages.append(package_name)
        elif "openbb-" + package_name not in default_packages:
            invalid_packages.append(package_name)

    assert not invalid_packages, (
        f"If not making a PR, ignore this error -> "
        f"Found non-required extension static assets: {invalid_packages}. "
        f"Only required packages should be committed."
        f"Please create a new environment with only required extensions, "
        f"rebuild the static assets, and commit the changes."
    )