From e793014ef813b37145b2de0f6afc27de929dfaac Mon Sep 17 00:00:00 2001 From: Alex Hall Date: Thu, 5 Dec 2024 11:16:02 +0200 Subject: [PATCH] Remove pytest pin and update deps (#643) --- logfire/_internal/formatter.py | 11 +-- pyproject.toml | 2 +- tests/test_logfire.py | 160 ++++++++++++++------------------- uv.lock | 70 +++++++-------- 4 files changed, 109 insertions(+), 134 deletions(-) diff --git a/logfire/_internal/formatter.py b/logfire/_internal/formatter.py index 7fd3adc3d..4c14293d3 100644 --- a/logfire/_internal/formatter.py +++ b/logfire/_internal/formatter.py @@ -93,15 +93,12 @@ def _fstring_chunks( return None msg = '`executing` failed to find a node.' - if sys.version_info[:2] < (3, 11): - # inspect_arguments is only on be default for 3.11+ for this reason. - # The AST modifications made by auto-tracing and @instrument + if sys.version_info[:2] < (3, 11): # pragma: no cover + # inspect_arguments is only on by default for 3.11+ for this reason. + # The AST modifications made by auto-tracing # mean that the bytecode doesn't match the source code seen by `executing`. # In 3.11+, a different algorithm is used by `executing` which can deal with this. - msg += ( - ' This may be caused by a combination of using Python < 3.11 ' - 'and auto-tracing or @logfire.instrument.' - ) + msg += ' This may be caused by a combination of using Python < 3.11 and auto-tracing.' # Try a simple fallback heuristic to find the node which should work in most cases. main_nodes: list[ast.AST] = [] diff --git a/pyproject.toml b/pyproject.toml index 2ff0e44a0..7e89aff5e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -96,7 +96,7 @@ dev = [ "Flask >= 3.0.3", "django >= 4.2.16", "dirty-equals >= 0.8.0", - "pytest == 8.3.3", + "pytest >= 8.3.4", "pytest-django", "pytest-pretty", "pydantic @ git+https://github.com/pydantic/pydantic", diff --git a/tests/test_logfire.py b/tests/test_logfire.py index 5220b8393..d542e1483 100644 --- a/tests/test_logfire.py +++ b/tests/test_logfire.py @@ -2470,51 +2470,44 @@ def test_span_add_link_before_start(exporter: TestExporter): GLOBAL_VAR = 1 -@pytest.mark.skipif( - sys.version_info < (3, 11), reason='f-string magic clashes with @logfire.instrument() in Python < 3.11' -) +@pytest.mark.skipif(sys.version_info < (3, 9), reason='f-string magic is disabled in Python 3.8') def test_inspect_arguments(exporter: TestExporter): local_var = 2 x = 1.2345 - # Test that `executing` still works in instrumented functions for Python 3.11+. - @logfire.instrument() - def foo(): - # Test some cases that require `executing` (i.e. the simple fallback heuristics can't handle) - # particularly two `span` calls in one line. - with logfire.span(f'span {GLOBAL_VAR} {local_var}'), logfire.span(f'span2 {local_var}'): - str(logfire.info(f'log {GLOBAL_VAR} {local_var}')) - - # Test that an attribute overrides a local variable - logfire.info(f'log2 {local_var}', local_var=3, x=x) + # Test some cases that require `executing` (i.e. the simple fallback heuristics can't handle) + # particularly two `span` calls in one line. + with logfire.span(f'span {GLOBAL_VAR} {local_var}'), logfire.span(f'span2 {local_var}'): + str(logfire.info(f'log {GLOBAL_VAR} {local_var}')) - # Test the .log method which has the argument in a different place from the other methods. - logfire.log('error', f'log3 {GLOBAL_VAR}') - logfire.log(level='error', msg_template=f'log4 {GLOBAL_VAR}') + # Test that an attribute overrides a local variable + logfire.info(f'log2 {local_var}', local_var=3, x=x) - # Test putting exotic things inside braces. - # Note that the span name / message template differ slightly from the f-string in these cases. - logfire.info(f'log5 {local_var = }') - logfire.info(f'log6 {x:.{local_var}f}') - logfire.info(f'log7 {str(local_var)!r}') + # Test the .log method which has the argument in a different place from the other methods. + logfire.log('error', f'log3 {GLOBAL_VAR}') + logfire.log(level='error', msg_template=f'log4 {GLOBAL_VAR}') - foo() + # Test putting exotic things inside braces. + # Note that the span name / message template differ slightly from the f-string in these cases. + logfire.info(f'log5 {local_var = }') + logfire.info(f'log6 {x:.{local_var}f}') + logfire.info(f'log7 {str(local_var)!r}') assert exporter.exported_spans_as_dict() == snapshot( [ { 'name': 'log {GLOBAL_VAR} {local_var}', - 'context': {'trace_id': 1, 'span_id': 7, 'is_remote': False}, - 'parent': {'trace_id': 1, 'span_id': 5, 'is_remote': False}, - 'start_time': 4000000000, - 'end_time': 4000000000, + 'context': {'trace_id': 1, 'span_id': 5, 'is_remote': False}, + 'parent': {'trace_id': 1, 'span_id': 3, 'is_remote': False}, + 'start_time': 3000000000, + 'end_time': 3000000000, 'attributes': { 'logfire.span_type': 'log', 'logfire.level_num': 9, 'logfire.msg_template': 'log {GLOBAL_VAR} {local_var}', 'logfire.msg': f'log {GLOBAL_VAR} {local_var}', 'code.filepath': 'test_logfire.py', - 'code.function': 'foo', + 'code.function': 'test_inspect_arguments', 'code.lineno': 123, 'GLOBAL_VAR': 1, 'local_var': 2, @@ -2523,13 +2516,13 @@ def foo(): }, { 'name': 'span2 {local_var}', - 'context': {'trace_id': 1, 'span_id': 5, 'is_remote': False}, - 'parent': {'trace_id': 1, 'span_id': 3, 'is_remote': False}, - 'start_time': 3000000000, - 'end_time': 5000000000, + 'context': {'trace_id': 1, 'span_id': 3, 'is_remote': False}, + 'parent': {'trace_id': 1, 'span_id': 1, 'is_remote': False}, + 'start_time': 2000000000, + 'end_time': 4000000000, 'attributes': { 'code.filepath': 'test_logfire.py', - 'code.function': 'foo', + 'code.function': 'test_inspect_arguments', 'code.lineno': 123, 'local_var': 2, 'logfire.msg_template': 'span2 {local_var}', @@ -2540,54 +2533,54 @@ def foo(): }, { 'name': 'span {GLOBAL_VAR} {local_var}', - 'context': {'trace_id': 1, 'span_id': 3, 'is_remote': False}, - 'parent': {'trace_id': 1, 'span_id': 1, 'is_remote': False}, - 'start_time': 2000000000, - 'end_time': 6000000000, + 'context': {'trace_id': 1, 'span_id': 1, 'is_remote': False}, + 'parent': None, + 'start_time': 1000000000, + 'end_time': 5000000000, 'attributes': { - 'logfire.span_type': 'span', - 'logfire.msg_template': 'span {GLOBAL_VAR} {local_var}', - 'GLOBAL_VAR': 1, - 'logfire.msg': f'span {GLOBAL_VAR} {local_var}', 'code.filepath': 'test_logfire.py', - 'code.function': 'foo', + 'code.function': 'test_inspect_arguments', 'code.lineno': 123, + 'GLOBAL_VAR': 1, 'local_var': 2, + 'logfire.msg_template': 'span {GLOBAL_VAR} {local_var}', + 'logfire.msg': f'span {GLOBAL_VAR} {local_var}', 'logfire.json_schema': '{"type":"object","properties":{"GLOBAL_VAR":{},"local_var":{}}}', + 'logfire.span_type': 'span', }, }, { 'name': 'log2 {local_var}', - 'context': {'trace_id': 1, 'span_id': 8, 'is_remote': False}, - 'parent': {'trace_id': 1, 'span_id': 1, 'is_remote': False}, - 'start_time': 7000000000, - 'end_time': 7000000000, + 'context': {'trace_id': 2, 'span_id': 6, 'is_remote': False}, + 'parent': None, + 'start_time': 6000000000, + 'end_time': 6000000000, 'attributes': { - 'code.filepath': 'test_logfire.py', + 'logfire.span_type': 'log', 'logfire.level_num': 9, - 'code.function': 'foo', - 'code.lineno': 123, - 'local_var': 3, 'logfire.msg_template': 'log2 {local_var}', 'logfire.msg': 'log2 3', - 'logfire.json_schema': '{"type":"object","properties":{"local_var":{},"x":{}}}', + 'code.filepath': 'test_logfire.py', + 'code.function': 'test_inspect_arguments', + 'code.lineno': 123, + 'local_var': 3, 'x': 1.2345, - 'logfire.span_type': 'log', + 'logfire.json_schema': '{"type":"object","properties":{"local_var":{},"x":{}}}', }, }, { 'name': 'log3 {GLOBAL_VAR}', - 'context': {'trace_id': 1, 'span_id': 9, 'is_remote': False}, - 'parent': {'trace_id': 1, 'span_id': 1, 'is_remote': False}, - 'start_time': 8000000000, - 'end_time': 8000000000, + 'context': {'trace_id': 3, 'span_id': 7, 'is_remote': False}, + 'parent': None, + 'start_time': 7000000000, + 'end_time': 7000000000, 'attributes': { 'logfire.span_type': 'log', 'logfire.level_num': 17, 'logfire.msg_template': 'log3 {GLOBAL_VAR}', 'logfire.msg': f'log3 {GLOBAL_VAR}', 'code.filepath': 'test_logfire.py', - 'code.function': 'foo', + 'code.function': 'test_inspect_arguments', 'code.lineno': 123, 'GLOBAL_VAR': 1, 'logfire.json_schema': '{"type":"object","properties":{"GLOBAL_VAR":{}}}', @@ -2595,17 +2588,17 @@ def foo(): }, { 'name': 'log4 {GLOBAL_VAR}', - 'context': {'trace_id': 1, 'span_id': 10, 'is_remote': False}, - 'parent': {'trace_id': 1, 'span_id': 1, 'is_remote': False}, - 'start_time': 9000000000, - 'end_time': 9000000000, + 'context': {'trace_id': 4, 'span_id': 8, 'is_remote': False}, + 'parent': None, + 'start_time': 8000000000, + 'end_time': 8000000000, 'attributes': { 'logfire.span_type': 'log', 'logfire.level_num': 17, 'logfire.msg_template': 'log4 {GLOBAL_VAR}', 'logfire.msg': f'log4 {GLOBAL_VAR}', 'code.filepath': 'test_logfire.py', - 'code.function': 'foo', + 'code.function': 'test_inspect_arguments', 'code.lineno': 123, 'GLOBAL_VAR': 1, 'logfire.json_schema': '{"type":"object","properties":{"GLOBAL_VAR":{}}}', @@ -2613,17 +2606,17 @@ def foo(): }, { 'name': 'log5 local_var = {local_var}', - 'context': {'trace_id': 1, 'span_id': 11, 'is_remote': False}, - 'parent': {'trace_id': 1, 'span_id': 1, 'is_remote': False}, - 'start_time': 10000000000, - 'end_time': 10000000000, + 'context': {'trace_id': 5, 'span_id': 9, 'is_remote': False}, + 'parent': None, + 'start_time': 9000000000, + 'end_time': 9000000000, 'attributes': { 'logfire.span_type': 'log', 'logfire.level_num': 9, 'logfire.msg_template': 'log5 local_var = {local_var}', 'logfire.msg': f'log5 {local_var = }', 'code.filepath': 'test_logfire.py', - 'code.function': 'foo', + 'code.function': 'test_inspect_arguments', 'code.lineno': 123, 'local_var': 2, 'logfire.json_schema': '{"type":"object","properties":{"local_var":{}}}', @@ -2631,17 +2624,17 @@ def foo(): }, { 'name': 'log6 {x}', - 'context': {'trace_id': 1, 'span_id': 12, 'is_remote': False}, - 'parent': {'trace_id': 1, 'span_id': 1, 'is_remote': False}, - 'start_time': 11000000000, - 'end_time': 11000000000, + 'context': {'trace_id': 6, 'span_id': 10, 'is_remote': False}, + 'parent': None, + 'start_time': 10000000000, + 'end_time': 10000000000, 'attributes': { 'logfire.span_type': 'log', 'logfire.level_num': 9, 'logfire.msg_template': 'log6 {x}', 'logfire.msg': f'log6 {x:.{local_var}f}', 'code.filepath': 'test_logfire.py', - 'code.function': 'foo', + 'code.function': 'test_inspect_arguments', 'code.lineno': 123, 'x': 1.2345, 'logfire.json_schema': '{"type":"object","properties":{"x":{}}}', @@ -2649,37 +2642,22 @@ def foo(): }, { 'name': 'log7 {str(local_var)}', - 'context': {'trace_id': 1, 'span_id': 13, 'is_remote': False}, - 'parent': {'trace_id': 1, 'span_id': 1, 'is_remote': False}, - 'start_time': 12000000000, - 'end_time': 12000000000, + 'context': {'trace_id': 7, 'span_id': 11, 'is_remote': False}, + 'parent': None, + 'start_time': 11000000000, + 'end_time': 11000000000, 'attributes': { 'logfire.span_type': 'log', 'logfire.level_num': 9, 'logfire.msg_template': 'log7 {str(local_var)}', 'logfire.msg': f'log7 {str(local_var)!r}', 'code.filepath': 'test_logfire.py', - 'code.function': 'foo', + 'code.function': 'test_inspect_arguments', 'code.lineno': 123, 'str(local_var)': '2', 'logfire.json_schema': '{"type":"object","properties":{"str(local_var)":{}}}', }, }, - { - 'name': 'Calling tests.test_logfire.test_inspect_arguments..foo', - 'context': {'trace_id': 1, 'span_id': 1, 'is_remote': False}, - 'parent': None, - 'start_time': 1000000000, - 'end_time': 13000000000, - 'attributes': { - 'code.filepath': 'test_logfire.py', - 'code.lineno': 123, - 'code.function': 'foo', - 'logfire.msg_template': 'Calling tests.test_logfire.test_inspect_arguments..foo', - 'logfire.msg': 'Calling tests.test_logfire.test_inspect_arguments..foo', - 'logfire.span_type': 'span', - }, - }, ] ) diff --git a/uv.lock b/uv.lock index 97a2c1536..854fa1b05 100644 --- a/uv.lock +++ b/uv.lock @@ -862,7 +862,7 @@ wheels = [ [[package]] name = "django" -version = "4.2.16" +version = "4.2.17" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "asgiref" }, @@ -870,9 +870,9 @@ dependencies = [ { name = "sqlparse" }, { name = "tzdata", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/65/d8/a607ee443b54a4db4ad28902328b906ae6218aa556fb9b3ac45c0bcb313d/Django-4.2.16.tar.gz", hash = "sha256:6f1616c2786c408ce86ab7e10f792b8f15742f7b7b7460243929cb371e7f1dad", size = 10436023 } +sdist = { url = "https://files.pythonhosted.org/packages/63/58/709978ddf7e9393c0a89b57a5edbd764ee76eeea68697af3f77f3820980b/Django-4.2.17.tar.gz", hash = "sha256:6b56d834cc94c8b21a8f4e775064896be3b4a4ca387f2612d4406a5927cd2fdc", size = 10437674 } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/2c/6b6c7e493d5ea789416918658ebfa16be7a64c77610307497ed09a93c8c4/Django-4.2.16-py3-none-any.whl", hash = "sha256:1ddc333a16fc139fd253035a1606bb24261951bbc3a6ca256717fa06cc41a898", size = 7992936 }, + { url = "https://files.pythonhosted.org/packages/5e/85/457360cb3de496382e35db4c2af054066df5c40e26df31400d0109a0500c/Django-4.2.17-py3-none-any.whl", hash = "sha256:3a93350214ba25f178d4045c0786c61573e7dbfa3c509b3551374f1e11ba8de0", size = 7993390 }, ] [[package]] @@ -927,16 +927,16 @@ wheels = [ [[package]] name = "fastapi" -version = "0.115.5" +version = "0.115.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, { name = "starlette" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ae/29/f71316b9273b6552a263748e49cd7b83898dc9499a663d30c7b9cb853cb8/fastapi-0.115.5.tar.gz", hash = "sha256:0e7a4d0dc0d01c68df21887cce0945e72d3c48b9f4f79dfe7a7d53aa08fbb289", size = 301047 } +sdist = { url = "https://files.pythonhosted.org/packages/93/72/d83b98cd106541e8f5e5bfab8ef2974ab45a62e8a6c5b5e6940f26d2ed4b/fastapi-0.115.6.tar.gz", hash = "sha256:9ec46f7addc14ea472958a96aae5b5de65f39721a46aaf5705c480d9a8b76654", size = 301336 } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/c4/148d5046a96c428464557264877ae5a9338a83bbe0df045088749ec89820/fastapi-0.115.5-py3-none-any.whl", hash = "sha256:596b95adbe1474da47049e802f9a65ab2ffa9c2b07e7efee70eb8a66c9f2f796", size = 94866 }, + { url = "https://files.pythonhosted.org/packages/52/b3/7e4df40e585df024fac2f80d1a2d579c854ac37109675db2b0cc22c0bb9e/fastapi-0.115.6-py3-none-any.whl", hash = "sha256:e9240b29e36fa8f4bb7290316988e90c381e5092e0cbe84e7818cc3713bcf305", size = 94843 }, ] [[package]] @@ -1250,7 +1250,7 @@ wheels = [ [[package]] name = "inline-snapshot" -version = "0.14.0" +version = "0.14.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "asttokens" }, @@ -1261,9 +1261,9 @@ dependencies = [ { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/45/a9/b6b9db4f2ef1e3261460701a429f8248e517cb8d18e27ff05f4690ac0a73/inline_snapshot-0.14.0.tar.gz", hash = "sha256:54fdf7831055d06a2423054875d640102865a164cc8291a8086e44dd9b4fd316", size = 209662 } +sdist = { url = "https://files.pythonhosted.org/packages/54/10/a7d1f16e549c301da0628cee1e693d0b0555dde9df38479333700f67b9a2/inline_snapshot-0.14.1.tar.gz", hash = "sha256:3c0e6c278fc770ae791e4646df9c6f36cccbb2d49327f7d58f9c32d3095cc520", size = 220919 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5e/a3/8ca14974625632d56d7e9f899d76d15dc4acd94ec15c179ca528beadeb4a/inline_snapshot-0.14.0-py3-none-any.whl", hash = "sha256:dc246d28b720f6050404b72cc1d171b0671e1494249197753d23771ff228748c", size = 31807 }, + { url = "https://files.pythonhosted.org/packages/32/0b/274d19a374be480f85a7f55926ab5cf7d34d41285210549c78eee90b7eee/inline_snapshot-0.14.1-py3-none-any.whl", hash = "sha256:bd044ea1926e672a97f8820bb3589ad2edb96123c140a0210b832b4e0483d241", size = 32467 }, ] [[package]] @@ -1628,7 +1628,7 @@ dev = [ { name = "pymongo", specifier = ">=4.10.1" }, { name = "pymysql" }, { name = "pyright", specifier = ">=1.1.360" }, - { name = "pytest", specifier = "==8.3.3" }, + { name = "pytest", specifier = ">=8.3.4" }, { name = "pytest-django" }, { name = "pytest-pretty" }, { name = "pytest-recording", specifier = ">=0.13.2" }, @@ -2218,7 +2218,7 @@ wheels = [ [[package]] name = "openai" -version = "1.56.0" +version = "1.56.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -2230,9 +2230,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1c/7e/109c73d81018f3b993ca08c06fb2850ee151120a391fa9aeb857f34e0caf/openai-1.56.0.tar.gz", hash = "sha256:f7fa159c8e18e7f9a8d71ff4b8052452ae70a4edc6b76a6e97eda00d5364923f", size = 315175 } +sdist = { url = "https://files.pythonhosted.org/packages/e1/97/302669f5888d1adf8ce0e93f1e5b2337b6c9db47d9877bd344a29db314be/openai-1.56.2.tar.gz", hash = "sha256:17312af69bc7670d4048f98ab5849f8784d98c39ac64fcde19406e3774a0c1e5", size = 315404 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/ac/2d716e5fdae7f28b5cb4144bf55d0c782538350f7ad916ed2956268370b3/openai-1.56.0-py3-none-any.whl", hash = "sha256:0751a6e139a09fca2e9cbbe8a62bfdab901b5865249d2555d005decf966ef9c3", size = 389819 }, + { url = "https://files.pythonhosted.org/packages/23/36/c60fffa518d82952335e2ef4a6b93b0427c57eb49469879dee1cbe59d551/openai-1.56.2-py3-none-any.whl", hash = "sha256:82d0c48f9504e04c7797e9b799dcf7f49a246d99b6cbfd90f3193ea80815b69e", size = 389854 }, ] [[package]] @@ -2929,20 +2929,20 @@ wheels = [ [[package]] name = "protobuf" -version = "5.29.0" +version = "5.29.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6a/bb/8e59a30b83102a37d24f907f417febb58e5f544d4f124dd1edcd12e078bf/protobuf-5.29.0.tar.gz", hash = "sha256:445a0c02483869ed8513a585d80020d012c6dc60075f96fa0563a724987b1001", size = 424944 } +sdist = { url = "https://files.pythonhosted.org/packages/d2/4f/1639b7b1633d8fd55f216ba01e21bf2c43384ab25ef3ddb35d85a52033e8/protobuf-5.29.1.tar.gz", hash = "sha256:683be02ca21a6ffe80db6dd02c0b5b2892322c59ca57fd6c872d652cb80549cb", size = 424965 } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/cc/98140acbcc3e3a58c679d50dd4f04c3687bdd19690f388c65bb1ae4c1e5e/protobuf-5.29.0-cp310-abi3-win32.whl", hash = "sha256:ea7fb379b257911c8c020688d455e8f74efd2f734b72dc1ea4b4d7e9fd1326f2", size = 422709 }, - { url = "https://files.pythonhosted.org/packages/c9/91/38fb97b0cbe96109fa257536ad49dffdac3c8f86b46d9c85dc9e949b5291/protobuf-5.29.0-cp310-abi3-win_amd64.whl", hash = "sha256:34a90cf30c908f47f40ebea7811f743d360e202b6f10d40c02529ebd84afc069", size = 434510 }, - { url = "https://files.pythonhosted.org/packages/da/97/faeca508d61b231372cdc3006084fd97f21f3c8c726a2de5f2ebb8e4ab78/protobuf-5.29.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c931c61d0cc143a2e756b1e7f8197a508de5365efd40f83c907a9febf36e6b43", size = 417827 }, - { url = "https://files.pythonhosted.org/packages/eb/d6/c6a45a285374ab14499a9ef5a69e4e7b4911e641465681c1d602518d6ab2/protobuf-5.29.0-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:85286a47caf63b34fa92fdc1fd98b649a8895db595cfa746c5286eeae890a0b1", size = 319576 }, - { url = "https://files.pythonhosted.org/packages/ee/2e/cc46181ddce0940647d21a8341bf2eddad247a5d030e8c30c7a342793978/protobuf-5.29.0-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:0d10091d6d03537c3f902279fcf11e95372bdd36a79556311da0487455791b20", size = 319672 }, - { url = "https://files.pythonhosted.org/packages/bc/eb/caa86cb378fa097a0a83e2430d999dbefebbb9ae30d0d6e416585baa5bba/protobuf-5.29.0-cp38-cp38-win32.whl", hash = "sha256:0cd67a1e5c2d88930aa767f702773b2d054e29957432d7c6a18f8be02a07719a", size = 422595 }, - { url = "https://files.pythonhosted.org/packages/0f/7a/605bf38ea67c4034dac3e7864d08c7c521d6d85d4a5508a9b3977d35b8ac/protobuf-5.29.0-cp38-cp38-win_amd64.whl", hash = "sha256:e467f81fdd12ded9655cea3e9b83dc319d93b394ce810b556fb0f421d8613e86", size = 434518 }, - { url = "https://files.pythonhosted.org/packages/72/24/647b768fbc1cc7c2cce3688316c1e0a147b2d4620c108705d2b05f804f50/protobuf-5.29.0-cp39-cp39-win32.whl", hash = "sha256:17d128eebbd5d8aee80300aed7a43a48a25170af3337f6f1333d1fac2c6839ac", size = 422677 }, - { url = "https://files.pythonhosted.org/packages/9f/41/5f4ebb2dc0a0226c2564ea84f1718b53ca2e4201a0e6b70073c9aee380ad/protobuf-5.29.0-cp39-cp39-win_amd64.whl", hash = "sha256:6c3009e22717c6cc9e6594bb11ef9f15f669b19957ad4087214d69e08a213368", size = 434597 }, - { url = "https://files.pythonhosted.org/packages/7c/6c/dd1f0e8372ec2a8006102871d8da1466b116f3328db96972e19bf24f09ca/protobuf-5.29.0-py3-none-any.whl", hash = "sha256:88c4af76a73183e21061881360240c0cdd3c39d263b4e8fb570aaf83348d608f", size = 172553 }, + { url = "https://files.pythonhosted.org/packages/50/c7/28669b04691a376cf7d0617d612f126aa0fff763d57df0142f9bf474c5b8/protobuf-5.29.1-cp310-abi3-win32.whl", hash = "sha256:22c1f539024241ee545cbcb00ee160ad1877975690b16656ff87dde107b5f110", size = 422706 }, + { url = "https://files.pythonhosted.org/packages/e3/33/dc7a7712f457456b7e0b16420ab8ba1cc8686751d3f28392eb43d0029ab9/protobuf-5.29.1-cp310-abi3-win_amd64.whl", hash = "sha256:1fc55267f086dd4050d18ef839d7bd69300d0d08c2a53ca7df3920cc271a3c34", size = 434505 }, + { url = "https://files.pythonhosted.org/packages/e5/39/44239fb1c6ec557e1731d996a5de89a9eb1ada7a92491fcf9c5d714052ed/protobuf-5.29.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:d473655e29c0c4bbf8b69e9a8fb54645bc289dead6d753b952e7aa660254ae18", size = 417822 }, + { url = "https://files.pythonhosted.org/packages/fb/4a/ec56f101d38d4bef2959a9750209809242d86cf8b897db00f2f98bfa360e/protobuf-5.29.1-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:b5ba1d0e4c8a40ae0496d0e2ecfdbb82e1776928a205106d14ad6985a09ec155", size = 319572 }, + { url = "https://files.pythonhosted.org/packages/04/52/c97c58a33b3d6c89a8138788576d372a90a6556f354799971c6b4d16d871/protobuf-5.29.1-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:8ee1461b3af56145aca2800e6a3e2f928108c749ba8feccc6f5dd0062c410c0d", size = 319671 }, + { url = "https://files.pythonhosted.org/packages/53/da/586cd4b2e45a2b81e5c9e5d8eb1d726fa78a7f87761fb67e2d7b276cdbeb/protobuf-5.29.1-cp38-cp38-win32.whl", hash = "sha256:50879eb0eb1246e3a5eabbbe566b44b10348939b7cc1b267567e8c3d07213853", size = 422590 }, + { url = "https://files.pythonhosted.org/packages/98/50/5514a7a590be0e8883ed2c23c0ea928c5069cc5737f09893ae76f93ddcde/protobuf-5.29.1-cp38-cp38-win_amd64.whl", hash = "sha256:027fbcc48cea65a6b17028510fdd054147057fa78f4772eb547b9274e5219331", size = 434514 }, + { url = "https://files.pythonhosted.org/packages/99/19/5a3957e08de18578131810563ccfeebc7d2aad31ee52e367a61f56cc3cab/protobuf-5.29.1-cp39-cp39-win32.whl", hash = "sha256:5a41deccfa5e745cef5c65a560c76ec0ed8e70908a67cc8f4da5fce588b50d57", size = 422671 }, + { url = "https://files.pythonhosted.org/packages/24/67/8bc07bb755c8badf08db4a8bc2eb542a4e733135a6d584d1922b701d7751/protobuf-5.29.1-cp39-cp39-win_amd64.whl", hash = "sha256:012ce28d862ff417fd629285aca5d9772807f15ceb1a0dbd15b88f58c776c98c", size = 434591 }, + { url = "https://files.pythonhosted.org/packages/3b/24/c8c49df8f6587719e1d400109b16c10c6902d0c9adddc8fff82840146f99/protobuf-5.29.1-py3-none-any.whl", hash = "sha256:32600ddb9c2a53dedc25b8581ea0f1fd8ea04956373c0c07577ce58d312522e0", size = 172547 }, ] [[package]] @@ -3183,7 +3183,7 @@ wheels = [ [[package]] name = "pydantic" version = "2.10.3" -source = { git = "https://github.com/pydantic/pydantic#c6905b66d4f0a82bcfacad989667aab697df8f65" } +source = { git = "https://github.com/pydantic/pydantic#32f405bcf6171602ffe754f1fca1681c5ddee96e" } dependencies = [ { name = "annotated-types" }, { name = "pydantic-core" }, @@ -3402,20 +3402,20 @@ wheels = [ [[package]] name = "pyright" -version = "1.1.389" +version = "1.1.390" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nodeenv" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/72/4e/9a5ab8745e7606b88c2c7ca223449ac9d82a71fd5e31df47b453f2cb39a1/pyright-1.1.389.tar.gz", hash = "sha256:716bf8cc174ab8b4dcf6828c3298cac05c5ed775dda9910106a5dcfe4c7fe220", size = 21940 } +sdist = { url = "https://files.pythonhosted.org/packages/ba/42/1e0392f35dd275f9f775baf7c86407cef7f6a0d9b8e099a93e5422a7e571/pyright-1.1.390.tar.gz", hash = "sha256:aad7f160c49e0fbf8209507a15e17b781f63a86a1facb69ca877c71ef2e9538d", size = 21950 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/26/c288cabf8cfc5a27e1aa9e5029b7682c0f920b8074f45d22bf844314d66a/pyright-1.1.389-py3-none-any.whl", hash = "sha256:41e9620bba9254406dc1f621a88ceab5a88af4c826feb4f614d95691ed243a60", size = 18581 }, + { url = "https://files.pythonhosted.org/packages/43/20/3f492ca789fb17962ad23619959c7fa642082621751514296c58de3bb801/pyright-1.1.390-py3-none-any.whl", hash = "sha256:ecebfba5b6b50af7c1a44c2ba144ba2ab542c227eb49bc1f16984ff714e0e110", size = 18579 }, ] [[package]] name = "pytest" -version = "8.3.3" +version = "8.3.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -3425,9 +3425,9 @@ dependencies = [ { name = "pluggy" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8b/6c/62bbd536103af674e227c41a8f3dcd022d591f6eed5facb5a0f31ee33bbc/pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181", size = 1442487 } +sdist = { url = "https://files.pythonhosted.org/packages/05/35/30e0d83068951d90a01852cb1cef56e5d8a09d20c7f511634cc2f7e0372a/pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761", size = 1445919 } wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/77/7440a06a8ead44c7757a64362dd22df5760f9b12dc5f11b6188cd2fc27a0/pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2", size = 342341 }, + { url = "https://files.pythonhosted.org/packages/11/92/76a1c94d3afee238333bc0a42b82935dd8f9cf8ce9e336ff87ee14d9e1cf/pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6", size = 343083 }, ] [[package]] @@ -3774,11 +3774,11 @@ wheels = [ [[package]] name = "six" -version = "1.16.0" +version = "1.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", size = 34041 } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053 }, + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, ] [[package]]