feat: support Python 3.10-3.14, drop 3.8/3.9#386
Open
Conversation
- Fix missing `import importlib.util` that caused NameError on Python 3.12+ (root cause of PR #374 failures) - Replace deprecated `find_module`/`load_module` with `find_spec`/`module_from_spec` in plugin loader and doc generator - Remove Python <3.8 `pkg_resources` fallback (dead code since 3.8 dropped) - Update CI matrix: test Python 3.10/3.11/3.12/3.13/3.14 - Fix CI test step: use `--without plugins,lint` to avoid installing incompatible old plugin test deps on newer Python versions (plugin tests run in Docker, host only needs pytest + testcontainers) - Mark plugins and lint dependency groups as optional - Change plugin dep pins from exact versions to `>=` ranges so poetry lock resolves on newer Python (actual test versions unchanged, controlled by support_matrix in each plugin + Docker) - Update deps: unpin psutil, loosen wrapt/uvloop/grpcio-tools constraints - Remove uwsgi from dev deps (doesn't build on 3.12+, tested via e2e) - Update testcontainers DockerCompose usage for v4 API compatibility - Replace unapproved getsentry/paths-filter with dorny/paths-filter - Update docker/Makefile and Container.md for 3.10-3.14 Verified: Docker images build and agent loads all 35 plugins successfully on Python 3.10, 3.11, 3.12, 3.13, and 3.14. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- CLAUDE.md: project guide covering structure, plugin API, testing framework, build commands, and CI pipeline - .claude/skills/new-plugin: scaffolds a complete new instrumentation plugin (code, tests, docker-compose, expected data, services) - .claude/skills/plugin-test: runs plugin/unit tests locally across Python versions, mirroring CI pipeline Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Poetry 1.5.1 cannot read lock files generated by Poetry 2.x, causing CI lint step to fail. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move imports to top of file and ensure 2 blank lines after function definition to satisfy flake8 rules. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
pylint 2.13.9 incorrectly reports os.getenv as E1101 (no-member) on newer Python. Allow resolution to a newer version that fixes this. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add newer library versions that support Python 3.12+: - pyramid: add 2.1 for >=3.12 (requires_python>=3.10) - kafka-python: add 2.3 for >=3.12 (revived with 3.12/3.13 support) - pulsar-client: add 3.9.0 for >=3.12 (has cp312/cp313 wheels) - urllib3: add 2.0 for >=3.12 (2.x series supports 3.12+) - happybase: keep 1.2.0 for >=3.10 (pure Python, thriftpy2 dep may need investigation for 3.12+) Regenerate Plugins.md via make doc-gen. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
gevent/greenlet does not have Python 3.14 wheels yet. Exclude the profiling_greenlet E2E test from the 3.14 matrix and document the limitation in Container.md. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
import importlib.utilin plugin loader causedNameErroron Python 3.12+, plus CI test step venv mismatchfind_module/load_modulewithfind_spec/module_from_specacross plugin loader and doc generator>=ranges sopoetry lockresolves on newer Pythongetsentry/paths-filterGHA with approveddorny/paths-filtertestcontainersDockerComposeAPI for v4 compatibilityKey design decisions
>=ranges: The exact versions tested per plugin are NOT affected — those are controlled by each plugin'ssupport_matrixdict and enforced via Dockerrequirements.txt. The pyproject.toml plugin group is only for dev-machine installation.--without plugins,lint: Plugin integration tests run inside Docker containers, so the host only needspytest+testcontainers. This avoids resolving old plugin deps (e.g., django 3.2, celery 5.1) on Python 3.12+.Verified locally
Docker images build and agent loads all 35 plugins on Python 3.10, 3.11, 3.12, 3.13, and 3.14:
Test plan
Supersedes #374
🤖 Generated with Claude Code