diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 38ff67a..e6f942d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,7 +24,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - python-version: ['3.9'] + python-version: ['3.10'] steps: - uses: actions/checkout@v4 @@ -37,13 +37,13 @@ jobs: - name: Install Hatch run: pip install --upgrade hatch - - if: matrix.python-version == '3.9' && runner.os == 'Linux' + - if: matrix.python-version == '3.10' && runner.os == 'Linux' name: Lint run: hatch run lint:all - name: Run tests and track code coverage run: hatch run cov - - if: matrix.python-version == '3.9' && runner.os == 'Linux' + - if: matrix.python-version == '3.10' && runner.os == 'Linux' name: Publish Coverage to Coveralls run: hatch run coveralls env: diff --git a/CHANGELOG.md b/CHANGELOG.md index a318881..1aec158 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## Release `2.0.0` - 2026-03-04 + +* **Breaking**: Drop support for Python 3.8 and 3.9. Minimum required version is now Python 3.10. +* Add Python 3.14 to supported versions. + ## Release `1.4.0` - 2025-09-15 * Implement dynamic loading of exchanges. diff --git a/README.md b/README.md index 8ace90c..441f090 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ responses. # Requirements -* Python 3.8+ +* Python 3.10+ # Installation diff --git a/earningscall/exchanges.py b/earningscall/exchanges.py index 3f036d7..9c5a2c5 100644 --- a/earningscall/exchanges.py +++ b/earningscall/exchanges.py @@ -3,7 +3,6 @@ from earningscall.api import get_exchanges_json - log = logging.getLogger(__file__) diff --git a/earningscall/symbols.py b/earningscall/symbols.py index 4094945..2c59699 100644 --- a/earningscall/symbols.py +++ b/earningscall/symbols.py @@ -8,7 +8,6 @@ from earningscall.errors import InsufficientApiAccessError from earningscall.sectors import sector_to_index, industry_to_index, index_to_sector, index_to_industry - log = logging.getLogger(__file__) diff --git a/hatch.toml b/hatch.toml index b0095b6..596a635 100644 --- a/hatch.toml +++ b/hatch.toml @@ -21,7 +21,7 @@ cov = [ type = "container" [[envs.all.matrix]] -python = ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] +python = ["3.10", "3.11", "3.12", "3.13", "3.14"] [envs.lint] detached = true diff --git a/pyproject.toml b/pyproject.toml index f4f5b97..923374f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,10 +1,10 @@ [project] name = "earningscall" -version = "1.4.0" +version = "2.0.0" description = "The EarningsCall Python library provides convenient access to the EarningsCall API. It includes a pre-defined set of classes for API resources that initialize themselves dynamically from API responses." readme = "README.md" authors = [{ name = "EarningsCall", email = "dev@earningscall.biz" }] -requires-python = ">= 3.8" +requires-python = ">= 3.10" dependencies = [ "dataclasses-json>=0.6.4", "requests>=2.30.0", @@ -42,12 +42,11 @@ classifiers = [ # Specify the Python versions you support here. "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", ] [project.urls] @@ -80,7 +79,7 @@ cov = "pytest --cov-report=term-missing --cov-config=pyproject.toml --cov=hatch_ no-cov = "cov --no-cov" [[tool.hatch.envs.test.matrix]] -python = ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] +python = ["3.10", "3.11", "3.12", "3.13", "3.14"] [tool.hatch.build.targets.wheel.hooks.mypyc] @@ -100,12 +99,12 @@ warn_unused_ignores = true [tool.black] -target-version = ["py37"] +target-version = ["py310"] line-length = 120 skip-string-normalization = true [tool.ruff] -target-version = "py37" +target-version = "py310" [tool.ruff.lint] ignore = [ diff --git a/scripts/download_audio_files.py b/scripts/download_audio_files.py index b6750e3..55a4afb 100644 --- a/scripts/download_audio_files.py +++ b/scripts/download_audio_files.py @@ -7,7 +7,6 @@ from earningscall.company import Company from earningscall.utils import configure_sane_logging - # TODO: Set your API key here: # earningscall.api_key = "YOUR SECRET API KEY GOES HERE" diff --git a/scripts/get_single_transcript.py b/scripts/get_single_transcript.py index 54805c8..6623571 100644 --- a/scripts/get_single_transcript.py +++ b/scripts/get_single_transcript.py @@ -2,7 +2,6 @@ from earningscall import get_company - # TODO: Set your API key here: # earningscall.api_key = "YOUR API KEY HERE" diff --git a/tests/test_api.py b/tests/test_api.py index 6e485b6..7a86bae 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -84,13 +84,13 @@ def test_get_api_key_returns_demo_when_no_keys_set(monkeypatch): def test_get_earnings_call_version_returns_version_when_package_found(monkeypatch): """Test that get_earnings_call_version returns version when package is found.""" # Given importlib.metadata.version returns a version string - monkeypatch.setattr(importlib.metadata, "version", lambda package: "1.4.0" if package == "earningscall" else None) + monkeypatch.setattr(importlib.metadata, "version", lambda package: "2.0.0" if package == "earningscall" else None) # When get_earnings_call_version is called result = get_earnings_call_version() # Then it returns the version - assert result == "1.4.0" + assert result == "2.0.0" def test_get_earnings_call_version_returns_none_when_package_not_found(monkeypatch): diff --git a/tests/test_get_calendar.py b/tests/test_get_calendar.py index 3ba3b83..c3966f4 100644 --- a/tests/test_get_calendar.py +++ b/tests/test_get_calendar.py @@ -10,7 +10,6 @@ from earningscall.errors import InsufficientApiAccessError from earningscall.utils import data_path - # Uncomment and run following code to generate data/get-calendar-not-found-response.yaml file # diff --git a/tests/test_get_company_events.py b/tests/test_get_company_events.py index 744782a..83fd737 100644 --- a/tests/test_get_company_events.py +++ b/tests/test_get_company_events.py @@ -5,7 +5,6 @@ from earningscall.symbols import clear_symbols from earningscall.utils import data_path - # Uncomment and run following code to generate msft-transcript-response.yaml file # # from responses import _recorder diff --git a/tests/test_get_transcript.py b/tests/test_get_transcript.py index 9b62763..b48ab83 100644 --- a/tests/test_get_transcript.py +++ b/tests/test_get_transcript.py @@ -14,7 +14,6 @@ from earningscall.transcript import Transcript from earningscall.utils import data_path - # Uncomment and run following code to generate msft-transcript-response.yaml file # # from responses import _recorder diff --git a/tests/test_responses_mocking.py b/tests/test_responses_mocking.py index 783ccfb..47d6d69 100644 --- a/tests/test_responses_mocking.py +++ b/tests/test_responses_mocking.py @@ -1,7 +1,6 @@ import requests import responses - # NOTE: this test is only testing the behavior of the responses library, and therefore it is not testing any # code in earningscall at all.