From d91d1f4cb472cf3ae942d650fdd261f57356fc5f Mon Sep 17 00:00:00 2001 From: Yijia-Xiao Date: Thu, 24 Sep 2026 19:15:29 +0000 Subject: [PATCH] build: keep the package version in tradingagents.__version__ - pyproject reads the version from tradingagents/__init__.py, so a source checkout, an editable install and a wheel report the same one - the SEC EDGAR User-Agent names tradingagents.__version__ --- pyproject.toml | 5 ++++- tests/test_sec_edgar.py | 20 +++++--------------- tests/test_version.py | 18 ++++++++++++++++++ tradingagents/__init__.py | 4 ++++ tradingagents/dataflows/vendors/sec_edgar.py | 10 ++-------- 5 files changed, 33 insertions(+), 24 deletions(-) create mode 100644 tests/test_version.py diff --git a/pyproject.toml b/pyproject.toml index b72cd3b39..a291e9ef9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tradingagents" -version = "0.5.2.dev0" +dynamic = ["version"] description = "TradingAgents: Multi-Agents LLM Financial Trading Framework" readme = "README.md" requires-python = ">=3.10" @@ -42,6 +42,9 @@ bedrock = [ [project.scripts] tradingagents = "cli.main:app" +[tool.setuptools.dynamic] +version = {attr = "tradingagents.__version__"} + [tool.setuptools.packages.find] include = ["tradingagents*", "cli*"] diff --git a/tests/test_sec_edgar.py b/tests/test_sec_edgar.py index 40b2def9f..d1729ce51 100644 --- a/tests/test_sec_edgar.py +++ b/tests/test_sec_edgar.py @@ -221,22 +221,12 @@ def test_a_period_reported_under_two_tags_takes_the_preferred_one_not_both(): @pytest.mark.unit -def test_the_default_identification_tracks_the_installed_version(monkeypatch): - """A release should identify itself, not a version frozen in the source.""" +def test_the_default_identification_names_the_package_version(monkeypatch): + """SEC asks automated clients to identify themselves; a release names its own version.""" + import tradingagents + monkeypatch.delenv("SEC_EDGAR_USER_AGENT", raising=False) - monkeypatch.setattr(sec_edgar.metadata, "version", lambda name: "9.9.9") - assert sec_edgar._user_agent() == "TradingAgents/9.9.9 (contact@example.com)" - - -@pytest.mark.unit -def test_an_uninstalled_checkout_still_identifies_itself(monkeypatch): - monkeypatch.delenv("SEC_EDGAR_USER_AGENT", raising=False) - - def _missing(name): - raise sec_edgar.metadata.PackageNotFoundError(name) - - monkeypatch.setattr(sec_edgar.metadata, "version", _missing) - assert "@" in sec_edgar._user_agent() + assert sec_edgar._user_agent() == f"TradingAgents/{tradingagents.__version__} (contact@example.com)" @pytest.mark.unit diff --git a/tests/test_version.py b/tests/test_version.py new file mode 100644 index 000000000..212960b87 --- /dev/null +++ b/tests/test_version.py @@ -0,0 +1,18 @@ +"""The package version has one source, tradingagents.__version__, which the build reads.""" + +import re +from pathlib import Path + +import pytest + +import tradingagents + +PYPROJECT = (Path(__file__).resolve().parents[1] / "pyproject.toml").read_text(encoding="utf-8") + + +@pytest.mark.unit +def test_the_build_reads_the_version_from_the_package(): + assert re.search(r'^dynamic = \["version"\]', PYPROJECT, re.M) + assert 'version = {attr = "tradingagents.__version__"}' in PYPROJECT + assert not re.search(r'^version = "', PYPROJECT, re.M) + assert re.fullmatch(r"\d+\.\d+\.\d+(\.dev\d+|rc\d+)?", tradingagents.__version__) diff --git a/tradingagents/__init__.py b/tradingagents/__init__.py index 6151e5e91..9a1d262a9 100644 --- a/tradingagents/__init__.py +++ b/tradingagents/__init__.py @@ -1,3 +1,7 @@ +"""TradingAgents: multi-agent LLM financial trading framework.""" + +__version__ = "0.5.2.dev0" + from dotenv import find_dotenv, load_dotenv # Load .env at package import so DEFAULT_CONFIG's env-var overlay and every LLM diff --git a/tradingagents/dataflows/vendors/sec_edgar.py b/tradingagents/dataflows/vendors/sec_edgar.py index 9b7315ecc..76a9ce2ab 100644 --- a/tradingagents/dataflows/vendors/sec_edgar.py +++ b/tradingagents/dataflows/vendors/sec_edgar.py @@ -22,11 +22,11 @@ import logging import os import time from datetime import date, datetime -from importlib import metadata from pathlib import Path import requests +from tradingagents import __version__ from tradingagents.dataflows.config import get_config from tradingagents.dataflows.errors import NoMarketDataError, VendorRateLimitError @@ -93,15 +93,9 @@ def _user_agent() -> str: so SEC can reach you about your traffic rather than the project. """ configured = os.getenv("SEC_EDGAR_USER_AGENT", "").strip() - return configured or f"TradingAgents/{_version()} (contact@example.com)" + return configured or f"TradingAgents/{__version__} (contact@example.com)" -def _version() -> str: - """The installed package version, so a release identifies itself correctly.""" - try: - return metadata.version("tradingagents") - except metadata.PackageNotFoundError: - return "dev" def _fetch_json(url: str) -> dict: