Skip to content

Commit a9b0d86

Browse files
Merge branch 'master' into webb/check-null-openai
2 parents 4e41f61 + 720440e commit a9b0d86

File tree

7 files changed

+77
-56
lines changed

7 files changed

+77
-56
lines changed

scripts/populate_tox/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@
103103
"Werkzeug<2.1.0",
104104
],
105105
"<3.1": ["pytest-django<4.0"],
106+
"py3.14,py3.14t": ["coverage==7.11.0"],
106107
},
107108
},
108109
"dramatiq": {

scripts/populate_tox/package_dependencies.jsonl

Lines changed: 10 additions & 7 deletions
Large diffs are not rendered by default.

scripts/populate_tox/releases.jsonl

Lines changed: 15 additions & 15 deletions
Large diffs are not rendered by default.

sentry_sdk/utils.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1760,6 +1760,12 @@ def _normalize_module_name(name):
17601760
return name.lower()
17611761

17621762

1763+
def _replace_hyphens_dots_and_underscores_with_dashes(name):
1764+
# type: (str) -> str
1765+
# https://peps.python.org/pep-0503/#normalized-names
1766+
return re.sub(r"[-_.]+", "-", name)
1767+
1768+
17631769
def _get_installed_modules():
17641770
# type: () -> Dict[str, str]
17651771
global _installed_modules
@@ -1770,8 +1776,15 @@ def _get_installed_modules():
17701776

17711777
def package_version(package):
17721778
# type: (str) -> Optional[Tuple[int, ...]]
1773-
installed_packages = _get_installed_modules()
1774-
version = installed_packages.get(package)
1779+
normalized_package = _normalize_module_name(
1780+
_replace_hyphens_dots_and_underscores_with_dashes(package)
1781+
)
1782+
1783+
installed_packages = {
1784+
_replace_hyphens_dots_and_underscores_with_dashes(module): v
1785+
for module, v in _get_installed_modules().items()
1786+
}
1787+
version = installed_packages.get(normalized_package)
17751788
if version is None:
17761789
return None
17771790

tests/profiler/test_transaction_profiler.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ def test_minimum_unique_samples_required(
266266

267267

268268
@pytest.mark.forked
269+
@pytest.mark.skipif(sys.version_info >= (3, 14), reason="Test flakes blocking release.")
269270
def test_profile_captured(
270271
sentry_init,
271272
capture_envelopes,

tests/tracing/test_decorator.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import inspect
2+
import sys
23
from unittest import mock
34

45
import pytest
@@ -69,6 +70,7 @@ async def test_trace_decorator_async():
6970

7071

7172
@pytest.mark.asyncio
73+
@pytest.mark.skipif(sys.version_info >= (3, 14), reason="Test flakes blocking release.")
7274
async def test_trace_decorator_async_no_trx():
7375
with patch_start_tracing_child(fake_transaction_is_none=True):
7476
with mock.patch.object(logger, "debug", mock.Mock()) as fake_debug:

tox.ini

Lines changed: 33 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -61,21 +61,21 @@ envlist =
6161
{py3.9,py3.11,py3.12}-cohere-v5.20.0
6262

6363
{py3.9,py3.12,py3.13}-google_genai-v1.29.0
64-
{py3.9,py3.12,py3.13}-google_genai-v1.35.0
65-
{py3.9,py3.12,py3.13}-google_genai-v1.41.0
66-
{py3.10,py3.13,py3.14,py3.14t}-google_genai-v1.48.0
64+
{py3.9,py3.12,py3.13}-google_genai-v1.36.0
65+
{py3.9,py3.12,py3.13}-google_genai-v1.43.0
66+
{py3.10,py3.13,py3.14,py3.14t}-google_genai-v1.49.0
6767

6868
{py3.8,py3.10,py3.11}-huggingface_hub-v0.24.7
6969
{py3.8,py3.12,py3.13}-huggingface_hub-v0.36.0
70-
{py3.9,py3.12,py3.13}-huggingface_hub-v1.0.1
70+
{py3.9,py3.13,py3.14,py3.14t}-huggingface_hub-v1.1.2
7171

7272
{py3.9,py3.11,py3.12}-langchain-base-v0.1.20
7373
{py3.9,py3.12,py3.13}-langchain-base-v0.3.27
74-
{py3.10,py3.13,py3.14}-langchain-base-v1.0.3
74+
{py3.10,py3.13,py3.14}-langchain-base-v1.0.4
7575

7676
{py3.9,py3.11,py3.12}-langchain-notiktoken-v0.1.20
7777
{py3.9,py3.12,py3.13}-langchain-notiktoken-v0.3.27
78-
{py3.10,py3.13,py3.14}-langchain-notiktoken-v1.0.3
78+
{py3.10,py3.13,py3.14}-langchain-notiktoken-v1.0.4
7979

8080
{py3.9,py3.13,py3.14}-langgraph-v0.6.11
8181
{py3.10,py3.12,py3.13}-langgraph-v1.0.2
@@ -87,7 +87,7 @@ envlist =
8787
{py3.10,py3.12,py3.13}-mcp-v1.15.0
8888
{py3.10,py3.12,py3.13}-mcp-v1.17.0
8989
{py3.10,py3.12,py3.13}-mcp-v1.19.0
90-
{py3.10,py3.12,py3.13}-mcp-v1.20.0
90+
{py3.10,py3.12,py3.13}-mcp-v1.21.0
9191

9292
{py3.8,py3.11,py3.12}-openai-base-v1.0.1
9393
{py3.8,py3.12,py3.13}-openai-base-v1.109.1
@@ -98,9 +98,9 @@ envlist =
9898
{py3.9,py3.12,py3.13}-openai-notiktoken-v2.7.1
9999

100100
{py3.10,py3.11,py3.12}-openai_agents-v0.0.19
101-
{py3.10,py3.12,py3.13}-openai_agents-v0.1.0
102101
{py3.10,py3.12,py3.13}-openai_agents-v0.2.11
103102
{py3.10,py3.12,py3.13}-openai_agents-v0.4.2
103+
{py3.10,py3.13,py3.14,py3.14t}-openai_agents-v0.5.0
104104

105105
{py3.10,py3.12,py3.13}-pydantic_ai-v1.0.18
106106
{py3.10,py3.12,py3.13}-pydantic_ai-v1.3.0
@@ -112,7 +112,7 @@ envlist =
112112
{py3.6,py3.7}-boto3-v1.12.49
113113
{py3.6,py3.9,py3.10}-boto3-v1.20.54
114114
{py3.7,py3.11,py3.12}-boto3-v1.28.85
115-
{py3.9,py3.13,py3.14,py3.14t}-boto3-v1.40.65
115+
{py3.9,py3.13,py3.14,py3.14t}-boto3-v1.40.68
116116

117117
{py3.6,py3.7,py3.8}-chalice-v1.16.0
118118
{py3.9,py3.12,py3.13}-chalice-v1.32.0
@@ -171,7 +171,7 @@ envlist =
171171
{py3.8,py3.12,py3.13}-graphene-v3.4.3
172172

173173
{py3.8,py3.10,py3.11}-strawberry-v0.209.8
174-
{py3.10,py3.13,py3.14,py3.14t}-strawberry-v0.284.1
174+
{py3.10,py3.13,py3.14,py3.14t}-strawberry-v0.284.2
175175

176176

177177
# ~~~ Network ~~~
@@ -223,8 +223,8 @@ envlist =
223223
{py3.6,py3.7}-django-v1.11.29
224224
{py3.6,py3.8,py3.9}-django-v2.2.28
225225
{py3.6,py3.9,py3.10}-django-v3.2.25
226-
{py3.8,py3.11,py3.12}-django-v4.2.25
227-
{py3.10,py3.12,py3.13}-django-v5.2.7
226+
{py3.8,py3.11,py3.12}-django-v4.2.26
227+
{py3.10,py3.13,py3.14,py3.14t}-django-v5.2.8
228228
{py3.12,py3.13,py3.14,py3.14t}-django-v6.0b1
229229

230230
{py3.6,py3.7,py3.8}-flask-v1.1.4
@@ -371,35 +371,35 @@ deps =
371371
cohere-v5.20.0: cohere==5.20.0
372372

373373
google_genai-v1.29.0: google-genai==1.29.0
374-
google_genai-v1.35.0: google-genai==1.35.0
375-
google_genai-v1.41.0: google-genai==1.41.0
376-
google_genai-v1.48.0: google-genai==1.48.0
374+
google_genai-v1.36.0: google-genai==1.36.0
375+
google_genai-v1.43.0: google-genai==1.43.0
376+
google_genai-v1.49.0: google-genai==1.49.0
377377
google_genai: pytest-asyncio
378378

379379
huggingface_hub-v0.24.7: huggingface_hub==0.24.7
380380
huggingface_hub-v0.36.0: huggingface_hub==0.36.0
381-
huggingface_hub-v1.0.1: huggingface_hub==1.0.1
381+
huggingface_hub-v1.1.2: huggingface_hub==1.1.2
382382
huggingface_hub: responses
383383
huggingface_hub: pytest-httpx
384384

385385
langchain-base-v0.1.20: langchain==0.1.20
386386
langchain-base-v0.3.27: langchain==0.3.27
387-
langchain-base-v1.0.3: langchain==1.0.3
387+
langchain-base-v1.0.4: langchain==1.0.4
388388
langchain-base: openai
389389
langchain-base: tiktoken
390390
langchain-base: langchain-openai
391391
langchain-base-v0.3.27: langchain-community
392-
langchain-base-v1.0.3: langchain-community
393-
langchain-base-v1.0.3: langchain-classic
392+
langchain-base-v1.0.4: langchain-community
393+
langchain-base-v1.0.4: langchain-classic
394394

395395
langchain-notiktoken-v0.1.20: langchain==0.1.20
396396
langchain-notiktoken-v0.3.27: langchain==0.3.27
397-
langchain-notiktoken-v1.0.3: langchain==1.0.3
397+
langchain-notiktoken-v1.0.4: langchain==1.0.4
398398
langchain-notiktoken: openai
399399
langchain-notiktoken: langchain-openai
400400
langchain-notiktoken-v0.3.27: langchain-community
401-
langchain-notiktoken-v1.0.3: langchain-community
402-
langchain-notiktoken-v1.0.3: langchain-classic
401+
langchain-notiktoken-v1.0.4: langchain-community
402+
langchain-notiktoken-v1.0.4: langchain-classic
403403

404404
langgraph-v0.6.11: langgraph==0.6.11
405405
langgraph-v1.0.2: langgraph==1.0.2
@@ -411,7 +411,7 @@ deps =
411411
mcp-v1.15.0: mcp==1.15.0
412412
mcp-v1.17.0: mcp==1.17.0
413413
mcp-v1.19.0: mcp==1.19.0
414-
mcp-v1.20.0: mcp==1.20.0
414+
mcp-v1.21.0: mcp==1.21.0
415415
mcp: pytest-asyncio
416416

417417
openai-base-v1.0.1: openai==1.0.1
@@ -428,9 +428,9 @@ deps =
428428
openai-notiktoken-v1.0.1: httpx<0.28
429429

430430
openai_agents-v0.0.19: openai-agents==0.0.19
431-
openai_agents-v0.1.0: openai-agents==0.1.0
432431
openai_agents-v0.2.11: openai-agents==0.2.11
433432
openai_agents-v0.4.2: openai-agents==0.4.2
433+
openai_agents-v0.5.0: openai-agents==0.5.0
434434
openai_agents: pytest-asyncio
435435

436436
pydantic_ai-v1.0.18: pydantic-ai==1.0.18
@@ -444,7 +444,7 @@ deps =
444444
boto3-v1.12.49: boto3==1.12.49
445445
boto3-v1.20.54: boto3==1.20.54
446446
boto3-v1.28.85: boto3==1.28.85
447-
boto3-v1.40.65: boto3==1.40.65
447+
boto3-v1.40.68: boto3==1.40.68
448448
{py3.7,py3.8}-boto3: urllib3<2.0.0
449449

450450
chalice-v1.16.0: chalice==1.16.0
@@ -521,7 +521,7 @@ deps =
521521
{py3.6}-graphene: aiocontextvars
522522

523523
strawberry-v0.209.8: strawberry-graphql[fastapi,flask]==0.209.8
524-
strawberry-v0.284.1: strawberry-graphql[fastapi,flask]==0.284.1
524+
strawberry-v0.284.2: strawberry-graphql[fastapi,flask]==0.284.2
525525
strawberry: httpx
526526
strawberry-v0.209.8: pydantic<2.11
527527

@@ -597,22 +597,22 @@ deps =
597597
django-v1.11.29: django==1.11.29
598598
django-v2.2.28: django==2.2.28
599599
django-v3.2.25: django==3.2.25
600-
django-v4.2.25: django==4.2.25
601-
django-v5.2.7: django==5.2.7
600+
django-v4.2.26: django==4.2.26
601+
django-v5.2.8: django==5.2.8
602602
django-v6.0b1: django==6.0b1
603603
django: psycopg2-binary
604604
django: djangorestframework
605605
django: pytest-django
606606
django: Werkzeug
607607
django-v2.2.28: channels[daphne]
608608
django-v3.2.25: channels[daphne]
609-
django-v4.2.25: channels[daphne]
610-
django-v5.2.7: channels[daphne]
609+
django-v4.2.26: channels[daphne]
610+
django-v5.2.8: channels[daphne]
611611
django-v6.0b1: channels[daphne]
612612
django-v2.2.28: six
613613
django-v3.2.25: pytest-asyncio
614-
django-v4.2.25: pytest-asyncio
615-
django-v5.2.7: pytest-asyncio
614+
django-v4.2.26: pytest-asyncio
615+
django-v5.2.8: pytest-asyncio
616616
django-v6.0b1: pytest-asyncio
617617
django-v1.11.29: djangorestframework>=3.0,<4.0
618618
django-v1.11.29: Werkzeug<2.1.0
@@ -622,6 +622,7 @@ deps =
622622
django-v3.2.25: Werkzeug<2.1.0
623623
django-v1.11.29: pytest-django<4.0
624624
django-v2.2.28: pytest-django<4.0
625+
{py3.14,py3.14t}-django: coverage==7.11.0
625626

626627
flask-v1.1.4: flask==1.1.4
627628
flask-v2.3.3: flask==2.3.3

0 commit comments

Comments
 (0)