Skip to content
Open
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
33 changes: 26 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.9, '3.10', 3.11, 3.12, 3.13, 3.14]
python-version: ['3.10', 3.11, 3.12, 3.13, 3.14]
framework:
- NONE
- FLASK_VERSION=2.3.3
Expand All @@ -23,12 +23,6 @@ jobs:
- PYRAMID_VERSION=2.0.2
- FASTAPI_VERSION=0.115.1 httpx==0.27.2 python-multipart==0.0.12
- FASTAPI_VERSION=0.118.3 httpx==0.28.1 python-multipart==0.0.20
exclude:
# Test frameworks on the python versions they support, according to pypi registry

# Django
- framework: DJANGO_VERSION=5.2.7
python-version: 3.9

steps:
- uses: actions/checkout@v2
Expand Down Expand Up @@ -73,3 +67,28 @@ jobs:

- name: Run tests
run: pytest

types:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.10', 3.11, 3.12, 3.13, 3.14]

steps:
- uses: actions/checkout@v2
with:
submodules: recursive

- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}

- name: Install Dependencies
run: |
pip install --group test .
pip install --group type .


- name: Check Types
run: mypy
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ Python notifier for reporting exceptions, errors, and log messages to [Rollbar](

| PyRollbar Version | Python Version Compatibility | Support Level |
|-------------------|-----------------------------------------------|---------------------|
| 1.4.0 | 3.9, 3.10, 3.11, 3.12, 3.13, 3.14 | Full |
| 1.4.0 | 3.10, 3.11, 3.12, 3.13, 3.14 | Full |
| 0.16.3 | 2.7, 3.4, 3.5, 3.6, 3.7. 3.8, 3.9, 3.10, 3.11 | Security Fixes Only |

#### Support Level Definitions
Expand Down
21 changes: 20 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,13 @@
"Topic :: Software Development :: Bug Tracking",
"Topic :: Software Development :: Testing",
"Topic :: Software Development :: Quality Assurance",
"Topic :: System :: Logging",
"Topic :: System :: Monitoring",
]
requires-python = ">=3.9"
requires-python = ">=3.10"

Check warning on line 42 in pyproject.toml

View check run for this annotation

Claude / Claude Code Review

Stale Python 3.9 classifier after dropping 3.9 support

The classifiers list in pyproject.toml still includes `"Programming Language :: Python :: 3.9"` even though this PR bumped `requires-python` to `>=3.10` (and the CI matrix + README were updated to drop 3.9). This is metadata-only (pip uses `requires-python` as authoritative), but it makes PyPI's displayed 'Compatible Python versions' misleading. Fix: delete the `Programming Language :: Python :: 3.9` line from the classifiers array around line 15.
Comment on lines 39 to +42
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 The classifiers list in pyproject.toml still includes "Programming Language :: Python :: 3.9" even though this PR bumped requires-python to >=3.10 (and the CI matrix + README were updated to drop 3.9). This is metadata-only (pip uses requires-python as authoritative), but it makes PyPI's displayed 'Compatible Python versions' misleading. Fix: delete the Programming Language :: Python :: 3.9 line from the classifiers array around line 15.

Extended reasoning...

What the bug is

pyproject.toml line 15 still declares:

"Programming Language :: Python :: 3.9",

while line 42 was changed in this PR to requires-python = ">=3.10". The CI matrix in .github/workflows/ci.yml was likewise narrowed to 3.10–3.14, and README.md was updated to advertise 1.4.0 as supporting 3.10–3.14 only. So the classifier is the one piece of metadata that didn't get propagated when 3.9 support was dropped.

How it manifests

On PyPI, the project page's Meta → Classifiers section will list Python :: 3.9 alongside 3.10–3.14, suggesting that 3.9 is supported. A user on Python 3.9 reading that classifier and running pip install rollbar will then be refused by pip with ERROR: Package 'rollbar' requires a different Python: 3.9.x not in '>=3.10', because requires-python (the authoritative field pip consults) excludes 3.9. So the symptom is a metadata/install mismatch, not a runtime failure.

Why existing code doesn't prevent it

Nothing in the build pipeline cross-checks classifiers against requires-python. They are independent free-form strings in PEP 621 metadata; the build backend won't flag the inconsistency, and mypy (the new types job introduced in this PR) doesn't touch pyproject.toml semantics either. The commit that dropped 3.9 (3fe9121) bumped requires-python, removed 3.9 from the CI matrix, and updated the README, but did not delete the classifier line — leaving this single line stale.

Impact

Documentation/metadata only. pip correctly refuses 3.9 installs because requires-python takes precedence, so no runtime regression. The cost is purely user-facing: a misleading PyPI display and a small inconsistency between PR-internal sources of truth.

How to fix

Remove the single line from the classifiers array in pyproject.toml (around line 15):

     "Programming Language :: Python",
     "Programming Language :: Python :: 3",
-    "Programming Language :: Python :: 3.9",
     "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",

No other changes needed; the surrounding classifiers, requires-python, README, and CI matrix are already consistent at 3.10–3.14.

Step-by-step proof

  1. Read pyproject.toml lines 12–22: classifiers includes Programming Language :: Python :: 3.9 and Programming Language :: Python :: 3.10 through 3.14.
  2. Read pyproject.toml line 42 in this PR: requires-python = ">=3.10".
  3. Read README.md line 27 in this PR: '1.4.0 | 3.10, 3.11, 3.12, 3.13, 3.14 | Full'.
  4. Read .github/workflows/ci.yml line 15 in this PR: python-version: ['3.10', 3.11, 3.12, 3.13, 3.14] (3.9 removed).
  5. Therefore the classifier on line 15 is the only piece of metadata still claiming 3.9 support; everything else in the PR consistently excludes 3.9.

dependencies = [
"requests>=0.12.1",
"typing_extensions; python_version < \"3.11\""
]

[dependency-groups]
Expand All @@ -52,6 +53,21 @@
"webob",
]

type = [
"bottle",
"djangorestframework-stubs[compatible-mypy]",
"django-stubs",
"fastapi",
"mypy",
"pyramid",
"quart",
"sanic",
"starlette",
"tornado",
"twisted",
"uvicorn",
]
Comment thread
danielmorell marked this conversation as resolved.

[project.urls]
Homepage = "https://rollbar.com/"
Documentation = "https://docs.rollbar.com/docs/python"
Expand All @@ -64,6 +80,9 @@
[project.entry-points."paste.filter_app_factory"]
pyramid = "rollbar.contrib.pyramid:create_rollbar_middleware"

[tool.mypy]
packages = ["rollbar"]

[tool.pytest]
testpaths = [
"rollbar/test",
Expand Down
Loading
Loading