Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-latest]
python-version: ['3.10']
python-version: ['3.11']

steps:
- uses: actions/checkout@v6
Expand All @@ -37,13 +37,13 @@ jobs:
- name: Install Hatch
run: pip install --upgrade hatch

- if: matrix.python-version == '3.10' && runner.os == 'Linux'
- if: matrix.python-version == '3.11' && 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.10' && runner.os == 'Linux'
- if: matrix.python-version == '3.11' && runner.os == 'Linux'
name: Publish Coverage to Coveralls
run: hatch run coveralls
env:
Expand All @@ -56,10 +56,10 @@ jobs:
steps:
- uses: actions/checkout@v6

- name: Set up Python 3.10
- name: Set up Python 3.11
uses: actions/setup-python@v6
with:
python-version: '3.10'
python-version: '3.11'

- name: Install Hatch
run: pip install --upgrade hatch hatch-containers
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Changelog

## Release `3.0.0` - 2026-10-18

* **Breaking**: Drop support for Python 3.10, which reached end-of-life in October 2026. Minimum required version is now Python 3.11.
* Add Python 3.15 to supported versions.

## Release `2.0.1` - 2026-03-11

* Bugfix: `get_symbols_v2()`, `get_sp500_companies_txt_file()`, `get_events()`, and `get_exchanges_json()` now raise `HTTPError` on failed API responses instead of silently returning the raw response. Previously, non-200 responses were passed through to callers, which would then crash with `AttributeError` (e.g., calling `.split()` on a non-text response) or return corrupt data.
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ vars, defaulting to `"demo"` (AAPL-only sample access; other symbols raise
- Build/test/lint via Hatch (hatchling backend) — commands in
[DEVELOPMENT.md](DEVELOPMENT.md). CI (`.github/workflows/test.yml`) runs
`hatch run lint:all` (ruff, black, mypy), `hatch run cov` (Coveralls), and a
containerized matrix `hatch run all:test` on Python 3.10–3.14.
containerized matrix `hatch run all:test` on Python 3.11–3.15.
- Releases: bump the static `version` in `pyproject.toml` `[project]`, add a
`## Release \`X.Y.Z\` - YYYY-MM-DD` entry to `CHANGELOG.md`, then push a
`vX.Y.Z` tag. `.github/workflows/release.yml` builds and publishes to PyPI
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ responses.

# Requirements

* Python 3.10+
* Python 3.11+

# Installation

Expand Down
1 change: 1 addition & 0 deletions earningscall/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ def do_get(
delay = retry_strategy["base_delay"]
max_attempts = int(retry_strategy["max_attempts"])

response: requests.Response
for attempt in range(max_attempts):
if use_cache and earningscall.enable_requests_cache:
response = cache_session().get(url, params=params)
Expand Down
3 changes: 0 additions & 3 deletions earningscall/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@ def _parse_conference_date(date_str: str) -> Optional[datetime]:
"""Parse conference date string, handling both timezone offsets and 'Z' UTC suffix."""
if not date_str:
return None
# Handle 'Z' suffix by converting to '+00:00' for UTC
if date_str.endswith('Z'):
date_str = date_str[:-1] + '+00:00'
return datetime.fromisoformat(date_str)


Expand Down
2 changes: 1 addition & 1 deletion hatch.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ cov = [
type = "container"

[[envs.all.matrix]]
python = ["3.10", "3.11", "3.12", "3.13", "3.14"]
python = ["3.11", "3.12", "3.13", "3.14", "3.15"]

[envs.lint]
detached = true
Expand Down
15 changes: 9 additions & 6 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
[project]
name = "earningscall"
version = "2.0.1"
version = "3.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.10"
requires-python = ">= 3.11"
dependencies = [
"dataclasses-json>=0.6.4",
"requests>=2.30.0",
Expand Down Expand Up @@ -42,11 +42,11 @@ classifiers = [

# Specify the Python versions you support here.
"Programming Language :: Python :: 3",
"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",
"Programming Language :: Python :: 3.15",
]

[project.urls]
Expand Down Expand Up @@ -79,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.10", "3.11", "3.12", "3.13", "3.14"]
python = ["3.11", "3.12", "3.13", "3.14", "3.15"]


[tool.hatch.build.targets.wheel.hooks.mypyc]
Expand All @@ -99,14 +99,17 @@ warn_unused_ignores = true


[tool.black]
target-version = ["py310"]
target-version = ["py311"]
line-length = 120
skip-string-normalization = true

[tool.ruff]
target-version = "py310"
target-version = "py311"

[tool.ruff.lint]
# Pin the rule set explicitly. Ruff 0.16 expanded its default selection, which
# broke CI without any code change.
select = ["E4", "E7", "E9", "F"]
ignore = [
# Allow non-abstract empty methods in abstract base classes
"B027",
Expand Down
Loading