build: relax wrapt version constraint in pyproject.toml#3930
build: relax wrapt version constraint in pyproject.toml#3930Atry wants to merge 1 commit intoopen-telemetry:mainfrom
Conversation
|
|
|
We have to update all the entries, not just opentelemetry-instrumentation: |
|
@xrmx Updated. Would you mind reviewing it again? |
Update all pyproject.toml files that had "wrapt >= 1.0.0, < 2.0.0" constraint to "wrapt >= 1.0.0, < 3.0.0" to allow wrapt 2.x. Updated packages: - opentelemetry-instrumentation - opentelemetry-processor-baggage - 20 instrumentation packages Also update uv.lock to use wrapt 2.0.1 for CI testing. This change only affects the development lockfile used for testing. End users are not affected as the version constraint allows both wrapt 1.x and 2.x - users can continue using whichever version their package manager resolves.
| - `opentelemetry-instrumentation-redis`: add missing copyright header for opentelemetry-instrumentation-redis | ||
| ([#3976](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3976)) | ||
|
|
||
| ### Changed |
There was a problem hiding this comment.
This should be moved under unreleased and keep it under the Added chapter
xrmx
left a comment
There was a problem hiding this comment.
Please merge main and redo the uv.lock update since there's conflicts there
|
i believe the it would probably be good to adapt some of the test requirements files to run the tests also with wrapt v2 |
|
Indeed it needs fixes: gets 5 test failures. Other users of ObjectProxy other than opentelemetry-instrumentation are:
|
|
What's the status of this work? It is currently a blocker for me being able to use this SDK for one of my applications. |
|
@blarghmatey the status of this work is that we two incomplete PRs open, feel free to open a third one with proper tests |
|
@xrmx thank you for the follow-up. I'll try to get something opened shortly to address the needs. I appreciate all of the hard work from you and the other Python OTel maintainers! |
- Update wrapt version constraint from '>=1.0.0, <2.0.0' to '>=1.0.0' in all affected packages - Replace ObjectProxy with BaseObjectProxy where iteration support is not needed - Add fallback import for wrapt 1.x compatibility (ObjectProxy as BaseObjectProxy) - Keep ObjectProxy usage in classes that implement __iter__ (botocore, aiopg) - Update CHANGELOG.md This change maintains backward compatibility with wrapt 1.x while enabling support for wrapt 2.x. BaseObjectProxy is the new base class in wrapt 2.x, while ObjectProxy is now a subclass that adds __iter__() support. Fixes open-telemetry#3903 Related to open-telemetry#3930 and open-telemetry#4082
- Update wrapt version constraint from '>=1.0.0, <2.0.0' to '>=1.0.0' in all affected packages - Replace ObjectProxy with BaseObjectProxy where iteration support is not needed - Add fallback import for wrapt 1.x compatibility (ObjectProxy as BaseObjectProxy) - Keep ObjectProxy usage in classes that implement __iter__ (botocore, aiopg) - Update CHANGELOG.md This change maintains backward compatibility with wrapt 1.x while enabling support for wrapt 2.x. BaseObjectProxy is the new base class in wrapt 2.x, while ObjectProxy is now a subclass that adds __iter__() support. Fixes open-telemetry#3903 Related to open-telemetry#3930 and open-telemetry#4082
- Update wrapt version constraint from '>=1.0.0, <2.0.0' to '>=1.0.0' in all affected packages - Replace ObjectProxy with BaseObjectProxy where iteration support is not needed - Add fallback import for wrapt 1.x compatibility (ObjectProxy as BaseObjectProxy) - Keep ObjectProxy usage in classes that implement __iter__ (botocore, aiopg) - Update CHANGELOG.md This change maintains backward compatibility with wrapt 1.x while enabling support for wrapt 2.x. BaseObjectProxy is the new base class in wrapt 2.x, while ObjectProxy is now a subclass that adds __iter__() support. Fixes open-telemetry#3903 Related to open-telemetry#3930 and open-telemetry#4082
- Update wrapt version constraint from '>=1.0.0, <2.0.0' to '>=1.0.0' in all affected packages - Replace ObjectProxy with BaseObjectProxy where iteration support is not needed - Add fallback import for wrapt 1.x compatibility (ObjectProxy as BaseObjectProxy) - Keep ObjectProxy usage in classes that implement __iter__ (botocore, aiopg) - Update CHANGELOG.md This change maintains backward compatibility with wrapt 1.x while enabling support for wrapt 2.x. BaseObjectProxy is the new base class in wrapt 2.x, while ObjectProxy is now a subclass that adds __iter__() support. Fixes open-telemetry#3903 Related to open-telemetry#3930 and open-telemetry#4082
- Update wrapt version constraint from '>=1.0.0, <2.0.0' to '>=1.0.0' in all affected packages - Replace ObjectProxy with BaseObjectProxy where iteration support is not needed - Add fallback import for wrapt 1.x compatibility (ObjectProxy as BaseObjectProxy) - Keep ObjectProxy usage in classes that implement __iter__ (botocore, aiopg) - Update CHANGELOG.md This change maintains backward compatibility with wrapt 1.x while enabling support for wrapt 2.x. BaseObjectProxy is the new base class in wrapt 2.x, while ObjectProxy is now a subclass that adds __iter__() support. Fixes open-telemetry#3903 Related to open-telemetry#3930 and open-telemetry#4082
- Update wrapt version constraint from '>=1.0.0, <2.0.0' to '>=1.0.0' in all affected packages - Replace ObjectProxy with BaseObjectProxy where iteration support is not needed - Add fallback import for wrapt 1.x compatibility (ObjectProxy as BaseObjectProxy) - Keep ObjectProxy usage in classes that implement __iter__ (botocore, aiopg) - Update CHANGELOG.md This change maintains backward compatibility with wrapt 1.x while enabling support for wrapt 2.x. BaseObjectProxy is the new base class in wrapt 2.x, while ObjectProxy is now a subclass that adds __iter__() support. Fixes open-telemetry#3903 Related to open-telemetry#3930 and open-telemetry#4082
- Update wrapt version constraint from '>=1.0.0, <2.0.0' to '>=1.0.0' in all affected packages - Replace ObjectProxy with BaseObjectProxy where iteration support is not needed - Add fallback import for wrapt 1.x compatibility (ObjectProxy as BaseObjectProxy) - Keep ObjectProxy usage in classes that implement __iter__ (botocore, aiopg) - Update CHANGELOG.md This change maintains backward compatibility with wrapt 1.x while enabling support for wrapt 2.x. BaseObjectProxy is the new base class in wrapt 2.x, while ObjectProxy is now a subclass that adds __iter__() support. Fixes open-telemetry#3903 Related to open-telemetry#3930 and open-telemetry#4082
- Update wrapt version constraint from '>=1.0.0, <2.0.0' to '>=1.0.0' in all affected packages - Replace ObjectProxy with BaseObjectProxy where iteration support is not needed - Add fallback import for wrapt 1.x compatibility (ObjectProxy as BaseObjectProxy) - Keep ObjectProxy usage in classes that implement __iter__ (botocore, aiopg) - Update CHANGELOG.md This change maintains backward compatibility with wrapt 1.x while enabling support for wrapt 2.x. BaseObjectProxy is the new base class in wrapt 2.x, while ObjectProxy is now a subclass that adds __iter__() support. Fixes open-telemetry#3903 Related to open-telemetry#3930 and open-telemetry#4082
- Update wrapt version constraint from '>=1.0.0, <2.0.0' to '>=1.0.0' in all affected packages - Replace ObjectProxy with BaseObjectProxy where iteration support is not needed - Add fallback import for wrapt 1.x compatibility (ObjectProxy as BaseObjectProxy) - Keep ObjectProxy usage in classes that implement __iter__ (botocore, aiopg) - Update CHANGELOG.md This change maintains backward compatibility with wrapt 1.x while enabling support for wrapt 2.x. BaseObjectProxy is the new base class in wrapt 2.x, while ObjectProxy is now a subclass that adds __iter__() support. Fixes open-telemetry#3903 Related to open-telemetry#3930 and open-telemetry#4082
|
This PR has been automatically marked as stale because it has not had any activity for 14 days. It will be closed if no further activity occurs within 14 days of this comment. |
- Update wrapt version constraint from '>=1.0.0, <2.0.0' to '>=1.0.0' in all affected packages - Replace ObjectProxy with BaseObjectProxy where iteration support is not needed - Add fallback import for wrapt 1.x compatibility (ObjectProxy as BaseObjectProxy) - Keep ObjectProxy usage in classes that implement __iter__ (botocore, aiopg) - Update CHANGELOG.md This change maintains backward compatibility with wrapt 1.x while enabling support for wrapt 2.x. BaseObjectProxy is the new base class in wrapt 2.x, while ObjectProxy is now a subclass that adds __iter__() support. Fixes open-telemetry#3903 Related to open-telemetry#3930 and open-telemetry#4082
|
Closing as superseded by #4203 |
* Add support for wrapt 2.x - Update wrapt version constraint from '>=1.0.0, <2.0.0' to '>=1.0.0' in all affected packages - Replace ObjectProxy with BaseObjectProxy where iteration support is not needed - Add fallback import for wrapt 1.x compatibility (ObjectProxy as BaseObjectProxy) - Keep ObjectProxy usage in classes that implement __iter__ (botocore, aiopg) - Update CHANGELOG.md This change maintains backward compatibility with wrapt 1.x while enabling support for wrapt 2.x. BaseObjectProxy is the new base class in wrapt 2.x, while ObjectProxy is now a subclass that adds __iter__() support. Fixes #3903 Related to #3930 and #4082 * Restructure wrapt test requirements - Remove wrapt from base test-requirements.txt (installed via pyproject.toml) - Remove Deprecated from base test-requirements.txt (version conflicts with wrapt 2.x) - Create test-requirements-wrapt1.txt with wrapt<2.0.0 and Deprecated==1.2.14 - Create test-requirements-wrapt2.txt with wrapt>=2.0.0 and Deprecated>=1.2.18 - Update tox.ini to use requirements files instead of factor-based deps - Add Deprecated to lint environment deps This follows the pattern used by other packages (botocore, httpx) and resolves dependency conflicts where Deprecated 1.2.14 requires wrapt<2. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: Resolve conflicts and add Wrapt 3 as upper bound * Add wrapt 1.x/2.x test matrix for all ObjectProxy-using instrumentations Extend the wrapt1/wrapt2 test matrix to all instrumentations that use wrapt.ObjectProxy or wrapt.BaseObjectProxy: botocore, dbapi, grpc, pika, aiopg, httpx, and asyncpg. Changes: - tox.ini: Add {wrapt1,wrapt2} factor to envlist for all 7 packages; update deps to reference per-version test-requirements files - botocore/pyproject.toml: Add missing wrapt dependency (>= 1.0.0, < 3.0.0) - All base test-requirements files: Remove pinned wrapt== and Deprecated== - New test-requirements-wrapt1.txt / test-requirements-wrapt2.txt files for each package (using Deprecated>=1.2.18 for wrapt2 to avoid conflict with Deprecated==1.2.14 which requires wrapt<2) - Regenerate GitHub Actions workflows (including new test_3.yml due to expanded job count) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix CI failures: ruff formatting and lint wrapt version pin - utils.py: reformat multi-condition if statement to satisfy ruff line length requirement (fixes generate/precommit CI jobs) - tox.ini: pin wrapt>=1.0.0,<2.0.0 for lint envs of botocore, dbapi, grpc, and sio-pika; with wrapt 1.x removed from base test-requirements, lint envs were getting wrapt 2.x which caused pylint no-member errors on __wrapped__ (a C-extension attribute not visible to static analysis) Also add Deprecated==1.2.14 to same lint envs for consistency Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix remaining CI failures: unused imports and uv.lock - dbapi/__init__.py: remove unused bare 'import wrapt' (F401); the compat shim imports BaseObjectProxy directly from wrapt - grpc/_aio_server.py: remove unused 'import wrapt' (F401) and fix import ordering (I001) flagged by ruff pre-commit hook - uv.lock: regenerate after adding wrapt dependency to botocore pyproject.toml Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix aiopg lint wrapt pin, uv.lock format, and ruff blank lines - tox.ini: pin wrapt>=1.0.0,<2.0.0 + Deprecated==1.2.14 for lint-instrumentation-aiopg; aiopg source uses __wrapped__ heavily and pylint's no-member error appeared when wrapt 2.x was installed - uv.lock: regenerate using pre-commit hook (uv v0.9.30) to fix trailing-slash format on registry URLs - httpx/test_httpx_integration.py: add blank line before try/except block (ruff I001/E303 formatting fix) - pika/utils.py: add blank line before try/except block (same ruff fix) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix pylint E0611: disable no-name-in-module for BaseObjectProxy compat shim pylint with wrapt 1.x installed reports E0611 ('No name BaseObjectProxy in module wrapt') when it sees the try/except ImportError compat shim, even though the except branch provides a fallback. Add a per-line pylint disable comment to suppress this false positive. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix asyncpg test: use BaseObjectProxy compat shim for wrapt 2.x In wrapt 2.x, BoundFunctionWrapper no longer subclasses ObjectProxy (it subclasses BaseObjectProxy instead). Update the test to use the compat shim so isinstance checks pass with both wrapt 1.x and 2.x. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address PR review comments: add wrapt 2.0.0+ comments and fix CHANGELOG - Add '# wrapt 2.0.0+' comment above BaseObjectProxy import in all try/except compat shim blocks to clarify why the pattern is used - Fix CHANGELOG.md PR link from #XXXX to #4203 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com> * chore: Update changelog and workflows * Apply suggestions from code review Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com> * fix: Update workflows again * Apply suggestions from code review Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com> * Remove Deprecated version pins from test-requirements and tox.ini Deprecated>=1.2.14 was pinned because Deprecated==1.2.14 requires wrapt<2. Since pip automatically resolves compatible versions based on the wrapt constraint in each test env, explicit Deprecated pins are unnecessary. Remove them from all test-requirements-wrapt*.txt files and from lint env deps in tox.ini. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Remove stale .orig file leftover from rebase Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Move lint env wrapt pins from tox.ini into test-requirements files All dependencies should be managed via requirements.txt files rather than inline in tox.ini. Move wrapt>=1.0.0,<2.0.0 pins for lint environments into their respective test-requirements files: - instrumentation-grpc/test-requirements-1.txt - instrumentation-botocore/test-requirements-1.txt - instrumentation-dbapi/test-requirements.txt - instrumentation-aiopg/test-requirements.txt Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Apply suggestions from code review * Update instrumentation/opentelemetry-instrumentation-botocore/test-requirements-1.txt * Update instrumentation/opentelemetry-instrumentation-grpc/test-requirements-1.txt * Update instrumentation/opentelemetry-instrumentation-dbapi/test-requirements.txt * Update instrumentation/opentelemetry-instrumentation-aiopg/test-requirements.txt * Address latest PR feedback: botocore compat shim, exact wrapt versions, lint env refs - botocore/bedrock_utils.py: apply BaseObjectProxy compat shim to ConverseStreamWrapper and InvokeModelWithResponseStreamWrapper (both classes define __iter__ so BaseObjectProxy is correct) - All test-requirements-wrapt1.txt: pin wrapt==1.17.3 (exact version) - All test-requirements-wrapt2.txt: pin wrapt==2.1.2 (exact version) - tox.ini lint envs: switch to -wrapt2.txt files so lint runs with wrapt 2.x; remove wrapt pin from base test-requirements files (grpc/test-requirements-1.txt, botocore/test-requirements-1.txt, dbapi/test-requirements.txt, aiopg/test-requirements.txt) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: add pylint disable=no-member for __wrapped__ and abstract-method usages Add pylint: disable=no-member to all class definitions and usages of __wrapped__ that are invisible to pylint when using wrapt's C extension proxy types (BaseObjectProxy/ObjectProxy). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
Description
Relax the
wraptversion constraint from< 2.0.0to< 3.0.0to allow compatibility with wrapt 2.x.Fixes #3903
Background
The current constraint
wrapt >= 1.0.0, < 2.0.0unnecessarily prevents users from using wrapt 2.x. This is an unnecessary limitation because the APIs used byopentelemetry-instrumentation(wrap_function_wrapperandObjectProxy) remain compatible in wrapt 2.x.Changes
Updated the wrapt version constraint in the following packages:
opentelemetry-instrumentationopentelemetry-processor-baggageopentelemetry-instrumentation-aio-pikaopentelemetry-instrumentation-aiohttp-clientopentelemetry-instrumentation-aiohttp-serveropentelemetry-instrumentation-aiopgopentelemetry-instrumentation-asyncioopentelemetry-instrumentation-boto3sqsopentelemetry-instrumentation-cassandraopentelemetry-instrumentation-clickopentelemetry-instrumentation-confluent-kafkaopentelemetry-instrumentation-dbapiopentelemetry-instrumentation-elasticsearchopentelemetry-instrumentation-grpcopentelemetry-instrumentation-httpxopentelemetry-instrumentation-jinja2opentelemetry-instrumentation-pikaopentelemetry-instrumentation-pymemcacheopentelemetry-instrumentation-pyramidopentelemetry-instrumentation-threadingopentelemetry-instrumentation-urllib3Type of change
How Has This Been Tested?
uv lock --checkpasses (the locked wrapt version inuv.lockremains unchanged)Does This PR Require a Core Repo Change?
Checklist:
See contributing.md for styleguide, changelog guidelines, and more.