Skip to content

build: relax wrapt version constraint in pyproject.toml#3930

Open
Atry wants to merge 1 commit intoopen-telemetry:mainfrom
Atry:patch-1
Open

build: relax wrapt version constraint in pyproject.toml#3930
Atry wants to merge 1 commit intoopen-telemetry:mainfrom
Atry:patch-1

Conversation

@Atry
Copy link

@Atry Atry commented Nov 9, 2025

Description

Relax the wrapt version constraint from < 2.0.0 to < 3.0.0 to allow compatibility with wrapt 2.x.

Fixes #3903

Background

The current constraint wrapt >= 1.0.0, < 2.0.0 unnecessarily prevents users from using wrapt 2.x. This is an unnecessary limitation because the APIs used by opentelemetry-instrumentation (wrap_function_wrapper and ObjectProxy) remain compatible in wrapt 2.x.

Changes

Updated the wrapt version constraint in the following packages:

  • opentelemetry-instrumentation
  • opentelemetry-processor-baggage
  • 19 instrumentation packages:
    • opentelemetry-instrumentation-aio-pika
    • opentelemetry-instrumentation-aiohttp-client
    • opentelemetry-instrumentation-aiohttp-server
    • opentelemetry-instrumentation-aiopg
    • opentelemetry-instrumentation-asyncio
    • opentelemetry-instrumentation-boto3sqs
    • opentelemetry-instrumentation-cassandra
    • opentelemetry-instrumentation-click
    • opentelemetry-instrumentation-confluent-kafka
    • opentelemetry-instrumentation-dbapi
    • opentelemetry-instrumentation-elasticsearch
    • opentelemetry-instrumentation-grpc
    • opentelemetry-instrumentation-httpx
    • opentelemetry-instrumentation-jinja2
    • opentelemetry-instrumentation-pika
    • opentelemetry-instrumentation-pymemcache
    • opentelemetry-instrumentation-pyramid
    • opentelemetry-instrumentation-threading
    • opentelemetry-instrumentation-urllib3

Type of change

  • New feature (non-breaking change which adds functionality)

How Has This Been Tested?

  • Verified that uv lock --check passes (the locked wrapt version in uv.lock remains unchanged)
  • The change only relaxes upper bound constraints, so existing functionality is preserved

Does This PR Require a Core Repo Change?

  • No.

Checklist:

See contributing.md for styleguide, changelog guidelines, and more.

  • Followed the style guidelines of this project
  • Changelogs have been updated
  • Unit tests have been added
  • Documentation has been updated

@linux-foundation-easycla
Copy link

linux-foundation-easycla bot commented Nov 9, 2025

CLA Signed

The committers listed above are authorized under a signed CLA.

  • ✅ login: Atry / name: Yang, Bo (d35bd3d)

@xrmx
Copy link
Contributor

xrmx commented Nov 11, 2025

We have to update all the entries, not just opentelemetry-instrumentation:

git grep wrapt.*2 | grep pyproject.toml
instrumentation/opentelemetry-instrumentation-aio-pika/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-aiohttp-client/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-aiohttp-server/pyproject.toml:    "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-aiopg/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-asyncio/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-boto3sqs/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-cassandra/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-click/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-confluent-kafka/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-dbapi/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-elasticsearch/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-grpc/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-httpx/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-jinja2/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-pika/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-pymemcache/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-pyramid/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-redis/pyproject.toml:  "wrapt >= 1.12.1",
instrumentation/opentelemetry-instrumentation-sqlalchemy/pyproject.toml:  "wrapt >= 1.11.2",
instrumentation/opentelemetry-instrumentation-threading/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
instrumentation/opentelemetry-instrumentation-urllib3/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
opentelemetry-instrumentation/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",
processor/opentelemetry-processor-baggage/pyproject.toml:  "wrapt >= 1.0.0, < 2.0.0",

@Atry Atry marked this pull request as ready for review December 6, 2025 19:05
@Atry Atry requested a review from a team as a code owner December 6, 2025 19:05
@Atry
Copy link
Author

Atry commented Dec 6, 2025

@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.
@Atry Atry changed the title build: relief wrapt version constraint in pyproject.toml build: relax wrapt version constraint in pyproject.toml Dec 6, 2025
- `opentelemetry-instrumentation-redis`: add missing copyright header for opentelemetry-instrumentation-redis
([#3976](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3976))

### Changed
Copy link
Contributor

Choose a reason for hiding this comment

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

This should be moved under unreleased and keep it under the Added chapter

Copy link
Contributor

@xrmx xrmx left a comment

Choose a reason for hiding this comment

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

Please merge main and redo the uv.lock update since there's conflicts there

@xrmx xrmx moved this to Approved PRs that need fixes in @xrmx's Python PR digest Dec 11, 2025
@mariojonke
Copy link
Contributor

i believe the isinstance(func, ObjectProxy) in unwrap with wrapt v2 will now always return false.
this will likely break uninstrument in most instrumentors since this is where unwrap is mostly used.

it would probably be good to adapt some of the test requirements files to run the tests also with wrapt v2

@xrmx xrmx self-requested a review December 11, 2025 14:57
@xrmx xrmx moved this from Approved PRs that need fixes to Reviewed PRs that need fixes in @xrmx's Python PR digest Dec 11, 2025
@xrmx
Copy link
Contributor

xrmx commented Dec 11, 2025

Indeed it needs fixes:

diff --git a/opentelemetry-instrumentation/pyproject.toml b/opentelemetry-instrumentation/pyproject.toml
index 0e5820e0d..147f42163 100644
--- a/opentelemetry-instrumentation/pyproject.toml
+++ b/opentelemetry-instrumentation/pyproject.toml
@@ -27,7 +27,7 @@ classifiers = [
 dependencies = [
   "opentelemetry-api ~= 1.4",
   "opentelemetry-semantic-conventions == 0.61b0.dev",
-  "wrapt >= 1.0.0, < 2.0.0",
+  "wrapt >= 1.0.0, < 3.0.0",
   "packaging >= 18.0",
 ]
 
diff --git a/opentelemetry-instrumentation/test-requirements.txt b/opentelemetry-instrumentation/test-requirements.txt
index 58c09a950..86462950c 100644
--- a/opentelemetry-instrumentation/test-requirements.txt
+++ b/opentelemetry-instrumentation/test-requirements.txt
@@ -1,5 +1,4 @@
 asgiref==3.8.1
-Deprecated==1.2.14
 gevent==25.5.1
 iniconfig==2.0.0
 packaging==24.0
@@ -8,6 +7,6 @@ py-cpuinfo==9.0.0
 pytest==7.4.4
 tomli==2.0.1
 typing_extensions==4.12.2
-wrapt==1.16.0
+wrapt==2.0.0
 zipp==3.19.2
 -e opentelemetry-instrumentation

gets 5 test failures.

Other users of ObjectProxy other than opentelemetry-instrumentation are:

  • opentelemetry-instrumentation-dbapi
  • instrumentation/opentelemetry-instrumentation-botocore
  • instrumentation/opentelemetry-instrumentation-aiopg
  • instrumentation/opentelemetry-instrumentation-grpc
  • instrumentation/opentelemetry-instrumentation-pika

@blarghmatey
Copy link

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.

@xrmx
Copy link
Contributor

xrmx commented Feb 12, 2026

@blarghmatey the status of this work is that we two incomplete PRs open, feel free to open a third one with proper tests

@blarghmatey
Copy link

@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!

blarghmatey added a commit to mitodl/opentelemetry-python-contrib that referenced this pull request Feb 13, 2026
- 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
@blarghmatey blarghmatey mentioned this pull request Feb 13, 2026
6 tasks
blarghmatey added a commit to mitodl/opentelemetry-python-contrib that referenced this pull request Feb 13, 2026
- 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
@blarghmatey
Copy link

@xrmx when you have time I opened #4203

I'm happy to address any feedback or changes that you identify. Thanks!

blarghmatey added a commit to mitodl/opentelemetry-python-contrib that referenced this pull request Feb 17, 2026
- 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
blarghmatey added a commit to mitodl/opentelemetry-python-contrib that referenced this pull request Feb 17, 2026
- 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
blarghmatey added a commit to mitodl/opentelemetry-python-contrib that referenced this pull request Feb 17, 2026
- 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Reviewed PRs that need fixes

Development

Successfully merging this pull request may close these issues.

Support wrapt 2.0 in pyproject.toml

5 participants

Comments