Skip to content

chore(migration): Migrate code from googleapis/python-spanner-sqlalchemy into packages/sqlalchemy-spanner#16054

Draft
parthea wants to merge 599 commits intomainfrom
migration.python-spanner-sqlalchemy.migration.2026-03-09_19-05-52.migrate
Draft

chore(migration): Migrate code from googleapis/python-spanner-sqlalchemy into packages/sqlalchemy-spanner#16054
parthea wants to merge 599 commits intomainfrom
migration.python-spanner-sqlalchemy.migration.2026-03-09_19-05-52.migrate

Conversation

@parthea
Copy link
Contributor

@parthea parthea commented Mar 9, 2026

See #10954.

This PR should be merged with a merge-commit, not a squash-commit, in order to preserve the git history.

renovate-bot and others added 30 commits December 3, 2024 18:15
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [google-cloud-spanner](https://redirect.github.com/googleapis/python-spanner) | `==3.50.1` -> `==3.51.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/google-cloud-spanner/3.51.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/pypi/google-cloud-spanner/3.51.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/pypi/google-cloud-spanner/3.50.1/3.51.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/google-cloud-spanner/3.50.1/3.51.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>googleapis/python-spanner (google-cloud-spanner)</summary>

### [`v3.51.0`](https://redirect.github.com/googleapis/python-spanner/blob/HEAD/CHANGELOG.md#3510-2024-12-05)

[Compare Source](https://redirect.github.com/googleapis/python-spanner/compare/v3.50.1...v3.51.0)

##### Features

-   Add connection variable for ignoring transaction warnings ([#&#8203;1249](https://redirect.github.com/googleapis/python-spanner/issues/1249)) ([eeb7836](https://redirect.github.com/googleapis/python-spanner/commit/eeb7836b6350aa9626dfb733208e6827d38bb9c9))
-   **spanner:** Implement custom tracer_provider injection for opentelemetry traces ([#&#8203;1229](https://redirect.github.com/googleapis/python-spanner/issues/1229)) ([6869ed6](https://redirect.github.com/googleapis/python-spanner/commit/6869ed651e41d7a8af046884bc6c792a4177f766))
-   Support float32 parameters in dbapi ([#&#8203;1245](https://redirect.github.com/googleapis/python-spanner/issues/1245)) ([829b799](https://redirect.github.com/googleapis/python-spanner/commit/829b799e0c9c6da274bf95c272cda564cfdba928))

##### Bug Fixes

-   Allow setting connection.read_only to same value ([#&#8203;1247](https://redirect.github.com/googleapis/python-spanner/issues/1247)) ([5e8ca94](https://redirect.github.com/googleapis/python-spanner/commit/5e8ca949b583fbcf0b92b42696545973aad8c78f))
-   Allow setting staleness to same value in tx ([#&#8203;1253](https://redirect.github.com/googleapis/python-spanner/issues/1253)) ([a214885](https://redirect.github.com/googleapis/python-spanner/commit/a214885ed474f3d69875ef580d5f8cbbabe9199a))
-   Dbapi raised AttributeError with \[] as arguments ([#&#8203;1257](https://redirect.github.com/googleapis/python-spanner/issues/1257)) ([758bf48](https://redirect.github.com/googleapis/python-spanner/commit/758bf4889a7f3346bc8282a3eed47aee43be650c))

##### Performance Improvements

-   Optimize ResultSet decoding ([#&#8203;1244](https://redirect.github.com/googleapis/python-spanner/issues/1244)) ([ccae6e0](https://redirect.github.com/googleapis/python-spanner/commit/ccae6e0287ba6cf3c14f15a907b2106b11ef1fdc))
-   Remove repeated GetSession calls for FixedSizePool ([#&#8203;1252](https://redirect.github.com/googleapis/python-spanner/issues/1252)) ([c064815](https://redirect.github.com/googleapis/python-spanner/commit/c064815abaaa4b564edd6f0e365a37e7e839080c))

##### Documentation

-   **samples:** Add samples for Cloud Spanner Default Backup Schedules ([#&#8203;1238](https://redirect.github.com/googleapis/python-spanner/issues/1238)) ([054a186](https://redirect.github.com/googleapis/python-spanner/commit/054a18658eedc5d4dbecb7508baa3f3d67f5b815))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/googleapis/python-spanner-sqlalchemy).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS40Mi40IiwidXBkYXRlZEluVmVyIjoiMzkuNDIuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
* feat: support float32

Adds support for FLOAT32 columns. Applications should use the SQLAlchemy
type REAL to create a FLOAT32 column, as FLOAT is already reserved for
FLOAT64.

Fixes #409

* chore: run code formatter

* fix: remove DOUBLE reference which is SQLAlchemy 2.0-only
* docs: add sample for read-only transactions

Adds a sample and documentation for read-only transactions.

Fixes #493

* chore: run two read-only transactions in test

* chore: remove GetSession requests

* chore: remove unused import
Adds tests and samples for executing Partitioned DML using SQLAlchemy.

Fixes #496
* docs: add sample for stale reads

Adds a sample and tests for executing stale reads on Spanner. Using
stale reads can improve performance when the application does not require
the guarantees that are given by strong reads.

Fixes #495

* chore: remove GetSession requests
* test: add tests for using json array

Adds test to verify that using JSON with both an array and a dict
work as expected.

Fixes #404

* chore: remove GetSession checks in tests

---------

Co-authored-by: Sanjeev Bhatt <bhatt4982@gmail.com>
* test: add test with 'roles' table

Add a test that verifies that a table with the same name as a
system view can be used.

* chore: fix linting
Cleans up the Transaction section of the README file a bit.
Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Bumps [cryptography](https://github.com/pyca/cryptography) from 44.0.0 to 44.0.1.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](pyca/cryptography@44.0.0...44.0.1)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
renovate-bot and others added 7 commits March 5, 2026 10:18
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [certifi](https://redirect.github.com/certifi/python-certifi) |
`==2025.11.12` → `==2026.2.25` |
![age](https://developer.mend.io/api/mc/badges/age/pypi/certifi/2026.2.25?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/certifi/2025.11.12/2026.2.25?slim=true)
|

---

### Release Notes

<details>
<summary>certifi/python-certifi (certifi)</summary>

###
[`v2026.2.25`](https://redirect.github.com/certifi/python-certifi/compare/2026.01.04...2026.02.25)

[Compare
Source](https://redirect.github.com/certifi/python-certifi/compare/2026.01.04...2026.02.25)

###
[`v2026.1.4`](https://redirect.github.com/certifi/python-certifi/compare/2025.11.12...2026.01.04)

[Compare
Source](https://redirect.github.com/certifi/python-certifi/compare/2025.11.12...2026.01.04)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/python-spanner-sqlalchemy).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My40OC4xIiwidXBkYXRlZEluVmVyIjoiNDMuNDguMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [packaging](https://redirect.github.com/pypa/packaging) | `==25.0` →
`==26.0` |
![age](https://developer.mend.io/api/mc/badges/age/pypi/packaging/26.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/packaging/25.0/26.0?slim=true)
|

---

### Release Notes

<details>
<summary>pypa/packaging (packaging)</summary>

###
[`v26.0`](https://redirect.github.com/pypa/packaging/releases/tag/26.0)

[Compare
Source](https://redirect.github.com/pypa/packaging/compare/25.0...26.0)

Read about the performance improvements here:
<https://iscinumpy.dev/post/packaging-faster>.

#### What's Changed

Features:

- PEP 751: support pylock by
[@&#8203;sbidoul](https://redirect.github.com/sbidoul) in
[#&#8203;900](https://redirect.github.com/pypa/packaging/pull/900)
- PEP 794: import name metadata by
[@&#8203;brettcannon](https://redirect.github.com/brettcannon) in
[#&#8203;948](https://redirect.github.com/pypa/packaging/pull/948)
- Support writing metadata by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;846](https://redirect.github.com/pypa/packaging/pull/846)
- Support `__replace__` for `Version` by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1003](https://redirect.github.com/pypa/packaging/pull/1003)
- Support positional pattern matching for `Version` and `Specifier` by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1004](https://redirect.github.com/pypa/packaging/pull/1004)

Behavior adaptations:

- PEP 440 handling of prereleases for `Specifier.contains`,
`SpecifierSet.contains`, and `SpecifierSet.filter` by
[@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
[#&#8203;897](https://redirect.github.com/pypa/packaging/pull/897)
- Handle PEP 440 edge case in `SpecifierSet.filter` by
[@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
[#&#8203;942](https://redirect.github.com/pypa/packaging/pull/942)
- Adjust arbitrary equality intersection preservation in `SpecifierSet`
by [@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
[#&#8203;951](https://redirect.github.com/pypa/packaging/pull/951)
- Return `False` instead of raising for `.contains` with invalid version
by [@&#8203;Liam-DeVoe](https://redirect.github.com/Liam-DeVoe) in
[#&#8203;932](https://redirect.github.com/pypa/packaging/pull/932)
- Support arbitrary equality on arbitrary strings for `Specifier` and
`SpecifierSet`'s `filter` and `contains` method. by
[@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
[#&#8203;954](https://redirect.github.com/pypa/packaging/pull/954)
- Only try to parse as `Version` on certain marker keys, return `False`
on unequal ordered comparsions by
[@&#8203;JP-Ellis](https://redirect.github.com/JP-Ellis) in
[#&#8203;939](https://redirect.github.com/pypa/packaging/pull/939)

Fixes:

- Update `_hash` when unpickling `Tag()` by
[@&#8203;dholth](https://redirect.github.com/dholth) in
[#&#8203;860](https://redirect.github.com/pypa/packaging/pull/860)
- Correct comment and simplify implicit prerelease handling in
`Specifier.prereleases` by
[@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
[#&#8203;896](https://redirect.github.com/pypa/packaging/pull/896)
- Use explicit `_GLibCVersion` `NamedTuple` in `_manylinux` by
[@&#8203;cthoyt](https://redirect.github.com/cthoyt) in
[#&#8203;868](https://redirect.github.com/pypa/packaging/pull/868)
- Detect invalid license expressions containing `()` by
[@&#8203;bwoodsend](https://redirect.github.com/bwoodsend) in
[#&#8203;879](https://redirect.github.com/pypa/packaging/pull/879)
- Correct regex for metadata `'name'` format by
[@&#8203;di](https://redirect.github.com/di) in
[#&#8203;925](https://redirect.github.com/pypa/packaging/pull/925)
- Improve the message around expecting a semicolon by
[@&#8203;pradyunsg](https://redirect.github.com/pradyunsg) in
[#&#8203;833](https://redirect.github.com/pypa/packaging/pull/833)
- Support nested parens in license expressions by
[@&#8203;Liam-DeVoe](https://redirect.github.com/Liam-DeVoe) in
[#&#8203;931](https://redirect.github.com/pypa/packaging/pull/931)
- Add space before at symbol in `Requirements` string by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;953](https://redirect.github.com/pypa/packaging/pull/953)
- A root logger use found by ruff LOG, use `packaging` logger instead by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;965](https://redirect.github.com/pypa/packaging/pull/965)
- Better support for subclassing `Marker` and `Requirement` by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1022](https://redirect.github.com/pypa/packaging/pull/1022)
- Normalize all extras, not just if it comes first by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1024](https://redirect.github.com/pypa/packaging/pull/1024)
- Don't produce a broken repr if `Marker` fails to construct by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1033](https://redirect.github.com/pypa/packaging/pull/1033)

Performance:

- Avoid recompiling regexes in the tokenizer for a 3x speedup by
[@&#8203;hauntsaninja](https://redirect.github.com/hauntsaninja) in
[#&#8203;1019](https://redirect.github.com/pypa/packaging/pull/1019)
- Improve performance in `_manylinux.py` by
[@&#8203;cthoyt](https://redirect.github.com/cthoyt) in
[#&#8203;869](https://redirect.github.com/pypa/packaging/pull/869)
- Minor cleanups to `Version` by
[@&#8203;bearomorphism](https://redirect.github.com/bearomorphism) in
[#&#8203;913](https://redirect.github.com/pypa/packaging/pull/913)
- Skip redundant creation of `Version`s in specifier comparison by
[@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
[#&#8203;986](https://redirect.github.com/pypa/packaging/pull/986)
- Cache `Specifier`'s Version by
[@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
[#&#8203;985](https://redirect.github.com/pypa/packaging/pull/985)
- Make `Version` a little faster by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;987](https://redirect.github.com/pypa/packaging/pull/987)
- Minor `Version` regex cleanup by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;990](https://redirect.github.com/pypa/packaging/pull/990)
- Faster regex on Python 3.11.5+ by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;988](https://redirect.github.com/pypa/packaging/pull/988) and
[#&#8203;1055](https://redirect.github.com/pypa/packaging/pull/1055)
- Lazily calculate `_key` in `Version` by
[@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
[#&#8203;989](https://redirect.github.com/pypa/packaging/pull/989) and
regression for `packaging_legacy` fixed by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1048](https://redirect.github.com/pypa/packaging/pull/1048)
- Faster `canonicalize_version` by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;993](https://redirect.github.com/pypa/packaging/pull/993)
- Use `fullmatch` in a couple more places by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;992](https://redirect.github.com/pypa/packaging/pull/992)
- Use `fullmatch` for markers too by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1029](https://redirect.github.com/pypa/packaging/pull/1029)
- Use `map` instead of generator by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;996](https://redirect.github.com/pypa/packaging/pull/996)
- Deprecate `._version` (`_Version`, a `NamedTuple`) by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;995](https://redirect.github.com/pypa/packaging/pull/995) and
[#&#8203;1062](https://redirect.github.com/pypa/packaging/pull/1062)
- Avoid duplicate `Version` creation in `canonicalize_version` by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;994](https://redirect.github.com/pypa/packaging/pull/994)
- Add `__slots__` to `Version` by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1001](https://redirect.github.com/pypa/packaging/pull/1001)
- Add `__slots__` to `Specifier`s by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1002](https://redirect.github.com/pypa/packaging/pull/1002)
- Add `__slots__` to `Node`s by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1032](https://redirect.github.com/pypa/packaging/pull/1032)
- Use `version.__replace__` in specifier comparison by
[@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
[#&#8203;999](https://redirect.github.com/pypa/packaging/pull/999)
- Use `_get_spec_version` in more places in `Specifier` by
[@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
[#&#8203;1005](https://redirect.github.com/pypa/packaging/pull/1005)
- Pull `set` construction out of function by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1012](https://redirect.github.com/pypa/packaging/pull/1012)
- Letter normalization dict for prereleases and the like by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1014](https://redirect.github.com/pypa/packaging/pull/1014)
- Avoid normalizing extras again when comparing by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1028](https://redirect.github.com/pypa/packaging/pull/1028)
- Speed up `Version.__str__` by about 10% by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;997](https://redirect.github.com/pypa/packaging/pull/997)
- Increase the performance of `canonicalize_name` by avoiding a regex by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1030](https://redirect.github.com/pypa/packaging/pull/1030),
[#&#8203;1047](https://redirect.github.com/pypa/packaging/pull/1047),
and [#&#8203;1064](https://redirect.github.com/pypa/packaging/pull/1064)
- Faster zero stripping by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1058](https://redirect.github.com/pypa/packaging/pull/1058)

Type annotations:

- Fix a type annotation by
[@&#8203;brettcannon](https://redirect.github.com/brettcannon) in
[#&#8203;907](https://redirect.github.com/pypa/packaging/pull/907)
- Fix tags return type in `parse_wheel_filename` docs by
[@&#8203;ncoghlan](https://redirect.github.com/ncoghlan) in
[#&#8203;973](https://redirect.github.com/pypa/packaging/pull/973)
- Add type hint for `_version` in `.version.Version` by
[@&#8203;brettcannon](https://redirect.github.com/brettcannon) in
[#&#8203;927](https://redirect.github.com/pypa/packaging/pull/927)
- Changed static type annotations in prereleases setter method in
`specifier.py` by
[@&#8203;subhajitsaha01](https://redirect.github.com/subhajitsaha01) in
[#&#8203;930](https://redirect.github.com/pypa/packaging/pull/930)
- Statically type the tests by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;982](https://redirect.github.com/pypa/packaging/pull/982)

Internal:

- Test and declare support Python 3.14 by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;901](https://redirect.github.com/pypa/packaging/pull/901)
- Modernize and speed up tests on Python 3.14 by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;903](https://redirect.github.com/pypa/packaging/pull/903)
- Change our license metadata to use an SPDX license expression by
[@&#8203;cdce8p](https://redirect.github.com/cdce8p) in
[#&#8203;881](https://redirect.github.com/pypa/packaging/pull/881)
- No need for `license-files` by
[@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
in [#&#8203;924](https://redirect.github.com/pypa/packaging/pull/924)
- Update mypy by
[@&#8203;hauntsaninja](https://redirect.github.com/hauntsaninja) in
[#&#8203;891](https://redirect.github.com/pypa/packaging/pull/891)
- Some config updates by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;902](https://redirect.github.com/pypa/packaging/pull/902)
- Add spell check and rst check by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;904](https://redirect.github.com/pypa/packaging/pull/904)
- Clean up ruff ignores by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;905](https://redirect.github.com/pypa/packaging/pull/905)
- Update example for env marker `python_version` by
[@&#8203;trim21](https://redirect.github.com/trim21) in
[#&#8203;908](https://redirect.github.com/pypa/packaging/pull/908)
- Move codespell configuration into pyproject.toml by
[@&#8203;yarikoptic](https://redirect.github.com/yarikoptic) in
[#&#8203;910](https://redirect.github.com/pypa/packaging/pull/910)
- Check warning a little more precisely by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;837](https://redirect.github.com/pypa/packaging/pull/837)
- Speed up mypy a little by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;836](https://redirect.github.com/pypa/packaging/pull/836)
- Apply ruff/flake8-pyi rules (PYI) by
[@&#8203;DimitriPapadopoulos](https://redirect.github.com/DimitriPapadopoulos)
in [#&#8203;835](https://redirect.github.com/pypa/packaging/pull/835)
- Better local runs for codespell by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;911](https://redirect.github.com/pypa/packaging/pull/911)
- Remove outdated/confusing Gist link by
[@&#8203;stefan6419846](https://redirect.github.com/stefan6419846) in
[#&#8203;921](https://redirect.github.com/pypa/packaging/pull/921)
- Fix docs and docs ci after
[#&#8203;897](https://redirect.github.com/pypa/packaging/issues/897)
landed by
[@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
[#&#8203;926](https://redirect.github.com/pypa/packaging/pull/926)
- Run twine-check on push in CI by
[@&#8203;EpicWink](https://redirect.github.com/EpicWink) in
[#&#8203;922](https://redirect.github.com/pypa/packaging/pull/922)
- `ruff` was renamed `ruff-check` in pre-commit by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;933](https://redirect.github.com/pypa/packaging/pull/933)
- Fix incorrectly implicitly concatenated string in specifiers test by
[@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
[#&#8203;946](https://redirect.github.com/pypa/packaging/pull/946)
- Simplify conditional by
[@&#8203;ofek](https://redirect.github.com/ofek) in
[#&#8203;949](https://redirect.github.com/pypa/packaging/pull/949)
- Modernize nox, use dependency-groups for tests by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;952](https://redirect.github.com/pypa/packaging/pull/952)
- Add more checks that don't affect anything by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;957](https://redirect.github.com/pypa/packaging/pull/957)
- Enable Ruff ISC rule by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;959](https://redirect.github.com/pypa/packaging/pull/959)
- Ruff code FLY by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;963](https://redirect.github.com/pypa/packaging/pull/963)
- pytest `log_level` is better than `log_cli_level` by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;956](https://redirect.github.com/pypa/packaging/pull/956)
- Ruff code TRY by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;961](https://redirect.github.com/pypa/packaging/pull/961)
- Add the ruff PL checks by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;964](https://redirect.github.com/pypa/packaging/pull/964)
- Enable Ruff ARG rules by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;958](https://redirect.github.com/pypa/packaging/pull/958)
- Ruff PT code (pytest) by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;960](https://redirect.github.com/pypa/packaging/pull/960)
- Add ruff DTZ by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;968](https://redirect.github.com/pypa/packaging/pull/968)
- Add ruff BLE by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;967](https://redirect.github.com/pypa/packaging/pull/967)
- Add the ruff SIM checks by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;966](https://redirect.github.com/pypa/packaging/pull/966)
- Adding ruff PERF by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;969](https://redirect.github.com/pypa/packaging/pull/969)
- Move some config into coverage config by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;971](https://redirect.github.com/pypa/packaging/pull/971)
- Check ruff C4 by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;962](https://redirect.github.com/pypa/packaging/pull/962)
- Adding ruff T20 by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;972](https://redirect.github.com/pypa/packaging/pull/972)
- Add a tests pass job by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;977](https://redirect.github.com/pypa/packaging/pull/977)
- Add ruff TC by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;980](https://redirect.github.com/pypa/packaging/pull/980)
- Adding part of ruff RET by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;979](https://redirect.github.com/pypa/packaging/pull/979)
- Reorder mypy check by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;983](https://redirect.github.com/pypa/packaging/pull/983)
- Enable ruff ALL by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;984](https://redirect.github.com/pypa/packaging/pull/984)
- Link back to repo/source in furo by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;991](https://redirect.github.com/pypa/packaging/pull/991)
- Add case insensitivity tests for arbitrary equality by
[@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
[#&#8203;975](https://redirect.github.com/pypa/packaging/pull/975)
- Synchronize documentation and code for markers by
[@&#8203;zahlman](https://redirect.github.com/zahlman) in
[#&#8203;1008](https://redirect.github.com/pypa/packaging/pull/1008)
- Use `partition` in `_parse_project_urls` by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1013](https://redirect.github.com/pypa/packaging/pull/1013)
- auto-skip the dependabot PRs in the release changelog generation by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1016](https://redirect.github.com/pypa/packaging/pull/1016)
- Update unreleased section in changelog by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1017](https://redirect.github.com/pypa/packaging/pull/1017)
- Fix PR role to match extlinks by
[@&#8203;hugovk](https://redirect.github.com/hugovk) in
[#&#8203;1020](https://redirect.github.com/pypa/packaging/pull/1020)
- Mention new parts in README by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1023](https://redirect.github.com/pypa/packaging/pull/1023)
- Replace a couple of asserts with else by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1027](https://redirect.github.com/pypa/packaging/pull/1027)
- Simplify and/or check a little more by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1031](https://redirect.github.com/pypa/packaging/pull/1031)
- Use slim runner for all check by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1021](https://redirect.github.com/pypa/packaging/pull/1021)
- Use typos instead of codespell by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1015](https://redirect.github.com/pypa/packaging/pull/1015)
- Update changelog with recent additions by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1034](https://redirect.github.com/pypa/packaging/pull/1034)
- Publish to PyPI via GitHub CI by
[@&#8203;EpicWink](https://redirect.github.com/EpicWink) in
[#&#8203;893](https://redirect.github.com/pypa/packaging/pull/893)
- Use prek for faster pre-commit lint step by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1037](https://redirect.github.com/pypa/packaging/pull/1037)
- Add help text to noxfile by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1038](https://redirect.github.com/pypa/packaging/pull/1038)
- Update licenses to 3.27 by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1036](https://redirect.github.com/pypa/packaging/pull/1036)
- Use relative import in `packaging.licenses` by
[@&#8203;notatallshaw](https://redirect.github.com/notatallshaw) in
[#&#8203;1039](https://redirect.github.com/pypa/packaging/pull/1039)
- Add zizmor and tighten up CI by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1035](https://redirect.github.com/pypa/packaging/pull/1035)
- Fix release script by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1040](https://redirect.github.com/pypa/packaging/pull/1040)
- Fix using a dev version (again) by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1041](https://redirect.github.com/pypa/packaging/pull/1041)
- Fix type hint of function used with `contextlib.contextmanager` by
[@&#8203;SpecLad](https://redirect.github.com/SpecLad) in
[#&#8203;1046](https://redirect.github.com/pypa/packaging/pull/1046)
- Always run tests by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1044](https://redirect.github.com/pypa/packaging/pull/1044)
- Fix a changelog number by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1042](https://redirect.github.com/pypa/packaging/pull/1042)
- Fix the publish job by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1043](https://redirect.github.com/pypa/packaging/pull/1043)
- Get the correct tag on publish by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1045](https://redirect.github.com/pypa/packaging/pull/1045)
- Test on first public release of CPython 3.11 and newer by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1056](https://redirect.github.com/pypa/packaging/pull/1056)
- Fix publication job (again) by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1051](https://redirect.github.com/pypa/packaging/pull/1051)
- Use `actionlint` to check CI workflows by
[@&#8203;miketheman](https://redirect.github.com/miketheman) in
[#&#8203;1052](https://redirect.github.com/pypa/packaging/pull/1052)
- Fix formatting of distribution types in metadata.rst by
[@&#8203;brettcannon](https://redirect.github.com/brettcannon) in
[#&#8203;1053](https://redirect.github.com/pypa/packaging/pull/1053)

#### New Contributors

- [@&#8203;cdce8p](https://redirect.github.com/cdce8p) made their first
contribution in
[#&#8203;881](https://redirect.github.com/pypa/packaging/pull/881)
- [@&#8203;dholth](https://redirect.github.com/dholth) made their first
contribution in
[#&#8203;860](https://redirect.github.com/pypa/packaging/pull/860)
- [@&#8203;trim21](https://redirect.github.com/trim21) made their first
contribution in
[#&#8203;908](https://redirect.github.com/pypa/packaging/pull/908)
- [@&#8203;yarikoptic](https://redirect.github.com/yarikoptic) made
their first contribution in
[#&#8203;910](https://redirect.github.com/pypa/packaging/pull/910)
- [@&#8203;cthoyt](https://redirect.github.com/cthoyt) made their first
contribution in
[#&#8203;868](https://redirect.github.com/pypa/packaging/pull/868)
- [@&#8203;bwoodsend](https://redirect.github.com/bwoodsend) made their
first contribution in
[#&#8203;879](https://redirect.github.com/pypa/packaging/pull/879)
- [@&#8203;stefan6419846](https://redirect.github.com/stefan6419846)
made their first contribution in
[#&#8203;921](https://redirect.github.com/pypa/packaging/pull/921)
- [@&#8203;bearomorphism](https://redirect.github.com/bearomorphism)
made their first contribution in
[#&#8203;913](https://redirect.github.com/pypa/packaging/pull/913)
- [@&#8203;EpicWink](https://redirect.github.com/EpicWink) made their
first contribution in
[#&#8203;922](https://redirect.github.com/pypa/packaging/pull/922)
- [@&#8203;Liam-DeVoe](https://redirect.github.com/Liam-DeVoe) made
their first contribution in
[#&#8203;932](https://redirect.github.com/pypa/packaging/pull/932)
- [@&#8203;subhajitsaha01](https://redirect.github.com/subhajitsaha01)
made their first contribution in
[#&#8203;930](https://redirect.github.com/pypa/packaging/pull/930)
- [@&#8203;ncoghlan](https://redirect.github.com/ncoghlan) made their
first contribution in
[#&#8203;973](https://redirect.github.com/pypa/packaging/pull/973)
- [@&#8203;zahlman](https://redirect.github.com/zahlman) made their
first contribution in
[#&#8203;1008](https://redirect.github.com/pypa/packaging/pull/1008)
- [@&#8203;JP-Ellis](https://redirect.github.com/JP-Ellis) made their
first contribution in
[#&#8203;939](https://redirect.github.com/pypa/packaging/pull/939)

#### Since last RC

Fixes:

- Restore `._version` as a compat shim by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1062](https://redirect.github.com/pypa/packaging/pull/1062)

Performance:

- Dual replace by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1064](https://redirect.github.com/pypa/packaging/pull/1064)

Documentaiton:

- Prepare for 26.0 final by
[@&#8203;henryiii](https://redirect.github.com/henryiii) in
[#&#8203;1063](https://redirect.github.com/pypa/packaging/pull/1063)

**Full Changelog**:
<pypa/packaging@26.0rc3...26.0>

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/python-spanner-sqlalchemy).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My40OC4xIiwidXBkYXRlZEluVmVyIjoiNDMuNDguMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
This PR contains the following updates:

| Package | Change |
[Age](https://docs.renovatebot.com/merge-confidence/) |
[Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
|
[opentelemetry-api](https://redirect.github.com/open-telemetry/opentelemetry-python)
| `==1.38.0` → `==1.40.0` |
![age](https://developer.mend.io/api/mc/badges/age/pypi/opentelemetry-api/1.40.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/opentelemetry-api/1.38.0/1.40.0?slim=true)
|
|
[opentelemetry-sdk](https://redirect.github.com/open-telemetry/opentelemetry-python)
| `==1.38.0` → `==1.40.0` |
![age](https://developer.mend.io/api/mc/badges/age/pypi/opentelemetry-sdk/1.40.0?slim=true)
|
![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/opentelemetry-sdk/1.38.0/1.40.0?slim=true)
|

---

### Release Notes

<details>
<summary>open-telemetry/opentelemetry-python
(opentelemetry-api)</summary>

###
[`v1.40.0`](https://redirect.github.com/open-telemetry/opentelemetry-python/blob/HEAD/CHANGELOG.md#Version-1400061b0-2026-03-04)

[Compare
Source](https://redirect.github.com/open-telemetry/opentelemetry-python/compare/v1.39.1...v1.40.0)

- `opentelemetry-sdk`: deprecate `LoggingHandler` in favor of
`opentelemetry-instrumentation-logging`, see
`opentelemetry-instrumentation-logging` documentation

([#&#8203;4919](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4919))
- `opentelemetry-sdk`: Clarify log processor error handling expectations
in documentation

([#&#8203;4915](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4915))
- bump semantic-conventions to v1.40.0

([#&#8203;4941](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4941))
- Add stale PR GitHub Action

([#&#8203;4926](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4926))
- `opentelemetry-sdk`: Drop unused Jaeger exporter environment variables
(exporter removed in 1.22.0)

([#&#8203;4918](https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4918))
- `opentelemetry-sdk`: Clarify timeout units in environment variable
documentation

([#&#8203;4906](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4906))
- `opentelemetry-exporter-otlp-proto-grpc`: Fix re-initialization of
gRPC channel on UNAVAILABLE error

([#&#8203;4825](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4825))
- `opentelemetry-exporter-prometheus`: Fix duplicate HELP/TYPE
declarations for metrics with different label sets

([#&#8203;4868](https://redirect.github.com/open-telemetry/opentelemetry-python/issues/4868))
- Allow loading all resource detectors by setting
`OTEL_EXPERIMENTAL_RESOURCE_DETECTORS` to `*`

([#&#8203;4819](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4819))
- `opentelemetry-sdk`: Fix the type hint of the `_metrics_data` property
to allow `None`

([#&#8203;4837](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4837)).
- Regenerate opentelemetry-proto code with v1.9.0 release

([#&#8203;4840](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4840))
- Add python 3.14 support

([#&#8203;4798](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4798))
- Silence events API warnings for internal users

([#&#8203;4847](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4847))
- opentelemetry-sdk: make it possible to override the default processors
in the SDK configurator

([#&#8203;4806](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4806))
- Prevent possible endless recursion from happening in
`SimpleLogRecordProcessor.on_emit`,

([#&#8203;4799](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4799))
and
([#&#8203;4867](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4867)).
- Implement span start/end metrics

([#&#8203;4880](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4880))
- Add environment variable carriers to API

([#&#8203;4609](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4609))
- Add experimental composable rule based sampler

([#&#8203;4882](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4882))
- Make ConcurrentMultiSpanProcessor fork safe

([#&#8203;4862](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4862))
- `opentelemetry-exporter-otlp-proto-http`: fix retry logic and error
handling for connection failures in trace, metric, and log exporters

([#&#8203;4709](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4709))
- `opentelemetry-sdk`: avoid RuntimeError during iteration of view
instrument match dictionary in MetricReaderStorage.collect()

([#&#8203;4891](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4891))
- Implement experimental TracerConfigurator

([#&#8203;4861](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4861))
- `opentelemetry-sdk`: Fix instrument creation race condition

([#&#8203;4913](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4913))
- bump semantic-conventions to v1.39.0

([#&#8203;4914](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4914))
- `opentelemetry-sdk`: automatically generate configuration models using
OTel config JSON schema

([#&#8203;4879](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4879))

###
[`v1.39.1`](https://redirect.github.com/open-telemetry/opentelemetry-python/releases/tag/v1.39.1):
Version 1.39.1/0.60b1

[Compare
Source](https://redirect.github.com/open-telemetry/opentelemetry-python/compare/v1.39.0...v1.39.1)

This is a patch release on the previous 1.39.0/0.60b0 release, fixing
the issue(s) below.

- Silence events API warnings for internal users
([#&#8203;4847](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4847))

###
[`v1.39.0`](https://redirect.github.com/open-telemetry/opentelemetry-python/blob/HEAD/CHANGELOG.md#Version-1390060b0-2025-12-03)

[Compare
Source](https://redirect.github.com/open-telemetry/opentelemetry-python/compare/v1.38.0...v1.39.0)

- `opentelemetry-api`: Convert objects of any type other than AnyValue
in attributes to string to be exportable

([#&#8203;4808](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4808))
- docs: Added sqlcommenter example

([#&#8203;4734](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4734))
- build: bump ruff to 0.14.1

([#&#8203;4782](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4782))
- Add `opentelemetry-exporter-credential-provider-gcp` as an optional
dependency to `opentelemetry-exporter-otlp-proto-grpc`
  and `opentelemetry-exporter-otlp-proto-http`

([#&#8203;4760](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4760))
- feat: implement on ending in span processor

([#&#8203;4775](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4775))
- semantic-conventions: Bump to 1.38.0

([#&#8203;4791](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4791))
- \[BREAKING] Remove LogData and extend SDK LogRecord to have
instrumentation scope

([#&#8203;4676](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4676))
- \[BREAKING] Rename several classes from Log to LogRecord

([#&#8203;4647](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4647))

  **Migration Guide:**

  `LogData` has been removed. Users should update their code as follows:

- **For Log Exporters:** Change from `Sequence[LogData]` to
`Sequence[ReadableLogRecord]`
    ```python
    # Before
    from opentelemetry.sdk._logs import LogData
    def export(self, batch: Sequence[LogData]) -> LogRecordExportResult:
        ...

    # After
    from opentelemetry.sdk._logs import ReadableLogRecord
def export(self, batch: Sequence[ReadableLogRecord]) ->
LogRecordExportResult:
        ...
    ```

- **For Log Processors:** Use `ReadWriteLogRecord` for processing,
`ReadableLogRecord` for exporting
    ```python
    # Before
    from opentelemetry.sdk._logs import LogData
    def on_emit(self, log_data: LogData):
        ...

    # After
from opentelemetry.sdk._logs import ReadWriteLogRecord,
ReadableLogRecord
    def on_emit(self, log_record: ReadWriteLogRecord):
        # Convert to ReadableLogRecord before exporting
        readable = ReadableLogRecord(
            log_record=log_record.log_record,
            resource=log_record.resource or Resource.create({}),
            instrumentation_scope=log_record.instrumentation_scope,
            limits=log_record.limits,
        )
        ...
    ```

- **Accessing log data:** Use the same attributes on
`ReadableLogRecord`/`ReadWriteLogRecord`
- `log_record.log_record` - The API LogRecord (contains body, severity,
attributes, etc.)
    - `log_record.resource` - The Resource
- `log_record.instrumentation_scope` - The InstrumentationScope (now
included, was in LogData before)
    - `log_record.limits` - The LogRecordLimits
- Mark the Events API/SDK as deprecated. The Logs API/SDK should be used
instead, an event is now a `LogRecord` with the `event_name` field set

([#&#8203;4654](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4654)).
- Fix type checking for built-in metric exporters

([#&#8203;4820](https://redirect.github.com/open-telemetry/opentelemetry-python/pull/4820))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/googleapis/python-spanner-sqlalchemy).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My40OC4xIiwidXBkYXRlZEluVmVyIjoiNDMuNDguMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

---------

Co-authored-by: Knut Olav Løite <koloite@gmail.com>
…hemy/main' into migration.python-spanner-sqlalchemy.migration.2026-03-09_19-05-52.migrate
@gemini-code-assist
Copy link
Contributor

Warning

Gemini is experiencing higher than usual traffic and was unable to create the summary. Please try again in a few hours by commenting /gemini summary.

This prevents the sqlalchemy pytest plugin from automatically provisioning a test database connection during unit testing, which was failing due to missing credentials.
This fixes a NoSectionError during pytest's initialization, which occurred after create_test_config.py was removed from the unit test session.
These missing sessions were causing CI pipeline failures. Restored them utilizing the standard monorepo document generation templates.
@chalmerlowe chalmerlowe added the kokoro:force-run Add this label to force Kokoro to re-run the tests. label Mar 12, 2026
@yoshi-kokoro yoshi-kokoro removed the kokoro:force-run Add this label to force Kokoro to re-run the tests. label Mar 12, 2026
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.

9 participants