* pylint: use unnecessary-dunder-call instead of E1101
Since pylint 4 now raises a different error code
* opentelemetry-instrumentation-sqlite3: fix pylint warnings
Possibly using variable 'root_span' before assignment (possibly-used-before-assignment)
Possibly using variable 'child_span' before assignment (possibly-used-before-assignment)
* opentelemetry-instrumentation-botocore: silence a bunch of pylint warnings
In the form of
Possibly using variable '<var>' before assignment (possibly-used-before-assignment)
* opentelemetry-instrumentation-redis: remove useless return spotted by pylint
* opentelemetry-instrumentation-fastapi: silence some pylint warnings
E0102: function already defined line 2034 (function-redefined)
* opentelemetry-instrumentation-google-genai: fix pylint warnings
Assisted by Cursor.
* opentelemetry-instrumentation-openai-v2: fix pylint 4 errors
Assisted by Cursor
* opentelemetry-instrumentation-elasticsearch: fix pylint 4 errors
Assisted by Cursor.
* opentelemetry-instrumentation-pika: fix pylint 4 errors
Assisted by cursor.
* opentelemetry-instrumentation-starlette: fix pylint 4 errors
* opentelemetry-instrumentation: fix pylint 4 errors
Assisted by Cursor.
* opentelemetry-util-http: fix pylint 4 errors
* 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>
* Move logging integrations into auto-instrumentation
* opentelemetry-instrumentation-logging: move the sdk logging handler here
And hook it up via entry point
* Add header and future annotations import
* Rename entry point group to opentelemetry_logging_integrations
* Consider setting up the LoggingHandler as a normal instrumentation
* Fix typo
* Add missing import
* Copy handler tests from core
* More work towards green tests
* Cleanup properly after loggingHandler tests
* Quite hard to expect a mock to setup the handler
* Call removehandler also on local loggers
No change in practice
* Fix wrong noop test
* Move to our own env var for controlling autoinstrumentation
* Copy handler benchmark from sdk
* Document the new environment variables
* Add changelog
* Please pylint
* Added warning about coexistence with sdk code
* Reword a bit
* Assert that the LoggingHandler has not been setup in uninstrumented test
* Add manual handling of auto instrumentation and code attributes logging
* Update instrumentation/opentelemetry-instrumentation-logging/src/opentelemetry/instrumentation/logging/constants.py
* Apply suggestions from code review
Co-authored-by: Pablo Collins <pablo.collins@gmail.com>
* Apply more Pablo feedback
---------
Co-authored-by: Pablo Collins <pablo.collins@gmail.com>
* asyncio: fix environment variables not in docs
Fix the docstrings in environment_variables.py so they are correctly
picked up by Sphinx autodoc for Read the Docs.
Previously the docstrings were placed above the variable assignments,
which Sphinx cannot parse. Moved them below and added the
required '.. envvar::' directives, consistent with how other
packages (e.g. opentelemetry-instrumentation) document their
environment variables.
Fixes#4256
* Fix typo from 'determines' to 'determine'
* Apply suggestion from @xrmx
* asyncio: move environment_variables docs to __init__ module docstring for sphinx
* asyncio: keep envvar docs in environment_variables.py with module-level docstring
---------
Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
* update invocation span to have kind SERVER and have name equal to the function name
* update Lambda invocation span name and kind
* add type checking check
* move changelog entry to 'Breaking changes'
---------
Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
* cassandra: use _instruments_any instead of _instruments for driver deps
The cassandra instrumentation listed both cassandra-driver and
scylla-driver in _instruments, which requires ALL listed packages to be
installed. Since users install one OR the other (they are alternative
drivers for the same API), this should use _instruments_any so that
having either driver installed is sufficient.
This follows the same pattern already used by psycopg2 and kafka-python
instrumentations, introduced in #3610.
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix ci
Signed-off-by: emdneto <9735060+emdneto@users.noreply.github.com>
* fix uv.lock
Signed-off-by: emdneto <9735060+emdneto@users.noreply.github.com>
---------
Signed-off-by: emdneto <9735060+emdneto@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: emdneto <9735060+emdneto@users.noreply.github.com>
* fix instrument of typed psycopg sql
The instrumentation is not working when using [typed `SQL`](https://www.psycopg.org/psycopg3/docs/api/sql.html) from psycopg (only when using the `Composed` type, that is returned when the query is formated).
```python
from psycopg.sql import SQL
query = SQL("SELECT * FROM test")
```
This fixes it by checking the `Composable` base class instead of the more restricted `Composed`.
* add changelog
* fix tests for python 3.9
using an identifier requires a real connection, I just replaced it since we only want to test with a composed.
---------
Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
* fastapi: use test_base to fetch metrics for assertions or filter locally
* Pass scope
---------
Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
* opentelemetry-instrumentation-logging: don't add out of spec attributes by default
Add span context attributes to logging module LogRecord only if the instrumentation
has been configured to do so via set_logging_format argument or OTEL_PYTHON_LOG_CORRELATION
environment variable.
* Add changelog
* Update doc and cleanup tests
* Reduce diff
* Add missing test