mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-10-27 12:40:35 +00:00
* stash some changes * add more robust testing * mypy * point PR at V5 * introduce spec file * codespell * test fix * fix workflow environment setup * fix workflow environment setup * fix workflow environment setup * add pyyaml to dependencies * split lint jobs * fix workflow environment setup * fix workflow environment setup * workflow env setup * workflow env setup * clean up code comments * add auth hook entrypoints * codespell * add codegen feature * codespell * move _unpack into dispatchers for consistency with codegen packages * surface nested models in the response * fix missing coverage in CI * socrata updates * test fix * detect plotly output * add --include and --exclude flags from generate-extension command * cap test matrix at python 3.14 * no useless comments * platform controller command description split * merge URL overloads from path params * exclude none and unset from model dump --------- Co-authored-by: deeleeramone <> Co-authored-by: Copilot <copilot@github.com>
112 lines
3.5 KiB
Python
112 lines
3.5 KiB
Python
"""Tests for openbb_cli.codegen.project_gen — pyproject.toml emission."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from openbb_cli.codegen import project_gen as pg
|
|
|
|
|
|
@dataclass
|
|
class _Router:
|
|
entry_point_name: str | None
|
|
module_name: str
|
|
|
|
|
|
def test_generate_pyproject_emits_provider_and_router_entry_points():
|
|
routers = [
|
|
_Router(entry_point_name="equity", module_name="equity"),
|
|
_Router(entry_point_name="economy", module_name="economy"),
|
|
]
|
|
out = pg.generate_pyproject(
|
|
project_name="openbb-codegen",
|
|
package_name="openbb_codegen",
|
|
providers=["fmp", "intrinio"],
|
|
routers=routers,
|
|
description="Generated extension.",
|
|
)
|
|
|
|
assert isinstance(out, pg.GeneratedProject)
|
|
assert out.project_name == "openbb-codegen"
|
|
assert out.package_name == "openbb_codegen"
|
|
|
|
src = out.source
|
|
assert 'name = "openbb-codegen"' in src
|
|
assert 'version = "0.1.0"' in src
|
|
assert "description = 'Generated extension.'" in src
|
|
assert 'packages = ["openbb_codegen"]' in src
|
|
# Provider entry-points (sorted alphabetically)
|
|
assert (
|
|
'fmp = "openbb_codegen.providers.fmp:fmp_provider"\n'
|
|
'intrinio = "openbb_codegen.providers.intrinio:intrinio_provider"'
|
|
) in src
|
|
# Router entry-points
|
|
assert 'equity = "openbb_codegen.routers.equity:router"' in src
|
|
assert 'economy = "openbb_codegen.routers.economy:router"' in src
|
|
|
|
|
|
def test_generate_pyproject_skips_routers_without_entry_point():
|
|
routers = [
|
|
_Router(entry_point_name=None, module_name="equity_price"),
|
|
_Router(entry_point_name="equity", module_name="equity"),
|
|
]
|
|
out = pg.generate_pyproject(
|
|
project_name="openbb-x",
|
|
package_name="openbb_x",
|
|
providers=[],
|
|
routers=routers,
|
|
description="d",
|
|
)
|
|
assert "equity_price" not in out.source
|
|
assert 'equity = "openbb_x.routers.equity:router"' in out.source
|
|
|
|
|
|
def test_generate_pyproject_respects_custom_version():
|
|
out = pg.generate_pyproject(
|
|
project_name="openbb-x",
|
|
package_name="openbb_x",
|
|
providers=[],
|
|
routers=[],
|
|
description="d",
|
|
version="1.2.3",
|
|
)
|
|
assert 'version = "1.2.3"' in out.source
|
|
|
|
|
|
def test_generate_pyproject_emits_provenance_block_when_provided():
|
|
out = pg.generate_pyproject(
|
|
project_name="openbb-x",
|
|
package_name="openbb_x",
|
|
providers=[],
|
|
routers=[],
|
|
description="d",
|
|
spec_provenance={
|
|
"source_url": "https://example.com/openapi.json",
|
|
"api_version": "3.0.0",
|
|
"generator": "openbb-cli==2.0.0",
|
|
"generated_at": "2026-05-02T12:00:00+00:00",
|
|
"spec_version": "5",
|
|
"spec_sha256": "deadbeef" * 8,
|
|
},
|
|
)
|
|
src = out.source
|
|
assert "[tool.openbb-codegen]" in src
|
|
assert "source_url = 'https://example.com/openapi.json'" in src
|
|
assert "api_version = '3.0.0'" in src
|
|
assert "generator = 'openbb-cli==2.0.0'" in src
|
|
assert "generated_at = '2026-05-02T12:00:00+00:00'" in src
|
|
assert "spec_version = '5'" in src
|
|
assert f"spec_sha256 = '{'deadbeef' * 8}'" in src
|
|
|
|
|
|
def test_generate_pyproject_omits_provenance_block_when_empty():
|
|
out = pg.generate_pyproject(
|
|
project_name="openbb-x",
|
|
package_name="openbb_x",
|
|
providers=[],
|
|
routers=[],
|
|
description="d",
|
|
spec_provenance={"source_url": "", "api_version": ""},
|
|
)
|
|
assert "[tool.openbb-codegen]" not in out.source
|