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
6 changes: 3 additions & 3 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.9']
python-version: ['3.10']

steps:
- uses: actions/checkout@v4
Expand All @@ -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:
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 `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.
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.8+
* Python 3.10+

# Installation

Expand Down
1 change: 0 additions & 1 deletion earningscall/exchanges.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

from earningscall.api import get_exchanges_json


log = logging.getLogger(__file__)


Expand Down
1 change: 0 additions & 1 deletion earningscall/symbols.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__)


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.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
Expand Down
13 changes: 6 additions & 7 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -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",
Expand Down Expand Up @@ -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]
Expand Down Expand Up @@ -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]
Expand All @@ -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 = [
Expand Down
1 change: 0 additions & 1 deletion scripts/download_audio_files.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
1 change: 0 additions & 1 deletion scripts/get_single_transcript.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

from earningscall import get_company


# TODO: Set your API key here:
# earningscall.api_key = "YOUR API KEY HERE"

Expand Down
4 changes: 2 additions & 2 deletions tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
1 change: 0 additions & 1 deletion tests/test_get_calendar.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
#

Expand Down
1 change: 0 additions & 1 deletion tests/test_get_company_events.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion tests/test_get_transcript.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion tests/test_responses_mocking.py
Original file line number Diff line number Diff line change
@@ -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.

Expand Down