Skip to content

add database name as the Connection attribute#752

Merged
methane merged 1 commit into
PyMySQL:mainfrom
cazorla19:add-database-attribute
Jan 5, 2025
Merged

add database name as the Connection attribute#752
methane merged 1 commit into
PyMySQL:mainfrom
cazorla19:add-database-attribute

Conversation

@cazorla19

Copy link
Copy Markdown
Contributor

This change will add self.database as the Connection attribute displaying the database name from connection parameters.

I've described the reason for this change in #751 . Moreover, I believe that this attribute can be useful for other use-case where the info about the database name can be useful.

@codecov

codecov Bot commented Jan 3, 2025

Copy link
Copy Markdown

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 88.88%. Comparing base (e2a908b) to head (ddc6675).
Report is 29 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #752      +/-   ##
==========================================
+ Coverage   88.86%   88.88%   +0.02%     
==========================================
  Files           7        7              
  Lines         548      549       +1     
==========================================
+ Hits          487      488       +1     
  Misses         61       61              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@methane methane merged commit 8103651 into PyMySQL:main Jan 5, 2025
liustve added a commit to aws-observability/aws-otel-python-instrumentation that referenced this pull request Jun 16, 2026
mysqlclient 2.2.7 (PyMySQL/mysqlclient#752, 2025-01) added Python-level
self.db / self.database attributes in Connection.__init__ for OTel
instrumentation to read. The contract test was pinned at 2.2.4 where
those attributes didn't exist, so dbapi's getattr(conn, "db") returned
None and the upstream dbapi instrumentation's empty-string default landed
on the span.

The 0.62b0 dbapi semantic-convention migration
(open-telemetry/opentelemetry-python-contrib#4109) added an `if value:`
filter in _set_db_name, so the empty string is now dropped entirely
and the test's `db.name == ""` assertion fails with "key not found".

Bump the contract-test pin to 2.2.8 (current latest) so conn.db
returns the actual database name, and update the assertion to expect
DATABASE_NAME instead of the empty placeholder.

Verified locally against MySQL 8: mysqlclient 2.2.4 -> conn.db is None,
mysqlclient 2.2.7+ -> conn.db == "testdb".
liustve added a commit to aws-observability/aws-otel-python-instrumentation that referenced this pull request Jun 16, 2026
…base

With mysqlclient 2.2.4, conn.host/conn.user/conn.db were not exposed as
Python attributes, so OTel's dbapi instrumentation produced skinny spans
missing net.peer.name / db.name / db user. The test override worked around
those gaps with negated assertions.

mysqlclient 2.2.7 (PyMySQL/mysqlclient#752) added Python-level Connection
attributes, so spans now carry net.peer.name and db.name. ADOT's
_get_db_connection sees an address and emits the full
RemoteResourceType="DB::Connection" + RemoteResourceIdentifier set,
matching what the base DatabaseContractTestBase already asserts.

Drop the override methods entirely and let the base assertions run.
liustve added a commit to aws-observability/aws-otel-python-instrumentation that referenced this pull request Jun 17, 2026
Automated update of OpenTelemetry dependencies.

**Build Status:** ❌
[failure](https://github.com/aws-observability/aws-otel-python-instrumentation/actions/runs/27184408784)

**Updated versions:**
- [OpenTelemetry
Python](https://github.com/open-telemetry/opentelemetry-python/releases/tag/v1.42.1):
1.42.1
- [OpenTelemetry
Contrib](https://github.com/open-telemetry/opentelemetry-python-contrib/releases/tag/v0.63b1):
0.63b1
-
[opentelemetry-sdk-extension-aws](https://pypi.org/project/opentelemetry-sdk-extension-aws/2.1.0/):
2.1.0
-
[opentelemetry-propagator-aws-xray](https://pypi.org/project/opentelemetry-propagator-aws-xray/1.0.2/):
1.0.2

**Upstream releases with breaking changes:**
Note: the mechanism to detect upstream breaking changes is not perfect.
Be sure to check all new releases and understand if any additional
changes need to be addressed.


**opentelemetry-python-contrib:**
- [Version
1.41.0/0.62b0](https://github.com/open-telemetry/opentelemetry-python-contrib/releases/tag/v0.62b0)

*Description of changes:*

- Drops the `opentelemetry-instrumentation-boto` runtime dependency
(legacy boto2 instrumentation), removed entirely upstream in:
open-telemetry/opentelemetry-python-contrib#4303

- Drops Python 3.9 support to match upstream's new minimum (Python
≥3.10): open-telemetry/opentelemetry-python#5076
(core) and
open-telemetry/opentelemetry-python-contrib#4412
(contrib)

- Switches `from importlib_metadata import version` to stdlib `from
importlib.metadata import version` after upstream dropped the
third-party `importlib-metadata` package from `opentelemetry-api`:
open-telemetry/opentelemetry-python#3234

- Refactors the botocore patches (`_botocore_patches.py`) to use the new
`ExtensionRegistry` API. Upstream split `_KNOWN_EXTENSIONS` into
`_BOTOCORE_EXTENSIONS` + `_AIOBOTOCORE_EXTENSIONS`, removed
`_find_extension`, and moved `_safe_invoke` to
`opentelemetry.instrumentation.botocore.utils` as part of adding
aiobotocore instrumentation:
open-telemetry/opentelemetry-python-contrib#4049

- Removes the Starlette ASGI `suppress_http_instrumentation` patch
(which the existing ADOT TODO already flagged) since the ASGI middleware
now natively honors `suppress_http_instrumentation` upstream:
open-telemetry/opentelemetry-python-contrib#4375

- Adapts the configurator tests to upstream's renamed
`BaggageSpanProcessor._baggage_key_predicate` → `_predicates` (now a
list of callables, after the constructor was reworked to accept either a
single predicate or a sequence):
open-telemetry/opentelemetry-python-contrib#4371

- Adapts `test_otlp_attribute_vs_body_types` to upstream's
`_VALID_ANY_VALUE_TYPES` switching `typing.Mapping`/`typing.Sequence` to
`collections.abc.Mapping`/`collections.abc.Sequence`:
open-telemetry/opentelemetry-python#5133

- Bumps the mysqlclient contract-test pin from `2.2.4` to `2.2.8` and
updates the matching `db.name` assertion. The 0.62b0 dbapi
semantic-convention migration
(open-telemetry/opentelemetry-python-contrib#4109)
added an empty-string filter inside `_set_db_name`, which exposed a
latent gap: mysqlclient < 2.2.7 didn't expose a Python-level `conn.db`
attribute (added upstream in
PyMySQL/mysqlclient#752, shipped in mysqlclient
2.2.7), so OTel's dbapi instrumentation defaulted `database` to `""` and
the empty value used to land on the span unconditionally. After 0.62b0
the empty value is dropped, so the assertion `db.name == ""` now fails
with "key not found". Bumping mysqlclient lets `conn.db` flow through as
the actual database name (`testdb`) so the assertion becomes meaningful.


By submitting this pull request, I confirm that you can use, modify,
copy, and redistribute this contribution, under the terms of your
choice.

---------

Co-authored-by: github-actions <github-actions@github.com>
Co-authored-by: Steve Liu <liustve@amazon.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants