From 7e7ed5804dd1278e75720c2b6939184c0216469e Mon Sep 17 00:00:00 2001 From: Nathan Essex Date: Fri, 19 Jul 2024 23:40:33 +0900 Subject: [PATCH 01/29] feat(pylibmc): wrap additional commands (#9659) Wraps the common memcached `add` command. [Pylibmc headers](https://github.com/lericson/pylibmc/blob/1183e48eb86adf0c23c5164bfe2c2a4058234640/src/_pylibmcmodule.h#L317) [Memcached wiki](https://github.com/memcached/memcached/wiki/Commands) ## Checklist - [x] Change(s) are motivated and described in the PR description - [x] Testing strategy is described if automated tests are not included in the PR - [x] Risks are described (performance impact, potential for breakage, maintainability) - [x] Change is maintainable (easy to change, telemetry, documentation) - [x] [Library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) are followed or label `changelog/no-changelog` is set - [x] Documentation is included (in-code, generated user docs, [public corp docs](https://github.com/DataDog/documentation/)) - [x] Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) - [x] If this PR changes the public interface, I've notified `@DataDog/apm-tees`. ## Reviewer Checklist - [x] Title is accurate - [x] All changes are related to the pull request's stated goal - [x] Description motivates each change - [x] Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - [x] Testing strategy adequately addresses listed risks - [x] Change is maintainable (easy to change, telemetry, documentation) - [x] Release note makes sense to a user of the library - [x] Author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - [x] Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) Co-authored-by: Emmett Butler <723615+emmettbutler@users.noreply.github.com> --- ddtrace/contrib/pylibmc/client.py | 3 +++ ...-support-add-command-8c3545bfd7ac7c9b.yaml | 4 ++++ tests/contrib/pylibmc/test.py | 21 +++++++++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 releasenotes/notes/feat-pylibmc-support-add-command-8c3545bfd7ac7c9b.yaml diff --git a/ddtrace/contrib/pylibmc/client.py b/ddtrace/contrib/pylibmc/client.py index af788ab98b8..db676849806 100644 --- a/ddtrace/contrib/pylibmc/client.py +++ b/ddtrace/contrib/pylibmc/client.py @@ -69,6 +69,9 @@ def clone(self, *args, **kwargs): pin.clone().onto(traced_client) return traced_client + def add(self, *args, **kwargs): + return self._trace_cmd("add", *args, **kwargs) + def get(self, *args, **kwargs): return self._trace_cmd("get", *args, **kwargs) diff --git a/releasenotes/notes/feat-pylibmc-support-add-command-8c3545bfd7ac7c9b.yaml b/releasenotes/notes/feat-pylibmc-support-add-command-8c3545bfd7ac7c9b.yaml new file mode 100644 index 00000000000..6a629055bd2 --- /dev/null +++ b/releasenotes/notes/feat-pylibmc-support-add-command-8c3545bfd7ac7c9b.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + pylibmc: adds traces for memcached add command diff --git a/tests/contrib/pylibmc/test.py b/tests/contrib/pylibmc/test.py index 825b9c939aa..a67fe56b8b1 100644 --- a/tests/contrib/pylibmc/test.py +++ b/tests/contrib/pylibmc/test.py @@ -160,6 +160,27 @@ def test_get_rowcount(self): assert get_missing_key_span.resource == "get" assert get_missing_key_span.get_metric("db.row_count") == 0 + def test_add(self): + client, tracer = self.get_client() + # test + start = time.time() + client.add("a", "first") + out = client.get("a") + assert out == "first" + client.add("a", "second") + out = client.get("a") + assert out == "first" + end = time.time() + # verify + spans = tracer.pop() + for s in spans: + self._verify_cache_span(s, start, end) + + assert spans[0].resource == "add" + assert spans[1].resource == "get" + assert spans[2].resource == "add" + assert spans[3].resource == "get" + def test_get_multi_rowcount(self): client, tracer = self.get_client() # test From 81fa854aa9fb16ffc4a089d2d0bd82936c7ea3e9 Mon Sep 17 00:00:00 2001 From: Federico Mon Date: Fri, 19 Jul 2024 17:14:29 +0200 Subject: [PATCH 02/29] chore: remove attrs from dd-trace-py (#9868) ## Motivation Remove `attrs` dependency Merge queue dependencies: - [x] https://github.com/DataDog/dd-trace-py/pull/9777 - [x] https://github.com/DataDog/dd-trace-py/pull/9860 - [x] https://github.com/DataDog/dd-trace-py/pull/9867 ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- .../requirements/{f20bd15.txt => 50d0377.txt} | 2 +- docker/Dockerfile_py311_debug_mode | 4 +--- docker/Dockerfile_py312_debug_mode | 4 +--- hatch.toml | 3 --- lib-injection/min_compatible_versions.csv | 23 +++++++++++-------- min_compatible_versions.csv | 23 +++++++++++-------- pyproject.toml | 1 - riotfile.py | 1 - tests/utils.py | 10 ++++---- 9 files changed, 34 insertions(+), 37 deletions(-) rename .riot/requirements/{f20bd15.txt => 50d0377.txt} (93%) diff --git a/.riot/requirements/f20bd15.txt b/.riot/requirements/50d0377.txt similarity index 93% rename from .riot/requirements/f20bd15.txt rename to .riot/requirements/50d0377.txt index c4e39d2e7ce..0c69ed31b07 100644 --- a/.riot/requirements/f20bd15.txt +++ b/.riot/requirements/50d0377.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/f20bd15.in +# pip-compile --no-annotate .riot/requirements/50d0377.in # aiosqlite==0.17.0 annotated-types==0.7.0 diff --git a/docker/Dockerfile_py311_debug_mode b/docker/Dockerfile_py311_debug_mode index 64e53d93bc2..1366bceb2ff 100644 --- a/docker/Dockerfile_py311_debug_mode +++ b/docker/Dockerfile_py311_debug_mode @@ -62,12 +62,10 @@ RUN git clone --depth 1 --branch v3.11.6 https://github.com/python/cpython/ "${P && cd - RUN python3.11 -m pip install -U pip \ - && python3.11 -m pip install cattrs setuptools cython wheel cmake pytest pytest-cov hypothesis pytest-memray\ + && python3.11 -m pip install setuptools cython wheel cmake pytest pytest-cov hypothesis pytest-memray\ memray==1.12.0 \ requests==2.31.0 \ - attrs>=20 \ bytecode>=0.14.0 \ - cattrs \ envier~=0.5 \ opentelemetry-api>=1 \ protobuf>=3 \ diff --git a/docker/Dockerfile_py312_debug_mode b/docker/Dockerfile_py312_debug_mode index 52e0a9c26ac..9bcb1bf5f41 100644 --- a/docker/Dockerfile_py312_debug_mode +++ b/docker/Dockerfile_py312_debug_mode @@ -62,12 +62,10 @@ RUN git clone --depth 1 --branch v3.12.3 https://github.com/python/cpython/ "${P && cd - RUN python3.12 -m pip install -U pip \ - && python3.12 -m pip install cattrs setuptools cython wheel cmake pytest pytest-cov hypothesis pytest-memray\ + && python3.12 -m pip install setuptools cython wheel cmake pytest pytest-cov hypothesis pytest-memray\ memray==1.12.0 \ requests==2.31.0 \ - attrs>=20 \ bytecode>=0.14.0 \ - cattrs \ envier~=0.5 \ opentelemetry-api>=1 \ protobuf>=3 \ diff --git a/hatch.toml b/hatch.toml index 2cce1db3cb1..6840496bb2e 100644 --- a/hatch.toml +++ b/hatch.toml @@ -15,7 +15,6 @@ dependencies = [ "mypy==0.991", "coverage==7.3.0", "envier==0.5.2", - "types-attrs==19.1.0", "types-docutils==0.19.1.1", "types-protobuf==3.20.4.5", "types-PyYAML==6.0.12.2", @@ -72,8 +71,6 @@ python = "3.10" features = ["opentracing"] dependencies = [ # copied from library dependencies "protobuf>=3", - "attrs>=20", - "cattrs", "typing_extensions", "xmltodict>=0.12", "envier", diff --git a/lib-injection/min_compatible_versions.csv b/lib-injection/min_compatible_versions.csv index 4ff0128c5e5..dfa8389a0ae 100644 --- a/lib-injection/min_compatible_versions.csv +++ b/lib-injection/min_compatible_versions.csv @@ -14,14 +14,15 @@ aiomysql,~=0.1.0 aiopg,~=0.16.0 aiosqlite,0 algoliasearch,~=2.5 +anthropic,~=0.28 anyio,>=3.4.0 aredis,0 -asgiref,~=3.0 +asgiref,~=3.0.0 astunparse,0 async_generator,~=1.10 asyncpg,~=0.22.0 asynctest,==0.13.0 -attrs,>=20 +attrs,==22.1.0 austin-python,~=1.0 blinker,0 boto3,0 @@ -30,7 +31,7 @@ bottle,>=0.12 bytecode,0 cassandra-driver,~=3.24.0 cattrs,<23.1.1 -celery,~=4.4 +celery,~=5.1.0 cfn-lint,~=0.53.1 channels,~=3.0 cherrypy,>=17 @@ -62,18 +63,18 @@ elasticsearch8,~=8.0.1 elasticsearch[async],0 envier,==0.5.2 exceptiongroup,0 -falcon,~=3.0 +falcon,~=3.0.0 fastapi,~=0.64.0 flask,~=0.12.0 flask-caching,~=1.10.0 -flask-login,~=0.6.2 +flask-openapi3,0 gevent,~=20.12.0 git+https://github.com/gnufede/pytest-memray.git@24a3c0735db99eedf57fb36c573680f9bab7cd73,0 googleapis-common-protos,0 graphene,~=3.0.0 graphql-core,~=3.2.0 graphql-relay,0 -greenlet,~=1.0.0 +greenlet,~=1.0 grpcio,~=1.34.0 gunicorn,==20.0.4 gunicorn[gevent],0 @@ -87,13 +88,14 @@ itsdangerous,<2.0 jinja2,~=2.11.0 kombu,>=4.2.0 langchain,==0.0.192 -langchain-aws,0 +langchain-anthropic,==0.1.11 +langchain-aws,==0.1.3 +langchain-cohere,==0.1.4 langchain-community,==0.0.14 langchain-core,==0.1.52 langchain-openai,==0.1.6 langchain-pinecone,==0.1.0 langchain_experimental,==0.0.47 -langsmith,==0.1.58 logbook,~=1.0.0 loguru,~=0.4.0 mako,~=1.1.0 @@ -139,11 +141,11 @@ pyramid,~=1.10 pysqlite3-binary,0 pytest,~=4.0 pytest-aiohttp,0 -pytest-asyncio,==0.21.1 +pytest-asyncio,~=0.21.1 pytest-bdd,>=4.0 pytest-benchmark,>=3.1.0 pytest-cov,==2.9.0 -pytest-django,==3.10.0 +pytest-django[testing],==3.10.0 pytest-mock,==2.0.0 pytest-randomly,0 pytest-sanic,~=1.6.2 @@ -177,6 +179,7 @@ urllib3,~=1.0 uwsgi,0 vcrpy,==4.2.1 vertica-python,>=0.6.0 +virtualenv-clone,0 websockets,<11.0 webtest,0 werkzeug,<1.0 diff --git a/min_compatible_versions.csv b/min_compatible_versions.csv index 4ff0128c5e5..dfa8389a0ae 100644 --- a/min_compatible_versions.csv +++ b/min_compatible_versions.csv @@ -14,14 +14,15 @@ aiomysql,~=0.1.0 aiopg,~=0.16.0 aiosqlite,0 algoliasearch,~=2.5 +anthropic,~=0.28 anyio,>=3.4.0 aredis,0 -asgiref,~=3.0 +asgiref,~=3.0.0 astunparse,0 async_generator,~=1.10 asyncpg,~=0.22.0 asynctest,==0.13.0 -attrs,>=20 +attrs,==22.1.0 austin-python,~=1.0 blinker,0 boto3,0 @@ -30,7 +31,7 @@ bottle,>=0.12 bytecode,0 cassandra-driver,~=3.24.0 cattrs,<23.1.1 -celery,~=4.4 +celery,~=5.1.0 cfn-lint,~=0.53.1 channels,~=3.0 cherrypy,>=17 @@ -62,18 +63,18 @@ elasticsearch8,~=8.0.1 elasticsearch[async],0 envier,==0.5.2 exceptiongroup,0 -falcon,~=3.0 +falcon,~=3.0.0 fastapi,~=0.64.0 flask,~=0.12.0 flask-caching,~=1.10.0 -flask-login,~=0.6.2 +flask-openapi3,0 gevent,~=20.12.0 git+https://github.com/gnufede/pytest-memray.git@24a3c0735db99eedf57fb36c573680f9bab7cd73,0 googleapis-common-protos,0 graphene,~=3.0.0 graphql-core,~=3.2.0 graphql-relay,0 -greenlet,~=1.0.0 +greenlet,~=1.0 grpcio,~=1.34.0 gunicorn,==20.0.4 gunicorn[gevent],0 @@ -87,13 +88,14 @@ itsdangerous,<2.0 jinja2,~=2.11.0 kombu,>=4.2.0 langchain,==0.0.192 -langchain-aws,0 +langchain-anthropic,==0.1.11 +langchain-aws,==0.1.3 +langchain-cohere,==0.1.4 langchain-community,==0.0.14 langchain-core,==0.1.52 langchain-openai,==0.1.6 langchain-pinecone,==0.1.0 langchain_experimental,==0.0.47 -langsmith,==0.1.58 logbook,~=1.0.0 loguru,~=0.4.0 mako,~=1.1.0 @@ -139,11 +141,11 @@ pyramid,~=1.10 pysqlite3-binary,0 pytest,~=4.0 pytest-aiohttp,0 -pytest-asyncio,==0.21.1 +pytest-asyncio,~=0.21.1 pytest-bdd,>=4.0 pytest-benchmark,>=3.1.0 pytest-cov,==2.9.0 -pytest-django,==3.10.0 +pytest-django[testing],==3.10.0 pytest-mock,==2.0.0 pytest-randomly,0 pytest-sanic,~=1.6.2 @@ -177,6 +179,7 @@ urllib3,~=1.0 uwsgi,0 vcrpy,==4.2.1 vertica-python,>=0.6.0 +virtualenv-clone,0 websockets,<11.0 webtest,0 werkzeug,<1.0 diff --git a/pyproject.toml b/pyproject.toml index e08e845b5eb..e3e8de0bd7d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,6 @@ classifiers = [ "Programming Language :: Python :: 3.12", ] dependencies = [ - "attrs>=20", "bytecode>=0.15.0; python_version>='3.12'", "bytecode>=0.14.0; python_version~='3.11.0'", "bytecode>=0.13.0; python_version<'3.11'", diff --git a/riotfile.py b/riotfile.py index 8ea27ace102..ed74b32d1bc 100644 --- a/riotfile.py +++ b/riotfile.py @@ -205,7 +205,6 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): "envier": "==0.5.2", "cattrs": "<23.1.1", "protobuf": ">=3", - "attrs": ">=20", "typing_extensions": latest, "xmltodict": ">=0.12", "opentelemetry-api": ">=1", diff --git a/tests/utils.py b/tests/utils.py index 50a716e93d3..6e12ea0f9e0 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -1,5 +1,6 @@ import contextlib from contextlib import contextmanager +import dataclasses import datetime as dt from http.client import RemoteDisconnected import inspect @@ -11,7 +12,6 @@ from typing import List # noqa:F401 import urllib.parse -import attr import pkg_resources import pytest @@ -977,10 +977,10 @@ class SnapshotFailed(Exception): pass -@attr.s -class SnapshotTest(object): - token = attr.ib(type=str) - tracer = attr.ib(type=ddtrace.Tracer, default=ddtrace.tracer) +@dataclasses.dataclass +class SnapshotTest: + token: str + tracer: ddtrace.Tracer = ddtrace.tracer def clear(self): """Clear any traces sent that were sent for this snapshot.""" From d323bbab450bded455a35969d3a4994210612f07 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Fri, 19 Jul 2024 14:09:35 -0400 Subject: [PATCH 03/29] fix: telemetry exception hooks (#9830) ## Description When wrapping pre-configured exception hooks the telemetry writer converts exception hooks from type `function` to type `method `. This adds the `self` argument to pre-configured exception which raised the following error: `TypeError: xxxsome_funcxxxx() takes 3 positional arguments but 4 were given`. To resolve this issue this PR casts `TelemetryWriter._ORIGINAL_EXCEPTHOOK` is cast to a static method. This ensures the telemetry writer does not modify the argument of preconfigured hooks. ## Impact When an application raises an unhandled exception and ddtrace instrumentation telemetry is enabled: - the ddtrace telemetry exception will be executed - the ddtrace library will fail to run exception hooks that were configured before ddtrace was imported - applications will log `TypeError: xxxsome_funcxxxx() takes 3 positional arguments but 4 were given` on application shutdown. ## Motivation Resolves the following errors: https://github.com/DataDog/dd-trace-py/actions/runs/9891512830/job/27322136218#step:5:141 This bug was introduced in: https://github.com/DataDog/dd-trace-py/commit/0cdc0831a62ee2575833298c49ff468cb14d51fb ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [ ] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- ddtrace/internal/telemetry/writer.py | 6 +++--- tests/telemetry/test_telemetry.py | 31 +++++++++++++++++++++------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/ddtrace/internal/telemetry/writer.py b/ddtrace/internal/telemetry/writer.py index afaa42358ec..e608eaede15 100644 --- a/ddtrace/internal/telemetry/writer.py +++ b/ddtrace/internal/telemetry/writer.py @@ -230,7 +230,7 @@ class TelemetryWriter(PeriodicService): # of `itertools.count()` which is a CPython implementation detail. The sequence field in telemetry # payloads is only used in tests and is not required to process Telemetry events. _sequence = itertools.count(1) - _ORIGINAL_EXCEPTHOOK = sys.excepthook + _ORIGINAL_EXCEPTHOOK = staticmethod(sys.excepthook) def __init__(self, is_periodic=True, agentless=None): # type: (bool, Optional[bool]) -> None @@ -863,7 +863,7 @@ def _telemetry_excepthook(self, tp, value, root_traceback): self.app_shutdown() - return self._ORIGINAL_EXCEPTHOOK(tp, value, root_traceback) + return TelemetryWriter._ORIGINAL_EXCEPTHOOK(tp, value, root_traceback) def install_excepthook(self): """Install a hook that intercepts unhandled exception and send metrics about them.""" @@ -871,4 +871,4 @@ def install_excepthook(self): def uninstall_excepthook(self): """Uninstall the global tracer except hook.""" - sys.excepthook = self._ORIGINAL_EXCEPTHOOK + sys.excepthook = TelemetryWriter._ORIGINAL_EXCEPTHOOK diff --git a/tests/telemetry/test_telemetry.py b/tests/telemetry/test_telemetry.py index cc69904c264..89b08203357 100644 --- a/tests/telemetry/test_telemetry.py +++ b/tests/telemetry/test_telemetry.py @@ -221,8 +221,7 @@ def process_trace(self, trace): ]["message"] -@pytest.mark.skip(reason="We don't have a way to capture unhandled errors in bootstrap before telemetry is loaded") -def test_app_started_error_unhandled_exception(test_agent_session, run_python_code_in_subprocess): +def test_app_started_error_unhandled_tracer_exception(test_agent_session, run_python_code_in_subprocess): env = os.environ.copy() env["DD_SPAN_SAMPLING_RULES"] = "invalid_rules" @@ -243,19 +242,37 @@ def test_app_started_error_unhandled_exception(test_agent_session, run_python_co assert "Unable to parse DD_SPAN_SAMPLING_RULES='invalid_rules'" in app_starteds[0]["payload"]["error"]["message"] -def test_telemetry_with_raised_exception(test_agent_session, run_python_code_in_subprocess): - _, stderr, status, _ = run_python_code_in_subprocess( - "import ddtrace; ddtrace.tracer.trace('moon').finish(); raise Exception('bad_code')" +def test_register_telemetry_excepthook_after_another_hook(test_agent_session, run_python_code_in_subprocess): + out, stderr, status, _ = run_python_code_in_subprocess( + """ +import sys + +old_exc_hook = sys.excepthook +def pre_ddtrace_exc_hook(exctype, value, traceback): + print("pre_ddtrace_exc_hook called") + return old_exc_hook(exctype, value, traceback) + +sys.excepthook = pre_ddtrace_exc_hook + +import ddtrace +raise Exception('bad_code') +""" ) + assert b"pre_ddtrace_exc_hook called" in out assert status == 1, stderr assert b"bad_code" in stderr # Regression test for python3.12 support assert b"RuntimeError: can't create new thread at interpreter shutdown" not in stderr + # Regression test for invalid number of arguments in wrapped exception hook + assert b"3 positional arguments but 4 were given" not in stderr app_starteds = test_agent_session.get_events("app-started") assert len(app_starteds) == 1 - # app-started does not capture exceptions raised in application code - assert app_starteds[0]["payload"]["error"]["code"] == 0 + # app-started captures unhandled exceptions raised in application code + assert app_starteds[0]["payload"]["error"]["code"] == 1 + assert re.search(r"test\.py:\d+:\sbad_code$", app_starteds[0]["payload"]["error"]["message"]), app_starteds[0][ + "payload" + ]["error"]["message"] def test_handled_integration_error(test_agent_session, run_python_code_in_subprocess): From 6c3db8e392092ab11037f570959f7535d6751c3e Mon Sep 17 00:00:00 2001 From: Quinna Halim Date: Fri, 19 Jul 2024 14:27:41 -0400 Subject: [PATCH 04/29] docs: update contributing snapshot tests for clarity and style (#9814) ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- docs/contributing-integrations.rst | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/contributing-integrations.rst b/docs/contributing-integrations.rst index bbb21ae9085..faa7570ddff 100644 --- a/docs/contributing-integrations.rst +++ b/docs/contributing-integrations.rst @@ -110,14 +110,15 @@ What are "snapshot tests"? -------------------------- Many of the tests are based on "snapshots": saved copies of actual traces sent to the -`APM test agent <../README.md#use-the-apm-test-agent>`_. +`APM test agent <../README.md#use-the-apm-test-agent>`_. When an integration is added or modified, the snapshots +(if they exist) should be updated to match the new expected output. -To update the snapshots expected by a test, first update the library and test code to generate -new traces. Then, delete the snapshot file corresponding to your test at ``tests/snapshots/``. +1. Update the library and test code to generate new traces. +2. Delete the snapshot file corresponding to your test at ``tests/snapshots/`` (if applicable). +3. Use `docker-compose up -d testagent` to start the APM test agent, and then re-run the test. Use `--pass-env` as described + `here <../README.md#use-the-apm-test-agent>`_ to ensure that your test run can talk to the test agent. -Use `docker-compose up -d testagent` to start the APM test agent, and then re-run the test. Use `--pass-env` as described -`here <../README.md#use-the-apm-test-agent>`_ to ensure that your test run can talk to the -test agent. Once the run finishes, the snapshot file will have been regenerated. +Once the run finishes, the snapshot file will have been regenerated. How should I write integration tests for my integration? -------------------------------------------------------- From dc000ae8397a7d8e1c0fb569622ee9d2e42082ac Mon Sep 17 00:00:00 2001 From: Brett Langdon Date: Fri, 19 Jul 2024 15:08:39 -0400 Subject: [PATCH 05/29] chore(internal): start crashtracker when enabled (#9865) WIP: initial implementation, needs some manual and automated testing changes. ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --------- Signed-off-by: Juanjo Alvarez Co-authored-by: erikayasuda <153395705+erikayasuda@users.noreply.github.com> Co-authored-by: David Sanchez <838104+sanchda@users.noreply.github.com> Co-authored-by: Taegyun Kim Co-authored-by: Federico Mon Co-authored-by: Christophe Papazian Co-authored-by: Juanjo Alvarez Martinez --- ddtrace/bootstrap/preload.py | 12 ++ ddtrace/internal/core/crashtracking.py | 50 ++++++++ .../profiling/crashtracker/__init__.py | 13 +++ ddtrace/internal/runtime/__init__.py | 16 ++- ddtrace/internal/telemetry/constants.py | 11 ++ ddtrace/internal/telemetry/writer.py | 19 +++ ddtrace/settings/crashtracker.py | 25 ++-- .../crashtracker/test_crashtracker.py | 108 ++++++++++++++++++ tests/telemetry/test_telemetry.py | 16 +-- tests/telemetry/test_writer.py | 17 +++ 10 files changed, 265 insertions(+), 22 deletions(-) create mode 100644 ddtrace/internal/core/crashtracking.py diff --git a/ddtrace/bootstrap/preload.py b/ddtrace/bootstrap/preload.py index 64d5fc72edc..d400ccb581e 100644 --- a/ddtrace/bootstrap/preload.py +++ b/ddtrace/bootstrap/preload.py @@ -2,6 +2,7 @@ Bootstrapping code that is run when using the `ddtrace-run` Python entrypoint Add all monkey-patching that needs to run by default here """ + import os # noqa:I001 from ddtrace import config # noqa:F401 @@ -15,6 +16,7 @@ from ddtrace.internal.utils.formats import asbool # noqa:F401 from ddtrace.internal.utils.formats import parse_tags_str # noqa:F401 from ddtrace.settings.asm import config as asm_config # noqa:F401 +from ddtrace.settings.crashtracker import config as crashtracker_config from ddtrace.settings.symbol_db import config as symdb_config # noqa:F401 from ddtrace import tracer @@ -41,6 +43,16 @@ def register_post_preload(func: t.Callable) -> None: log = get_logger(__name__) +# DEV: We want to start the crashtracker as early as possible +if crashtracker_config.enabled: + log.debug("crashtracking enabled via environment variable") + try: + from ddtrace.internal.core import crashtracking + + crashtracking.start() + except Exception: + log.error("failed to enable crashtracking", exc_info=True) + if profiling_config.enabled: log.debug("profiler enabled via environment variable") diff --git a/ddtrace/internal/core/crashtracking.py b/ddtrace/internal/core/crashtracking.py new file mode 100644 index 00000000000..a2d81deb32a --- /dev/null +++ b/ddtrace/internal/core/crashtracking.py @@ -0,0 +1,50 @@ +from typing import Callable + +from ddtrace import config +from ddtrace import version +from ddtrace.internal import agent +from ddtrace.internal.datadog.profiling import crashtracker +from ddtrace.internal.runtime import get_runtime_id +from ddtrace.internal.runtime import on_runtime_id_change +from ddtrace.settings.crashtracker import config as crashtracker_config + + +is_available: bool = crashtracker.is_available +failure_msg: str = crashtracker.failure_msg +is_started: Callable[[], bool] = crashtracker.is_started + + +@on_runtime_id_change +def _update_runtime_id(runtime_id: str) -> None: + crashtracker.set_runtime_id(runtime_id) + + +def start() -> bool: + if not is_available: + return False + + crashtracker.set_url(crashtracker_config.debug_url or agent.get_trace_url()) + crashtracker.set_service(config.service) + crashtracker.set_version(config.version) + crashtracker.set_env(config.env) + crashtracker.set_runtime_id(get_runtime_id()) + crashtracker.set_library_version(version.get_version()) + crashtracker.set_alt_stack(bool(crashtracker_config.alt_stack)) + if crashtracker_config.stacktrace_resolver == "fast": + crashtracker.set_resolve_frames_fast() + elif crashtracker_config.stacktrace_resolver == "full": + crashtracker.set_resolve_frames_full() + elif crashtracker_config.stacktrace_resolver == "safe": + crashtracker.set_resolve_frames_safe() + else: + crashtracker.set_resolve_frames_disable() + + if crashtracker_config.stdout_filename: + crashtracker.set_stdout_filename(crashtracker_config.stdout_filename) + if crashtracker_config.stderr_filename: + crashtracker.set_stderr_filename(crashtracker_config.stderr_filename) + + # Only start if it is enabled + if crashtracker_config.enabled: + return crashtracker.start() + return False diff --git a/ddtrace/internal/datadog/profiling/crashtracker/__init__.py b/ddtrace/internal/datadog/profiling/crashtracker/__init__.py index a4a3542e18b..54d4f68f51c 100644 --- a/ddtrace/internal/datadog/profiling/crashtracker/__init__.py +++ b/ddtrace/internal/datadog/profiling/crashtracker/__init__.py @@ -4,6 +4,10 @@ failure_msg = "" +def _default_return_false(*args, **kwargs): + return False + + try: from ._crashtracker import * # noqa: F403, F401 @@ -11,3 +15,12 @@ except Exception as e: failure_msg = str(e) + + # Crashtracker is used early during startup, and so it must be robust across installations. + # Here we just stub everything. + def __getattr__(name): + if name == "failure_msg": + return failure_msg + if name == "is_available": + return False + return _default_return_false diff --git a/ddtrace/internal/runtime/__init__.py b/ddtrace/internal/runtime/__init__.py index 3ccfcfa362d..e34182aec72 100644 --- a/ddtrace/internal/runtime/__init__.py +++ b/ddtrace/internal/runtime/__init__.py @@ -9,12 +9,22 @@ ] -def _generate_runtime_id(): +def _generate_runtime_id() -> str: return uuid.uuid4().hex -_RUNTIME_ID = _generate_runtime_id() +_RUNTIME_ID: str = _generate_runtime_id() _ANCESTOR_RUNTIME_ID: t.Optional[str] = None +_ON_RUNTIME_ID_CHANGE: t.Set[t.Callable[[str], None]] = set() + + +def on_runtime_id_change(cb: t.Callable[[str], None]) -> None: + """Register a callback to be called when the runtime ID changes. + + This can happen after a fork. + """ + global _ON_RUNTIME_ID_CHANGE + _ON_RUNTIME_ID_CHANGE.add(cb) @forksafe.register @@ -26,6 +36,8 @@ def _set_runtime_id(): _ANCESTOR_RUNTIME_ID = _RUNTIME_ID _RUNTIME_ID = _generate_runtime_id() + for cb in _ON_RUNTIME_ID_CHANGE: + cb(_RUNTIME_ID) def get_runtime_id(): diff --git a/ddtrace/internal/telemetry/constants.py b/ddtrace/internal/telemetry/constants.py index 704a99725dd..e649acd32c5 100644 --- a/ddtrace/internal/telemetry/constants.py +++ b/ddtrace/internal/telemetry/constants.py @@ -70,3 +70,14 @@ TELEMETRY_INJECT_WAS_ATTEMPTED = "DD_LIB_INJECTION_ATTEMPTED" TELEMETRY_LIB_WAS_INJECTED = "DD_LIB_INJECTED" TELEMETRY_LIB_INJECTION_FORCED = "DD_INJECT_FORCE" + + +# Crashtracker +TELEMETRY_CRASHTRACKING_ENABLED = "crashtracking_enabled" # Env var enabled +TELEMETRY_CRASHTRACKING_AVAILABLE = "crashtracking_available" # Feature is available +TELEMETRY_CRASHTRACKING_STARTED = "crashtracking_started" # Crashtracking is running +TELEMETRY_CRASHTRACKING_STDOUT_FILENAME = "crashtracking_stdout_filename" +TELEMETRY_CRASHTRACKING_STDERR_FILENAME = "crashtracking_stderr_filename" +TELEMETRY_CRASHTRACKING_ALT_STACK = "crashtracking_alt_stack" +TELEMETRY_CRASHTRACKING_STACKTRACE_RESOLVER = "crashtracking_stacktrace_resolver" +TELEMETRY_CRASHTRACKING_DEBUG_URL = "crashtracking_debug_url" diff --git a/ddtrace/internal/telemetry/writer.py b/ddtrace/internal/telemetry/writer.py index e608eaede15..9ed3b383d58 100644 --- a/ddtrace/internal/telemetry/writer.py +++ b/ddtrace/internal/telemetry/writer.py @@ -16,12 +16,14 @@ from ...internal import atexit from ...internal import forksafe from ...internal.compat import parse +from ...internal.core import crashtracking from ...internal.module import BaseModuleWatchdog from ...internal.module import origin from ...internal.schema import SCHEMA_VERSION from ...internal.schema import _remove_client_service_names from ...settings import _config as config from ...settings.config import _ConfigSource +from ...settings.crashtracker import config as crashtracker_config from ...settings.dynamic_instrumentation import config as di_config from ...settings.exception_debugging import config as ed_config from ...settings.peer_service import _ps_config @@ -47,6 +49,14 @@ from .constants import TELEMETRY_AGENT_URL from .constants import TELEMETRY_ANALYTICS_ENABLED from .constants import TELEMETRY_CLIENT_IP_ENABLED +from .constants import TELEMETRY_CRASHTRACKING_ALT_STACK +from .constants import TELEMETRY_CRASHTRACKING_AVAILABLE +from .constants import TELEMETRY_CRASHTRACKING_DEBUG_URL +from .constants import TELEMETRY_CRASHTRACKING_ENABLED +from .constants import TELEMETRY_CRASHTRACKING_STACKTRACE_RESOLVER +from .constants import TELEMETRY_CRASHTRACKING_STARTED +from .constants import TELEMETRY_CRASHTRACKING_STDERR_FILENAME +from .constants import TELEMETRY_CRASHTRACKING_STDOUT_FILENAME from .constants import TELEMETRY_DOGSTATSD_PORT from .constants import TELEMETRY_DOGSTATSD_URL from .constants import TELEMETRY_DYNAMIC_INSTRUMENTATION_ENABLED @@ -510,6 +520,15 @@ def _app_started_event(self, register_app_shutdown=True): (TELEMETRY_INJECT_WAS_ATTEMPTED, config._inject_was_attempted, "unknown"), (TELEMETRY_LIB_WAS_INJECTED, config._lib_was_injected, "unknown"), (TELEMETRY_LIB_INJECTION_FORCED, config._inject_force, "unknown"), + # Crashtracker + (TELEMETRY_CRASHTRACKING_ENABLED, crashtracker_config.enabled, "unknown"), + (TELEMETRY_CRASHTRACKING_STARTED, crashtracking.is_started(), "unknown"), + (TELEMETRY_CRASHTRACKING_AVAILABLE, crashtracking.is_available, "unknown"), + (TELEMETRY_CRASHTRACKING_STACKTRACE_RESOLVER, str(crashtracker_config.stacktrace_resolver), "unknown"), + (TELEMETRY_CRASHTRACKING_STDOUT_FILENAME, str(crashtracker_config.stdout_filename), "unknown"), + (TELEMETRY_CRASHTRACKING_STDERR_FILENAME, str(crashtracker_config.stderr_filename), "unknown"), + (TELEMETRY_CRASHTRACKING_DEBUG_URL, str(crashtracker_config.debug_url), "unknown"), + (TELEMETRY_CRASHTRACKING_ALT_STACK, crashtracker_config.alt_stack, "unknown"), ] + get_python_config_vars() ) diff --git a/ddtrace/settings/crashtracker.py b/ddtrace/settings/crashtracker.py index 1d7b1dae61e..af574448f73 100644 --- a/ddtrace/settings/crashtracker.py +++ b/ddtrace/settings/crashtracker.py @@ -2,27 +2,25 @@ from envier import En -from ddtrace.internal.datadog.profiling import crashtracker - -def _derive_stacktrace_resolver(config): - # type: (CrashtrackerConfig) -> t.Optional[str] - resolver = config._stacktrace_resolver or "" +def _derive_stacktrace_resolver(config: "CrashtrackerConfig") -> t.Optional[str]: + resolver = str(config._stacktrace_resolver or "") resolver = resolver.lower() - if resolver in ("fast", "full"): + if resolver in ("fast", "full", "safe"): return resolver return None -def _check_for_crashtracker_available(): +def _check_for_crashtracker_available() -> bool: + from ddtrace.internal.datadog.profiling import crashtracker + return crashtracker.is_available -def _derive_crashtracker_enabled(config): - # type: (CrashtrackerConfig) -> bool +def _derive_crashtracker_enabled(config: "CrashtrackerConfig") -> bool: if not _check_for_crashtracker_available(): return False - return config._enabled + return bool(config._enabled) class CrashtrackerConfig(En): @@ -31,7 +29,7 @@ class CrashtrackerConfig(En): _enabled = En.v( bool, "enabled", - default=False, + default=True, help_type="Boolean", help="Enables the crashtracker", ) @@ -77,6 +75,9 @@ class CrashtrackerConfig(En): default=None, help_type="String", help="How to collect native stack traces during a crash, if at all. Accepted values are 'none', 'fast'," - " and 'full'. The default value is 'none' (no stack traces).", + " 'safe', and 'full'. The default value is 'none' (no stack traces).", ) stacktrace_resolver = En.d(t.Optional[str], _derive_stacktrace_resolver) + + +config = CrashtrackerConfig() diff --git a/tests/internal/crashtracker/test_crashtracker.py b/tests/internal/crashtracker/test_crashtracker.py index cae856f3b00..4359c57e22a 100644 --- a/tests/internal/crashtracker/test_crashtracker.py +++ b/tests/internal/crashtracker/test_crashtracker.py @@ -1,7 +1,10 @@ +import os import sys import pytest +import tests.internal.crashtracker.utils as utils + @pytest.mark.skipif(not sys.platform.startswith("linux"), reason="Linux only") @pytest.mark.subprocess() @@ -274,3 +277,108 @@ def test_crashtracker_raise_sigbus(): data = utils.conn_to_bytes(conn) conn.close() assert b"os_kill" in data + + +preload_code = """ +import ctypes +ctypes.string_at(0) +exit(-1) +""" + + +@pytest.mark.skipif(not sys.platform.startswith("linux"), reason="Linux only") +def test_crashtracker_preload_default(ddtrace_run_python_code_in_subprocess): + # Setup the listening socket before we open ddtrace + port, sock = utils.crashtracker_receiver_bind() + assert sock + + # Call the program + env = os.environ.copy() + env["DD_TRACE_AGENT_URL"] = "http://localhost:%d" % port + stdout, stderr, exitcode, _ = ddtrace_run_python_code_in_subprocess(preload_code, env=env) + + # Check for expected exit condition + assert not stdout + assert not stderr + assert exitcode == -11 # exit code for SIGSEGV + + # Wait for the connection + conn = utils.listen_get_conn(sock) + assert conn + data = utils.conn_to_bytes(conn) + assert data + + +@pytest.mark.skipif(not sys.platform.startswith("linux"), reason="Linux only") +def test_crashtracker_preload_disabled(ddtrace_run_python_code_in_subprocess): + # Setup the listening socket before we open ddtrace + port, sock = utils.crashtracker_receiver_bind() + assert sock + + # Call the program + env = os.environ.copy() + env["DD_TRACE_AGENT_URL"] = "http://localhost:%d" % port + env["DD_CRASHTRACKER_ENABLED"] = "false" + stdout, stderr, exitcode, _ = ddtrace_run_python_code_in_subprocess(preload_code, env=env) + + # Check for expected exit condition + assert not stdout + assert not stderr + assert exitcode == -11 + + # Wait for the connection, which should fail + conn = utils.listen_get_conn(sock) + assert not conn + + +auto_code = """ +import ctypes +import ddtrace.auto +ctypes.string_at(0) +exit(-1) +""" + + +@pytest.mark.skipif(not sys.platform.startswith("linux"), reason="Linux only") +def test_crashtracker_auto_default(run_python_code_in_subprocess): + # Setup the listening socket before we open ddtrace + port, sock = utils.crashtracker_receiver_bind() + assert sock + + # Call the program + env = os.environ.copy() + env["DD_TRACE_AGENT_URL"] = "http://localhost:%d" % port + stdout, stderr, exitcode, _ = run_python_code_in_subprocess(auto_code, env=env) + + # Check for expected exit condition + assert not stdout + assert not stderr + assert exitcode == -11 + + # Wait for the connection + conn = utils.listen_get_conn(sock) + assert conn + data = utils.conn_to_bytes(conn) + assert data + + +@pytest.mark.skipif(not sys.platform.startswith("linux"), reason="Linux only") +def test_crashtracker_auto_disabled(run_python_code_in_subprocess): + # Setup the listening socket before we open ddtrace + port, sock = utils.crashtracker_receiver_bind() + assert sock + + # Call the program + env = os.environ.copy() + env["DD_TRACE_AGENT_URL"] = "http://localhost:%d" % port + env["DD_CRASHTRACKER_ENABLED"] = "false" + stdout, stderr, exitcode, _ = run_python_code_in_subprocess(auto_code, env=env) + + # Check for expected exit condition + assert not stdout + assert not stderr + assert exitcode == -11 + + # Wait for the connection, which should fail + conn = utils.listen_get_conn(sock) + assert not conn diff --git a/tests/telemetry/test_telemetry.py b/tests/telemetry/test_telemetry.py index 89b08203357..beca2e7befb 100644 --- a/tests/telemetry/test_telemetry.py +++ b/tests/telemetry/test_telemetry.py @@ -322,8 +322,6 @@ def test_handled_integration_error(test_agent_session, run_python_code_in_subpro def test_unhandled_integration_error(test_agent_session, ddtrace_run_python_code_in_subprocess): - env = os.environ.copy() - env["DD_PATCH_MODULES"] = "jinja2:False,subprocess:False" code = """ import logging logging.basicConfig() @@ -335,7 +333,7 @@ def test_unhandled_integration_error(test_agent_session, ddtrace_run_python_code f.wsgi_app() """ - _, stderr, status, _ = ddtrace_run_python_code_in_subprocess(code, env=env) + _, stderr, status, _ = ddtrace_run_python_code_in_subprocess(code) assert status == 1, stderr @@ -356,11 +354,13 @@ def test_unhandled_integration_error(test_agent_session, ddtrace_run_python_code integration_events = [event for event in events if event["request_type"] == "app-integrations-change"] integrations = integration_events[0]["payload"]["integrations"] - assert len(integrations) == 1 - assert integrations[0]["enabled"] is True - assert integrations[0]["compatible"] is False - assert "ddtrace/contrib/flask/patch.py:" in integrations[0]["error"] - assert "not enough values to unpack (expected 2, got 0)" in integrations[0]["error"] + + (flask_integration,) = [integration for integration in integrations if integration["name"] == "flask"] + + assert flask_integration["enabled"] is True + assert flask_integration["compatible"] is False + assert "ddtrace/contrib/flask/patch.py:" in flask_integration["error"] + assert "not enough values to unpack (expected 2, got 0)" in flask_integration["error"] metric_events = [event for event in events if event["request_type"] == "generate-metrics"] diff --git a/tests/telemetry/test_writer.py b/tests/telemetry/test_writer.py index b4ff3b2f8f2..8e20eea845e 100644 --- a/tests/telemetry/test_writer.py +++ b/tests/telemetry/test_writer.py @@ -1,4 +1,5 @@ import os +import sys import sysconfig import time from typing import Any # noqa:F401 @@ -128,6 +129,14 @@ def test_app_started_event(telemetry_writer, test_agent_session, mock_time): {"name": "profiling_enabled", "origin": "default", "value": "false"}, {"name": "data_streams_enabled", "origin": "default", "value": "false"}, {"name": "appsec_enabled", "origin": "default", "value": "false"}, + {"name": "crashtracking_alt_stack", "origin": "unknown", "value": False}, + {"name": "crashtracking_available", "origin": "unknown", "value": sys.platform == "linux"}, + {"name": "crashtracking_debug_url", "origin": "unknown", "value": "None"}, + {"name": "crashtracking_enabled", "origin": "unknown", "value": sys.platform == "linux"}, + {"name": "crashtracking_stacktrace_resolver", "origin": "unknown", "value": "None"}, + {"name": "crashtracking_started", "origin": "unknown", "value": False}, + {"name": "crashtracking_stderr_filename", "origin": "unknown", "value": "None"}, + {"name": "crashtracking_stdout_filename", "origin": "unknown", "value": "None"}, { "name": "python_build_gnu_type", "origin": "unknown", @@ -310,6 +319,14 @@ def test_app_started_event_configuration_override( {"name": "profiling_enabled", "origin": "env_var", "value": "true"}, {"name": "data_streams_enabled", "origin": "env_var", "value": "true"}, {"name": "appsec_enabled", "origin": "env_var", "value": "true"}, + {"name": "crashtracking_alt_stack", "origin": "unknown", "value": False}, + {"name": "crashtracking_available", "origin": "unknown", "value": sys.platform == "linux"}, + {"name": "crashtracking_debug_url", "origin": "unknown", "value": "None"}, + {"name": "crashtracking_enabled", "origin": "unknown", "value": sys.platform == "linux"}, + {"name": "crashtracking_stacktrace_resolver", "origin": "unknown", "value": "None"}, + {"name": "crashtracking_started", "origin": "unknown", "value": sys.platform == "linux"}, + {"name": "crashtracking_stderr_filename", "origin": "unknown", "value": "None"}, + {"name": "crashtracking_stdout_filename", "origin": "unknown", "value": "None"}, {"name": "python_build_gnu_type", "origin": "unknown", "value": sysconfig.get_config_var("BUILD_GNU_TYPE")}, {"name": "python_host_gnu_type", "origin": "unknown", "value": sysconfig.get_config_var("HOST_GNU_TYPE")}, {"name": "python_soabi", "origin": "unknown", "value": sysconfig.get_config_var("SOABI")}, From 8ff6e5939eb382590554470eac0a70ff9ce11fdc Mon Sep 17 00:00:00 2001 From: Romain Komorn <136473744+romainkomorndatadog@users.noreply.github.com> Date: Sat, 20 Jul 2024 12:45:32 +0100 Subject: [PATCH 06/29] ci: don't let ruff fix unused imports (rule F401) (#9839) This prevents `ruff --fix` from fixing unused imports by deleting them. This avoids scenarios where `hatch run lint:fmt` can lead to broken tests (eg: tests that trigger side effects with `import ddtrace`) if someone's workflow is "run tests, then format" instead of "format, then run tests". This does not introduce possible regressions because unused imports that aren't marked with `# noqa:F401`, for example) will still fail `ruff` checks: ``` tests/internal/test_module.py:512:12: F401 `ddtrace` imported but unused ``` The only difference is that they will not automatically be deleted by [the call to `ruff --fix` in `hatch run lint:fmt`](https://github.com/DataDog/dd-trace-py/blob/a09067333cf573a0636d0107e13363d4048fbd67/hatch.toml#L47). ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [ ] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- pyproject.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index e3e8de0bd7d..85a5cd48e56 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -268,3 +268,7 @@ relative-imports-order = "furthest-to-closest" # Exclude typing stubs as vertical line spacing incompatibility with black # See: https://github.com/astral-sh/ruff/pull/6501 "*.pyi" = ["I001"] + +[tool.ruff.lint] +# Do not auto-fix unused imports (as this deletes things like import ddtrace) +unfixable = ["F401"] From 64c9b3562171c6cfe95f99027e391756ec125b88 Mon Sep 17 00:00:00 2001 From: Romain Komorn <136473744+romainkomorndatadog@users.noreply.github.com> Date: Sat, 20 Jul 2024 13:21:59 +0100 Subject: [PATCH 07/29] chore(telemetry): use enum for telemetry log levels (#9520) Makes type-checking more accurate the telemetry writer's `add_log()` method by specifying an enum. For example, improperly specifying `TELEMETRY_LOG_LEVEL.POTATO` instead of `.ERROR` would result in: ``` ddtrace/appsec/_iast/_metrics.py:77: error: "Type[TELEMETRY_LOG_LEVEL]" has no attribute "POTATO" [attr-defined] ``` This was prompted by #9349 having failures in `system-tests` due to the use of `WARNING` instead of `WARN`. The telemetry API docs currently specify: Log level|Remote collection policy ---|--- ERROR|Enabled by default, configured by environment variable `DD_TELEMETRY_LOG_COLLECTION_ENABLED` WARN|Enabled by default, configured by same environment variable as ERROR DEBUG|Can be enabled locally by the end user when asked by the support team. ## Checklist - [x] Change(s) are motivated and described in the PR description - [x] Testing strategy is described if automated tests are not included in the PR - [x] Risks are described (performance impact, potential for breakage, maintainability) - [x] Change is maintainable (easy to change, telemetry, documentation) - [x] [Library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) are followed or label `changelog/no-changelog` is set - [x] Documentation is included (in-code, generated user docs, [public corp docs](https://github.com/DataDog/documentation/)) - [x] Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) - [x] If this PR changes the public interface, I've notified `@DataDog/apm-tees`. ## Reviewer Checklist - [x] Title is accurate - [x] All changes are related to the pull request's stated goal - [x] Description motivates each change - [x] Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - [x] Testing strategy adequately addresses listed risks - [x] Change is maintainable (easy to change, telemetry, documentation) - [x] Release note makes sense to a user of the library - [x] Author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - [x] Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- ddtrace/_trace/processor/__init__.py | 5 ++-- ddtrace/appsec/_iast/_metrics.py | 3 ++- ddtrace/appsec/_metrics.py | 3 ++- ddtrace/internal/telemetry/constants.py | 10 ++++++++ ddtrace/internal/telemetry/writer.py | 5 ++-- tests/telemetry/test_telemetry_metrics.py | 31 ++++++++++++----------- 6 files changed, 36 insertions(+), 21 deletions(-) diff --git a/ddtrace/_trace/processor/__init__.py b/ddtrace/_trace/processor/__init__.py index 01d066f58c4..609a965aa16 100644 --- a/ddtrace/_trace/processor/__init__.py +++ b/ddtrace/_trace/processor/__init__.py @@ -24,6 +24,7 @@ from ddtrace.internal.sampling import SpanSamplingRule from ddtrace.internal.sampling import is_single_span_sampled from ddtrace.internal.service import ServiceStatusError +from ddtrace.internal.telemetry.constants import TELEMETRY_LOG_LEVEL from ddtrace.internal.telemetry.constants import TELEMETRY_NAMESPACE_TAG_TRACER from ddtrace.internal.writer import TraceWriter from ddtrace.sampler import BaseSampler @@ -292,7 +293,7 @@ def on_span_finish(self, span: Span) -> None: # e.g. `tracer.configure()` is called after starting a span if span.trace_id not in self._traces: log_msg = "finished span not connected to a trace" - telemetry.telemetry_writer.add_log("ERROR", log_msg) + telemetry.telemetry_writer.add_log(TELEMETRY_LOG_LEVEL.ERROR, log_msg) log.debug("%s: %s", log_msg, span) return @@ -316,7 +317,7 @@ def on_span_finish(self, span: Span) -> None: trace.num_finished -= num_finished if trace.num_finished != 0: log_msg = "unexpected finished span count" - telemetry.telemetry_writer.add_log("ERROR", log_msg) + telemetry.telemetry_writer.add_log(TELEMETRY_LOG_LEVEL.ERROR, log_msg) log.debug("%s (%s) for span %s", log_msg, num_finished, span) trace.num_finished = 0 diff --git a/ddtrace/appsec/_iast/_metrics.py b/ddtrace/appsec/_iast/_metrics.py index 521b5e5d79d..03a24466ec2 100644 --- a/ddtrace/appsec/_iast/_metrics.py +++ b/ddtrace/appsec/_iast/_metrics.py @@ -9,6 +9,7 @@ from ddtrace.appsec._deduplications import deduplication from ddtrace.internal import telemetry from ddtrace.internal.logger import get_logger +from ddtrace.internal.telemetry.constants import TELEMETRY_LOG_LEVEL from ddtrace.internal.telemetry.constants import TELEMETRY_NAMESPACE_TAG_IAST @@ -73,7 +74,7 @@ def _set_iast_error_metric(msg: Text) -> None: tags = { "lib_language": "python", } - telemetry.telemetry_writer.add_log("ERROR", msg, stack_trace=stack_trace, tags=tags) + telemetry.telemetry_writer.add_log(TELEMETRY_LOG_LEVEL.ERROR, msg, stack_trace=stack_trace, tags=tags) except Exception: log.warning("Error reporting ASM WAF logs metrics", exc_info=True) diff --git a/ddtrace/appsec/_metrics.py b/ddtrace/appsec/_metrics.py index a501f3c3259..776c25f1735 100644 --- a/ddtrace/appsec/_metrics.py +++ b/ddtrace/appsec/_metrics.py @@ -4,6 +4,7 @@ from ddtrace.appsec._deduplications import deduplication from ddtrace.internal import telemetry from ddtrace.internal.logger import get_logger +from ddtrace.internal.telemetry.constants import TELEMETRY_LOG_LEVEL from ddtrace.internal.telemetry.constants import TELEMETRY_NAMESPACE_TAG_APPSEC @@ -21,7 +22,7 @@ def _set_waf_error_metric(msg: str, stack_trace: str, info: DDWaf_info) -> None: } if info and info.version: tags["event_rules_version"] = info.version - telemetry.telemetry_writer.add_log("ERROR", msg, stack_trace=stack_trace, tags=tags) + telemetry.telemetry_writer.add_log(TELEMETRY_LOG_LEVEL.ERROR, msg, stack_trace=stack_trace, tags=tags) except Exception: log.warning("Error reporting ASM WAF logs metrics", exc_info=True) diff --git a/ddtrace/internal/telemetry/constants.py b/ddtrace/internal/telemetry/constants.py index e649acd32c5..bf79727b270 100644 --- a/ddtrace/internal/telemetry/constants.py +++ b/ddtrace/internal/telemetry/constants.py @@ -1,3 +1,6 @@ +from enum import Enum + + TELEMETRY_NAMESPACE_TAG_TRACER = "tracers" TELEMETRY_NAMESPACE_TAG_APPSEC = "appsec" TELEMETRY_NAMESPACE_TAG_IAST = "iast" @@ -6,6 +9,13 @@ TELEMETRY_TYPE_DISTRIBUTION = "distributions" TELEMETRY_TYPE_LOGS = "logs" + +class TELEMETRY_LOG_LEVEL(Enum): + DEBUG = "DEBUG" + WARNING = "WARN" + ERROR = "ERROR" + + # Configuration names must map to values supported by backend services: # https://github.com/DataDog/dd-go/blob/f88e85d64b173e7733ac03e23576d1c9be37f32e/trace/apps/tracer-telemetry-intake/telemetry-payload/static/config_norm_rules.json TELEMETRY_DYNAMIC_INSTRUMENTATION_ENABLED = "DD_DYNAMIC_INSTRUMENTATION_ENABLED" diff --git a/ddtrace/internal/telemetry/writer.py b/ddtrace/internal/telemetry/writer.py index 9ed3b383d58..1d9f3112d47 100644 --- a/ddtrace/internal/telemetry/writer.py +++ b/ddtrace/internal/telemetry/writer.py @@ -65,6 +65,7 @@ from .constants import TELEMETRY_INJECT_WAS_ATTEMPTED from .constants import TELEMETRY_LIB_INJECTION_FORCED from .constants import TELEMETRY_LIB_WAS_INJECTED +from .constants import TELEMETRY_LOG_LEVEL # noqa:F401 from .constants import TELEMETRY_OBFUSCATION_QUERY_STRING_PATTERN from .constants import TELEMETRY_OTEL_ENABLED from .constants import TELEMETRY_PARTIAL_FLUSH_ENABLED @@ -652,7 +653,7 @@ def add_configurations(self, configuration_list): } def add_log(self, level, message, stack_trace="", tags=None): - # type: (str, str, str, Optional[Dict]) -> None + # type: (TELEMETRY_LOG_LEVEL, str, str, Optional[Dict]) -> None """ Queues log. This event is meant to send library logs to Datadog’s backend through the Telemetry intake. This will make support cycles easier and ensure we know about potentially silent issues in libraries. @@ -664,7 +665,7 @@ def add_log(self, level, message, stack_trace="", tags=None): data = LogData( { "message": message, - "level": level, + "level": level.value, "tracer_time": int(time.time()), } ) diff --git a/tests/telemetry/test_telemetry_metrics.py b/tests/telemetry/test_telemetry_metrics.py index a9f46257abe..a3ea6051b8b 100644 --- a/tests/telemetry/test_telemetry_metrics.py +++ b/tests/telemetry/test_telemetry_metrics.py @@ -2,6 +2,7 @@ from mock.mock import ANY +from ddtrace.internal.telemetry.constants import TELEMETRY_LOG_LEVEL from ddtrace.internal.telemetry.constants import TELEMETRY_NAMESPACE_TAG_APPSEC from ddtrace.internal.telemetry.constants import TELEMETRY_NAMESPACE_TAG_TRACER from ddtrace.internal.telemetry.constants import TELEMETRY_TYPE_DISTRIBUTION @@ -335,10 +336,10 @@ def test_send_metric_flush_and_distributions_series_is_restarted(telemetry_write def test_send_log_metric_simple(telemetry_writer, test_agent_session, mock_time): """Check the queue of metrics is empty after run periodic method of PeriodicService""" with override_global_config(dict(_telemetry_dependency_collection=False)): - telemetry_writer.add_log("WARNING", "test error 1") + telemetry_writer.add_log(TELEMETRY_LOG_LEVEL.WARNING, "test error 1") expected_payload = [ { - "level": "WARNING", + "level": "WARN", "message": "test error 1", "tracer_time": 1642544540, }, @@ -350,10 +351,10 @@ def test_send_log_metric_simple(telemetry_writer, test_agent_session, mock_time) def test_send_log_metric_simple_tags(telemetry_writer, test_agent_session, mock_time): """Check the queue of metrics is empty after run periodic method of PeriodicService""" with override_global_config(dict(_telemetry_dependency_collection=False)): - telemetry_writer.add_log("WARNING", "test error 1", tags={"a": "b", "c": "d"}) + telemetry_writer.add_log(TELEMETRY_LOG_LEVEL.WARNING, "test error 1", tags={"a": "b", "c": "d"}) expected_payload = [ { - "level": "WARNING", + "level": "WARN", "message": "test error 1", "tracer_time": 1642544540, "tags": "a:b,c:d", @@ -366,10 +367,10 @@ def test_send_log_metric_simple_tags(telemetry_writer, test_agent_session, mock_ def test_send_multiple_log_metric(telemetry_writer, test_agent_session, mock_time): """Check the queue of metrics is empty after run periodic method of PeriodicService""" with override_global_config(dict(_telemetry_dependency_collection=False)): - telemetry_writer.add_log("WARNING", "test error 1", "Traceback:\nValueError", {"a": "b"}) + telemetry_writer.add_log(TELEMETRY_LOG_LEVEL.WARNING, "test error 1", "Traceback:\nValueError", {"a": "b"}) expected_payload = [ { - "level": "WARNING", + "level": "WARN", "message": "test error 1", "stack_trace": "Traceback:\nValueError", "tracer_time": 1642544540, @@ -379,7 +380,7 @@ def test_send_multiple_log_metric(telemetry_writer, test_agent_session, mock_tim _assert_logs(test_agent_session, expected_payload) - telemetry_writer.add_log("WARNING", "test error 1", "Traceback:\nValueError", {"a": "b"}) + telemetry_writer.add_log(TELEMETRY_LOG_LEVEL.WARNING, "test error 1", "Traceback:\nValueError", {"a": "b"}) _assert_logs(test_agent_session, expected_payload) @@ -387,11 +388,11 @@ def test_send_multiple_log_metric(telemetry_writer, test_agent_session, mock_tim def test_send_multiple_log_metric_no_duplicates(telemetry_writer, test_agent_session, mock_time): with override_global_config(dict(_telemetry_dependency_collection=False)): for _ in range(10): - telemetry_writer.add_log("WARNING", "test error 1", "Traceback:\nValueError", {"a": "b"}) + telemetry_writer.add_log(TELEMETRY_LOG_LEVEL.WARNING, "test error 1", "Traceback:\nValueError", {"a": "b"}) expected_payload = [ { - "level": "WARNING", + "level": "WARN", "message": "test error 1", "stack_trace": "Traceback:\nValueError", "tracer_time": 1642544540, @@ -405,11 +406,11 @@ def test_send_multiple_log_metric_no_duplicates(telemetry_writer, test_agent_ses def test_send_multiple_log_metric_no_duplicates_for_each_interval(telemetry_writer, test_agent_session, mock_time): with override_global_config(dict(_telemetry_dependency_collection=False)): for _ in range(10): - telemetry_writer.add_log("WARNING", "test error 1") + telemetry_writer.add_log(TELEMETRY_LOG_LEVEL.WARNING, "test error 1") expected_payload = [ { - "level": "WARNING", + "level": "WARN", "message": "test error 1", "tracer_time": 1642544540, }, @@ -418,7 +419,7 @@ def test_send_multiple_log_metric_no_duplicates_for_each_interval(telemetry_writ _assert_logs(test_agent_session, expected_payload) for _ in range(10): - telemetry_writer.add_log("WARNING", "test error 1") + telemetry_writer.add_log(TELEMETRY_LOG_LEVEL.WARNING, "test error 1") _assert_logs(test_agent_session, expected_payload) @@ -427,11 +428,11 @@ def test_send_multiple_log_metric_no_duplicates_for_each_interval_check_time(tel with override_global_config(dict(_telemetry_dependency_collection=False)): for _ in range(3): sleep(0.1) - telemetry_writer.add_log("WARNING", "test error 1") + telemetry_writer.add_log(TELEMETRY_LOG_LEVEL.WARNING, "test error 1") expected_payload = [ { - "level": "WARNING", + "level": "WARN", "message": "test error 1", "tracer_time": ANY, }, @@ -441,6 +442,6 @@ def test_send_multiple_log_metric_no_duplicates_for_each_interval_check_time(tel for _ in range(3): sleep(0.1) - telemetry_writer.add_log("WARNING", "test error 1") + telemetry_writer.add_log(TELEMETRY_LOG_LEVEL.WARNING, "test error 1") _assert_logs(test_agent_session, expected_payload) From 185076ff3d273618645db56c9acca08f5a6cd333 Mon Sep 17 00:00:00 2001 From: Juanjo Alvarez Martinez Date: Mon, 22 Jul 2024 10:53:18 +0200 Subject: [PATCH 08/29] fix: add encodings.idna to the denylist (#9873) ## Checklist - [X] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --------- Signed-off-by: Juanjo Alvarez --- ddtrace/appsec/_iast/_ast/ast_patching.py | 1 + releasenotes/notes/asm-avoid-idna-d724dce73afafa93.yaml | 4 ++++ 2 files changed, 5 insertions(+) create mode 100644 releasenotes/notes/asm-avoid-idna-d724dce73afafa93.yaml diff --git a/ddtrace/appsec/_iast/_ast/ast_patching.py b/ddtrace/appsec/_iast/_ast/ast_patching.py index f4856dd326a..22d8b345938 100644 --- a/ddtrace/appsec/_iast/_ast/ast_patching.py +++ b/ddtrace/appsec/_iast/_ast/ast_patching.py @@ -38,6 +38,7 @@ "ddsketch", "ddtrace", "encodings", # this package is used to load encodings when a module is imported, propagation is not needed + "encodings.idna", "envier", "exceptiongroup", "freezegun", # Testing utilities for time manipulation diff --git a/releasenotes/notes/asm-avoid-idna-d724dce73afafa93.yaml b/releasenotes/notes/asm-avoid-idna-d724dce73afafa93.yaml new file mode 100644 index 00000000000..58f63e5d8df --- /dev/null +++ b/releasenotes/notes/asm-avoid-idna-d724dce73afafa93.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Code Security: add encodings.idna to the IAST patching denylist to avoid problems with gevent. From 32594b54f1de2b95014db5f89cfd9792acdea309 Mon Sep 17 00:00:00 2001 From: "Gabriele N. Tornetta" Date: Mon, 22 Jul 2024 15:33:31 +0100 Subject: [PATCH 09/29] refactor: rename exception replay enablement variable (#9708) We rename the exception replay enablement variable from `DD_EXCEPTION_DEBUGGING_ENABLED` to `DD_EXCEPTION_REPLAY_ENABLED` Requires #9724. ## Checklist - [x] The PR description includes an overview of the change - [x] The PR description articulates the motivation for the change - [x] The change includes tests OR the PR description describes a testing strategy - [x] The PR description notes risks associated with the change, if any - [x] Newly-added code is easy to change - [x] The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - [x] The change includes or references documentation updates if necessary - [x] Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [ ] Title is accurate - [ ] All changes are related to the pull request's stated goal - [ ] Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - [ ] Testing strategy adequately addresses listed risks - [ ] Newly-added code is easy to change - [ ] Release note makes sense to a user of the library - [ ] If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - [ ] Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- ddtrace/bootstrap/preload.py | 6 +-- ddtrace/debugging/_config.py | 2 +- ddtrace/debugging/_debugger.py | 2 +- .../{auto_instrument.py => replay.py} | 0 ddtrace/internal/telemetry/constants.py | 2 +- ddtrace/internal/telemetry/writer.py | 6 +-- ...ption_debugging.py => exception_replay.py} | 9 ++-- docs/configuration.rst | 6 +-- ...r-enablement-env-var-12056782561eecc6.yaml | 6 +++ tests/.suitespec.json | 2 +- ...test_auto_instrument.py => test_replay.py} | 42 ++++++++++++++----- tests/debugging/mocking.py | 4 +- tests/telemetry/test_writer.py | 6 +-- 13 files changed, 60 insertions(+), 33 deletions(-) rename ddtrace/debugging/_exception/{auto_instrument.py => replay.py} (100%) rename ddtrace/settings/{exception_debugging.py => exception_replay.py} (51%) create mode 100644 releasenotes/notes/refactor-di-er-enablement-env-var-12056782561eecc6.yaml rename tests/debugging/exception/{test_auto_instrument.py => test_replay.py} (83%) diff --git a/ddtrace/bootstrap/preload.py b/ddtrace/bootstrap/preload.py index d400ccb581e..24160402174 100644 --- a/ddtrace/bootstrap/preload.py +++ b/ddtrace/bootstrap/preload.py @@ -7,7 +7,7 @@ from ddtrace import config # noqa:F401 from ddtrace.debugging._config import di_config # noqa:F401 -from ddtrace.debugging._config import ed_config # noqa:F401 +from ddtrace.debugging._config import er_config # noqa:F401 from ddtrace.settings.profiling import config as profiling_config # noqa:F401 from ddtrace.internal.logger import get_logger # noqa:F401 from ddtrace.internal.module import ModuleWatchdog # noqa:F401 @@ -71,8 +71,8 @@ def register_post_preload(func: t.Callable) -> None: DynamicInstrumentation.enable() -if ed_config.enabled: # Exception Replay - from ddtrace.debugging._exception.auto_instrument import SpanExceptionProcessor +if er_config.enabled: # Exception Replay + from ddtrace.debugging._exception.replay import SpanExceptionProcessor SpanExceptionProcessor().register() diff --git a/ddtrace/debugging/_config.py b/ddtrace/debugging/_config.py index fb7b76d0506..02fce853b66 100644 --- a/ddtrace/debugging/_config.py +++ b/ddtrace/debugging/_config.py @@ -1,6 +1,6 @@ from ddtrace.internal.logger import get_logger from ddtrace.settings.dynamic_instrumentation import config as di_config # noqa: F401 -from ddtrace.settings.exception_debugging import config as ed_config # noqa: F401 +from ddtrace.settings.exception_replay import config as er_config # noqa: F401 log = get_logger(__name__) diff --git a/ddtrace/debugging/_debugger.py b/ddtrace/debugging/_debugger.py index 341c22e6078..7370c897e62 100644 --- a/ddtrace/debugging/_debugger.py +++ b/ddtrace/debugging/_debugger.py @@ -23,7 +23,7 @@ from ddtrace import config as ddconfig from ddtrace._trace.tracer import Tracer from ddtrace.debugging._config import di_config -from ddtrace.debugging._exception.auto_instrument import SpanExceptionProcessor +from ddtrace.debugging._exception.replay import SpanExceptionProcessor from ddtrace.debugging._function.discovery import FunctionDiscovery from ddtrace.debugging._function.store import FullyNamedWrappedFunction from ddtrace.debugging._function.store import FunctionStore diff --git a/ddtrace/debugging/_exception/auto_instrument.py b/ddtrace/debugging/_exception/replay.py similarity index 100% rename from ddtrace/debugging/_exception/auto_instrument.py rename to ddtrace/debugging/_exception/replay.py diff --git a/ddtrace/internal/telemetry/constants.py b/ddtrace/internal/telemetry/constants.py index bf79727b270..73c11df1099 100644 --- a/ddtrace/internal/telemetry/constants.py +++ b/ddtrace/internal/telemetry/constants.py @@ -19,7 +19,7 @@ class TELEMETRY_LOG_LEVEL(Enum): # Configuration names must map to values supported by backend services: # https://github.com/DataDog/dd-go/blob/f88e85d64b173e7733ac03e23576d1c9be37f32e/trace/apps/tracer-telemetry-intake/telemetry-payload/static/config_norm_rules.json TELEMETRY_DYNAMIC_INSTRUMENTATION_ENABLED = "DD_DYNAMIC_INSTRUMENTATION_ENABLED" -TELEMETRY_EXCEPTION_DEBUGGING_ENABLED = "DD_EXCEPTION_DEBUGGING_ENABLED" +TELEMETRY_EXCEPTION_REPLAY_ENABLED = "DD_EXCEPTION_REPLAY_ENABLED" # Tracing Features diff --git a/ddtrace/internal/telemetry/writer.py b/ddtrace/internal/telemetry/writer.py index 1d9f3112d47..f9f6dbc729d 100644 --- a/ddtrace/internal/telemetry/writer.py +++ b/ddtrace/internal/telemetry/writer.py @@ -25,7 +25,7 @@ from ...settings.config import _ConfigSource from ...settings.crashtracker import config as crashtracker_config from ...settings.dynamic_instrumentation import config as di_config -from ...settings.exception_debugging import config as ed_config +from ...settings.exception_replay import config as er_config from ...settings.peer_service import _ps_config from ...settings.profiling import config as prof_config from ..agent import get_connection @@ -61,7 +61,7 @@ from .constants import TELEMETRY_DOGSTATSD_URL from .constants import TELEMETRY_DYNAMIC_INSTRUMENTATION_ENABLED from .constants import TELEMETRY_ENABLED -from .constants import TELEMETRY_EXCEPTION_DEBUGGING_ENABLED +from .constants import TELEMETRY_EXCEPTION_REPLAY_ENABLED from .constants import TELEMETRY_INJECT_WAS_ATTEMPTED from .constants import TELEMETRY_LIB_INJECTION_FORCED from .constants import TELEMETRY_LIB_WAS_INJECTED @@ -463,7 +463,7 @@ def _app_started_event(self, register_app_shutdown=True): inst_config_id_entry, (TELEMETRY_STARTUP_LOGS_ENABLED, config._startup_logs_enabled, "unknown"), (TELEMETRY_DYNAMIC_INSTRUMENTATION_ENABLED, di_config.enabled, "unknown"), - (TELEMETRY_EXCEPTION_DEBUGGING_ENABLED, ed_config.enabled, "unknown"), + (TELEMETRY_EXCEPTION_REPLAY_ENABLED, er_config.enabled, "unknown"), (TELEMETRY_PROPAGATION_STYLE_INJECT, ",".join(config._propagation_style_inject), "unknown"), (TELEMETRY_PROPAGATION_STYLE_EXTRACT, ",".join(config._propagation_style_extract), "unknown"), ("ddtrace_bootstrapped", config._ddtrace_bootstrapped, "unknown"), diff --git a/ddtrace/settings/exception_debugging.py b/ddtrace/settings/exception_replay.py similarity index 51% rename from ddtrace/settings/exception_debugging.py rename to ddtrace/settings/exception_replay.py index 7329e97bf6a..d85e38b1fad 100644 --- a/ddtrace/settings/exception_debugging.py +++ b/ddtrace/settings/exception_replay.py @@ -1,16 +1,17 @@ from envier import En -class ExceptionDebuggingConfig(En): - __prefix__ = "dd.exception_debugging" +class ExceptionReplayConfig(En): + __prefix__ = "dd.exception" enabled = En.v( bool, - "enabled", + "replay.enabled", default=False, help_type="Boolean", help="Enable automatic capturing of exception debugging information", + deprecations=[("debugging.enabled", None, "3.0")], ) -config = ExceptionDebuggingConfig() +config = ExceptionReplayConfig() diff --git a/docs/configuration.rst b/docs/configuration.rst index 3b2056d9b55..634ffb32ecf 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -663,7 +663,7 @@ Dynamic Instrumentation .. ddtrace-envier-configuration:: ddtrace.settings.dynamic_instrumentation:DynamicInstrumentationConfig -Exception Debugging -------------------- +Exception Replay +---------------- -.. ddtrace-envier-configuration:: ddtrace.settings.exception_debugging:ExceptionDebuggingConfig +.. ddtrace-envier-configuration:: ddtrace.settings.exception_replay:ExceptionReplayConfig diff --git a/releasenotes/notes/refactor-di-er-enablement-env-var-12056782561eecc6.yaml b/releasenotes/notes/refactor-di-er-enablement-env-var-12056782561eecc6.yaml new file mode 100644 index 00000000000..82302a47ba1 --- /dev/null +++ b/releasenotes/notes/refactor-di-er-enablement-env-var-12056782561eecc6.yaml @@ -0,0 +1,6 @@ +--- +deprecations: + - | + exception replay: The ``DD_EXCEPTION_DEBUGGING_ENABLED`` environment + variable has been deprecated in favor of ``DD_EXCEPTION_REPLAY_ENABLED``. + The old environment variable will be removed in a future major release. diff --git a/tests/.suitespec.json b/tests/.suitespec.json index 0dff5add577..c22772ce599 100644 --- a/tests/.suitespec.json +++ b/tests/.suitespec.json @@ -168,7 +168,7 @@ "debugging": [ "ddtrace/debugging/*", "ddtrace/settings/dynamic_instrumentation.py", - "ddtrace/settings/exception_debugging.py" + "ddtrace/settings/exception_replay.py" ], "ci": [ "ddtrace/ext/ci.py" diff --git a/tests/debugging/exception/test_auto_instrument.py b/tests/debugging/exception/test_replay.py similarity index 83% rename from tests/debugging/exception/test_auto_instrument.py rename to tests/debugging/exception/test_replay.py index d2f408fd8c6..c87670bafc6 100644 --- a/tests/debugging/exception/test_auto_instrument.py +++ b/tests/debugging/exception/test_replay.py @@ -3,26 +3,46 @@ import pytest import ddtrace -import ddtrace.debugging._exception.auto_instrument as auto_instrument +from ddtrace.debugging._exception import replay from ddtrace.internal.packages import _third_party_packages from ddtrace.internal.rate_limiter import BudgetRateLimiterWithJitter as RateLimiter -from tests.debugging.mocking import exception_debugging +from ddtrace.settings.exception_replay import ExceptionReplayConfig +from tests.debugging.mocking import exception_replay from tests.utils import TracerTestCase +def test_exception_replay_config_enabled(monkeypatch): + monkeypatch.setenv("DD_EXCEPTION_REPLAY_ENABLED", "1") + + er_config = ExceptionReplayConfig() + assert er_config.enabled + + +def test_exception_replay_config_enabled_deprecated(monkeypatch): + monkeypatch.setenv("DD_EXCEPTION_DEBUGGING_ENABLED", "1") + + er_config = ExceptionReplayConfig() + assert er_config.enabled + + monkeypatch.setenv("DD_EXCEPTION_REPLAY_ENABLED", "false") + + er_config = ExceptionReplayConfig() + assert not er_config.enabled + + @contextmanager def with_rate_limiter(limiter): - original_limiter = auto_instrument.GLOBAL_RATE_LIMITER - mocked = auto_instrument.GLOBAL_RATE_LIMITER = limiter + original_limiter = replay.GLOBAL_RATE_LIMITER + mocked = replay.GLOBAL_RATE_LIMITER = limiter yield mocked - auto_instrument.GLOBAL_RATE_LIMITER = original_limiter + replay.GLOBAL_RATE_LIMITER = original_limiter -class ExceptionDebuggingTestCase(TracerTestCase): +class ExceptionReplayTestCase(TracerTestCase): def setUp(self): - super(ExceptionDebuggingTestCase, self).setUp() + super(ExceptionReplayTestCase, self).setUp() self.backup_tracer = ddtrace.tracer ddtrace.tracer = self.tracer _third_party_packages().remove("ddtrace") @@ -30,9 +50,9 @@ def setUp(self): def tearDown(self): _third_party_packages().add("ddtrace") ddtrace.tracer = self.backup_tracer - super(ExceptionDebuggingTestCase, self).tearDown() + super(ExceptionReplayTestCase, self).tearDown() - def test_debugger_exception_debugging(self): + def test_debugger_exception_replay(self): def a(v, d=None): with self.trace("a"): if not v: @@ -48,7 +68,7 @@ def c(foo=42): sh = 3 b(foo << sh) - with exception_debugging() as uploader: + with exception_replay() as uploader: with with_rate_limiter(RateLimiter(limit_rate=1, raise_on_exceed=False)): with pytest.raises(ValueError): c() @@ -107,7 +127,7 @@ def c(foo=42): sh = 3 b_chain(foo << sh) - with exception_debugging() as uploader: + with exception_replay() as uploader: rate_limiter = RateLimiter( limit_rate=0.1, # one trace per second tau=10, diff --git a/tests/debugging/mocking.py b/tests/debugging/mocking.py index 6a1d1da2f9b..249b5794307 100644 --- a/tests/debugging/mocking.py +++ b/tests/debugging/mocking.py @@ -10,7 +10,7 @@ from ddtrace.debugging._config import di_config from ddtrace.debugging._debugger import Debugger -from ddtrace.debugging._exception.auto_instrument import SpanExceptionProcessor +from ddtrace.debugging._exception.replay import SpanExceptionProcessor from ddtrace.debugging._probe.model import Probe from ddtrace.debugging._probe.remoteconfig import ProbePollerEvent from ddtrace.debugging._probe.remoteconfig import _filter_by_env_and_version @@ -201,7 +201,7 @@ class MockSpanExceptionProcessor(SpanExceptionProcessor): @contextmanager -def exception_debugging(**config_overrides: Any) -> Generator[MockLogsIntakeUploaderV1, None, None]: +def exception_replay(**config_overrides: Any) -> Generator[MockLogsIntakeUploaderV1, None, None]: processor = MockSpanExceptionProcessor() processor.register() try: diff --git a/tests/telemetry/test_writer.py b/tests/telemetry/test_writer.py index 8e20eea845e..ae1959f65e5 100644 --- a/tests/telemetry/test_writer.py +++ b/tests/telemetry/test_writer.py @@ -73,7 +73,7 @@ def test_app_started_event(telemetry_writer, test_agent_session, mock_time): {"name": "DD_DOGSTATSD_PORT", "origin": "unknown", "value": None}, {"name": "DD_DOGSTATSD_URL", "origin": "unknown", "value": None}, {"name": "DD_DYNAMIC_INSTRUMENTATION_ENABLED", "origin": "unknown", "value": False}, - {"name": "DD_EXCEPTION_DEBUGGING_ENABLED", "origin": "unknown", "value": False}, + {"name": "DD_EXCEPTION_REPLAY_ENABLED", "origin": "unknown", "value": False}, {"name": "DD_INSTRUMENTATION_TELEMETRY_ENABLED", "origin": "unknown", "value": True}, {"name": "DD_PRIORITY_SAMPLING", "origin": "unknown", "value": True}, {"name": "DD_PROFILING_STACK_ENABLED", "origin": "unknown", "value": True}, @@ -198,7 +198,7 @@ def test_app_started_event_configuration_override( env = os.environ.copy() # Change configuration default values - env["DD_EXCEPTION_DEBUGGING_ENABLED"] = "True" + env["DD_EXCEPTION_REPLAY_ENABLED"] = "True" env["DD_INSTRUMENTATION_TELEMETRY_ENABLED"] = "True" env["DD_TRACE_STARTUP_LOGS"] = "True" env["DD_LOGS_INJECTION"] = "True" @@ -270,7 +270,7 @@ def test_app_started_event_configuration_override( {"name": "DD_DOGSTATSD_PORT", "origin": "unknown", "value": None}, {"name": "DD_DOGSTATSD_URL", "origin": "unknown", "value": None}, {"name": "DD_DYNAMIC_INSTRUMENTATION_ENABLED", "origin": "unknown", "value": False}, - {"name": "DD_EXCEPTION_DEBUGGING_ENABLED", "origin": "unknown", "value": True}, + {"name": "DD_EXCEPTION_REPLAY_ENABLED", "origin": "unknown", "value": True}, {"name": "DD_INSTRUMENTATION_TELEMETRY_ENABLED", "origin": "unknown", "value": True}, {"name": "DD_PRIORITY_SAMPLING", "origin": "unknown", "value": False}, {"name": "DD_PROFILING_STACK_ENABLED", "origin": "unknown", "value": False}, From db549c277d30be5a76c1aa78fad9df5430f42554 Mon Sep 17 00:00:00 2001 From: hollyyzhuang Date: Mon, 22 Jul 2024 11:44:02 -0400 Subject: [PATCH 10/29] feat(llmobs): improved support for LLM tool calls (#9818) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit What does this PR do? - Previously, LLM tool calling responses (provided by OpenAI/Anthropic) are stored in the `output.messages.%.content` field and sent to EVP. However, the LLM tool calling responses are formatted in string, which is not so readable when displaying `output.messages.%.content`. - Example of bad display: Screenshot 2024-07-17 at 10 18 21 AM - To support better UI for tool call messages, a new subfield is added in the message data structure in the span EVP intake to support storing tool call information rather than relying on the same `output.messages.%.content` field. - To reflect this backend change, the code for ddtrace llmobs is updated: 1). parse the tool call information from LLMs and store in a single JSON dictionary, which was previously a string 2). instead of saving this info in `content`, it will be saved in a new field `tool_calls`, which will then be sent to EVP. - The new field `tool_calls` stores `tool_calls_info`, which is a list of JSON dictionary (`tool_call_info`) because sometimes the LLM tool calling responses can contain more than 1 tool calls. The structure of `tool_call_info` is standardized across providers: name (string), argument (dictionary), tool_id (string), and type (string). - Screenshot 2024-07-17 at 10 29 05 AM ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --------- Co-authored-by: Yun Kim <35776586+Yun-Kim@users.noreply.github.com> --- ddtrace/llmobs/_integrations/anthropic.py | 37 +++++--- ddtrace/llmobs/_integrations/openai.py | 30 ++++-- ...put-openai-anthropic-f59f6ef816589cf8.yaml | 5 + ...on_tools_call_with_tool_result_stream.yaml | 2 +- ...s_call_with_tool_result_stream_helper.yaml | 2 +- .../anthropic_completion_tools_stream.yaml | 2 +- ...hropic_completion_tools_stream_helper.yaml | 2 +- .../anthropic/test_anthropic_llmobs.py | 69 +++++++++++--- tests/contrib/openai/test_openai_llmobs.py | 93 ++++++++++++++----- 9 files changed, 184 insertions(+), 58 deletions(-) create mode 100644 releasenotes/notes/change-tool-call-output-openai-anthropic-f59f6ef816589cf8.yaml diff --git a/ddtrace/llmobs/_integrations/anthropic.py b/ddtrace/llmobs/_integrations/anthropic.py index ace7baa52d9..52c9344863c 100644 --- a/ddtrace/llmobs/_integrations/anthropic.py +++ b/ddtrace/llmobs/_integrations/anthropic.py @@ -117,11 +117,19 @@ def _extract_input_message(self, messages, system_prompt=None): input_messages.append({"content": "([IMAGE DETECTED])", "role": role}) elif _get_attr(block, "type", None) == "tool_use": - name = _get_attr(block, "name", "") - inputs = _get_attr(block, "input", "") - input_messages.append( - {"content": "[tool: {}]\n\n{}".format(name, json.dumps(inputs)), "role": role} - ) + text = _get_attr(block, "text", None) + input_data = _get_attr(block, "input", "") + if isinstance(input_data, str): + input_data = json.loads(input_data) + tool_call_info = { + "name": _get_attr(block, "name", ""), + "arguments": input_data, + "tool_id": _get_attr(block, "id", ""), + "type": _get_attr(block, "type", ""), + } + if text is None: + text = "" + input_messages.append({"content": text, "role": role, "tool_calls": [tool_call_info]}) elif _get_attr(block, "type", None) == "tool_result": content = _get_attr(block, "content", None) @@ -143,7 +151,7 @@ def _extract_input_message(self, messages, system_prompt=None): def _extract_output_message(self, response): """Extract output messages from the stored response.""" output_messages = [] - content = _get_attr(response, "content", None) + content = _get_attr(response, "content", "") role = _get_attr(response, "role", "") if isinstance(content, str): @@ -156,11 +164,18 @@ def _extract_output_message(self, response): output_messages.append({"content": text, "role": role}) else: if _get_attr(completion, "type", None) == "tool_use": - name = _get_attr(completion, "name", "") - inputs = _get_attr(completion, "input", "") - output_messages.append( - {"content": "[tool: {}]\n\n{}".format(name, json.dumps(inputs)), "role": role} - ) + input_data = _get_attr(completion, "input", "") + if isinstance(input_data, str): + input_data = json.loads(input_data) + tool_call_info = { + "name": _get_attr(completion, "name", ""), + "arguments": input_data, + "tool_id": _get_attr(completion, "id", ""), + "type": _get_attr(completion, "type", ""), + } + if text is None: + text = "" + output_messages.append({"content": text, "role": role, "tool_calls": [tool_call_info]}) return output_messages def record_usage(self, span: Span, usage: Dict[str, Any]) -> None: diff --git a/ddtrace/llmobs/_integrations/openai.py b/ddtrace/llmobs/_integrations/openai.py index f1ce88043cd..1344c1ea84a 100644 --- a/ddtrace/llmobs/_integrations/openai.py +++ b/ddtrace/llmobs/_integrations/openai.py @@ -206,20 +206,32 @@ def _llmobs_set_meta_tags_from_chat( return output_messages = [] for idx, choice in enumerate(resp.choices): + tool_calls_info = [] content = getattr(choice.message, "content", "") if getattr(choice.message, "function_call", None): - content = "[function: {}]\n\n{}".format( - getattr(choice.message.function_call, "name", ""), - getattr(choice.message.function_call, "arguments", ""), + function_call_info = { + "name": getattr(choice.message.function_call, "name", ""), + "arguments": json.loads(getattr(choice.message.function_call, "arguments", "")), + } + if content is None: + content = "" + output_messages.append( + {"content": content, "role": choice.message.role, "tool_calls": [function_call_info]} ) elif getattr(choice.message, "tool_calls", None): - content = "" for tool_call in choice.message.tool_calls: - content += "\n[tool: {}]\n\n{}\n".format( - getattr(tool_call.function, "name", ""), - getattr(tool_call.function, "arguments", ""), - ) - output_messages.append({"content": str(content).strip(), "role": choice.message.role}) + tool_call_info = { + "name": getattr(tool_call.function, "name", ""), + "arguments": json.loads(getattr(tool_call.function, "arguments", "")), + "tool_id": getattr(tool_call, "id", ""), + "type": getattr(tool_call, "type", ""), + } + tool_calls_info.append(tool_call_info) + if content is None: + content = "" + output_messages.append({"content": content, "role": choice.message.role, "tool_calls": tool_calls_info}) + else: + output_messages.append({"content": content, "role": choice.message.role}) span.set_tag_str(OUTPUT_MESSAGES, json.dumps(output_messages)) @staticmethod diff --git a/releasenotes/notes/change-tool-call-output-openai-anthropic-f59f6ef816589cf8.yaml b/releasenotes/notes/change-tool-call-output-openai-anthropic-f59f6ef816589cf8.yaml new file mode 100644 index 00000000000..90b4c7f62d1 --- /dev/null +++ b/releasenotes/notes/change-tool-call-output-openai-anthropic-f59f6ef816589cf8.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + LLM Observability: This introduces improved support for capturing tool + call responses from the OpenAI and Anthropic integrations. diff --git a/tests/contrib/anthropic/cassettes/anthropic_completion_tools_call_with_tool_result_stream.yaml b/tests/contrib/anthropic/cassettes/anthropic_completion_tools_call_with_tool_result_stream.yaml index a10ac849678..1d7b9a3bd7e 100644 --- a/tests/contrib/anthropic/cassettes/anthropic_completion_tools_call_with_tool_result_stream.yaml +++ b/tests/contrib/anthropic/cassettes/anthropic_completion_tools_call_with_tool_result_stream.yaml @@ -9,7 +9,7 @@ interactions: are needed, as the get_weather tool should provide a complete answer to the user''s question.\n", "type": "text"}, {"id": "toolu_01UiyhG7tywQKaqdgxyqa8z9", "input": {"location": "San Francisco, CA"}, "name": "get_weather", "type": "tool_use"}]}, - {"role": "user", "content": [{"type": "tool_result", "tool_use_id": "toolu_01UiyhG7tywQKaqdgxyqa8z9", + {"role": "user", "content": [{"type": "tool_result", "tool_use_id": "toolu_01DYJo37oETVsCdLTTcCWcdq", "content": [{"type": "text", "text": "The weather is 73f"}]}]}], "model": "claude-3-opus-20240229", "stream": true, "tools": [{"name": "get_weather", "description": "Get the weather for a specific location", "input_schema": {"type": "object", "properties": {"location": diff --git a/tests/contrib/anthropic/cassettes/anthropic_completion_tools_call_with_tool_result_stream_helper.yaml b/tests/contrib/anthropic/cassettes/anthropic_completion_tools_call_with_tool_result_stream_helper.yaml index 44007688927..d385add8c54 100644 --- a/tests/contrib/anthropic/cassettes/anthropic_completion_tools_call_with_tool_result_stream_helper.yaml +++ b/tests/contrib/anthropic/cassettes/anthropic_completion_tools_call_with_tool_result_stream_helper.yaml @@ -9,7 +9,7 @@ interactions: are needed, as the get_weather tool should provide a complete answer to the user''s question.\n", "type": "text"}, {"id": "toolu_01UiyhG7tywQKaqdgxyqa8z9", "input": {"location": "San Francisco, CA"}, "name": "get_weather", "type": "tool_use"}]}, - {"role": "user", "content": [{"type": "tool_result", "tool_use_id": "toolu_01UiyhG7tywQKaqdgxyqa8z9", + {"role": "user", "content": [{"type": "tool_result", "tool_use_id": "toolu_01DYJo37oETVsCdLTTcCWcdq", "content": [{"type": "text", "text": "The weather is 73f"}]}]}], "model": "claude-3-opus-20240229", "tools": [{"name": "get_weather", "description": "Get the weather for a specific location", "input_schema": {"type": "object", "properties": {"location": {"type": diff --git a/tests/contrib/anthropic/cassettes/anthropic_completion_tools_stream.yaml b/tests/contrib/anthropic/cassettes/anthropic_completion_tools_stream.yaml index a82b60f09c2..2267f62a274 100644 --- a/tests/contrib/anthropic/cassettes/anthropic_completion_tools_stream.yaml +++ b/tests/contrib/anthropic/cassettes/anthropic_completion_tools_stream.yaml @@ -475,7 +475,7 @@ interactions: event: content_block_start - data: {"type":"content_block_start","index":1,"content_block":{"type":"tool_use","id":"toolu_01LktqwpwQ8XKE8D17BffC65","name":"get_weather","input":{}} } + data: {"type":"content_block_start","index":1,"content_block":{"type":"tool_use","id":"toolu_01DYJo37oETVsCdLTTcCWcdq","name":"get_weather","input":{}} } event: content_block_delta diff --git a/tests/contrib/anthropic/cassettes/anthropic_completion_tools_stream_helper.yaml b/tests/contrib/anthropic/cassettes/anthropic_completion_tools_stream_helper.yaml index c8f8f0f1b0f..7d59d991a6e 100644 --- a/tests/contrib/anthropic/cassettes/anthropic_completion_tools_stream_helper.yaml +++ b/tests/contrib/anthropic/cassettes/anthropic_completion_tools_stream_helper.yaml @@ -547,7 +547,7 @@ interactions: event: content_block_start - data: {"type":"content_block_start","index":1,"content_block":{"type":"tool_use","id":"toolu_01UiyhG7tywQKaqdgxyqa8z9","name":"get_weather","input":{}} } + data: {"type":"content_block_start","index":1,"content_block":{"type":"tool_use","id":"toolu_01DYJo37oETVsCdLTTcCWcdq","name":"get_weather","input":{}} } event: content_block_delta diff --git a/tests/contrib/anthropic/test_anthropic_llmobs.py b/tests/contrib/anthropic/test_anthropic_llmobs.py index 1bf50d2bf3f..77de13f18e1 100644 --- a/tests/contrib/anthropic/test_anthropic_llmobs.py +++ b/tests/contrib/anthropic/test_anthropic_llmobs.py @@ -14,7 +14,14 @@ parameter. The user has provided the location of "San Francisco, CA" in their question, so we have \ the necessary information to make the API call.\n\nNo other tools are needed to answer this question. \ We can proceed with calling the get_weather tool with the provided location.\n' -WEATHER_OUTPUT_MESSAGE_2 = '[tool: get_weather]\n\n{"location": "San Francisco, CA"}' +WEATHER_OUTPUT_MESSAGE_2_TOOL_CALL = [ + { + "name": "get_weather", + "arguments": {"location": "San Francisco, CA"}, + "tool_id": "toolu_01DYJo37oETVsCdLTTcCWcdq", + "type": "tool_use", + } +] WEATHER_OUTPUT_MESSAGE_3 = "Based on the result from the get_weather tool, the current weather in San \ Francisco, CA is 73°F." @@ -150,7 +157,10 @@ def test_stream(self, anthropic, ddtrace_global_config, mock_llmobs_writer, mock }, ], output_messages=[ - {"content": 'The phrase "I think, therefore I am" (originally in Latin as', "role": "assistant"} + { + "content": 'The phrase "I think, therefore I am" (originally in Latin as', + "role": "assistant", + } ], metadata={"temperature": 0.8, "max_tokens": 15.0}, token_metrics={"input_tokens": 27, "output_tokens": 15, "total_tokens": 42}, @@ -300,7 +310,11 @@ def test_tools_sync(self, anthropic, ddtrace_global_config, mock_llmobs_writer, "content": WEATHER_OUTPUT_MESSAGE_1, "role": "assistant", }, - {"content": WEATHER_OUTPUT_MESSAGE_2, "role": "assistant"}, + { + "content": "", + "role": "assistant", + "tool_calls": WEATHER_OUTPUT_MESSAGE_2_TOOL_CALL, + }, ], metadata={"max_tokens": 200.0}, token_metrics={"input_tokens": 599, "output_tokens": 152, "total_tokens": 751}, @@ -346,7 +360,7 @@ def test_tools_sync(self, anthropic, ddtrace_global_config, mock_llmobs_writer, "content": WEATHER_OUTPUT_MESSAGE_1, "role": "assistant", }, - {"content": WEATHER_OUTPUT_MESSAGE_2, "role": "assistant"}, + {"content": "", "role": "assistant", "tool_calls": WEATHER_OUTPUT_MESSAGE_2_TOOL_CALL}, {"content": ["The weather is 73f"], "role": "user"}, ], output_messages=[ @@ -392,7 +406,11 @@ async def test_tools_async(self, anthropic, ddtrace_global_config, mock_llmobs_w "content": WEATHER_OUTPUT_MESSAGE_1, "role": "assistant", }, - {"content": WEATHER_OUTPUT_MESSAGE_2, "role": "assistant"}, + { + "content": "", + "role": "assistant", + "tool_calls": WEATHER_OUTPUT_MESSAGE_2_TOOL_CALL, + }, ], metadata={"max_tokens": 200.0}, token_metrics={"input_tokens": 599, "output_tokens": 152, "total_tokens": 751}, @@ -438,7 +456,7 @@ async def test_tools_async(self, anthropic, ddtrace_global_config, mock_llmobs_w "content": WEATHER_OUTPUT_MESSAGE_1, "role": "assistant", }, - {"content": WEATHER_OUTPUT_MESSAGE_2, "role": "assistant"}, + {"content": "", "role": "assistant", "tool_calls": WEATHER_OUTPUT_MESSAGE_2_TOOL_CALL}, {"content": ["The weather is 73f"], "role": "user"}, ], output_messages=[ @@ -481,7 +499,7 @@ def test_tools_sync_stream(self, anthropic, ddtrace_global_config, mock_llmobs_w + " the location is fully specified. We can proceed with calling the get_weather tool.\n", "type": "text", }, - {"text": WEATHER_OUTPUT_MESSAGE_2, "type": "text"}, + {"text": WEATHER_OUTPUT_MESSAGE_2_TOOL_CALL, "type": "text"}, ] traces = mock_tracer.pop_traces() @@ -494,7 +512,18 @@ def test_tools_sync_stream(self, anthropic, ddtrace_global_config, mock_llmobs_w input_messages=[{"content": WEATHER_PROMPT, "role": "user"}], output_messages=[ {"content": message[0]["text"], "role": "assistant"}, - {"content": message[1]["text"], "role": "assistant"}, + { + "content": "", + "role": "assistant", + "tool_calls": [ + { + "name": "get_weather", + "arguments": {"location": "San Francisco, CA"}, + "tool_id": "", + "type": "tool_use", + } + ], + }, ], metadata={"max_tokens": 200.0}, token_metrics={"input_tokens": 599, "output_tokens": 135, "total_tokens": 734}, @@ -514,7 +543,7 @@ def test_tools_sync_stream(self, anthropic, ddtrace_global_config, mock_llmobs_w "content": [ { "type": "tool_result", - "tool_use_id": "toolu_01LktqwpwQ8XKE8D17BffC65", + "tool_use_id": "toolu_01DYJo37oETVsCdLTTcCWcdq", "content": [{"type": "text", "text": "The weather is 73f"}], } ], @@ -588,7 +617,18 @@ async def test_tools_async_stream_helper( input_messages=[{"content": WEATHER_PROMPT, "role": "user"}], output_messages=[ {"content": message.content[0].text, "role": "assistant"}, - {"content": WEATHER_OUTPUT_MESSAGE_2, "role": "assistant"}, + { + "content": "", + "role": "assistant", + "tool_calls": [ + { + "name": "get_weather", + "arguments": {"location": "San Francisco, CA"}, + "tool_id": "", + "type": "tool_use", + } + ], + }, ], metadata={"max_tokens": 200.0}, token_metrics={"input_tokens": 599, "output_tokens": 146, "total_tokens": 745}, @@ -608,7 +648,7 @@ async def test_tools_async_stream_helper( "content": [ { "type": "tool_result", - "tool_use_id": "toolu_01UiyhG7tywQKaqdgxyqa8z9", + "tool_use_id": "toolu_01DYJo37oETVsCdLTTcCWcdq", "content": [{"type": "text", "text": "The weather is 73f"}], } ], @@ -636,11 +676,14 @@ async def test_tools_async_stream_helper( input_messages=[ {"content": WEATHER_PROMPT, "role": "user"}, {"content": message.content[0].text, "role": "assistant"}, - {"content": WEATHER_OUTPUT_MESSAGE_2, "role": "assistant"}, + {"content": "", "role": "assistant", "tool_calls": WEATHER_OUTPUT_MESSAGE_2_TOOL_CALL}, {"content": ["The weather is 73f"], "role": "user"}, ], output_messages=[ - {"content": "\n\nThe current weather in San Francisco, CA is 73°F.", "role": "assistant"} + { + "content": "\n\nThe current weather in San Francisco, CA is 73°F.", + "role": "assistant", + } ], metadata={"max_tokens": 500.0}, token_metrics={"input_tokens": 762, "output_tokens": 18, "total_tokens": 780}, diff --git a/tests/contrib/openai/test_openai_llmobs.py b/tests/contrib/openai/test_openai_llmobs.py index 2ffde2882e2..1578acfd092 100644 --- a/tests/contrib/openai/test_openai_llmobs.py +++ b/tests/contrib/openai/test_openai_llmobs.py @@ -154,10 +154,22 @@ def test_chat_completion_function_call(self, openai, ddtrace_global_config, mock function_call="auto", user="ddtrace-test", ) - expected_output = "[function: {}]\n\n{}".format( - resp.choices[0].message.function_call.name, - resp.choices[0].message.function_call.arguments, - ) + expected_output = { + "content": "", + "role": "assistant", + "tool_calls": [ + { + "name": "extract_student_info", + "arguments": { + "name": "David Nguyen", + "major": "computer science", + "school": "Stanford University", + "grades": 3.8, + "clubs": ["Chess Club", "South Asian Student Association"], + }, + } + ], + } span = mock_tracer.pop_traces()[0][0] assert mock_llmobs_writer.enqueue.call_count == 1 mock_llmobs_writer.enqueue.assert_called_with( @@ -166,7 +178,7 @@ def test_chat_completion_function_call(self, openai, ddtrace_global_config, mock model_name=resp.model, model_provider="openai", input_messages=[{"content": chat_completion_input_description, "role": "user"}], - output_messages=[{"content": expected_output, "role": "assistant"}], + output_messages=[expected_output], metadata={"function_call": "auto", "user": "ddtrace-test"}, token_metrics={"input_tokens": 157, "output_tokens": 57, "total_tokens": 214}, tags={"ml_app": ""}, @@ -222,7 +234,24 @@ def test_chat_completion_tool_call(self, openai, ddtrace_global_config, mock_llm tool_choice="auto", user="ddtrace-test", ) - expected_output = '[tool: extract_student_info]\n\n{\n "name": "David Nguyen",\n "major": "computer science",\n "school": "Stanford University",\n "grades": 3.8,\n "clubs": ["Chess Club", "South Asian Student Association"]\n}' # noqa: E501 + expected_output = { + "content": "", + "role": "assistant", + "tool_calls": [ + { + "name": "extract_student_info", + "arguments": { + "name": "David Nguyen", + "major": "computer science", + "school": "Stanford University", + "grades": 3.8, + "clubs": ["Chess Club", "South Asian Student Association"], + }, + "tool_id": "call_ukwJcJsOt7gOrv9xGRAntkZQ", + "type": "function", + } + ], + } span = mock_tracer.pop_traces()[0][0] assert mock_llmobs_writer.enqueue.call_count == 1 mock_llmobs_writer.enqueue.assert_called_with( @@ -231,7 +260,7 @@ def test_chat_completion_tool_call(self, openai, ddtrace_global_config, mock_llm model_name=resp.model, model_provider="openai", input_messages=[{"content": chat_completion_input_description, "role": "user"}], - output_messages=[{"content": expected_output, "role": "assistant"}], + output_messages=[expected_output], metadata={"tool_choice": "auto", "user": "ddtrace-test"}, token_metrics={"input_tokens": 157, "output_tokens": 57, "total_tokens": 214}, tags={"ml_app": ""}, @@ -462,10 +491,22 @@ def test_chat_completion_function_call(self, openai, ddtrace_global_config, mock function_call="auto", user="ddtrace-test", ) - expected_output = "[function: {}]\n\n{}".format( - resp.choices[0].message.function_call.name, - resp.choices[0].message.function_call.arguments, - ) + expected_output = { + "content": "", + "role": "assistant", + "tool_calls": [ + { + "name": "extract_student_info", + "arguments": { + "name": "David Nguyen", + "major": "computer science", + "school": "Stanford University", + "grades": 3.8, + "clubs": ["Chess Club", "South Asian Student Association"], + }, + } + ], + } span = mock_tracer.pop_traces()[0][0] assert mock_llmobs_writer.enqueue.call_count == 1 mock_llmobs_writer.enqueue.assert_called_with( @@ -474,7 +515,7 @@ def test_chat_completion_function_call(self, openai, ddtrace_global_config, mock model_name=resp.model, model_provider="openai", input_messages=[{"content": chat_completion_input_description, "role": "user"}], - output_messages=[{"content": expected_output, "role": "assistant"}], + output_messages=[expected_output], metadata={"function_call": "auto", "user": "ddtrace-test"}, token_metrics={"input_tokens": 157, "output_tokens": 57, "total_tokens": 214}, tags={"ml_app": ""}, @@ -493,6 +534,24 @@ def test_chat_completion_tool_call(self, openai, ddtrace_global_config, mock_llm messages=[{"role": "user", "content": chat_completion_input_description}], user="ddtrace-test", ) + expected_output = { + "content": "", + "role": "assistant", + "tool_calls": [ + { + "name": "extract_student_info", + "arguments": { + "name": "David Nguyen", + "major": "computer science", + "school": "Stanford University", + "grades": 3.8, + "clubs": ["Chess Club", "South Asian Student Association"], + }, + "tool_id": "call_FJStsEjxdODw9tBmQRRkm6vY", + "type": "function", + } + ], + } span = mock_tracer.pop_traces()[0][0] assert mock_llmobs_writer.enqueue.call_count == 1 mock_llmobs_writer.enqueue.assert_called_with( @@ -501,15 +560,7 @@ def test_chat_completion_tool_call(self, openai, ddtrace_global_config, mock_llm model_name=resp.model, model_provider="openai", input_messages=[{"content": chat_completion_input_description, "role": "user"}], - output_messages=[ - { - "content": "[tool: {}]\n\n{}".format( - resp.choices[0].message.tool_calls[0].function.name, - resp.choices[0].message.tool_calls[0].function.arguments, - ), - "role": "assistant", - } - ], + output_messages=[expected_output], metadata={"user": "ddtrace-test"}, token_metrics={"input_tokens": 157, "output_tokens": 57, "total_tokens": 214}, tags={"ml_app": ""}, From 384bc2b91d06ea0f3fdd22b335246edc76200950 Mon Sep 17 00:00:00 2001 From: erikayasuda <153395705+erikayasuda@users.noreply.github.com> Date: Mon, 22 Jul 2024 12:02:32 -0400 Subject: [PATCH 11/29] chore: add `@DataDog/apm-sdk-api-python` to CODEOWNERS (#9882) There are some files in dd-trace-py that should be owned by the API SDK team, and not blocked on core review. ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --------- Co-authored-by: Munir Abdinur --- .github/CODEOWNERS | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 3520ff5d7c6..4eb056c7a64 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -20,7 +20,7 @@ tests/snapshots/ @DataDog/apm-python riotfile.py @DataDog/apm-python .riot/requirements/ @DataDog/apm-python -# Core +# Core / Language Platform tests/internal @DataDog/apm-core-python tests/lib-injection @DataDog/apm-core-python tests/opentelemetry @DataDog/apm-core-python @@ -117,6 +117,28 @@ mypy.ini @DataDog/python-guild @DataDog/apm-core-pyt ddtrace/internal/_file_queue.py @DataDog/python-guild ddtrace/internal/_unpatched.py @DataDog/python-guild ddtrace/internal/compat.py @DataDog/python-guild @DataDog/apm-core-python +ddtrace/settings/config.py @DataDog/python-guild @DataDog/apm-sdk-api-python tests/utils.py @DataDog/python-guild tests/.suitespec.json @DataDog/python-guild @DataDog/apm-core-python tests/suitespec.py @DataDog/python-guild @DataDog/apm-core-python + +# API SDK +ddtrace/_trace/ @DataDog/apm-sdk-api-python +ddtrace/opentelemetry/ @DataDog/apm-sdk-api-python +ddtrace/opentracer/ @DataDog/apm-sdk-api-python +ddtrace/propagation/ @DataDog/apm-sdk-api-python +ddtrace/filters.py @DataDog/apm-sdk-api-python +ddtrace/pin.py @DataDog/apm-sdk-api-python +ddtrace/sampler.py @DataDog/apm-sdk-api-python +ddtrace/sampling_rule.py @DataDog/apm-sdk-api-python +ddtrace/internal/sampling.py @DataDog/apm-sdk-api-python +ddtrace/internal/tracemethods.py @DataDog/apm-sdk-api-python +ddttace/settings/_otel_remapper.py @DataDog/apm-sdk-api-python +tests/integration/test_priority_sampling.py @DataDog/apm-sdk-api-python +tests/integration/test_propagation.py @DataDog/apm-sdk-api-python +tests/test_sampling.py @DataDog/apm-sdk-api-python +tests/test_tracemethods.py @DataDog/apm-sdk-api-python +tests/opentelemetry/ @DataDog/apm-sdk-api-python +tests/tracer/ @DataDog/apm-sdk-api-python +# Override because order matters +tests/tracer/test_ci.py @DataDog/ci-app-libraries From 2bb0c4b9be9ea4ebcaa0a66270eb14e50d1e2d14 Mon Sep 17 00:00:00 2001 From: Quinna Halim Date: Mon, 22 Jul 2024 13:05:51 -0400 Subject: [PATCH 12/29] feat(botocore): adds override service name to botocore integration (#9856) Motivation: Currently traces in botocore derive their service name from the service and endpoint, ex. `aws.s3` or `aws.sqs`, and there is no way to change the service name. Other integrations allow for changing the default service name either by setting environment variables, or configuring with `config['service']` or `config['service_name']`. This PR adds support for these methods of overriding the service name, which allows individual traces to have custom service names. Examples: ``` @mock_s3 ddtrace.config.botocore['service_name'] = "botocore" # this sets service name to botocore.s3 ddtrace.config.botocore['service'] = "boto-service" # this overrides previous and sets service name to boto-service.s3 ``` `export DD_BOTOCORE_SERVICE="boto" # this overrides previous settings and sets service & service name to boto.s3 ` ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --------- Co-authored-by: Zachary Groves <32471391+ZStriker19@users.noreply.github.com> Co-authored-by: erikayasuda <153395705+erikayasuda@users.noreply.github.com> --- ddtrace/contrib/botocore/patch.py | 8 +++-- ddtrace/contrib/botocore/services/bedrock.py | 6 +++- ddtrace/contrib/botocore/services/kinesis.py | 5 ++- ddtrace/contrib/botocore/services/sqs.py | 5 ++- .../botocore/services/stepfunctions.py | 3 +- docs/configuration.rst | 8 +++++ releasenotes/notes/add-c0f1d24cf11f23b7.yaml | 6 ++++ tests/contrib/botocore/test.py | 31 +++++++++++++++++++ 8 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 releasenotes/notes/add-c0f1d24cf11f23b7.yaml diff --git a/ddtrace/contrib/botocore/patch.py b/ddtrace/contrib/botocore/patch.py index b0db100b81e..b4df72dcb9e 100644 --- a/ddtrace/contrib/botocore/patch.py +++ b/ddtrace/contrib/botocore/patch.py @@ -31,6 +31,7 @@ from ...internal.utils.formats import asbool from ...internal.utils.formats import deep_getattr from ...pin import Pin +from ..trace_utils import ext_service from ..trace_utils import unwrap from .services.bedrock import patched_bedrock_api_call from .services.kinesis import patched_kinesis_api_call @@ -62,6 +63,7 @@ config._add( "botocore", { + "_default_service": os.getenv("DD_BOTOCORE_SERVICE", default="aws"), "distributed_tracing": asbool(os.getenv("DD_BOTOCORE_DISTRIBUTED_TRACING", default=True)), "invoke_with_legacy_context": asbool(os.getenv("DD_BOTOCORE_INVOKE_WITH_LEGACY_CONTEXT", default=False)), "operations": collections.defaultdict(Config._HTTPServerConfig), @@ -87,9 +89,9 @@ def patch(): botocore._datadog_integration = BedrockIntegration(integration_config=config.botocore) wrapt.wrap_function_wrapper("botocore.client", "BaseClient._make_api_call", patched_api_call(botocore)) - Pin(service="aws").onto(botocore.client.BaseClient) + Pin().onto(botocore.client.BaseClient) wrapt.wrap_function_wrapper("botocore.parsers", "ResponseParser.parse", patched_lib_fn) - Pin(service="aws").onto(botocore.parsers.ResponseParser) + Pin().onto(botocore.parsers.ResponseParser) _PATCHED_SUBMODULES.clear() @@ -202,7 +204,7 @@ def patched_api_call_fallback(original_func, instance, args, kwargs, function_va params=params, endpoint_name=endpoint_name, operation=operation, - service=schematize_service_name("{}.{}".format(pin.service, endpoint_name)), + service=schematize_service_name("{}.{}".format(ext_service(pin, int_config=config.botocore), endpoint_name)), pin=pin, span_name=function_vars.get("trace_operation"), span_type=SpanTypes.HTTP, diff --git a/ddtrace/contrib/botocore/services/bedrock.py b/ddtrace/contrib/botocore/services/bedrock.py index 12bb97092bb..6377f7d8ddf 100644 --- a/ddtrace/contrib/botocore/services/bedrock.py +++ b/ddtrace/contrib/botocore/services/bedrock.py @@ -4,6 +4,8 @@ from typing import Dict from typing import List +from ddtrace import config +from ddtrace.contrib.trace_utils import ext_service from ddtrace.ext import SpanTypes from ddtrace.internal import core from ddtrace.internal.logger import get_logger @@ -323,7 +325,9 @@ def patched_bedrock_api_call(original_func, instance, args, kwargs, function_var "botocore.patched_bedrock_api_call", pin=pin, span_name=function_vars.get("trace_operation"), - service=schematize_service_name("{}.{}".format(pin.service, function_vars.get("endpoint_name"))), + service=schematize_service_name( + "{}.{}".format(ext_service(pin, int_config=config.botocore), function_vars.get("endpoint_name")) + ), resource=function_vars.get("operation"), span_type=SpanTypes.LLM if submit_to_llmobs else None, call_key="instrumented_bedrock_call", diff --git a/ddtrace/contrib/botocore/services/kinesis.py b/ddtrace/contrib/botocore/services/kinesis.py index 858f011410f..7bf1ea81284 100644 --- a/ddtrace/contrib/botocore/services/kinesis.py +++ b/ddtrace/contrib/botocore/services/kinesis.py @@ -9,6 +9,7 @@ import botocore.exceptions from ddtrace import config +from ddtrace.contrib.trace_utils import ext_service from ddtrace.internal import core from ddtrace.internal.schema.span_attribute_schema import SpanDirection @@ -137,7 +138,9 @@ def patched_kinesis_api_call(original_func, instance, args, kwargs, function_var params=params, endpoint_name=endpoint_name, operation=operation, - service=schematize_service_name("{}.{}".format(pin.service, endpoint_name)), + service=schematize_service_name( + "{}.{}".format(ext_service(pin, int_config=config.botocore), endpoint_name) + ), call_trace=False, pin=pin, span_name=span_name, diff --git a/ddtrace/contrib/botocore/services/sqs.py b/ddtrace/contrib/botocore/services/sqs.py index 25de175853a..da82df3113e 100644 --- a/ddtrace/contrib/botocore/services/sqs.py +++ b/ddtrace/contrib/botocore/services/sqs.py @@ -7,6 +7,7 @@ import botocore.exceptions from ddtrace import config +from ddtrace.contrib.trace_utils import ext_service from ddtrace.ext import SpanTypes from ddtrace.internal import core from ddtrace.internal.logger import get_logger @@ -142,7 +143,9 @@ def _patched_sqs_api_call(parent_ctx, original_func, instance, args, kwargs, fun "botocore.patched_sqs_api_call", parent=parent_ctx, span_name=call_name, - service=schematize_service_name("{}.{}".format(pin.service, endpoint_name)), + service=schematize_service_name( + "{}.{}".format(ext_service(pin, int_config=config.botocore), endpoint_name) + ), span_type=SpanTypes.HTTP, child_of=child_of if child_of is not None else pin.tracer.context_provider.active(), activate=True, diff --git a/ddtrace/contrib/botocore/services/stepfunctions.py b/ddtrace/contrib/botocore/services/stepfunctions.py index 16213f2e3ed..4919d8d827e 100644 --- a/ddtrace/contrib/botocore/services/stepfunctions.py +++ b/ddtrace/contrib/botocore/services/stepfunctions.py @@ -5,6 +5,7 @@ import botocore.exceptions from ddtrace import config +from ddtrace.contrib.trace_utils import ext_service from ddtrace.internal import core from ....ext import SpanTypes @@ -60,7 +61,7 @@ def patched_stepfunction_api_call(original_func, instance, args, kwargs: Dict, f with core.context_with_data( "botocore.patched_stepfunctions_api_call", span_name=call_name, - service=schematize_service_name("{}.{}".format(pin.service, endpoint_name)), + service=schematize_service_name("{}.{}".format(ext_service(pin, int_config=config.botocore), endpoint_name)), span_type=SpanTypes.HTTP, call_key="patched_stepfunctions_api_call", instance=instance, diff --git a/docs/configuration.rst b/docs/configuration.rst index 634ffb32ecf..62cb9073536 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -629,6 +629,14 @@ The following environment variables for the tracer are supported: version_added: v2.3.0: + DD_BOTOCORE_SERVICE: + type: String + default: "aws" + description: | + Set the service name, allowing default service name overrides for traces in botocore. + version_added: + v2.11.0: + DD_BOTOCORE_PROPAGATION_ENABLED: type: Boolean default: False diff --git a/releasenotes/notes/add-c0f1d24cf11f23b7.yaml b/releasenotes/notes/add-c0f1d24cf11f23b7.yaml new file mode 100644 index 00000000000..c6dd1fb1805 --- /dev/null +++ b/releasenotes/notes/add-c0f1d24cf11f23b7.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + - botocore: Adds support for overriding the default service name in botocore + by either setting the environment variable ``DD_BOTOCORE_SERVICE`` or configuring it via + `ddtrace.config.botocore["service"]`. diff --git a/tests/contrib/botocore/test.py b/tests/contrib/botocore/test.py index e61c1d700d2..840165f9ae2 100644 --- a/tests/contrib/botocore/test.py +++ b/tests/contrib/botocore/test.py @@ -417,6 +417,37 @@ def test_s3_put_no_params(self): assert span.get_tag("params.Body") is None assert span.get_tag("component") == "botocore" + @mock_s3 + @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_BOTOCORE_SERVICE="botocore")) + def test_service_name_override(self): + s3 = self.session.create_client("s3", region_name="us-west-2") + Pin.get_from(s3).clone(tracer=self.tracer).onto(s3) + + params = { + "Bucket": "mybucket", + "CreateBucketConfiguration": { + "LocationConstraint": "us-west-2", + }, + } + s3.create_bucket(**params) + params = dict(Key="foo", Bucket="mybucket", Body=b"bar") + s3.put_object(**params) + + spans = self.get_spans() + assert spans + span = spans[0] + assert span.service == "botocore.s3", "Expected 'botocore.s3' but got {}".format(span.service) + + cfg = config.botocore + cfg["service"] = "boto-service" + + s3.list_buckets() + spans = self.get_spans() + assert spans + span = spans[-1] + + assert span.service == "boto-service.s3", "Expected 'boto-service.s3' but got {}".format(span.service) + @mock_s3 @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_SERVICE="mysvc")) def test_schematized_s3_client_default(self): From 4c854a8aa828accc4d069d797ab89b0b8ff597ea Mon Sep 17 00:00:00 2001 From: erikayasuda <153395705+erikayasuda@users.noreply.github.com> Date: Mon, 22 Jul 2024 13:16:01 -0400 Subject: [PATCH 13/29] chore: add `CODEOWNERS.md` and `README.md` to apm-python team (#9889) These two .md files should be approvable by anyone in apm-python, not just core. ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [ ] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- .github/CODEOWNERS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4eb056c7a64..f36af4b160b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -19,6 +19,8 @@ releasenotes/ @DataDog/apm-python tests/snapshots/ @DataDog/apm-python riotfile.py @DataDog/apm-python .riot/requirements/ @DataDog/apm-python +CHANGELOG.md @DataDog/apm-python +README.md @DataDog/apm-python # Core / Language Platform tests/internal @DataDog/apm-core-python From ae1ab855723d2dab2db8f20de918cc011ac37297 Mon Sep 17 00:00:00 2001 From: erikayasuda <153395705+erikayasuda@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:13:18 -0400 Subject: [PATCH 14/29] chore: add `benchmarks/appsec*` for ASM approval (#9896) The `benchmarks/appsec*` directories should only require ASM approval, not blocked on core. ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f36af4b160b..ebfe3c84e57 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -64,6 +64,7 @@ tests/internal/test_module.py @DataDog/debugger-python @DataDog/apm-core-p tests/internal/symbol_db/ @DataDog/debugger-python # ASM +benchmarks/appsec* @DataDog/asm-python ddtrace/appsec/ @DataDog/asm-python ddtrace/settings/asm.py @DataDog/asm-python ddtrace/contrib/subprocess/ @DataDog/asm-python From 9f30547ca1410b3924e4e0f1b65beff5d1bcb338 Mon Sep 17 00:00:00 2001 From: Rachel Yang Date: Mon, 22 Jul 2024 14:38:48 -0400 Subject: [PATCH 15/29] chore: adding type Literal to constants for db monitoring and http (#9883) Any constant can be typed as being a literal instead of a type. This change will ensure that anywhere we use a constant for typing it means literally the value instead of a type of str. In order for this to work for Python < 3.8 we will need to add typing_extensions as a dependency. ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- ddtrace/propagation/_database_monitoring.py | 27 +++++++++++++-------- ddtrace/propagation/http.py | 26 ++++++++++---------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/ddtrace/propagation/_database_monitoring.py b/ddtrace/propagation/_database_monitoring.py index 9faf4f5fb2a..5b585b13210 100644 --- a/ddtrace/propagation/_database_monitoring.py +++ b/ddtrace/propagation/_database_monitoring.py @@ -19,16 +19,23 @@ from ddtrace import Span # noqa:F401 -DBM_PARENT_SERVICE_NAME_KEY = "ddps" -DBM_DATABASE_SERVICE_NAME_KEY = "dddbs" -DBM_PEER_HOSTNAME_KEY = "ddh" -DBM_PEER_DB_NAME_KEY = "dddb" -DBM_PEER_SERVICE_KEY = "ddprs" -DBM_ENVIRONMENT_KEY = "dde" -DBM_VERSION_KEY = "ddpv" -DBM_TRACE_PARENT_KEY = "traceparent" -DBM_TRACE_INJECTED_TAG = "_dd.dbm_trace_injected" - +import sys + + +if sys.version_info >= (3, 8): + from typing import Literal # noqa:F401 +else: + from typing_extensions import Literal # noqa:F401 + +DBM_PARENT_SERVICE_NAME_KEY: Literal["ddps"] = "ddps" +DBM_DATABASE_SERVICE_NAME_KEY: Literal["dddbs"] = "dddbs" +DBM_PEER_HOSTNAME_KEY: Literal["ddh"] = "ddh" +DBM_PEER_DB_NAME_KEY: Literal["dddb"] = "dddb" +DBM_PEER_SERVICE_KEY: Literal["ddprs"] = "ddprs" +DBM_ENVIRONMENT_KEY: Literal["dde"] = "dde" +DBM_VERSION_KEY: Literal["ddpv"] = "ddpv" +DBM_TRACE_PARENT_KEY: Literal["traceparent"] = "traceparent" +DBM_TRACE_INJECTED_TAG: Literal["_dd.dbm_trace_injected"] = "_dd.dbm_trace_injected" log = get_logger(__name__) diff --git a/ddtrace/propagation/http.py b/ddtrace/propagation/http.py index ddbd2f14ef1..f5d21327d59 100644 --- a/ddtrace/propagation/http.py +++ b/ddtrace/propagation/http.py @@ -62,19 +62,19 @@ # HTTP headers one should set for distributed tracing. # These are cross-language (eg: Python, Go and other implementations should honor these) -_HTTP_BAGGAGE_PREFIX = "ot-baggage-" -HTTP_HEADER_TRACE_ID = "x-datadog-trace-id" -HTTP_HEADER_PARENT_ID = "x-datadog-parent-id" -HTTP_HEADER_SAMPLING_PRIORITY = "x-datadog-sampling-priority" -HTTP_HEADER_ORIGIN = "x-datadog-origin" -_HTTP_HEADER_B3_SINGLE = "b3" -_HTTP_HEADER_B3_TRACE_ID = "x-b3-traceid" -_HTTP_HEADER_B3_SPAN_ID = "x-b3-spanid" -_HTTP_HEADER_B3_SAMPLED = "x-b3-sampled" -_HTTP_HEADER_B3_FLAGS = "x-b3-flags" -_HTTP_HEADER_TAGS = "x-datadog-tags" -_HTTP_HEADER_TRACEPARENT = "traceparent" -_HTTP_HEADER_TRACESTATE = "tracestate" +_HTTP_BAGGAGE_PREFIX: Literal["ot-baggage-"] = "ot-baggage-" +HTTP_HEADER_TRACE_ID: Literal["x-datadog-trace-id"] = "x-datadog-trace-id" +HTTP_HEADER_PARENT_ID: Literal["x-datadog-parent-id"] = "x-datadog-parent-id" +HTTP_HEADER_SAMPLING_PRIORITY: Literal["x-datadog-sampling-priority"] = "x-datadog-sampling-priority" +HTTP_HEADER_ORIGIN: Literal["x-datadog-origin"] = "x-datadog-origin" +_HTTP_HEADER_B3_SINGLE: Literal["b3"] = "b3" +_HTTP_HEADER_B3_TRACE_ID: Literal["x-b3-traceid"] = "x-b3-traceid" +_HTTP_HEADER_B3_SPAN_ID: Literal["x-b3-spanid"] = "x-b3-spanid" +_HTTP_HEADER_B3_SAMPLED: Literal["x-b3-sampled"] = "x-b3-sampled" +_HTTP_HEADER_B3_FLAGS: Literal["x-b3-flags"] = "x-b3-flags" +_HTTP_HEADER_TAGS: Literal["x-datadog-tags"] = "x-datadog-tags" +_HTTP_HEADER_TRACEPARENT: Literal["traceparent"] = "traceparent" +_HTTP_HEADER_TRACESTATE: Literal["tracestate"] = "tracestate" def _possible_header(header): From 1324b34a61b81a465656ccd7bcb14a0a20e77d51 Mon Sep 17 00:00:00 2001 From: David Sanchez <838104+sanchda@users.noreply.github.com> Date: Mon, 22 Jul 2024 17:29:47 -0700 Subject: [PATCH 16/29] chore(profiling): add interface for crashtracker tags (#9892) Adds an interface and a test for crashtracker tags 1. can set with crashtracer.add_tag(key, val) 2. can set with DD_CRASHTRACKER_TAGS in the normal way ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- ddtrace/internal/core/crashtracking.py | 9 ++ .../profiling/crashtracker/_crashtracker.pyi | 1 + .../profiling/crashtracker/_crashtracker.pyx | 10 ++ .../dd_wrapper/include/crashtracker.hpp | 4 + .../include/crashtracker_interface.hpp | 1 + .../profiling/dd_wrapper/src/crashtracker.cpp | 25 +++- .../dd_wrapper/src/crashtracker_interface.cpp | 6 + ddtrace/settings/crashtracker.py | 19 ++- .../crashtracker/test_crashtracker.py | 128 ++++++++++++++++++ 9 files changed, 197 insertions(+), 6 deletions(-) diff --git a/ddtrace/internal/core/crashtracking.py b/ddtrace/internal/core/crashtracking.py index a2d81deb32a..9e96341af04 100644 --- a/ddtrace/internal/core/crashtracking.py +++ b/ddtrace/internal/core/crashtracking.py @@ -19,6 +19,11 @@ def _update_runtime_id(runtime_id: str) -> None: crashtracker.set_runtime_id(runtime_id) +def add_tag(key: str, value: str) -> None: + if is_available: + crashtracker.set_tag(key, value) + + def start() -> bool: if not is_available: return False @@ -44,6 +49,10 @@ def start() -> bool: if crashtracker_config.stderr_filename: crashtracker.set_stderr_filename(crashtracker_config.stderr_filename) + # Add user tags + for key, value in crashtracker_config.tags.items(): + add_tag(key, value) + # Only start if it is enabled if crashtracker_config.enabled: return crashtracker.start() diff --git a/ddtrace/internal/datadog/profiling/crashtracker/_crashtracker.pyi b/ddtrace/internal/datadog/profiling/crashtracker/_crashtracker.pyi index f455456b45b..a8eea6a2348 100644 --- a/ddtrace/internal/datadog/profiling/crashtracker/_crashtracker.pyi +++ b/ddtrace/internal/datadog/profiling/crashtracker/_crashtracker.pyi @@ -17,5 +17,6 @@ def set_resolve_frames_full() -> None: ... def set_profiling_state_sampling(on: bool) -> None: ... def set_profiling_state_unwinding(on: bool) -> None: ... def set_profiling_state_serializing(on: bool) -> None: ... +def set_tag(key: StringType, value: StringType) -> None: ... def start() -> bool: ... def is_started() -> bool: ... diff --git a/ddtrace/internal/datadog/profiling/crashtracker/_crashtracker.pyx b/ddtrace/internal/datadog/profiling/crashtracker/_crashtracker.pyx index 0f1d5606686..b7b6fdb684d 100644 --- a/ddtrace/internal/datadog/profiling/crashtracker/_crashtracker.pyx +++ b/ddtrace/internal/datadog/profiling/crashtracker/_crashtracker.pyx @@ -33,6 +33,7 @@ cdef extern from "crashtracker_interface.hpp": void crashtracker_set_resolve_frames_full() void crashtracker_set_resolve_frames_safe() bint crashtracker_set_receiver_binary_path(string_view path) + void crashtracker_set_tag(string_view key, string_view value) void crashtracker_profiling_state_sampling_start() void crashtracker_profiling_state_sampling_stop() void crashtracker_profiling_state_unwinding_start() @@ -134,6 +135,15 @@ def set_profiling_state_serializing(on: bool) -> None: crashtracker_profiling_state_serializing_stop() +def set_tag(key: StringType, value: StringType) -> None: + key_bytes = ensure_binary_or_empty(key) + value_bytes = ensure_binary_or_empty(value) + crashtracker_set_tag( + string_view(key_bytes, len(key_bytes)), + string_view(value_bytes, len(value_bytes)) + ) + + def start() -> bool: # The file is "crashtracker_exe" in the same directory as the libdd_wrapper.so exe_dir = os.path.dirname(__file__) diff --git a/ddtrace/internal/datadog/profiling/dd_wrapper/include/crashtracker.hpp b/ddtrace/internal/datadog/profiling/dd_wrapper/include/crashtracker.hpp index ef141cd5ce4..a54b8a9c8ad 100644 --- a/ddtrace/internal/datadog/profiling/dd_wrapper/include/crashtracker.hpp +++ b/ddtrace/internal/datadog/profiling/dd_wrapper/include/crashtracker.hpp @@ -7,6 +7,7 @@ #include #include #include +#include namespace Datadog { @@ -46,6 +47,8 @@ class Crashtracker std::string library_version; std::string url; + std::unordered_map user_tags; + static constexpr std::string_view family{ g_language_name }; static constexpr std::string_view library_name{ g_library_name }; @@ -65,6 +68,7 @@ class Crashtracker void set_runtime_version(std::string_view _runtime_version); void set_library_version(std::string_view _library_version); void set_url(std::string_view _url); + void set_tag(std::string_view _key, std::string_view _value); void set_create_alt_stack(bool _create_alt_stack); void set_stderr_filename(std::string_view _stderr_filename); diff --git a/ddtrace/internal/datadog/profiling/dd_wrapper/include/crashtracker_interface.hpp b/ddtrace/internal/datadog/profiling/dd_wrapper/include/crashtracker_interface.hpp index 101e68f87d1..f3c747a2236 100644 --- a/ddtrace/internal/datadog/profiling/dd_wrapper/include/crashtracker_interface.hpp +++ b/ddtrace/internal/datadog/profiling/dd_wrapper/include/crashtracker_interface.hpp @@ -24,6 +24,7 @@ extern "C" void crashtracker_set_resolve_frames_full(); void crashtracker_set_resolve_frames_safe(); bool crashtracker_set_receiver_binary_path(std::string_view path); + void crashtracker_set_tag(std::string_view key, std::string_view value); void crashtracker_profiling_state_sampling_start(); void crashtracker_profiling_state_sampling_stop(); void crashtracker_profiling_state_unwinding_start(); diff --git a/ddtrace/internal/datadog/profiling/dd_wrapper/src/crashtracker.cpp b/ddtrace/internal/datadog/profiling/dd_wrapper/src/crashtracker.cpp index e82b1d737a7..d1925cb0d27 100644 --- a/ddtrace/internal/datadog/profiling/dd_wrapper/src/crashtracker.cpp +++ b/ddtrace/internal/datadog/profiling/dd_wrapper/src/crashtracker.cpp @@ -86,6 +86,16 @@ Datadog::Crashtracker::set_library_version(std::string_view _library_version) library_version = std::string(_library_version); } +void +Datadog::Crashtracker::set_tag(std::string_view key, std::string_view value) +{ + // Maybe this should be called "add tag," but the interface to the uploader is already called "set_tag" + // and we have another refactor incoming anyway, so let's just kick the can for now + if (!key.empty() && !value.empty()) { + user_tags[std::string(key)] = std::string(value); + } +} + bool Datadog::Crashtracker::set_receiver_binary_path(std::string_view _path) { @@ -147,10 +157,19 @@ Datadog::Crashtracker::get_tags() { ExportTagKey::library_version, library_version }, }; + // Add system tags std::string errmsg; // Populated, but unused - for (const auto& [tag, data] : tag_data) { - if (!data.empty()) { - add_tag(tags, tag, data, errmsg); // We don't have a good way of handling errors here + for (const auto& [key, value] : tag_data) { + // NB - keys here are members of an enum; `add_tag()` specialization below will stringify them + if (!value.empty()) { + add_tag(tags, key, value, errmsg); // We don't have a good way of handling errors here + } + } + + // Add user tags + for (const auto& [key, value] : user_tags) { + if (!key.empty() && !value.empty()) { + add_tag(tags, key, value, errmsg); } } diff --git a/ddtrace/internal/datadog/profiling/dd_wrapper/src/crashtracker_interface.cpp b/ddtrace/internal/datadog/profiling/dd_wrapper/src/crashtracker_interface.cpp index 677f128dd06..9c9e3788541 100644 --- a/ddtrace/internal/datadog/profiling/dd_wrapper/src/crashtracker_interface.cpp +++ b/ddtrace/internal/datadog/profiling/dd_wrapper/src/crashtracker_interface.cpp @@ -112,6 +112,12 @@ crashtracker_set_receiver_binary_path(std::string_view path) // cppcheck-suppres return crashtracker.set_receiver_binary_path(path); } +void +crashtracker_set_tag(std::string_view key, std::string_view value) // cppcheck-suppress unusedFunction +{ + crashtracker.set_tag(key, value); +} + // Store the old segfault handler (uses sigaction prototype) void (*old_sigsegv_handler)(int, siginfo_t*, void*) = nullptr; void (*old_sigbus_handler)(int, siginfo_t*, void*) = nullptr; diff --git a/ddtrace/settings/crashtracker.py b/ddtrace/settings/crashtracker.py index af574448f73..6637047193d 100644 --- a/ddtrace/settings/crashtracker.py +++ b/ddtrace/settings/crashtracker.py @@ -2,6 +2,8 @@ from envier import En +from ddtrace.internal.utils.formats import parse_tags_str + def _derive_stacktrace_resolver(config: "CrashtrackerConfig") -> t.Optional[str]: resolver = str(config._stacktrace_resolver or "") @@ -41,8 +43,8 @@ class CrashtrackerConfig(En): "debug_url", default=None, help_type="String", - help="Overrides the URL parameter set by the ddtrace library. This is for testing and debugging purposes" - " and is not generally useful for end-users.", + help="Overrides the URL parameter set by the ddtrace library. " + "This is generally useful only for dd-trace-py development.", ) stdout_filename = En.v( @@ -66,7 +68,8 @@ class CrashtrackerConfig(En): "alt_stack", default=False, help_type="Boolean", - help="Whether to use an alternate stack for the crashtracker. This is used for internal development.", + help="Whether to use an alternate stack for the crashtracker." + "This is generally useful only for dd-trace-py development.", ) _stacktrace_resolver = En.v( @@ -79,5 +82,15 @@ class CrashtrackerConfig(En): ) stacktrace_resolver = En.d(t.Optional[str], _derive_stacktrace_resolver) + tags = En.v( + dict, + "tags", + parser=parse_tags_str, + default={}, + help_type="Mapping", + help="Additional crashtracking tags. Must be a list in the ``key1:value,key2:value2`` format. " + "This is generally useful only for dd-trace-py development.", + ) + config = CrashtrackerConfig() diff --git a/tests/internal/crashtracker/test_crashtracker.py b/tests/internal/crashtracker/test_crashtracker.py index 4359c57e22a..8798da9301c 100644 --- a/tests/internal/crashtracker/test_crashtracker.py +++ b/tests/internal/crashtracker/test_crashtracker.py @@ -382,3 +382,131 @@ def test_crashtracker_auto_disabled(run_python_code_in_subprocess): # Wait for the connection, which should fail conn = utils.listen_get_conn(sock) assert not conn + + +@pytest.mark.skipif(not sys.platform.startswith("linux"), reason="Linux only") +def test_crashtracker_user_tags_envvar(run_python_code_in_subprocess): + # Setup the listening socket before we open ddtrace + port, sock = utils.crashtracker_receiver_bind() + assert sock + + # Call the program + env = os.environ.copy() + env["DD_TRACE_AGENT_URL"] = "http://localhost:%d" % port + + # Injecting tags, but since the way we validate them is with a raw-data string search, we make things unique + tag_prefix = "cryptocrystalline" + tags = { + tag_prefix + "_tag1": "quartz_flint", + tag_prefix + "_tag2": "quartz_chert", + } + env["DD_CRASHTRACKER_TAGS"] = ",".join(["%s:%s" % (k, v) for k, v in tags.items()]) + stdout, stderr, exitcode, _ = run_python_code_in_subprocess(auto_code, env=env) + + # Check for expected exit condition + assert not stdout + assert not stderr + assert exitcode == -11 + + # Wait for the connection + conn = utils.listen_get_conn(sock) + assert conn + data = utils.conn_to_bytes(conn) + assert data + + # Now check for the tags + for k, v in tags.items(): + assert k.encode() in data + assert v.encode() in data + + +@pytest.mark.skipif(not sys.platform.startswith("linux"), reason="Linux only") +@pytest.mark.subprocess() +def test_crashtracker_user_tags_profiling(): + # Tests tag ingestion in the backend API (which is currently out of profiling) + import ctypes + import os + + import ddtrace.internal.datadog.profiling.crashtracker as crashtracker + import tests.internal.crashtracker.utils as utils + + # Define some tags + tag_prefix = "manganese_oxides" + tags = { + tag_prefix + "_tag1": "pyrolusite", + tag_prefix + "_tag2": "birnessite", + } + + port, sock = utils.crashtracker_receiver_bind() + assert port + assert sock + + pid = os.fork() + if pid == 0: + # Set the tags before starting + for k, v in tags.items(): + crashtracker.set_tag(k, v) + assert utils.start_crashtracker(port) + stdout_msg, stderr_msg = utils.read_files(["stdout.log", "stderr.log"]) + assert not stdout_msg + assert not stderr_msg + + ctypes.string_at(0) + exit(-1) + + conn = utils.listen_get_conn(sock) + assert conn + data = utils.conn_to_bytes(conn) + conn.close() + assert b"string_at" in data + + # Now check for the tags + for k, v in tags.items(): + assert k.encode() in data + assert v.encode() in data + + +@pytest.mark.skipif(not sys.platform.startswith("linux"), reason="Linux only") +@pytest.mark.subprocess() +def test_crashtracker_user_tags_core(): + # Tests tag ingestion in the core API + import ctypes + import os + + from ddtrace.internal.core import crashtracking + import tests.internal.crashtracker.utils as utils + + # Define some tags + tag_prefix = "manganese_oxides" + tags = { + tag_prefix + "_tag1": "pyrolusite", + tag_prefix + "_tag2": "birnessite", + } + + port, sock = utils.crashtracker_receiver_bind() + assert port + assert sock + + pid = os.fork() + if pid == 0: + # Set the tags before starting + for k, v in tags.items(): + crashtracking.add_tag(k, v) + assert utils.start_crashtracker(port) + stdout_msg, stderr_msg = utils.read_files(["stdout.log", "stderr.log"]) + assert not stdout_msg + assert not stderr_msg + + ctypes.string_at(0) + exit(-1) + + conn = utils.listen_get_conn(sock) + assert conn + data = utils.conn_to_bytes(conn) + conn.close() + assert b"string_at" in data + + # Now check for the tags + for k, v in tags.items(): + assert k.encode() in data + assert v.encode() in data From cac5e2920f0e64b9d2f13fbb6a7cdcb3b69f069f Mon Sep 17 00:00:00 2001 From: Christophe Papazian <114495376+christophe-papazian@users.noreply.github.com> Date: Tue, 23 Jul 2024 11:54:01 +0200 Subject: [PATCH 17/29] chore(asm): update libddwaf to 1.19.0 (#9906) update libddwaf to [1.19.0](https://github.com/DataDog/libddwaf/releases/tag/1.19.0) _no further changes in the tracer are required as this update does not contain any breaking changes._ Backporting to 2.10 to able the backend to test the new waf features while deploying 2.10rc on staging ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- setup.py | 2 +- ....test_processor.test_appsec_body_no_collection_snapshot.json | 2 +- ...st_processor.test_appsec_cookies_no_collection_snapshot.json | 2 +- ...ec.appsec.test_processor.test_appsec_span_tags_snapshot.json | 2 +- ...st_processor.test_appsec_span_tags_snapshot_with_errors.json | 2 +- ...django.test_django_appsec_snapshots.test_appsec_enabled.json | 2 +- ...test_django_appsec_snapshots.test_appsec_enabled_attack.json | 2 +- ..._django_appsec_snapshots.test_request_ipblock_match_403.json | 2 +- ...go_appsec_snapshots.test_request_ipblock_match_403_json.json | 2 +- ...jango_appsec_snapshots.test_request_ipblock_nomatch_200.json | 2 +- ...st_flask_ipblock_match_403[flask_appsec_good_rules_env].json | 2 +- ...lask_ipblock_match_403[flask_appsec_good_rules_env]_220.json | 2 +- ...ask_ipblock_match_403_json[flask_appsec_good_rules_env].json | 2 +- ...ipblock_match_403_json[flask_appsec_good_rules_env]_220.json | 2 +- ..._flask_processexec_osspawn[flask_appsec_good_rules_env].json | 2 +- ...sk_processexec_osspawn[flask_appsec_good_rules_env]_220.json | 2 +- ...flask_processexec_ossystem[flask_appsec_good_rules_env].json | 2 +- ...k_processexec_ossystem[flask_appsec_good_rules_env]_220.json | 2 +- ...bprocesscommunicatenoshell[flask_appsec_good_rules_env].json | 2 +- ...cesscommunicatenoshell[flask_appsec_good_rules_env]_220.json | 2 +- ...subprocesscommunicateshell[flask_appsec_good_rules_env].json | 2 +- ...rocesscommunicateshell[flask_appsec_good_rules_env]_220.json | 2 +- ...k_userblock_match_200_json[flask_appsec_good_rules_env].json | 2 +- ...erblock_match_200_json[flask_appsec_good_rules_env]_220.json | 2 +- ...k_userblock_match_403_json[flask_appsec_good_rules_env].json | 2 +- ...erblock_match_403_json[flask_appsec_good_rules_env]_220.json | 2 +- 26 files changed, 26 insertions(+), 26 deletions(-) diff --git a/setup.py b/setup.py index 2d60d3949df..f837ea0f297 100644 --- a/setup.py +++ b/setup.py @@ -53,7 +53,7 @@ CURRENT_OS = platform.system() -LIBDDWAF_VERSION = "1.18.0" +LIBDDWAF_VERSION = "1.19.0" RUST_MINIMUM_VERSION = "1.71" # Safe guess: 1.71 is about a year old as of 2024-07-03 diff --git a/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_body_no_collection_snapshot.json b/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_body_no_collection_snapshot.json index 39a21e31b88..c0555472433 100644 --- a/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_body_no_collection_snapshot.json +++ b/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_body_no_collection_snapshot.json @@ -10,7 +10,7 @@ "meta": { "_dd.appsec.event_rules.version": "1.12.0", "_dd.appsec.json": "{\"triggers\":[\n {\n \"rule\": {\n \"id\": \"nfd-000-006\",\n \"name\": \"Detect failed attempt to fetch sensitive files\",\n \"tags\": {\n \"capec\": \"1000/118/169\",\n \"category\": \"attack_attempt\",\n \"confidence\": \"1\",\n \"cwe\": \"200\",\n \"type\": \"security_scanner\"\n }\n },\n \"rule_matches\": [\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"^404$\",\n \"parameters\": [\n {\n \"address\": \"server.response.status\",\n \"highlight\": [\n \"404\"\n ],\n \"key_path\": [],\n \"value\": \"404\"\n }\n ]\n },\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"\\\\.(cgi|bat|dll|exe|key|cert|crt|pem|der|pkcs|pkcs|pkcs[0-9]*|nsf|jsa|war|java|class|vb|vba|so|git|svn|hg|cvs)([^a-zA-Z0-9_]|$)\",\n \"parameters\": [\n {\n \"address\": \"server.request.uri.raw\",\n \"highlight\": [\n \".git\"\n ],\n \"key_path\": [],\n \"value\": \"/.git\"\n }\n ]\n }\n ]\n }\n]}", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.origin": "appsec", "_dd.p.appsec": "1", "_dd.p.dm": "-5", diff --git a/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_cookies_no_collection_snapshot.json b/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_cookies_no_collection_snapshot.json index 2d61721aecc..38edf5a1a0a 100644 --- a/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_cookies_no_collection_snapshot.json +++ b/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_cookies_no_collection_snapshot.json @@ -10,7 +10,7 @@ "meta": { "_dd.appsec.event_rules.version": "1.12.0", "_dd.appsec.json": "{\"triggers\":[\n {\n \"rule\": {\n \"id\": \"nfd-000-006\",\n \"name\": \"Detect failed attempt to fetch sensitive files\",\n \"tags\": {\n \"capec\": \"1000/118/169\",\n \"category\": \"attack_attempt\",\n \"confidence\": \"1\",\n \"cwe\": \"200\",\n \"type\": \"security_scanner\"\n }\n },\n \"rule_matches\": [\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"^404$\",\n \"parameters\": [\n {\n \"address\": \"server.response.status\",\n \"highlight\": [\n \"404\"\n ],\n \"key_path\": [],\n \"value\": \"404\"\n }\n ]\n },\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"\\\\.(cgi|bat|dll|exe|key|cert|crt|pem|der|pkcs|pkcs|pkcs[0-9]*|nsf|jsa|war|java|class|vb|vba|so|git|svn|hg|cvs)([^a-zA-Z0-9_]|$)\",\n \"parameters\": [\n {\n \"address\": \"server.request.uri.raw\",\n \"highlight\": [\n \".git\"\n ],\n \"key_path\": [],\n \"value\": \"/.git\"\n }\n ]\n }\n ]\n }\n]}", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.origin": "appsec", "_dd.p.appsec": "1", "_dd.p.dm": "-5", diff --git a/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_span_tags_snapshot.json b/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_span_tags_snapshot.json index 749416020da..a2d1604ef0c 100644 --- a/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_span_tags_snapshot.json +++ b/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_span_tags_snapshot.json @@ -10,7 +10,7 @@ "meta": { "_dd.appsec.event_rules.version": "1.12.0", "_dd.appsec.json": "{\"triggers\":[\n {\n \"rule\": {\n \"id\": \"nfd-000-006\",\n \"name\": \"Detect failed attempt to fetch sensitive files\",\n \"tags\": {\n \"capec\": \"1000/118/169\",\n \"category\": \"attack_attempt\",\n \"confidence\": \"1\",\n \"cwe\": \"200\",\n \"type\": \"security_scanner\"\n }\n },\n \"rule_matches\": [\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"^404$\",\n \"parameters\": [\n {\n \"address\": \"server.response.status\",\n \"highlight\": [\n \"404\"\n ],\n \"key_path\": [],\n \"value\": \"404\"\n }\n ]\n },\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"\\\\.(cgi|bat|dll|exe|key|cert|crt|pem|der|pkcs|pkcs|pkcs[0-9]*|nsf|jsa|war|java|class|vb|vba|so|git|svn|hg|cvs)([^a-zA-Z0-9_]|$)\",\n \"parameters\": [\n {\n \"address\": \"server.request.uri.raw\",\n \"highlight\": [\n \".git\"\n ],\n \"key_path\": [],\n \"value\": \"/.git\"\n }\n ]\n }\n ]\n }\n]}", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.origin": "appsec", "_dd.p.appsec": "1", diff --git a/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_span_tags_snapshot_with_errors.json b/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_span_tags_snapshot_with_errors.json index 86fcfba9f3f..be2c1bae9bb 100644 --- a/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_span_tags_snapshot_with_errors.json +++ b/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_span_tags_snapshot_with_errors.json @@ -10,7 +10,7 @@ "meta": { "_dd.appsec.event_rules.errors": "{\"missing key 'conditions'\": [\"crs-913-110\"], \"missing key 'tags'\": [\"crs-942-100\"]}", "_dd.appsec.event_rules.version": "5.5.5", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.p.dm": "-0", "_dd.runtime_family": "python", diff --git a/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled.json b/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled.json index b9635f0f1f7..1e48d40f8c1 100644 --- a/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled.json +++ b/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled.json @@ -10,7 +10,7 @@ "error": 0, "meta": { "_dd.appsec.event_rules.version": "1.12.0", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.p.dm": "-0", "_dd.p.tid": "654a694400000000", diff --git a/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled_attack.json b/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled_attack.json index 084ddc1342b..3a94aaef308 100644 --- a/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled_attack.json +++ b/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled_attack.json @@ -11,7 +11,7 @@ "meta": { "_dd.appsec.event_rules.version": "1.12.0", "_dd.appsec.json": "{\"triggers\":[\n {\n \"rule\": {\n \"id\": \"nfd-000-006\",\n \"name\": \"Detect failed attempt to fetch sensitive files\",\n \"tags\": {\n \"capec\": \"1000/118/169\",\n \"category\": \"attack_attempt\",\n \"confidence\": \"1\",\n \"cwe\": \"200\",\n \"type\": \"security_scanner\"\n }\n },\n \"rule_matches\": [\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"^404$\",\n \"parameters\": [\n {\n \"address\": \"server.response.status\",\n \"highlight\": [\n \"404\"\n ],\n \"key_path\": [],\n \"value\": \"404\"\n }\n ]\n },\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"\\\\.(cgi|bat|dll|exe|key|cert|crt|pem|der|pkcs|pkcs|pkcs[0-9]*|nsf|jsa|war|java|class|vb|vba|so|git|svn|hg|cvs)([^a-zA-Z0-9_]|$)\",\n \"parameters\": [\n {\n \"address\": \"server.request.uri.raw\",\n \"highlight\": [\n \".git\"\n ],\n \"key_path\": [],\n \"value\": \"/.git\"\n }\n ]\n }\n ]\n }\n]}", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.origin": "appsec", "_dd.p.appsec": "1", diff --git a/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_request_ipblock_match_403.json b/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_request_ipblock_match_403.json index 22b74fdb577..78c86b04a6f 100644 --- a/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_request_ipblock_match_403.json +++ b/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_request_ipblock_match_403.json @@ -11,7 +11,7 @@ "meta": { "_dd.appsec.event_rules.version": "rules_good", "_dd.appsec.json": "{\"triggers\":[{\"rule\":{\"id\":\"blk-001-001\",\"name\":\"Block IP addresses\",\"on_match\":[\"block\"],\"tags\":{\"category\":\"blocking\",\"type\":\"ip_addresses\"}},\"rule_matches\":[{\"operator\":\"ip_match\",\"operator_value\":\"\",\"parameters\":[{\"address\":\"http.client_ip\",\"key_path\":[],\"value\":\"8.8.4.4\",\"highlight\":[\"8.8.4.4\"]}]}],\"span_id\":10192376353237234254}]}", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.origin": "appsec", "_dd.p.appsec": "1", diff --git a/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_request_ipblock_match_403_json.json b/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_request_ipblock_match_403_json.json index 92b55f6fad4..6be4a7ac6f3 100644 --- a/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_request_ipblock_match_403_json.json +++ b/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_request_ipblock_match_403_json.json @@ -11,7 +11,7 @@ "meta": { "_dd.appsec.event_rules.version": "rules_good", "_dd.appsec.json": "{\"triggers\":[{\"rule\":{\"id\":\"blk-001-001\",\"name\":\"Block IP addresses\",\"on_match\":[\"block\"],\"tags\":{\"category\":\"blocking\",\"type\":\"ip_addresses\"}},\"rule_matches\":[{\"operator\":\"ip_match\",\"operator_value\":\"\",\"parameters\":[{\"address\":\"http.client_ip\",\"key_path\":[],\"value\":\"8.8.4.4\",\"highlight\":[\"8.8.4.4\"]}]}],\"span_id\":865087550764298227}]}", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.origin": "appsec", "_dd.p.appsec": "1", diff --git a/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_request_ipblock_nomatch_200.json b/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_request_ipblock_nomatch_200.json index 18e5a5002d3..b4063acc654 100644 --- a/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_request_ipblock_nomatch_200.json +++ b/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_request_ipblock_nomatch_200.json @@ -10,7 +10,7 @@ "error": 0, "meta": { "_dd.appsec.event_rules.version": "rules_good", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.p.dm": "-0", "_dd.p.tid": "654a694400000000", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403[flask_appsec_good_rules_env].json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403[flask_appsec_good_rules_env].json index 229ec986ff7..3cc105b6f7b 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403[flask_appsec_good_rules_env].json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403[flask_appsec_good_rules_env].json @@ -11,7 +11,7 @@ "meta": { "_dd.appsec.event_rules.version": "rules_good", "_dd.appsec.json": "{\"triggers\":[\n {\n \"rule\": {\n \"id\": \"blk-001-001\",\n \"name\": \"Block IP addresses\",\n \"on_match\": [\n \"block\"\n ],\n \"tags\": {\n \"category\": \"blocking\",\n \"type\": \"ip_addresses\"\n }\n },\n \"rule_matches\": [\n {\n \"operator\": \"ip_match\",\n \"operator_value\": \"\",\n \"parameters\": [\n {\n \"address\": \"http.client_ip\",\n \"highlight\": [\n \"8.8.4.4\"\n ],\n \"key_path\": [],\n \"value\": \"8.8.4.4\"\n }\n ]\n }\n ]\n }\n]}", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.origin": "appsec", "_dd.p.appsec": "1", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403[flask_appsec_good_rules_env]_220.json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403[flask_appsec_good_rules_env]_220.json index 4d23d78e00e..e4f9a3bbd41 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403[flask_appsec_good_rules_env]_220.json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403[flask_appsec_good_rules_env]_220.json @@ -11,7 +11,7 @@ "meta": { "_dd.appsec.event_rules.version": "rules_good", "_dd.appsec.json": "{\"triggers\":[\n {\n \"rule\": {\n \"id\": \"blk-001-001\",\n \"name\": \"Block IP addresses\",\n \"on_match\": [\n \"block\"\n ],\n \"tags\": {\n \"category\": \"blocking\",\n \"type\": \"ip_addresses\"\n }\n },\n \"rule_matches\": [\n {\n \"operator\": \"ip_match\",\n \"operator_value\": \"\",\n \"parameters\": [\n {\n \"address\": \"http.client_ip\",\n \"highlight\": [\n \"8.8.4.4\"\n ],\n \"key_path\": [],\n \"value\": \"8.8.4.4\"\n }\n ]\n }\n ]\n }\n]}", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.origin": "appsec", "_dd.p.appsec": "1", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403_json[flask_appsec_good_rules_env].json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403_json[flask_appsec_good_rules_env].json index 27ea2ea1f38..1bae578cd04 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403_json[flask_appsec_good_rules_env].json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403_json[flask_appsec_good_rules_env].json @@ -11,7 +11,7 @@ "meta": { "_dd.appsec.event_rules.version": "rules_good", "_dd.appsec.json": "{\"triggers\":[\n {\n \"rule\": {\n \"id\": \"blk-001-001\",\n \"name\": \"Block IP addresses\",\n \"on_match\": [\n \"block\"\n ],\n \"tags\": {\n \"category\": \"blocking\",\n \"type\": \"ip_addresses\"\n }\n },\n \"rule_matches\": [\n {\n \"operator\": \"ip_match\",\n \"operator_value\": \"\",\n \"parameters\": [\n {\n \"address\": \"http.client_ip\",\n \"highlight\": [\n \"8.8.4.4\"\n ],\n \"key_path\": [],\n \"value\": \"8.8.4.4\"\n }\n ]\n }\n ]\n }\n]}", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.origin": "appsec", "_dd.p.appsec": "1", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403_json[flask_appsec_good_rules_env]_220.json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403_json[flask_appsec_good_rules_env]_220.json index ca16524dd91..a86954d9d8d 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403_json[flask_appsec_good_rules_env]_220.json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_ipblock_match_403_json[flask_appsec_good_rules_env]_220.json @@ -11,7 +11,7 @@ "meta": { "_dd.appsec.event_rules.version": "rules_good", "_dd.appsec.json": "{\"triggers\":[\n {\n \"rule\": {\n \"id\": \"blk-001-001\",\n \"name\": \"Block IP addresses\",\n \"on_match\": [\n \"block\"\n ],\n \"tags\": {\n \"category\": \"blocking\",\n \"type\": \"ip_addresses\"\n }\n },\n \"rule_matches\": [\n {\n \"operator\": \"ip_match\",\n \"operator_value\": \"\",\n \"parameters\": [\n {\n \"address\": \"http.client_ip\",\n \"highlight\": [\n \"8.8.4.4\"\n ],\n \"key_path\": [],\n \"value\": \"8.8.4.4\"\n }\n ]\n }\n ]\n }\n]}", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.origin": "appsec", "_dd.p.appsec": "1", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_osspawn[flask_appsec_good_rules_env].json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_osspawn[flask_appsec_good_rules_env].json index e470ba509a5..76091771279 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_osspawn[flask_appsec_good_rules_env].json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_osspawn[flask_appsec_good_rules_env].json @@ -10,7 +10,7 @@ "error": 0, "meta": { "_dd.appsec.event_rules.version": "rules_good", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.p.dm": "-0", "_dd.p.tid": "654a694400000000", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_osspawn[flask_appsec_good_rules_env]_220.json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_osspawn[flask_appsec_good_rules_env]_220.json index d27f02d94e5..60246c266f4 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_osspawn[flask_appsec_good_rules_env]_220.json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_osspawn[flask_appsec_good_rules_env]_220.json @@ -10,7 +10,7 @@ "error": 0, "meta": { "_dd.appsec.event_rules.version": "rules_good", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.p.dm": "-0", "_dd.p.tid": "654a694400000000", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_ossystem[flask_appsec_good_rules_env].json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_ossystem[flask_appsec_good_rules_env].json index 83566fae407..e6f675990a6 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_ossystem[flask_appsec_good_rules_env].json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_ossystem[flask_appsec_good_rules_env].json @@ -10,7 +10,7 @@ "error": 0, "meta": { "_dd.appsec.event_rules.version": "rules_good", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.p.dm": "-0", "_dd.p.tid": "654a694400000000", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_ossystem[flask_appsec_good_rules_env]_220.json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_ossystem[flask_appsec_good_rules_env]_220.json index d2f5264e869..d0cf04b355c 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_ossystem[flask_appsec_good_rules_env]_220.json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_ossystem[flask_appsec_good_rules_env]_220.json @@ -10,7 +10,7 @@ "error": 0, "meta": { "_dd.appsec.event_rules.version": "rules_good", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.p.dm": "-0", "_dd.p.tid": "654a694400000000", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicatenoshell[flask_appsec_good_rules_env].json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicatenoshell[flask_appsec_good_rules_env].json index 06c532e5af5..f8f29438de6 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicatenoshell[flask_appsec_good_rules_env].json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicatenoshell[flask_appsec_good_rules_env].json @@ -10,7 +10,7 @@ "error": 0, "meta": { "_dd.appsec.event_rules.version": "rules_good", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.p.dm": "-0", "_dd.p.tid": "654a694400000000", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicatenoshell[flask_appsec_good_rules_env]_220.json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicatenoshell[flask_appsec_good_rules_env]_220.json index 827c5946399..27b97da6b56 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicatenoshell[flask_appsec_good_rules_env]_220.json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicatenoshell[flask_appsec_good_rules_env]_220.json @@ -10,7 +10,7 @@ "error": 0, "meta": { "_dd.appsec.event_rules.version": "rules_good", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.p.dm": "-0", "_dd.p.tid": "654a694400000000", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicateshell[flask_appsec_good_rules_env].json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicateshell[flask_appsec_good_rules_env].json index 9746bfdde50..199c5e1c451 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicateshell[flask_appsec_good_rules_env].json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicateshell[flask_appsec_good_rules_env].json @@ -10,7 +10,7 @@ "error": 0, "meta": { "_dd.appsec.event_rules.version": "rules_good", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.p.dm": "-0", "_dd.p.tid": "654a694400000000", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicateshell[flask_appsec_good_rules_env]_220.json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicateshell[flask_appsec_good_rules_env]_220.json index a9c5594a43c..47779f920c0 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicateshell[flask_appsec_good_rules_env]_220.json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_processexec_subprocesscommunicateshell[flask_appsec_good_rules_env]_220.json @@ -10,7 +10,7 @@ "error": 0, "meta": { "_dd.appsec.event_rules.version": "rules_good", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.p.dm": "-0", "_dd.p.tid": "654a694400000000", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_200_json[flask_appsec_good_rules_env].json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_200_json[flask_appsec_good_rules_env].json index 29a0c9dae32..111387da41c 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_200_json[flask_appsec_good_rules_env].json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_200_json[flask_appsec_good_rules_env].json @@ -10,7 +10,7 @@ "error": 0, "meta": { "_dd.appsec.event_rules.version": "rules_good", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.p.dm": "-0", "_dd.p.tid": "654a694400000000", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_200_json[flask_appsec_good_rules_env]_220.json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_200_json[flask_appsec_good_rules_env]_220.json index 506121e72ef..cab2b4c9d06 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_200_json[flask_appsec_good_rules_env]_220.json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_200_json[flask_appsec_good_rules_env]_220.json @@ -10,7 +10,7 @@ "error": 0, "meta": { "_dd.appsec.event_rules.version": "rules_good", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.p.dm": "-0", "_dd.p.tid": "654a694400000000", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_403_json[flask_appsec_good_rules_env].json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_403_json[flask_appsec_good_rules_env].json index c355503b7f5..d8185a5ce1d 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_403_json[flask_appsec_good_rules_env].json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_403_json[flask_appsec_good_rules_env].json @@ -11,7 +11,7 @@ "meta": { "_dd.appsec.event_rules.version": "rules_good", "_dd.appsec.json": "{\"triggers\":[\n {\n \"rule\": {\n \"id\": \"blk-001-002\",\n \"name\": \"Block User Addresses\",\n \"on_match\": [\n \"block\"\n ],\n \"tags\": {\n \"category\": \"security_response\",\n \"type\": \"block_user\"\n }\n },\n \"rule_matches\": [\n {\n \"operator\": \"exact_match\",\n \"operator_value\": \"\",\n \"parameters\": [\n {\n \"address\": \"usr.id\",\n \"highlight\": [\n \"123456\"\n ],\n \"key_path\": [],\n \"value\": \"123456\"\n }\n ]\n }\n ]\n }\n]}", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.origin": "appsec", "_dd.p.appsec": "1", diff --git a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_403_json[flask_appsec_good_rules_env]_220.json b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_403_json[flask_appsec_good_rules_env]_220.json index 97962d54032..55ecc81f364 100644 --- a/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_403_json[flask_appsec_good_rules_env]_220.json +++ b/tests/snapshots/tests.contrib.flask.test_appsec_flask_snapshot.test_flask_userblock_match_403_json[flask_appsec_good_rules_env]_220.json @@ -11,7 +11,7 @@ "meta": { "_dd.appsec.event_rules.version": "rules_good", "_dd.appsec.json": "{\"triggers\":[\n {\n \"rule\": {\n \"id\": \"blk-001-002\",\n \"name\": \"Block User Addresses\",\n \"on_match\": [\n \"block\"\n ],\n \"tags\": {\n \"category\": \"security_response\",\n \"type\": \"block_user\"\n }\n },\n \"rule_matches\": [\n {\n \"operator\": \"exact_match\",\n \"operator_value\": \"\",\n \"parameters\": [\n {\n \"address\": \"usr.id\",\n \"highlight\": [\n \"123456\"\n ],\n \"key_path\": [],\n \"value\": \"123456\"\n }\n ]\n }\n ]\n }\n]}", - "_dd.appsec.waf.version": "1.18.0", + "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.origin": "appsec", "_dd.p.appsec": "1", From 40ce68644e3701bd0a6d604b76d84f9d814bf882 Mon Sep 17 00:00:00 2001 From: Juanjo Alvarez Martinez Date: Tue, 23 Jul 2024 13:31:42 +0200 Subject: [PATCH 18/29] chore: remove another temporal in the propagation test (#9870) ## Description There was a missing temporal engine in the fixture for the propagation test that could make the test flaky if the temporal string address was reused and not expunged from the taint dictionary. This removed it and no more temporal should remain on the fixture. ## Checklist - [X] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) Signed-off-by: Juanjo Alvarez --- tests/appsec/iast/fixtures/propagation_path.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/appsec/iast/fixtures/propagation_path.py b/tests/appsec/iast/fixtures/propagation_path.py index e411fade164..2c46d2f2a69 100644 --- a/tests/appsec/iast/fixtures/propagation_path.py +++ b/tests/appsec/iast/fixtures/propagation_path.py @@ -146,7 +146,8 @@ def propagation_memory_check(origin_string1, tainted_string_2): string11 = "notainted#{}".format(string10) # TAINTSOURCE1TAINTSOURCE2-TAINTSOURCE1TAINTSOURCE2-TAINTSOURCE1TAINTSOURCE_notainted string12 = string11.rsplit("#")[1] - string13 = string12 + "\n" + "notainted" + string13_pre = string12 + "\n" + string13 = string13_pre + "notainted" # TAINTSOURCE1TAINTSOURCE2-TAINTSOURCE1TAINTSOURCE2-TAINTSOURCE1TAINTSOURCE_notainted\nnotainted string14 = string13.splitlines()[0] # string14 = string12 # TAINTSOURCE1TAINTSOURCE2-TAINTSOURCE1TAINTSOURCE2-TAINTSOURCE1TAINTSOURCE_notainted From 05f1e3b36bb027c5f919c5f207202b2703d6def2 Mon Sep 17 00:00:00 2001 From: Rachel Yang Date: Tue, 23 Jul 2024 12:10:28 -0400 Subject: [PATCH 19/29] chore: adding type Literal to constants for files in appsec (#9891) Any constant can be typed as being a literal instead of a type. This change will ensure that anywhere we use a constant for typing it means literally the value instead of a type of str. In order for this to work for Python < 3.8 we will need to add typing_extensions as a dependency. ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --------- Co-authored-by: Zachary Groves <32471391+ZStriker19@users.noreply.github.com> Co-authored-by: Federico Mon --- ddtrace/appsec/_asm_request_context.py | 20 +- ddtrace/appsec/_constants.py | 282 ++++++++++++++----------- 2 files changed, 168 insertions(+), 134 deletions(-) diff --git a/ddtrace/appsec/_asm_request_context.py b/ddtrace/appsec/_asm_request_context.py index df4795b2c48..39229bfff6b 100644 --- a/ddtrace/appsec/_asm_request_context.py +++ b/ddtrace/appsec/_asm_request_context.py @@ -1,6 +1,7 @@ import contextlib import functools import json +import sys from typing import Any from typing import Callable from typing import Dict @@ -31,13 +32,18 @@ # Stopgap module for providing ASM context for the blocking features wrapping some contextvars. -_WAF_ADDRESSES = "waf_addresses" -_CALLBACKS = "callbacks" -_TELEMETRY = "telemetry" -_CONTEXT_CALL = "context" -_WAF_CALL = "waf_run" -_BLOCK_CALL = "block" -_TELEMETRY_WAF_RESULTS = "t_waf_results" +if sys.version_info >= (3, 8): + from typing import Literal # noqa:F401 +else: + from typing_extensions import Literal # noqa:F401 + +_WAF_ADDRESSES: Literal["waf_addresses"] = "waf_addresses" +_CALLBACKS: Literal["callbacks"] = "callbacks" +_TELEMETRY: Literal["telemetry"] = "telemetry" +_CONTEXT_CALL: Literal["context"] = "context" +_WAF_CALL: Literal["waf_run"] = "waf_run" +_BLOCK_CALL: Literal["block"] = "block" +_TELEMETRY_WAF_RESULTS: Literal["t_waf_results"] = "t_waf_results" GLOBAL_CALLBACKS: Dict[str, List[Callable]] = {} diff --git a/ddtrace/appsec/_constants.py b/ddtrace/appsec/_constants.py index 49716c7412b..addaa6f7dc5 100644 --- a/ddtrace/appsec/_constants.py +++ b/ddtrace/appsec/_constants.py @@ -1,4 +1,12 @@ import os +import sys + + +if sys.version_info >= (3, 8): + from typing import Literal # noqa:F401 +else: + from typing_extensions import Literal # noqa:F401 + from typing import Any from typing import Iterator @@ -41,85 +49,103 @@ def __getitem__(self, k: str) -> Any: class APPSEC(metaclass=Constant_Class): """Specific constants for AppSec""" - ENV = "DD_APPSEC_ENABLED" - STANDALONE_ENV = "DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED" - RULE_FILE = "DD_APPSEC_RULES" - ENABLED = "_dd.appsec.enabled" - JSON = "_dd.appsec.json" - STRUCT = "appsec" - EVENT_RULE_VERSION = "_dd.appsec.event_rules.version" - EVENT_RULE_ERRORS = "_dd.appsec.event_rules.errors" - EVENT_RULE_LOADED = "_dd.appsec.event_rules.loaded" - EVENT_RULE_ERROR_COUNT = "_dd.appsec.event_rules.error_count" - WAF_DURATION = "_dd.appsec.waf.duration" - WAF_DURATION_EXT = "_dd.appsec.waf.duration_ext" - WAF_TIMEOUTS = "_dd.appsec.waf.timeouts" - WAF_VERSION = "_dd.appsec.waf.version" - RASP_DURATION = "_dd.appsec.rasp.duration" - RASP_DURATION_EXT = "_dd.appsec.rasp.duration_ext" - RASP_RULE_EVAL = "_dd.appsec.rasp.rule.eval" - ORIGIN_VALUE = "appsec" - CUSTOM_EVENT_PREFIX = "appsec.events" - USER_LOGIN_EVENT_PREFIX = "_dd.appsec.events.users.login" - USER_LOGIN_EVENT_PREFIX_PUBLIC = "appsec.events.users.login" - USER_LOGIN_EVENT_SUCCESS_TRACK = "appsec.events.users.login.success.track" - USER_LOGIN_EVENT_FAILURE_TRACK = "appsec.events.users.login.failure.track" - USER_SIGNUP_EVENT = "appsec.events.users.signup.track" - AUTO_LOGIN_EVENTS_SUCCESS_MODE = "_dd.appsec.events.users.login.success.auto.mode" - AUTO_LOGIN_EVENTS_FAILURE_MODE = "_dd.appsec.events.users.login.failure.auto.mode" - BLOCKED = "appsec.blocked" - EVENT = "appsec.event" - AUTOMATIC_USER_EVENTS_TRACKING = "DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING" # DEPRECATED - AUTO_USER_INSTRUMENTATION_MODE = "DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE" - AUTO_USER_INSTRUMENTATION_MODE_ENABLED = "DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING_ENABLED" - USER_MODEL_LOGIN_FIELD = "DD_USER_MODEL_LOGIN_FIELD" - USER_MODEL_EMAIL_FIELD = "DD_USER_MODEL_EMAIL_FIELD" - USER_MODEL_NAME_FIELD = "DD_USER_MODEL_NAME_FIELD" - PROPAGATION_HEADER = "_dd.p.appsec" - OBFUSCATION_PARAMETER_KEY_REGEXP = "DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP" - OBFUSCATION_PARAMETER_VALUE_REGEXP = "DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP" + ENV: Literal["DD_APPSEC_ENABLED"] = "DD_APPSEC_ENABLED" + STANDALONE_ENV: Literal["DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED"] = "DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED" + RULE_FILE: Literal["DD_APPSEC_RULES"] = "DD_APPSEC_RULES" + ENABLED: Literal["_dd.appsec.enabled"] = "_dd.appsec.enabled" + JSON: Literal["_dd.appsec.json"] = "_dd.appsec.json" + STRUCT: Literal["appsec"] = "appsec" + EVENT_RULE_VERSION: Literal["_dd.appsec.event_rules.version"] = "_dd.appsec.event_rules.version" + EVENT_RULE_ERRORS: Literal["_dd.appsec.event_rules.errors"] = "_dd.appsec.event_rules.errors" + EVENT_RULE_LOADED: Literal["_dd.appsec.event_rules.loaded"] = "_dd.appsec.event_rules.loaded" + EVENT_RULE_ERROR_COUNT: Literal["_dd.appsec.event_rules.error_count"] = "_dd.appsec.event_rules.error_count" + WAF_DURATION: Literal["_dd.appsec.waf.duration"] = "_dd.appsec.waf.duration" + WAF_DURATION_EXT: Literal["_dd.appsec.waf.duration_ext"] = "_dd.appsec.waf.duration_ext" + WAF_TIMEOUTS: Literal["_dd.appsec.waf.timeouts"] = "_dd.appsec.waf.timeouts" + WAF_VERSION: Literal["_dd.appsec.waf.version"] = "_dd.appsec.waf.version" + RASP_DURATION: Literal["_dd.appsec.rasp.duration"] = "_dd.appsec.rasp.duration" + RASP_DURATION_EXT: Literal["_dd.appsec.rasp.duration_ext"] = "_dd.appsec.rasp.duration_ext" + RASP_RULE_EVAL: Literal["_dd.appsec.rasp.rule.eval"] = "_dd.appsec.rasp.rule.eval" + ORIGIN_VALUE: Literal["appsec"] = "appsec" + CUSTOM_EVENT_PREFIX: Literal["appsec.events"] = "appsec.events" + USER_LOGIN_EVENT_PREFIX: Literal["_dd.appsec.events.users.login"] = "_dd.appsec.events.users.login" + USER_LOGIN_EVENT_PREFIX_PUBLIC: Literal["appsec.events.users.login"] = "appsec.events.users.login" + USER_LOGIN_EVENT_SUCCESS_TRACK: Literal[ + "appsec.events.users.login.success.track" + ] = "appsec.events.users.login.success.track" + USER_LOGIN_EVENT_FAILURE_TRACK: Literal[ + "appsec.events.users.login.failure.track" + ] = "appsec.events.users.login.failure.track" + USER_SIGNUP_EVENT: Literal["appsec.events.users.signup.track"] = "appsec.events.users.signup.track" + AUTO_LOGIN_EVENTS_SUCCESS_MODE: Literal[ + "_dd.appsec.events.users.login.success.auto.mode" + ] = "_dd.appsec.events.users.login.success.auto.mode" + AUTO_LOGIN_EVENTS_FAILURE_MODE: Literal[ + "_dd.appsec.events.users.login.failure.auto.mode" + ] = "_dd.appsec.events.users.login.failure.auto.mode" + BLOCKED: Literal["appsec.blocked"] = "appsec.blocked" + EVENT: Literal["appsec.event"] = "appsec.event" + AUTOMATIC_USER_EVENTS_TRACKING: Literal[ + "DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING" + ] = "DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING" + AUTO_USER_INSTRUMENTATION_MODE: Literal[ + "DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE" + ] = "DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE" + AUTO_USER_INSTRUMENTATION_MODE_ENABLED: Literal[ + "DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING_ENABLED" + ] = "DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING_ENABLED" + USER_MODEL_LOGIN_FIELD: Literal["DD_USER_MODEL_LOGIN_FIELD"] = "DD_USER_MODEL_LOGIN_FIELD" + USER_MODEL_EMAIL_FIELD: Literal["DD_USER_MODEL_EMAIL_FIELD"] = "DD_USER_MODEL_EMAIL_FIELD" + USER_MODEL_NAME_FIELD: Literal["DD_USER_MODEL_NAME_FIELD"] = "DD_USER_MODEL_NAME_FIELD" + PROPAGATION_HEADER: Literal["_dd.p.appsec"] = "_dd.p.appsec" + OBFUSCATION_PARAMETER_KEY_REGEXP: Literal[ + "DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP" + ] = "DD_APPSEC_OBFUSCATION_PARAMETER_KEY_REGEXP" + OBFUSCATION_PARAMETER_VALUE_REGEXP: Literal[ + "DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP" + ] = "DD_APPSEC_OBFUSCATION_PARAMETER_VALUE_REGEXP" class IAST(metaclass=Constant_Class): """Specific constants for IAST""" - ENV = "DD_IAST_ENABLED" - ENV_DEBUG = "_DD_IAST_DEBUG" - TELEMETRY_REPORT_LVL = "DD_IAST_TELEMETRY_VERBOSITY" - LAZY_TAINT = "_DD_IAST_LAZY_TAINT" - JSON = "_dd.iast.json" - ENABLED = "_dd.iast.enabled" - CONTEXT_KEY = "_iast_data" - PATCH_MODULES = "_DD_IAST_PATCH_MODULES" - DENY_MODULES = "_DD_IAST_DENY_MODULES" - SEP_MODULES = "," - REQUEST_IAST_ENABLED = "_dd.iast.request_enabled" + ENV: Literal["DD_IAST_ENABLED"] = "DD_IAST_ENABLED" + ENV_DEBUG: Literal["_DD_IAST_DEBUG"] = "_DD_IAST_DEBUG" + TELEMETRY_REPORT_LVL: Literal["DD_IAST_TELEMETRY_VERBOSITY"] = "DD_IAST_TELEMETRY_VERBOSITY" + LAZY_TAINT: Literal["_DD_IAST_LAZY_TAINT"] = "_DD_IAST_LAZY_TAINT" + JSON: Literal["_dd.iast.json"] = "_dd.iast.json" + ENABLED: Literal["_dd.iast.enabled"] = "_dd.iast.enabled" + CONTEXT_KEY: Literal["_iast_data"] = "_iast_data" + PATCH_MODULES: Literal["_DD_IAST_PATCH_MODULES"] = "_DD_IAST_PATCH_MODULES" + DENY_MODULES: Literal["_DD_IAST_DENY_MODULES"] = "_DD_IAST_DENY_MODULES" + SEP_MODULES: Literal[","] = "," + REQUEST_IAST_ENABLED: Literal["_dd.iast.request_enabled"] = "_dd.iast.request_enabled" TEXT_TYPES = (str, bytes, bytearray) class IAST_SPAN_TAGS(metaclass=Constant_Class): """Specific constants for IAST span tags""" - TELEMETRY_REQUEST_TAINTED = "_dd.iast.telemetry.request.tainted" - TELEMETRY_EXECUTED_SINK = "_dd.iast.telemetry.executed.sink" + TELEMETRY_REQUEST_TAINTED: Literal["_dd.iast.telemetry.request.tainted"] = "_dd.iast.telemetry.request.tainted" + TELEMETRY_EXECUTED_SINK: Literal["_dd.iast.telemetry.executed.sink"] = "_dd.iast.telemetry.executed.sink" class WAF_DATA_NAMES(metaclass=Constant_Class): """string names used by the waf library for requesting data from requests""" # PERSISTENT ADDRESSES - REQUEST_BODY = "server.request.body" - REQUEST_QUERY = "server.request.query" - REQUEST_HEADERS_NO_COOKIES = "server.request.headers.no_cookies" - REQUEST_URI_RAW = "server.request.uri.raw" - REQUEST_METHOD = "server.request.method" - REQUEST_PATH_PARAMS = "server.request.path_params" - REQUEST_COOKIES = "server.request.cookies" - REQUEST_HTTP_IP = "http.client_ip" - REQUEST_USER_ID = "usr.id" - RESPONSE_STATUS = "server.response.status" - RESPONSE_HEADERS_NO_COOKIES = "server.response.headers.no_cookies" - RESPONSE_BODY = "server.response.body" + REQUEST_BODY: Literal["server.request.body"] = "server.request.body" + REQUEST_QUERY: Literal["server.request.query"] = "server.request.query" + REQUEST_HEADERS_NO_COOKIES: Literal["server.request.headers.no_cookies"] = "server.request.headers.no_cookies" + REQUEST_URI_RAW: Literal["server.request.uri.raw"] = "server.request.uri.raw" + REQUEST_METHOD: Literal["server.request.method"] = "server.request.method" + REQUEST_PATH_PARAMS: Literal["server.request.path_params"] = "server.request.path_params" + REQUEST_COOKIES: Literal["server.request.cookies"] = "server.request.cookies" + REQUEST_HTTP_IP: Literal["http.client_ip"] = "http.client_ip" + REQUEST_USER_ID: Literal["usr.id"] = "usr.id" + RESPONSE_STATUS: Literal["server.response.status"] = "server.response.status" + RESPONSE_HEADERS_NO_COOKIES: Literal["server.response.headers.no_cookies"] = "server.response.headers.no_cookies" + RESPONSE_BODY: Literal["server.response.body"] = "server.response.body" PERSISTENT_ADDRESSES = frozenset( ( REQUEST_BODY, @@ -138,73 +164,75 @@ class WAF_DATA_NAMES(metaclass=Constant_Class): ) # EPHEMERAL ADDRESSES - PROCESSOR_SETTINGS = "waf.context.processor" - LFI_ADDRESS = "server.io.fs.file" - SSRF_ADDRESS = "server.io.net.url" - SQLI_ADDRESS = "server.db.statement" - SQLI_SYSTEM_ADDRESS = "server.db.system" + PROCESSOR_SETTINGS: Literal["waf.context.processor"] = "waf.context.processor" + LFI_ADDRESS: Literal["server.io.fs.file"] = "server.io.fs.file" + SSRF_ADDRESS: Literal["server.io.net.url"] = "server.io.net.url" + SQLI_ADDRESS: Literal["server.db.statement"] = "server.db.statement" + SQLI_SYSTEM_ADDRESS: Literal["server.db.system"] = "server.db.system" class SPAN_DATA_NAMES(metaclass=Constant_Class): """string names used by the library for tagging data from requests in context or span""" - REQUEST_BODY = "http.request.body" - REQUEST_QUERY = "http.request.query" - REQUEST_HEADERS_NO_COOKIES = "http.request.headers" - REQUEST_HEADERS_NO_COOKIES_CASE = "http.request.headers_case_sensitive" - REQUEST_URI_RAW = "http.request.uri" - REQUEST_ROUTE = "http.request.route" - REQUEST_METHOD = "http.request.method" + REQUEST_BODY: Literal["http.request.body"] = "http.request.body" + REQUEST_QUERY: Literal["http.request.query"] = "http.request.query" + REQUEST_HEADERS_NO_COOKIES: Literal["http.request.headers"] = "http.request.headers" + REQUEST_HEADERS_NO_COOKIES_CASE: Literal[ + "http.request.headers_case_sensitive" + ] = "http.request.headers_case_sensitive" + REQUEST_URI_RAW: Literal["http.request.uri"] = "http.request.uri" + REQUEST_ROUTE: Literal["http.request.route"] = "http.request.route" + REQUEST_METHOD: Literal["http.request.method"] = "http.request.method" REQUEST_PATH_PARAMS = REQUEST_PATH_PARAMS - REQUEST_COOKIES = "http.request.cookies" - REQUEST_HTTP_IP = "http.request.remote_ip" - REQUEST_USER_ID = "usr.id" - RESPONSE_STATUS = "http.response.status" + REQUEST_COOKIES: Literal["http.request.cookies"] = "http.request.cookies" + REQUEST_HTTP_IP: Literal["http.request.remote_ip"] = "http.request.remote_ip" + REQUEST_USER_ID: Literal["usr.id"] = "usr.id" + RESPONSE_STATUS: Literal["http.response.status"] = "http.response.status" RESPONSE_HEADERS_NO_COOKIES = RESPONSE_HEADERS - RESPONSE_BODY = "http.response.body" - GRPC_SERVER_REQUEST_MESSAGE = "grpc.server.request.message" - GRPC_SERVER_RESPONSE_MESSAGE = "grpc.server.response.message" - GRPC_SERVER_REQUEST_METADATA = "grpc.server.request.metadata" - GRPC_SERVER_METHOD = "grpc.server.method" + RESPONSE_BODY: Literal["http.response.body"] = "http.response.body" + GRPC_SERVER_REQUEST_MESSAGE: Literal["grpc.server.request.message"] = "grpc.server.request.message" + GRPC_SERVER_RESPONSE_MESSAGE: Literal["grpc.server.response.message"] = "grpc.server.response.message" + GRPC_SERVER_REQUEST_METADATA: Literal["grpc.server.request.metadata"] = "grpc.server.request.metadata" + GRPC_SERVER_METHOD: Literal["grpc.server.method"] = "grpc.server.method" class API_SECURITY(metaclass=Constant_Class): """constants related to API Security""" - ENABLED = "_dd.appsec.api_security.enabled" - ENV_VAR_ENABLED = "DD_API_SECURITY_ENABLED" - PARSE_RESPONSE_BODY = "DD_API_SECURITY_PARSE_RESPONSE_BODY" - REQUEST_HEADERS_NO_COOKIES = "_dd.appsec.s.req.headers" - REQUEST_COOKIES = "_dd.appsec.s.req.cookies" - REQUEST_QUERY = "_dd.appsec.s.req.query" - REQUEST_PATH_PARAMS = "_dd.appsec.s.req.params" - REQUEST_BODY = "_dd.appsec.s.req.body" - RESPONSE_HEADERS_NO_COOKIES = "_dd.appsec.s.res.headers" - RESPONSE_BODY = "_dd.appsec.s.res.body" - SAMPLE_RATE = "DD_API_SECURITY_REQUEST_SAMPLE_RATE" - SAMPLE_DELAY = "DD_API_SECURITY_SAMPLE_DELAY" - MAX_PAYLOAD_SIZE = 0x1000000 # 16MB maximum size + ENABLED: Literal["_dd.appsec.api_security.enabled"] = "_dd.appsec.api_security.enabled" + ENV_VAR_ENABLED: Literal["DD_API_SECURITY_ENABLED"] = "DD_API_SECURITY_ENABLED" + PARSE_RESPONSE_BODY: Literal["DD_API_SECURITY_PARSE_RESPONSE_BODY"] = "DD_API_SECURITY_PARSE_RESPONSE_BODY" + REQUEST_HEADERS_NO_COOKIES: Literal["_dd.appsec.s.req.headers"] = "_dd.appsec.s.req.headers" + REQUEST_COOKIES: Literal["_dd.appsec.s.req.cookies"] = "_dd.appsec.s.req.cookies" + REQUEST_QUERY: Literal["_dd.appsec.s.req.query"] = "_dd.appsec.s.req.query" + REQUEST_PATH_PARAMS: Literal["_dd.appsec.s.req.params"] = "_dd.appsec.s.req.params" + REQUEST_BODY: Literal["_dd.appsec.s.req.body"] = "_dd.appsec.s.req.body" + RESPONSE_HEADERS_NO_COOKIES: Literal["_dd.appsec.s.res.headers"] = "_dd.appsec.s.res.headers" + RESPONSE_BODY: Literal["_dd.appsec.s.res.body"] = "_dd.appsec.s.res.body" + SAMPLE_RATE: Literal["DD_API_SECURITY_REQUEST_SAMPLE_RATE"] = "DD_API_SECURITY_REQUEST_SAMPLE_RATE" + SAMPLE_DELAY: Literal["DD_API_SECURITY_SAMPLE_DELAY"] = "DD_API_SECURITY_SAMPLE_DELAY" + MAX_PAYLOAD_SIZE: Literal[0x1000000] = 0x1000000 # 16MB maximum size class WAF_CONTEXT_NAMES(metaclass=Constant_Class): """string names used by the library for tagging data from requests in context""" - RESULTS = "http.request.waf.results" + RESULTS: Literal["http.request.waf.results"] = "http.request.waf.results" BLOCKED = HTTP_REQUEST_BLOCKED - CALLBACK = "http.request.waf.callback" + CALLBACK: Literal["http.request.waf.callback"] = "http.request.waf.callback" class WAF_ACTIONS(metaclass=Constant_Class): """string identifier for actions returned by the waf""" - BLOCK = "block" - PARAMETERS = "parameters" - TYPE = "type" - ID = "id" + BLOCK: Literal["block"] = "block" + PARAMETERS: Literal["parameters"] = "parameters" + TYPE: Literal["type"] = "type" + ID: Literal["id"] = "id" DEFAULT_PARAMETERS = STATUS_403_TYPE_AUTO - BLOCK_ACTION = "block_request" - REDIRECT_ACTION = "redirect_request" - STACK_ACTION = "generate_stack" + BLOCK_ACTION: Literal["block_request"] = "block_request" + REDIRECT_ACTION: Literal["redirect_request"] = "redirect_request" + STACK_ACTION: Literal["generate_stack"] = "generate_stack" DEFAULT_ACTIONS = { BLOCK: { ID: BLOCK, @@ -217,10 +245,10 @@ class WAF_ACTIONS(metaclass=Constant_Class): class PRODUCTS(metaclass=Constant_Class): """string identifier for remote config products""" - ASM = "ASM" - ASM_DATA = "ASM_DATA" - ASM_DD = "ASM_DD" - ASM_FEATURES = "ASM_FEATURES" + ASM: Literal["ASM"] = "ASM" + ASM_DATA: Literal["ASM_DATA"] = "ASM_DATA" + ASM_DD: Literal["ASM_DD"] = "ASM_DD" + ASM_FEATURES: Literal["ASM_FEATURES"] = "ASM_FEATURES" class LOGIN_EVENTS_MODE(metaclass=Constant_Class): @@ -233,11 +261,11 @@ class LOGIN_EVENTS_MODE(metaclass=Constant_Class): SDK: manually issued login events using the SDK. """ - DISABLED = "disabled" - IDENT = "identification" - ANON = "anonymization" - SDK = "sdk" - AUTO = "auto" + DISABLED: Literal["disabled"] = "disabled" + IDENT: Literal["identification"] = "identification" + ANON: Literal["anonymization"] = "anonymization" + SDK: Literal["sdk"] = "sdk" + AUTO: Literal["auto"] = "auto" class DEFAULT(metaclass=Constant_Class): @@ -260,20 +288,20 @@ class DEFAULT(metaclass=Constant_Class): class EXPLOIT_PREVENTION(metaclass=Constant_Class): - STACK_TRACES = "_dd.stack" - STACK_TRACE_ID = "stack_id" - EP_ENABLED = "DD_APPSEC_RASP_ENABLED" - STACK_TRACE_ENABLED = "DD_APPSEC_STACK_TRACE_ENABLED" - MAX_STACK_TRACES = "DD_APPSEC_MAX_STACK_TRACES" - MAX_STACK_TRACE_DEPTH = "DD_APPSEC_MAX_STACK_TRACE_DEPTH" + STACK_TRACES: Literal["_dd.stack"] = "_dd.stack" + STACK_TRACE_ID: Literal["stack_id"] = "stack_id" + EP_ENABLED: Literal["DD_APPSEC_RASP_ENABLED"] = "DD_APPSEC_RASP_ENABLED" + STACK_TRACE_ENABLED: Literal["DD_APPSEC_STACK_TRACE_ENABLED"] = "DD_APPSEC_STACK_TRACE_ENABLED" + MAX_STACK_TRACES: Literal["DD_APPSEC_MAX_STACK_TRACES"] = "DD_APPSEC_MAX_STACK_TRACES" + MAX_STACK_TRACE_DEPTH: Literal["DD_APPSEC_MAX_STACK_TRACE_DEPTH"] = "DD_APPSEC_MAX_STACK_TRACE_DEPTH" class TYPE(metaclass=Constant_Class): - LFI = "lfi" - SSRF = "ssrf" - SQLI = "sql_injection" + LFI: Literal["lfi"] = "lfi" + SSRF: Literal["ssrf"] = "ssrf" + SQLI: Literal["sql_injection"] = "sql_injection" class ADDRESS(metaclass=Constant_Class): - LFI = "LFI_ADDRESS" - SSRF = "SSRF_ADDRESS" - SQLI = "SQLI_ADDRESS" - SQLI_TYPE = "SQLI_SYSTEM_ADDRESS" + LFI: Literal["LFI_ADDRESS"] = "LFI_ADDRESS" + SSRF: Literal["SSRF_ADDRESS"] = "SSRF_ADDRESS" + SQLI: Literal["SQLI_ADDRESS"] = "SQLI_ADDRESS" + SQLI_TYPE: Literal["SQLI_SYSTEM_ADDRESS"] = "SQLI_SYSTEM_ADDRESS" From de35e9a10995fcfbbe817c304aa51f1d1f37b572 Mon Sep 17 00:00:00 2001 From: Emmett Butler <723615+emmettbutler@users.noreply.github.com> Date: Tue, 23 Jul 2024 09:37:13 -0700 Subject: [PATCH 20/29] ci: test on 3.12 where appropriate (#9703) This change updates many test suites to include Python 3.12 in their set of tested runtimes. The ones that haven't been updated in this way are those that appear to require code changes for 3.12 support to work. This change matters because 3.12 is among the officially supported runtimes by this library. Most of the line changes in this diff are in generated riot lockfiles and can be ignored. The removal of the snapshot assertion in the test harness made some asynchronous tests pass without breaking any others. ## Checklist - [x] The PR description includes an overview of the change - [x] The PR description articulates the motivation for the change - [x] The change includes tests OR the PR description describes a testing strategy - [x] The PR description notes risks associated with the change, if any - [x] Newly-added code is easy to change - [x] The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - [x] The change includes or references documentation updates if necessary - [x] Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Title is accurate - [x] All changes are related to the pull request's stated goal - [x] Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - [x] Testing strategy adequately addresses listed risks - [x] Newly-added code is easy to change - [x] Release note makes sense to a user of the library - [x] If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - [x] Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --------- Co-authored-by: Brett Langdon Co-authored-by: Christophe Papazian <114495376+christophe-papazian@users.noreply.github.com> --- .circleci/config.templ.yml | 1 + .github/workflows/requirements-locks.yml | 2 +- .../requirements/{103f817.txt => 1026e4e.txt} | 18 +- .riot/requirements/104310d.txt | 61 ---- .riot/requirements/1070785.txt | 86 ----- .../requirements/{17d7a61.txt => 1092157.txt} | 14 +- .riot/requirements/10bdae9.txt | 29 ++ .riot/requirements/10e6eb3.txt | 90 ----- .../requirements/{196b6c3.txt => 111ed90.txt} | 19 +- .../requirements/{1cb14d6.txt => 115aba5.txt} | 10 +- .../requirements/{d15238d.txt => 11705e0.txt} | 30 +- .riot/requirements/11f3313.txt | 46 +++ .../requirements/{1460721.txt => 1212ab8.txt} | 28 +- .../requirements/{18f872d.txt => 121a519.txt} | 30 +- .riot/requirements/125f4b9.txt | 64 ++-- .riot/requirements/12bf701.txt | 23 ++ .riot/requirements/12d5b48.txt | 27 ++ .riot/requirements/12e6c9b.txt | 305 +++++++++++++++++ .riot/requirements/1356251.txt | 35 ++ .../requirements/{1338800.txt => 137098c.txt} | 8 +- .../requirements/{1e7ee60.txt => 13804af.txt} | 30 +- .riot/requirements/13c0fff.txt | 35 ++ .riot/requirements/13d7c9a.txt | 51 --- .riot/requirements/13d8f2b.txt | 28 ++ .../requirements/{18f1e69.txt => 13ecda2.txt} | 30 +- .riot/requirements/13fec34.txt | 49 +++ .riot/requirements/151b369.txt | 24 -- .riot/requirements/153b29f.txt | 35 -- .riot/requirements/1567cf8.txt | 29 -- .../requirements/{16d03fb.txt => 15b093e.txt} | 83 +++-- .../requirements/{13a8940.txt => 15cc9b9.txt} | 30 +- .../requirements/{1a7830b.txt => 15e76f9.txt} | 28 +- .../requirements/{9946322.txt => 15ef82f.txt} | 22 +- .../requirements/{1b4108b.txt => 1605571.txt} | 12 +- .../requirements/{18e7930.txt => 1619693.txt} | 18 +- .riot/requirements/162e30e.txt | 27 ++ .riot/requirements/1634a62.txt | 48 +++ .../requirements/{1f0c84d.txt => 165b374.txt} | 14 +- .../requirements/{1fadc81.txt => 1683324.txt} | 6 +- .riot/requirements/169c991.txt | 62 ++-- .riot/requirements/16c251e.txt | 27 ++ .riot/requirements/1726ded.txt | 35 -- .../requirements/{b26ea62.txt => 1754ed1.txt} | 12 +- .../requirements/{1b1cb07.txt => 177912e.txt} | 18 +- .../requirements/{7e67451.txt => 17a194c.txt} | 22 +- .../requirements/{1ec1f44.txt => 17d4731.txt} | 21 +- .riot/requirements/17de2dc.txt | 26 -- .riot/requirements/17ec5eb.txt | 35 ++ .riot/requirements/1810353.txt | 103 ------ .../requirements/{1c18506.txt => 181128c.txt} | 22 +- .../requirements/{1666d46.txt => 181216c.txt} | 8 +- .../requirements/{7e8b35e.txt => 1825740.txt} | 20 +- .riot/requirements/1853bc5.txt | 64 ++-- .../requirements/{18d7e9f.txt => 186ece2.txt} | 10 +- .../requirements/{ac23362.txt => 1894fac.txt} | 23 +- .../requirements/{1b365e2.txt => 189a9da.txt} | 24 +- .../requirements/{1bcdaef.txt => 18b32f4.txt} | 16 +- .riot/requirements/18dee11.txt | 54 +++ .riot/requirements/18fce4a.txt | 30 ++ .riot/requirements/1916976.txt | 26 ++ .riot/requirements/1926f3f.txt | 26 -- .riot/requirements/1951d97.txt | 35 -- .../requirements/{77beea8.txt => 195ecad.txt} | 20 +- .../requirements/{84620ce.txt => 1a00ed1.txt} | 14 +- .riot/requirements/1a22dee.txt | 35 ++ .riot/requirements/1a30edd.txt | 46 +++ .riot/requirements/1a6e474.txt | 64 ++-- .riot/requirements/1a79d00.txt | 88 ----- .riot/requirements/1a7c146.txt | 28 ++ .../requirements/{e69c5ca.txt => 1aa652f.txt} | 39 +-- .../requirements/{1dad7a9.txt => 1ab2cd6.txt} | 28 +- .riot/requirements/1ab601c.txt | 26 -- .../requirements/{1f22840.txt => 1ac55e4.txt} | 64 ++-- .../requirements/{cf557a6.txt => 1ace55b.txt} | 41 +-- .../requirements/{ed2f19c.txt => 1ae24f1.txt} | 19 +- .riot/requirements/1ae2797.txt | 35 ++ .riot/requirements/1af884e.txt | 64 ---- .riot/requirements/1b10316.txt | 35 -- .riot/requirements/1b3fcdf.txt | 26 +- .riot/requirements/1ba505f.txt | 53 --- .riot/requirements/1bbf463.txt | 23 ++ .../requirements/{1d6adbd.txt => 1bceb88.txt} | 45 +-- .../requirements/{46621c4.txt => 1bcefe4.txt} | 8 +- .../requirements/{76ab3c5.txt => 1c1da8c.txt} | 22 +- .riot/requirements/1c9b9ba.txt | 26 -- .riot/requirements/1cd1d4a.txt | 62 ++-- .../requirements/{12e59f1.txt => 1cd7351.txt} | 28 +- .riot/requirements/1cde730.txt | 26 -- .riot/requirements/1d189a7.txt | 27 -- .riot/requirements/1d32f58.txt | 26 ++ .riot/requirements/1d8a1bf.txt | 25 ++ .../requirements/{9ad019f.txt => 1db5311.txt} | 28 +- .riot/requirements/1e250cd.txt | 62 ---- .../requirements/{169042d.txt => 1ec15f5.txt} | 34 +- .../requirements/{1642d4d.txt => 1ee49b9.txt} | 28 +- .../requirements/{3c9fad3.txt => 1ef7371.txt} | 22 +- .riot/requirements/1ef773e.txt | 20 ++ .riot/requirements/1efa336.txt | 29 -- .riot/requirements/1f08b51.txt | 30 ++ .riot/requirements/1f238e9.txt | 28 ++ .riot/requirements/1f23a69.txt | 29 ++ .riot/requirements/1f26e81.txt | 27 -- .riot/requirements/1f35619.txt | 46 +++ .../requirements/{b416620.txt => 1f8ac1c.txt} | 4 +- .riot/requirements/1f8f136.txt | 27 ++ .riot/requirements/1fab05e.txt | 25 ++ .../requirements/{8fdfb07.txt => 1fda250.txt} | 12 +- .../requirements/{80cba21.txt => 1ff2f1b.txt} | 30 +- .riot/requirements/2164da7.txt | 30 ++ .../requirements/{e0c0926.txt => 26ee64c.txt} | 6 +- .../requirements/{ee2fdd5.txt => 27d8bd1.txt} | 18 +- .../requirements/{155e293.txt => 285f337.txt} | 30 +- .riot/requirements/2975509.txt | 35 -- .riot/requirements/29fa506.txt | 33 ++ .riot/requirements/2a84086.txt | 27 -- .riot/requirements/2a8f858.txt | 58 ---- .riot/requirements/2be0986.txt | 22 ++ .../requirements/{1598e9b.txt => 2d10f62.txt} | 35 +- .../requirements/{15d4403.txt => 2f7da3e.txt} | 89 +++-- .riot/requirements/30b2227.txt | 35 ++ .riot/requirements/315c2cb.txt | 26 ++ .riot/requirements/32cfa88.txt | 25 -- .../requirements/{9b67887.txt => 335af34.txt} | 20 +- .../requirements/{17c49c8.txt => 35ce786.txt} | 30 +- .riot/requirements/3b9f513.txt | 35 -- .riot/requirements/3df1421.txt | 28 ++ .riot/requirements/3e500e7.txt | 22 -- .riot/requirements/3e7be37.txt | 47 +++ .../requirements/{684cdcc.txt => 3f38536.txt} | 62 ++-- .riot/requirements/4132bce.txt | 26 ++ .riot/requirements/41529f2.txt | 37 +++ .../requirements/{46e8cd7.txt => 4211915.txt} | 43 +-- .../requirements/{479c504.txt => 4334c5c.txt} | 66 ++-- .riot/requirements/481655f.txt | 38 +++ .riot/requirements/4920d3f.txt | 30 ++ .../requirements/{9886044.txt => 4c49dba.txt} | 30 +- .riot/requirements/4de07e7.txt | 46 +++ .../requirements/{17141ca.txt => 4e87dd9.txt} | 16 +- .../requirements/{19fe101.txt => 4f8a3a1.txt} | 18 +- .../requirements/{1b0c4c1.txt => 512bff3.txt} | 47 +-- .../requirements/{1629f19.txt => 51e2096.txt} | 16 +- .riot/requirements/51f5382.txt | 48 +++ .riot/requirements/59f93d3.txt | 45 +++ .../requirements/{7a5d8b0.txt => 5b82761.txt} | 22 +- .../requirements/{1bb5be8.txt => 5baaec1.txt} | 20 +- .riot/requirements/5c057b1.txt | 53 --- .../requirements/{e9958eb.txt => 5da4fd8.txt} | 26 +- .../requirements/{11971ed.txt => 5ff3018.txt} | 81 +++-- .../requirements/{9c53429.txt => 60b507f.txt} | 87 +++-- .../requirements/{86c9153.txt => 694a5dc.txt} | 16 +- .../requirements/{3791b2a.txt => 6cbe0ef.txt} | 24 +- .riot/requirements/6e56629.txt | 33 -- .riot/requirements/6ebd15f.txt | 25 ++ .../requirements/{162ca82.txt => 74e07bf.txt} | 20 +- .riot/requirements/7669807.txt | 92 ------ .../requirements/{b5852df.txt => 80fa01e.txt} | 31 +- .riot/requirements/84ec59a.txt | 53 +++ .../requirements/{194d473.txt => 87a1fff.txt} | 32 +- .../requirements/{1dca1e6.txt => 8c5c91a.txt} | 12 +- .riot/requirements/8e06425.txt | 27 ++ .../requirements/{3304fd2.txt => 8ef4a62.txt} | 30 +- .riot/requirements/8fc3285.txt | 60 ++-- .../requirements/{1688be1.txt => 9050f7e.txt} | 10 +- .riot/requirements/9232661.txt | 21 ++ .riot/requirements/925e4fe.txt | 28 -- .riot/requirements/94f0e61.txt | 26 -- .../requirements/{15f5e47.txt => 9af62ac.txt} | 24 +- .riot/requirements/9b18162.txt | 26 +- .riot/requirements/9c2da11.txt | 31 -- .../requirements/{18f8bd1.txt => 9e36105.txt} | 10 +- .riot/requirements/a273f3b.txt | 20 ++ .riot/requirements/a41adfe.txt | 35 ++ .riot/requirements/a525a50.txt | 28 -- .riot/requirements/abfbfa5.txt | 60 ++-- .../requirements/{97ea583.txt => adb0290.txt} | 6 +- .../requirements/{1ff4147.txt => adec509.txt} | 22 +- .riot/requirements/b2251c4.txt | 46 +++ .riot/requirements/b29b7a2.txt | 20 ++ .riot/requirements/b56d9af.txt | 42 +++ .riot/requirements/b5fb73e.txt | 35 ++ .../requirements/{a4e2e30.txt => b9941cb.txt} | 66 ++-- .riot/requirements/baf46ab.txt | 26 ++ .riot/requirements/bbb3af0.txt | 50 +++ .../requirements/{19390c2.txt => bd14427.txt} | 18 +- .riot/requirements/becad20.txt | 30 ++ .riot/requirements/beef8eb.txt | 64 ---- .riot/requirements/c0ff15b.txt | 25 -- .riot/requirements/c147b37.txt | 21 -- .riot/requirements/c174fc5.txt | 35 -- .riot/requirements/c18a3b5.txt | 35 ++ .riot/requirements/c54cef3.txt | 26 ++ .../requirements/{185da79.txt => c74f6e0.txt} | 28 +- .../requirements/{181e8d2.txt => c7b5ba5.txt} | 47 +-- .../requirements/{7e898ec.txt => c961281.txt} | 18 +- .../requirements/{6e89ec4.txt => c9aa578.txt} | 26 +- .riot/requirements/ccc7691.txt | 98 ------ .riot/requirements/cd2e4ea.txt | 53 +++ .../requirements/{1e147db.txt => ce6cd33.txt} | 4 +- .riot/requirements/cea6065.txt | 64 ++-- .riot/requirements/d2b8f24.txt | 81 +++++ .../requirements/{7aeeb05.txt => d47114f.txt} | 37 ++- .../requirements/{1614f17.txt => d68f919.txt} | 8 +- .../requirements/{150eea5.txt => d6df33b.txt} | 22 +- .../requirements/{19cac45.txt => ddba314.txt} | 43 +-- .riot/requirements/de6c032.txt | 35 -- .../requirements/{5d8701b.txt => e092ac7.txt} | 26 +- .riot/requirements/e2c6900.txt | 33 ++ .riot/requirements/e328453.txt | 23 -- .riot/requirements/e59b1f6.txt | 31 ++ .../requirements/{385eb37.txt => e6619c9.txt} | 18 +- .../requirements/{1b61411.txt => e68fea2.txt} | 20 +- .riot/requirements/ede4798.txt | 27 -- .riot/requirements/ee80c7e.txt | 30 ++ .../requirements/{1bd152d.txt => f0bc737.txt} | 28 +- .riot/requirements/f1199a8.txt | 33 -- .riot/requirements/f1c37b1.txt | 51 +++ .../requirements/{13a122f.txt => f4b1bd3.txt} | 22 +- .riot/requirements/f554053.txt | 49 --- .../requirements/{1eac0e3.txt => f630df9.txt} | 14 +- .riot/requirements/f680e00.txt | 22 -- .../requirements/{17e3783.txt => f73b199.txt} | 20 +- .../requirements/{1b0e657.txt => f7c30a0.txt} | 32 +- .riot/requirements/fa9267f.txt | 21 ++ .riot/requirements/fd7ae89.txt | 100 ------ riotfile.py | 311 ++++++++++++------ tests/conftest.py | 1 - tests/contrib/grpc_aio/test_grpc_aio.py | 46 +-- .../langchain/test_langchain_community.py | 9 - tests/contrib/openai/test_openai_v1.py | 17 - tests/contrib/psycopg/test_psycopg_async.py | 18 - tests/contrib/redis/test_redis_asyncio.py | 16 - 231 files changed, 4329 insertions(+), 3870 deletions(-) rename .riot/requirements/{103f817.txt => 1026e4e.txt} (78%) delete mode 100644 .riot/requirements/104310d.txt delete mode 100644 .riot/requirements/1070785.txt rename .riot/requirements/{17d7a61.txt => 1092157.txt} (71%) create mode 100644 .riot/requirements/10bdae9.txt delete mode 100644 .riot/requirements/10e6eb3.txt rename .riot/requirements/{196b6c3.txt => 111ed90.txt} (50%) rename .riot/requirements/{1cb14d6.txt => 115aba5.txt} (81%) rename .riot/requirements/{d15238d.txt => 11705e0.txt} (50%) create mode 100644 .riot/requirements/11f3313.txt rename .riot/requirements/{1460721.txt => 1212ab8.txt} (52%) rename .riot/requirements/{18f872d.txt => 121a519.txt} (52%) create mode 100644 .riot/requirements/12bf701.txt create mode 100644 .riot/requirements/12d5b48.txt create mode 100644 .riot/requirements/12e6c9b.txt create mode 100644 .riot/requirements/1356251.txt rename .riot/requirements/{1338800.txt => 137098c.txt} (86%) rename .riot/requirements/{1e7ee60.txt => 13804af.txt} (69%) create mode 100644 .riot/requirements/13c0fff.txt delete mode 100644 .riot/requirements/13d7c9a.txt create mode 100644 .riot/requirements/13d8f2b.txt rename .riot/requirements/{18f1e69.txt => 13ecda2.txt} (50%) create mode 100644 .riot/requirements/13fec34.txt delete mode 100644 .riot/requirements/151b369.txt delete mode 100644 .riot/requirements/153b29f.txt delete mode 100644 .riot/requirements/1567cf8.txt rename .riot/requirements/{16d03fb.txt => 15b093e.txt} (51%) rename .riot/requirements/{13a8940.txt => 15cc9b9.txt} (52%) rename .riot/requirements/{1a7830b.txt => 15e76f9.txt} (52%) rename .riot/requirements/{9946322.txt => 15ef82f.txt} (86%) rename .riot/requirements/{1b4108b.txt => 1605571.txt} (78%) rename .riot/requirements/{18e7930.txt => 1619693.txt} (78%) create mode 100644 .riot/requirements/162e30e.txt create mode 100644 .riot/requirements/1634a62.txt rename .riot/requirements/{1f0c84d.txt => 165b374.txt} (81%) rename .riot/requirements/{1fadc81.txt => 1683324.txt} (85%) create mode 100644 .riot/requirements/16c251e.txt delete mode 100644 .riot/requirements/1726ded.txt rename .riot/requirements/{b26ea62.txt => 1754ed1.txt} (88%) rename .riot/requirements/{1b1cb07.txt => 177912e.txt} (56%) rename .riot/requirements/{7e67451.txt => 17a194c.txt} (51%) rename .riot/requirements/{1ec1f44.txt => 17d4731.txt} (50%) delete mode 100644 .riot/requirements/17de2dc.txt create mode 100644 .riot/requirements/17ec5eb.txt delete mode 100644 .riot/requirements/1810353.txt rename .riot/requirements/{1c18506.txt => 181128c.txt} (52%) rename .riot/requirements/{1666d46.txt => 181216c.txt} (89%) rename .riot/requirements/{7e8b35e.txt => 1825740.txt} (80%) rename .riot/requirements/{18d7e9f.txt => 186ece2.txt} (80%) rename .riot/requirements/{ac23362.txt => 1894fac.txt} (68%) rename .riot/requirements/{1b365e2.txt => 189a9da.txt} (76%) rename .riot/requirements/{1bcdaef.txt => 18b32f4.txt} (55%) create mode 100644 .riot/requirements/18dee11.txt create mode 100644 .riot/requirements/18fce4a.txt create mode 100644 .riot/requirements/1916976.txt delete mode 100644 .riot/requirements/1926f3f.txt delete mode 100644 .riot/requirements/1951d97.txt rename .riot/requirements/{77beea8.txt => 195ecad.txt} (53%) rename .riot/requirements/{84620ce.txt => 1a00ed1.txt} (71%) create mode 100644 .riot/requirements/1a22dee.txt create mode 100644 .riot/requirements/1a30edd.txt delete mode 100644 .riot/requirements/1a79d00.txt create mode 100644 .riot/requirements/1a7c146.txt rename .riot/requirements/{e69c5ca.txt => 1aa652f.txt} (56%) rename .riot/requirements/{1dad7a9.txt => 1ab2cd6.txt} (52%) delete mode 100644 .riot/requirements/1ab601c.txt rename .riot/requirements/{1f22840.txt => 1ac55e4.txt} (52%) rename .riot/requirements/{cf557a6.txt => 1ace55b.txt} (57%) rename .riot/requirements/{ed2f19c.txt => 1ae24f1.txt} (51%) create mode 100644 .riot/requirements/1ae2797.txt delete mode 100644 .riot/requirements/1af884e.txt delete mode 100644 .riot/requirements/1b10316.txt delete mode 100644 .riot/requirements/1ba505f.txt create mode 100644 .riot/requirements/1bbf463.txt rename .riot/requirements/{1d6adbd.txt => 1bceb88.txt} (54%) rename .riot/requirements/{46621c4.txt => 1bcefe4.txt} (81%) rename .riot/requirements/{76ab3c5.txt => 1c1da8c.txt} (51%) delete mode 100644 .riot/requirements/1c9b9ba.txt rename .riot/requirements/{12e59f1.txt => 1cd7351.txt} (52%) delete mode 100644 .riot/requirements/1cde730.txt delete mode 100644 .riot/requirements/1d189a7.txt create mode 100644 .riot/requirements/1d32f58.txt create mode 100644 .riot/requirements/1d8a1bf.txt rename .riot/requirements/{9ad019f.txt => 1db5311.txt} (69%) delete mode 100644 .riot/requirements/1e250cd.txt rename .riot/requirements/{169042d.txt => 1ec15f5.txt} (65%) rename .riot/requirements/{1642d4d.txt => 1ee49b9.txt} (69%) rename .riot/requirements/{3c9fad3.txt => 1ef7371.txt} (51%) create mode 100644 .riot/requirements/1ef773e.txt delete mode 100644 .riot/requirements/1efa336.txt create mode 100644 .riot/requirements/1f08b51.txt create mode 100644 .riot/requirements/1f238e9.txt create mode 100644 .riot/requirements/1f23a69.txt delete mode 100644 .riot/requirements/1f26e81.txt create mode 100644 .riot/requirements/1f35619.txt rename .riot/requirements/{b416620.txt => 1f8ac1c.txt} (91%) create mode 100644 .riot/requirements/1f8f136.txt create mode 100644 .riot/requirements/1fab05e.txt rename .riot/requirements/{8fdfb07.txt => 1fda250.txt} (88%) rename .riot/requirements/{80cba21.txt => 1ff2f1b.txt} (52%) create mode 100644 .riot/requirements/2164da7.txt rename .riot/requirements/{e0c0926.txt => 26ee64c.txt} (90%) rename .riot/requirements/{ee2fdd5.txt => 27d8bd1.txt} (56%) rename .riot/requirements/{155e293.txt => 285f337.txt} (50%) delete mode 100644 .riot/requirements/2975509.txt create mode 100644 .riot/requirements/29fa506.txt delete mode 100644 .riot/requirements/2a84086.txt delete mode 100644 .riot/requirements/2a8f858.txt create mode 100644 .riot/requirements/2be0986.txt rename .riot/requirements/{1598e9b.txt => 2d10f62.txt} (77%) rename .riot/requirements/{15d4403.txt => 2f7da3e.txt} (50%) create mode 100644 .riot/requirements/30b2227.txt create mode 100644 .riot/requirements/315c2cb.txt delete mode 100644 .riot/requirements/32cfa88.txt rename .riot/requirements/{9b67887.txt => 335af34.txt} (87%) rename .riot/requirements/{17c49c8.txt => 35ce786.txt} (68%) delete mode 100644 .riot/requirements/3b9f513.txt create mode 100644 .riot/requirements/3df1421.txt delete mode 100644 .riot/requirements/3e500e7.txt create mode 100644 .riot/requirements/3e7be37.txt rename .riot/requirements/{684cdcc.txt => 3f38536.txt} (52%) create mode 100644 .riot/requirements/4132bce.txt create mode 100644 .riot/requirements/41529f2.txt rename .riot/requirements/{46e8cd7.txt => 4211915.txt} (55%) rename .riot/requirements/{479c504.txt => 4334c5c.txt} (51%) create mode 100644 .riot/requirements/481655f.txt create mode 100644 .riot/requirements/4920d3f.txt rename .riot/requirements/{9886044.txt => 4c49dba.txt} (50%) create mode 100644 .riot/requirements/4de07e7.txt rename .riot/requirements/{17141ca.txt => 4e87dd9.txt} (70%) rename .riot/requirements/{19fe101.txt => 4f8a3a1.txt} (78%) rename .riot/requirements/{1b0c4c1.txt => 512bff3.txt} (53%) rename .riot/requirements/{1629f19.txt => 51e2096.txt} (57%) create mode 100644 .riot/requirements/51f5382.txt create mode 100644 .riot/requirements/59f93d3.txt rename .riot/requirements/{7a5d8b0.txt => 5b82761.txt} (50%) rename .riot/requirements/{1bb5be8.txt => 5baaec1.txt} (66%) delete mode 100644 .riot/requirements/5c057b1.txt rename .riot/requirements/{e9958eb.txt => 5da4fd8.txt} (69%) rename .riot/requirements/{11971ed.txt => 5ff3018.txt} (51%) rename .riot/requirements/{9c53429.txt => 60b507f.txt} (50%) rename .riot/requirements/{86c9153.txt => 694a5dc.txt} (57%) rename .riot/requirements/{3791b2a.txt => 6cbe0ef.txt} (53%) delete mode 100644 .riot/requirements/6e56629.txt create mode 100644 .riot/requirements/6ebd15f.txt rename .riot/requirements/{162ca82.txt => 74e07bf.txt} (53%) delete mode 100644 .riot/requirements/7669807.txt rename .riot/requirements/{b5852df.txt => 80fa01e.txt} (80%) create mode 100644 .riot/requirements/84ec59a.txt rename .riot/requirements/{194d473.txt => 87a1fff.txt} (65%) rename .riot/requirements/{1dca1e6.txt => 8c5c91a.txt} (87%) create mode 100644 .riot/requirements/8e06425.txt rename .riot/requirements/{3304fd2.txt => 8ef4a62.txt} (52%) rename .riot/requirements/{1688be1.txt => 9050f7e.txt} (80%) create mode 100644 .riot/requirements/9232661.txt delete mode 100644 .riot/requirements/925e4fe.txt delete mode 100644 .riot/requirements/94f0e61.txt rename .riot/requirements/{15f5e47.txt => 9af62ac.txt} (53%) delete mode 100644 .riot/requirements/9c2da11.txt rename .riot/requirements/{18f8bd1.txt => 9e36105.txt} (81%) create mode 100644 .riot/requirements/a273f3b.txt create mode 100644 .riot/requirements/a41adfe.txt delete mode 100644 .riot/requirements/a525a50.txt rename .riot/requirements/{97ea583.txt => adb0290.txt} (89%) rename .riot/requirements/{1ff4147.txt => adec509.txt} (51%) create mode 100644 .riot/requirements/b2251c4.txt create mode 100644 .riot/requirements/b29b7a2.txt create mode 100644 .riot/requirements/b56d9af.txt create mode 100644 .riot/requirements/b5fb73e.txt rename .riot/requirements/{a4e2e30.txt => b9941cb.txt} (51%) create mode 100644 .riot/requirements/baf46ab.txt create mode 100644 .riot/requirements/bbb3af0.txt rename .riot/requirements/{19390c2.txt => bd14427.txt} (56%) create mode 100644 .riot/requirements/becad20.txt delete mode 100644 .riot/requirements/beef8eb.txt delete mode 100644 .riot/requirements/c0ff15b.txt delete mode 100644 .riot/requirements/c147b37.txt delete mode 100644 .riot/requirements/c174fc5.txt create mode 100644 .riot/requirements/c18a3b5.txt create mode 100644 .riot/requirements/c54cef3.txt rename .riot/requirements/{185da79.txt => c74f6e0.txt} (68%) rename .riot/requirements/{181e8d2.txt => c7b5ba5.txt} (53%) rename .riot/requirements/{7e898ec.txt => c961281.txt} (52%) rename .riot/requirements/{6e89ec4.txt => c9aa578.txt} (54%) delete mode 100644 .riot/requirements/ccc7691.txt create mode 100644 .riot/requirements/cd2e4ea.txt rename .riot/requirements/{1e147db.txt => ce6cd33.txt} (92%) create mode 100644 .riot/requirements/d2b8f24.txt rename .riot/requirements/{7aeeb05.txt => d47114f.txt} (73%) rename .riot/requirements/{1614f17.txt => d68f919.txt} (81%) rename .riot/requirements/{150eea5.txt => d6df33b.txt} (86%) rename .riot/requirements/{19cac45.txt => ddba314.txt} (53%) delete mode 100644 .riot/requirements/de6c032.txt rename .riot/requirements/{5d8701b.txt => e092ac7.txt} (54%) create mode 100644 .riot/requirements/e2c6900.txt delete mode 100644 .riot/requirements/e328453.txt create mode 100644 .riot/requirements/e59b1f6.txt rename .riot/requirements/{385eb37.txt => e6619c9.txt} (78%) rename .riot/requirements/{1b61411.txt => e68fea2.txt} (66%) delete mode 100644 .riot/requirements/ede4798.txt create mode 100644 .riot/requirements/ee80c7e.txt rename .riot/requirements/{1bd152d.txt => f0bc737.txt} (80%) delete mode 100644 .riot/requirements/f1199a8.txt create mode 100644 .riot/requirements/f1c37b1.txt rename .riot/requirements/{13a122f.txt => f4b1bd3.txt} (52%) delete mode 100644 .riot/requirements/f554053.txt rename .riot/requirements/{1eac0e3.txt => f630df9.txt} (81%) delete mode 100644 .riot/requirements/f680e00.txt rename .riot/requirements/{17e3783.txt => f73b199.txt} (51%) rename .riot/requirements/{1b0e657.txt => f7c30a0.txt} (69%) create mode 100644 .riot/requirements/fa9267f.txt delete mode 100644 .riot/requirements/fd7ae89.txt diff --git a/.circleci/config.templ.yml b/.circleci/config.templ.yml index 161af7359c0..08dc00bb806 100644 --- a/.circleci/config.templ.yml +++ b/.circleci/config.templ.yml @@ -572,6 +572,7 @@ jobs: pattern: "datastreams" tracer: + parallelism: 10 <<: *contrib_job_large steps: - run_test: diff --git a/.github/workflows/requirements-locks.yml b/.github/workflows/requirements-locks.yml index 613842b7d9f..3192f61db64 100644 --- a/.github/workflows/requirements-locks.yml +++ b/.github/workflows/requirements-locks.yml @@ -20,7 +20,7 @@ jobs: run: git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: Set python interpreters - run: pyenv global 3.10 3.7 3.8 3.9 3.11 + run: pyenv global 3.10 3.7 3.8 3.9 3.11 3.12 - name: Install Dependencies run: pip install --upgrade pip && pip install riot diff --git a/.riot/requirements/103f817.txt b/.riot/requirements/1026e4e.txt similarity index 78% rename from .riot/requirements/103f817.txt rename to .riot/requirements/1026e4e.txt index 3f23e89b1b1..60de6cc0939 100644 --- a/.riot/requirements/103f817.txt +++ b/.riot/requirements/1026e4e.txt @@ -2,30 +2,30 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/103f817.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1026e4e.in # aiohttp==3.8.6 aiohttp-jinja2==1.5.1 aiosignal==1.3.1 async-timeout==4.0.3 asynctest==0.13.0 -attrs==23.1.0 +attrs==23.2.0 charset-normalizer==3.3.2 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 frozenlist==1.3.3 hypothesis==6.45.0 -idna==3.6 +idna==3.7 importlib-metadata==6.7.0 iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 +jinja2==3.1.4 +markupsafe==2.1.5 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 -pytest==7.4.3 +pytest==7.4.4 pytest-aiohttp==1.0.5 pytest-asyncio==0.21.1 pytest-cov==4.1.0 diff --git a/.riot/requirements/104310d.txt b/.riot/requirements/104310d.txt deleted file mode 100644 index dbed2241bb1..00000000000 --- a/.riot/requirements/104310d.txt +++ /dev/null @@ -1,61 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/104310d.in -# -aiohttp==3.9.1 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -contourpy==1.2.0 -coverage[toml]==7.3.4 -cycler==0.12.1 -et-xmlfile==1.1.0 -exceptiongroup==1.2.0 -fonttools==4.47.0 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.6 -iniconfig==2.0.0 -joblib==1.3.2 -kiwisolver==1.4.5 -matplotlib==3.8.2 -mock==5.1.0 -multidict==6.0.4 -numpy==1.26.2 -openai[datalib,embeddings]==0.27.2 -openpyxl==3.1.2 -opentracing==2.4.0 -packaging==23.2 -pandas==2.1.4 -pandas-stubs==2.1.4.231218 -pillow==10.1.0 -plotly==5.18.0 -pluggy==1.3.0 -pyparsing==3.1.1 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-dateutil==2.8.2 -pytz==2023.3.post1 -pyyaml==6.0.1 -requests==2.31.0 -scikit-learn==1.3.2 -scipy==1.11.4 -six==1.16.0 -sortedcontainers==2.4.0 -tenacity==8.2.3 -threadpoolctl==3.2.0 -tomli==2.0.1 -tqdm==4.66.1 -types-pytz==2023.3.1.1 -tzdata==2023.3 -urllib3==1.26.18 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 diff --git a/.riot/requirements/1070785.txt b/.riot/requirements/1070785.txt deleted file mode 100644 index 511985964b6..00000000000 --- a/.riot/requirements/1070785.txt +++ /dev/null @@ -1,86 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1070785.in -# -annotated-types==0.6.0 -attrs==23.2.0 -aws-sam-translator==1.85.0 -aws-xray-sdk==2.12.1 -boto3==1.34.49 -botocore==1.34.49 -certifi==2024.2.2 -cffi==1.16.0 -cfn-lint==0.85.2 -charset-normalizer==3.3.2 -coverage[toml]==7.4.3 -cryptography==42.0.5 -docker==7.0.0 -ecdsa==0.18.0 -graphql-core==3.2.3 -hypothesis==6.45.0 -idna==3.6 -iniconfig==2.0.0 -jinja2==3.1.3 -jmespath==1.0.1 -jschema-to-python==1.2.3 -jsondiff==2.0.0 -jsonpatch==1.33 -jsonpickle==3.0.3 -jsonpointer==2.4 -jsonschema==4.21.1 -jsonschema-path==0.3.2 -jsonschema-specifications==2023.12.1 -junit-xml==1.9 -lazy-object-proxy==1.10.0 -markupsafe==2.1.5 -mock==5.1.0 -moto[all]==4.2.14 -mpmath==1.3.0 -multidict==6.0.5 -multipart==0.2.4 -networkx==3.2.1 -openapi-schema-validator==0.6.2 -openapi-spec-validator==0.7.1 -opentracing==2.4.0 -packaging==23.2 -pathable==0.4.3 -pbr==6.0.0 -pluggy==1.4.0 -py-partiql-parser==0.5.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.6.2 -pydantic-core==2.16.3 -pyparsing==3.1.1 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-dateutil==2.8.2 -python-jose[cryptography]==3.3.0 -pyyaml==6.0.1 -referencing==0.31.1 -regex==2023.12.25 -requests==2.31.0 -responses==0.25.0 -rfc3339-validator==0.1.4 -rpds-py==0.18.0 -rsa==4.9 -s3transfer==0.10.0 -sarif-om==1.0.4 -six==1.16.0 -sortedcontainers==2.4.0 -sshpubkeys==3.3.1 -sympy==1.12 -typing-extensions==4.9.0 -urllib3==2.0.7 -vcrpy==6.0.1 -werkzeug==3.0.1 -wrapt==1.16.0 -xmltodict==0.13.0 -yarl==1.9.4 - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/.riot/requirements/17d7a61.txt b/.riot/requirements/1092157.txt similarity index 71% rename from .riot/requirements/17d7a61.txt rename to .riot/requirements/1092157.txt index cd7fec9785b..d9e498741ef 100644 --- a/.riot/requirements/17d7a61.txt +++ b/.riot/requirements/1092157.txt @@ -2,10 +2,10 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/17d7a61.in +# pip-compile --no-annotate .riot/requirements/1092157.in # attrs==23.2.0 -coverage[toml]==7.5.1 +coverage[toml]==7.6.0 gevent==24.2.1 greenlet==3.0.3 httpretty==1.1.4 @@ -13,18 +13,18 @@ hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.0 +packaging==24.1 pluggy==1.5.0 -pyfakefs==5.5.0 -pytest==8.2.1 -pytest-asyncio==0.21.2 +pyfakefs==5.6.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 python-json-logger==2.0.7 sortedcontainers==2.4.0 zope-event==5.0 -zope-interface==6.4 +zope-interface==6.4.post2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/10bdae9.txt b/.riot/requirements/10bdae9.txt new file mode 100644 index 00000000000..ba98878ab1f --- /dev/null +++ b/.riot/requirements/10bdae9.txt @@ -0,0 +1,29 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/10bdae9.in +# +attrs==23.2.0 +blinker==1.8.2 +click==7.1.2 +coverage[toml]==7.5.4 +flask==1.1.4 +flask-caching==1.10.1 +hypothesis==6.45.0 +iniconfig==2.0.0 +itsdangerous==1.1.0 +jinja2==2.11.3 +markupsafe==1.1.1 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +python-memcached==1.62 +redis==5.0.7 +sortedcontainers==2.4.0 +werkzeug==1.0.1 diff --git a/.riot/requirements/10e6eb3.txt b/.riot/requirements/10e6eb3.txt deleted file mode 100644 index bf3297f4f9d..00000000000 --- a/.riot/requirements/10e6eb3.txt +++ /dev/null @@ -1,90 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/10e6eb3.in -# -annotated-types==0.6.0 -attrs==23.2.0 -aws-sam-translator==1.85.0 -aws-xray-sdk==2.12.1 -boto3==1.34.49 -botocore==1.34.49 -certifi==2024.2.2 -cffi==1.16.0 -cfn-lint==0.85.2 -charset-normalizer==3.3.2 -coverage[toml]==7.4.3 -cryptography==42.0.5 -docker==7.0.0 -ecdsa==0.18.0 -exceptiongroup==1.2.0 -graphql-core==3.2.3 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -jinja2==3.1.3 -jmespath==1.0.1 -jschema-to-python==1.2.3 -jsondiff==2.0.0 -jsonpatch==1.33 -jsonpickle==3.0.3 -jsonpointer==2.4 -jsonschema==4.21.1 -jsonschema-path==0.3.2 -jsonschema-specifications==2023.12.1 -junit-xml==1.9 -lazy-object-proxy==1.10.0 -markupsafe==2.1.5 -mock==5.1.0 -moto[all]==4.2.14 -mpmath==1.3.0 -multidict==6.0.5 -multipart==0.2.4 -networkx==3.2.1 -openapi-schema-validator==0.6.2 -openapi-spec-validator==0.7.1 -opentracing==2.4.0 -packaging==23.2 -pathable==0.4.3 -pbr==6.0.0 -pluggy==1.4.0 -py-partiql-parser==0.5.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.6.2 -pydantic-core==2.16.3 -pyparsing==3.1.1 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-dateutil==2.8.2 -python-jose[cryptography]==3.3.0 -pyyaml==6.0.1 -referencing==0.31.1 -regex==2023.12.25 -requests==2.31.0 -responses==0.25.0 -rfc3339-validator==0.1.4 -rpds-py==0.18.0 -rsa==4.9 -s3transfer==0.10.0 -sarif-om==1.0.4 -six==1.16.0 -sortedcontainers==2.4.0 -sshpubkeys==3.3.1 -sympy==1.12 -tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==1.26.18 -vcrpy==6.0.1 -werkzeug==3.0.1 -wrapt==1.16.0 -xmltodict==0.13.0 -yarl==1.9.4 -zipp==3.17.0 - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/.riot/requirements/196b6c3.txt b/.riot/requirements/111ed90.txt similarity index 50% rename from .riot/requirements/196b6c3.txt rename to .riot/requirements/111ed90.txt index 5c748ddee55..0a55d7681d4 100644 --- a/.riot/requirements/196b6c3.txt +++ b/.riot/requirements/111ed90.txt @@ -2,21 +2,22 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --no-annotate .riot/requirements/196b6c3.in +# pip-compile --no-annotate .riot/requirements/111ed90.in # attrs==23.2.0 -coverage[toml]==7.4.2 -googleapis-common-protos==1.62.0 +coverage[toml]==7.5.4 +googleapis-common-protos==1.63.2 grpcio==1.59.3 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -protobuf==4.25.3 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +protobuf==5.27.2 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 diff --git a/.riot/requirements/1cb14d6.txt b/.riot/requirements/115aba5.txt similarity index 81% rename from .riot/requirements/1cb14d6.txt rename to .riot/requirements/115aba5.txt index 84462d9f57e..f165e70bbfb 100644 --- a/.riot/requirements/1cb14d6.txt +++ b/.riot/requirements/115aba5.txt @@ -2,20 +2,20 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1cb14d6.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/115aba5.in # async-timeout==4.0.3 -attrs==23.1.0 +attrs==23.2.0 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 -pytest==7.4.3 +pytest==7.4.4 pytest-asyncio==0.21.1 pytest-cov==4.1.0 pytest-mock==3.11.1 diff --git a/.riot/requirements/d15238d.txt b/.riot/requirements/11705e0.txt similarity index 50% rename from .riot/requirements/d15238d.txt rename to .riot/requirements/11705e0.txt index 312d8e693d8..6d48b0bea84 100644 --- a/.riot/requirements/d15238d.txt +++ b/.riot/requirements/11705e0.txt @@ -2,31 +2,31 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/d15238d.in +# pip-compile --no-annotate .riot/requirements/11705e0.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiosignal==1.3.1 async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 +idna==3.7 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 tomli==2.0.1 yarl==1.9.4 -zipp==3.17.0 +zipp==3.19.2 diff --git a/.riot/requirements/11f3313.txt b/.riot/requirements/11f3313.txt new file mode 100644 index 00000000000..8fa550e49d9 --- /dev/null +++ b/.riot/requirements/11f3313.txt @@ -0,0 +1,46 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/11f3313.in +# +attrs==23.2.0 +certifi==2024.6.2 +charset-normalizer==2.1.1 +click==8.1.7 +coverage[toml]==7.5.4 +deprecated==1.2.14 +flask==2.1.3 +gevent==24.2.1 +greenlet==3.0.3 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +itsdangerous==2.2.0 +jinja2==3.1.4 +markupsafe==2.0.1 +mock==5.1.0 +opentelemetry-api==1.8.0 +opentelemetry-instrumentation==0.32b0 +opentelemetry-instrumentation-flask==0.32b0 +opentelemetry-instrumentation-wsgi==0.32b0 +opentelemetry-semantic-conventions==0.32b0 +opentelemetry-util-http==0.32b0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +requests==2.28.1 +sortedcontainers==2.4.0 +urllib3==1.26.19 +werkzeug==2.1.2 +wrapt==1.16.0 +zope-event==5.0 +zope-interface==6.4.post2 + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/.riot/requirements/1460721.txt b/.riot/requirements/1212ab8.txt similarity index 52% rename from .riot/requirements/1460721.txt rename to .riot/requirements/1212ab8.txt index 18c54a5c557..08402633a64 100644 --- a/.riot/requirements/1460721.txt +++ b/.riot/requirements/1212ab8.txt @@ -2,29 +2,29 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1460721.in +# pip-compile --no-annotate .riot/requirements/1212ab8.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiohttp-jinja2==1.5.1 aiosignal==1.3.1 -attrs==23.1.0 -coverage[toml]==7.3.4 +attrs==23.2.0 +coverage[toml]==7.5.4 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 +jinja2==3.1.4 +markupsafe==2.1.5 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 yarl==1.9.4 diff --git a/.riot/requirements/18f872d.txt b/.riot/requirements/121a519.txt similarity index 52% rename from .riot/requirements/18f872d.txt rename to .riot/requirements/121a519.txt index 3c716b55bc9..19626cce673 100644 --- a/.riot/requirements/18f872d.txt +++ b/.riot/requirements/121a519.txt @@ -2,31 +2,31 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/18f872d.in +# pip-compile --no-annotate .riot/requirements/121a519.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiohttp-jinja2==1.5.1 aiosignal==1.3.1 async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 +jinja2==3.1.4 +markupsafe==2.1.5 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 tomli==2.0.1 diff --git a/.riot/requirements/125f4b9.txt b/.riot/requirements/125f4b9.txt index 0c6536bdf5d..624745ca417 100644 --- a/.riot/requirements/125f4b9.txt +++ b/.riot/requirements/125f4b9.txt @@ -4,69 +4,69 @@ # # pip-compile --no-annotate .riot/requirements/125f4b9.in # -annotated-types==0.6.0 -attrs==23.1.0 -aws-sam-translator==1.82.0 -aws-xray-sdk==2.12.1 +annotated-types==0.7.0 +attrs==23.2.0 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto==2.49.0 -boto3==1.34.6 -botocore==1.34.6 -certifi==2023.11.17 +boto3==1.34.139 +botocore==1.34.139 +certifi==2024.6.2 cffi==1.16.0 cfn-lint==0.53.1 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -cryptography==41.0.7 -docker==7.0.0 +coverage[toml]==7.5.4 +cryptography==42.0.8 +docker==7.1.0 ecdsa==0.14.1 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 idna==2.10 -importlib-metadata==7.0.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 jinja2==2.11.3 jmespath==1.0.1 -jsondiff==2.0.0 +jsondiff==2.1.1 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==3.2.0 junit-xml==1.9 markupsafe==1.1.1 mock==5.1.0 -more-itertools==10.1.0 +more-itertools==10.3.0 moto==1.3.16 networkx==2.8.8 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.5.2 -pydantic-core==2.14.5 +packaging==24.1 +pluggy==1.5.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.0 +pydantic-core==2.20.0 pynamodb==5.5.1 pyrsistent==0.20.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 -pytz==2023.3.post1 +pytz==2024.1 pyyaml==6.0.1 -requests==2.31.0 -responses==0.24.1 +requests==2.32.3 +responses==0.25.3 rsa==4.9 -s3transfer==0.10.0 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==1.26.18 +typing-extensions==4.12.2 +urllib3==1.26.19 werkzeug==2.1.2 wrapt==1.16.0 xmltodict==0.13.0 -zipp==3.17.0 +zipp==3.19.2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/12bf701.txt b/.riot/requirements/12bf701.txt new file mode 100644 index 00000000000..cc77a634504 --- /dev/null +++ b/.riot/requirements/12bf701.txt @@ -0,0 +1,23 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/12bf701.in +# +attrs==23.2.0 +coverage[toml]==7.5.4 +googleapis-common-protos==1.63.2 +grpcio==1.64.1 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +protobuf==5.27.2 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/12d5b48.txt b/.riot/requirements/12d5b48.txt new file mode 100644 index 00000000000..dc7c139936f --- /dev/null +++ b/.riot/requirements/12d5b48.txt @@ -0,0 +1,27 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/12d5b48.in +# +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +googleapis-common-protos==1.63.2 +grpcio==1.59.3 +hypothesis==6.45.0 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +protobuf==5.27.2 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +zipp==3.19.2 diff --git a/.riot/requirements/12e6c9b.txt b/.riot/requirements/12e6c9b.txt new file mode 100644 index 00000000000..97d5e17d5f6 --- /dev/null +++ b/.riot/requirements/12e6c9b.txt @@ -0,0 +1,305 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile .riot/requirements/12e6c9b.in +# +ai21==2.9.2 + # via -r .riot/requirements/12e6c9b.in +ai21-tokenizer==0.11.2 + # via ai21 +aiohttp==3.9.5 + # via langchain +aiosignal==1.3.1 + # via aiohttp +annotated-types==0.7.0 + # via pydantic +anthropic==0.31.1 + # via langchain-anthropic +anyio==4.4.0 + # via + # ai21-tokenizer + # anthropic + # httpx + # openai +async-timeout==4.0.3 + # via + # aiohttp + # langchain +attrs==23.2.0 + # via + # aiohttp + # hypothesis +boto3==1.34.51 + # via + # -r .riot/requirements/12e6c9b.in + # cohere + # langchain-aws +botocore==1.34.51 + # via + # -r .riot/requirements/12e6c9b.in + # boto3 + # s3transfer +certifi==2024.7.4 + # via + # httpcore + # httpx + # pinecone-client + # requests +charset-normalizer==3.3.2 + # via requests +cohere==5.6.1 + # via + # -r .riot/requirements/12e6c9b.in + # langchain-cohere +coverage[toml]==7.6.0 + # via + # -r .riot/requirements/12e6c9b.in + # pytest-cov +dataclasses-json==0.6.7 + # via + # ai21 + # langchain +defusedxml==0.7.1 + # via langchain-anthropic +distro==1.9.0 + # via + # anthropic + # openai +exceptiongroup==1.2.2 + # via + # -r .riot/requirements/12e6c9b.in + # anyio + # pytest +fastavro==1.9.5 + # via cohere +filelock==3.15.4 + # via huggingface-hub +frozenlist==1.4.1 + # via + # aiohttp + # aiosignal +fsspec==2024.6.1 + # via huggingface-hub +greenlet==3.0.3 + # via + # -r .riot/requirements/12e6c9b.in + # sqlalchemy +h11==0.14.0 + # via httpcore +httpcore==1.0.5 + # via httpx +httpx==0.27.0 + # via + # ai21 + # anthropic + # cohere + # openai +httpx-sse==0.4.0 + # via cohere +huggingface-hub==0.23.5 + # via + # -r .riot/requirements/12e6c9b.in + # tokenizers +hypothesis==6.45.0 + # via -r .riot/requirements/12e6c9b.in +idna==3.7 + # via + # anyio + # httpx + # requests + # yarl +iniconfig==2.0.0 + # via pytest +jiter==0.5.0 + # via anthropic +jmespath==1.0.1 + # via + # boto3 + # botocore +jsonpatch==1.33 + # via langchain-core +jsonpointer==3.0.0 + # via jsonpatch +langchain==0.2.0 + # via -r .riot/requirements/12e6c9b.in +langchain-anthropic==0.1.13 + # via -r .riot/requirements/12e6c9b.in +langchain-aws==0.1.6 + # via -r .riot/requirements/12e6c9b.in +langchain-cohere==0.1.8 + # via -r .riot/requirements/12e6c9b.in +langchain-core==0.2.0 + # via + # -r .riot/requirements/12e6c9b.in + # langchain + # langchain-anthropic + # langchain-aws + # langchain-cohere + # langchain-openai + # langchain-pinecone + # langchain-text-splitters +langchain-openai==0.1.7 + # via -r .riot/requirements/12e6c9b.in +langchain-pinecone==0.1.1 + # via -r .riot/requirements/12e6c9b.in +langchain-text-splitters==0.2.1 + # via langchain +langsmith==0.1.86 + # via + # langchain + # langchain-core +marshmallow==3.21.3 + # via dataclasses-json +mock==5.1.0 + # via -r .riot/requirements/12e6c9b.in +multidict==6.0.5 + # via + # aiohttp + # yarl +mypy-extensions==1.0.0 + # via typing-inspect +numexpr==2.8.5 + # via -r .riot/requirements/12e6c9b.in +numpy==1.26.4 + # via + # langchain + # langchain-aws + # langchain-pinecone + # numexpr +openai==1.35.14 + # via + # -r .riot/requirements/12e6c9b.in + # langchain-openai +opentracing==2.4.0 + # via -r .riot/requirements/12e6c9b.in +orjson==3.10.6 + # via langsmith +packaging==23.2 + # via + # huggingface-hub + # langchain-core + # marshmallow + # pytest +parameterized==0.9.0 + # via cohere +pinecone-client==3.2.2 + # via + # -r .riot/requirements/12e6c9b.in + # langchain-pinecone +pluggy==1.5.0 + # via pytest +psutil==6.0.0 + # via -r .riot/requirements/12e6c9b.in +pydantic==2.8.2 + # via + # anthropic + # cohere + # langchain + # langchain-core + # langsmith + # openai +pydantic-core==2.20.1 + # via pydantic +pytest==8.2.2 + # via + # -r .riot/requirements/12e6c9b.in + # pytest-asyncio + # pytest-cov + # pytest-mock + # pytest-randomly +pytest-asyncio==0.23.7 + # via -r .riot/requirements/12e6c9b.in +pytest-cov==5.0.0 + # via -r .riot/requirements/12e6c9b.in +pytest-mock==3.14.0 + # via -r .riot/requirements/12e6c9b.in +pytest-randomly==3.10.1 + # via -r .riot/requirements/12e6c9b.in +python-dateutil==2.9.0.post0 + # via botocore +pyyaml==6.0.1 + # via + # huggingface-hub + # langchain + # langchain-core + # vcrpy +regex==2024.5.15 + # via tiktoken +requests==2.32.3 + # via + # cohere + # huggingface-hub + # langchain + # langsmith + # tiktoken +s3transfer==0.10.2 + # via boto3 +sentencepiece==0.2.0 + # via ai21-tokenizer +six==1.16.0 + # via python-dateutil +sniffio==1.3.1 + # via + # anthropic + # anyio + # httpx + # openai +sortedcontainers==2.4.0 + # via hypothesis +sqlalchemy==2.0.31 + # via langchain +tenacity==8.5.0 + # via + # ai21 + # langchain + # langchain-core +tiktoken==0.7.0 + # via + # -r .riot/requirements/12e6c9b.in + # langchain-openai +tokenizers==0.19.1 + # via + # ai21-tokenizer + # anthropic + # cohere +tomli==2.0.1 + # via + # coverage + # pytest +tqdm==4.66.4 + # via + # huggingface-hub + # openai + # pinecone-client +types-requests==2.32.0.20240712 + # via cohere +typing-extensions==4.12.2 + # via + # ai21 + # anthropic + # anyio + # cohere + # huggingface-hub + # openai + # pinecone-client + # pydantic + # pydantic-core + # sqlalchemy + # typing-inspect +typing-inspect==0.9.0 + # via dataclasses-json +urllib3==2.0.7 + # via + # botocore + # pinecone-client + # requests + # types-requests +vcrpy==6.0.1 + # via -r .riot/requirements/12e6c9b.in +wrapt==1.16.0 + # via vcrpy +yarl==1.9.4 + # via + # aiohttp + # vcrpy diff --git a/.riot/requirements/1356251.txt b/.riot/requirements/1356251.txt new file mode 100644 index 00000000000..0b3c927d4fb --- /dev/null +++ b/.riot/requirements/1356251.txt @@ -0,0 +1,35 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1356251.in +# +aiohttp==3.9.5 +aiohttp-jinja2==1.6 +aiosignal==1.3.1 +async-timeout==4.0.3 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +frozenlist==1.4.1 +hypothesis==6.45.0 +idna==3.7 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +jinja2==3.1.4 +markupsafe==2.1.5 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-aiohttp==1.0.5 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +yarl==1.9.4 +zipp==3.19.2 diff --git a/.riot/requirements/1338800.txt b/.riot/requirements/137098c.txt similarity index 86% rename from .riot/requirements/1338800.txt rename to .riot/requirements/137098c.txt index 5fb0a89fd83..b10fef098ac 100644 --- a/.riot/requirements/1338800.txt +++ b/.riot/requirements/137098c.txt @@ -2,11 +2,11 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1338800.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/137098c.in # attrs==23.2.0 coverage[toml]==7.2.7 -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 gevent==22.10.2 greenlet==3.0.3 httpretty==1.1.4 @@ -17,7 +17,7 @@ mock==5.1.0 opentracing==2.4.0 packaging==24.0 pluggy==1.2.0 -pyfakefs==5.5.0 +pyfakefs==5.6.0 pytest==7.4.4 pytest-asyncio==0.21.2 pytest-cov==4.1.0 @@ -29,7 +29,7 @@ tomli==2.0.1 typing-extensions==4.7.1 zipp==3.15.0 zope-event==5.0 -zope-interface==6.4 +zope-interface==6.4.post2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/1e7ee60.txt b/.riot/requirements/13804af.txt similarity index 69% rename from .riot/requirements/1e7ee60.txt rename to .riot/requirements/13804af.txt index dcc1cf169e6..54924327397 100644 --- a/.riot/requirements/1e7ee60.txt +++ b/.riot/requirements/13804af.txt @@ -2,36 +2,36 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1e7ee60.in +# pip-compile --no-annotate .riot/requirements/13804af.in # annotated-types==0.7.0 -anyio==4.3.0 +anyio==4.4.0 attrs==23.2.0 -certifi==2024.2.2 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.5.1 +coverage[toml]==7.6.0 distro==1.9.0 -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 hypothesis==6.45.0 idna==3.7 -importlib-metadata==7.1.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 numpy==1.24.4 openai[datalib]==1.30.1 opentracing==2.4.0 -packaging==24.0 +packaging==24.1 pandas==2.0.3 pandas-stubs==2.0.3.230814 -pillow==10.3.0 +pillow==10.1.0 pluggy==1.5.0 -pydantic==2.7.1 -pydantic-core==2.18.2 -pytest==8.2.1 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.2.2 pytest-asyncio==0.21.1 pytest-cov==5.0.0 pytest-mock==3.14.0 @@ -40,7 +40,7 @@ python-dateutil==2.9.0.post0 pytz==2024.1 pyyaml==6.0.1 regex==2024.5.15 -requests==2.32.0 +requests==2.32.3 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 @@ -48,10 +48,10 @@ tiktoken==0.7.0 tomli==2.0.1 tqdm==4.66.4 types-pytz==2024.1.0.20240417 -typing-extensions==4.11.0 +typing-extensions==4.12.2 tzdata==2024.1 -urllib3==1.26.18 +urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 -zipp==3.18.2 +zipp==3.19.2 diff --git a/.riot/requirements/13c0fff.txt b/.riot/requirements/13c0fff.txt new file mode 100644 index 00000000000..3919d9ddaf1 --- /dev/null +++ b/.riot/requirements/13c0fff.txt @@ -0,0 +1,35 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/13c0fff.in +# +aiobotocore==2.13.1 +aiohttp==3.9.5 +aioitertools==0.11.0 +aiosignal==1.3.1 +async-generator==1.10 +attrs==23.2.0 +botocore==1.34.131 +coverage[toml]==7.5.4 +frozenlist==1.4.1 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +jmespath==1.0.1 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +python-dateutil==2.9.0.post0 +six==1.16.0 +sortedcontainers==2.4.0 +urllib3==2.2.2 +wrapt==1.16.0 +yarl==1.9.4 diff --git a/.riot/requirements/13d7c9a.txt b/.riot/requirements/13d7c9a.txt deleted file mode 100644 index f19e854ff0a..00000000000 --- a/.riot/requirements/13d7c9a.txt +++ /dev/null @@ -1,51 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/13d7c9a.in -# -annotated-types==0.6.0 -anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.3.4 -distro==1.8.0 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==1.0.2 -httpx==0.26.0 -hypothesis==6.45.0 -idna==3.6 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.4 -numpy==1.26.2 -openai[datalib,embeddings]==1.1.1 -opentracing==2.4.0 -packaging==23.2 -pandas==2.1.4 -pandas-stubs==2.1.4.231218 -pillow==10.1.0 -pluggy==1.3.0 -pydantic==2.5.2 -pydantic-core==2.14.5 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-dateutil==2.8.2 -pytz==2023.3.post1 -pyyaml==6.0.1 -six==1.16.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -tqdm==4.66.1 -types-pytz==2023.3.1.1 -typing-extensions==4.9.0 -tzdata==2023.3 -urllib3==1.26.18 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 diff --git a/.riot/requirements/13d8f2b.txt b/.riot/requirements/13d8f2b.txt new file mode 100644 index 00000000000..a713e2e4089 --- /dev/null +++ b/.riot/requirements/13d8f2b.txt @@ -0,0 +1,28 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/13d8f2b.in +# +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +googleapis-common-protos==1.63.2 +grpcio==1.34.1 +hypothesis==6.45.0 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +protobuf==5.27.2 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +six==1.16.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +zipp==3.19.2 diff --git a/.riot/requirements/18f1e69.txt b/.riot/requirements/13ecda2.txt similarity index 50% rename from .riot/requirements/18f1e69.txt rename to .riot/requirements/13ecda2.txt index 52f5a82f958..1e9b53ce750 100644 --- a/.riot/requirements/18f1e69.txt +++ b/.riot/requirements/13ecda2.txt @@ -2,31 +2,31 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/18f1e69.in +# pip-compile --no-annotate .riot/requirements/13ecda2.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiosignal==1.3.1 async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 +idna==3.7 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 tomli==2.0.1 yarl==1.9.4 -zipp==3.17.0 +zipp==3.19.2 diff --git a/.riot/requirements/13fec34.txt b/.riot/requirements/13fec34.txt new file mode 100644 index 00000000000..a73160dd648 --- /dev/null +++ b/.riot/requirements/13fec34.txt @@ -0,0 +1,49 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/13fec34.in +# +annotated-types==0.7.0 +anyio==3.7.1 +attrs==23.2.0 +certifi==2024.7.4 +coverage[toml]==7.6.0 +distro==1.9.0 +h11==0.14.0 +httpcore==1.0.5 +httpx==0.27.0 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +mock==5.1.0 +multidict==6.0.5 +numpy==2.0.0 +openai[datalib,embeddings]==1.1.1 +opentracing==2.4.0 +packaging==24.1 +pandas==2.2.2 +pandas-stubs==2.2.2.240603 +pillow==9.5.0 +pluggy==1.5.0 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +python-dateutil==2.9.0.post0 +pytz==2024.1 +pyyaml==6.0.1 +six==1.16.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tqdm==4.66.4 +types-pytz==2024.1.0.20240417 +typing-extensions==4.12.2 +tzdata==2024.1 +urllib3==1.26.19 +vcrpy==4.2.1 +wrapt==1.16.0 +yarl==1.9.4 diff --git a/.riot/requirements/151b369.txt b/.riot/requirements/151b369.txt deleted file mode 100644 index fbeff6af3e7..00000000000 --- a/.riot/requirements/151b369.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/151b369.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -psycopg==3.1.16 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.9.0 diff --git a/.riot/requirements/153b29f.txt b/.riot/requirements/153b29f.txt deleted file mode 100644 index 2d71cc69a00..00000000000 --- a/.riot/requirements/153b29f.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/153b29f.in -# -aiohttp==3.9.1 -aiohttp-jinja2==1.5.1 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 -mock==5.1.0 -multidict==6.0.4 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -yarl==1.9.4 -zipp==3.17.0 diff --git a/.riot/requirements/1567cf8.txt b/.riot/requirements/1567cf8.txt deleted file mode 100644 index 75bd4bed87a..00000000000 --- a/.riot/requirements/1567cf8.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1567cf8.in -# -anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -h11==0.12.0 -httpcore==0.14.7 -httpx==0.22.0 -hypothesis==6.45.0 -idna==3.6 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -rfc3986[idna2008]==1.5.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/16d03fb.txt b/.riot/requirements/15b093e.txt similarity index 51% rename from .riot/requirements/16d03fb.txt rename to .riot/requirements/15b093e.txt index d34f2f0118e..31686a68e09 100644 --- a/.riot/requirements/16d03fb.txt +++ b/.riot/requirements/15b093e.txt @@ -2,84 +2,79 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/16d03fb.in +# pip-compile --no-annotate .riot/requirements/15b093e.in # -annotated-types==0.6.0 +annotated-types==0.7.0 attrs==23.2.0 -aws-sam-translator==1.85.0 -aws-xray-sdk==2.12.1 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto3==1.34.49 botocore==1.34.49 -certifi==2024.2.2 +certifi==2024.7.4 cffi==1.16.0 -cfn-lint==0.85.2 +cfn-lint==1.7.0 charset-normalizer==3.3.2 -coverage[toml]==7.4.3 -cryptography==42.0.5 -docker==7.0.0 -ecdsa==0.18.0 -exceptiongroup==1.2.0 +coverage[toml]==7.6.0 +cryptography==42.0.8 +docker==7.1.0 +ecdsa==0.19.0 +exceptiongroup==1.2.2 graphql-core==3.2.3 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 -jinja2==3.1.3 +jinja2==3.1.4 jmespath==1.0.1 -jschema-to-python==1.2.3 -jsondiff==2.0.0 +jsondiff==2.1.2 jsonpatch==1.33 -jsonpickle==3.0.3 -jsonpointer==2.4 -jsonschema==4.21.1 -jsonschema-path==0.3.2 +jsonpointer==3.0.0 +jsonschema==4.23.0 +jsonschema-path==0.3.3 jsonschema-specifications==2023.12.1 -junit-xml==1.9 lazy-object-proxy==1.10.0 markupsafe==2.1.5 mock==5.1.0 moto[all]==4.2.14 mpmath==1.3.0 multidict==6.0.5 -multipart==0.2.4 -networkx==3.2.1 +multipart==0.2.5 +networkx==3.3 openapi-schema-validator==0.6.2 openapi-spec-validator==0.7.1 opentracing==2.4.0 -packaging==23.2 +packaging==24.1 pathable==0.4.3 -pbr==6.0.0 -pluggy==1.4.0 +pluggy==1.5.0 py-partiql-parser==0.5.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.6.2 -pydantic-core==2.16.3 -pyparsing==3.1.1 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.2 +pydantic-core==2.20.1 +pyparsing==3.1.2 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 pyyaml==6.0.1 -referencing==0.31.1 -regex==2023.12.25 -requests==2.31.0 -responses==0.25.0 +referencing==0.35.1 +regex==2024.5.15 +requests==2.32.3 +responses==0.25.3 rfc3339-validator==0.1.4 -rpds-py==0.18.0 +rpds-py==0.19.0 rsa==4.9 -s3transfer==0.10.0 -sarif-om==1.0.4 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 -sympy==1.12 +sympy==1.13.0 tomli==2.0.1 -typing-extensions==4.9.0 +typing-extensions==4.12.2 urllib3==2.0.7 vcrpy==6.0.1 -werkzeug==3.0.1 +werkzeug==3.0.3 wrapt==1.16.0 xmltodict==0.13.0 yarl==1.9.4 diff --git a/.riot/requirements/13a8940.txt b/.riot/requirements/15cc9b9.txt similarity index 52% rename from .riot/requirements/13a8940.txt rename to .riot/requirements/15cc9b9.txt index a823caaf2a3..eeaf4191909 100644 --- a/.riot/requirements/13a8940.txt +++ b/.riot/requirements/15cc9b9.txt @@ -2,31 +2,31 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/13a8940.in +# pip-compile --no-annotate .riot/requirements/15cc9b9.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiohttp-jinja2==1.6 aiosignal==1.3.1 async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 +jinja2==3.1.4 +markupsafe==2.1.5 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 tomli==2.0.1 diff --git a/.riot/requirements/1a7830b.txt b/.riot/requirements/15e76f9.txt similarity index 52% rename from .riot/requirements/1a7830b.txt rename to .riot/requirements/15e76f9.txt index a8e24bdb9a5..63ae52f3b82 100644 --- a/.riot/requirements/1a7830b.txt +++ b/.riot/requirements/15e76f9.txt @@ -2,29 +2,29 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1a7830b.in +# pip-compile --no-annotate .riot/requirements/15e76f9.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiohttp-jinja2==1.5.1 aiosignal==1.3.1 -attrs==23.1.0 -coverage[toml]==7.3.4 +attrs==23.2.0 +coverage[toml]==7.5.4 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 +jinja2==3.1.4 +markupsafe==2.1.5 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 yarl==1.9.4 diff --git a/.riot/requirements/9946322.txt b/.riot/requirements/15ef82f.txt similarity index 86% rename from .riot/requirements/9946322.txt rename to .riot/requirements/15ef82f.txt index f3cffca9f81..39aed110ab9 100644 --- a/.riot/requirements/9946322.txt +++ b/.riot/requirements/15ef82f.txt @@ -2,18 +2,18 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/9946322.in +# pip-compile --no-annotate .riot/requirements/15ef82f.in # -ai21==2.9.1 +ai21==2.9.2 ai21-tokenizer==0.11.2 aiohttp==3.9.5 aiosignal==1.3.1 annotated-types==0.7.0 -anthropic==0.31.0 +anthropic==0.31.2 anyio==4.4.0 attrs==23.2.0 -boto3==1.34.144 -botocore==1.34.144 +boto3==1.34.51 +botocore==1.34.51 certifi==2024.7.4 charset-normalizer==3.3.2 cohere==5.4.0 @@ -32,7 +32,7 @@ h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 httpx-sse==0.4.0 -huggingface-hub==0.23.4 +huggingface-hub==0.24.0 hypothesis==6.45.0 idna==3.7 iniconfig==2.0.0 @@ -49,12 +49,12 @@ langchain-core==0.1.52 langchain-openai==0.1.6 langchain-pinecone==0.1.0 langchain-text-splitters==0.0.2 -langsmith==0.1.85 +langsmith==0.1.92 marshmallow==3.21.3 mock==5.1.0 multidict==6.0.5 mypy-extensions==1.0.0 -numexpr==2.10.1 +numexpr==2.8.5 numpy==1.26.4 openai==1.30.3 opentracing==2.4.0 @@ -66,10 +66,10 @@ psutil==6.0.0 pydantic==2.8.2 pydantic-core==2.20.1 pytest==8.2.2 -pytest-asyncio==0.21.1 +pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.10.1 python-dateutil==2.9.0.post0 pyyaml==6.0.1 regex==2024.5.15 @@ -87,7 +87,7 @@ tqdm==4.66.4 types-requests==2.32.0.20240712 typing-extensions==4.12.2 typing-inspect==0.9.0 -urllib3==2.2.2 +urllib3==2.0.7 vcrpy==6.0.1 wrapt==1.16.0 yarl==1.9.4 diff --git a/.riot/requirements/1b4108b.txt b/.riot/requirements/1605571.txt similarity index 78% rename from .riot/requirements/1b4108b.txt rename to .riot/requirements/1605571.txt index b68262fc1c5..3a2c7bb0af4 100644 --- a/.riot/requirements/1b4108b.txt +++ b/.riot/requirements/1605571.txt @@ -2,21 +2,21 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1b4108b.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1605571.in # -attrs==23.1.0 +attrs==23.2.0 backports-zoneinfo==0.2.1 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 -psycopg==3.0.18 -pytest==7.4.3 +psycopg==3.1.20 +pytest==7.4.4 pytest-asyncio==0.21.1 pytest-cov==4.1.0 pytest-mock==3.11.1 diff --git a/.riot/requirements/18e7930.txt b/.riot/requirements/1619693.txt similarity index 78% rename from .riot/requirements/18e7930.txt rename to .riot/requirements/1619693.txt index fd5bf05d3ec..1069309457b 100644 --- a/.riot/requirements/18e7930.txt +++ b/.riot/requirements/1619693.txt @@ -2,30 +2,30 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/18e7930.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1619693.in # aiohttp==3.8.6 aiohttp-jinja2==1.5.1 aiosignal==1.3.1 async-timeout==4.0.3 asynctest==0.13.0 -attrs==23.1.0 +attrs==23.2.0 charset-normalizer==3.3.2 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 frozenlist==1.3.3 hypothesis==6.45.0 -idna==3.6 +idna==3.7 importlib-metadata==6.7.0 iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 +jinja2==3.1.4 +markupsafe==2.1.5 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 -pytest==7.4.3 +pytest==7.4.4 pytest-aiohttp==1.0.5 pytest-asyncio==0.21.1 pytest-cov==4.1.0 diff --git a/.riot/requirements/162e30e.txt b/.riot/requirements/162e30e.txt new file mode 100644 index 00000000000..5de56c7f9c1 --- /dev/null +++ b/.riot/requirements/162e30e.txt @@ -0,0 +1,27 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/162e30e.in +# +aiohttp==3.9.5 +aiosignal==1.3.1 +attrs==23.2.0 +coverage[toml]==7.5.4 +frozenlist==1.4.1 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-aiohttp==1.0.5 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +yarl==1.9.4 diff --git a/.riot/requirements/1634a62.txt b/.riot/requirements/1634a62.txt new file mode 100644 index 00000000000..9f829aa76d8 --- /dev/null +++ b/.riot/requirements/1634a62.txt @@ -0,0 +1,48 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1634a62.in +# +attrs==23.2.0 +certifi==2024.6.2 +charset-normalizer==2.1.1 +click==8.1.7 +coverage[toml]==7.5.4 +deprecated==1.2.14 +flask==2.1.3 +gevent==24.2.1 +greenlet==3.0.3 +hypothesis==6.45.0 +idna==3.7 +importlib-metadata==7.1.0 +iniconfig==2.0.0 +itsdangerous==2.2.0 +jinja2==3.1.4 +markupsafe==2.0.1 +mock==5.1.0 +opentelemetry-api==1.25.0 +opentelemetry-instrumentation==0.37b0 +opentelemetry-instrumentation-flask==0.37b0 +opentelemetry-instrumentation-wsgi==0.37b0 +opentelemetry-semantic-conventions==0.37b0 +opentelemetry-util-http==0.37b0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +requests==2.28.1 +sortedcontainers==2.4.0 +urllib3==1.26.19 +werkzeug==2.1.2 +wrapt==1.16.0 +zipp==3.19.2 +zope-event==5.0 +zope-interface==6.4.post2 + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/.riot/requirements/1f0c84d.txt b/.riot/requirements/165b374.txt similarity index 81% rename from .riot/requirements/1f0c84d.txt rename to .riot/requirements/165b374.txt index 6690a30efd0..5e40fc5446f 100644 --- a/.riot/requirements/1f0c84d.txt +++ b/.riot/requirements/165b374.txt @@ -2,27 +2,27 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1f0c84d.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/165b374.in # aiohttp==3.8.6 aiosignal==1.3.1 async-timeout==4.0.3 asynctest==0.13.0 -attrs==23.1.0 +attrs==23.2.0 charset-normalizer==3.3.2 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 frozenlist==1.3.3 hypothesis==6.45.0 -idna==3.6 +idna==3.7 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 -pytest==7.4.3 +pytest==7.4.4 pytest-aiohttp==1.0.5 pytest-asyncio==0.21.1 pytest-cov==4.1.0 diff --git a/.riot/requirements/1fadc81.txt b/.riot/requirements/1683324.txt similarity index 85% rename from .riot/requirements/1fadc81.txt rename to .riot/requirements/1683324.txt index a463455ad90..70f7284a8a1 100644 --- a/.riot/requirements/1fadc81.txt +++ b/.riot/requirements/1683324.txt @@ -2,18 +2,18 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1fadc81.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1683324.in # async-timeout==4.0.3 attrs==23.2.0 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 pytest==7.4.4 pytest-asyncio==0.21.1 diff --git a/.riot/requirements/169c991.txt b/.riot/requirements/169c991.txt index b00087df1f0..94e279b24f8 100644 --- a/.riot/requirements/169c991.txt +++ b/.riot/requirements/169c991.txt @@ -4,68 +4,68 @@ # # pip-compile --no-annotate .riot/requirements/169c991.in # -annotated-types==0.6.0 -attrs==23.1.0 -aws-sam-translator==1.82.0 -aws-xray-sdk==2.12.1 +annotated-types==0.7.0 +attrs==23.2.0 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto==2.49.0 -boto3==1.34.6 -botocore==1.34.6 -certifi==2023.11.17 +boto3==1.34.139 +botocore==1.34.139 +certifi==2024.6.2 cffi==1.16.0 cfn-lint==0.53.1 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -cryptography==41.0.7 -docker==7.0.0 +coverage[toml]==7.5.4 +cryptography==42.0.8 +docker==7.1.0 ecdsa==0.14.1 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 idna==2.10 iniconfig==2.0.0 jinja2==2.11.3 jmespath==1.0.1 -jsondiff==2.0.0 +jsondiff==2.1.1 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==3.2.0 junit-xml==1.9 markupsafe==1.1.1 mock==5.1.0 -more-itertools==10.1.0 +more-itertools==10.3.0 moto==1.3.16 networkx==2.8.8 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.5.2 -pydantic-core==2.14.5 +packaging==24.1 +pluggy==1.5.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.0 +pydantic-core==2.20.0 pynamodb==5.5.1 pyrsistent==0.20.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 -pytz==2023.3.post1 +pytz==2024.1 pyyaml==6.0.1 -requests==2.31.0 -responses==0.24.1 +requests==2.32.3 +responses==0.25.3 rsa==4.9 -s3transfer==0.10.0 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==2.0.7 +typing-extensions==4.12.2 +urllib3==2.2.2 werkzeug==2.1.2 wrapt==1.16.0 xmltodict==0.13.0 -zipp==3.17.0 +zipp==3.19.2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/16c251e.txt b/.riot/requirements/16c251e.txt new file mode 100644 index 00000000000..5b48776289c --- /dev/null +++ b/.riot/requirements/16c251e.txt @@ -0,0 +1,27 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/16c251e.in +# +attrs==23.2.0 +backports-zoneinfo==0.2.1 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +hypothesis==6.45.0 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +psycopg==3.2.1 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +typing-extensions==4.12.2 +zipp==3.19.2 diff --git a/.riot/requirements/1726ded.txt b/.riot/requirements/1726ded.txt deleted file mode 100644 index 728b890009e..00000000000 --- a/.riot/requirements/1726ded.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1726ded.in -# -aiohttp==3.9.1 -aiohttp-jinja2==1.5.1 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 -mock==5.1.0 -multidict==6.0.4 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -yarl==1.9.4 -zipp==3.17.0 diff --git a/.riot/requirements/b26ea62.txt b/.riot/requirements/1754ed1.txt similarity index 88% rename from .riot/requirements/b26ea62.txt rename to .riot/requirements/1754ed1.txt index 90bbc1410b1..6cae3bfa6fb 100644 --- a/.riot/requirements/b26ea62.txt +++ b/.riot/requirements/1754ed1.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/b26ea62.in +# pip-compile --no-annotate .riot/requirements/1754ed1.in # ai21==1.3.4 aiohttp==3.9.5 @@ -17,13 +17,13 @@ cohere==4.57 coverage[toml]==7.6.0 dataclasses-json==0.5.14 dnspython==2.6.1 -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 fastavro==1.9.5 filelock==3.15.4 frozenlist==1.4.1 fsspec==2024.6.1 greenlet==3.0.3 -huggingface-hub==0.23.4 +huggingface-hub==0.24.0 hypothesis==6.45.0 idna==3.7 importlib-metadata==6.11.0 @@ -40,7 +40,7 @@ marshmallow==3.21.3 mock==5.1.0 multidict==6.0.5 mypy-extensions==1.0.0 -numexpr==2.10.1 +numexpr==2.8.5 numpy==1.26.4 openai==0.27.8 openapi-schema-pydantic==1.2.4 @@ -51,10 +51,10 @@ pluggy==1.5.0 psutil==6.0.0 pydantic==1.10.17 pytest==8.2.2 -pytest-asyncio==0.21.1 +pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.10.1 python-dateutil==2.9.0.post0 pyyaml==6.0.1 regex==2024.5.15 diff --git a/.riot/requirements/1b1cb07.txt b/.riot/requirements/177912e.txt similarity index 56% rename from .riot/requirements/1b1cb07.txt rename to .riot/requirements/177912e.txt index ed197d18484..0fe298c21d5 100644 --- a/.riot/requirements/1b1cb07.txt +++ b/.riot/requirements/177912e.txt @@ -2,22 +2,22 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1b1cb07.in +# pip-compile --no-annotate .riot/requirements/177912e.in # async-timeout==4.0.3 attrs==23.2.0 -coverage[toml]==7.4.0 -exceptiongroup==1.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 redis==5.0.1 sortedcontainers==2.4.0 diff --git a/.riot/requirements/7e67451.txt b/.riot/requirements/17a194c.txt similarity index 51% rename from .riot/requirements/7e67451.txt rename to .riot/requirements/17a194c.txt index 254d6a1ec8e..0fdb8f339b0 100644 --- a/.riot/requirements/7e67451.txt +++ b/.riot/requirements/17a194c.txt @@ -2,24 +2,24 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/7e67451.in +# pip-compile --no-annotate .riot/requirements/17a194c.in # -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 hypothesis==6.45.0 -importlib-metadata==7.0.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 redis==3.5.3 redis-py-cluster==2.1.3 sortedcontainers==2.4.0 tomli==2.0.1 -zipp==3.17.0 +zipp==3.19.2 diff --git a/.riot/requirements/1ec1f44.txt b/.riot/requirements/17d4731.txt similarity index 50% rename from .riot/requirements/1ec1f44.txt rename to .riot/requirements/17d4731.txt index 91bd3d42495..54c89dc586b 100644 --- a/.riot/requirements/1ec1f44.txt +++ b/.riot/requirements/17d4731.txt @@ -2,24 +2,23 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1ec1f44.in +# pip-compile --no-annotate .riot/requirements/17d4731.in # attrs==23.2.0 -coverage[toml]==7.4.2 -exceptiongroup==1.2.0 -googleapis-common-protos==1.62.0 -grpcio==1.59.3 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -protobuf==4.25.3 -pytest==8.0.1 +packaging==24.1 +pluggy==1.5.0 +psycopg==3.2.1 +pytest==8.2.2 pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 tomli==2.0.1 +typing-extensions==4.12.2 diff --git a/.riot/requirements/17de2dc.txt b/.riot/requirements/17de2dc.txt deleted file mode 100644 index dfa860d32c5..00000000000 --- a/.riot/requirements/17de2dc.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/17de2dc.in -# -async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -redis==4.6.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/17ec5eb.txt b/.riot/requirements/17ec5eb.txt new file mode 100644 index 00000000000..40b68f0c906 --- /dev/null +++ b/.riot/requirements/17ec5eb.txt @@ -0,0 +1,35 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/17ec5eb.in +# +aiohttp==3.9.5 +aiohttp-jinja2==1.5.1 +aiosignal==1.3.1 +async-timeout==4.0.3 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +frozenlist==1.4.1 +hypothesis==6.45.0 +idna==3.7 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +jinja2==3.1.4 +markupsafe==2.1.5 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-aiohttp==1.0.5 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +yarl==1.9.4 +zipp==3.19.2 diff --git a/.riot/requirements/1810353.txt b/.riot/requirements/1810353.txt deleted file mode 100644 index 56ede4ac150..00000000000 --- a/.riot/requirements/1810353.txt +++ /dev/null @@ -1,103 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1810353.in -# -ai21==2.9.1 -ai21-tokenizer==0.11.2 -aiohttp==3.9.5 -aiosignal==1.3.1 -annotated-types==0.7.0 -anthropic==0.31.0 -anyio==4.4.0 -async-timeout==4.0.3 -attrs==23.2.0 -boto3==1.34.143 -botocore==1.34.143 -certifi==2024.7.4 -charset-normalizer==3.3.2 -cohere==5.5.8 -coverage[toml]==7.6.0 -dataclasses-json==0.6.7 -defusedxml==0.7.1 -distro==1.9.0 -exceptiongroup==1.2.1 -fastavro==1.9.5 -filelock==3.15.4 -frozenlist==1.4.1 -fsspec==2024.6.1 -greenlet==3.0.3 -h11==0.14.0 -httpcore==1.0.5 -httpx==0.27.0 -httpx-sse==0.4.0 -huggingface-hub==0.23.4 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 -iniconfig==2.0.0 -jiter==0.5.0 -jmespath==1.0.1 -jsonpatch==1.33 -jsonpointer==3.0.0 -langchain==0.2.7 -langchain-anthropic==0.1.19 -langchain-aws==0.1.10 -langchain-cohere==0.1.9 -langchain-community==0.2.7 -langchain-core==0.2.15 -langchain-experimental==0.0.62 -langchain-openai==0.1.15 -langchain-pinecone==0.1.1 -langchain-text-splitters==0.2.2 -langsmith==0.1.85 -marshmallow==3.21.3 -mock==5.1.0 -multidict==6.0.5 -mypy-extensions==1.0.0 -numexpr==2.10.1 -numpy==1.26.4 -openai==1.35.13 -opentracing==2.4.0 -orjson==3.10.6 -packaging==24.1 -pandas==2.2.2 -parameterized==0.9.0 -pinecone-client==3.2.2 -pluggy==1.5.0 -psutil==6.0.0 -pydantic==2.8.2 -pydantic-core==2.20.1 -pytest==8.2.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -pytz==2024.1 -pyyaml==6.0.1 -regex==2024.5.15 -requests==2.32.3 -s3transfer==0.10.2 -sentencepiece==0.2.0 -six==1.16.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -sqlalchemy==2.0.31 -tabulate==0.9.0 -tenacity==8.5.0 -tiktoken==0.7.0 -tokenizers==0.19.1 -tomli==2.0.1 -tqdm==4.66.4 -types-requests==2.31.0.6 -types-urllib3==1.26.25.14 -typing-extensions==4.12.2 -typing-inspect==0.9.0 -tzdata==2024.1 -urllib3==1.26.19 -vcrpy==6.0.1 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.19.2 diff --git a/.riot/requirements/1c18506.txt b/.riot/requirements/181128c.txt similarity index 52% rename from .riot/requirements/1c18506.txt rename to .riot/requirements/181128c.txt index 35005b0a03e..bbbfce393fd 100644 --- a/.riot/requirements/1c18506.txt +++ b/.riot/requirements/181128c.txt @@ -2,25 +2,25 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1c18506.in +# pip-compile --no-annotate .riot/requirements/181128c.in # async-timeout==4.0.3 attrs==23.2.0 -coverage[toml]==7.4.0 -exceptiongroup==1.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 hypothesis==6.45.0 -importlib-metadata==7.0.1 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 redis==5.0.1 sortedcontainers==2.4.0 tomli==2.0.1 -zipp==3.17.0 +zipp==3.19.2 diff --git a/.riot/requirements/1666d46.txt b/.riot/requirements/181216c.txt similarity index 89% rename from .riot/requirements/1666d46.txt rename to .riot/requirements/181216c.txt index e74f4447748..3297b734317 100644 --- a/.riot/requirements/1666d46.txt +++ b/.riot/requirements/181216c.txt @@ -2,16 +2,16 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1666d46.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/181216c.in # annotated-types==0.5.0 anyio==3.7.1 attrs==23.2.0 cached-property==1.5.2 -certifi==2024.2.2 +certifi==2024.7.4 coverage[toml]==7.2.7 distro==1.9.0 -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 h11==0.14.0 httpcore==0.17.3 httpx==0.24.1 @@ -45,7 +45,7 @@ sortedcontainers==2.4.0 tomli==2.0.1 tqdm==4.66.4 typing-extensions==4.7.1 -urllib3==1.26.18 +urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 diff --git a/.riot/requirements/7e8b35e.txt b/.riot/requirements/1825740.txt similarity index 80% rename from .riot/requirements/7e8b35e.txt rename to .riot/requirements/1825740.txt index 702100391df..d802e1be924 100644 --- a/.riot/requirements/7e8b35e.txt +++ b/.riot/requirements/1825740.txt @@ -2,32 +2,32 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/7e8b35e.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1825740.in # aiohttp==3.8.6 aiosignal==1.3.1 async-timeout==4.0.3 asynctest==0.13.0 -attrs==23.1.0 -certifi==2023.11.17 +attrs==23.2.0 +certifi==2024.7.4 charset-normalizer==3.3.2 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.2 frozenlist==1.3.3 hypothesis==6.45.0 -idna==3.6 +idna==3.7 importlib-metadata==6.7.0 iniconfig==2.0.0 joblib==1.3.2 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 numpy==1.21.6 openai==0.26.5 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pillow==9.5.0 pluggy==1.2.0 -pytest==7.4.3 +pytest==7.4.4 pytest-asyncio==0.21.1 pytest-cov==4.1.0 pytest-mock==3.11.1 @@ -40,9 +40,9 @@ six==1.16.0 sortedcontainers==2.4.0 threadpoolctl==3.1.0 tomli==2.0.1 -tqdm==4.66.1 +tqdm==4.66.4 typing-extensions==4.7.1 -urllib3==1.26.18 +urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 diff --git a/.riot/requirements/1853bc5.txt b/.riot/requirements/1853bc5.txt index 6bbebbc9a97..d35e81127bc 100644 --- a/.riot/requirements/1853bc5.txt +++ b/.riot/requirements/1853bc5.txt @@ -4,69 +4,69 @@ # # pip-compile --no-annotate .riot/requirements/1853bc5.in # -annotated-types==0.6.0 -attrs==23.1.0 -aws-sam-translator==1.82.0 -aws-xray-sdk==2.12.1 +annotated-types==0.7.0 +attrs==23.2.0 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto==2.49.0 -boto3==1.34.6 -botocore==1.34.6 -certifi==2023.11.17 +boto3==1.34.139 +botocore==1.34.139 +certifi==2024.6.2 cffi==1.16.0 cfn-lint==0.53.1 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -cryptography==41.0.7 -docker==7.0.0 +coverage[toml]==7.5.4 +cryptography==42.0.8 +docker==7.1.0 ecdsa==0.14.1 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 idna==2.10 -importlib-metadata==7.0.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 jinja2==2.11.3 jmespath==1.0.1 -jsondiff==2.0.0 +jsondiff==2.1.1 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==3.2.0 junit-xml==1.9 markupsafe==1.1.1 mock==5.1.0 -more-itertools==10.1.0 +more-itertools==10.3.0 moto==1.3.16 networkx==2.8.8 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.5.2 -pydantic-core==2.14.5 +packaging==24.1 +pluggy==1.5.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.0 +pydantic-core==2.20.0 pynamodb==5.5.1 pyrsistent==0.20.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 -pytz==2023.3.post1 +pytz==2024.1 pyyaml==6.0.1 -requests==2.31.0 -responses==0.24.1 +requests==2.32.3 +responses==0.25.3 rsa==4.9 -s3transfer==0.10.0 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==1.26.18 +typing-extensions==4.12.2 +urllib3==1.26.19 werkzeug==2.1.2 wrapt==1.16.0 xmltodict==0.13.0 -zipp==3.17.0 +zipp==3.19.2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/18d7e9f.txt b/.riot/requirements/186ece2.txt similarity index 80% rename from .riot/requirements/18d7e9f.txt rename to .riot/requirements/186ece2.txt index 8762d68ea48..79af56e0359 100644 --- a/.riot/requirements/18d7e9f.txt +++ b/.riot/requirements/186ece2.txt @@ -2,19 +2,19 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/18d7e9f.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/186ece2.in # -attrs==23.1.0 +attrs==23.2.0 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 -pytest==7.4.3 +pytest==7.4.4 pytest-cov==4.1.0 pytest-mock==3.11.1 pytest-randomly==3.12.0 diff --git a/.riot/requirements/ac23362.txt b/.riot/requirements/1894fac.txt similarity index 68% rename from .riot/requirements/ac23362.txt rename to .riot/requirements/1894fac.txt index 01cced6616c..7565d0dd040 100644 --- a/.riot/requirements/ac23362.txt +++ b/.riot/requirements/1894fac.txt @@ -2,32 +2,31 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/ac23362.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1894fac.in # anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 +attrs==23.2.0 +certifi==2024.6.2 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -h11==0.12.0 -httpcore==0.14.7 -httpx==0.22.0 +exceptiongroup==1.2.1 +h11==0.14.0 +httpcore==0.16.3 +httpx==0.23.3 hypothesis==6.45.0 -idna==3.6 +idna==3.7 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 -pytest==7.4.3 +pytest==7.4.4 pytest-asyncio==0.21.1 pytest-cov==4.1.0 pytest-mock==3.11.1 pytest-randomly==3.12.0 rfc3986[idna2008]==1.5.0 -sniffio==1.3.0 +sniffio==1.3.1 sortedcontainers==2.4.0 tomli==2.0.1 typing-extensions==4.7.1 diff --git a/.riot/requirements/1b365e2.txt b/.riot/requirements/189a9da.txt similarity index 76% rename from .riot/requirements/1b365e2.txt rename to .riot/requirements/189a9da.txt index bf8e3b567c6..b329bd7b50f 100644 --- a/.riot/requirements/1b365e2.txt +++ b/.riot/requirements/189a9da.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1b365e2.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/189a9da.in # aiobotocore==2.3.1 aiohttp==3.8.6 @@ -12,43 +12,43 @@ async-timeout==4.0.3 asynctest==0.13.0 attrs==23.2.0 botocore==1.24.21 -certifi==2024.2.2 +certifi==2024.7.4 charset-normalizer==3.3.2 coverage[toml]==7.2.7 -elastic-transport==8.12.0 -elasticsearch==8.12.1 -exceptiongroup==1.2.0 +elastic-transport==8.13.1 +elasticsearch==8.14.0 +exceptiongroup==1.2.1 frozenlist==1.3.3 gevent==20.12.1 greenlet==1.0.0 hypothesis==6.45.0 -idna==3.6 +idna==3.7 importlib-metadata==6.7.0 iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 multidict==6.0.5 -opensearch-py==2.4.2 +opensearch-py==2.5.0 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 -pynamodb==6.0.0 +pynamodb==5.5.1 pytest==7.4.4 pytest-cov==4.1.0 pytest-mock==3.11.1 pytest-randomly==3.12.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 requests==2.31.0 six==1.16.0 sortedcontainers==2.4.0 tomli==2.0.1 typing-extensions==4.7.1 -urllib3==1.26.18 +urllib3==1.26.19 wrapt==1.16.0 yarl==1.9.4 zipp==3.15.0 zope-event==5.0 -zope-interface==6.2 +zope-interface==6.4.post2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/1bcdaef.txt b/.riot/requirements/18b32f4.txt similarity index 55% rename from .riot/requirements/1bcdaef.txt rename to .riot/requirements/18b32f4.txt index 17c4ae82196..ce02e20acda 100644 --- a/.riot/requirements/1bcdaef.txt +++ b/.riot/requirements/18b32f4.txt @@ -2,20 +2,20 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1bcdaef.in +# pip-compile --no-annotate .riot/requirements/18b32f4.in # attrs==23.2.0 -coverage[toml]==7.4.0 +coverage[toml]==7.5.4 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 redis==5.0.1 sortedcontainers==2.4.0 diff --git a/.riot/requirements/18dee11.txt b/.riot/requirements/18dee11.txt new file mode 100644 index 00000000000..f3b7a09f9db --- /dev/null +++ b/.riot/requirements/18dee11.txt @@ -0,0 +1,54 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/18dee11.in +# +aiosqlite==0.17.0 +annotated-types==0.7.0 +attrs==23.2.0 +blinker==1.8.2 +bytecode==0.15.1 +cattrs==22.2.0 +certifi==2024.7.4 +charset-normalizer==3.3.2 +click==8.1.7 +coverage[toml]==7.6.0 +deprecated==1.2.14 +envier==0.5.2 +flask==3.0.3 +greenlet==3.0.3 +hypothesis==6.45.0 +idna==3.7 +importlib-metadata==7.1.0 +iniconfig==2.0.0 +iso8601==1.1.0 +itsdangerous==2.2.0 +jinja2==3.1.4 +markupsafe==2.1.5 +mock==5.1.0 +opentelemetry-api==1.25.0 +opentracing==2.4.0 +packaging==24.1 +peewee==3.17.6 +pluggy==1.5.0 +pony==0.7.17 +protobuf==5.27.2 +pycryptodome==3.20.0 +pydantic==2.8.2 +pydantic-core==2.20.1 +pypika-tortoise==0.1.6 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytz==2024.1 +requests==2.32.3 +sortedcontainers==2.4.0 +sqlalchemy==2.0.31 +tortoise-orm==0.21.5 +typing-extensions==4.12.2 +urllib3==2.2.2 +werkzeug==3.0.3 +wrapt==1.16.0 +xmltodict==0.13.0 +zipp==3.19.2 diff --git a/.riot/requirements/18fce4a.txt b/.riot/requirements/18fce4a.txt new file mode 100644 index 00000000000..4887dc3a68f --- /dev/null +++ b/.riot/requirements/18fce4a.txt @@ -0,0 +1,30 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/18fce4a.in +# +aiohttp==3.9.5 +aiohttp-jinja2==1.5.1 +aiosignal==1.3.1 +attrs==23.2.0 +coverage[toml]==7.5.4 +frozenlist==1.4.1 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +jinja2==3.1.4 +markupsafe==2.1.5 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-aiohttp==1.0.5 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +yarl==1.9.4 diff --git a/.riot/requirements/1916976.txt b/.riot/requirements/1916976.txt new file mode 100644 index 00000000000..d883e6de3cb --- /dev/null +++ b/.riot/requirements/1916976.txt @@ -0,0 +1,26 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1916976.in +# +async-timeout==4.0.3 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +hypothesis==6.45.0 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +redis==4.6.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +zipp==3.19.2 diff --git a/.riot/requirements/1926f3f.txt b/.riot/requirements/1926f3f.txt deleted file mode 100644 index 39395e33836..00000000000 --- a/.riot/requirements/1926f3f.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1926f3f.in -# -async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -redis==4.6.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/1951d97.txt b/.riot/requirements/1951d97.txt deleted file mode 100644 index d131378e1ba..00000000000 --- a/.riot/requirements/1951d97.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1951d97.in -# -aiohttp==3.9.1 -aiohttp-jinja2==1.6 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 -mock==5.1.0 -multidict==6.0.4 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -yarl==1.9.4 -zipp==3.17.0 diff --git a/.riot/requirements/77beea8.txt b/.riot/requirements/195ecad.txt similarity index 53% rename from .riot/requirements/77beea8.txt rename to .riot/requirements/195ecad.txt index 0a9b8d6e7e4..71ab9cd4907 100644 --- a/.riot/requirements/77beea8.txt +++ b/.riot/requirements/195ecad.txt @@ -2,22 +2,22 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/77beea8.in +# pip-compile --no-annotate .riot/requirements/195ecad.in # async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 redis==4.6.0 sortedcontainers==2.4.0 diff --git a/.riot/requirements/84620ce.txt b/.riot/requirements/1a00ed1.txt similarity index 71% rename from .riot/requirements/84620ce.txt rename to .riot/requirements/1a00ed1.txt index 4fb324487fc..3f8c46a76c7 100644 --- a/.riot/requirements/84620ce.txt +++ b/.riot/requirements/1a00ed1.txt @@ -2,10 +2,10 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --no-annotate .riot/requirements/84620ce.in +# pip-compile --no-annotate .riot/requirements/1a00ed1.in # attrs==23.2.0 -coverage[toml]==7.5.1 +coverage[toml]==7.6.0 gevent==24.2.1 greenlet==3.0.3 httpretty==1.1.4 @@ -13,18 +13,18 @@ hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.0 +packaging==24.1 pluggy==1.5.0 -pyfakefs==5.5.0 -pytest==8.2.1 -pytest-asyncio==0.21.2 +pyfakefs==5.6.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 python-json-logger==2.0.7 sortedcontainers==2.4.0 zope-event==5.0 -zope-interface==6.4 +zope-interface==6.4.post2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/1a22dee.txt b/.riot/requirements/1a22dee.txt new file mode 100644 index 00000000000..441586337fc --- /dev/null +++ b/.riot/requirements/1a22dee.txt @@ -0,0 +1,35 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1a22dee.in +# +aiohttp==3.9.5 +aiohttp-jinja2==1.5.1 +aiosignal==1.3.1 +async-timeout==4.0.3 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +frozenlist==1.4.1 +hypothesis==6.45.0 +idna==3.7 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +jinja2==3.1.4 +markupsafe==2.1.5 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-aiohttp==1.0.5 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +yarl==1.9.4 +zipp==3.19.2 diff --git a/.riot/requirements/1a30edd.txt b/.riot/requirements/1a30edd.txt new file mode 100644 index 00000000000..7f4c6d1649a --- /dev/null +++ b/.riot/requirements/1a30edd.txt @@ -0,0 +1,46 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1a30edd.in +# +attrs==23.2.0 +certifi==2024.6.2 +charset-normalizer==2.1.1 +click==8.1.7 +coverage[toml]==7.5.4 +deprecated==1.2.14 +flask==2.1.3 +gevent==24.2.1 +greenlet==3.0.3 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +itsdangerous==2.2.0 +jinja2==3.1.4 +markupsafe==2.0.1 +mock==5.1.0 +opentelemetry-api==1.11.1 +opentelemetry-instrumentation==0.32b0 +opentelemetry-instrumentation-flask==0.32b0 +opentelemetry-instrumentation-wsgi==0.32b0 +opentelemetry-semantic-conventions==0.32b0 +opentelemetry-util-http==0.32b0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +requests==2.28.1 +sortedcontainers==2.4.0 +urllib3==1.26.19 +werkzeug==2.1.2 +wrapt==1.16.0 +zope-event==5.0 +zope-interface==6.4.post2 + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/.riot/requirements/1a6e474.txt b/.riot/requirements/1a6e474.txt index 6d83771863a..5430a9b2ce5 100644 --- a/.riot/requirements/1a6e474.txt +++ b/.riot/requirements/1a6e474.txt @@ -4,69 +4,69 @@ # # pip-compile --no-annotate .riot/requirements/1a6e474.in # -annotated-types==0.6.0 -attrs==23.1.0 -aws-sam-translator==1.82.0 -aws-xray-sdk==2.12.1 +annotated-types==0.7.0 +attrs==23.2.0 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto==2.49.0 -boto3==1.34.6 -botocore==1.34.6 -certifi==2023.11.17 +boto3==1.34.139 +botocore==1.34.139 +certifi==2024.6.2 cffi==1.16.0 cfn-lint==0.53.1 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -cryptography==41.0.7 -docker==7.0.0 +coverage[toml]==7.5.4 +cryptography==42.0.8 +docker==7.1.0 ecdsa==0.14.1 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 idna==2.10 -importlib-metadata==7.0.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 jinja2==2.11.3 jmespath==1.0.1 -jsondiff==2.0.0 +jsondiff==2.1.1 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==3.2.0 junit-xml==1.9 markupsafe==1.1.1 mock==5.1.0 -more-itertools==10.1.0 +more-itertools==10.3.0 moto==1.3.16 networkx==2.8.8 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.5.2 -pydantic-core==2.14.5 +packaging==24.1 +pluggy==1.5.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.0 +pydantic-core==2.20.0 pynamodb==5.5.1 pyrsistent==0.20.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 -pytz==2023.3.post1 +pytz==2024.1 pyyaml==6.0.1 -requests==2.31.0 -responses==0.24.1 +requests==2.32.3 +responses==0.25.3 rsa==4.9 -s3transfer==0.10.0 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==1.26.18 +typing-extensions==4.12.2 +urllib3==1.26.19 werkzeug==2.1.2 wrapt==1.16.0 xmltodict==0.13.0 -zipp==3.17.0 +zipp==3.19.2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/1a79d00.txt b/.riot/requirements/1a79d00.txt deleted file mode 100644 index 639cef4d192..00000000000 --- a/.riot/requirements/1a79d00.txt +++ /dev/null @@ -1,88 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1a79d00.in -# -annotated-types==0.6.0 -attrs==23.2.0 -aws-sam-translator==1.85.0 -aws-xray-sdk==2.12.1 -boto3==1.34.49 -botocore==1.34.49 -certifi==2024.2.2 -cffi==1.16.0 -cfn-lint==0.85.2 -charset-normalizer==3.3.2 -coverage[toml]==7.4.3 -cryptography==42.0.5 -docker==7.0.0 -ecdsa==0.18.0 -exceptiongroup==1.2.0 -graphql-core==3.2.3 -hypothesis==6.45.0 -idna==3.6 -iniconfig==2.0.0 -jinja2==3.1.3 -jmespath==1.0.1 -jschema-to-python==1.2.3 -jsondiff==2.0.0 -jsonpatch==1.33 -jsonpickle==3.0.3 -jsonpointer==2.4 -jsonschema==4.21.1 -jsonschema-path==0.3.2 -jsonschema-specifications==2023.12.1 -junit-xml==1.9 -lazy-object-proxy==1.10.0 -markupsafe==2.1.5 -mock==5.1.0 -moto[all]==4.2.14 -mpmath==1.3.0 -multidict==6.0.5 -multipart==0.2.4 -networkx==3.2.1 -openapi-schema-validator==0.6.2 -openapi-spec-validator==0.7.1 -opentracing==2.4.0 -packaging==23.2 -pathable==0.4.3 -pbr==6.0.0 -pluggy==1.4.0 -py-partiql-parser==0.5.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.6.2 -pydantic-core==2.16.3 -pyparsing==3.1.1 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-dateutil==2.8.2 -python-jose[cryptography]==3.3.0 -pyyaml==6.0.1 -referencing==0.31.1 -regex==2023.12.25 -requests==2.31.0 -responses==0.25.0 -rfc3339-validator==0.1.4 -rpds-py==0.18.0 -rsa==4.9 -s3transfer==0.10.0 -sarif-om==1.0.4 -six==1.16.0 -sortedcontainers==2.4.0 -sshpubkeys==3.3.1 -sympy==1.12 -tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==2.0.7 -vcrpy==6.0.1 -werkzeug==3.0.1 -wrapt==1.16.0 -xmltodict==0.13.0 -yarl==1.9.4 - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/.riot/requirements/1a7c146.txt b/.riot/requirements/1a7c146.txt new file mode 100644 index 00000000000..7468881a7dd --- /dev/null +++ b/.riot/requirements/1a7c146.txt @@ -0,0 +1,28 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1a7c146.in +# +anyio==4.4.0 +attrs==23.2.0 +certifi==2024.6.2 +coverage[toml]==7.5.4 +h11==0.14.0 +httpcore==0.16.3 +httpx==0.23.3 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +rfc3986[idna2008]==1.5.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/e69c5ca.txt b/.riot/requirements/1aa652f.txt similarity index 56% rename from .riot/requirements/e69c5ca.txt rename to .riot/requirements/1aa652f.txt index cff674d7fa7..9c6a8b6202b 100644 --- a/.riot/requirements/e69c5ca.txt +++ b/.riot/requirements/1aa652f.txt @@ -2,46 +2,47 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/e69c5ca.in +# pip-compile --no-annotate .riot/requirements/1aa652f.in # aiobotocore==2.3.1 -aiohttp==3.9.1 +aiohttp==3.9.5 aioitertools==0.11.0 aiosignal==1.3.1 -attrs==23.1.0 +attrs==23.2.0 botocore==1.24.21 -certifi==2023.11.17 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -elastic-transport==8.11.0 -elasticsearch==8.11.1 +coverage[toml]==7.5.4 +elastic-transport==8.13.1 +elasticsearch==8.14.0 +events==0.5 frozenlist==1.4.1 gevent==22.10.2 greenlet==3.0.3 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 -multidict==6.0.4 -opensearch-py==2.4.2 +multidict==6.0.5 +opensearch-py==2.6.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 +packaging==24.1 +pluggy==1.5.0 pynamodb==5.5.1 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 -requests==2.31.0 +python-dateutil==2.9.0.post0 +requests==2.32.3 six==1.16.0 sortedcontainers==2.4.0 -urllib3==1.26.18 +urllib3==1.26.19 wrapt==1.16.0 yarl==1.9.4 zope-event==5.0 -zope-interface==6.1 +zope-interface==6.4.post2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/1dad7a9.txt b/.riot/requirements/1ab2cd6.txt similarity index 52% rename from .riot/requirements/1dad7a9.txt rename to .riot/requirements/1ab2cd6.txt index 567bdd2e66b..88426f95126 100644 --- a/.riot/requirements/1dad7a9.txt +++ b/.riot/requirements/1ab2cd6.txt @@ -2,29 +2,29 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1dad7a9.in +# pip-compile --no-annotate .riot/requirements/1ab2cd6.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiohttp-jinja2==1.6 aiosignal==1.3.1 -attrs==23.1.0 -coverage[toml]==7.3.4 +attrs==23.2.0 +coverage[toml]==7.5.4 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 +jinja2==3.1.4 +markupsafe==2.1.5 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 yarl==1.9.4 diff --git a/.riot/requirements/1ab601c.txt b/.riot/requirements/1ab601c.txt deleted file mode 100644 index b5b525fa8cc..00000000000 --- a/.riot/requirements/1ab601c.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1ab601c.in -# -attrs==23.1.0 -backports-zoneinfo==0.2.1 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -psycopg==3.0.18 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/1f22840.txt b/.riot/requirements/1ac55e4.txt similarity index 52% rename from .riot/requirements/1f22840.txt rename to .riot/requirements/1ac55e4.txt index 12c29d8f402..5e5434235c0 100644 --- a/.riot/requirements/1f22840.txt +++ b/.riot/requirements/1ac55e4.txt @@ -2,70 +2,70 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1f22840.in +# pip-compile --no-annotate .riot/requirements/1ac55e4.in # -annotated-types==0.6.0 -attrs==23.1.0 -aws-sam-translator==1.82.0 -aws-xray-sdk==2.12.1 +annotated-types==0.7.0 +attrs==23.2.0 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto==2.49.0 -boto3==1.34.6 -botocore==1.34.6 -certifi==2023.11.17 +boto3==1.34.140 +botocore==1.34.140 +certifi==2024.7.4 cffi==1.16.0 cfn-lint==0.53.1 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -cryptography==41.0.7 -docker==7.0.0 +coverage[toml]==7.5.4 +cryptography==42.0.8 +docker==7.1.0 ecdsa==0.14.1 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 idna==2.10 iniconfig==2.0.0 jinja2==2.11.3 jmespath==1.0.1 -jsondiff==2.0.0 +jsondiff==2.1.1 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==3.2.0 junit-xml==1.9 markupsafe==1.1.1 mock==5.1.0 -more-itertools==10.1.0 +more-itertools==10.3.0 moto==1.3.16 networkx==2.8.8 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.5.2 -pydantic-core==2.14.5 +packaging==24.1 +pluggy==1.5.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.2 +pydantic-core==2.20.1 pynamodb==5.5.1 pyrsistent==0.20.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 -pytz==2023.3.post1 +pytz==2024.1 pyyaml==6.0.1 -requests==2.31.0 -responses==0.24.1 +requests==2.32.3 +responses==0.25.3 rsa==4.9 -s3transfer==0.10.0 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==2.0.7 +typing-extensions==4.12.2 +urllib3==2.2.2 werkzeug==2.1.2 wrapt==1.16.0 xmltodict==0.13.0 -zipp==3.17.0 +zipp==3.19.2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/cf557a6.txt b/.riot/requirements/1ace55b.txt similarity index 57% rename from .riot/requirements/cf557a6.txt rename to .riot/requirements/1ace55b.txt index 49f58dc8b49..1b79dbd68fe 100644 --- a/.riot/requirements/cf557a6.txt +++ b/.riot/requirements/1ace55b.txt @@ -2,49 +2,50 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/cf557a6.in +# pip-compile --no-annotate .riot/requirements/1ace55b.in # aiobotocore==2.3.1 -aiohttp==3.9.1 +aiohttp==3.9.5 aioitertools==0.11.0 aiosignal==1.3.1 async-timeout==4.0.3 -attrs==23.1.0 +attrs==23.2.0 botocore==1.24.21 -certifi==2023.11.17 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -elastic-transport==8.11.0 -elasticsearch==8.11.1 -exceptiongroup==1.2.0 +coverage[toml]==7.5.4 +elastic-transport==8.13.1 +elasticsearch==8.14.0 +events==0.5 +exceptiongroup==1.2.1 frozenlist==1.4.1 gevent==21.12.0 greenlet==1.1.3.post0 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 -multidict==6.0.4 -opensearch-py==2.4.2 +multidict==6.0.5 +opensearch-py==2.6.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 +packaging==24.1 +pluggy==1.5.0 pynamodb==5.5.1 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 -requests==2.31.0 +python-dateutil==2.9.0.post0 +requests==2.32.3 six==1.16.0 sortedcontainers==2.4.0 tomli==2.0.1 -urllib3==1.26.18 +urllib3==1.26.19 wrapt==1.16.0 yarl==1.9.4 zope-event==5.0 -zope-interface==6.1 +zope-interface==6.4.post2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/ed2f19c.txt b/.riot/requirements/1ae24f1.txt similarity index 51% rename from .riot/requirements/ed2f19c.txt rename to .riot/requirements/1ae24f1.txt index aebb1471660..526183f1265 100644 --- a/.riot/requirements/ed2f19c.txt +++ b/.riot/requirements/1ae24f1.txt @@ -2,22 +2,21 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/ed2f19c.in +# pip-compile --no-annotate .riot/requirements/1ae24f1.in # attrs==23.2.0 -coverage[toml]==7.4.2 -googleapis-common-protos==1.62.0 -grpcio==1.59.3 +coverage[toml]==7.5.4 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -protobuf==4.25.3 -pytest==8.0.1 +packaging==24.1 +pluggy==1.5.0 +psycopg==3.2.1 +pytest==8.2.2 pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 +typing-extensions==4.12.2 diff --git a/.riot/requirements/1ae2797.txt b/.riot/requirements/1ae2797.txt new file mode 100644 index 00000000000..b1170153af9 --- /dev/null +++ b/.riot/requirements/1ae2797.txt @@ -0,0 +1,35 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1ae2797.in +# +aiohttp==3.9.5 +aiohttp-jinja2==1.5.1 +aiosignal==1.3.1 +async-timeout==4.0.3 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +frozenlist==1.4.1 +hypothesis==6.45.0 +idna==3.7 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +jinja2==3.1.4 +markupsafe==2.1.5 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-aiohttp==1.0.5 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +yarl==1.9.4 +zipp==3.19.2 diff --git a/.riot/requirements/1af884e.txt b/.riot/requirements/1af884e.txt deleted file mode 100644 index 80303446854..00000000000 --- a/.riot/requirements/1af884e.txt +++ /dev/null @@ -1,64 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1af884e.in -# -aiohttp==3.9.1 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -contourpy==1.2.0 -coverage[toml]==7.3.4 -cycler==0.12.1 -et-xmlfile==1.1.0 -exceptiongroup==1.2.0 -fonttools==4.47.0 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -importlib-resources==6.1.1 -iniconfig==2.0.0 -joblib==1.3.2 -kiwisolver==1.4.5 -matplotlib==3.8.2 -mock==5.1.0 -multidict==6.0.4 -numpy==1.26.2 -openai[datalib,embeddings]==0.27.2 -openpyxl==3.1.2 -opentracing==2.4.0 -packaging==23.2 -pandas==2.1.4 -pandas-stubs==2.1.4.231218 -pillow==10.1.0 -plotly==5.18.0 -pluggy==1.3.0 -pyparsing==3.1.1 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-dateutil==2.8.2 -pytz==2023.3.post1 -pyyaml==6.0.1 -requests==2.31.0 -scikit-learn==1.3.2 -scipy==1.11.4 -six==1.16.0 -sortedcontainers==2.4.0 -tenacity==8.2.3 -threadpoolctl==3.2.0 -tomli==2.0.1 -tqdm==4.66.1 -types-pytz==2023.3.1.1 -tzdata==2023.3 -urllib3==1.26.18 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.17.0 diff --git a/.riot/requirements/1b10316.txt b/.riot/requirements/1b10316.txt deleted file mode 100644 index 7c72653a093..00000000000 --- a/.riot/requirements/1b10316.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1b10316.in -# -aiohttp==3.9.1 -aiohttp-jinja2==1.6 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 -mock==5.1.0 -multidict==6.0.4 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -yarl==1.9.4 -zipp==3.17.0 diff --git a/.riot/requirements/1b3fcdf.txt b/.riot/requirements/1b3fcdf.txt index c48bb53fd34..a5b826ed02f 100644 --- a/.riot/requirements/1b3fcdf.txt +++ b/.riot/requirements/1b3fcdf.txt @@ -5,21 +5,21 @@ # pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1b3fcdf.in # annotated-types==0.5.0 -attrs==23.1.0 +attrs==23.2.0 aws-sam-translator==1.82.0 -aws-xray-sdk==2.12.1 +aws-xray-sdk==2.14.0 boto==2.49.0 boto3==1.33.13 botocore==1.33.13 -certifi==2023.11.17 +certifi==2024.6.2 cffi==1.15.1 cfn-lint==0.53.1 charset-normalizer==3.3.2 coverage[toml]==7.2.7 -cryptography==41.0.7 +cryptography==42.0.8 docker==6.1.3 ecdsa==0.14.1 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 idna==2.10 importlib-metadata==6.7.0 @@ -28,7 +28,7 @@ jinja2==2.11.3 jmespath==1.0.1 jsondiff==2.0.0 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==3.2.0 junit-xml==1.9 markupsafe==1.1.1 @@ -37,21 +37,21 @@ more-itertools==9.1.0 moto==1.3.16 networkx==2.6.3 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 pyasn1==0.5.1 pycparser==2.21 -pydantic==2.5.2 -pydantic-core==2.14.5 +pydantic==2.5.3 +pydantic-core==2.14.6 pynamodb==5.5.1 pyrsistent==0.19.3 -pytest==7.4.3 +pytest==7.4.4 pytest-cov==4.1.0 pytest-mock==3.11.1 pytest-randomly==3.12.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 -pytz==2023.3.post1 +pytz==2024.1 pyyaml==6.0.1 requests==2.31.0 responses==0.23.3 @@ -63,7 +63,7 @@ sshpubkeys==3.3.1 tomli==2.0.1 types-pyyaml==6.0.12.12 typing-extensions==4.7.1 -urllib3==1.26.18 +urllib3==1.26.19 websocket-client==1.6.1 werkzeug==2.1.2 wrapt==1.16.0 diff --git a/.riot/requirements/1ba505f.txt b/.riot/requirements/1ba505f.txt deleted file mode 100644 index fbbc97b48bf..00000000000 --- a/.riot/requirements/1ba505f.txt +++ /dev/null @@ -1,53 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1ba505f.in -# -annotated-types==0.6.0 -anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.3.4 -distro==1.8.0 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==1.0.2 -httpx==0.26.0 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.4 -numpy==1.24.4 -openai[datalib,embeddings]==1.1.1 -opentracing==2.4.0 -packaging==23.2 -pandas==2.0.3 -pandas-stubs==2.0.3.230814 -pillow==10.1.0 -pluggy==1.3.0 -pydantic==2.5.2 -pydantic-core==2.14.5 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-dateutil==2.8.2 -pytz==2023.3.post1 -pyyaml==6.0.1 -six==1.16.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -tqdm==4.66.1 -types-pytz==2023.3.1.1 -typing-extensions==4.9.0 -tzdata==2023.3 -urllib3==1.26.18 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.17.0 diff --git a/.riot/requirements/1bbf463.txt b/.riot/requirements/1bbf463.txt new file mode 100644 index 00000000000..bb060d1914a --- /dev/null +++ b/.riot/requirements/1bbf463.txt @@ -0,0 +1,23 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1bbf463.in +# +attrs==23.2.0 +coverage[toml]==7.5.4 +googleapis-common-protos==1.63.2 +grpcio==1.59.3 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +protobuf==5.27.2 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/1d6adbd.txt b/.riot/requirements/1bceb88.txt similarity index 54% rename from .riot/requirements/1d6adbd.txt rename to .riot/requirements/1bceb88.txt index 35c5028e755..eedbfcfcdd7 100644 --- a/.riot/requirements/1d6adbd.txt +++ b/.riot/requirements/1bceb88.txt @@ -2,52 +2,53 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1d6adbd.in +# pip-compile --no-annotate .riot/requirements/1bceb88.in # aiobotocore==2.3.1 -aiohttp==3.9.3 +aiohttp==3.9.5 aioitertools==0.11.0 aiosignal==1.3.1 async-timeout==4.0.3 attrs==23.2.0 botocore==1.24.21 -certifi==2024.2.2 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.4.3 -elastic-transport==8.12.0 -elasticsearch==8.12.1 -exceptiongroup==1.2.0 +coverage[toml]==7.5.4 +elastic-transport==8.13.1 +elasticsearch==8.14.0 +events==0.5 +exceptiongroup==1.2.1 frozenlist==1.4.1 gevent==20.12.1 greenlet==1.0.0 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.1 +idna==3.7 +importlib-metadata==8.0.0 iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 multidict==6.0.5 -opensearch-py==2.4.2 +opensearch-py==2.6.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -pynamodb==6.0.0 -pytest==8.0.2 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pynamodb==5.5.1 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 -requests==2.31.0 +python-dateutil==2.9.0.post0 +requests==2.32.3 six==1.16.0 sortedcontainers==2.4.0 tomli==2.0.1 -typing-extensions==4.10.0 -urllib3==1.26.18 +typing-extensions==4.12.2 +urllib3==1.26.19 wrapt==1.16.0 yarl==1.9.4 -zipp==3.17.0 +zipp==3.19.2 zope-event==5.0 -zope-interface==6.2 +zope-interface==6.4.post2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/46621c4.txt b/.riot/requirements/1bcefe4.txt similarity index 81% rename from .riot/requirements/46621c4.txt rename to .riot/requirements/1bcefe4.txt index 915ebc7e2e5..8354b9e0cef 100644 --- a/.riot/requirements/46621c4.txt +++ b/.riot/requirements/1bcefe4.txt @@ -2,19 +2,19 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/46621c4.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1bcefe4.in # attrs==23.2.0 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -googleapis-common-protos==1.62.0 +exceptiongroup==1.2.1 +googleapis-common-protos==1.63.2 grpcio==1.59.3 hypothesis==6.45.0 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 protobuf==4.24.4 pytest==7.4.4 diff --git a/.riot/requirements/76ab3c5.txt b/.riot/requirements/1c1da8c.txt similarity index 51% rename from .riot/requirements/76ab3c5.txt rename to .riot/requirements/1c1da8c.txt index 50d201346cb..090dda34995 100644 --- a/.riot/requirements/76ab3c5.txt +++ b/.riot/requirements/1c1da8c.txt @@ -2,24 +2,24 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/76ab3c5.in +# pip-compile --no-annotate .riot/requirements/1c1da8c.in # -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 hypothesis==6.45.0 -importlib-metadata==7.0.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 redis==3.5.3 redis-py-cluster==2.1.3 sortedcontainers==2.4.0 tomli==2.0.1 -zipp==3.17.0 +zipp==3.19.2 diff --git a/.riot/requirements/1c9b9ba.txt b/.riot/requirements/1c9b9ba.txt deleted file mode 100644 index 9e5e4bff7a0..00000000000 --- a/.riot/requirements/1c9b9ba.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1c9b9ba.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -psycopg==3.1.16 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.9.0 -zipp==3.17.0 diff --git a/.riot/requirements/1cd1d4a.txt b/.riot/requirements/1cd1d4a.txt index e8115eb8475..a5135c9af64 100644 --- a/.riot/requirements/1cd1d4a.txt +++ b/.riot/requirements/1cd1d4a.txt @@ -4,68 +4,68 @@ # # pip-compile --no-annotate .riot/requirements/1cd1d4a.in # -annotated-types==0.6.0 -attrs==23.1.0 -aws-sam-translator==1.82.0 -aws-xray-sdk==2.12.1 +annotated-types==0.7.0 +attrs==23.2.0 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto==2.49.0 -boto3==1.34.6 -botocore==1.34.6 -certifi==2023.11.17 +boto3==1.34.139 +botocore==1.34.139 +certifi==2024.6.2 cffi==1.16.0 cfn-lint==0.53.1 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -cryptography==41.0.7 -docker==7.0.0 +coverage[toml]==7.5.4 +cryptography==42.0.8 +docker==7.1.0 ecdsa==0.14.1 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 idna==2.10 iniconfig==2.0.0 jinja2==2.11.3 jmespath==1.0.1 -jsondiff==2.0.0 +jsondiff==2.1.1 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==3.2.0 junit-xml==1.9 markupsafe==1.1.1 mock==5.1.0 -more-itertools==10.1.0 +more-itertools==10.3.0 moto==1.3.16 networkx==2.8.8 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.5.2 -pydantic-core==2.14.5 +packaging==24.1 +pluggy==1.5.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.0 +pydantic-core==2.20.0 pynamodb==5.5.1 pyrsistent==0.20.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 -pytz==2023.3.post1 +pytz==2024.1 pyyaml==6.0.1 -requests==2.31.0 -responses==0.24.1 +requests==2.32.3 +responses==0.25.3 rsa==4.9 -s3transfer==0.10.0 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==2.0.7 +typing-extensions==4.12.2 +urllib3==2.2.2 werkzeug==2.1.2 wrapt==1.16.0 xmltodict==0.13.0 -zipp==3.17.0 +zipp==3.19.2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/12e59f1.txt b/.riot/requirements/1cd7351.txt similarity index 52% rename from .riot/requirements/12e59f1.txt rename to .riot/requirements/1cd7351.txt index d811241b42c..104f37339fa 100644 --- a/.riot/requirements/12e59f1.txt +++ b/.riot/requirements/1cd7351.txt @@ -2,29 +2,29 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/12e59f1.in +# pip-compile --no-annotate .riot/requirements/1cd7351.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiohttp-jinja2==1.6 aiosignal==1.3.1 -attrs==23.1.0 -coverage[toml]==7.3.4 +attrs==23.2.0 +coverage[toml]==7.5.4 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 +jinja2==3.1.4 +markupsafe==2.1.5 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 yarl==1.9.4 diff --git a/.riot/requirements/1cde730.txt b/.riot/requirements/1cde730.txt deleted file mode 100644 index 6817c6ce638..00000000000 --- a/.riot/requirements/1cde730.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1cde730.in -# -async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -redis==4.6.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/1d189a7.txt b/.riot/requirements/1d189a7.txt deleted file mode 100644 index 9f9f812e2ef..00000000000 --- a/.riot/requirements/1d189a7.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1d189a7.in -# -attrs==23.1.0 -backports-zoneinfo==0.2.1 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -psycopg==3.1.16 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.9.0 -zipp==3.17.0 diff --git a/.riot/requirements/1d32f58.txt b/.riot/requirements/1d32f58.txt new file mode 100644 index 00000000000..2e623af931d --- /dev/null +++ b/.riot/requirements/1d32f58.txt @@ -0,0 +1,26 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1d32f58.in +# +async-timeout==4.0.3 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +hypothesis==6.45.0 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +redis==4.6.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +zipp==3.19.2 diff --git a/.riot/requirements/1d8a1bf.txt b/.riot/requirements/1d8a1bf.txt new file mode 100644 index 00000000000..3f9c2ae4767 --- /dev/null +++ b/.riot/requirements/1d8a1bf.txt @@ -0,0 +1,25 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1d8a1bf.in +# +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +googleapis-common-protos==1.63.2 +grpcio==1.59.3 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +protobuf==5.27.2 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.0.1 diff --git a/.riot/requirements/9ad019f.txt b/.riot/requirements/1db5311.txt similarity index 69% rename from .riot/requirements/9ad019f.txt rename to .riot/requirements/1db5311.txt index f0c802e7ba1..8f59080503b 100644 --- a/.riot/requirements/9ad019f.txt +++ b/.riot/requirements/1db5311.txt @@ -2,35 +2,35 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/9ad019f.in +# pip-compile --no-annotate .riot/requirements/1db5311.in # annotated-types==0.7.0 -anyio==4.3.0 +anyio==4.4.0 attrs==23.2.0 -certifi==2024.2.2 -coverage[toml]==7.5.1 +certifi==2024.7.4 +coverage[toml]==7.6.0 distro==1.9.0 -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 hypothesis==6.45.0 idna==3.7 -importlib-metadata==7.1.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 numpy==1.24.4 openai[datalib,embeddings]==1.30.1 opentracing==2.4.0 -packaging==24.0 +packaging==24.1 pandas==2.0.3 pandas-stubs==2.0.3.230814 -pillow==10.3.0 +pillow==9.5.0 pluggy==1.5.0 -pydantic==2.7.1 -pydantic-core==2.18.2 -pytest==8.2.1 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.2.2 pytest-asyncio==0.21.1 pytest-cov==5.0.0 pytest-mock==3.14.0 @@ -44,10 +44,10 @@ sortedcontainers==2.4.0 tomli==2.0.1 tqdm==4.66.4 types-pytz==2024.1.0.20240417 -typing-extensions==4.11.0 +typing-extensions==4.12.2 tzdata==2024.1 -urllib3==1.26.18 +urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 -zipp==3.18.2 +zipp==3.19.2 diff --git a/.riot/requirements/1e250cd.txt b/.riot/requirements/1e250cd.txt deleted file mode 100644 index 592524c2f56..00000000000 --- a/.riot/requirements/1e250cd.txt +++ /dev/null @@ -1,62 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1e250cd.in -# -aiohttp==3.8.6 -aiosignal==1.3.1 -async-timeout==4.0.3 -asynctest==0.13.0 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -cycler==0.11.0 -et-xmlfile==1.1.0 -exceptiongroup==1.2.0 -fonttools==4.38.0 -frozenlist==1.3.3 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -joblib==1.3.2 -kiwisolver==1.4.5 -matplotlib==3.5.3 -mock==5.1.0 -multidict==6.0.4 -numpy==1.21.6 -openai[datalib,embeddings]==0.27.2 -openpyxl==3.1.2 -opentracing==2.4.0 -packaging==23.2 -pandas==1.3.5 -pandas-stubs==1.2.0.62 -pillow==9.5.0 -plotly==5.18.0 -pluggy==1.2.0 -pyparsing==3.1.1 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.8.2 -pytz==2023.3.post1 -pyyaml==6.0.1 -requests==2.31.0 -scikit-learn==1.0.2 -scipy==1.7.3 -six==1.16.0 -sortedcontainers==2.4.0 -tenacity==8.2.3 -threadpoolctl==3.1.0 -tomli==2.0.1 -tqdm==4.66.1 -typing-extensions==4.7.1 -urllib3==1.26.18 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/169042d.txt b/.riot/requirements/1ec15f5.txt similarity index 65% rename from .riot/requirements/169042d.txt rename to .riot/requirements/1ec15f5.txt index 6fd565b093f..d40fd1e4cca 100644 --- a/.riot/requirements/169042d.txt +++ b/.riot/requirements/1ec15f5.txt @@ -2,36 +2,36 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/169042d.in +# pip-compile --no-annotate .riot/requirements/1ec15f5.in # annotated-types==0.7.0 -anyio==4.3.0 +anyio==4.4.0 attrs==23.2.0 -certifi==2024.2.2 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.5.1 +coverage[toml]==7.6.0 distro==1.9.0 -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 hypothesis==6.45.0 idna==3.7 -importlib-metadata==7.1.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 -numpy==1.26.4 +numpy==2.0.0 openai[datalib]==1.30.1 opentracing==2.4.0 -packaging==24.0 +packaging==24.1 pandas==2.2.2 -pandas-stubs==2.2.2.240514 -pillow==10.3.0 +pandas-stubs==2.2.2.240603 +pillow==10.1.0 pluggy==1.5.0 -pydantic==2.7.1 -pydantic-core==2.18.2 -pytest==8.2.1 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.2.2 pytest-asyncio==0.21.1 pytest-cov==5.0.0 pytest-mock==3.14.0 @@ -40,7 +40,7 @@ python-dateutil==2.9.0.post0 pytz==2024.1 pyyaml==6.0.1 regex==2024.5.15 -requests==2.32.0 +requests==2.32.3 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 @@ -48,10 +48,10 @@ tiktoken==0.7.0 tomli==2.0.1 tqdm==4.66.4 types-pytz==2024.1.0.20240417 -typing-extensions==4.11.0 +typing-extensions==4.12.2 tzdata==2024.1 -urllib3==1.26.18 +urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 -zipp==3.18.2 +zipp==3.19.2 diff --git a/.riot/requirements/1642d4d.txt b/.riot/requirements/1ee49b9.txt similarity index 69% rename from .riot/requirements/1642d4d.txt rename to .riot/requirements/1ee49b9.txt index 82c806406a6..9e04d313a33 100644 --- a/.riot/requirements/1642d4d.txt +++ b/.riot/requirements/1ee49b9.txt @@ -2,14 +2,14 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1642d4d.in +# pip-compile --no-annotate .riot/requirements/1ee49b9.in # annotated-types==0.7.0 -anyio==4.3.0 +anyio==4.4.0 attrs==23.2.0 -certifi==2024.2.2 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.5.1 +coverage[toml]==7.6.0 distro==1.9.0 h11==0.14.0 httpcore==1.0.5 @@ -19,17 +19,17 @@ idna==3.7 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 -numpy==1.26.4 +numpy==2.0.0 openai[datalib]==1.30.1 opentracing==2.4.0 -packaging==24.0 +packaging==24.1 pandas==2.2.2 -pandas-stubs==2.2.2.240514 -pillow==10.3.0 +pandas-stubs==2.2.2.240603 +pillow==10.1.0 pluggy==1.5.0 -pydantic==2.7.1 -pydantic-core==2.18.2 -pytest==8.2.1 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.2.2 pytest-asyncio==0.21.1 pytest-cov==5.0.0 pytest-mock==3.14.0 @@ -38,16 +38,16 @@ python-dateutil==2.9.0.post0 pytz==2024.1 pyyaml==6.0.1 regex==2024.5.15 -requests==2.32.0 +requests==2.32.3 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 tiktoken==0.7.0 tqdm==4.66.4 types-pytz==2024.1.0.20240417 -typing-extensions==4.11.0 +typing-extensions==4.12.2 tzdata==2024.1 -urllib3==1.26.18 +urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 diff --git a/.riot/requirements/3c9fad3.txt b/.riot/requirements/1ef7371.txt similarity index 51% rename from .riot/requirements/3c9fad3.txt rename to .riot/requirements/1ef7371.txt index bc1215b07ca..c94f76cedcb 100644 --- a/.riot/requirements/3c9fad3.txt +++ b/.riot/requirements/1ef7371.txt @@ -2,24 +2,24 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/3c9fad3.in +# pip-compile --no-annotate .riot/requirements/1ef7371.in # -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 hypothesis==6.45.0 -importlib-metadata==7.0.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 redis==3.0.1 redis-py-cluster==2.0.0 sortedcontainers==2.4.0 tomli==2.0.1 -zipp==3.17.0 +zipp==3.19.2 diff --git a/.riot/requirements/1ef773e.txt b/.riot/requirements/1ef773e.txt new file mode 100644 index 00000000000..79f06d87c9a --- /dev/null +++ b/.riot/requirements/1ef773e.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1ef773e.in +# +attrs==23.2.0 +coverage[toml]==7.5.4 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pyodbc==5.1.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/1efa336.txt b/.riot/requirements/1efa336.txt deleted file mode 100644 index a4bda1ba226..00000000000 --- a/.riot/requirements/1efa336.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1efa336.in -# -anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -h11==0.12.0 -httpcore==0.14.7 -httpx==0.22.0 -hypothesis==6.45.0 -idna==3.6 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -rfc3986[idna2008]==1.5.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/1f08b51.txt b/.riot/requirements/1f08b51.txt new file mode 100644 index 00000000000..5aedc632826 --- /dev/null +++ b/.riot/requirements/1f08b51.txt @@ -0,0 +1,30 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1f08b51.in +# +aiohttp==3.9.5 +aiohttp-jinja2==1.6 +aiosignal==1.3.1 +attrs==23.2.0 +coverage[toml]==7.5.4 +frozenlist==1.4.1 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +jinja2==3.1.4 +markupsafe==2.1.5 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-aiohttp==1.0.5 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +yarl==1.9.4 diff --git a/.riot/requirements/1f238e9.txt b/.riot/requirements/1f238e9.txt new file mode 100644 index 00000000000..f07e9d431d9 --- /dev/null +++ b/.riot/requirements/1f238e9.txt @@ -0,0 +1,28 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1f238e9.in +# +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +googleapis-common-protos==1.63.2 +grpcio==1.34.1 +hypothesis==6.45.0 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +protobuf==5.27.2 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +six==1.16.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +zipp==3.19.2 diff --git a/.riot/requirements/1f23a69.txt b/.riot/requirements/1f23a69.txt new file mode 100644 index 00000000000..75fdcaab1dc --- /dev/null +++ b/.riot/requirements/1f23a69.txt @@ -0,0 +1,29 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1f23a69.in +# +attrs==23.2.0 +blinker==1.8.2 +click==8.1.7 +coverage[toml]==7.5.4 +flask==3.0.3 +flask-caching==1.10.1 +hypothesis==6.45.0 +iniconfig==2.0.0 +itsdangerous==2.2.0 +jinja2==3.1.4 +markupsafe==2.1.5 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +python-memcached==1.62 +redis==5.0.7 +sortedcontainers==2.4.0 +werkzeug==3.0.3 diff --git a/.riot/requirements/1f26e81.txt b/.riot/requirements/1f26e81.txt deleted file mode 100644 index ac8a7b98b0a..00000000000 --- a/.riot/requirements/1f26e81.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1f26e81.in -# -attrs==23.1.0 -backports-zoneinfo==0.2.1 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -psycopg==3.1.16 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1f35619.txt b/.riot/requirements/1f35619.txt new file mode 100644 index 00000000000..e48ac8ccd52 --- /dev/null +++ b/.riot/requirements/1f35619.txt @@ -0,0 +1,46 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1f35619.in +# +attrs==23.2.0 +certifi==2024.6.2 +charset-normalizer==2.1.1 +click==8.1.7 +coverage[toml]==7.5.4 +deprecated==1.2.14 +flask==2.1.3 +gevent==24.2.1 +greenlet==3.0.3 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +itsdangerous==2.2.0 +jinja2==3.1.4 +markupsafe==2.0.1 +mock==5.1.0 +opentelemetry-api==1.4.1 +opentelemetry-instrumentation==0.32b0 +opentelemetry-instrumentation-flask==0.32b0 +opentelemetry-instrumentation-wsgi==0.32b0 +opentelemetry-semantic-conventions==0.32b0 +opentelemetry-util-http==0.32b0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +requests==2.28.1 +sortedcontainers==2.4.0 +urllib3==1.26.19 +werkzeug==2.1.2 +wrapt==1.16.0 +zope-event==5.0 +zope-interface==6.4.post2 + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/.riot/requirements/b416620.txt b/.riot/requirements/1f8ac1c.txt similarity index 91% rename from .riot/requirements/b416620.txt rename to .riot/requirements/1f8ac1c.txt index 5cd01b1b2b8..e3042b85cd7 100644 --- a/.riot/requirements/b416620.txt +++ b/.riot/requirements/1f8ac1c.txt @@ -2,13 +2,13 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/b416620.in +# pip-compile --no-annotate .riot/requirements/1f8ac1c.in # amqp==5.2.0 attrs==23.2.0 billiard==4.2.0 celery==5.4.0 -certifi==2024.6.2 +certifi==2024.7.4 charset-normalizer==3.3.2 click==8.1.7 click-didyoumean==0.3.1 diff --git a/.riot/requirements/1f8f136.txt b/.riot/requirements/1f8f136.txt new file mode 100644 index 00000000000..c8487dc29ba --- /dev/null +++ b/.riot/requirements/1f8f136.txt @@ -0,0 +1,27 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1f8f136.in +# +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +googleapis-common-protos==1.63.2 +grpcio==1.59.3 +hypothesis==6.45.0 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +protobuf==5.27.2 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +zipp==3.19.2 diff --git a/.riot/requirements/1fab05e.txt b/.riot/requirements/1fab05e.txt new file mode 100644 index 00000000000..ab0155d6835 --- /dev/null +++ b/.riot/requirements/1fab05e.txt @@ -0,0 +1,25 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1fab05e.in +# +attrs==23.2.0 +certifi==2024.6.2 +charset-normalizer==3.3.2 +coverage[toml]==7.5.4 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +requests==2.32.3 +requests-mock==1.12.1 +sortedcontainers==2.4.0 +urllib3==1.26.19 diff --git a/.riot/requirements/8fdfb07.txt b/.riot/requirements/1fda250.txt similarity index 88% rename from .riot/requirements/8fdfb07.txt rename to .riot/requirements/1fda250.txt index b1213c21086..f4959aa1d17 100644 --- a/.riot/requirements/8fdfb07.txt +++ b/.riot/requirements/1fda250.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/8fdfb07.in +# pip-compile --no-annotate .riot/requirements/1fda250.in # ai21==1.3.4 aiohttp==3.9.5 @@ -17,13 +17,13 @@ cohere==4.57 coverage[toml]==7.6.0 dataclasses-json==0.5.14 dnspython==2.6.1 -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 fastavro==1.9.5 filelock==3.15.4 frozenlist==1.4.1 fsspec==2024.6.1 greenlet==3.0.3 -huggingface-hub==0.23.4 +huggingface-hub==0.24.0 hypothesis==6.45.0 idna==3.7 importlib-metadata==6.11.0 @@ -40,7 +40,7 @@ marshmallow==3.21.3 mock==5.1.0 multidict==6.0.5 mypy-extensions==1.0.0 -numexpr==2.10.1 +numexpr==2.8.5 numpy==1.26.4 openai==0.27.8 openapi-schema-pydantic==1.2.4 @@ -51,10 +51,10 @@ pluggy==1.5.0 psutil==6.0.0 pydantic==1.10.17 pytest==8.2.2 -pytest-asyncio==0.21.1 +pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.10.1 python-dateutil==2.9.0.post0 pyyaml==6.0.1 regex==2024.5.15 diff --git a/.riot/requirements/80cba21.txt b/.riot/requirements/1ff2f1b.txt similarity index 52% rename from .riot/requirements/80cba21.txt rename to .riot/requirements/1ff2f1b.txt index b1738e198ac..5cddc8842fe 100644 --- a/.riot/requirements/80cba21.txt +++ b/.riot/requirements/1ff2f1b.txt @@ -2,31 +2,31 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/80cba21.in +# pip-compile --no-annotate .riot/requirements/1ff2f1b.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiohttp-jinja2==1.6 aiosignal==1.3.1 async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 +jinja2==3.1.4 +markupsafe==2.1.5 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 tomli==2.0.1 diff --git a/.riot/requirements/2164da7.txt b/.riot/requirements/2164da7.txt new file mode 100644 index 00000000000..4f5335c4318 --- /dev/null +++ b/.riot/requirements/2164da7.txt @@ -0,0 +1,30 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/2164da7.in +# +attrs==23.2.0 +blinker==1.8.2 +cachelib==0.9.0 +click==8.1.7 +coverage[toml]==7.5.4 +flask==3.0.3 +flask-caching==2.3.0 +hypothesis==6.45.0 +iniconfig==2.0.0 +itsdangerous==2.2.0 +jinja2==3.1.4 +markupsafe==2.1.5 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +python-memcached==1.62 +redis==5.0.7 +sortedcontainers==2.4.0 +werkzeug==3.0.3 diff --git a/.riot/requirements/e0c0926.txt b/.riot/requirements/26ee64c.txt similarity index 90% rename from .riot/requirements/e0c0926.txt rename to .riot/requirements/26ee64c.txt index 08fe0d707f1..6b444a9f73d 100644 --- a/.riot/requirements/e0c0926.txt +++ b/.riot/requirements/26ee64c.txt @@ -2,14 +2,14 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/e0c0926.in +# pip-compile --no-annotate .riot/requirements/26ee64c.in # amqp==5.2.0 attrs==23.2.0 backports-zoneinfo[tzdata]==0.2.1 billiard==4.2.0 celery==5.4.0 -certifi==2024.6.2 +certifi==2024.7.4 charset-normalizer==3.3.2 click==8.1.7 click-didyoumean==0.3.1 @@ -22,7 +22,7 @@ gevent==24.2.1 greenlet==3.0.3 hypothesis==6.45.0 idna==3.7 -importlib-metadata==7.2.1 +importlib-metadata==8.0.0 iniconfig==2.0.0 kombu==5.3.7 mock==5.1.0 diff --git a/.riot/requirements/ee2fdd5.txt b/.riot/requirements/27d8bd1.txt similarity index 56% rename from .riot/requirements/ee2fdd5.txt rename to .riot/requirements/27d8bd1.txt index 16482318105..615eec22a3b 100644 --- a/.riot/requirements/ee2fdd5.txt +++ b/.riot/requirements/27d8bd1.txt @@ -2,20 +2,20 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/ee2fdd5.in +# pip-compile --no-annotate .riot/requirements/27d8bd1.in # -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 redis==3.0.1 redis-py-cluster==2.0.0 diff --git a/.riot/requirements/155e293.txt b/.riot/requirements/285f337.txt similarity index 50% rename from .riot/requirements/155e293.txt rename to .riot/requirements/285f337.txt index 4cce39198c2..f6f1b84c400 100644 --- a/.riot/requirements/155e293.txt +++ b/.riot/requirements/285f337.txt @@ -2,31 +2,31 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/155e293.in +# pip-compile --no-annotate .riot/requirements/285f337.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiosignal==1.3.1 async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 +idna==3.7 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 tomli==2.0.1 yarl==1.9.4 -zipp==3.17.0 +zipp==3.19.2 diff --git a/.riot/requirements/2975509.txt b/.riot/requirements/2975509.txt deleted file mode 100644 index 8d9fa57264d..00000000000 --- a/.riot/requirements/2975509.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/2975509.in -# -aiohttp==3.9.1 -aiohttp-jinja2==1.5.1 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 -mock==5.1.0 -multidict==6.0.4 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -yarl==1.9.4 -zipp==3.17.0 diff --git a/.riot/requirements/29fa506.txt b/.riot/requirements/29fa506.txt new file mode 100644 index 00000000000..f79f9d4d220 --- /dev/null +++ b/.riot/requirements/29fa506.txt @@ -0,0 +1,33 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/29fa506.in +# +anyio==4.4.0 +attrs==23.2.0 +certifi==2024.6.2 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +h11==0.14.0 +httpcore==0.16.3 +httpx==0.23.3 +hypothesis==6.45.0 +idna==3.7 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +rfc3986[idna2008]==1.5.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tomli==2.0.1 +typing-extensions==4.12.2 +zipp==3.19.2 diff --git a/.riot/requirements/2a84086.txt b/.riot/requirements/2a84086.txt deleted file mode 100644 index c852856849c..00000000000 --- a/.riot/requirements/2a84086.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/2a84086.in -# -attrs==23.2.0 -coverage[toml]==7.4.2 -exceptiongroup==1.2.0 -googleapis-common-protos==1.62.0 -grpcio==1.59.3 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -protobuf==4.25.3 -pytest==8.0.1 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/2a8f858.txt b/.riot/requirements/2a8f858.txt deleted file mode 100644 index bdd34a96bef..00000000000 --- a/.riot/requirements/2a8f858.txt +++ /dev/null @@ -1,58 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/2a8f858.in -# -aiohttp==3.9.1 -aiosignal==1.3.1 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -contourpy==1.2.0 -coverage[toml]==7.3.4 -cycler==0.12.1 -et-xmlfile==1.1.0 -fonttools==4.47.0 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.6 -iniconfig==2.0.0 -joblib==1.3.2 -kiwisolver==1.4.5 -matplotlib==3.8.2 -mock==5.1.0 -multidict==6.0.4 -numpy==1.26.2 -openai[datalib,embeddings]==0.27.2 -openpyxl==3.1.2 -opentracing==2.4.0 -packaging==23.2 -pandas==2.1.4 -pandas-stubs==2.1.4.231218 -pillow==10.1.0 -plotly==5.18.0 -pluggy==1.3.0 -pyparsing==3.1.1 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-dateutil==2.8.2 -pytz==2023.3.post1 -pyyaml==6.0.1 -requests==2.31.0 -scikit-learn==1.3.2 -scipy==1.11.4 -six==1.16.0 -sortedcontainers==2.4.0 -tenacity==8.2.3 -threadpoolctl==3.2.0 -tqdm==4.66.1 -types-pytz==2023.3.1.1 -tzdata==2023.3 -urllib3==1.26.18 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 diff --git a/.riot/requirements/2be0986.txt b/.riot/requirements/2be0986.txt new file mode 100644 index 00000000000..d6092055872 --- /dev/null +++ b/.riot/requirements/2be0986.txt @@ -0,0 +1,22 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/2be0986.in +# +attrs==23.2.0 +coverage[toml]==7.5.4 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +psycopg==3.2.1 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +typing-extensions==4.12.2 diff --git a/.riot/requirements/1598e9b.txt b/.riot/requirements/2d10f62.txt similarity index 77% rename from .riot/requirements/1598e9b.txt rename to .riot/requirements/2d10f62.txt index f49f7a642ef..0098e5cfcfd 100644 --- a/.riot/requirements/1598e9b.txt +++ b/.riot/requirements/2d10f62.txt @@ -2,27 +2,27 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1598e9b.in +# pip-compile --no-annotate .riot/requirements/2d10f62.in # -ai21==2.9.1 +ai21==2.9.2 ai21-tokenizer==0.11.2 aiohttp==3.9.5 aiosignal==1.3.1 annotated-types==0.7.0 -anthropic==0.31.0 +anthropic==0.31.2 anyio==4.4.0 async-timeout==4.0.3 attrs==23.2.0 -boto3==1.34.143 -botocore==1.34.143 +boto3==1.34.51 +botocore==1.34.51 certifi==2024.7.4 charset-normalizer==3.3.2 -cohere==5.5.8 +cohere==5.6.1 coverage[toml]==7.6.0 dataclasses-json==0.6.7 defusedxml==0.7.1 distro==1.9.0 -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 fastavro==1.9.5 filelock==3.15.4 frozenlist==1.4.1 @@ -32,7 +32,7 @@ h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 httpx-sse==0.4.0 -huggingface-hub==0.23.4 +huggingface-hub==0.24.0 hypothesis==6.45.0 idna==3.7 iniconfig==2.0.0 @@ -46,30 +46,31 @@ langchain-aws==0.1.6 langchain-cohere==0.1.8 langchain-core==0.2.0 langchain-openai==0.1.7 -langchain-pinecone==0.1.1 +langchain-pinecone==0.1.2 langchain-text-splitters==0.2.1 -langsmith==0.1.85 +langsmith==0.1.92 marshmallow==3.21.3 mock==5.1.0 multidict==6.0.5 mypy-extensions==1.0.0 -numexpr==2.10.1 +numexpr==2.8.5 numpy==1.26.4 -openai==1.35.13 +openai==1.35.15 opentracing==2.4.0 orjson==3.10.6 packaging==23.2 parameterized==0.9.0 -pinecone-client==3.2.2 +pinecone-client==4.1.2 +pinecone-plugin-interface==0.0.7 pluggy==1.5.0 psutil==6.0.0 pydantic==2.8.2 pydantic-core==2.20.1 pytest==8.2.2 -pytest-asyncio==0.21.1 +pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.10.1 python-dateutil==2.9.0.post0 pyyaml==6.0.1 regex==2024.5.15 @@ -85,10 +86,10 @@ tiktoken==0.7.0 tokenizers==0.19.1 tomli==2.0.1 tqdm==4.66.4 -types-requests==2.32.0.20240622 +types-requests==2.32.0.20240712 typing-extensions==4.12.2 typing-inspect==0.9.0 -urllib3==2.2.2 +urllib3==2.0.7 vcrpy==6.0.1 wrapt==1.16.0 yarl==1.9.4 diff --git a/.riot/requirements/15d4403.txt b/.riot/requirements/2f7da3e.txt similarity index 50% rename from .riot/requirements/15d4403.txt rename to .riot/requirements/2f7da3e.txt index 858a6938fa4..510729d88af 100644 --- a/.riot/requirements/15d4403.txt +++ b/.riot/requirements/2f7da3e.txt @@ -2,91 +2,86 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/15d4403.in +# pip-compile --no-annotate .riot/requirements/2f7da3e.in # -annotated-types==0.6.0 +annotated-types==0.7.0 attrs==23.2.0 -aws-sam-translator==1.85.0 -aws-xray-sdk==2.12.1 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto3==1.34.49 botocore==1.34.49 -certifi==2024.2.2 +certifi==2024.7.4 cffi==1.16.0 -cfn-lint==0.85.2 +cfn-lint==1.7.0 charset-normalizer==3.3.2 -coverage[toml]==7.4.3 -cryptography==42.0.5 -docker==7.0.0 -ecdsa==0.18.0 -exceptiongroup==1.2.0 +coverage[toml]==7.6.0 +cryptography==42.0.8 +docker==7.1.0 +ecdsa==0.19.0 +exceptiongroup==1.2.2 graphql-core==3.2.3 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.1 -importlib-resources==6.1.1 +idna==3.7 +importlib-metadata==8.0.0 +importlib-resources==6.4.0 iniconfig==2.0.0 -jinja2==3.1.3 +jinja2==3.1.4 jmespath==1.0.1 -jschema-to-python==1.2.3 -jsondiff==2.0.0 +jsondiff==2.1.2 jsonpatch==1.33 -jsonpickle==3.0.3 -jsonpointer==2.4 -jsonschema==4.21.1 -jsonschema-path==0.3.2 +jsonpointer==3.0.0 +jsonschema==4.23.0 +jsonschema-path==0.3.3 jsonschema-specifications==2023.12.1 -junit-xml==1.9 lazy-object-proxy==1.10.0 markupsafe==2.1.5 mock==5.1.0 moto[all]==4.2.14 mpmath==1.3.0 multidict==6.0.5 -multipart==0.2.4 +multipart==0.2.5 networkx==3.1 openapi-schema-validator==0.6.2 openapi-spec-validator==0.7.1 opentracing==2.4.0 -packaging==23.2 +packaging==24.1 pathable==0.4.3 -pbr==6.0.0 pkgutil-resolve-name==1.3.10 -pluggy==1.4.0 +pluggy==1.5.0 py-partiql-parser==0.5.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.6.2 -pydantic-core==2.16.3 -pyparsing==3.1.1 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.2 +pydantic-core==2.20.1 +pyparsing==3.1.2 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 pyyaml==6.0.1 -referencing==0.31.1 -regex==2023.12.25 -requests==2.31.0 -responses==0.25.0 +referencing==0.35.1 +regex==2024.5.15 +requests==2.32.3 +responses==0.25.3 rfc3339-validator==0.1.4 -rpds-py==0.18.0 +rpds-py==0.19.0 rsa==4.9 -s3transfer==0.10.0 -sarif-om==1.0.4 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 -sympy==1.12 +sympy==1.13.0 tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==1.26.18 +typing-extensions==4.12.2 +urllib3==1.26.19 vcrpy==6.0.1 -werkzeug==3.0.1 +werkzeug==3.0.3 wrapt==1.16.0 xmltodict==0.13.0 yarl==1.9.4 -zipp==3.17.0 +zipp==3.19.2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/30b2227.txt b/.riot/requirements/30b2227.txt new file mode 100644 index 00000000000..11938ffc708 --- /dev/null +++ b/.riot/requirements/30b2227.txt @@ -0,0 +1,35 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/30b2227.in +# +aiohttp==3.9.5 +aiohttp-jinja2==1.6 +aiosignal==1.3.1 +async-timeout==4.0.3 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +frozenlist==1.4.1 +hypothesis==6.45.0 +idna==3.7 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +jinja2==3.1.4 +markupsafe==2.1.5 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-aiohttp==1.0.5 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +yarl==1.9.4 +zipp==3.19.2 diff --git a/.riot/requirements/315c2cb.txt b/.riot/requirements/315c2cb.txt new file mode 100644 index 00000000000..f76fe912353 --- /dev/null +++ b/.riot/requirements/315c2cb.txt @@ -0,0 +1,26 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/315c2cb.in +# +async-timeout==4.0.3 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +hypothesis==6.45.0 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +redis==4.6.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +zipp==3.19.2 diff --git a/.riot/requirements/32cfa88.txt b/.riot/requirements/32cfa88.txt deleted file mode 100644 index afa4dbed104..00000000000 --- a/.riot/requirements/32cfa88.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/32cfa88.in -# -asyncpg==0.22.0 -attrs==23.2.0 -coverage[toml]==7.4.0 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/9b67887.txt b/.riot/requirements/335af34.txt similarity index 87% rename from .riot/requirements/9b67887.txt rename to .riot/requirements/335af34.txt index 5fe771a17b9..8b55e4a1c79 100644 --- a/.riot/requirements/9b67887.txt +++ b/.riot/requirements/335af34.txt @@ -2,19 +2,19 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/9b67887.in +# pip-compile --no-annotate .riot/requirements/335af34.in # -ai21==2.9.1 +ai21==2.9.2 ai21-tokenizer==0.11.2 aiohttp==3.9.5 aiosignal==1.3.1 annotated-types==0.7.0 -anthropic==0.31.0 +anthropic==0.31.2 anyio==4.4.0 async-timeout==4.0.3 attrs==23.2.0 -boto3==1.34.144 -botocore==1.34.144 +boto3==1.34.51 +botocore==1.34.51 certifi==2024.7.4 charset-normalizer==3.3.2 cohere==5.4.0 @@ -33,7 +33,7 @@ h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 httpx-sse==0.4.0 -huggingface-hub==0.23.4 +huggingface-hub==0.24.0 hypothesis==6.45.0 idna==3.7 importlib-metadata==8.0.0 @@ -51,12 +51,12 @@ langchain-core==0.1.52 langchain-openai==0.1.6 langchain-pinecone==0.1.0 langchain-text-splitters==0.0.2 -langsmith==0.1.85 +langsmith==0.1.92 marshmallow==3.21.3 mock==5.1.0 multidict==6.0.5 mypy-extensions==1.0.0 -numexpr==2.10.1 +numexpr==2.8.5 numpy==1.26.4 openai==1.30.3 opentracing==2.4.0 @@ -68,10 +68,10 @@ psutil==6.0.0 pydantic==2.8.2 pydantic-core==2.20.1 pytest==8.2.2 -pytest-asyncio==0.21.1 +pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.10.1 python-dateutil==2.9.0.post0 pyyaml==6.0.1 regex==2024.5.15 diff --git a/.riot/requirements/17c49c8.txt b/.riot/requirements/35ce786.txt similarity index 68% rename from .riot/requirements/17c49c8.txt rename to .riot/requirements/35ce786.txt index a199149ecce..8f19eb63ade 100644 --- a/.riot/requirements/17c49c8.txt +++ b/.riot/requirements/35ce786.txt @@ -2,16 +2,16 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/17c49c8.in +# pip-compile --no-annotate .riot/requirements/35ce786.in # annotated-types==0.7.0 -anyio==4.3.0 +anyio==4.4.0 attrs==23.2.0 -certifi==2024.2.2 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.5.1 +coverage[toml]==7.6.0 distro==1.9.0 -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 @@ -20,17 +20,17 @@ idna==3.7 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 -numpy==1.26.4 +numpy==2.0.0 openai[datalib]==1.30.1 opentracing==2.4.0 -packaging==24.0 +packaging==24.1 pandas==2.2.2 -pandas-stubs==2.2.2.240514 -pillow==10.3.0 +pandas-stubs==2.2.2.240603 +pillow==10.1.0 pluggy==1.5.0 -pydantic==2.7.1 -pydantic-core==2.18.2 -pytest==8.2.1 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.2.2 pytest-asyncio==0.21.1 pytest-cov==5.0.0 pytest-mock==3.14.0 @@ -39,7 +39,7 @@ python-dateutil==2.9.0.post0 pytz==2024.1 pyyaml==6.0.1 regex==2024.5.15 -requests==2.32.0 +requests==2.32.3 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 @@ -47,9 +47,9 @@ tiktoken==0.7.0 tomli==2.0.1 tqdm==4.66.4 types-pytz==2024.1.0.20240417 -typing-extensions==4.11.0 +typing-extensions==4.12.2 tzdata==2024.1 -urllib3==1.26.18 +urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 diff --git a/.riot/requirements/3b9f513.txt b/.riot/requirements/3b9f513.txt deleted file mode 100644 index e8603c4ab4a..00000000000 --- a/.riot/requirements/3b9f513.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/3b9f513.in -# -aiohttp==3.9.1 -aiohttp-jinja2==1.6 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 -mock==5.1.0 -multidict==6.0.4 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -yarl==1.9.4 -zipp==3.17.0 diff --git a/.riot/requirements/3df1421.txt b/.riot/requirements/3df1421.txt new file mode 100644 index 00000000000..0b4f9bb4bf4 --- /dev/null +++ b/.riot/requirements/3df1421.txt @@ -0,0 +1,28 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/3df1421.in +# +anyio==4.4.0 +attrs==23.2.0 +certifi==2024.6.2 +coverage[toml]==7.5.4 +h11==0.14.0 +httpcore==0.16.3 +httpx==0.23.3 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +rfc3986[idna2008]==1.5.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/3e500e7.txt b/.riot/requirements/3e500e7.txt deleted file mode 100644 index a05245b041d..00000000000 --- a/.riot/requirements/3e500e7.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/3e500e7.in -# -attrs==23.2.0 -coverage[toml]==7.4.2 -googleapis-common-protos==1.62.0 -grpcio==1.62.0 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -protobuf==4.25.3 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/3e7be37.txt b/.riot/requirements/3e7be37.txt new file mode 100644 index 00000000000..d4967bd3287 --- /dev/null +++ b/.riot/requirements/3e7be37.txt @@ -0,0 +1,47 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/3e7be37.in +# +asgiref==3.8.1 +attrs==23.2.0 +certifi==2024.6.2 +charset-normalizer==2.1.1 +click==8.1.7 +coverage[toml]==7.5.4 +deprecated==1.2.14 +flask==2.1.3 +gevent==24.2.1 +greenlet==3.0.3 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +itsdangerous==2.2.0 +jinja2==3.1.4 +markupsafe==2.0.1 +mock==5.1.0 +opentelemetry-api==1.3.0 +opentelemetry-instrumentation==0.22b0 +opentelemetry-instrumentation-flask==0.22b0 +opentelemetry-instrumentation-wsgi==0.22b0 +opentelemetry-semantic-conventions==0.22b0 +opentelemetry-util-http==0.22b0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +requests==2.28.1 +sortedcontainers==2.4.0 +urllib3==1.26.19 +werkzeug==2.1.2 +wrapt==1.16.0 +zope-event==5.0 +zope-interface==6.4.post2 + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/.riot/requirements/684cdcc.txt b/.riot/requirements/3f38536.txt similarity index 52% rename from .riot/requirements/684cdcc.txt rename to .riot/requirements/3f38536.txt index feae1ac2a1c..978cf03cdfd 100644 --- a/.riot/requirements/684cdcc.txt +++ b/.riot/requirements/3f38536.txt @@ -2,68 +2,68 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/684cdcc.in +# pip-compile --no-annotate .riot/requirements/3f38536.in # -annotated-types==0.6.0 -attrs==23.1.0 -aws-sam-translator==1.82.0 -aws-xray-sdk==2.12.1 +annotated-types==0.7.0 +attrs==23.2.0 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto==2.49.0 -boto3==1.34.6 -botocore==1.34.6 -certifi==2023.11.17 +boto3==1.34.140 +botocore==1.34.140 +certifi==2024.7.4 cffi==1.16.0 cfn-lint==0.53.1 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -cryptography==41.0.7 -docker==7.0.0 +coverage[toml]==7.5.4 +cryptography==42.0.8 +docker==7.1.0 ecdsa==0.14.1 hypothesis==6.45.0 idna==2.10 iniconfig==2.0.0 jinja2==2.11.3 jmespath==1.0.1 -jsondiff==2.0.0 +jsondiff==2.1.1 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==3.2.0 junit-xml==1.9 markupsafe==1.1.1 mock==5.1.0 -more-itertools==10.1.0 +more-itertools==10.3.0 moto==1.3.16 networkx==2.8.8 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.5.2 -pydantic-core==2.14.5 +packaging==24.1 +pluggy==1.5.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.2 +pydantic-core==2.20.1 pynamodb==5.5.1 pyrsistent==0.20.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 -pytz==2023.3.post1 +pytz==2024.1 pyyaml==6.0.1 -requests==2.31.0 -responses==0.24.1 +requests==2.32.3 +responses==0.25.3 rsa==4.9 -s3transfer==0.10.0 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 -typing-extensions==4.9.0 -urllib3==2.0.7 +typing-extensions==4.12.2 +urllib3==2.2.2 werkzeug==2.1.2 wrapt==1.16.0 xmltodict==0.13.0 -zipp==3.17.0 +zipp==3.19.2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/4132bce.txt b/.riot/requirements/4132bce.txt new file mode 100644 index 00000000000..ac1cb8ca1e0 --- /dev/null +++ b/.riot/requirements/4132bce.txt @@ -0,0 +1,26 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/4132bce.in +# +attrs==23.2.0 +coverage[toml]==7.5.4 +gevent==23.9.1 +greenlet==3.0.3 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +zope-event==5.0 +zope-interface==6.4.post2 + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/.riot/requirements/41529f2.txt b/.riot/requirements/41529f2.txt new file mode 100644 index 00000000000..9560182a024 --- /dev/null +++ b/.riot/requirements/41529f2.txt @@ -0,0 +1,37 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/41529f2.in +# +aiofiles==24.1.0 +aiosqlite==0.20.0 +anyio==3.7.1 +attrs==23.2.0 +certifi==2024.6.2 +charset-normalizer==3.3.2 +coverage[toml]==7.5.4 +databases==0.8.0 +greenlet==3.0.3 +h11==0.14.0 +httpcore==1.0.5 +httpx==0.27.0 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +requests==2.32.3 +sniffio==1.3.1 +sortedcontainers==2.4.0 +sqlalchemy==1.4.52 +starlette==0.37.2 +typing-extensions==4.12.2 +urllib3==2.2.2 diff --git a/.riot/requirements/46e8cd7.txt b/.riot/requirements/4211915.txt similarity index 55% rename from .riot/requirements/46e8cd7.txt rename to .riot/requirements/4211915.txt index ee696cf66cf..672f0595cac 100644 --- a/.riot/requirements/46e8cd7.txt +++ b/.riot/requirements/4211915.txt @@ -2,49 +2,50 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/46e8cd7.in +# pip-compile --no-annotate .riot/requirements/4211915.in # aiobotocore==2.3.1 -aiohttp==3.9.1 +aiohttp==3.9.5 aioitertools==0.11.0 aiosignal==1.3.1 async-timeout==4.0.3 -attrs==23.1.0 +attrs==23.2.0 botocore==1.24.21 -certifi==2023.11.17 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -elastic-transport==8.11.0 -elasticsearch==8.11.1 -exceptiongroup==1.2.0 +coverage[toml]==7.5.4 +elastic-transport==8.13.1 +elasticsearch==8.14.0 +events==0.5 +exceptiongroup==1.2.1 frozenlist==1.4.1 -gevent==23.9.1 +gevent==24.2.1 greenlet==3.0.3 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 -multidict==6.0.4 -opensearch-py==2.4.2 +multidict==6.0.5 +opensearch-py==2.6.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 +packaging==24.1 +pluggy==1.5.0 pynamodb==5.5.1 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 -requests==2.31.0 +python-dateutil==2.9.0.post0 +requests==2.32.3 six==1.16.0 sortedcontainers==2.4.0 tomli==2.0.1 -urllib3==1.26.18 +urllib3==1.26.19 wrapt==1.16.0 yarl==1.9.4 zope-event==5.0 -zope-interface==6.1 +zope-interface==6.4.post2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/479c504.txt b/.riot/requirements/4334c5c.txt similarity index 51% rename from .riot/requirements/479c504.txt rename to .riot/requirements/4334c5c.txt index 6b89e7f3a6b..3bdf66ee85b 100644 --- a/.riot/requirements/479c504.txt +++ b/.riot/requirements/4334c5c.txt @@ -2,71 +2,71 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/479c504.in +# pip-compile --no-annotate .riot/requirements/4334c5c.in # -annotated-types==0.6.0 -attrs==23.1.0 -aws-sam-translator==1.82.0 -aws-xray-sdk==2.12.1 +annotated-types==0.7.0 +attrs==23.2.0 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto==2.49.0 -boto3==1.34.6 -botocore==1.34.6 -certifi==2023.11.17 +boto3==1.34.139 +botocore==1.34.139 +certifi==2024.7.4 cffi==1.16.0 cfn-lint==0.53.1 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -cryptography==41.0.7 -docker==7.0.0 +coverage[toml]==7.5.4 +cryptography==42.0.8 +docker==7.1.0 ecdsa==0.14.1 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 idna==2.10 -importlib-metadata==7.0.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 jinja2==2.11.3 jmespath==1.0.1 -jsondiff==2.0.0 +jsondiff==2.1.1 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==3.2.0 junit-xml==1.9 markupsafe==1.1.1 mock==5.1.0 -more-itertools==10.1.0 +more-itertools==10.3.0 moto==1.3.16 networkx==2.8.8 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.5.2 -pydantic-core==2.14.5 +packaging==24.1 +pluggy==1.5.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.2 +pydantic-core==2.20.1 pynamodb==5.5.1 pyrsistent==0.20.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 -pytz==2023.3.post1 +pytz==2024.1 pyyaml==6.0.1 -requests==2.31.0 -responses==0.24.1 +requests==2.32.3 +responses==0.25.3 rsa==4.9 -s3transfer==0.10.0 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==1.26.18 +typing-extensions==4.12.2 +urllib3==1.26.19 werkzeug==2.1.2 wrapt==1.16.0 xmltodict==0.13.0 -zipp==3.17.0 +zipp==3.19.2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/481655f.txt b/.riot/requirements/481655f.txt new file mode 100644 index 00000000000..602d536b99f --- /dev/null +++ b/.riot/requirements/481655f.txt @@ -0,0 +1,38 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/481655f.in +# +asn1crypto==1.5.1 +attrs==23.2.0 +certifi==2024.6.2 +cffi==1.16.0 +charset-normalizer==3.3.2 +coverage[toml]==7.5.4 +cryptography==38.0.4 +filelock==3.15.4 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +platformdirs==4.2.2 +pluggy==1.5.0 +pycparser==2.22 +pyjwt==2.8.0 +pyopenssl==23.2.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +pytz==2024.1 +requests==2.32.3 +responses==0.16.0 +six==1.16.0 +snowflake-connector-python==3.11.0 +sortedcontainers==2.4.0 +tomlkit==0.12.5 +typing-extensions==4.12.2 +urllib3==2.2.2 diff --git a/.riot/requirements/4920d3f.txt b/.riot/requirements/4920d3f.txt new file mode 100644 index 00000000000..96d77a0ab4d --- /dev/null +++ b/.riot/requirements/4920d3f.txt @@ -0,0 +1,30 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/4920d3f.in +# +aiohttp==3.9.5 +aiohttp-jinja2==1.6 +aiosignal==1.3.1 +attrs==23.2.0 +coverage[toml]==7.5.4 +frozenlist==1.4.1 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +jinja2==3.1.4 +markupsafe==2.1.5 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-aiohttp==1.0.5 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +yarl==1.9.4 diff --git a/.riot/requirements/9886044.txt b/.riot/requirements/4c49dba.txt similarity index 50% rename from .riot/requirements/9886044.txt rename to .riot/requirements/4c49dba.txt index 508cc682b1d..62e806586ea 100644 --- a/.riot/requirements/9886044.txt +++ b/.riot/requirements/4c49dba.txt @@ -2,31 +2,31 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/9886044.in +# pip-compile --no-annotate .riot/requirements/4c49dba.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiosignal==1.3.1 async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 +idna==3.7 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 tomli==2.0.1 yarl==1.9.4 -zipp==3.17.0 +zipp==3.19.2 diff --git a/.riot/requirements/4de07e7.txt b/.riot/requirements/4de07e7.txt new file mode 100644 index 00000000000..5263f0bd9bb --- /dev/null +++ b/.riot/requirements/4de07e7.txt @@ -0,0 +1,46 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/4de07e7.in +# +attrs==23.2.0 +certifi==2024.6.2 +charset-normalizer==2.1.1 +click==8.1.7 +coverage[toml]==7.5.4 +deprecated==1.2.14 +flask==2.1.3 +gevent==24.2.1 +greenlet==3.0.3 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +itsdangerous==2.2.0 +jinja2==3.1.4 +markupsafe==2.0.1 +mock==5.1.0 +opentelemetry-api==1.15.0 +opentelemetry-instrumentation==0.37b0 +opentelemetry-instrumentation-flask==0.37b0 +opentelemetry-instrumentation-wsgi==0.37b0 +opentelemetry-semantic-conventions==0.37b0 +opentelemetry-util-http==0.37b0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +requests==2.28.1 +sortedcontainers==2.4.0 +urllib3==1.26.19 +werkzeug==2.1.2 +wrapt==1.16.0 +zope-event==5.0 +zope-interface==6.4.post2 + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/.riot/requirements/17141ca.txt b/.riot/requirements/4e87dd9.txt similarity index 70% rename from .riot/requirements/17141ca.txt rename to .riot/requirements/4e87dd9.txt index e6140c614fd..c7f4348ce95 100644 --- a/.riot/requirements/17141ca.txt +++ b/.riot/requirements/4e87dd9.txt @@ -2,11 +2,11 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/17141ca.in +# pip-compile --no-annotate .riot/requirements/4e87dd9.in # attrs==23.2.0 -coverage[toml]==7.5.1 -exceptiongroup==1.2.1 +coverage[toml]==7.6.0 +exceptiongroup==1.2.2 gevent==24.2.1 greenlet==3.0.3 httpretty==1.1.4 @@ -14,11 +14,11 @@ hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.0 +packaging==24.1 pluggy==1.5.0 -pyfakefs==5.5.0 -pytest==8.2.1 -pytest-asyncio==0.21.2 +pyfakefs==5.6.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 @@ -26,7 +26,7 @@ python-json-logger==2.0.7 sortedcontainers==2.4.0 tomli==2.0.1 zope-event==5.0 -zope-interface==6.4 +zope-interface==6.4.post2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/19fe101.txt b/.riot/requirements/4f8a3a1.txt similarity index 78% rename from .riot/requirements/19fe101.txt rename to .riot/requirements/4f8a3a1.txt index 10b2353ea74..95ec5b6f2c7 100644 --- a/.riot/requirements/19fe101.txt +++ b/.riot/requirements/4f8a3a1.txt @@ -2,30 +2,30 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/19fe101.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/4f8a3a1.in # aiohttp==3.8.6 aiohttp-jinja2==1.5.1 aiosignal==1.3.1 async-timeout==4.0.3 asynctest==0.13.0 -attrs==23.1.0 +attrs==23.2.0 charset-normalizer==3.3.2 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 frozenlist==1.3.3 hypothesis==6.45.0 -idna==3.6 +idna==3.7 importlib-metadata==6.7.0 iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 +jinja2==3.1.4 +markupsafe==2.1.5 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 -pytest==7.4.3 +pytest==7.4.4 pytest-aiohttp==1.0.5 pytest-asyncio==0.21.1 pytest-cov==4.1.0 diff --git a/.riot/requirements/1b0c4c1.txt b/.riot/requirements/512bff3.txt similarity index 53% rename from .riot/requirements/1b0c4c1.txt rename to .riot/requirements/512bff3.txt index 6208dad06ef..ea5e5ca7090 100644 --- a/.riot/requirements/1b0c4c1.txt +++ b/.riot/requirements/512bff3.txt @@ -2,52 +2,53 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1b0c4c1.in +# pip-compile --no-annotate .riot/requirements/512bff3.in # aiobotocore==2.3.1 -aiohttp==3.9.1 +aiohttp==3.9.5 aioitertools==0.11.0 aiosignal==1.3.1 async-timeout==4.0.3 -attrs==23.1.0 +attrs==23.2.0 botocore==1.24.21 -certifi==2023.11.17 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -elastic-transport==8.11.0 -elasticsearch==8.11.1 -exceptiongroup==1.2.0 +coverage[toml]==7.5.4 +elastic-transport==8.13.1 +elasticsearch==8.14.0 +events==0.5 +exceptiongroup==1.2.1 frozenlist==1.4.1 gevent==21.1.2 greenlet==1.1.3.post0 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 +idna==3.7 +importlib-metadata==8.0.0 iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 -multidict==6.0.4 -opensearch-py==2.4.2 +multidict==6.0.5 +opensearch-py==2.6.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 +packaging==24.1 +pluggy==1.5.0 pynamodb==5.5.1 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 -requests==2.31.0 +python-dateutil==2.9.0.post0 +requests==2.32.3 six==1.16.0 sortedcontainers==2.4.0 tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==1.26.18 +typing-extensions==4.12.2 +urllib3==1.26.19 wrapt==1.16.0 yarl==1.9.4 -zipp==3.17.0 +zipp==3.19.2 zope-event==5.0 -zope-interface==6.1 +zope-interface==6.4.post2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/1629f19.txt b/.riot/requirements/51e2096.txt similarity index 57% rename from .riot/requirements/1629f19.txt rename to .riot/requirements/51e2096.txt index b47a87edc15..719f5b93487 100644 --- a/.riot/requirements/1629f19.txt +++ b/.riot/requirements/51e2096.txt @@ -2,19 +2,19 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1629f19.in +# pip-compile --no-annotate .riot/requirements/51e2096.in # -attrs==23.1.0 -coverage[toml]==7.3.4 +attrs==23.2.0 +coverage[toml]==7.5.4 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 redis==3.0.1 redis-py-cluster==2.0.0 diff --git a/.riot/requirements/51f5382.txt b/.riot/requirements/51f5382.txt new file mode 100644 index 00000000000..a738296d606 --- /dev/null +++ b/.riot/requirements/51f5382.txt @@ -0,0 +1,48 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/51f5382.in +# +aiobotocore==2.3.1 +aiohttp==3.9.5 +aioitertools==0.11.0 +aiosignal==1.3.1 +attrs==23.2.0 +botocore==1.24.21 +certifi==2024.7.4 +charset-normalizer==3.3.2 +coverage[toml]==7.5.4 +elastic-transport==8.13.1 +elasticsearch==8.14.0 +events==0.5 +frozenlist==1.4.1 +gevent==24.2.1 +greenlet==3.0.3 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +jmespath==1.0.1 +mock==5.1.0 +multidict==6.0.5 +opensearch-py==2.6.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pynamodb==5.5.1 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +python-dateutil==2.9.0.post0 +requests==2.32.3 +six==1.16.0 +sortedcontainers==2.4.0 +urllib3==1.26.19 +wrapt==1.16.0 +yarl==1.9.4 +zope-event==5.0 +zope-interface==6.4.post2 + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/.riot/requirements/59f93d3.txt b/.riot/requirements/59f93d3.txt new file mode 100644 index 00000000000..7ae946cace8 --- /dev/null +++ b/.riot/requirements/59f93d3.txt @@ -0,0 +1,45 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/59f93d3.in +# +asgiref==3.8.1 +attrs==23.2.0 +certifi==2024.6.2 +charset-normalizer==2.1.1 +click==7.1.2 +coverage[toml]==7.5.4 +flask==1.1.4 +gevent==24.2.1 +greenlet==3.0.3 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +itsdangerous==1.1.0 +jinja2==2.11.3 +markupsafe==2.0.1 +mock==5.1.0 +opentelemetry-api==1.0.0 +opentelemetry-instrumentation==0.19b0 +opentelemetry-instrumentation-flask==0.19b0 +opentelemetry-instrumentation-wsgi==0.19b0 +opentelemetry-util-http==0.19b0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +requests==2.28.1 +sortedcontainers==2.4.0 +urllib3==1.26.19 +werkzeug==1.0.1 +wrapt==1.16.0 +zope-event==5.0 +zope-interface==6.4.post2 + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/.riot/requirements/7a5d8b0.txt b/.riot/requirements/5b82761.txt similarity index 50% rename from .riot/requirements/7a5d8b0.txt rename to .riot/requirements/5b82761.txt index ff6ae34f10f..ecf5c058142 100644 --- a/.riot/requirements/7a5d8b0.txt +++ b/.riot/requirements/5b82761.txt @@ -2,24 +2,24 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/7a5d8b0.in +# pip-compile --no-annotate .riot/requirements/5b82761.in # attrs==23.2.0 -coverage[toml]==7.4.2 -exceptiongroup==1.2.0 -googleapis-common-protos==1.62.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +googleapis-common-protos==1.63.2 grpcio==1.42.0 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -protobuf==4.25.3 -pytest==8.0.1 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +protobuf==5.27.2 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 six==1.16.0 sortedcontainers==2.4.0 diff --git a/.riot/requirements/1bb5be8.txt b/.riot/requirements/5baaec1.txt similarity index 66% rename from .riot/requirements/1bb5be8.txt rename to .riot/requirements/5baaec1.txt index 0cf613fc4e8..1082f83a517 100644 --- a/.riot/requirements/1bb5be8.txt +++ b/.riot/requirements/5baaec1.txt @@ -2,33 +2,33 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1bb5be8.in +# pip-compile --no-annotate .riot/requirements/5baaec1.in # attrs==23.2.0 -coverage[toml]==7.5.1 -exceptiongroup==1.2.1 +coverage[toml]==7.6.0 +exceptiongroup==1.2.2 gevent==24.2.1 greenlet==3.0.3 httpretty==1.1.4 hypothesis==6.45.0 -importlib-metadata==7.1.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.0 +packaging==24.1 pluggy==1.5.0 -pyfakefs==5.5.0 -pytest==8.2.1 -pytest-asyncio==0.21.2 +pyfakefs==5.6.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 python-json-logger==2.0.7 sortedcontainers==2.4.0 tomli==2.0.1 -zipp==3.18.2 +zipp==3.19.2 zope-event==5.0 -zope-interface==6.4 +zope-interface==6.4.post2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/5c057b1.txt b/.riot/requirements/5c057b1.txt deleted file mode 100644 index 45a4b0df1e3..00000000000 --- a/.riot/requirements/5c057b1.txt +++ /dev/null @@ -1,53 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/5c057b1.in -# -annotated-types==0.6.0 -anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.3.4 -distro==1.8.0 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==1.0.2 -httpx==0.26.0 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.4 -numpy==1.26.2 -openai[datalib,embeddings]==1.1.1 -opentracing==2.4.0 -packaging==23.2 -pandas==2.1.4 -pandas-stubs==2.1.4.231218 -pillow==10.1.0 -pluggy==1.3.0 -pydantic==2.5.2 -pydantic-core==2.14.5 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-dateutil==2.8.2 -pytz==2023.3.post1 -pyyaml==6.0.1 -six==1.16.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -tqdm==4.66.1 -types-pytz==2023.3.1.1 -typing-extensions==4.9.0 -tzdata==2023.3 -urllib3==1.26.18 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.17.0 diff --git a/.riot/requirements/e9958eb.txt b/.riot/requirements/5da4fd8.txt similarity index 69% rename from .riot/requirements/e9958eb.txt rename to .riot/requirements/5da4fd8.txt index 6d04bb99ccc..a1c5ebc9a1c 100644 --- a/.riot/requirements/e9958eb.txt +++ b/.riot/requirements/5da4fd8.txt @@ -2,13 +2,13 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/e9958eb.in +# pip-compile --no-annotate .riot/requirements/5da4fd8.in # annotated-types==0.7.0 -anyio==4.3.0 +anyio==4.4.0 attrs==23.2.0 -certifi==2024.2.2 -coverage[toml]==7.5.1 +certifi==2024.7.4 +coverage[toml]==7.6.0 distro==1.9.0 h11==0.14.0 httpcore==1.0.5 @@ -18,17 +18,17 @@ idna==3.7 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 -numpy==1.26.4 +numpy==2.0.0 openai[datalib,embeddings]==1.30.1 opentracing==2.4.0 -packaging==24.0 +packaging==24.1 pandas==2.2.2 -pandas-stubs==2.2.2.240514 -pillow==10.3.0 +pandas-stubs==2.2.2.240603 +pillow==9.5.0 pluggy==1.5.0 -pydantic==2.7.1 -pydantic-core==2.18.2 -pytest==8.2.1 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.2.2 pytest-asyncio==0.21.1 pytest-cov==5.0.0 pytest-mock==3.14.0 @@ -41,9 +41,9 @@ sniffio==1.3.1 sortedcontainers==2.4.0 tqdm==4.66.4 types-pytz==2024.1.0.20240417 -typing-extensions==4.11.0 +typing-extensions==4.12.2 tzdata==2024.1 -urllib3==1.26.18 +urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 diff --git a/.riot/requirements/11971ed.txt b/.riot/requirements/5ff3018.txt similarity index 51% rename from .riot/requirements/11971ed.txt rename to .riot/requirements/5ff3018.txt index dc66e7346db..f1d17983a83 100644 --- a/.riot/requirements/11971ed.txt +++ b/.riot/requirements/5ff3018.txt @@ -2,82 +2,77 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/11971ed.in +# pip-compile --no-annotate .riot/requirements/5ff3018.in # -annotated-types==0.6.0 +annotated-types==0.7.0 attrs==23.2.0 -aws-sam-translator==1.85.0 -aws-xray-sdk==2.12.1 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto3==1.34.49 botocore==1.34.49 -certifi==2024.2.2 +certifi==2024.7.4 cffi==1.16.0 -cfn-lint==0.85.2 +cfn-lint==1.7.0 charset-normalizer==3.3.2 -coverage[toml]==7.4.3 -cryptography==42.0.5 -docker==7.0.0 -ecdsa==0.18.0 +coverage[toml]==7.6.0 +cryptography==42.0.8 +docker==7.1.0 +ecdsa==0.19.0 graphql-core==3.2.3 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 -jinja2==3.1.3 +jinja2==3.1.4 jmespath==1.0.1 -jschema-to-python==1.2.3 -jsondiff==2.0.0 +jsondiff==2.1.2 jsonpatch==1.33 -jsonpickle==3.0.3 -jsonpointer==2.4 -jsonschema==4.21.1 -jsonschema-path==0.3.2 +jsonpointer==3.0.0 +jsonschema==4.23.0 +jsonschema-path==0.3.3 jsonschema-specifications==2023.12.1 -junit-xml==1.9 lazy-object-proxy==1.10.0 markupsafe==2.1.5 mock==5.1.0 moto[all]==4.2.14 mpmath==1.3.0 multidict==6.0.5 -multipart==0.2.4 -networkx==3.2.1 +multipart==0.2.5 +networkx==3.3 openapi-schema-validator==0.6.2 openapi-spec-validator==0.7.1 opentracing==2.4.0 -packaging==23.2 +packaging==24.1 pathable==0.4.3 -pbr==6.0.0 -pluggy==1.4.0 +pluggy==1.5.0 py-partiql-parser==0.5.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.6.2 -pydantic-core==2.16.3 -pyparsing==3.1.1 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.2 +pydantic-core==2.20.1 +pyparsing==3.1.2 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 pyyaml==6.0.1 -referencing==0.31.1 -regex==2023.12.25 -requests==2.31.0 -responses==0.25.0 +referencing==0.35.1 +regex==2024.5.15 +requests==2.32.3 +responses==0.25.3 rfc3339-validator==0.1.4 -rpds-py==0.18.0 +rpds-py==0.19.0 rsa==4.9 -s3transfer==0.10.0 -sarif-om==1.0.4 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 -sympy==1.12 -typing-extensions==4.9.0 +sympy==1.13.0 +typing-extensions==4.12.2 urllib3==2.0.7 vcrpy==6.0.1 -werkzeug==3.0.1 +werkzeug==3.0.3 wrapt==1.16.0 xmltodict==0.13.0 yarl==1.9.4 diff --git a/.riot/requirements/9c53429.txt b/.riot/requirements/60b507f.txt similarity index 50% rename from .riot/requirements/9c53429.txt rename to .riot/requirements/60b507f.txt index 5ad185db23f..dc6c2bdb702 100644 --- a/.riot/requirements/9c53429.txt +++ b/.riot/requirements/60b507f.txt @@ -2,89 +2,84 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/9c53429.in +# pip-compile --no-annotate .riot/requirements/60b507f.in # -annotated-types==0.6.0 +annotated-types==0.7.0 attrs==23.2.0 -aws-sam-translator==1.85.0 -aws-xray-sdk==2.12.1 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto3==1.34.49 botocore==1.34.49 -certifi==2024.2.2 +certifi==2024.7.4 cffi==1.16.0 -cfn-lint==0.85.2 +cfn-lint==1.7.0 charset-normalizer==3.3.2 -coverage[toml]==7.4.3 -cryptography==42.0.5 -docker==7.0.0 -ecdsa==0.18.0 -exceptiongroup==1.2.0 +coverage[toml]==7.6.0 +cryptography==42.0.8 +docker==7.1.0 +ecdsa==0.19.0 +exceptiongroup==1.2.2 graphql-core==3.2.3 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.1 +idna==3.7 +importlib-metadata==8.0.0 iniconfig==2.0.0 -jinja2==3.1.3 +jinja2==3.1.4 jmespath==1.0.1 -jschema-to-python==1.2.3 -jsondiff==2.0.0 +jsondiff==2.1.2 jsonpatch==1.33 -jsonpickle==3.0.3 -jsonpointer==2.4 -jsonschema==4.21.1 -jsonschema-path==0.3.2 +jsonpointer==3.0.0 +jsonschema==4.23.0 +jsonschema-path==0.3.3 jsonschema-specifications==2023.12.1 -junit-xml==1.9 lazy-object-proxy==1.10.0 markupsafe==2.1.5 mock==5.1.0 moto[all]==4.2.14 mpmath==1.3.0 multidict==6.0.5 -multipart==0.2.4 +multipart==0.2.5 networkx==3.2.1 openapi-schema-validator==0.6.2 openapi-spec-validator==0.7.1 opentracing==2.4.0 -packaging==23.2 +packaging==24.1 pathable==0.4.3 -pbr==6.0.0 -pluggy==1.4.0 +pluggy==1.5.0 py-partiql-parser==0.5.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.6.2 -pydantic-core==2.16.3 -pyparsing==3.1.1 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.2 +pydantic-core==2.20.1 +pyparsing==3.1.2 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 pyyaml==6.0.1 -referencing==0.31.1 -regex==2023.12.25 -requests==2.31.0 -responses==0.25.0 +referencing==0.35.1 +regex==2024.5.15 +requests==2.32.3 +responses==0.25.3 rfc3339-validator==0.1.4 -rpds-py==0.18.0 +rpds-py==0.19.0 rsa==4.9 -s3transfer==0.10.0 -sarif-om==1.0.4 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 -sympy==1.12 +sympy==1.13.0 tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==1.26.18 +typing-extensions==4.12.2 +urllib3==1.26.19 vcrpy==6.0.1 -werkzeug==3.0.1 +werkzeug==3.0.3 wrapt==1.16.0 xmltodict==0.13.0 yarl==1.9.4 -zipp==3.17.0 +zipp==3.19.2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/86c9153.txt b/.riot/requirements/694a5dc.txt similarity index 57% rename from .riot/requirements/86c9153.txt rename to .riot/requirements/694a5dc.txt index 1a58bfcce03..8388c65c621 100644 --- a/.riot/requirements/86c9153.txt +++ b/.riot/requirements/694a5dc.txt @@ -2,19 +2,19 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/86c9153.in +# pip-compile --no-annotate .riot/requirements/694a5dc.in # -attrs==23.1.0 -coverage[toml]==7.3.4 +attrs==23.2.0 +coverage[toml]==7.5.4 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 redis==3.5.3 redis-py-cluster==2.1.3 diff --git a/.riot/requirements/3791b2a.txt b/.riot/requirements/6cbe0ef.txt similarity index 53% rename from .riot/requirements/3791b2a.txt rename to .riot/requirements/6cbe0ef.txt index c46f79f66b7..0f697349d32 100644 --- a/.riot/requirements/3791b2a.txt +++ b/.riot/requirements/6cbe0ef.txt @@ -2,26 +2,26 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/3791b2a.in +# pip-compile --no-annotate .riot/requirements/6cbe0ef.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiosignal==1.3.1 -attrs==23.1.0 -coverage[toml]==7.3.4 +attrs==23.2.0 +coverage[toml]==7.5.4 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 yarl==1.9.4 diff --git a/.riot/requirements/6e56629.txt b/.riot/requirements/6e56629.txt deleted file mode 100644 index b5c1370b467..00000000000 --- a/.riot/requirements/6e56629.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/6e56629.in -# -anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -h11==0.12.0 -httpcore==0.14.7 -httpx==0.22.0 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -rfc3986[idna2008]==1.5.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/6ebd15f.txt b/.riot/requirements/6ebd15f.txt new file mode 100644 index 00000000000..e15eb9136da --- /dev/null +++ b/.riot/requirements/6ebd15f.txt @@ -0,0 +1,25 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/6ebd15f.in +# +asyncpg==0.23.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +hypothesis==6.45.0 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +zipp==3.19.2 diff --git a/.riot/requirements/162ca82.txt b/.riot/requirements/74e07bf.txt similarity index 53% rename from .riot/requirements/162ca82.txt rename to .riot/requirements/74e07bf.txt index a9cdf5e9697..670f96c7732 100644 --- a/.riot/requirements/162ca82.txt +++ b/.riot/requirements/74e07bf.txt @@ -2,22 +2,22 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/162ca82.in +# pip-compile --no-annotate .riot/requirements/74e07bf.in # async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 redis==4.6.0 sortedcontainers==2.4.0 diff --git a/.riot/requirements/7669807.txt b/.riot/requirements/7669807.txt deleted file mode 100644 index 6b78ad2a41e..00000000000 --- a/.riot/requirements/7669807.txt +++ /dev/null @@ -1,92 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/7669807.in -# -annotated-types==0.6.0 -attrs==23.2.0 -aws-sam-translator==1.85.0 -aws-xray-sdk==2.12.1 -boto3==1.34.49 -botocore==1.34.49 -certifi==2024.2.2 -cffi==1.16.0 -cfn-lint==0.85.2 -charset-normalizer==3.3.2 -coverage[toml]==7.4.3 -cryptography==42.0.5 -docker==7.0.0 -ecdsa==0.18.0 -exceptiongroup==1.2.0 -graphql-core==3.2.3 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.1 -importlib-resources==6.1.1 -iniconfig==2.0.0 -jinja2==3.1.3 -jmespath==1.0.1 -jschema-to-python==1.2.3 -jsondiff==2.0.0 -jsonpatch==1.33 -jsonpickle==3.0.3 -jsonpointer==2.4 -jsonschema==4.21.1 -jsonschema-path==0.3.2 -jsonschema-specifications==2023.12.1 -junit-xml==1.9 -lazy-object-proxy==1.10.0 -markupsafe==2.1.5 -mock==5.1.0 -moto[all]==4.2.14 -mpmath==1.3.0 -multidict==6.0.5 -multipart==0.2.4 -networkx==3.1 -openapi-schema-validator==0.6.2 -openapi-spec-validator==0.7.1 -opentracing==2.4.0 -packaging==23.2 -pathable==0.4.3 -pbr==6.0.0 -pkgutil-resolve-name==1.3.10 -pluggy==1.4.0 -py-partiql-parser==0.5.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.6.2 -pydantic-core==2.16.3 -pyparsing==3.1.1 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-dateutil==2.8.2 -python-jose[cryptography]==3.3.0 -pyyaml==6.0.1 -referencing==0.31.1 -regex==2023.12.25 -requests==2.31.0 -responses==0.25.0 -rfc3339-validator==0.1.4 -rpds-py==0.18.0 -rsa==4.9 -s3transfer==0.10.0 -sarif-om==1.0.4 -six==1.16.0 -sortedcontainers==2.4.0 -sshpubkeys==3.3.1 -sympy==1.12 -tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==1.26.18 -vcrpy==6.0.1 -werkzeug==3.0.1 -wrapt==1.16.0 -xmltodict==0.13.0 -yarl==1.9.4 -zipp==3.17.0 - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/.riot/requirements/b5852df.txt b/.riot/requirements/80fa01e.txt similarity index 80% rename from .riot/requirements/b5852df.txt rename to .riot/requirements/80fa01e.txt index f73008e54a9..6de0163c442 100644 --- a/.riot/requirements/b5852df.txt +++ b/.riot/requirements/80fa01e.txt @@ -2,27 +2,27 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/b5852df.in +# pip-compile --no-annotate .riot/requirements/80fa01e.in # -ai21==2.9.1 +ai21==2.9.2 ai21-tokenizer==0.11.2 aiohttp==3.9.5 aiosignal==1.3.1 annotated-types==0.7.0 -anthropic==0.31.0 +anthropic==0.31.2 anyio==4.4.0 async-timeout==4.0.3 attrs==23.2.0 -boto3==1.34.143 -botocore==1.34.143 +boto3==1.34.51 +botocore==1.34.51 certifi==2024.7.4 charset-normalizer==3.3.2 -cohere==5.5.8 +cohere==5.6.1 coverage[toml]==7.6.0 dataclasses-json==0.6.7 defusedxml==0.7.1 distro==1.9.0 -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 fastavro==1.9.5 filelock==3.15.4 frozenlist==1.4.1 @@ -32,7 +32,7 @@ h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 httpx-sse==0.4.0 -huggingface-hub==0.23.4 +huggingface-hub==0.24.0 hypothesis==6.45.0 idna==3.7 importlib-metadata==8.0.0 @@ -47,30 +47,31 @@ langchain-aws==0.1.6 langchain-cohere==0.1.8 langchain-core==0.2.0 langchain-openai==0.1.7 -langchain-pinecone==0.1.1 +langchain-pinecone==0.1.2 langchain-text-splitters==0.2.1 -langsmith==0.1.85 +langsmith==0.1.92 marshmallow==3.21.3 mock==5.1.0 multidict==6.0.5 mypy-extensions==1.0.0 -numexpr==2.10.1 +numexpr==2.8.5 numpy==1.26.4 -openai==1.35.13 +openai==1.35.15 opentracing==2.4.0 orjson==3.10.6 packaging==23.2 parameterized==0.9.0 -pinecone-client==3.2.2 +pinecone-client==4.1.2 +pinecone-plugin-interface==0.0.7 pluggy==1.5.0 psutil==6.0.0 pydantic==2.8.2 pydantic-core==2.20.1 pytest==8.2.2 -pytest-asyncio==0.21.1 +pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.10.1 python-dateutil==2.9.0.post0 pyyaml==6.0.1 regex==2024.5.15 diff --git a/.riot/requirements/84ec59a.txt b/.riot/requirements/84ec59a.txt new file mode 100644 index 00000000000..4f74f601126 --- /dev/null +++ b/.riot/requirements/84ec59a.txt @@ -0,0 +1,53 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/84ec59a.in +# +annotated-types==0.7.0 +anyio==3.7.1 +attrs==23.2.0 +certifi==2024.7.4 +coverage[toml]==7.6.0 +distro==1.9.0 +exceptiongroup==1.2.2 +h11==0.14.0 +httpcore==1.0.5 +httpx==0.27.0 +hypothesis==6.45.0 +idna==3.7 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +mock==5.1.0 +multidict==6.0.5 +numpy==1.24.4 +openai[datalib,embeddings]==1.1.1 +opentracing==2.4.0 +packaging==24.1 +pandas==2.0.3 +pandas-stubs==2.0.3.230814 +pillow==9.5.0 +pluggy==1.5.0 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +python-dateutil==2.9.0.post0 +pytz==2024.1 +pyyaml==6.0.1 +six==1.16.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tomli==2.0.1 +tqdm==4.66.4 +types-pytz==2024.1.0.20240417 +typing-extensions==4.12.2 +tzdata==2024.1 +urllib3==1.26.19 +vcrpy==4.2.1 +wrapt==1.16.0 +yarl==1.9.4 +zipp==3.19.2 diff --git a/.riot/requirements/194d473.txt b/.riot/requirements/87a1fff.txt similarity index 65% rename from .riot/requirements/194d473.txt rename to .riot/requirements/87a1fff.txt index 8b03bcc82b3..29c1d482b75 100644 --- a/.riot/requirements/194d473.txt +++ b/.riot/requirements/87a1fff.txt @@ -2,35 +2,35 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/194d473.in +# pip-compile --no-annotate .riot/requirements/87a1fff.in # annotated-types==0.7.0 -anyio==4.3.0 +anyio==4.4.0 attrs==23.2.0 -certifi==2024.2.2 -coverage[toml]==7.5.1 +certifi==2024.7.4 +coverage[toml]==7.6.0 distro==1.9.0 -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 hypothesis==6.45.0 idna==3.7 -importlib-metadata==7.1.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 -numpy==1.26.4 +numpy==2.0.0 openai[datalib,embeddings]==1.30.1 opentracing==2.4.0 -packaging==24.0 +packaging==24.1 pandas==2.2.2 -pandas-stubs==2.2.2.240514 -pillow==10.3.0 +pandas-stubs==2.2.2.240603 +pillow==9.5.0 pluggy==1.5.0 -pydantic==2.7.1 -pydantic-core==2.18.2 -pytest==8.2.1 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.2.2 pytest-asyncio==0.21.1 pytest-cov==5.0.0 pytest-mock==3.14.0 @@ -44,10 +44,10 @@ sortedcontainers==2.4.0 tomli==2.0.1 tqdm==4.66.4 types-pytz==2024.1.0.20240417 -typing-extensions==4.11.0 +typing-extensions==4.12.2 tzdata==2024.1 -urllib3==1.26.18 +urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 -zipp==3.18.2 +zipp==3.19.2 diff --git a/.riot/requirements/1dca1e6.txt b/.riot/requirements/8c5c91a.txt similarity index 87% rename from .riot/requirements/1dca1e6.txt rename to .riot/requirements/8c5c91a.txt index 6dc626e14b6..9b9509c22b9 100644 --- a/.riot/requirements/1dca1e6.txt +++ b/.riot/requirements/8c5c91a.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1dca1e6.in +# pip-compile --no-annotate .riot/requirements/8c5c91a.in # ai21==1.3.4 aiohttp==3.9.5 @@ -16,13 +16,13 @@ cohere==4.57 coverage[toml]==7.6.0 dataclasses-json==0.5.14 dnspython==2.6.1 -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 fastavro==1.9.5 filelock==3.15.4 frozenlist==1.4.1 fsspec==2024.6.1 greenlet==3.0.3 -huggingface-hub==0.23.4 +huggingface-hub==0.24.0 hypothesis==6.45.0 idna==3.7 importlib-metadata==6.11.0 @@ -39,7 +39,7 @@ marshmallow==3.21.3 mock==5.1.0 multidict==6.0.5 mypy-extensions==1.0.0 -numexpr==2.10.1 +numexpr==2.8.5 numpy==1.26.4 openai==0.27.8 openapi-schema-pydantic==1.2.4 @@ -50,10 +50,10 @@ pluggy==1.5.0 psutil==6.0.0 pydantic==1.10.17 pytest==8.2.2 -pytest-asyncio==0.21.1 +pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.10.1 python-dateutil==2.9.0.post0 pyyaml==6.0.1 regex==2024.5.15 diff --git a/.riot/requirements/8e06425.txt b/.riot/requirements/8e06425.txt new file mode 100644 index 00000000000..2c0f45973b2 --- /dev/null +++ b/.riot/requirements/8e06425.txt @@ -0,0 +1,27 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/8e06425.in +# +aiohttp==3.9.5 +aiosignal==1.3.1 +attrs==23.2.0 +coverage[toml]==7.5.4 +frozenlist==1.4.1 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-aiohttp==1.0.5 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +yarl==1.9.4 diff --git a/.riot/requirements/3304fd2.txt b/.riot/requirements/8ef4a62.txt similarity index 52% rename from .riot/requirements/3304fd2.txt rename to .riot/requirements/8ef4a62.txt index f3b2ba2ccb8..e0c2e02f3c5 100644 --- a/.riot/requirements/3304fd2.txt +++ b/.riot/requirements/8ef4a62.txt @@ -2,31 +2,31 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/3304fd2.in +# pip-compile --no-annotate .riot/requirements/8ef4a62.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiohttp-jinja2==1.5.1 aiosignal==1.3.1 async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 +jinja2==3.1.4 +markupsafe==2.1.5 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 tomli==2.0.1 diff --git a/.riot/requirements/8fc3285.txt b/.riot/requirements/8fc3285.txt index e68cc3a8259..e60c1d7eb76 100644 --- a/.riot/requirements/8fc3285.txt +++ b/.riot/requirements/8fc3285.txt @@ -4,66 +4,66 @@ # # pip-compile --no-annotate .riot/requirements/8fc3285.in # -annotated-types==0.6.0 -attrs==23.1.0 -aws-sam-translator==1.82.0 -aws-xray-sdk==2.12.1 +annotated-types==0.7.0 +attrs==23.2.0 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto==2.49.0 -boto3==1.34.6 -botocore==1.34.6 -certifi==2023.11.17 +boto3==1.34.139 +botocore==1.34.139 +certifi==2024.6.2 cffi==1.16.0 cfn-lint==0.53.1 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -cryptography==41.0.7 -docker==7.0.0 +coverage[toml]==7.5.4 +cryptography==42.0.8 +docker==7.1.0 ecdsa==0.14.1 hypothesis==6.45.0 idna==2.10 iniconfig==2.0.0 jinja2==2.11.3 jmespath==1.0.1 -jsondiff==2.0.0 +jsondiff==2.1.1 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==3.2.0 junit-xml==1.9 markupsafe==1.1.1 mock==5.1.0 -more-itertools==10.1.0 +more-itertools==10.3.0 moto==1.3.16 networkx==2.8.8 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.5.2 -pydantic-core==2.14.5 +packaging==24.1 +pluggy==1.5.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.0 +pydantic-core==2.20.0 pynamodb==5.5.1 pyrsistent==0.20.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 -pytz==2023.3.post1 +pytz==2024.1 pyyaml==6.0.1 -requests==2.31.0 -responses==0.24.1 +requests==2.32.3 +responses==0.25.3 rsa==4.9 -s3transfer==0.10.0 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 -typing-extensions==4.9.0 -urllib3==2.0.7 +typing-extensions==4.12.2 +urllib3==2.2.2 werkzeug==2.1.2 wrapt==1.16.0 xmltodict==0.13.0 -zipp==3.17.0 +zipp==3.19.2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/1688be1.txt b/.riot/requirements/9050f7e.txt similarity index 80% rename from .riot/requirements/1688be1.txt rename to .riot/requirements/9050f7e.txt index a642fe783f4..35b5c11a05d 100644 --- a/.riot/requirements/1688be1.txt +++ b/.riot/requirements/9050f7e.txt @@ -2,19 +2,19 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1688be1.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/9050f7e.in # -attrs==23.1.0 +attrs==23.2.0 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 -pytest==7.4.3 +pytest==7.4.4 pytest-cov==4.1.0 pytest-mock==3.11.1 pytest-randomly==3.12.0 diff --git a/.riot/requirements/9232661.txt b/.riot/requirements/9232661.txt new file mode 100644 index 00000000000..184749d7813 --- /dev/null +++ b/.riot/requirements/9232661.txt @@ -0,0 +1,21 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/9232661.in +# +attrs==23.2.0 +coverage[toml]==7.5.4 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +redis==5.0.7 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/925e4fe.txt b/.riot/requirements/925e4fe.txt deleted file mode 100644 index 73beb52996a..00000000000 --- a/.riot/requirements/925e4fe.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/925e4fe.in -# -attrs==23.2.0 -coverage[toml]==7.4.2 -exceptiongroup==1.2.0 -googleapis-common-protos==1.62.0 -grpcio==1.34.1 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -protobuf==4.25.3 -pytest==8.0.1 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/94f0e61.txt b/.riot/requirements/94f0e61.txt deleted file mode 100644 index b4b72199f57..00000000000 --- a/.riot/requirements/94f0e61.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/94f0e61.in -# -async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -redis==4.6.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/15f5e47.txt b/.riot/requirements/9af62ac.txt similarity index 53% rename from .riot/requirements/15f5e47.txt rename to .riot/requirements/9af62ac.txt index 969689c63e3..bd1c268298f 100644 --- a/.riot/requirements/15f5e47.txt +++ b/.riot/requirements/9af62ac.txt @@ -2,26 +2,26 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/15f5e47.in +# pip-compile --no-annotate .riot/requirements/9af62ac.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiosignal==1.3.1 -attrs==23.1.0 -coverage[toml]==7.3.4 +attrs==23.2.0 +coverage[toml]==7.5.4 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 yarl==1.9.4 diff --git a/.riot/requirements/9b18162.txt b/.riot/requirements/9b18162.txt index 95a63746b41..22ff6cdfa16 100644 --- a/.riot/requirements/9b18162.txt +++ b/.riot/requirements/9b18162.txt @@ -5,21 +5,21 @@ # pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/9b18162.in # annotated-types==0.5.0 -attrs==23.1.0 +attrs==23.2.0 aws-sam-translator==1.82.0 -aws-xray-sdk==2.12.1 +aws-xray-sdk==2.14.0 boto==2.49.0 boto3==1.33.13 botocore==1.33.13 -certifi==2023.11.17 +certifi==2024.6.2 cffi==1.15.1 cfn-lint==0.53.1 charset-normalizer==3.3.2 coverage[toml]==7.2.7 -cryptography==41.0.7 +cryptography==42.0.8 docker==6.1.3 ecdsa==0.14.1 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 idna==2.10 importlib-metadata==6.7.0 @@ -28,7 +28,7 @@ jinja2==2.11.3 jmespath==1.0.1 jsondiff==2.0.0 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==3.2.0 junit-xml==1.9 markupsafe==1.1.1 @@ -37,21 +37,21 @@ more-itertools==9.1.0 moto==1.3.16 networkx==2.6.3 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 pyasn1==0.5.1 pycparser==2.21 -pydantic==2.5.2 -pydantic-core==2.14.5 +pydantic==2.5.3 +pydantic-core==2.14.6 pynamodb==5.5.1 pyrsistent==0.19.3 -pytest==7.4.3 +pytest==7.4.4 pytest-cov==4.1.0 pytest-mock==3.11.1 pytest-randomly==3.12.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 -pytz==2023.3.post1 +pytz==2024.1 pyyaml==6.0.1 requests==2.31.0 responses==0.23.3 @@ -63,7 +63,7 @@ sshpubkeys==3.3.1 tomli==2.0.1 types-pyyaml==6.0.12.12 typing-extensions==4.7.1 -urllib3==1.26.18 +urllib3==1.26.19 websocket-client==1.6.1 werkzeug==2.1.2 wrapt==1.16.0 diff --git a/.riot/requirements/9c2da11.txt b/.riot/requirements/9c2da11.txt deleted file mode 100644 index 10eb49c7f70..00000000000 --- a/.riot/requirements/9c2da11.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/9c2da11.in -# -anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -h11==0.12.0 -httpcore==0.14.7 -httpx==0.22.0 -hypothesis==6.45.0 -idna==3.6 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -rfc3986[idna2008]==1.5.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 diff --git a/.riot/requirements/18f8bd1.txt b/.riot/requirements/9e36105.txt similarity index 81% rename from .riot/requirements/18f8bd1.txt rename to .riot/requirements/9e36105.txt index 2b4b50abae3..0596dbe2b06 100644 --- a/.riot/requirements/18f8bd1.txt +++ b/.riot/requirements/9e36105.txt @@ -2,20 +2,20 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/18f8bd1.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/9e36105.in # async-timeout==4.0.3 -attrs==23.1.0 +attrs==23.2.0 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 -pytest==7.4.3 +pytest==7.4.4 pytest-asyncio==0.21.1 pytest-cov==4.1.0 pytest-mock==3.11.1 diff --git a/.riot/requirements/a273f3b.txt b/.riot/requirements/a273f3b.txt new file mode 100644 index 00000000000..c0ed98fadc8 --- /dev/null +++ b/.riot/requirements/a273f3b.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/a273f3b.in +# +attrs==23.2.0 +coverage[toml]==7.5.4 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +mysql-connector-python==9.0.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/a41adfe.txt b/.riot/requirements/a41adfe.txt new file mode 100644 index 00000000000..f85425b9b21 --- /dev/null +++ b/.riot/requirements/a41adfe.txt @@ -0,0 +1,35 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/a41adfe.in +# +aiohttp==3.9.5 +aiohttp-jinja2==1.6 +aiosignal==1.3.1 +async-timeout==4.0.3 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +frozenlist==1.4.1 +hypothesis==6.45.0 +idna==3.7 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +jinja2==3.1.4 +markupsafe==2.1.5 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-aiohttp==1.0.5 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +yarl==1.9.4 +zipp==3.19.2 diff --git a/.riot/requirements/a525a50.txt b/.riot/requirements/a525a50.txt deleted file mode 100644 index 7efcba0c3f2..00000000000 --- a/.riot/requirements/a525a50.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/a525a50.in -# -attrs==23.2.0 -coverage[toml]==7.4.2 -exceptiongroup==1.2.0 -googleapis-common-protos==1.62.0 -grpcio==1.34.1 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -protobuf==4.25.3 -pytest==8.0.1 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/abfbfa5.txt b/.riot/requirements/abfbfa5.txt index b705cf7dc6c..e3e1fcf0aa6 100644 --- a/.riot/requirements/abfbfa5.txt +++ b/.riot/requirements/abfbfa5.txt @@ -4,66 +4,66 @@ # # pip-compile --no-annotate .riot/requirements/abfbfa5.in # -annotated-types==0.6.0 -attrs==23.1.0 -aws-sam-translator==1.82.0 -aws-xray-sdk==2.12.1 +annotated-types==0.7.0 +attrs==23.2.0 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto==2.49.0 -boto3==1.34.6 -botocore==1.34.6 -certifi==2023.11.17 +boto3==1.34.139 +botocore==1.34.139 +certifi==2024.6.2 cffi==1.16.0 cfn-lint==0.53.1 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -cryptography==41.0.7 -docker==7.0.0 +coverage[toml]==7.5.4 +cryptography==42.0.8 +docker==7.1.0 ecdsa==0.14.1 hypothesis==6.45.0 idna==2.10 iniconfig==2.0.0 jinja2==2.11.3 jmespath==1.0.1 -jsondiff==2.0.0 +jsondiff==2.1.1 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==3.2.0 junit-xml==1.9 markupsafe==1.1.1 mock==5.1.0 -more-itertools==10.1.0 +more-itertools==10.3.0 moto==1.3.16 networkx==2.8.8 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.5.2 -pydantic-core==2.14.5 +packaging==24.1 +pluggy==1.5.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.0 +pydantic-core==2.20.0 pynamodb==5.5.1 pyrsistent==0.20.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 -pytz==2023.3.post1 +pytz==2024.1 pyyaml==6.0.1 -requests==2.31.0 -responses==0.24.1 +requests==2.32.3 +responses==0.25.3 rsa==4.9 -s3transfer==0.10.0 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 -typing-extensions==4.9.0 -urllib3==2.0.7 +typing-extensions==4.12.2 +urllib3==2.2.2 werkzeug==2.1.2 wrapt==1.16.0 xmltodict==0.13.0 -zipp==3.17.0 +zipp==3.19.2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/97ea583.txt b/.riot/requirements/adb0290.txt similarity index 89% rename from .riot/requirements/97ea583.txt rename to .riot/requirements/adb0290.txt index ccb4bfc1ac3..9c4839f8323 100644 --- a/.riot/requirements/97ea583.txt +++ b/.riot/requirements/adb0290.txt @@ -2,13 +2,13 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/97ea583.in +# pip-compile --no-annotate .riot/requirements/adb0290.in # amqp==5.2.0 attrs==23.2.0 billiard==4.2.0 celery==5.4.0 -certifi==2024.6.2 +certifi==2024.7.4 charset-normalizer==3.3.2 click==8.1.7 click-didyoumean==0.3.1 @@ -21,7 +21,7 @@ gevent==24.2.1 greenlet==3.0.3 hypothesis==6.45.0 idna==3.7 -importlib-metadata==7.2.1 +importlib-metadata==8.0.0 iniconfig==2.0.0 kombu==5.3.7 mock==5.1.0 diff --git a/.riot/requirements/1ff4147.txt b/.riot/requirements/adec509.txt similarity index 51% rename from .riot/requirements/1ff4147.txt rename to .riot/requirements/adec509.txt index 5f19ddd2dc2..428be2a2816 100644 --- a/.riot/requirements/1ff4147.txt +++ b/.riot/requirements/adec509.txt @@ -2,24 +2,24 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1ff4147.in +# pip-compile --no-annotate .riot/requirements/adec509.in # -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 hypothesis==6.45.0 -importlib-metadata==7.0.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 redis==3.0.1 redis-py-cluster==2.0.0 sortedcontainers==2.4.0 tomli==2.0.1 -zipp==3.17.0 +zipp==3.19.2 diff --git a/.riot/requirements/b2251c4.txt b/.riot/requirements/b2251c4.txt new file mode 100644 index 00000000000..ce5bfb57d7e --- /dev/null +++ b/.riot/requirements/b2251c4.txt @@ -0,0 +1,46 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/b2251c4.in +# +aiofiles==24.1.0 +anyio==4.4.0 +attrs==23.2.0 +certifi==2024.6.2 +charset-normalizer==3.3.2 +coverage[toml]==7.5.4 +h11==0.14.0 +html5tagger==1.3.0 +httpcore==0.16.3 +httptools==0.6.1 +httpx==0.23.3 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +requests==2.32.3 +rfc3986[idna2008]==1.5.0 +sanic==24.6.0 +sanic-routing==23.12.0 +sanic-testing==22.3.1 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tracerite==1.1.1 +typing-extensions==4.12.2 +ujson==5.10.0 +urllib3==2.2.2 +uvloop==0.19.0 +websockets==10.4 + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/.riot/requirements/b29b7a2.txt b/.riot/requirements/b29b7a2.txt new file mode 100644 index 00000000000..4a8629c5f25 --- /dev/null +++ b/.riot/requirements/b29b7a2.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/b29b7a2.in +# +attrs==23.2.0 +confluent-kafka==2.4.0 +coverage[toml]==7.5.4 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/b56d9af.txt b/.riot/requirements/b56d9af.txt new file mode 100644 index 00000000000..9a0e93ec9c4 --- /dev/null +++ b/.riot/requirements/b56d9af.txt @@ -0,0 +1,42 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/b56d9af.in +# +attrs==23.2.0 +beautifulsoup4==4.12.3 +certifi==2024.6.2 +charset-normalizer==3.3.2 +coverage[toml]==7.5.4 +hupper==1.12.1 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pastedeploy==3.1.0 +plaster==1.1.2 +plaster-pastedeploy==1.0.1 +pluggy==1.5.0 +pserve-test-app @ file:///root/project/tests/contrib/pyramid/pserve_app +pyramid==2.0.2 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +requests==2.32.3 +sortedcontainers==2.4.0 +soupsieve==2.5 +translationstring==1.4 +urllib3==2.2.2 +venusian==3.1.0 +waitress==3.0.0 +webob==1.8.7 +webtest==3.0.0 +zope-deprecation==5.0 +zope-interface==6.4.post2 + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/.riot/requirements/b5fb73e.txt b/.riot/requirements/b5fb73e.txt new file mode 100644 index 00000000000..14ad35f08e8 --- /dev/null +++ b/.riot/requirements/b5fb73e.txt @@ -0,0 +1,35 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/b5fb73e.in +# +aiohttp==3.9.5 +aiohttp-jinja2==1.6 +aiosignal==1.3.1 +async-timeout==4.0.3 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +frozenlist==1.4.1 +hypothesis==6.45.0 +idna==3.7 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +jinja2==3.1.4 +markupsafe==2.1.5 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-aiohttp==1.0.5 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +yarl==1.9.4 +zipp==3.19.2 diff --git a/.riot/requirements/a4e2e30.txt b/.riot/requirements/b9941cb.txt similarity index 51% rename from .riot/requirements/a4e2e30.txt rename to .riot/requirements/b9941cb.txt index 4f88c60cc52..d1991243cb7 100644 --- a/.riot/requirements/a4e2e30.txt +++ b/.riot/requirements/b9941cb.txt @@ -2,71 +2,71 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/a4e2e30.in +# pip-compile --no-annotate .riot/requirements/b9941cb.in # -annotated-types==0.6.0 -attrs==23.1.0 -aws-sam-translator==1.82.0 -aws-xray-sdk==2.12.1 +annotated-types==0.7.0 +attrs==23.2.0 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto==2.49.0 -boto3==1.34.6 -botocore==1.34.6 -certifi==2023.11.17 +boto3==1.34.140 +botocore==1.34.140 +certifi==2024.7.4 cffi==1.16.0 cfn-lint==0.53.1 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -cryptography==41.0.7 -docker==7.0.0 +coverage[toml]==7.5.4 +cryptography==42.0.8 +docker==7.1.0 ecdsa==0.14.1 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 idna==2.10 -importlib-metadata==7.0.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 jinja2==2.11.3 jmespath==1.0.1 -jsondiff==2.0.0 +jsondiff==2.1.1 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==3.2.0 junit-xml==1.9 markupsafe==1.1.1 mock==5.1.0 -more-itertools==10.1.0 +more-itertools==10.3.0 moto==1.3.16 networkx==2.8.8 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.5.2 -pydantic-core==2.14.5 +packaging==24.1 +pluggy==1.5.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.2 +pydantic-core==2.20.1 pynamodb==5.5.1 pyrsistent==0.20.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 -pytz==2023.3.post1 +pytz==2024.1 pyyaml==6.0.1 -requests==2.31.0 -responses==0.24.1 +requests==2.32.3 +responses==0.25.3 rsa==4.9 -s3transfer==0.10.0 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==1.26.18 +typing-extensions==4.12.2 +urllib3==1.26.19 werkzeug==2.1.2 wrapt==1.16.0 xmltodict==0.13.0 -zipp==3.17.0 +zipp==3.19.2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/baf46ab.txt b/.riot/requirements/baf46ab.txt new file mode 100644 index 00000000000..7aa767d1ec0 --- /dev/null +++ b/.riot/requirements/baf46ab.txt @@ -0,0 +1,26 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/baf46ab.in +# +async-timeout==4.0.3 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +hypothesis==6.45.0 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +redis==4.6.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +zipp==3.19.2 diff --git a/.riot/requirements/bbb3af0.txt b/.riot/requirements/bbb3af0.txt new file mode 100644 index 00000000000..b3e2bbda22e --- /dev/null +++ b/.riot/requirements/bbb3af0.txt @@ -0,0 +1,50 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/bbb3af0.in +# +amqp==5.2.0 +asgiref==3.8.1 +attrs==23.2.0 +billiard==4.2.0 +celery==5.4.0 +certifi==2024.7.4 +charset-normalizer==3.3.2 +click==8.1.7 +click-didyoumean==0.3.1 +click-plugins==1.1.1 +click-repl==0.3.0 +coverage[toml]==7.5.4 +django==5.0.6 +gevent==24.2.1 +greenlet==3.0.3 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +kombu==5.3.7 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +prompt-toolkit==3.0.47 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +python-dateutil==2.9.0.post0 +requests==2.32.3 +six==1.16.0 +sortedcontainers==2.4.0 +sqlalchemy==2.0.31 +sqlparse==0.5.0 +typing-extensions==4.12.2 +tzdata==2024.1 +urllib3==2.2.2 +vine==5.1.0 +wcwidth==0.2.13 +zope-event==5.0 +zope-interface==6.4.post2 + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/.riot/requirements/19390c2.txt b/.riot/requirements/bd14427.txt similarity index 56% rename from .riot/requirements/19390c2.txt rename to .riot/requirements/bd14427.txt index 27f2a3111aa..a919acbc021 100644 --- a/.riot/requirements/19390c2.txt +++ b/.riot/requirements/bd14427.txt @@ -2,20 +2,20 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/19390c2.in +# pip-compile --no-annotate .riot/requirements/bd14427.in # -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 redis==3.5.3 redis-py-cluster==2.1.3 diff --git a/.riot/requirements/becad20.txt b/.riot/requirements/becad20.txt new file mode 100644 index 00000000000..061f4634480 --- /dev/null +++ b/.riot/requirements/becad20.txt @@ -0,0 +1,30 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/becad20.in +# +aiohttp==3.9.5 +aiohttp-jinja2==1.5.1 +aiosignal==1.3.1 +attrs==23.2.0 +coverage[toml]==7.5.4 +frozenlist==1.4.1 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +jinja2==3.1.4 +markupsafe==2.1.5 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-aiohttp==1.0.5 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +yarl==1.9.4 diff --git a/.riot/requirements/beef8eb.txt b/.riot/requirements/beef8eb.txt deleted file mode 100644 index 22ffde69460..00000000000 --- a/.riot/requirements/beef8eb.txt +++ /dev/null @@ -1,64 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/beef8eb.in -# -aiohttp==3.9.1 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -contourpy==1.1.1 -coverage[toml]==7.3.4 -cycler==0.12.1 -et-xmlfile==1.1.0 -exceptiongroup==1.2.0 -fonttools==4.47.0 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -importlib-resources==6.1.1 -iniconfig==2.0.0 -joblib==1.3.2 -kiwisolver==1.4.5 -matplotlib==3.7.4 -mock==5.1.0 -multidict==6.0.4 -numpy==1.24.4 -openai[datalib,embeddings]==0.27.2 -openpyxl==3.1.2 -opentracing==2.4.0 -packaging==23.2 -pandas==2.0.3 -pandas-stubs==2.0.3.230814 -pillow==10.1.0 -plotly==5.18.0 -pluggy==1.3.0 -pyparsing==3.1.1 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-dateutil==2.8.2 -pytz==2023.3.post1 -pyyaml==6.0.1 -requests==2.31.0 -scikit-learn==1.3.2 -scipy==1.10.1 -six==1.16.0 -sortedcontainers==2.4.0 -tenacity==8.2.3 -threadpoolctl==3.2.0 -tomli==2.0.1 -tqdm==4.66.1 -types-pytz==2023.3.1.1 -tzdata==2023.3 -urllib3==1.26.18 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.17.0 diff --git a/.riot/requirements/c0ff15b.txt b/.riot/requirements/c0ff15b.txt deleted file mode 100644 index f3afe6067ba..00000000000 --- a/.riot/requirements/c0ff15b.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/c0ff15b.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -psycopg==3.0.18 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/c147b37.txt b/.riot/requirements/c147b37.txt deleted file mode 100644 index 9df3a97f9e0..00000000000 --- a/.riot/requirements/c147b37.txt +++ /dev/null @@ -1,21 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/c147b37.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -psycopg==3.0.18 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/c174fc5.txt b/.riot/requirements/c174fc5.txt deleted file mode 100644 index fe11594e0ee..00000000000 --- a/.riot/requirements/c174fc5.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/c174fc5.in -# -aiohttp==3.9.1 -aiohttp-jinja2==1.5.1 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 -mock==5.1.0 -multidict==6.0.4 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -yarl==1.9.4 -zipp==3.17.0 diff --git a/.riot/requirements/c18a3b5.txt b/.riot/requirements/c18a3b5.txt new file mode 100644 index 00000000000..4ee89490133 --- /dev/null +++ b/.riot/requirements/c18a3b5.txt @@ -0,0 +1,35 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/c18a3b5.in +# +aiohttp==3.9.5 +aiohttp-jinja2==1.5.1 +aiosignal==1.3.1 +async-timeout==4.0.3 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +frozenlist==1.4.1 +hypothesis==6.45.0 +idna==3.7 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +jinja2==3.1.4 +markupsafe==2.1.5 +mock==5.1.0 +multidict==6.0.5 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-aiohttp==1.0.5 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +yarl==1.9.4 +zipp==3.19.2 diff --git a/.riot/requirements/c54cef3.txt b/.riot/requirements/c54cef3.txt new file mode 100644 index 00000000000..09488a21472 --- /dev/null +++ b/.riot/requirements/c54cef3.txt @@ -0,0 +1,26 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/c54cef3.in +# +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +hypothesis==6.45.0 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +psycopg==3.2.1 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.0.1 +typing-extensions==4.12.2 +zipp==3.19.2 diff --git a/.riot/requirements/185da79.txt b/.riot/requirements/c74f6e0.txt similarity index 68% rename from .riot/requirements/185da79.txt rename to .riot/requirements/c74f6e0.txt index b10648c8e41..05e4f0a233f 100644 --- a/.riot/requirements/185da79.txt +++ b/.riot/requirements/c74f6e0.txt @@ -2,15 +2,15 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/185da79.in +# pip-compile --no-annotate .riot/requirements/c74f6e0.in # annotated-types==0.7.0 -anyio==4.3.0 +anyio==4.4.0 attrs==23.2.0 -certifi==2024.2.2 -coverage[toml]==7.5.1 +certifi==2024.7.4 +coverage[toml]==7.6.0 distro==1.9.0 -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 @@ -19,17 +19,17 @@ idna==3.7 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 -numpy==1.26.4 +numpy==2.0.0 openai[datalib,embeddings]==1.30.1 opentracing==2.4.0 -packaging==24.0 +packaging==24.1 pandas==2.2.2 -pandas-stubs==2.2.2.240514 -pillow==10.3.0 +pandas-stubs==2.2.2.240603 +pillow==9.5.0 pluggy==1.5.0 -pydantic==2.7.1 -pydantic-core==2.18.2 -pytest==8.2.1 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.2.2 pytest-asyncio==0.21.1 pytest-cov==5.0.0 pytest-mock==3.14.0 @@ -43,9 +43,9 @@ sortedcontainers==2.4.0 tomli==2.0.1 tqdm==4.66.4 types-pytz==2024.1.0.20240417 -typing-extensions==4.11.0 +typing-extensions==4.12.2 tzdata==2024.1 -urllib3==1.26.18 +urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 diff --git a/.riot/requirements/181e8d2.txt b/.riot/requirements/c7b5ba5.txt similarity index 53% rename from .riot/requirements/181e8d2.txt rename to .riot/requirements/c7b5ba5.txt index 4614b6283ec..33bb64dd56a 100644 --- a/.riot/requirements/181e8d2.txt +++ b/.riot/requirements/c7b5ba5.txt @@ -2,52 +2,53 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/181e8d2.in +# pip-compile --no-annotate .riot/requirements/c7b5ba5.in # aiobotocore==2.3.1 -aiohttp==3.9.1 +aiohttp==3.9.5 aioitertools==0.11.0 aiosignal==1.3.1 async-timeout==4.0.3 -attrs==23.1.0 +attrs==23.2.0 botocore==1.24.21 -certifi==2023.11.17 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -elastic-transport==8.11.0 -elasticsearch==8.11.1 -exceptiongroup==1.2.0 +coverage[toml]==7.5.4 +elastic-transport==8.13.1 +elasticsearch==8.14.0 +events==0.5 +exceptiongroup==1.2.1 frozenlist==1.4.1 gevent==22.10.1 greenlet==1.1.3.post0 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 +idna==3.7 +importlib-metadata==8.0.0 iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 -multidict==6.0.4 -opensearch-py==2.4.2 +multidict==6.0.5 +opensearch-py==2.6.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 +packaging==24.1 +pluggy==1.5.0 pynamodb==5.5.1 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 -requests==2.31.0 +python-dateutil==2.9.0.post0 +requests==2.32.3 six==1.16.0 sortedcontainers==2.4.0 tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==1.26.18 +typing-extensions==4.12.2 +urllib3==1.26.19 wrapt==1.16.0 yarl==1.9.4 -zipp==3.17.0 +zipp==3.19.2 zope-event==5.0 -zope-interface==6.1 +zope-interface==6.4.post2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/7e898ec.txt b/.riot/requirements/c961281.txt similarity index 52% rename from .riot/requirements/7e898ec.txt rename to .riot/requirements/c961281.txt index 0840757f541..65346f6985b 100644 --- a/.riot/requirements/7e898ec.txt +++ b/.riot/requirements/c961281.txt @@ -2,20 +2,20 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/7e898ec.in +# pip-compile --no-annotate .riot/requirements/c961281.in # -attrs==23.1.0 -coverage[toml]==7.3.4 +attrs==23.2.0 +coverage[toml]==7.5.4 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 redis==4.6.0 sortedcontainers==2.4.0 diff --git a/.riot/requirements/6e89ec4.txt b/.riot/requirements/c9aa578.txt similarity index 54% rename from .riot/requirements/6e89ec4.txt rename to .riot/requirements/c9aa578.txt index b6b1725bed3..e9a0980680d 100644 --- a/.riot/requirements/6e89ec4.txt +++ b/.riot/requirements/c9aa578.txt @@ -2,28 +2,28 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/6e89ec4.in +# pip-compile --no-annotate .riot/requirements/c9aa578.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiosignal==1.3.1 async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 tomli==2.0.1 diff --git a/.riot/requirements/ccc7691.txt b/.riot/requirements/ccc7691.txt deleted file mode 100644 index ea41d9d5529..00000000000 --- a/.riot/requirements/ccc7691.txt +++ /dev/null @@ -1,98 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/ccc7691.in -# -ai21==2.9.1 -ai21-tokenizer==0.11.2 -aiohttp==3.9.5 -aiosignal==1.3.1 -annotated-types==0.7.0 -anthropic==0.31.0 -anyio==4.4.0 -attrs==23.2.0 -boto3==1.34.143 -botocore==1.34.143 -certifi==2024.7.4 -charset-normalizer==3.3.2 -cohere==5.5.8 -coverage[toml]==7.6.0 -dataclasses-json==0.6.7 -defusedxml==0.7.1 -distro==1.9.0 -exceptiongroup==1.2.1 -fastavro==1.9.5 -filelock==3.15.4 -frozenlist==1.4.1 -fsspec==2024.6.1 -greenlet==3.0.3 -h11==0.14.0 -httpcore==1.0.5 -httpx==0.27.0 -httpx-sse==0.4.0 -huggingface-hub==0.23.4 -hypothesis==6.45.0 -idna==3.7 -iniconfig==2.0.0 -jiter==0.5.0 -jmespath==1.0.1 -jsonpatch==1.33 -jsonpointer==3.0.0 -langchain==0.2.7 -langchain-anthropic==0.1.19 -langchain-aws==0.1.10 -langchain-cohere==0.1.9 -langchain-community==0.2.7 -langchain-core==0.2.15 -langchain-experimental==0.0.62 -langchain-openai==0.1.15 -langchain-pinecone==0.1.1 -langchain-text-splitters==0.2.2 -langsmith==0.1.85 -marshmallow==3.21.3 -mock==5.1.0 -multidict==6.0.5 -mypy-extensions==1.0.0 -numexpr==2.10.1 -numpy==1.26.4 -openai==1.35.13 -opentracing==2.4.0 -orjson==3.10.6 -packaging==24.1 -pandas==2.2.2 -parameterized==0.9.0 -pinecone-client==3.2.2 -pluggy==1.5.0 -psutil==6.0.0 -pydantic==2.8.2 -pydantic-core==2.20.1 -pytest==8.2.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -pytz==2024.1 -pyyaml==6.0.1 -regex==2024.5.15 -requests==2.32.3 -s3transfer==0.10.2 -sentencepiece==0.2.0 -six==1.16.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -sqlalchemy==2.0.31 -tabulate==0.9.0 -tenacity==8.5.0 -tiktoken==0.7.0 -tokenizers==0.19.1 -tqdm==4.66.4 -types-requests==2.32.0.20240622 -typing-extensions==4.12.2 -typing-inspect==0.9.0 -tzdata==2024.1 -urllib3==2.2.2 -vcrpy==6.0.1 -wrapt==1.16.0 -yarl==1.9.4 diff --git a/.riot/requirements/cd2e4ea.txt b/.riot/requirements/cd2e4ea.txt new file mode 100644 index 00000000000..21c29f1243f --- /dev/null +++ b/.riot/requirements/cd2e4ea.txt @@ -0,0 +1,53 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/cd2e4ea.in +# +annotated-types==0.7.0 +anyio==3.7.1 +attrs==23.2.0 +certifi==2024.7.4 +coverage[toml]==7.6.0 +distro==1.9.0 +exceptiongroup==1.2.2 +h11==0.14.0 +httpcore==1.0.5 +httpx==0.27.0 +hypothesis==6.45.0 +idna==3.7 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +mock==5.1.0 +multidict==6.0.5 +numpy==2.0.0 +openai[datalib,embeddings]==1.1.1 +opentracing==2.4.0 +packaging==24.1 +pandas==2.2.2 +pandas-stubs==2.2.2.240603 +pillow==9.5.0 +pluggy==1.5.0 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +python-dateutil==2.9.0.post0 +pytz==2024.1 +pyyaml==6.0.1 +six==1.16.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tomli==2.0.1 +tqdm==4.66.4 +types-pytz==2024.1.0.20240417 +typing-extensions==4.12.2 +tzdata==2024.1 +urllib3==1.26.19 +vcrpy==4.2.1 +wrapt==1.16.0 +yarl==1.9.4 +zipp==3.19.2 diff --git a/.riot/requirements/1e147db.txt b/.riot/requirements/ce6cd33.txt similarity index 92% rename from .riot/requirements/1e147db.txt rename to .riot/requirements/ce6cd33.txt index 063f0e44c08..ff61eb1ddc8 100644 --- a/.riot/requirements/1e147db.txt +++ b/.riot/requirements/ce6cd33.txt @@ -2,13 +2,13 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1e147db.in +# pip-compile --no-annotate .riot/requirements/ce6cd33.in # amqp==5.2.0 attrs==23.2.0 billiard==4.2.0 celery==5.4.0 -certifi==2024.6.2 +certifi==2024.7.4 charset-normalizer==3.3.2 click==8.1.7 click-didyoumean==0.3.1 diff --git a/.riot/requirements/cea6065.txt b/.riot/requirements/cea6065.txt index 3b046941ea8..599683a499b 100644 --- a/.riot/requirements/cea6065.txt +++ b/.riot/requirements/cea6065.txt @@ -4,69 +4,69 @@ # # pip-compile --no-annotate .riot/requirements/cea6065.in # -annotated-types==0.6.0 -attrs==23.1.0 -aws-sam-translator==1.82.0 -aws-xray-sdk==2.12.1 +annotated-types==0.7.0 +attrs==23.2.0 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 boto==2.49.0 -boto3==1.34.6 -botocore==1.34.6 -certifi==2023.11.17 +boto3==1.34.139 +botocore==1.34.139 +certifi==2024.6.2 cffi==1.16.0 cfn-lint==0.53.1 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -cryptography==41.0.7 -docker==7.0.0 +coverage[toml]==7.5.4 +cryptography==42.0.8 +docker==7.1.0 ecdsa==0.14.1 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 idna==2.10 -importlib-metadata==7.0.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 jinja2==2.11.3 jmespath==1.0.1 -jsondiff==2.0.0 +jsondiff==2.1.1 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==3.2.0 junit-xml==1.9 markupsafe==1.1.1 mock==5.1.0 -more-itertools==10.1.0 +more-itertools==10.3.0 moto==1.3.16 networkx==2.8.8 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.5.2 -pydantic-core==2.14.5 +packaging==24.1 +pluggy==1.5.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.0 +pydantic-core==2.20.0 pynamodb==5.5.1 pyrsistent==0.20.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 -pytz==2023.3.post1 +pytz==2024.1 pyyaml==6.0.1 -requests==2.31.0 -responses==0.24.1 +requests==2.32.3 +responses==0.25.3 rsa==4.9 -s3transfer==0.10.0 +s3transfer==0.10.2 six==1.16.0 sortedcontainers==2.4.0 sshpubkeys==3.3.1 tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==1.26.18 +typing-extensions==4.12.2 +urllib3==1.26.19 werkzeug==2.1.2 wrapt==1.16.0 xmltodict==0.13.0 -zipp==3.17.0 +zipp==3.19.2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/d2b8f24.txt b/.riot/requirements/d2b8f24.txt new file mode 100644 index 00000000000..6f3b14c4a98 --- /dev/null +++ b/.riot/requirements/d2b8f24.txt @@ -0,0 +1,81 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/d2b8f24.in +# +annotated-types==0.7.0 +attrs==23.2.0 +aws-sam-translator==1.89.0 +aws-xray-sdk==2.14.0 +boto3==1.34.49 +botocore==1.34.49 +certifi==2024.7.4 +cffi==1.16.0 +cfn-lint==1.7.0 +charset-normalizer==3.3.2 +coverage[toml]==7.6.0 +cryptography==42.0.8 +docker==7.1.0 +ecdsa==0.19.0 +graphql-core==3.2.3 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +jinja2==3.1.4 +jmespath==1.0.1 +jsondiff==2.1.2 +jsonpatch==1.33 +jsonpointer==3.0.0 +jsonschema==4.23.0 +jsonschema-path==0.3.3 +jsonschema-specifications==2023.12.1 +lazy-object-proxy==1.10.0 +markupsafe==2.1.5 +mock==5.1.0 +moto[all]==4.2.14 +mpmath==1.3.0 +multidict==6.0.5 +multipart==0.2.5 +networkx==3.3 +openapi-schema-validator==0.6.2 +openapi-spec-validator==0.7.1 +opentracing==2.4.0 +packaging==24.1 +pathable==0.4.3 +pluggy==1.5.0 +py-partiql-parser==0.5.0 +pyasn1==0.6.0 +pycparser==2.22 +pydantic==2.8.2 +pydantic-core==2.20.1 +pyparsing==3.1.2 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +python-dateutil==2.9.0.post0 +python-jose[cryptography]==3.3.0 +pyyaml==6.0.1 +referencing==0.35.1 +regex==2024.5.15 +requests==2.32.3 +responses==0.25.3 +rfc3339-validator==0.1.4 +rpds-py==0.19.0 +rsa==4.9 +s3transfer==0.10.2 +six==1.16.0 +sortedcontainers==2.4.0 +sshpubkeys==3.3.1 +sympy==1.13.0 +typing-extensions==4.12.2 +urllib3==2.0.7 +vcrpy==6.0.1 +werkzeug==3.0.3 +wrapt==1.16.0 +xmltodict==0.13.0 +yarl==1.9.4 + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/.riot/requirements/7aeeb05.txt b/.riot/requirements/d47114f.txt similarity index 73% rename from .riot/requirements/7aeeb05.txt rename to .riot/requirements/d47114f.txt index f47927a62fb..f1a57da54e7 100644 --- a/.riot/requirements/7aeeb05.txt +++ b/.riot/requirements/d47114f.txt @@ -1,27 +1,27 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --no-annotate .riot/requirements/7aeeb05.in +# pip-compile --no-annotate .riot/requirements/d47114f.in # -ai21==2.9.1 +ai21==2.9.2 ai21-tokenizer==0.11.2 aiohttp==3.9.5 aiosignal==1.3.1 annotated-types==0.7.0 -anthropic==0.31.0 +anthropic==0.31.2 anyio==4.4.0 attrs==23.2.0 -boto3==1.34.143 -botocore==1.34.143 +boto3==1.34.51 +botocore==1.34.51 certifi==2024.7.4 charset-normalizer==3.3.2 -cohere==5.5.8 +cohere==5.6.1 coverage[toml]==7.6.0 dataclasses-json==0.6.7 defusedxml==0.7.1 distro==1.9.0 -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 fastavro==1.9.5 filelock==3.15.4 frozenlist==1.4.1 @@ -31,7 +31,7 @@ h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 httpx-sse==0.4.0 -huggingface-hub==0.23.4 +huggingface-hub==0.24.0 hypothesis==6.45.0 idna==3.7 iniconfig==2.0.0 @@ -45,30 +45,31 @@ langchain-aws==0.1.6 langchain-cohere==0.1.8 langchain-core==0.2.0 langchain-openai==0.1.7 -langchain-pinecone==0.1.1 +langchain-pinecone==0.1.2 langchain-text-splitters==0.2.1 -langsmith==0.1.85 +langsmith==0.1.92 marshmallow==3.21.3 mock==5.1.0 multidict==6.0.5 mypy-extensions==1.0.0 -numexpr==2.10.1 +numexpr==2.8.5 numpy==1.26.4 -openai==1.35.13 +openai==1.35.15 opentracing==2.4.0 orjson==3.10.6 packaging==23.2 parameterized==0.9.0 -pinecone-client==3.2.2 +pinecone-client==4.1.2 +pinecone-plugin-interface==0.0.7 pluggy==1.5.0 psutil==6.0.0 pydantic==2.8.2 pydantic-core==2.20.1 pytest==8.2.2 -pytest-asyncio==0.21.1 +pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.10.1 python-dateutil==2.9.0.post0 pyyaml==6.0.1 regex==2024.5.15 @@ -83,10 +84,10 @@ tenacity==8.5.0 tiktoken==0.7.0 tokenizers==0.19.1 tqdm==4.66.4 -types-requests==2.32.0.20240622 +types-requests==2.32.0.20240712 typing-extensions==4.12.2 typing-inspect==0.9.0 -urllib3==2.2.2 +urllib3==2.0.7 vcrpy==6.0.1 wrapt==1.16.0 yarl==1.9.4 diff --git a/.riot/requirements/1614f17.txt b/.riot/requirements/d68f919.txt similarity index 81% rename from .riot/requirements/1614f17.txt rename to .riot/requirements/d68f919.txt index b6aff88a5b8..5949407b547 100644 --- a/.riot/requirements/1614f17.txt +++ b/.riot/requirements/d68f919.txt @@ -2,19 +2,19 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1614f17.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/d68f919.in # attrs==23.2.0 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -googleapis-common-protos==1.62.0 +exceptiongroup==1.2.1 +googleapis-common-protos==1.63.2 grpcio==1.34.1 hypothesis==6.45.0 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 protobuf==4.24.4 pytest==7.4.4 diff --git a/.riot/requirements/150eea5.txt b/.riot/requirements/d6df33b.txt similarity index 86% rename from .riot/requirements/150eea5.txt rename to .riot/requirements/d6df33b.txt index b60305b80e0..f0e2e5a62d3 100644 --- a/.riot/requirements/150eea5.txt +++ b/.riot/requirements/d6df33b.txt @@ -2,19 +2,19 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/150eea5.in +# pip-compile --no-annotate .riot/requirements/d6df33b.in # -ai21==2.9.1 +ai21==2.9.2 ai21-tokenizer==0.11.2 aiohttp==3.9.5 aiosignal==1.3.1 annotated-types==0.7.0 -anthropic==0.31.0 +anthropic==0.31.2 anyio==4.4.0 async-timeout==4.0.3 attrs==23.2.0 -boto3==1.34.144 -botocore==1.34.144 +boto3==1.34.51 +botocore==1.34.51 certifi==2024.7.4 charset-normalizer==3.3.2 cohere==5.4.0 @@ -33,7 +33,7 @@ h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 httpx-sse==0.4.0 -huggingface-hub==0.23.4 +huggingface-hub==0.24.0 hypothesis==6.45.0 idna==3.7 iniconfig==2.0.0 @@ -50,12 +50,12 @@ langchain-core==0.1.52 langchain-openai==0.1.6 langchain-pinecone==0.1.0 langchain-text-splitters==0.0.2 -langsmith==0.1.85 +langsmith==0.1.92 marshmallow==3.21.3 mock==5.1.0 multidict==6.0.5 mypy-extensions==1.0.0 -numexpr==2.10.1 +numexpr==2.8.5 numpy==1.26.4 openai==1.30.3 opentracing==2.4.0 @@ -67,10 +67,10 @@ psutil==6.0.0 pydantic==2.8.2 pydantic-core==2.20.1 pytest==8.2.2 -pytest-asyncio==0.21.1 +pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.10.1 python-dateutil==2.9.0.post0 pyyaml==6.0.1 regex==2024.5.15 @@ -89,7 +89,7 @@ tqdm==4.66.4 types-requests==2.32.0.20240712 typing-extensions==4.12.2 typing-inspect==0.9.0 -urllib3==2.2.2 +urllib3==2.0.7 vcrpy==6.0.1 wrapt==1.16.0 yarl==1.9.4 diff --git a/.riot/requirements/19cac45.txt b/.riot/requirements/ddba314.txt similarity index 53% rename from .riot/requirements/19cac45.txt rename to .riot/requirements/ddba314.txt index 914ba541921..ee9ef750495 100644 --- a/.riot/requirements/19cac45.txt +++ b/.riot/requirements/ddba314.txt @@ -2,46 +2,47 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/19cac45.in +# pip-compile --no-annotate .riot/requirements/ddba314.in # aiobotocore==2.3.1 -aiohttp==3.9.1 +aiohttp==3.9.5 aioitertools==0.11.0 aiosignal==1.3.1 -attrs==23.1.0 +attrs==23.2.0 botocore==1.24.21 -certifi==2023.11.17 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -elastic-transport==8.11.0 -elasticsearch==8.11.1 +coverage[toml]==7.5.4 +elastic-transport==8.13.1 +elasticsearch==8.14.0 +events==0.5 frozenlist==1.4.1 -gevent==23.9.1 -greenlet==3.0.2 +gevent==24.2.1 +greenlet==3.0.3 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 -multidict==6.0.4 -opensearch-py==2.4.2 +multidict==6.0.5 +opensearch-py==2.6.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 +packaging==24.1 +pluggy==1.5.0 pynamodb==5.5.1 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-dateutil==2.8.2 -requests==2.31.0 +python-dateutil==2.9.0.post0 +requests==2.32.3 six==1.16.0 sortedcontainers==2.4.0 -urllib3==1.26.18 +urllib3==1.26.19 wrapt==1.16.0 yarl==1.9.4 zope-event==5.0 -zope-interface==6.1 +zope-interface==6.4.post2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/de6c032.txt b/.riot/requirements/de6c032.txt deleted file mode 100644 index 32c02363cfc..00000000000 --- a/.riot/requirements/de6c032.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/de6c032.in -# -aiohttp==3.9.1 -aiohttp-jinja2==1.6 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 -mock==5.1.0 -multidict==6.0.4 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -yarl==1.9.4 -zipp==3.17.0 diff --git a/.riot/requirements/5d8701b.txt b/.riot/requirements/e092ac7.txt similarity index 54% rename from .riot/requirements/5d8701b.txt rename to .riot/requirements/e092ac7.txt index 343ba4b8130..47900b99f76 100644 --- a/.riot/requirements/5d8701b.txt +++ b/.riot/requirements/e092ac7.txt @@ -2,28 +2,28 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/5d8701b.in +# pip-compile --no-annotate .riot/requirements/e092ac7.in # -aiohttp==3.9.1 +aiohttp==3.9.5 aiosignal==1.3.1 async-timeout==4.0.3 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.7 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 tomli==2.0.1 diff --git a/.riot/requirements/e2c6900.txt b/.riot/requirements/e2c6900.txt new file mode 100644 index 00000000000..f3cb21179d5 --- /dev/null +++ b/.riot/requirements/e2c6900.txt @@ -0,0 +1,33 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/e2c6900.in +# +anyio==4.4.0 +attrs==23.2.0 +certifi==2024.6.2 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +h11==0.14.0 +httpcore==0.16.3 +httpx==0.23.3 +hypothesis==6.45.0 +idna==3.7 +importlib-metadata==8.0.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +rfc3986[idna2008]==1.5.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tomli==2.0.1 +typing-extensions==4.12.2 +zipp==3.19.2 diff --git a/.riot/requirements/e328453.txt b/.riot/requirements/e328453.txt deleted file mode 100644 index 18bca54055d..00000000000 --- a/.riot/requirements/e328453.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/e328453.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -psycopg==3.0.18 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 diff --git a/.riot/requirements/e59b1f6.txt b/.riot/requirements/e59b1f6.txt new file mode 100644 index 00000000000..f6e3f50ff0b --- /dev/null +++ b/.riot/requirements/e59b1f6.txt @@ -0,0 +1,31 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/e59b1f6.in +# +anyio==4.4.0 +attrs==23.2.0 +certifi==2024.6.2 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 +h11==0.14.0 +httpcore==0.16.3 +httpx==0.23.3 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +rfc3986[idna2008]==1.5.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tomli==2.0.1 +typing-extensions==4.12.2 diff --git a/.riot/requirements/385eb37.txt b/.riot/requirements/e6619c9.txt similarity index 78% rename from .riot/requirements/385eb37.txt rename to .riot/requirements/e6619c9.txt index d70d355ee32..d6eb30c32e2 100644 --- a/.riot/requirements/385eb37.txt +++ b/.riot/requirements/e6619c9.txt @@ -2,30 +2,30 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/385eb37.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/e6619c9.in # aiohttp==3.8.6 aiohttp-jinja2==1.5.1 aiosignal==1.3.1 async-timeout==4.0.3 asynctest==0.13.0 -attrs==23.1.0 +attrs==23.2.0 charset-normalizer==3.3.2 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 frozenlist==1.3.3 hypothesis==6.45.0 -idna==3.6 +idna==3.7 importlib-metadata==6.7.0 iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 +jinja2==3.1.4 +markupsafe==2.1.5 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 -pytest==7.4.3 +pytest==7.4.4 pytest-aiohttp==1.0.5 pytest-asyncio==0.21.1 pytest-cov==4.1.0 diff --git a/.riot/requirements/1b61411.txt b/.riot/requirements/e68fea2.txt similarity index 66% rename from .riot/requirements/1b61411.txt rename to .riot/requirements/e68fea2.txt index d260abc3c79..37238bf6a05 100644 --- a/.riot/requirements/1b61411.txt +++ b/.riot/requirements/e68fea2.txt @@ -2,33 +2,33 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1b61411.in +# pip-compile --no-annotate .riot/requirements/e68fea2.in # attrs==23.2.0 -coverage[toml]==7.5.1 -exceptiongroup==1.2.1 +coverage[toml]==7.6.0 +exceptiongroup==1.2.2 gevent==24.2.1 greenlet==3.0.3 httpretty==1.1.4 hypothesis==6.45.0 -importlib-metadata==7.1.0 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.0 +packaging==24.1 pluggy==1.5.0 -pyfakefs==5.5.0 -pytest==8.2.1 -pytest-asyncio==0.21.2 +pyfakefs==5.6.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 python-json-logger==2.0.7 sortedcontainers==2.4.0 tomli==2.0.1 -zipp==3.18.2 +zipp==3.19.2 zope-event==5.0 -zope-interface==6.4 +zope-interface==6.4.post2 # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/.riot/requirements/ede4798.txt b/.riot/requirements/ede4798.txt deleted file mode 100644 index c04cbe4d4b3..00000000000 --- a/.riot/requirements/ede4798.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/ede4798.in -# -attrs==23.2.0 -coverage[toml]==7.4.2 -exceptiongroup==1.2.0 -googleapis-common-protos==1.62.0 -grpcio==1.59.3 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -protobuf==4.25.3 -pytest==8.0.1 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/ee80c7e.txt b/.riot/requirements/ee80c7e.txt new file mode 100644 index 00000000000..ad457b400ec --- /dev/null +++ b/.riot/requirements/ee80c7e.txt @@ -0,0 +1,30 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/ee80c7e.in +# +attrs==23.2.0 +blinker==1.8.2 +cachelib==0.9.0 +click==7.1.2 +coverage[toml]==7.5.4 +flask==1.1.4 +flask-caching==2.3.0 +hypothesis==6.45.0 +iniconfig==2.0.0 +itsdangerous==1.1.0 +jinja2==2.11.3 +markupsafe==1.1.1 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +python-memcached==1.62 +redis==5.0.7 +sortedcontainers==2.4.0 +werkzeug==1.0.1 diff --git a/.riot/requirements/1bd152d.txt b/.riot/requirements/f0bc737.txt similarity index 80% rename from .riot/requirements/1bd152d.txt rename to .riot/requirements/f0bc737.txt index a706da72acc..fc4d0547279 100644 --- a/.riot/requirements/1bd152d.txt +++ b/.riot/requirements/f0bc737.txt @@ -2,24 +2,24 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1bd152d.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/f0bc737.in # annotated-types==0.5.0 -attrs==23.1.0 +attrs==23.2.0 aws-sam-translator==1.82.0 -aws-xray-sdk==2.12.1 +aws-xray-sdk==2.14.0 boto==2.49.0 boto3==1.33.13 botocore==1.33.13 -certifi==2023.11.17 +certifi==2024.7.4 cffi==1.15.1 cfn-lint==0.53.1 charset-normalizer==3.3.2 coverage[toml]==7.2.7 -cryptography==41.0.7 +cryptography==42.0.8 docker==6.1.3 ecdsa==0.14.1 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 hypothesis==6.45.0 idna==2.10 importlib-metadata==6.7.0 @@ -28,7 +28,7 @@ jinja2==2.11.3 jmespath==1.0.1 jsondiff==2.0.0 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==3.2.0 junit-xml==1.9 markupsafe==1.1.1 @@ -37,21 +37,21 @@ more-itertools==9.1.0 moto==1.3.16 networkx==2.6.3 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 pyasn1==0.5.1 pycparser==2.21 -pydantic==2.5.2 -pydantic-core==2.14.5 +pydantic==2.5.3 +pydantic-core==2.14.6 pynamodb==5.5.1 pyrsistent==0.19.3 -pytest==7.4.3 +pytest==7.4.4 pytest-cov==4.1.0 pytest-mock==3.11.1 pytest-randomly==3.12.0 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 python-jose[cryptography]==3.3.0 -pytz==2023.3.post1 +pytz==2024.1 pyyaml==6.0.1 requests==2.31.0 responses==0.23.3 @@ -63,7 +63,7 @@ sshpubkeys==3.3.1 tomli==2.0.1 types-pyyaml==6.0.12.12 typing-extensions==4.7.1 -urllib3==1.26.18 +urllib3==1.26.19 websocket-client==1.6.1 werkzeug==2.1.2 wrapt==1.16.0 diff --git a/.riot/requirements/f1199a8.txt b/.riot/requirements/f1199a8.txt deleted file mode 100644 index 885e6d94631..00000000000 --- a/.riot/requirements/f1199a8.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/f1199a8.in -# -anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -h11==0.12.0 -httpcore==0.14.7 -httpx==0.22.0 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -rfc3986[idna2008]==1.5.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/f1c37b1.txt b/.riot/requirements/f1c37b1.txt new file mode 100644 index 00000000000..5fe13450a50 --- /dev/null +++ b/.riot/requirements/f1c37b1.txt @@ -0,0 +1,51 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/f1c37b1.in +# +annotated-types==0.7.0 +anyio==3.7.1 +attrs==23.2.0 +certifi==2024.7.4 +coverage[toml]==7.6.0 +distro==1.9.0 +exceptiongroup==1.2.2 +h11==0.14.0 +httpcore==1.0.5 +httpx==0.27.0 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +mock==5.1.0 +multidict==6.0.5 +numpy==2.0.0 +openai[datalib,embeddings]==1.1.1 +opentracing==2.4.0 +packaging==24.1 +pandas==2.2.2 +pandas-stubs==2.2.2.240603 +pillow==9.5.0 +pluggy==1.5.0 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.2.2 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +python-dateutil==2.9.0.post0 +pytz==2024.1 +pyyaml==6.0.1 +six==1.16.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tomli==2.0.1 +tqdm==4.66.4 +types-pytz==2024.1.0.20240417 +typing-extensions==4.12.2 +tzdata==2024.1 +urllib3==1.26.19 +vcrpy==4.2.1 +wrapt==1.16.0 +yarl==1.9.4 diff --git a/.riot/requirements/13a122f.txt b/.riot/requirements/f4b1bd3.txt similarity index 52% rename from .riot/requirements/13a122f.txt rename to .riot/requirements/f4b1bd3.txt index 159ede2974d..06f7e7334bd 100644 --- a/.riot/requirements/13a122f.txt +++ b/.riot/requirements/f4b1bd3.txt @@ -2,25 +2,25 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/13a122f.in +# pip-compile --no-annotate .riot/requirements/f4b1bd3.in # async-timeout==4.0.3 attrs==23.2.0 -coverage[toml]==7.4.0 -exceptiongroup==1.2.0 +coverage[toml]==7.5.4 +exceptiongroup==1.2.1 hypothesis==6.45.0 -importlib-metadata==7.0.1 +importlib-metadata==8.0.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 redis==5.0.1 sortedcontainers==2.4.0 tomli==2.0.1 -zipp==3.17.0 +zipp==3.19.2 diff --git a/.riot/requirements/f554053.txt b/.riot/requirements/f554053.txt deleted file mode 100644 index 05cb529f801..00000000000 --- a/.riot/requirements/f554053.txt +++ /dev/null @@ -1,49 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/f554053.in -# -annotated-types==0.6.0 -anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.3.4 -distro==1.8.0 -h11==0.14.0 -httpcore==1.0.2 -httpx==0.26.0 -hypothesis==6.45.0 -idna==3.6 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.4 -numpy==1.26.2 -openai[datalib,embeddings]==1.1.1 -opentracing==2.4.0 -packaging==23.2 -pandas==2.1.4 -pandas-stubs==2.1.4.231218 -pillow==10.1.0 -pluggy==1.3.0 -pydantic==2.5.2 -pydantic-core==2.14.5 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-dateutil==2.8.2 -pytz==2023.3.post1 -pyyaml==6.0.1 -six==1.16.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tqdm==4.66.1 -types-pytz==2023.3.1.1 -typing-extensions==4.9.0 -tzdata==2023.3 -urllib3==1.26.18 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 diff --git a/.riot/requirements/1eac0e3.txt b/.riot/requirements/f630df9.txt similarity index 81% rename from .riot/requirements/1eac0e3.txt rename to .riot/requirements/f630df9.txt index 024950d9a88..765af18d4c7 100644 --- a/.riot/requirements/1eac0e3.txt +++ b/.riot/requirements/f630df9.txt @@ -2,27 +2,27 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1eac0e3.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/f630df9.in # aiohttp==3.8.6 aiosignal==1.3.1 async-timeout==4.0.3 asynctest==0.13.0 -attrs==23.1.0 +attrs==23.2.0 charset-normalizer==3.3.2 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.1 frozenlist==1.3.3 hypothesis==6.45.0 -idna==3.6 +idna==3.7 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 -pytest==7.4.3 +pytest==7.4.4 pytest-aiohttp==1.0.5 pytest-asyncio==0.21.1 pytest-cov==4.1.0 diff --git a/.riot/requirements/f680e00.txt b/.riot/requirements/f680e00.txt deleted file mode 100644 index ca487883b7c..00000000000 --- a/.riot/requirements/f680e00.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/f680e00.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -psycopg==3.1.16 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -typing-extensions==4.9.0 diff --git a/.riot/requirements/17e3783.txt b/.riot/requirements/f73b199.txt similarity index 51% rename from .riot/requirements/17e3783.txt rename to .riot/requirements/f73b199.txt index 16d3da17e0d..b03c6e3f043 100644 --- a/.riot/requirements/17e3783.txt +++ b/.riot/requirements/f73b199.txt @@ -2,23 +2,23 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/17e3783.in +# pip-compile --no-annotate .riot/requirements/f73b199.in # attrs==23.2.0 -coverage[toml]==7.4.2 -googleapis-common-protos==1.62.0 +coverage[toml]==7.5.4 +googleapis-common-protos==1.63.2 grpcio==1.49.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -protobuf==4.25.3 -pytest==8.0.1 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +protobuf==5.27.2 +pytest==8.2.2 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 six==1.16.0 sortedcontainers==2.4.0 diff --git a/.riot/requirements/1b0e657.txt b/.riot/requirements/f7c30a0.txt similarity index 69% rename from .riot/requirements/1b0e657.txt rename to .riot/requirements/f7c30a0.txt index efc4db0b9f4..39dc4709cbf 100644 --- a/.riot/requirements/1b0e657.txt +++ b/.riot/requirements/f7c30a0.txt @@ -2,49 +2,49 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1b0e657.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/f7c30a0.in # annotated-types==0.5.0 anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 +attrs==23.2.0 +certifi==2024.7.4 coverage[toml]==7.2.7 -distro==1.8.0 -exceptiongroup==1.2.0 +distro==1.9.0 +exceptiongroup==1.2.2 h11==0.14.0 httpcore==0.17.3 httpx==0.24.1 hypothesis==6.45.0 -idna==3.6 +idna==3.7 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.4 +multidict==6.0.5 numpy==1.21.6 openai[datalib,embeddings]==1.1.1 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pandas==1.3.5 pandas-stubs==1.2.0.62 pillow==9.5.0 pluggy==1.2.0 -pydantic==2.5.2 -pydantic-core==2.14.5 -pytest==7.4.3 +pydantic==2.5.3 +pydantic-core==2.14.6 +pytest==7.4.4 pytest-asyncio==0.21.1 pytest-cov==4.1.0 pytest-mock==3.11.1 pytest-randomly==3.12.0 -python-dateutil==2.8.2 -pytz==2023.3.post1 +python-dateutil==2.9.0.post0 +pytz==2024.1 pyyaml==6.0.1 six==1.16.0 -sniffio==1.3.0 +sniffio==1.3.1 sortedcontainers==2.4.0 tomli==2.0.1 -tqdm==4.66.1 +tqdm==4.66.4 typing-extensions==4.7.1 -urllib3==1.26.18 +urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 diff --git a/.riot/requirements/fa9267f.txt b/.riot/requirements/fa9267f.txt new file mode 100644 index 00000000000..80c862d47e3 --- /dev/null +++ b/.riot/requirements/fa9267f.txt @@ -0,0 +1,21 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/fa9267f.in +# +asyncpg==0.29.0 +attrs==23.2.0 +coverage[toml]==7.5.4 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.2.2 +pytest-asyncio==0.21.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/fd7ae89.txt b/.riot/requirements/fd7ae89.txt deleted file mode 100644 index f04dfba6c6b..00000000000 --- a/.riot/requirements/fd7ae89.txt +++ /dev/null @@ -1,100 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/fd7ae89.in -# -ai21==2.9.1 -ai21-tokenizer==0.11.2 -aiohttp==3.9.5 -aiosignal==1.3.1 -annotated-types==0.7.0 -anthropic==0.31.0 -anyio==4.4.0 -async-timeout==4.0.3 -attrs==23.2.0 -boto3==1.34.143 -botocore==1.34.143 -certifi==2024.7.4 -charset-normalizer==3.3.2 -cohere==5.5.8 -coverage[toml]==7.6.0 -dataclasses-json==0.6.7 -defusedxml==0.7.1 -distro==1.9.0 -exceptiongroup==1.2.1 -fastavro==1.9.5 -filelock==3.15.4 -frozenlist==1.4.1 -fsspec==2024.6.1 -greenlet==3.0.3 -h11==0.14.0 -httpcore==1.0.5 -httpx==0.27.0 -httpx-sse==0.4.0 -huggingface-hub==0.23.4 -hypothesis==6.45.0 -idna==3.7 -iniconfig==2.0.0 -jiter==0.5.0 -jmespath==1.0.1 -jsonpatch==1.33 -jsonpointer==3.0.0 -langchain==0.2.7 -langchain-anthropic==0.1.19 -langchain-aws==0.1.10 -langchain-cohere==0.1.9 -langchain-community==0.2.7 -langchain-core==0.2.15 -langchain-experimental==0.0.62 -langchain-openai==0.1.15 -langchain-pinecone==0.1.1 -langchain-text-splitters==0.2.2 -langsmith==0.1.85 -marshmallow==3.21.3 -mock==5.1.0 -multidict==6.0.5 -mypy-extensions==1.0.0 -numexpr==2.10.1 -numpy==1.26.4 -openai==1.35.13 -opentracing==2.4.0 -orjson==3.10.6 -packaging==24.1 -pandas==2.2.2 -parameterized==0.9.0 -pinecone-client==3.2.2 -pluggy==1.5.0 -psutil==6.0.0 -pydantic==2.8.2 -pydantic-core==2.20.1 -pytest==8.2.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -pytz==2024.1 -pyyaml==6.0.1 -regex==2024.5.15 -requests==2.32.3 -s3transfer==0.10.2 -sentencepiece==0.2.0 -six==1.16.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -sqlalchemy==2.0.31 -tabulate==0.9.0 -tenacity==8.5.0 -tiktoken==0.7.0 -tokenizers==0.19.1 -tomli==2.0.1 -tqdm==4.66.4 -types-requests==2.32.0.20240622 -typing-extensions==4.12.2 -typing-inspect==0.9.0 -tzdata==2024.1 -urllib3==2.2.2 -vcrpy==6.0.1 -wrapt==1.16.0 -yarl==1.9.4 diff --git a/riotfile.py b/riotfile.py index ed74b32d1bc..383a7b70142 100644 --- a/riotfile.py +++ b/riotfile.py @@ -190,7 +190,7 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): ), Venv( name="appsec_iast_tdd_propagation", - pys=select_pys(min_version="3.11", max_version="3.11"), + pys=select_pys(min_version="3.11"), command="pytest tests/appsec/iast_tdd_propagation/", pkgs={ "coverage": latest, @@ -406,19 +406,31 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): pkgs={ "httpretty": latest, "gevent": latest, - "pytest-asyncio": "~=0.21.1", "pytest-randomly": latest, "python-json-logger": "==2.0.7", "pyfakefs": latest, }, - pys=select_pys(min_version="3.7", max_version="3.12"), + venvs=[ + Venv( + pys="3.7", + pkgs={ + "pytest-asyncio": "~=0.21.1", + }, + ), + Venv( + pys=select_pys(min_version="3.8"), + pkgs={ + "pytest-asyncio": "~=0.23.7", + }, + ), + ], ), Venv( name="gevent", command="pytest {cmdargs} tests/contrib/gevent", pkgs={ "elasticsearch": latest, - "pynamodb": latest, + "pynamodb": "<6.0", "pytest-randomly": latest, }, venvs=[ @@ -454,13 +466,17 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): }, ), Venv( - # gevent added support for Python 3.11 in 22.8.0 pys="3.11", pkgs={ "gevent": ["~=22.10.0", latest], }, ), - # FIXME[python-3.12]: blocked on aiohttp release https://github.com/aio-libs/aiohttp/issues/7229 + Venv( + pys=select_pys(min_version="3.12"), + pkgs={ + "gevent": [latest], + }, + ), ], ), ], @@ -861,15 +877,28 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): # other versions as the main purpose of these tests is to ensure # an error-free interaction between Django and Celery. We find # that we currently have no reasons for expanding this matrix. - "django": "==2.2.1", - "sqlalchemy": "~=1.2.18", "celery": latest, "gevent": latest, "requests": latest, "typing-extensions": latest, "pytest-randomly": latest, }, - pys=select_pys(min_version="3.8", max_version="3.11"), + venvs=[ + Venv( + pys=select_pys(min_version="3.8", max_version="3.11"), + pkgs={ + "sqlalchemy": "~=1.2.18", + "django": "==2.2.1", + }, + ), + Venv( + pys=select_pys(min_version="3.12"), + pkgs={ + "sqlalchemy": latest, + "django": latest, + }, + ), + ], ), Venv( name="dramatiq", @@ -1073,7 +1102,6 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): ], ), Venv( - pys=select_pys(min_version="3.7", max_version="3.11"), pkgs={ "flask": "~=1.1.0", "flask-caching": ["~=1.10.0", latest], @@ -1084,13 +1112,24 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): # DEV: Breaking change made in 2.1.0 release "markupsafe": "<2.0", }, + venvs=[ + Venv( + pys=select_pys(min_version="3.7", max_version="3.11"), + ), + Venv(pys=select_pys(min_version="3.12"), pkgs={"redis": latest}), + ], ), Venv( - pys=select_pys(min_version="3.7", max_version="3.11"), pkgs={ "flask": [latest], "flask-caching": ["~=1.10.0", latest], }, + venvs=[ + Venv( + pys=select_pys(min_version="3.7", max_version="3.11"), + ), + Venv(pys=select_pys(min_version="3.12"), pkgs={"redis": latest}), + ], ), ], ), @@ -1124,6 +1163,10 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): pys="3.11", pkgs={"mysql-connector-python": ["~=8.0.31", latest]}, ), + Venv( + pys=select_pys(min_version="3.12"), + pkgs={"mysql-connector-python": latest}, + ), ], ), Venv( @@ -1149,19 +1192,25 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): name="psycopg", command="pytest {cmdargs} tests/contrib/psycopg", pkgs={ - "pytest-asyncio": "==0.21.1", "pytest-randomly": latest, }, venvs=[ Venv( - pys=select_pys(min_version="3.7", max_version="3.11"), - # Python 3.6 supported up to 3.1.0 - pkgs={"psycopg": ["~=3.0.18"]}, - ), - Venv( - pys=select_pys(min_version="3.7", max_version="3.11"), - # psycopg3>=3.1.0 supports Python 3.7 -> 3.11 pkgs={"psycopg": [latest]}, + venvs=[ + Venv( + pys=select_pys(min_version="3.7", max_version="3.11"), + pkgs={ + "pytest-asyncio": "==0.21.1", + }, + ), + Venv( + pys=select_pys(min_version="3.12"), + pkgs={ + "pytest-asyncio": "==0.23.7", + }, + ), + ], ), ], ), @@ -1184,12 +1233,12 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): Venv( name="pynamodb", command="pytest {cmdargs} tests/contrib/pynamodb", + # TODO: Py312 requires changes to test code venvs=[ Venv( - # FIXME[python-3.12]: moto test dependency needs to be updated pys=select_pys(min_version="3.7", max_version="3.11"), pkgs={ - "pynamodb": ["~=5.0", "~=5.3", latest], + "pynamodb": ["~=5.0", "~=5.3", "<6.0"], "moto": ">=1.0,<2.0", "cfn-lint": "~=0.53.1", "Jinja2": "~=2.11.0", @@ -1235,6 +1284,10 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): pys="3.11", pkgs={"starlette": ["~=0.21.0", "~=0.33.0", latest]}, ), + Venv( + pys=select_pys(min_version="3.12"), + pkgs={"starlette": latest}, + ), ], ), Venv( @@ -1255,7 +1308,7 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): }, venvs=[ Venv( - pys=select_pys(min_version="3.7", max_version="3.12"), + pys=select_pys(min_version="3.7"), pkgs={ "sqlalchemy": ["~=1.3.0", latest], "psycopg2-binary": latest, @@ -1270,13 +1323,13 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): pkgs={ "pytest-randomly": latest, "urllib3": "~=1.0", + "requests-mock": ">=1.4", }, venvs=[ # requests added support for Python 3.7 in 2.20 Venv( pys="3.7", pkgs={ - "requests-mock": ">=1.4", "requests": [ "~=2.20.0", latest, @@ -1287,7 +1340,6 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): # requests added support for Python 3.8 in 2.23 pys="3.8", pkgs={ - "requests-mock": ">=1.4", "requests": [ "~=2.23.0", latest, @@ -1298,7 +1350,6 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): # requests added support for Python 3.9 in 2.25 pys="3.9", pkgs={ - "requests-mock": ">=1.4", "requests": [ "~=2.25.0", latest, @@ -1309,7 +1360,6 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): # requests added support for Python 3.10 in 2.27 pys="3.10", pkgs={ - "requests-mock": ">=1.4", "requests": [ "~=2.27", latest, @@ -1320,13 +1370,20 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): # requests added support for Python 3.11 in 2.28 pys="3.11", pkgs={ - "requests-mock": ">=1.4", "requests": [ "~=2.28.0", latest, ], }, ), + Venv( + pys=select_pys(min_version="3.12"), + pkgs={ + "requests": [ + latest, + ], + }, + ), ], ), Venv( @@ -1348,11 +1405,12 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): pkgs={ "moto[all]": "<5.0", "pytest-randomly": latest, + "vcrpy": "==6.0.1", }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.11"), - pkgs={"botocore": ["~=1.13", latest], "vcrpy": latest}, + pys=select_pys(min_version="3.8"), + pkgs={"botocore": "==1.34.49", "boto3": "==1.34.49"}, ), ], ), @@ -1452,7 +1510,7 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): Venv( # pyramid added support for Python 3.10/3.11 in 2.1 # FIXME[python-3.12]: blocked on venusian release https://github.com/Pylons/venusian/issues/85 - pys=select_pys(min_version="3.10", max_version="3.11"), + pys=select_pys(min_version="3.10"), pkgs={ "pyramid": [latest], }, @@ -1468,15 +1526,16 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): "pytest-randomly": latest, }, venvs=[ - # async_generator 1.10 used because @asynccontextmanager was only available in Python 3.6+ - # aiobotocore 1.x and higher require Python 3.6 or higher Venv( - # FIXME[python-3.12]: blocked on aiohttp release https://github.com/aio-libs/aiohttp/issues/7229 pys=select_pys(min_version="3.7", max_version="3.11"), pkgs={ "aiobotocore": ["~=1.4.2", "~=2.0.0", latest], }, ), + Venv( + pys=select_pys(min_version="3.12"), + pkgs={"aiobotocore": latest}, + ), ], ), Venv( @@ -1675,8 +1734,11 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): ), Venv( # grpcio added support for Python 3.12 in 1.59 - pys="3.12", - pkgs={"grpcio": ["~=1.59.0", latest]}, + pys=select_pys(min_version="3.12"), + pkgs={ + "grpcio": ["~=1.59.0", latest], + "pytest-asyncio": "==0.23.7", + }, ), ], ), @@ -1685,26 +1747,41 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): command="python -m pytest {cmdargs} tests/contrib/grpc_aio", pkgs={ "googleapis-common-protos": latest, - "pytest-asyncio": "==0.21.1", "pytest-randomly": latest, }, # grpc.aio support is broken and disabled by default env={"_DD_TRACE_GRPC_AIO_ENABLED": "true"}, venvs=[ Venv( - pys=select_pys(min_version="3.7", max_version="3.9"), - pkgs={"grpcio": ["~=1.34.0", "~=1.59.0"]}, + pys="3.7", + pkgs={ + "grpcio": ["~=1.34.0", "~=1.59.0"], + "pytest-asyncio": "==0.21.1", + }, + ), + Venv( + pys=select_pys(min_version="3.8", max_version="3.9"), + pkgs={ + "grpcio": ["~=1.34.0", "~=1.59.0"], + "pytest-asyncio": "==0.23.7", + }, ), Venv( # grpcio added support for Python 3.10 in 1.41 # but the version contains some bugs resolved by https://github.com/grpc/grpc/pull/27635. pys="3.10", - pkgs={"grpcio": ["~=1.42.0", "~=1.59.0"]}, + pkgs={ + "grpcio": ["~=1.42.0", "~=1.59.0"], + "pytest-asyncio": "==0.23.7", + }, ), Venv( # grpcio added support for Python 3.11 in 1.49 pys="3.11", - pkgs={"grpcio": ["~=1.49.0", "~=1.59.0"]}, + pkgs={ + "grpcio": ["~=1.49.0", "~=1.59.0"], + "pytest-asyncio": "==0.23.7", + }, ), ], ), @@ -1778,7 +1855,7 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): "pytest-randomly": latest, "httpx": [ "~=0.17.0", - "~=0.22.0", + "~=0.23.0", latest, ], }, @@ -1818,7 +1895,7 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): ), Venv( # Support added for Python 3.12 in 2.0.0 - pys="3.12", + pys=select_pys(min_version="3.12"), pkgs={"urllib3": ["==2.0.0", latest]}, ), ], @@ -1859,7 +1936,7 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): }, venvs=[ Venv( - pys=select_pys(min_version="3.7", max_version="3.12"), + pys=select_pys(min_version="3.7"), pkgs={ "aiopg": ["~=1.0", "~=1.4.0"], }, @@ -1871,7 +1948,6 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): command="pytest {cmdargs} tests/contrib/aiohttp", pkgs={ "pytest-aiohttp": [latest], - "pytest-asyncio": ["==0.21.1"], "pytest-randomly": latest, "aiohttp": [ "~=3.7", @@ -1879,15 +1955,26 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): ], "yarl": "~=1.0", }, - # FIXME[python-3.12]: blocked on aiohttp release https://github.com/aio-libs/aiohttp/issues/7229 - pys=select_pys(min_version="3.7", max_version="3.11"), + venvs=[ + Venv( + pys=select_pys(min_version="3.7", max_version="3.7"), + pkgs={ + "pytest-asyncio": ["==0.21.1"], + }, + ), + Venv( + pys=select_pys(min_version="3.8"), + pkgs={ + "pytest-asyncio": ["==0.23.7"], + }, + ), + ], ), Venv( name="aiohttp_jinja2", command="pytest {cmdargs} tests/contrib/aiohttp_jinja2", pkgs={ "pytest-aiohttp": [latest], - "pytest-asyncio": ["==0.21.1"], "pytest-randomly": latest, "aiohttp": [ "~=3.7", @@ -1899,8 +1986,20 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): ], "jinja2": latest, }, - # FIXME[python-3.12]: blocked on aiohttp release https://github.com/aio-libs/aiohttp/issues/7229 - pys=select_pys(min_version="3.7", max_version="3.11"), + venvs=[ + Venv( + pys=select_pys(min_version="3.7", max_version="3.7"), + pkgs={ + "pytest-asyncio": ["==0.21.1"], + }, + ), + Venv( + pys=select_pys(min_version="3.8"), + pkgs={ + "pytest-asyncio": ["==0.23.7"], + }, + ), + ], ), Venv( name="jinja2", @@ -1928,23 +2027,19 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): ), Venv( name="rediscluster", - pys=select_pys(max_version="3.11"), command="pytest {cmdargs} tests/contrib/rediscluster", - pkgs={ - # deprecated package - "redis-py-cluster": [">=2.0,<2.1", latest], - "pytest-randomly": latest, - }, + pkgs={"pytest-randomly": latest}, + venvs=[ + Venv(pys=select_pys(max_version="3.11"), pkgs={"redis-py-cluster": [">=2.0,<2.1", latest]}), + ], ), Venv( name="redis", pkgs={ - "pytest-asyncio": "==0.21.1", "pytest-randomly": latest, }, venvs=[ Venv( - pys=select_pys(min_version="3.7", max_version="3.10"), command="pytest {cmdargs} tests/contrib/redis", pkgs={ "redis": [ @@ -1953,6 +2048,20 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): "==5.0.1", ], }, + venvs=[ + Venv( + pys="3.7", + pkgs={ + "pytest-asyncio": "==0.21.1", + }, + ), + Venv( + pys=select_pys(min_version="3.8", max_version="3.10"), + pkgs={ + "pytest-asyncio": "==0.23.7", + }, + ), + ], ), Venv( # redis added support for Python 3.11 in 4.3 @@ -1960,9 +2069,17 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): command="pytest {cmdargs} tests/contrib/redis", pkgs={ "redis": ["~=4.3", "==5.0.1"], + "pytest-asyncio": "==0.23.7", + }, + ), + Venv( + pys=select_pys(min_version="3.12"), + command="pytest {cmdargs} tests/contrib/redis", + pkgs={ + "redis": latest, + "pytest-asyncio": "==0.23.7", }, ), - # FIXME[python-3.12]: blocked on redis release https://github.com/redis/redis-py/pull/2873 ], ), Venv( @@ -2045,6 +2162,13 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): "sanic-testing": "~=22.3.0", }, ), + Venv( + pys=select_pys(min_version="3.12"), + pkgs={ + "sanic": [latest], + "sanic-testing": "~=22.3.0", + }, + ), ], ), Venv( @@ -2072,7 +2196,7 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): ), Venv( # snowflake-connector-python added support for Python 3.11 in 3.0 - pys="3.11", + pys=select_pys(min_version="3.11"), pkgs={"snowflake-connector-python": [latest]}, ), ], @@ -2101,7 +2225,7 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): Venv( # asyncpg added support for Python 3.9 in 0.22 pys="3.9", - pkgs={"asyncpg": ["~=0.22.0", latest]}, + pkgs={"asyncpg": ["~=0.23.0", latest]}, ), Venv( # asyncpg added support for Python 3.10 in 0.24 @@ -2113,6 +2237,10 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): pys="3.11", pkgs={"asyncpg": ["~=0.27", latest]}, ), + Venv( + pys=select_pys(min_version="3.12"), + pkgs={"asyncpg": [latest]}, + ), ], ), Venv( @@ -2222,7 +2350,7 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): name="opentelemetry", command="pytest {cmdargs} tests/opentelemetry", # FIXME: this test suite breaks on 3.7 - pys=select_pys(min_version="3.8", max_version="3.11"), + pys=select_pys(min_version="3.8"), pkgs={ "pytest-randomly": latest, "pytest-asyncio": "==0.21.1", @@ -2240,10 +2368,9 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): command="pytest {cmdargs} tests/contrib/openai", pkgs={ "vcrpy": "==4.2.1", - "urllib3": "~=1.26", # vcrpy errors with urllib3 2.x https://github.com/kevin1024/vcrpy/issues/688 + "urllib3": "~=1.26", "pytest-asyncio": "==0.21.1", "pytest-randomly": latest, - "pillow": latest, }, venvs=[ Venv( @@ -2254,12 +2381,14 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): pkgs={ "openai": "==0.26.5", "scikit-learn": "==1.0.2", + "pillow": "==9.5.0", }, ), Venv( pys=select_pys(min_version="3.7", max_version="3.11"), pkgs={ - "openai[embeddings,datalib]": ["==0.27.2", "==1.1.1", "==1.30.1"], + "openai[embeddings,datalib]": ["==1.1.1", "==1.30.1"], + "pillow": "==9.5.0", }, ), Venv( @@ -2267,6 +2396,7 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): pkgs={ "openai[datalib]": ["==1.30.1"], "tiktoken": latest, + "pillow": "==10.1.0", }, env={"TIKTOKEN_AVAILABLE": "True"}, ), @@ -2319,6 +2449,10 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): pys="3.11", pkgs={"gevent": "~=22.8.0"}, ), + Venv( + pys=select_pys(min_version="3.12"), + pkgs={"gevent": "~=23.9.0"}, + ), ], ), ], @@ -2339,7 +2473,7 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): ), Venv( # pyodbc added support for Python 3.11 in 4.0.35 - pys="3.11", + pys=select_pys(min_version="3.11"), pkgs={"pyodbc": [latest]}, ), ], @@ -2391,7 +2525,7 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): "kombu": [">=5.2,<5.3", latest], }, ), - Venv(pys="3.12", pkgs={"kombu": latest}), + Venv(pys=select_pys(min_version="3.12"), pkgs={"kombu": latest}), ], ), Venv( @@ -2430,19 +2564,17 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): Venv( name="langchain", command="pytest {cmdargs} tests/contrib/langchain", - # FIXME[python-3.12]: blocked on aiohttp release https://github.com/aio-libs/aiohttp/issues/7229 - pys=select_pys(min_version="3.9", max_version="3.11"), pkgs={ "vcrpy": latest, - "pytest-asyncio": "==0.21.1", "tiktoken": latest, "huggingface-hub": latest, "ai21": latest, "exceptiongroup": latest, "psutil": latest, - "pytest-randomly": latest, - "numexpr": latest, + "pytest-randomly": "==3.10.1", + "numexpr": "==2.8.5", "greenlet": "==3.0.3", + "pytest-asyncio": "==0.23.7", }, venvs=[ Venv( @@ -2452,7 +2584,8 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): "openai": "==0.27.8", "pinecone-client": "==2.2.4", "cohere": "==4.57", - } + }, + pys=select_pys(min_version="3.9", max_version="3.11"), ), Venv( pkgs={ @@ -2466,10 +2599,12 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): "langchain-cohere": "==0.1.4", "openai": "==1.30.3", "pinecone-client": latest, - "botocore": latest, + "botocore": "==1.34.51", + "boto3": "==1.34.51", "cohere": "==5.4.0", "faiss-cpu": "==1.8.0", - } + }, + pys=select_pys(min_version="3.9", max_version="3.11"), ), Venv( pkgs={ @@ -2482,32 +2617,18 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): "langchain-cohere": latest, "openai": latest, "pinecone-client": latest, - "botocore": latest, - "cohere": latest, - } - ), - Venv( - pkgs={ - "langchain": latest, - "langchain-community": latest, - "langchain-core": latest, - "langchain-openai": latest, - "langchain-pinecone": latest, - "langchain-anthropic": latest, - "langchain-aws": latest, - "langchain-cohere": latest, - "openai": latest, - "pinecone-client": latest, - "botocore": latest, + "botocore": "==1.34.51", + "boto3": "==1.34.51", "cohere": latest, - } + }, + pys=select_pys(min_version="3.9"), ), ], ), Venv( name="anthropic", command="pytest {cmdargs} tests/contrib/anthropic", - pys=select_pys(min_version="3.8", max_version="3.12"), + pys=select_pys(min_version="3.8"), pkgs={ "pytest-asyncio": latest, "vcrpy": latest, @@ -2571,7 +2692,7 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): pkgs={"confluent-kafka": ["~=1.9.2", latest]}, ), # confluent-kafka added support for Python 3.11 in 2.0.2 - Venv(pys="3.11", pkgs={"confluent-kafka": latest}), + Venv(pys=select_pys(min_version="3.11"), pkgs={"confluent-kafka": latest}), ], ), ], @@ -2620,7 +2741,7 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): name="llmobs", command="pytest {cmdargs} tests/llmobs", pkgs={"vcrpy": latest, "pytest-asyncio": "==0.21.1"}, - pys=select_pys(min_version="3.7", max_version="3.12"), + pys=select_pys(min_version="3.7"), ), Venv( name="profile", diff --git a/tests/conftest.py b/tests/conftest.py index bf377d96c4f..13182fb370a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -103,7 +103,6 @@ def _run(code, **kwargs): @pytest.fixture(autouse=True) def snapshot(request): marks = [m for m in request.node.iter_markers(name="snapshot")] - assert len(marks) < 2, "Multiple snapshot marks detected" if marks and os.getenv("DD_SNAPSHOT_ENABLED", "1") == "1": snap = marks[0] token = snap.kwargs.get("token") diff --git a/tests/contrib/grpc_aio/test_grpc_aio.py b/tests/contrib/grpc_aio/test_grpc_aio.py index 39671459b8c..0a6bd6492fe 100644 --- a/tests/contrib/grpc_aio/test_grpc_aio.py +++ b/tests/contrib/grpc_aio/test_grpc_aio.py @@ -274,7 +274,6 @@ def _check_server_span(span, service, method_name, method_kind, resource="hellow assert span.get_tag("span.kind") == "server" -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_insecure_channel(server_info, tracer): async with aio.insecure_channel(server_info.target) as channel: @@ -289,7 +288,6 @@ async def test_insecure_channel(server_info, tracer): _check_server_span(server_span, "grpc-aio-server", "SayHello", "unary") -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_secure_channel(server_info, tracer): credentials = grpc.ChannelCredentials(None) @@ -305,7 +303,6 @@ async def test_secure_channel(server_info, tracer): _check_server_span(server_span, "grpc-aio-server", "SayHello", "unary") -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_secure_channel_with_interceptor_in_args(server_info, tracer): credentials = grpc.ChannelCredentials(None) @@ -322,7 +319,6 @@ async def test_secure_channel_with_interceptor_in_args(server_info, tracer): _check_server_span(server_span, "grpc-aio-server", "SayHello", "unary") -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_invalid_target(server_info, tracer): target = "localhost:50051" @@ -345,7 +341,6 @@ async def test_invalid_target(server_info, tracer): assert client_span.get_tag("span.kind") == "client" -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_pin_not_activated(server_info, tracer): tracer.configure(enabled=False) @@ -357,7 +352,6 @@ async def test_pin_not_activated(server_info, tracer): assert len(spans) == 0 -@pytest.mark.asyncio @pytest.mark.parametrize( "servicer", [_CoroHelloServicer(), _SyncHelloServicer()], @@ -390,7 +384,6 @@ async def test_pin_tags_put_in_span(servicer, tracer): assert server_span.get_tag("span.kind") == "server" -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_pin_can_be_defined_per_channel(server_info, tracer): Pin.override(GRPC_AIO_PIN_MODULE_CLIENT, service="grpc1") @@ -422,7 +415,6 @@ async def test_pin_can_be_defined_per_channel(server_info, tracer): _check_server_span(server_span2, "grpc-aio-server", "SayHello", "unary") -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_analytics_default(server_info, tracer): credentials = grpc.ChannelCredentials(None) @@ -440,7 +432,6 @@ async def test_analytics_default(server_info, tracer): assert server_span.get_metric(ANALYTICS_SAMPLE_RATE_KEY) is None -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_analytics_with_rate(server_info, tracer): with override_config("grpc_aio_client", dict(analytics_enabled=True, analytics_sample_rate=0.5)): @@ -457,7 +448,6 @@ async def test_analytics_with_rate(server_info, tracer): assert server_span.get_metric(ANALYTICS_SAMPLE_RATE_KEY) == 0.75 -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_priority_sampling(server_info, tracer): # DEV: Priority sampling is enabled by default @@ -475,7 +465,6 @@ async def test_priority_sampling(server_info, tracer): assert "x-datadog-sampling-priority=1" in response.message -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_analytics_without_rate(server_info, tracer): with override_config("grpc_aio_client", dict(analytics_enabled=True)): @@ -495,10 +484,9 @@ async def test_analytics_without_rate(server_info, tracer): @pytest.mark.skipif( - sys.version_info in ((3, 11, 0), (3, 11, 1)), - reason="Segfaults in Python 3.11.0 and 3.11.1", + sys.version_info >= (3, 11, 0), + reason="Segfaults in Python 3.11.0 and later", ) -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_unary_exception(server_info, tracer): async with aio.insecure_channel(server_info.target) as channel: @@ -537,10 +525,9 @@ async def test_unary_exception(server_info, tracer): @pytest.mark.skipif( - sys.version_info in ((3, 11, 0), (3, 11, 1)), - reason="Segfaults in Python 3.11.0 and 3.11.1", + sys.version_info >= (3, 11, 0), + reason="Segfaults in Python 3.11.0 and later", ) -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_unary_cancellation(server_info, tracer): async with aio.insecure_channel(server_info.target) as channel: @@ -553,7 +540,6 @@ async def test_unary_cancellation(server_info, tracer): assert len(spans) == 0 -@pytest.mark.asyncio @pytest.mark.parametrize( "server_info", [_CoroHelloServicer(), _AsyncGenHelloServicer(), _SyncHelloServicer()], indirect=True ) @@ -577,7 +563,6 @@ async def test_server_streaming(server_info, tracer): _check_server_span(server_span, "grpc-aio-server", "SayHelloTwice", "server_streaming") -@pytest.mark.asyncio @pytest.mark.parametrize( "server_info", [_CoroHelloServicer(), _AsyncGenHelloServicer(), _SyncHelloServicer()], indirect=True ) @@ -624,7 +609,6 @@ async def test_server_streaming_exception(server_info, tracer): assert server_span.get_tag("span.kind") == "server" -@pytest.mark.asyncio @pytest.mark.parametrize( "server_info", [_CoroHelloServicer(), _AsyncGenHelloServicer(), _SyncHelloServicer()], indirect=True ) @@ -642,7 +626,6 @@ async def test_server_streaming_cancelled_before_rpc(server_info, tracer): assert len(spans) == 0 -@pytest.mark.asyncio @pytest.mark.parametrize( "server_info", [_CoroHelloServicer(), _AsyncGenHelloServicer(), _SyncHelloServicer()], indirect=True ) @@ -679,7 +662,6 @@ async def test_server_streaming_cancelled_during_rpc(server_info, tracer): _check_server_span(server_span, "grpc-aio-server", "SayHelloTwice", "server_streaming") -@pytest.mark.asyncio @pytest.mark.parametrize( "server_info", [_CoroHelloServicer(), _AsyncGenHelloServicer(), _SyncHelloServicer()], indirect=True ) @@ -706,7 +688,6 @@ async def test_server_streaming_cancelled_after_rpc(server_info, tracer): _check_server_span(server_span, "grpc-aio-server", "SayHelloTwice", "server_streaming") -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_client_streaming(server_info, tracer): request_iterator = iter(HelloRequest(name=name) for name in ["first", "second"]) @@ -724,10 +705,9 @@ async def test_client_streaming(server_info, tracer): @pytest.mark.skipif( - sys.version_info in ((3, 11, 0), (3, 11, 1)), - reason="Segfaults in Python 3.11.0 and 3.11.1", + sys.version_info >= (3, 11, 0), + reason="Segfaults in Python 3.11.0 and later", ) -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_client_streaming_exception(server_info, tracer): request_iterator = iter(HelloRequest(name=name) for name in ["exception", "test"]) @@ -766,7 +746,6 @@ async def test_client_streaming_exception(server_info, tracer): assert server_span.get_tag("span.kind") == "server" -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_client_streaming_cancelled_before_rpc(server_info, tracer): request_iterator = iter(HelloRequest(name=name) for name in ["first", "second"]) @@ -782,7 +761,6 @@ async def test_client_streaming_cancelled_before_rpc(server_info, tracer): assert len(spans) == 0 -@pytest.mark.asyncio @pytest.mark.parametrize("server_info", [_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_client_streaming_cancelled_after_rpc(server_info, tracer): request_iterator = iter(HelloRequest(name=name) for name in ["first", "second"]) @@ -801,7 +779,6 @@ async def test_client_streaming_cancelled_after_rpc(server_info, tracer): _check_server_span(server_span, "grpc-aio-server", "SayHelloLast", "client_streaming") -@pytest.mark.asyncio @pytest.mark.parametrize( "server_info", [_CoroHelloServicer(), _AsyncGenHelloServicer(), _SyncHelloServicer()], indirect=True ) @@ -828,10 +805,9 @@ async def test_bidi_streaming(server_info, tracer): @pytest.mark.skipif( - sys.version_info in ((3, 11, 0), (3, 11, 1)), - reason="Segfaults in Python 3.11.0 and 3.11.1", + sys.version_info >= (3, 11, 0), + reason="Segfaults in Python 3.11.0 and later", ) -@pytest.mark.asyncio @pytest.mark.parametrize( "server_info", [_CoroHelloServicer(), _AsyncGenHelloServicer(), _SyncHelloServicer()], indirect=True ) @@ -875,7 +851,6 @@ async def test_bidi_streaming_exception(server_info, tracer): assert server_span.get_tag("span.kind") == "server" -@pytest.mark.asyncio @pytest.mark.parametrize( "server_info", [_CoroHelloServicer(), _AsyncGenHelloServicer(), _SyncHelloServicer()], indirect=True ) @@ -895,7 +870,6 @@ async def test_bidi_streaming_cancelled_before_rpc(server_info, tracer): assert len(spans) == 0 -@pytest.mark.asyncio @pytest.mark.parametrize( "server_info", [_CoroHelloServicer(), _AsyncGenHelloServicer(), _SyncHelloServicer()], indirect=True ) @@ -941,7 +915,6 @@ async def test_bidi_streaming_cancelled_during_rpc(server_info, tracer): _check_server_span(server_span, "grpc-aio-server", "SayHelloRepeatedly", "bidi_streaming") -@pytest.mark.asyncio @pytest.mark.parametrize( "server_info", [_CoroHelloServicer(), _AsyncGenHelloServicer(), _SyncHelloServicer()], indirect=True ) @@ -1005,7 +978,6 @@ def test_schematization_of_operation(ddtrace_run_python_code_in_subprocess, serv from tests.contrib.grpc_aio.test_grpc_aio import server_info from tests.contrib.grpc_aio.test_grpc_aio import tracer -@pytest.mark.asyncio @pytest.mark.parametrize("server_info",[_CoroHelloServicer(), _SyncHelloServicer()], indirect=True) async def test_client_streaming(server_info, tracer): request_iterator = iter(HelloRequest(name=name) for name in ["first", "second"]) @@ -1065,7 +1037,6 @@ async def run_streaming_example(server_info, use_generator=False): i += 1 -@pytest.mark.asyncio @pytest.mark.skip( "Bug/error from grpc when adding an async streaming client interceptor throws StopAsyncIteration. Issue can be \ found at: https://github.com/DataDog/dd-trace-py/issues/9139" @@ -1083,7 +1054,6 @@ async def test_async_streaming_direct_read(async_server_info, tracer): _check_server_span(server_span, "grpc-aio-server", "SayHelloRepeatedly", "bidi_streaming") -@pytest.mark.asyncio @pytest.mark.parametrize("async_server_info", [_CoroHelloServicer()], indirect=True) async def test_async_streaming_generator(async_server_info, tracer): await run_streaming_example(async_server_info, use_generator=True) diff --git a/tests/contrib/langchain/test_langchain_community.py b/tests/contrib/langchain/test_langchain_community.py index 404e3d52631..355672d06e5 100644 --- a/tests/contrib/langchain/test_langchain_community.py +++ b/tests/contrib/langchain/test_langchain_community.py @@ -95,7 +95,6 @@ def test_openai_llm_sync_multiple_prompts(langchain, langchain_openai, request_v ) -@pytest.mark.asyncio @pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) async def test_openai_llm_async(langchain, langchain_openai, request_vcr): llm = langchain_openai.OpenAI() @@ -110,7 +109,6 @@ def test_openai_llm_sync_stream(langchain, langchain_openai, request_vcr): llm.invoke("Why is Spongebob so bad at driving?") -@pytest.mark.asyncio @pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) async def test_openai_llm_async_stream(langchain, langchain_openai, request_vcr): llm = langchain_openai.OpenAI(streaming=True) @@ -275,7 +273,6 @@ def test_openai_chat_model_vision_generate(langchain_openai, request_vcr): ) -@pytest.mark.asyncio @pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) async def test_openai_chat_model_async_call(langchain, langchain_openai, request_vcr): chat = langchain_openai.ChatOpenAI(temperature=0, max_tokens=256) @@ -283,7 +280,6 @@ async def test_openai_chat_model_async_call(langchain, langchain_openai, request await chat._call_async([langchain.schema.HumanMessage(content="When do you use 'whom' instead of 'who'?")]) -@pytest.mark.asyncio @pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) async def test_openai_chat_model_async_generate(langchain, langchain_openai, request_vcr): chat = langchain_openai.ChatOpenAI(temperature=0, max_tokens=256) @@ -314,7 +310,6 @@ def test_openai_chat_model_sync_stream(langchain, langchain_openai, request_vcr) chat.invoke(input=[langchain.schema.HumanMessage(content="What is the secret Krabby Patty recipe?")]) -@pytest.mark.asyncio @pytest.mark.snapshot( token="tests.contrib.langchain.test_langchain_community.test_openai_chat_model_stream", ignores=["metrics.langchain.tokens.total_cost"], @@ -526,7 +521,6 @@ def test_chain_invoke_str_input(langchain, langchain_openai, request_vcr): chain.invoke("two") -@pytest.mark.asyncio @pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) async def test_openai_math_chain_async(langchain, langchain_openai, request_vcr): """ @@ -645,7 +639,6 @@ def test_openai_sequential_chain_with_multiple_llm_sync(langchain, langchain_ope sequential_chain.invoke({"input_text": input_text}) -@pytest.mark.asyncio @pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) async def test_openai_sequential_chain_with_multiple_llm_async(langchain, langchain_openai, request_vcr): template = """Paraphrase this text: @@ -1168,7 +1161,6 @@ def test_lcel_chain_complicated(langchain_core, langchain_openai, request_vcr): chain.invoke({"topic": "chickens", "style": "a 90s rapper"}) -@pytest.mark.asyncio @pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) async def test_lcel_chain_simple_async(langchain_core, langchain_openai, request_vcr): prompt = langchain_core.prompts.ChatPromptTemplate.from_messages( @@ -1239,7 +1231,6 @@ def test_lcel_chain_nested(langchain_core, langchain_openai, request_vcr): @flaky(1735812000, reason="batch() is non-deterministic in which order it processes inputs") -@pytest.mark.asyncio @pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) async def test_lcel_chain_batch_async(langchain_core, langchain_openai, request_vcr): """ diff --git a/tests/contrib/openai/test_openai_v1.py b/tests/contrib/openai/test_openai_v1.py index e14d54bca8d..a96d63ea712 100644 --- a/tests/contrib/openai/test_openai_v1.py +++ b/tests/contrib/openai/test_openai_v1.py @@ -194,7 +194,6 @@ def test_completion( mock_llmobs_writer.enqueue.assert_not_called() -@pytest.mark.asyncio @pytest.mark.parametrize("api_key_in_env", [True, False]) async def test_acompletion( api_key_in_env, request_api_key, openai, openai_vcr, mock_metrics, mock_logs, mock_llmobs_writer, snapshot_tracer @@ -503,7 +502,6 @@ def test_enable_metrics(openai, openai_vcr, ddtrace_config_openai, mock_metrics, assert not mock_metrics.mock_calls -@pytest.mark.asyncio @pytest.mark.parametrize("api_key_in_env", [True, False]) async def test_achat_completion(api_key_in_env, request_api_key, openai, openai_vcr, snapshot_tracer): with snapshot_context( @@ -543,7 +541,6 @@ def test_image_create(api_key_in_env, request_api_key, openai, openai_vcr, snaps ) -@pytest.mark.asyncio @pytest.mark.parametrize("api_key_in_env", [True, False]) async def test_image_acreate(api_key_in_env, request_api_key, openai, openai_vcr, snapshot_tracer): with snapshot_context( @@ -667,7 +664,6 @@ def test_embedding_array_of_token_arrays(openai, openai_vcr, snapshot_tracer): ) -@pytest.mark.asyncio @pytest.mark.parametrize("api_key_in_env", [True, False]) async def test_aembedding(api_key_in_env, request_api_key, openai, openai_vcr, snapshot_tracer): with snapshot_context( @@ -694,7 +690,6 @@ def test_file_list(api_key_in_env, request_api_key, openai, openai_vcr, snapshot client.files.list() -@pytest.mark.asyncio @pytest.mark.parametrize("api_key_in_env", [True, False]) async def test_file_alist(api_key_in_env, request_api_key, openai, openai_vcr, snapshot_tracer): with snapshot_context( @@ -727,7 +722,6 @@ def test_file_create(api_key_in_env, request_api_key, openai, openai_vcr, snapsh ) -@pytest.mark.asyncio @pytest.mark.parametrize("api_key_in_env", [True, False]) async def test_file_acreate(api_key_in_env, request_api_key, openai, openai_vcr, snapshot_tracer): with snapshot_context( @@ -762,7 +756,6 @@ def test_file_delete(api_key_in_env, request_api_key, openai, openai_vcr, snapsh ) -@pytest.mark.asyncio @pytest.mark.parametrize("api_key_in_env", [True, False]) async def test_file_adelete(api_key_in_env, request_api_key, openai, openai_vcr, snapshot_tracer): with snapshot_context( @@ -789,7 +782,6 @@ def test_file_retrieve(api_key_in_env, request_api_key, openai, openai_vcr, snap ) -@pytest.mark.asyncio @pytest.mark.parametrize("api_key_in_env", [True, False]) async def test_file_aretrieve(api_key_in_env, request_api_key, openai, openai_vcr, snapshot_tracer): with snapshot_context( @@ -816,7 +808,6 @@ def test_file_download(api_key_in_env, request_api_key, openai, openai_vcr, snap ) -@pytest.mark.asyncio @pytest.mark.parametrize("api_key_in_env", [True, False]) async def test_file_adownload(api_key_in_env, request_api_key, openai, openai_vcr, snapshot_tracer): with snapshot_context( @@ -843,7 +834,6 @@ def test_model_delete(api_key_in_env, request_api_key, openai, openai_vcr, snaps ) -@pytest.mark.asyncio @pytest.mark.parametrize("api_key_in_env", [True, False]) async def test_model_adelete(api_key_in_env, request_api_key, openai, openai_vcr, snapshot_tracer): with snapshot_context( @@ -871,7 +861,6 @@ def test_create_moderation(api_key_in_env, request_api_key, openai, openai_vcr, ) -@pytest.mark.asyncio @pytest.mark.parametrize("api_key_in_env", [True, False]) async def test_acreate_moderation(api_key_in_env, request_api_key, openai, openai_vcr, snapshot_tracer): with snapshot_context( @@ -967,7 +956,6 @@ def test_completion_stream(openai, openai_vcr, mock_metrics, mock_tracer): assert mock.call.distribution("tokens.total", mock.ANY, tags=expected_tags) in mock_metrics.mock_calls -@pytest.mark.asyncio async def test_completion_async_stream(openai, openai_vcr, mock_metrics, mock_tracer): with openai_vcr.use_cassette("completion_streamed.yaml"): with mock.patch("ddtrace.contrib.openai.utils.encoding_for_model", create=True) as mock_encoding: @@ -1097,7 +1085,6 @@ def test_chat_completion_stream(openai, openai_vcr, mock_metrics, snapshot_trace assert mock.call.distribution("tokens.total", mock.ANY, tags=expected_tags) in mock_metrics.mock_calls -@pytest.mark.asyncio async def test_chat_completion_async_stream(openai, openai_vcr, mock_metrics, snapshot_tracer): with openai_vcr.use_cassette("chat_completion_streamed.yaml"): with mock.patch("ddtrace.contrib.openai.utils.encoding_for_model", create=True) as mock_encoding: @@ -1150,7 +1137,6 @@ async def test_chat_completion_async_stream(openai, openai_vcr, mock_metrics, sn parse_version(openai_module.version.VERSION) < (1, 6, 0), reason="Streamed response context managers are only available v1.6.0+", ) -@pytest.mark.asyncio async def test_chat_completion_async_stream_context_manager(openai, openai_vcr, mock_metrics, snapshot_tracer): with openai_vcr.use_cassette("chat_completion_streamed.yaml"): with mock.patch("ddtrace.contrib.openai.utils.encoding_for_model", create=True) as mock_encoding: @@ -1526,7 +1512,6 @@ def test_azure_openai_completion(openai, azure_openai_config, openai_vcr, snapsh ) -@pytest.mark.asyncio @pytest.mark.snapshot( token="tests.contrib.openai.test_openai.test_azure_openai_completion", ignores=[ @@ -1578,7 +1563,6 @@ def test_azure_openai_chat_completion(openai, azure_openai_config, openai_vcr, s ) -@pytest.mark.asyncio @pytest.mark.snapshot( token="tests.contrib.openai.test_openai.test_azure_openai_chat_completion", ignores=["meta.http.useragent", "meta.openai.api_base", "meta.openai.api_type", "meta.openai.api_version"], @@ -1620,7 +1604,6 @@ def test_azure_openai_embedding(openai, azure_openai_config, openai_vcr, snapsho ) -@pytest.mark.asyncio @pytest.mark.snapshot( token="tests.contrib.openai.test_openai.test_azure_openai_embedding", ignores=["meta.http.useragent", "meta.openai.api_base", "meta.openai.api_type", "meta.openai.api_version"], diff --git a/tests/contrib/psycopg/test_psycopg_async.py b/tests/contrib/psycopg/test_psycopg_async.py index a255709e192..d39f66cc105 100644 --- a/tests/contrib/psycopg/test_psycopg_async.py +++ b/tests/contrib/psycopg/test_psycopg_async.py @@ -9,7 +9,6 @@ from ddtrace.contrib.psycopg.patch import patch from ddtrace.contrib.psycopg.patch import unpatch from tests.contrib.asyncio.utils import AsyncioTestCase -from tests.contrib.asyncio.utils import mark_asyncio from tests.contrib.config import POSTGRES_CONFIG from tests.opentracer.utils import init_tracer from tests.utils import assert_is_measured @@ -41,7 +40,6 @@ async def _get_conn(self, service=None): return conn - @mark_asyncio async def test_patch_unpatch(self): # Test patch idempotence patch() @@ -130,7 +128,6 @@ async def assert_conn_is_traced_async(self, db, service): self.assertIsNone(root.get_tag("sql.query")) self.reset() - @mark_asyncio async def test_opentracing_propagation(self): # ensure OpenTracing plays well with our integration query = """SELECT 'tracing'""" @@ -172,7 +169,6 @@ async def test_opentracing_propagation(self): ) assert_is_measured(self.get_spans()[1]) - @mark_asyncio async def test_cursor_ctx_manager(self): # ensure cursors work with context managers # https://github.com/DataDog/dd-trace-py/issues/228 @@ -190,7 +186,6 @@ async def test_cursor_ctx_manager(self): dict(name="postgres.query"), ) - @mark_asyncio async def test_disabled_execute(self): conn = await self._get_conn() self.tracer.enabled = False @@ -199,28 +194,24 @@ async def test_disabled_execute(self): await conn.cursor().execute("""select 'blah'""") self.assert_has_no_spans() - @mark_asyncio async def test_connect_factory(self): services = ["db", "another"] for service in services: conn = await self._get_conn(service=service) await self.assert_conn_is_traced_async(conn, service) - @mark_asyncio async def test_commit(self): conn = await self._get_conn() await conn.commit() self.assert_structure(dict(name="psycopg.connection.commit", service=self.TEST_SERVICE)) - @mark_asyncio async def test_rollback(self): conn = await self._get_conn() await conn.rollback() self.assert_structure(dict(name="psycopg.connection.rollback", service=self.TEST_SERVICE)) - @mark_asyncio async def test_composed_query(self): """Checks whether execution of composed SQL string is traced""" query = SQL(" union all ").join( @@ -240,7 +231,6 @@ async def test_composed_query(self): dict(name="postgres.query", resource=query.as_string(db)), ) - @mark_asyncio @AsyncioTestCase.run_in_subprocess(env_overrides=dict(DD_SERVICE="mysvc", DD_TRACE_SPAN_ATTRIBUTE_SCHEMA="v0")) async def test_user_specified_app_service_v0(self): """ @@ -259,7 +249,6 @@ async def test_user_specified_app_service_v0(self): self.assertEqual(len(spans), 1) assert spans[0].service != "mysvc" - @mark_asyncio @AsyncioTestCase.run_in_subprocess(env_overrides=dict(DD_SERVICE="mysvc", DD_TRACE_SPAN_ATTRIBUTE_SCHEMA="v1")) async def test_user_specified_app_service_v1(self): """ @@ -278,7 +267,6 @@ async def test_user_specified_app_service_v1(self): self.assertEqual(len(spans), 1) assert spans[0].service == "mysvc" - @mark_asyncio @AsyncioTestCase.run_in_subprocess(env_overrides=dict(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA="v0")) async def test_span_name_v0_schema(self): conn = await self._get_conn() @@ -288,7 +276,6 @@ async def test_span_name_v0_schema(self): self.assertEqual(len(spans), 1) assert spans[0].name == "postgres.query" - @mark_asyncio @AsyncioTestCase.run_in_subprocess(env_overrides=dict(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA="v1")) async def test_span_name_v1_schema(self): conn = await self._get_conn() @@ -298,7 +285,6 @@ async def test_span_name_v1_schema(self): self.assertEqual(len(spans), 1) assert spans[0].name == "postgresql.query" - @mark_asyncio async def test_contextmanager_connection(self): service = "fo" db = await self._get_conn(service=service) @@ -306,7 +292,6 @@ async def test_contextmanager_connection(self): await cursor.execute("""select 'blah'""") self.assert_structure(dict(name="postgres.query", service=service)) - @mark_asyncio async def test_connection_execute(self): """Checks whether connection execute shortcute method works as normal""" @@ -318,7 +303,6 @@ async def test_connection_execute(self): assert len(rows) == 1, rows assert rows[0][0] == "one" - @mark_asyncio async def test_connection_context_execute(self): """Checks whether connection context manager works as normal.""" @@ -330,7 +314,6 @@ async def test_connection_context_execute(self): assert len(rows) == 1, rows assert rows[0][0] == "one" - @mark_asyncio async def test_cursor_context_execute(self): """Checks whether cursor context manager works as normal.""" @@ -342,7 +325,6 @@ async def test_cursor_context_execute(self): assert len(rows) == 1, rows assert rows[0][0] == "one" - @mark_asyncio async def test_cursor_from_connection_shortcut(self): """Checks whether connection execute shortcute method works as normal""" diff --git a/tests/contrib/redis/test_redis_asyncio.py b/tests/contrib/redis/test_redis_asyncio.py index b8cc87d319c..5b5d32bbacc 100644 --- a/tests/contrib/redis/test_redis_asyncio.py +++ b/tests/contrib/redis/test_redis_asyncio.py @@ -22,21 +22,18 @@ def get_redis_instance(max_connections: int, client_name: typing.Optional[str] = ) -@pytest.mark.asyncio @pytest.fixture def redis_client(): r = get_redis_instance(max_connections=10) # default values yield r -@pytest.mark.asyncio @pytest.fixture def single_pool_redis_client(): r = get_redis_instance(max_connections=1) yield r -@pytest.mark.asyncio @pytest.fixture(autouse=True) async def traced_redis(redis_client): await redis_client.flushall() @@ -65,21 +62,18 @@ def test_patching(): assert not isinstance(redis.asyncio.client.Pipeline.pipeline, ObjectProxy) -@pytest.mark.asyncio @pytest.mark.snapshot(wait_for_num_traces=1) async def test_basic_request(redis_client): val = await redis_client.get("cheese") assert val is None -@pytest.mark.asyncio @pytest.mark.snapshot(wait_for_num_traces=1) async def test_unicode_request(redis_client): val = await redis_client.get("😐") assert val is None -@pytest.mark.asyncio @pytest.mark.snapshot(wait_for_num_traces=1, ignores=["meta.error.stack"]) async def test_connection_error(redis_client): with mock.patch.object( @@ -91,7 +85,6 @@ async def test_connection_error(redis_client): await redis_client.get("foo") -@pytest.mark.asyncio @pytest.mark.snapshot(wait_for_num_traces=2) async def test_decoding_non_utf8_args(redis_client): await redis_client.set(b"\x80foo", b"\x80abc") @@ -99,7 +92,6 @@ async def test_decoding_non_utf8_args(redis_client): assert val == b"\x80abc" -@pytest.mark.asyncio @pytest.mark.snapshot(wait_for_num_traces=1) async def test_decoding_non_utf8_pipeline_args(redis_client): p = redis_client.pipeline() @@ -115,7 +107,6 @@ async def test_decoding_non_utf8_pipeline_args(redis_client): assert response_list[3] == b"\x80abc" -@pytest.mark.asyncio @pytest.mark.snapshot(wait_for_num_traces=1) async def test_long_command(redis_client): length = 1000 @@ -125,7 +116,6 @@ async def test_long_command(redis_client): assert val is None -@pytest.mark.asyncio @pytest.mark.snapshot(wait_for_num_traces=3) async def test_override_service_name(redis_client): with override_config("redis", dict(service_name="myredis")): @@ -138,7 +128,6 @@ async def test_override_service_name(redis_client): assert val == "my-cheese" -@pytest.mark.asyncio @pytest.mark.snapshot(wait_for_num_traces=1) async def test_pin(redis_client): Pin.override(redis_client, service="my-redis") @@ -146,7 +135,6 @@ async def test_pin(redis_client): assert val is None -@pytest.mark.asyncio @pytest.mark.snapshot(wait_for_num_traces=1) async def test_pipeline_traced(redis_client): p = redis_client.pipeline(transaction=False) @@ -164,7 +152,6 @@ async def test_pipeline_traced(redis_client): assert response_list[3].decode() == "bar" -@pytest.mark.asyncio @pytest.mark.snapshot(wait_for_num_traces=1) async def test_pipeline_traced_context_manager_transaction(redis_client): """ @@ -190,7 +177,6 @@ async def main(): assert get_2.decode() == "bar" -@pytest.mark.asyncio @pytest.mark.snapshot(wait_for_num_traces=1) async def test_two_traced_pipelines(redis_client): with tracer.trace("web-request", service="test"): @@ -220,7 +206,6 @@ async def test_two_traced_pipelines(redis_client): assert response_list2[1].decode() == "bar" -@pytest.mark.asyncio async def test_parenting(redis_client, snapshot_context): with snapshot_context(wait_for_num_traces=1): with tracer.trace("web-request", service="test"): @@ -228,7 +213,6 @@ async def test_parenting(redis_client, snapshot_context): await redis_client.get("blah") -@pytest.mark.asyncio async def test_client_name(snapshot_context): with snapshot_context(wait_for_num_traces=1): with tracer.trace("web-request", service="test"): From 8a4c26c659cb4c77d2ccf2199c752ff8b036b148 Mon Sep 17 00:00:00 2001 From: Yun Kim <35776586+Yun-Kim@users.noreply.github.com> Date: Tue, 23 Jul 2024 15:20:55 -0400 Subject: [PATCH 21/29] chore(langchain): update latest langchain test version (#9902) This PR updates the langchain test suite to use the latest langchain version. Note that the latest langchain version [adds](https://github.com/langchain-ai/langchain/pull/23691/files) a few properties to the BaseLLM/ChatModel classes, which means the latest version tests will see more span tags than previously. To avoid further splitting of the test cassettes/snapshots in this test suite, I have marked these extra tags to be ignored. This is not a breaking change, just updating test versions and to avoid breaking CI. ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- .../requirements/{80fa01e.txt => 118ee67.txt} | 14 +- .riot/requirements/12e6c9b.txt | 305 ------------------ .../requirements/{d47114f.txt => 19a938f.txt} | 12 +- .riot/requirements/1bb07e0.txt | 104 ++++++ .riot/requirements/1e57344.txt | 93 ++++++ .riot/requirements/5425133.txt | 99 ++++++ .riot/requirements/8dd750a.txt | 101 ++++++ .riot/requirements/b5df1ff.txt | 99 ++++++ .../requirements/{2d10f62.txt => c06d6c9.txt} | 12 +- riotfile.py | 18 ++ .../langchain/test_langchain_community.py | 119 +++++-- ...munity.test_lcel_chain_non_dict_input.json | 29 ++ 12 files changed, 647 insertions(+), 358 deletions(-) rename .riot/requirements/{80fa01e.txt => 118ee67.txt} (90%) delete mode 100644 .riot/requirements/12e6c9b.txt rename .riot/requirements/{d47114f.txt => 19a938f.txt} (91%) create mode 100644 .riot/requirements/1bb07e0.txt create mode 100644 .riot/requirements/1e57344.txt create mode 100644 .riot/requirements/5425133.txt create mode 100644 .riot/requirements/8dd750a.txt create mode 100644 .riot/requirements/b5df1ff.txt rename .riot/requirements/{2d10f62.txt => c06d6c9.txt} (91%) create mode 100644 tests/snapshots/tests.contrib.langchain.test_langchain_community.test_lcel_chain_non_dict_input.json diff --git a/.riot/requirements/80fa01e.txt b/.riot/requirements/118ee67.txt similarity index 90% rename from .riot/requirements/80fa01e.txt rename to .riot/requirements/118ee67.txt index 6de0163c442..83ccd325513 100644 --- a/.riot/requirements/80fa01e.txt +++ b/.riot/requirements/118ee67.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/80fa01e.in +# pip-compile --no-annotate .riot/requirements/118ee67.in # ai21==2.9.2 ai21-tokenizer==0.11.2 @@ -17,7 +17,7 @@ boto3==1.34.51 botocore==1.34.51 certifi==2024.7.4 charset-normalizer==3.3.2 -cohere==5.6.1 +cohere==5.6.2 coverage[toml]==7.6.0 dataclasses-json==0.6.7 defusedxml==0.7.1 @@ -32,10 +32,10 @@ h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 httpx-sse==0.4.0 -huggingface-hub==0.24.0 +huggingface-hub==0.24.1 hypothesis==6.45.0 idna==3.7 -importlib-metadata==8.0.0 +importlib-metadata==8.1.0 iniconfig==2.0.0 jiter==0.5.0 jmespath==1.0.1 @@ -49,14 +49,14 @@ langchain-core==0.2.0 langchain-openai==0.1.7 langchain-pinecone==0.1.2 langchain-text-splitters==0.2.1 -langsmith==0.1.92 +langsmith==0.1.93 marshmallow==3.21.3 mock==5.1.0 multidict==6.0.5 mypy-extensions==1.0.0 numexpr==2.8.5 numpy==1.26.4 -openai==1.35.15 +openai==1.37.0 opentracing==2.4.0 orjson==3.10.6 packaging==23.2 @@ -67,7 +67,7 @@ pluggy==1.5.0 psutil==6.0.0 pydantic==2.8.2 pydantic-core==2.20.1 -pytest==8.2.2 +pytest==8.3.1 pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 diff --git a/.riot/requirements/12e6c9b.txt b/.riot/requirements/12e6c9b.txt deleted file mode 100644 index 97d5e17d5f6..00000000000 --- a/.riot/requirements/12e6c9b.txt +++ /dev/null @@ -1,305 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile .riot/requirements/12e6c9b.in -# -ai21==2.9.2 - # via -r .riot/requirements/12e6c9b.in -ai21-tokenizer==0.11.2 - # via ai21 -aiohttp==3.9.5 - # via langchain -aiosignal==1.3.1 - # via aiohttp -annotated-types==0.7.0 - # via pydantic -anthropic==0.31.1 - # via langchain-anthropic -anyio==4.4.0 - # via - # ai21-tokenizer - # anthropic - # httpx - # openai -async-timeout==4.0.3 - # via - # aiohttp - # langchain -attrs==23.2.0 - # via - # aiohttp - # hypothesis -boto3==1.34.51 - # via - # -r .riot/requirements/12e6c9b.in - # cohere - # langchain-aws -botocore==1.34.51 - # via - # -r .riot/requirements/12e6c9b.in - # boto3 - # s3transfer -certifi==2024.7.4 - # via - # httpcore - # httpx - # pinecone-client - # requests -charset-normalizer==3.3.2 - # via requests -cohere==5.6.1 - # via - # -r .riot/requirements/12e6c9b.in - # langchain-cohere -coverage[toml]==7.6.0 - # via - # -r .riot/requirements/12e6c9b.in - # pytest-cov -dataclasses-json==0.6.7 - # via - # ai21 - # langchain -defusedxml==0.7.1 - # via langchain-anthropic -distro==1.9.0 - # via - # anthropic - # openai -exceptiongroup==1.2.2 - # via - # -r .riot/requirements/12e6c9b.in - # anyio - # pytest -fastavro==1.9.5 - # via cohere -filelock==3.15.4 - # via huggingface-hub -frozenlist==1.4.1 - # via - # aiohttp - # aiosignal -fsspec==2024.6.1 - # via huggingface-hub -greenlet==3.0.3 - # via - # -r .riot/requirements/12e6c9b.in - # sqlalchemy -h11==0.14.0 - # via httpcore -httpcore==1.0.5 - # via httpx -httpx==0.27.0 - # via - # ai21 - # anthropic - # cohere - # openai -httpx-sse==0.4.0 - # via cohere -huggingface-hub==0.23.5 - # via - # -r .riot/requirements/12e6c9b.in - # tokenizers -hypothesis==6.45.0 - # via -r .riot/requirements/12e6c9b.in -idna==3.7 - # via - # anyio - # httpx - # requests - # yarl -iniconfig==2.0.0 - # via pytest -jiter==0.5.0 - # via anthropic -jmespath==1.0.1 - # via - # boto3 - # botocore -jsonpatch==1.33 - # via langchain-core -jsonpointer==3.0.0 - # via jsonpatch -langchain==0.2.0 - # via -r .riot/requirements/12e6c9b.in -langchain-anthropic==0.1.13 - # via -r .riot/requirements/12e6c9b.in -langchain-aws==0.1.6 - # via -r .riot/requirements/12e6c9b.in -langchain-cohere==0.1.8 - # via -r .riot/requirements/12e6c9b.in -langchain-core==0.2.0 - # via - # -r .riot/requirements/12e6c9b.in - # langchain - # langchain-anthropic - # langchain-aws - # langchain-cohere - # langchain-openai - # langchain-pinecone - # langchain-text-splitters -langchain-openai==0.1.7 - # via -r .riot/requirements/12e6c9b.in -langchain-pinecone==0.1.1 - # via -r .riot/requirements/12e6c9b.in -langchain-text-splitters==0.2.1 - # via langchain -langsmith==0.1.86 - # via - # langchain - # langchain-core -marshmallow==3.21.3 - # via dataclasses-json -mock==5.1.0 - # via -r .riot/requirements/12e6c9b.in -multidict==6.0.5 - # via - # aiohttp - # yarl -mypy-extensions==1.0.0 - # via typing-inspect -numexpr==2.8.5 - # via -r .riot/requirements/12e6c9b.in -numpy==1.26.4 - # via - # langchain - # langchain-aws - # langchain-pinecone - # numexpr -openai==1.35.14 - # via - # -r .riot/requirements/12e6c9b.in - # langchain-openai -opentracing==2.4.0 - # via -r .riot/requirements/12e6c9b.in -orjson==3.10.6 - # via langsmith -packaging==23.2 - # via - # huggingface-hub - # langchain-core - # marshmallow - # pytest -parameterized==0.9.0 - # via cohere -pinecone-client==3.2.2 - # via - # -r .riot/requirements/12e6c9b.in - # langchain-pinecone -pluggy==1.5.0 - # via pytest -psutil==6.0.0 - # via -r .riot/requirements/12e6c9b.in -pydantic==2.8.2 - # via - # anthropic - # cohere - # langchain - # langchain-core - # langsmith - # openai -pydantic-core==2.20.1 - # via pydantic -pytest==8.2.2 - # via - # -r .riot/requirements/12e6c9b.in - # pytest-asyncio - # pytest-cov - # pytest-mock - # pytest-randomly -pytest-asyncio==0.23.7 - # via -r .riot/requirements/12e6c9b.in -pytest-cov==5.0.0 - # via -r .riot/requirements/12e6c9b.in -pytest-mock==3.14.0 - # via -r .riot/requirements/12e6c9b.in -pytest-randomly==3.10.1 - # via -r .riot/requirements/12e6c9b.in -python-dateutil==2.9.0.post0 - # via botocore -pyyaml==6.0.1 - # via - # huggingface-hub - # langchain - # langchain-core - # vcrpy -regex==2024.5.15 - # via tiktoken -requests==2.32.3 - # via - # cohere - # huggingface-hub - # langchain - # langsmith - # tiktoken -s3transfer==0.10.2 - # via boto3 -sentencepiece==0.2.0 - # via ai21-tokenizer -six==1.16.0 - # via python-dateutil -sniffio==1.3.1 - # via - # anthropic - # anyio - # httpx - # openai -sortedcontainers==2.4.0 - # via hypothesis -sqlalchemy==2.0.31 - # via langchain -tenacity==8.5.0 - # via - # ai21 - # langchain - # langchain-core -tiktoken==0.7.0 - # via - # -r .riot/requirements/12e6c9b.in - # langchain-openai -tokenizers==0.19.1 - # via - # ai21-tokenizer - # anthropic - # cohere -tomli==2.0.1 - # via - # coverage - # pytest -tqdm==4.66.4 - # via - # huggingface-hub - # openai - # pinecone-client -types-requests==2.32.0.20240712 - # via cohere -typing-extensions==4.12.2 - # via - # ai21 - # anthropic - # anyio - # cohere - # huggingface-hub - # openai - # pinecone-client - # pydantic - # pydantic-core - # sqlalchemy - # typing-inspect -typing-inspect==0.9.0 - # via dataclasses-json -urllib3==2.0.7 - # via - # botocore - # pinecone-client - # requests - # types-requests -vcrpy==6.0.1 - # via -r .riot/requirements/12e6c9b.in -wrapt==1.16.0 - # via vcrpy -yarl==1.9.4 - # via - # aiohttp - # vcrpy diff --git a/.riot/requirements/d47114f.txt b/.riot/requirements/19a938f.txt similarity index 91% rename from .riot/requirements/d47114f.txt rename to .riot/requirements/19a938f.txt index f1a57da54e7..f0bf9780a29 100644 --- a/.riot/requirements/d47114f.txt +++ b/.riot/requirements/19a938f.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --no-annotate .riot/requirements/d47114f.in +# pip-compile --no-annotate .riot/requirements/19a938f.in # ai21==2.9.2 ai21-tokenizer==0.11.2 @@ -16,7 +16,7 @@ boto3==1.34.51 botocore==1.34.51 certifi==2024.7.4 charset-normalizer==3.3.2 -cohere==5.6.1 +cohere==5.6.2 coverage[toml]==7.6.0 dataclasses-json==0.6.7 defusedxml==0.7.1 @@ -31,7 +31,7 @@ h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 httpx-sse==0.4.0 -huggingface-hub==0.24.0 +huggingface-hub==0.24.1 hypothesis==6.45.0 idna==3.7 iniconfig==2.0.0 @@ -47,14 +47,14 @@ langchain-core==0.2.0 langchain-openai==0.1.7 langchain-pinecone==0.1.2 langchain-text-splitters==0.2.1 -langsmith==0.1.92 +langsmith==0.1.93 marshmallow==3.21.3 mock==5.1.0 multidict==6.0.5 mypy-extensions==1.0.0 numexpr==2.8.5 numpy==1.26.4 -openai==1.35.15 +openai==1.37.0 opentracing==2.4.0 orjson==3.10.6 packaging==23.2 @@ -65,7 +65,7 @@ pluggy==1.5.0 psutil==6.0.0 pydantic==2.8.2 pydantic-core==2.20.1 -pytest==8.2.2 +pytest==8.3.1 pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 diff --git a/.riot/requirements/1bb07e0.txt b/.riot/requirements/1bb07e0.txt new file mode 100644 index 00000000000..eb500eb53e1 --- /dev/null +++ b/.riot/requirements/1bb07e0.txt @@ -0,0 +1,104 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1bb07e0.in +# +ai21==2.9.2 +ai21-tokenizer==0.11.2 +aiohttp==3.9.5 +aiosignal==1.3.1 +annotated-types==0.7.0 +anthropic==0.31.2 +anyio==4.4.0 +async-timeout==4.0.3 +attrs==23.2.0 +boto3==1.34.146 +botocore==1.34.146 +certifi==2024.7.4 +charset-normalizer==3.3.2 +cohere==5.6.2 +coverage[toml]==7.6.0 +dataclasses-json==0.6.7 +defusedxml==0.7.1 +distro==1.9.0 +exceptiongroup==1.2.2 +fastavro==1.9.5 +filelock==3.15.4 +frozenlist==1.4.1 +fsspec==2024.6.1 +greenlet==3.0.3 +h11==0.14.0 +httpcore==1.0.5 +httpx==0.27.0 +httpx-sse==0.4.0 +huggingface-hub==0.24.1 +hypothesis==6.45.0 +idna==3.7 +importlib-metadata==8.1.0 +iniconfig==2.0.0 +jiter==0.5.0 +jmespath==1.0.1 +jsonpatch==1.33 +jsonpointer==3.0.0 +langchain==0.2.11 +langchain-anthropic==0.1.20 +langchain-aws==0.1.12 +langchain-cohere==0.1.9 +langchain-community==0.2.10 +langchain-core==0.2.23 +langchain-experimental==0.0.63 +langchain-openai==0.1.17 +langchain-pinecone==0.1.2 +langchain-text-splitters==0.2.2 +langsmith==0.1.93 +marshmallow==3.21.3 +mock==5.1.0 +multidict==6.0.5 +mypy-extensions==1.0.0 +numexpr==2.8.5 +numpy==1.26.4 +openai==1.37.0 +opentracing==2.4.0 +orjson==3.10.6 +packaging==24.1 +pandas==2.2.2 +parameterized==0.9.0 +pinecone-client==4.1.2 +pinecone-plugin-interface==0.0.7 +pluggy==1.5.0 +psutil==6.0.0 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.3.1 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.10.1 +python-dateutil==2.9.0.post0 +pytz==2024.1 +pyyaml==6.0.1 +regex==2024.5.15 +requests==2.32.3 +s3transfer==0.10.2 +sentencepiece==0.2.0 +six==1.16.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +sqlalchemy==2.0.31 +tabulate==0.9.0 +tenacity==8.5.0 +tiktoken==0.7.0 +tokenizers==0.19.1 +tomli==2.0.1 +tqdm==4.66.4 +types-requests==2.31.0.6 +types-urllib3==1.26.25.14 +typing-extensions==4.12.2 +typing-inspect==0.9.0 +tzdata==2024.1 +urllib3==1.26.19 +vcrpy==6.0.1 +wrapt==1.16.0 +yarl==1.9.4 +zipp==3.19.2 diff --git a/.riot/requirements/1e57344.txt b/.riot/requirements/1e57344.txt new file mode 100644 index 00000000000..bba906468c0 --- /dev/null +++ b/.riot/requirements/1e57344.txt @@ -0,0 +1,93 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1e57344.in +# +ai21==2.9.2 +ai21-tokenizer==0.11.2 +aiohttp==3.9.5 +aiosignal==1.3.1 +annotated-types==0.7.0 +anthropic==0.31.2 +anyio==4.4.0 +attrs==23.2.0 +boto3==1.34.51 +botocore==1.34.51 +certifi==2024.7.4 +charset-normalizer==3.3.2 +cohere==5.6.2 +coverage[toml]==7.6.0 +dataclasses-json==0.6.7 +defusedxml==0.7.1 +distro==1.9.0 +exceptiongroup==1.2.2 +fastavro==1.9.5 +filelock==3.15.4 +frozenlist==1.4.1 +fsspec==2024.6.1 +greenlet==3.0.3 +h11==0.14.0 +httpcore==1.0.5 +httpx==0.27.0 +httpx-sse==0.4.0 +huggingface-hub==0.24.1 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +jiter==0.5.0 +jmespath==1.0.1 +jsonpatch==1.33 +jsonpointer==3.0.0 +langchain==0.2.0 +langchain-anthropic==0.1.13 +langchain-aws==0.1.6 +langchain-cohere==0.1.8 +langchain-core==0.2.0 +langchain-openai==0.1.7 +langchain-pinecone==0.1.2 +langchain-text-splitters==0.2.1 +langsmith==0.1.93 +marshmallow==3.21.3 +mock==5.1.0 +multidict==6.0.5 +mypy-extensions==1.0.0 +numexpr==2.8.5 +numpy==1.26.4 +openai==1.37.0 +opentracing==2.4.0 +orjson==3.10.6 +packaging==23.2 +parameterized==0.9.0 +pinecone-client==4.1.2 +pinecone-plugin-interface==0.0.7 +pluggy==1.5.0 +psutil==6.0.0 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.3.1 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.10.1 +python-dateutil==2.9.0.post0 +pyyaml==6.0.1 +regex==2024.5.15 +requests==2.32.3 +s3transfer==0.10.2 +sentencepiece==0.2.0 +six==1.16.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +sqlalchemy==2.0.31 +tenacity==8.5.0 +tiktoken==0.7.0 +tokenizers==0.19.1 +tqdm==4.66.4 +types-requests==2.32.0.20240712 +typing-extensions==4.12.2 +typing-inspect==0.9.0 +urllib3==2.0.7 +vcrpy==6.0.1 +wrapt==1.16.0 +yarl==1.9.4 diff --git a/.riot/requirements/5425133.txt b/.riot/requirements/5425133.txt new file mode 100644 index 00000000000..ef44fb4dee4 --- /dev/null +++ b/.riot/requirements/5425133.txt @@ -0,0 +1,99 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/5425133.in +# +ai21==2.9.2 +ai21-tokenizer==0.11.2 +aiohttp==3.9.5 +aiosignal==1.3.1 +annotated-types==0.7.0 +anthropic==0.31.2 +anyio==4.4.0 +attrs==23.2.0 +boto3==1.34.146 +botocore==1.34.146 +certifi==2024.7.4 +charset-normalizer==3.3.2 +cohere==5.6.2 +coverage[toml]==7.6.0 +dataclasses-json==0.6.7 +defusedxml==0.7.1 +distro==1.9.0 +exceptiongroup==1.2.2 +fastavro==1.9.5 +filelock==3.15.4 +frozenlist==1.4.1 +fsspec==2024.6.1 +greenlet==3.0.3 +h11==0.14.0 +httpcore==1.0.5 +httpx==0.27.0 +httpx-sse==0.4.0 +huggingface-hub==0.24.1 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +jiter==0.5.0 +jmespath==1.0.1 +jsonpatch==1.33 +jsonpointer==3.0.0 +langchain==0.2.11 +langchain-anthropic==0.1.20 +langchain-aws==0.1.12 +langchain-cohere==0.1.9 +langchain-community==0.2.10 +langchain-core==0.2.23 +langchain-experimental==0.0.63 +langchain-openai==0.1.17 +langchain-pinecone==0.1.2 +langchain-text-splitters==0.2.2 +langsmith==0.1.93 +marshmallow==3.21.3 +mock==5.1.0 +multidict==6.0.5 +mypy-extensions==1.0.0 +numexpr==2.8.5 +numpy==1.26.4 +openai==1.37.0 +opentracing==2.4.0 +orjson==3.10.6 +packaging==24.1 +pandas==2.2.2 +parameterized==0.9.0 +pinecone-client==4.1.2 +pinecone-plugin-interface==0.0.7 +pluggy==1.5.0 +psutil==6.0.0 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.3.1 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.10.1 +python-dateutil==2.9.0.post0 +pytz==2024.1 +pyyaml==6.0.1 +regex==2024.5.15 +requests==2.32.3 +s3transfer==0.10.2 +sentencepiece==0.2.0 +six==1.16.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +sqlalchemy==2.0.31 +tabulate==0.9.0 +tenacity==8.5.0 +tiktoken==0.7.0 +tokenizers==0.19.1 +tqdm==4.66.4 +types-requests==2.32.0.20240712 +typing-extensions==4.12.2 +typing-inspect==0.9.0 +tzdata==2024.1 +urllib3==2.2.2 +vcrpy==6.0.1 +wrapt==1.16.0 +yarl==1.9.4 diff --git a/.riot/requirements/8dd750a.txt b/.riot/requirements/8dd750a.txt new file mode 100644 index 00000000000..1068af06c9f --- /dev/null +++ b/.riot/requirements/8dd750a.txt @@ -0,0 +1,101 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/8dd750a.in +# +ai21==2.9.2 +ai21-tokenizer==0.11.2 +aiohttp==3.9.5 +aiosignal==1.3.1 +annotated-types==0.7.0 +anthropic==0.31.2 +anyio==4.4.0 +async-timeout==4.0.3 +attrs==23.2.0 +boto3==1.34.146 +botocore==1.34.146 +certifi==2024.7.4 +charset-normalizer==3.3.2 +cohere==5.6.2 +coverage[toml]==7.6.0 +dataclasses-json==0.6.7 +defusedxml==0.7.1 +distro==1.9.0 +exceptiongroup==1.2.2 +fastavro==1.9.5 +filelock==3.15.4 +frozenlist==1.4.1 +fsspec==2024.6.1 +greenlet==3.0.3 +h11==0.14.0 +httpcore==1.0.5 +httpx==0.27.0 +httpx-sse==0.4.0 +huggingface-hub==0.24.1 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +jiter==0.5.0 +jmespath==1.0.1 +jsonpatch==1.33 +jsonpointer==3.0.0 +langchain==0.2.11 +langchain-anthropic==0.1.20 +langchain-aws==0.1.12 +langchain-cohere==0.1.9 +langchain-community==0.2.10 +langchain-core==0.2.23 +langchain-experimental==0.0.63 +langchain-openai==0.1.17 +langchain-pinecone==0.1.2 +langchain-text-splitters==0.2.2 +langsmith==0.1.93 +marshmallow==3.21.3 +mock==5.1.0 +multidict==6.0.5 +mypy-extensions==1.0.0 +numexpr==2.8.5 +numpy==1.26.4 +openai==1.37.0 +opentracing==2.4.0 +orjson==3.10.6 +packaging==24.1 +pandas==2.2.2 +parameterized==0.9.0 +pinecone-client==4.1.2 +pinecone-plugin-interface==0.0.7 +pluggy==1.5.0 +psutil==6.0.0 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.3.1 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.10.1 +python-dateutil==2.9.0.post0 +pytz==2024.1 +pyyaml==6.0.1 +regex==2024.5.15 +requests==2.32.3 +s3transfer==0.10.2 +sentencepiece==0.2.0 +six==1.16.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +sqlalchemy==2.0.31 +tabulate==0.9.0 +tenacity==8.5.0 +tiktoken==0.7.0 +tokenizers==0.19.1 +tomli==2.0.1 +tqdm==4.66.4 +types-requests==2.32.0.20240712 +typing-extensions==4.12.2 +typing-inspect==0.9.0 +tzdata==2024.1 +urllib3==2.2.2 +vcrpy==6.0.1 +wrapt==1.16.0 +yarl==1.9.4 diff --git a/.riot/requirements/b5df1ff.txt b/.riot/requirements/b5df1ff.txt new file mode 100644 index 00000000000..5f7ea454c0e --- /dev/null +++ b/.riot/requirements/b5df1ff.txt @@ -0,0 +1,99 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/b5df1ff.in +# +ai21==2.9.2 +ai21-tokenizer==0.11.2 +aiohttp==3.9.5 +aiosignal==1.3.1 +annotated-types==0.7.0 +anthropic==0.31.2 +anyio==4.4.0 +attrs==23.2.0 +boto3==1.34.146 +botocore==1.34.146 +certifi==2024.7.4 +charset-normalizer==3.3.2 +cohere==5.6.2 +coverage[toml]==7.6.0 +dataclasses-json==0.6.7 +defusedxml==0.7.1 +distro==1.9.0 +exceptiongroup==1.2.2 +fastavro==1.9.5 +filelock==3.15.4 +frozenlist==1.4.1 +fsspec==2024.6.1 +greenlet==3.0.3 +h11==0.14.0 +httpcore==1.0.5 +httpx==0.27.0 +httpx-sse==0.4.0 +huggingface-hub==0.24.1 +hypothesis==6.45.0 +idna==3.7 +iniconfig==2.0.0 +jiter==0.5.0 +jmespath==1.0.1 +jsonpatch==1.33 +jsonpointer==3.0.0 +langchain==0.2.11 +langchain-anthropic==0.1.20 +langchain-aws==0.1.12 +langchain-cohere==0.1.9 +langchain-community==0.2.10 +langchain-core==0.2.23 +langchain-experimental==0.0.63 +langchain-openai==0.1.17 +langchain-pinecone==0.1.2 +langchain-text-splitters==0.2.2 +langsmith==0.1.93 +marshmallow==3.21.3 +mock==5.1.0 +multidict==6.0.5 +mypy-extensions==1.0.0 +numexpr==2.8.5 +numpy==1.26.4 +openai==1.37.0 +opentracing==2.4.0 +orjson==3.10.6 +packaging==24.1 +pandas==2.2.2 +parameterized==0.9.0 +pinecone-client==4.1.2 +pinecone-plugin-interface==0.0.7 +pluggy==1.5.0 +psutil==6.0.0 +pydantic==2.8.2 +pydantic-core==2.20.1 +pytest==8.3.1 +pytest-asyncio==0.23.7 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.10.1 +python-dateutil==2.9.0.post0 +pytz==2024.1 +pyyaml==6.0.1 +regex==2024.5.15 +requests==2.32.3 +s3transfer==0.10.2 +sentencepiece==0.2.0 +six==1.16.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +sqlalchemy==2.0.31 +tabulate==0.9.0 +tenacity==8.5.0 +tiktoken==0.7.0 +tokenizers==0.19.1 +tqdm==4.66.4 +types-requests==2.32.0.20240712 +typing-extensions==4.12.2 +typing-inspect==0.9.0 +tzdata==2024.1 +urllib3==2.2.2 +vcrpy==6.0.1 +wrapt==1.16.0 +yarl==1.9.4 diff --git a/.riot/requirements/2d10f62.txt b/.riot/requirements/c06d6c9.txt similarity index 91% rename from .riot/requirements/2d10f62.txt rename to .riot/requirements/c06d6c9.txt index 0098e5cfcfd..842842d1257 100644 --- a/.riot/requirements/2d10f62.txt +++ b/.riot/requirements/c06d6c9.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/2d10f62.in +# pip-compile --no-annotate .riot/requirements/c06d6c9.in # ai21==2.9.2 ai21-tokenizer==0.11.2 @@ -17,7 +17,7 @@ boto3==1.34.51 botocore==1.34.51 certifi==2024.7.4 charset-normalizer==3.3.2 -cohere==5.6.1 +cohere==5.6.2 coverage[toml]==7.6.0 dataclasses-json==0.6.7 defusedxml==0.7.1 @@ -32,7 +32,7 @@ h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 httpx-sse==0.4.0 -huggingface-hub==0.24.0 +huggingface-hub==0.24.1 hypothesis==6.45.0 idna==3.7 iniconfig==2.0.0 @@ -48,14 +48,14 @@ langchain-core==0.2.0 langchain-openai==0.1.7 langchain-pinecone==0.1.2 langchain-text-splitters==0.2.1 -langsmith==0.1.92 +langsmith==0.1.93 marshmallow==3.21.3 mock==5.1.0 multidict==6.0.5 mypy-extensions==1.0.0 numexpr==2.8.5 numpy==1.26.4 -openai==1.35.15 +openai==1.37.0 opentracing==2.4.0 orjson==3.10.6 packaging==23.2 @@ -66,7 +66,7 @@ pluggy==1.5.0 psutil==6.0.0 pydantic==2.8.2 pydantic-core==2.20.1 -pytest==8.2.2 +pytest==8.3.1 pytest-asyncio==0.23.7 pytest-cov==5.0.0 pytest-mock==3.14.0 diff --git a/riotfile.py b/riotfile.py index 383a7b70142..f3e73128e78 100644 --- a/riotfile.py +++ b/riotfile.py @@ -2620,6 +2620,24 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): "botocore": "==1.34.51", "boto3": "==1.34.51", "cohere": latest, + "anthropic": latest, + }, + pys=select_pys(min_version="3.9"), + ), + Venv( + pkgs={ + "langchain": latest, + "langchain-community": latest, + "langchain-core": latest, + "langchain-openai": latest, + "langchain-pinecone": latest, + "langchain-anthropic": latest, + "langchain-aws": latest, + "langchain-cohere": latest, + "openai": latest, + "pinecone-client": latest, + "botocore": latest, + "cohere": latest, }, pys=select_pys(min_version="3.9"), ), diff --git a/tests/contrib/langchain/test_langchain_community.py b/tests/contrib/langchain/test_langchain_community.py index 355672d06e5..908bd5c67a5 100644 --- a/tests/contrib/langchain/test_langchain_community.py +++ b/tests/contrib/langchain/test_langchain_community.py @@ -19,12 +19,23 @@ reason="This module only tests langchain >= 0.1 and Python 3.10+", ) +IGNORE_FIELDS = [ + "resources", + "meta.openai.request.logprobs", # langchain-openai llm call now includes logprobs as param + "meta.error.stack", + "meta.http.useragent", + "meta.langchain.request.openai.parameters.seed", # langchain-openai llm call now includes seed as param + "meta.langchain.request.openai.parameters.logprobs", # langchain-openai llm call now includes seed as param + "metrics.langchain.tokens.total_cost", # total_cost depends on if tiktoken is installed +] + @pytest.fixture(scope="session") def request_vcr(): yield get_request_vcr(subdirectory_name="langchain_community") +@flaky(1735812000) @pytest.mark.parametrize("ddtrace_config_langchain", [dict(logs_enabled=True, log_prompt_completion_sample_rate=1.0)]) def test_global_tags( ddtrace_config_langchain, langchain, langchain_openai, request_vcr, mock_metrics, mock_logs, mock_tracer @@ -76,14 +87,16 @@ def test_global_tags( ) -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost", "resource"]) +@flaky(1735812000) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) def test_openai_llm_sync(langchain, langchain_openai, request_vcr): llm = langchain_openai.OpenAI() with request_vcr.use_cassette("openai_completion_sync.yaml"): llm.invoke("Can you explain what Descartes meant by 'I think, therefore I am'?") -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@flaky(1735812000) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) def test_openai_llm_sync_multiple_prompts(langchain, langchain_openai, request_vcr): llm = langchain_openai.OpenAI() with request_vcr.use_cassette("openai_completion_sync_multi_prompt.yaml"): @@ -95,28 +108,34 @@ def test_openai_llm_sync_multiple_prompts(langchain, langchain_openai, request_v ) -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@flaky(1735812000) +@pytest.mark.asyncio +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) async def test_openai_llm_async(langchain, langchain_openai, request_vcr): llm = langchain_openai.OpenAI() with request_vcr.use_cassette("openai_completion_async.yaml"): await llm.agenerate(["Which team won the 2019 NBA finals?"]) -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@flaky(1735812000) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) def test_openai_llm_sync_stream(langchain, langchain_openai, request_vcr): llm = langchain_openai.OpenAI(streaming=True) with request_vcr.use_cassette("openai_completion_sync_stream.yaml"): llm.invoke("Why is Spongebob so bad at driving?") -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@flaky(1735812000) +@pytest.mark.asyncio +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) async def test_openai_llm_async_stream(langchain, langchain_openai, request_vcr): llm = langchain_openai.OpenAI(streaming=True) with request_vcr.use_cassette("openai_completion_async_stream.yaml"): await llm.agenerate(["Why is Spongebob so bad at driving?"]) -@pytest.mark.snapshot(ignores=["meta.error.stack", "resource"]) +@flaky(1735812000) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) def test_openai_llm_error(langchain, langchain_openai, request_vcr): import openai # Imported here because the os env OPENAI_API_KEY needs to be set via langchain fixture before import @@ -131,6 +150,7 @@ def test_openai_llm_error(langchain, langchain_openai, request_vcr): llm.generate([12345, 123456]) +@flaky(1735812000) @pytest.mark.snapshot def test_cohere_llm_sync(langchain_cohere, request_vcr): llm = langchain_cohere.llms.Cohere(cohere_api_key=os.getenv("COHERE_API_KEY", "")) @@ -138,6 +158,7 @@ def test_cohere_llm_sync(langchain_cohere, request_vcr): llm.invoke("What is the secret Krabby Patty recipe?") +@flaky(1735812000) @pytest.mark.snapshot def test_ai21_llm_sync(langchain, langchain_community, request_vcr): if langchain_community is None: @@ -178,6 +199,7 @@ def test_openai_llm_metrics( mock_logs.assert_not_called() +@flaky(1735812000) @pytest.mark.parametrize( "ddtrace_config_langchain", [dict(metrics_enabled=False, logs_enabled=True, log_prompt_completion_sample_rate=1.0)], @@ -216,14 +238,16 @@ def test_llm_logs( mock_metrics.count.assert_not_called() -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@flaky(1735812000) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) def test_openai_chat_model_sync_call_langchain_openai(langchain, langchain_openai, request_vcr): chat = langchain_openai.ChatOpenAI(temperature=0, max_tokens=256) with request_vcr.use_cassette("openai_chat_completion_sync_call.yaml"): chat.invoke(input=[langchain.schema.HumanMessage(content="When do you use 'whom' instead of 'who'?")]) -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@flaky(1735812000) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) def test_openai_chat_model_sync_generate(langchain, langchain_openai, request_vcr): chat = langchain_openai.ChatOpenAI(temperature=0, max_tokens=256) with request_vcr.use_cassette("openai_chat_completion_sync_generate.yaml"): @@ -244,7 +268,7 @@ def test_openai_chat_model_sync_generate(langchain, langchain_openai, request_vc @flaky(1735812000) -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) def test_openai_chat_model_vision_generate(langchain_openai, request_vcr): """ Test that input messages with nested contents are still tagged without error @@ -273,14 +297,18 @@ def test_openai_chat_model_vision_generate(langchain_openai, request_vcr): ) -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@flaky(1735812000) +@pytest.mark.asyncio +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) async def test_openai_chat_model_async_call(langchain, langchain_openai, request_vcr): chat = langchain_openai.ChatOpenAI(temperature=0, max_tokens=256) with request_vcr.use_cassette("openai_chat_completion_async_call.yaml"): await chat._call_async([langchain.schema.HumanMessage(content="When do you use 'whom' instead of 'who'?")]) -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@flaky(1735812000) +@pytest.mark.asyncio +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) async def test_openai_chat_model_async_generate(langchain, langchain_openai, request_vcr): chat = langchain_openai.ChatOpenAI(temperature=0, max_tokens=256) with request_vcr.use_cassette("openai_chat_completion_async_generate.yaml"): @@ -300,9 +328,10 @@ async def test_openai_chat_model_async_generate(langchain, langchain_openai, req ) +@flaky(1735812000) @pytest.mark.snapshot( token="tests.contrib.langchain.test_langchain_community.test_openai_chat_model_stream", - ignores=["metrics.langchain.tokens.total_cost"], + ignores=IGNORE_FIELDS, ) def test_openai_chat_model_sync_stream(langchain, langchain_openai, request_vcr): chat = langchain_openai.ChatOpenAI(streaming=True, temperature=0, max_tokens=256) @@ -310,9 +339,11 @@ def test_openai_chat_model_sync_stream(langchain, langchain_openai, request_vcr) chat.invoke(input=[langchain.schema.HumanMessage(content="What is the secret Krabby Patty recipe?")]) +@flaky(1735812000) +@pytest.mark.asyncio @pytest.mark.snapshot( token="tests.contrib.langchain.test_langchain_community.test_openai_chat_model_stream", - ignores=["metrics.langchain.tokens.total_cost"], + ignores=IGNORE_FIELDS, ) async def test_openai_chat_model_async_stream(langchain, langchain_openai, request_vcr): chat = langchain_openai.ChatOpenAI(streaming=True, temperature=0, max_tokens=256) @@ -320,6 +351,7 @@ async def test_openai_chat_model_async_stream(langchain, langchain_openai, reque await chat.agenerate([[langchain.schema.HumanMessage(content="What is the secret Krabby Patty recipe?")]]) +@flaky(1735812000) def test_chat_model_metrics( langchain, langchain_community, langchain_openai, request_vcr, mock_metrics, mock_logs, snapshot_tracer ): @@ -350,6 +382,7 @@ def test_chat_model_metrics( mock_logs.assert_not_called() +@flaky(1735812000) @pytest.mark.parametrize( "ddtrace_config_langchain", [dict(metrics_enabled=False, logs_enabled=True, log_prompt_completion_sample_rate=1.0)], @@ -402,6 +435,7 @@ def test_chat_model_logs( mock_metrics.count.assert_not_called() +@flaky(1735812000) @pytest.mark.snapshot def test_openai_embedding_query(langchain_openai, request_vcr): with mock.patch("langchain_openai.OpenAIEmbeddings._get_len_safe_embeddings", return_value=[0.0] * 1536): @@ -426,6 +460,7 @@ def test_fake_embedding_document(langchain, langchain_community): embeddings.embed_documents(texts=["foo", "bar"]) +@flaky(1735812000) def test_openai_embedding_metrics(langchain_openai, request_vcr, mock_metrics, mock_logs, snapshot_tracer): with mock.patch("langchain_openai.OpenAIEmbeddings._get_len_safe_embeddings", return_value=[0.0] * 1536): embeddings = langchain_openai.OpenAIEmbeddings() @@ -448,6 +483,7 @@ def test_openai_embedding_metrics(langchain_openai, request_vcr, mock_metrics, m mock_logs.assert_not_called() +@flaky(1735812000) @pytest.mark.parametrize( "ddtrace_config_langchain", [dict(metrics_enabled=False, logs_enabled=True, log_prompt_completion_sample_rate=1.0)], @@ -485,7 +521,7 @@ def test_embedding_logs(langchain_openai, ddtrace_config_langchain, request_vcr, @flaky(1735812000) -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) def test_openai_math_chain_sync(langchain, langchain_openai, request_vcr): """ Test that using the provided LLMMathChain will result in a 3-span trace with @@ -499,7 +535,7 @@ def test_openai_math_chain_sync(langchain, langchain_openai, request_vcr): @flaky(1735812000) @pytest.mark.snapshot( token="tests.contrib.langchain.test_langchain_community.test_chain_invoke", - ignores=["metrics.langchain.tokens.total_cost"], + ignores=IGNORE_FIELDS, ) def test_chain_invoke_dict_input(langchain, langchain_openai, request_vcr): prompt_template = "what is {base} raised to the fifty-fourth power?" @@ -509,9 +545,10 @@ def test_chain_invoke_dict_input(langchain, langchain_openai, request_vcr): chain.invoke(input={"base": "two"}) +@flaky(1735812000) @pytest.mark.snapshot( token="tests.contrib.langchain.test_langchain_community.test_chain_invoke", - ignores=["metrics.langchain.tokens.total_cost"], + ignores=IGNORE_FIELDS, ) def test_chain_invoke_str_input(langchain, langchain_openai, request_vcr): prompt_template = "what is {base} raised to the fifty-fourth power?" @@ -521,7 +558,9 @@ def test_chain_invoke_str_input(langchain, langchain_openai, request_vcr): chain.invoke("two") -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@flaky(1735812000) +@pytest.mark.asyncio +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) async def test_openai_math_chain_async(langchain, langchain_openai, request_vcr): """ Test that using the provided LLMMathChain will result in a 3-span trace with @@ -532,6 +571,7 @@ async def test_openai_math_chain_async(langchain, langchain_openai, request_vcr) await chain.ainvoke("what is two raised to the fifty-fourth power?") +@flaky(1735812000) @pytest.mark.snapshot(token="tests.contrib.langchain.test_langchain_community.test_cohere_math_chain") def test_cohere_math_chain_sync(langchain, langchain_cohere, request_vcr): """ @@ -546,7 +586,7 @@ def test_cohere_math_chain_sync(langchain, langchain_cohere, request_vcr): @flaky(1735812000) -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) def test_openai_sequential_chain(langchain, langchain_openai, request_vcr): """ Test that using a SequentialChain will result in a 4-span trace with @@ -600,7 +640,7 @@ def _transform_func(inputs): @flaky(1735812000) -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) def test_openai_sequential_chain_with_multiple_llm_sync(langchain, langchain_openai, request_vcr): template = """Paraphrase this text: @@ -639,7 +679,9 @@ def test_openai_sequential_chain_with_multiple_llm_sync(langchain, langchain_ope sequential_chain.invoke({"input_text": input_text}) -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@flaky(1735812000) +@pytest.mark.asyncio +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) async def test_openai_sequential_chain_with_multiple_llm_async(langchain, langchain_openai, request_vcr): template = """Paraphrase this text: @@ -788,6 +830,7 @@ def test_chat_prompt_template_does_not_parse_template(langchain, langchain_opena assert chain_span.get_tag("langchain.request.prompt") is None +@flaky(1735812000) @pytest.mark.snapshot def test_pinecone_vectorstore_similarity_search(langchain_openai, request_vcr): """ @@ -809,12 +852,10 @@ def test_pinecone_vectorstore_similarity_search(langchain_openai, request_vcr): vectorstore.similarity_search("Who was Alan Turing?", 1) +@flaky(1735812000) @pytest.mark.snapshot( - ignores=[ - "metrics.langchain.tokens.total_cost", - "meta.langchain.response.outputs.input_documents", - "meta.langchain.request.inputs.input_documents", - ] + ignores=IGNORE_FIELDS + + ["meta.langchain.response.outputs.input_documents", "meta.langchain.request.inputs.input_documents"] ) def test_pinecone_vectorstore_retrieval_chain(langchain_openai, request_vcr): """ @@ -841,6 +882,7 @@ def test_pinecone_vectorstore_retrieval_chain(langchain_openai, request_vcr): qa_with_sources.invoke("Who was Alan Turing?") +@flaky(1735812000) def test_vectorstore_similarity_search_metrics(langchain_openai, request_vcr, mock_metrics, mock_logs, snapshot_tracer): import langchain_pinecone import pinecone @@ -869,6 +911,7 @@ def test_vectorstore_similarity_search_metrics(langchain_openai, request_vcr, mo mock_logs.assert_not_called() +@flaky(1735812000) @pytest.mark.parametrize( "ddtrace_config_langchain", [dict(metrics_enabled=False, logs_enabled=True, log_prompt_completion_sample_rate=1.0)], @@ -933,7 +976,8 @@ def test_vectorstore_logs( mock_metrics.count.assert_not_called() -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost", "meta.http.useragent", "resource"]) +@flaky(1735812000) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) def test_openai_integration(langchain, request_vcr, ddtrace_run_python_code_in_subprocess): env = os.environ.copy() pypath = [os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))] @@ -963,7 +1007,8 @@ def test_openai_integration(langchain, request_vcr, ddtrace_run_python_code_in_s assert err == b"" -@pytest.mark.snapshot(ignores=["meta.http.useragent", "metrics.langchain.tokens.total_cost"]) +@flaky(1735812000) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) @pytest.mark.parametrize("schema_version", [None, "v0", "v1"]) @pytest.mark.parametrize("service_name", [None, "mysvc"]) def test_openai_service_name( @@ -1119,7 +1164,8 @@ def test_embedding_logs_when_response_not_completed( ) -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@flaky(1735812000) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) def test_lcel_chain_simple(langchain_core, langchain_openai, request_vcr): prompt = langchain_core.prompts.ChatPromptTemplate.from_messages( [("system", "You are world class technical documentation writer."), ("user", "{input}")] @@ -1132,7 +1178,7 @@ def test_lcel_chain_simple(langchain_core, langchain_openai, request_vcr): @flaky(1735812000) -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) def test_lcel_chain_complicated(langchain_core, langchain_openai, request_vcr): prompt = langchain_core.prompts.ChatPromptTemplate.from_template( "Tell me a short joke about {topic} in the style of {style}" @@ -1161,7 +1207,9 @@ def test_lcel_chain_complicated(langchain_core, langchain_openai, request_vcr): chain.invoke({"topic": "chickens", "style": "a 90s rapper"}) -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@flaky(1735812000) +@pytest.mark.asyncio +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) async def test_lcel_chain_simple_async(langchain_core, langchain_openai, request_vcr): prompt = langchain_core.prompts.ChatPromptTemplate.from_messages( [("system", "You are world class technical documentation writer."), ("user", "{input}")] @@ -1174,7 +1222,7 @@ async def test_lcel_chain_simple_async(langchain_core, langchain_openai, request @flaky(1735812000, reason="batch() is non-deterministic in which order it processes inputs") -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) @pytest.mark.skipif(sys.version_info >= (3, 11, 0), reason="Python <3.11 test") def test_lcel_chain_batch(langchain_core, langchain_openai, request_vcr): """ @@ -1191,7 +1239,7 @@ def test_lcel_chain_batch(langchain_core, langchain_openai, request_vcr): @flaky(1735812000, reason="batch() is non-deterministic in which order it processes inputs") -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) @pytest.mark.skipif(sys.version_info < (3, 11, 0), reason="Python 3.11+ required") def test_lcel_chain_batch_311(langchain_core, langchain_openai, request_vcr): """ @@ -1207,7 +1255,8 @@ def test_lcel_chain_batch_311(langchain_core, langchain_openai, request_vcr): chain.batch(inputs=["chickens", "pigs"]) -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@flaky(1735812000) +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) def test_lcel_chain_nested(langchain_core, langchain_openai, request_vcr): """ Test that invoking a nested chain will result in a 4-span trace with a root @@ -1231,7 +1280,8 @@ def test_lcel_chain_nested(langchain_core, langchain_openai, request_vcr): @flaky(1735812000, reason="batch() is non-deterministic in which order it processes inputs") -@pytest.mark.snapshot(ignores=["metrics.langchain.tokens.total_cost"]) +@pytest.mark.asyncio +@pytest.mark.snapshot(ignores=IGNORE_FIELDS) async def test_lcel_chain_batch_async(langchain_core, langchain_openai, request_vcr): """ Test that invoking a chain with a batch of inputs will result in a 4-span trace, @@ -1258,6 +1308,7 @@ def test_lcel_chain_non_dict_input(langchain_core): sequence.invoke(1) +@flaky(1735812000) @pytest.mark.snapshot def test_faiss_vectorstore_retrieval(langchain_community, langchain_openai, request_vcr): if langchain_community is None: diff --git a/tests/snapshots/tests.contrib.langchain.test_langchain_community.test_lcel_chain_non_dict_input.json b/tests/snapshots/tests.contrib.langchain.test_langchain_community.test_lcel_chain_non_dict_input.json new file mode 100644 index 00000000000..8e3c081fcf1 --- /dev/null +++ b/tests/snapshots/tests.contrib.langchain.test_langchain_community.test_lcel_chain_non_dict_input.json @@ -0,0 +1,29 @@ +[[ + { + "name": "langchain.request", + "service": "", + "resource": "langchain_core.runnables.base.RunnableSequence", + "trace_id": 0, + "span_id": 1, + "parent_id": 0, + "type": "", + "error": 0, + "meta": { + "_dd.p.dm": "-0", + "_dd.p.tid": "669ee23700000000", + "langchain.request.inputs.0": "1", + "langchain.request.type": "chain", + "langchain.response.outputs.0": "4", + "language": "python", + "runtime-id": "919cb1528b424d42988633fa49608826" + }, + "metrics": { + "_dd.measured": 1, + "_dd.top_level": 1, + "_dd.tracer_kr": 1.0, + "_sampling_priority_v1": 1, + "process_id": 43636 + }, + "duration": 2821000, + "start": 1721688631858351000 + }]] From ae67f4f8b5fb3679e5dd720fb1ccf69a0ad351f5 Mon Sep 17 00:00:00 2001 From: Christophe Papazian <114495376+christophe-papazian@users.noreply.github.com> Date: Wed, 24 Jul 2024 17:21:05 +0200 Subject: [PATCH 22/29] chore(asm): update security rules to 1.13.0 (#9920) Update the static security rule file used for asm to last version. https://github.com/DataDog/appsec-event-rules/releases/tag/1.13.0 APPSEC-54212 ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- ddtrace/appsec/rules.json | 220 +++++++++++++++++- ...st_appsec_body_no_collection_snapshot.json | 4 +- ...appsec_cookies_no_collection_snapshot.json | 4 +- ...cessor.test_appsec_span_tags_snapshot.json | 4 +- ..._appsec_snapshots.test_appsec_enabled.json | 4 +- ..._snapshots.test_appsec_enabled_attack.json | 4 +- 6 files changed, 229 insertions(+), 11 deletions(-) diff --git a/ddtrace/appsec/rules.json b/ddtrace/appsec/rules.json index 0b25be934c8..f181703cce3 100644 --- a/ddtrace/appsec/rules.json +++ b/ddtrace/appsec/rules.json @@ -1,7 +1,7 @@ { "version": "2.2", "metadata": { - "rules_version": "1.12.0" + "rules_version": "1.13.0" }, "rules": [ { @@ -6285,6 +6285,55 @@ "stack_trace" ] }, + { + "id": "rasp-932-100", + "name": "Shell injection exploit", + "enabled": false, + "tags": { + "type": "command_injection", + "category": "vulnerability_trigger", + "cwe": "77", + "capec": "1000/152/248/88", + "confidence": "0", + "module": "rasp" + }, + "conditions": [ + { + "parameters": { + "resource": [ + { + "address": "server.sys.shell.cmd" + } + ], + "params": [ + { + "address": "server.request.query" + }, + { + "address": "server.request.body" + }, + { + "address": "server.request.path_params" + }, + { + "address": "grpc.server.request.message" + }, + { + "address": "graphql.server.all_resolvers" + }, + { + "address": "graphql.server.resolver" + } + ] + }, + "operator": "shi_detector" + } + ], + "transformers": [], + "on_match": [ + "stack_trace" + ] + }, { "id": "rasp-934-100", "name": "Server-side request forgery exploit", @@ -8388,6 +8437,57 @@ } ], "processors": [ + { + "id": "http-endpoint-fingerprint", + "generator": "http_endpoint_fingerprint", + "conditions": [ + { + "operator": "exists", + "parameters": { + "inputs": [ + { + "address": "waf.context.event" + }, + { + "address": "server.business_logic.users.login.failure" + }, + { + "address": "server.business_logic.users.login.success" + } + ] + } + } + ], + "parameters": { + "mappings": [ + { + "method": [ + { + "address": "server.request.method" + } + ], + "uri_raw": [ + { + "address": "server.request.uri.raw" + } + ], + "body": [ + { + "address": "server.request.body" + } + ], + "query": [ + { + "address": "server.request.query" + } + ], + "output": "_dd.appsec.fp.http.endpoint" + } + ] + }, + "evaluate": false, + "output": true + }, { "id": "extract-content", "generator": "extract_schema", @@ -8537,6 +8637,124 @@ }, "evaluate": false, "output": true + }, + { + "id": "http-header-fingerprint", + "generator": "http_header_fingerprint", + "conditions": [ + { + "operator": "exists", + "parameters": { + "inputs": [ + { + "address": "waf.context.event" + }, + { + "address": "server.business_logic.users.login.failure" + }, + { + "address": "server.business_logic.users.login.success" + } + ] + } + } + ], + "parameters": { + "mappings": [ + { + "headers": [ + { + "address": "server.request.headers.no_cookies" + } + ], + "output": "_dd.appsec.fp.http.header" + } + ] + }, + "evaluate": false, + "output": true + }, + { + "id": "http-network-fingerprint", + "generator": "http_network_fingerprint", + "conditions": [ + { + "operator": "exists", + "parameters": { + "inputs": [ + { + "address": "waf.context.event" + }, + { + "address": "server.business_logic.users.login.failure" + }, + { + "address": "server.business_logic.users.login.success" + } + ] + } + } + ], + "parameters": { + "mappings": [ + { + "headers": [ + { + "address": "server.request.headers.no_cookies" + } + ], + "output": "_dd.appsec.fp.http.network" + } + ] + }, + "evaluate": false, + "output": true + }, + { + "id": "session-fingerprint", + "generator": "session_fingerprint", + "conditions": [ + { + "operator": "exists", + "parameters": { + "inputs": [ + { + "address": "waf.context.event" + }, + { + "address": "server.business_logic.users.login.failure" + }, + { + "address": "server.business_logic.users.login.success" + } + ] + } + } + ], + "parameters": { + "mappings": [ + { + "cookies": [ + { + "address": "server.request.cookies" + } + ], + "session_id": [ + { + "address": "usr.session_id" + } + ], + "user_id": [ + { + "address": "usr.id" + } + ], + "output": "_dd.appsec.fp.session" + } + ] + }, + "evaluate": false, + "output": true } ], "scanners": [ diff --git a/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_body_no_collection_snapshot.json b/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_body_no_collection_snapshot.json index c0555472433..da402408eab 100644 --- a/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_body_no_collection_snapshot.json +++ b/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_body_no_collection_snapshot.json @@ -8,7 +8,7 @@ "parent_id": 0, "type": "web", "meta": { - "_dd.appsec.event_rules.version": "1.12.0", + "_dd.appsec.event_rules.version": "1.13.0", "_dd.appsec.json": "{\"triggers\":[\n {\n \"rule\": {\n \"id\": \"nfd-000-006\",\n \"name\": \"Detect failed attempt to fetch sensitive files\",\n \"tags\": {\n \"capec\": \"1000/118/169\",\n \"category\": \"attack_attempt\",\n \"confidence\": \"1\",\n \"cwe\": \"200\",\n \"type\": \"security_scanner\"\n }\n },\n \"rule_matches\": [\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"^404$\",\n \"parameters\": [\n {\n \"address\": \"server.response.status\",\n \"highlight\": [\n \"404\"\n ],\n \"key_path\": [],\n \"value\": \"404\"\n }\n ]\n },\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"\\\\.(cgi|bat|dll|exe|key|cert|crt|pem|der|pkcs|pkcs|pkcs[0-9]*|nsf|jsa|war|java|class|vb|vba|so|git|svn|hg|cvs)([^a-zA-Z0-9_]|$)\",\n \"parameters\": [\n {\n \"address\": \"server.request.uri.raw\",\n \"highlight\": [\n \".git\"\n ],\n \"key_path\": [],\n \"value\": \"/.git\"\n }\n ]\n }\n ]\n }\n]}", "_dd.appsec.waf.version": "1.19.0", "_dd.origin": "appsec", @@ -23,7 +23,7 @@ "metrics": { "_dd.appsec.enabled": 1.0, "_dd.appsec.event_rules.error_count": 0, - "_dd.appsec.event_rules.loaded": 157, + "_dd.appsec.event_rules.loaded": 158, "_dd.appsec.waf.duration": 204.672, "_dd.appsec.waf.duration_ext": 280.3802490234375, "_dd.top_level": 1, diff --git a/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_cookies_no_collection_snapshot.json b/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_cookies_no_collection_snapshot.json index 38edf5a1a0a..d999562b162 100644 --- a/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_cookies_no_collection_snapshot.json +++ b/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_cookies_no_collection_snapshot.json @@ -8,7 +8,7 @@ "parent_id": 0, "type": "web", "meta": { - "_dd.appsec.event_rules.version": "1.12.0", + "_dd.appsec.event_rules.version": "1.13.0", "_dd.appsec.json": "{\"triggers\":[\n {\n \"rule\": {\n \"id\": \"nfd-000-006\",\n \"name\": \"Detect failed attempt to fetch sensitive files\",\n \"tags\": {\n \"capec\": \"1000/118/169\",\n \"category\": \"attack_attempt\",\n \"confidence\": \"1\",\n \"cwe\": \"200\",\n \"type\": \"security_scanner\"\n }\n },\n \"rule_matches\": [\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"^404$\",\n \"parameters\": [\n {\n \"address\": \"server.response.status\",\n \"highlight\": [\n \"404\"\n ],\n \"key_path\": [],\n \"value\": \"404\"\n }\n ]\n },\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"\\\\.(cgi|bat|dll|exe|key|cert|crt|pem|der|pkcs|pkcs|pkcs[0-9]*|nsf|jsa|war|java|class|vb|vba|so|git|svn|hg|cvs)([^a-zA-Z0-9_]|$)\",\n \"parameters\": [\n {\n \"address\": \"server.request.uri.raw\",\n \"highlight\": [\n \".git\"\n ],\n \"key_path\": [],\n \"value\": \"/.git\"\n }\n ]\n }\n ]\n }\n]}", "_dd.appsec.waf.version": "1.19.0", "_dd.origin": "appsec", @@ -23,7 +23,7 @@ "metrics": { "_dd.appsec.enabled": 1.0, "_dd.appsec.event_rules.error_count": 0, - "_dd.appsec.event_rules.loaded": 157, + "_dd.appsec.event_rules.loaded": 158, "_dd.appsec.waf.duration": 103.238, "_dd.appsec.waf.duration_ext": 174.04556274414062, "_dd.top_level": 1, diff --git a/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_span_tags_snapshot.json b/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_span_tags_snapshot.json index a2d1604ef0c..8ab6771e21b 100644 --- a/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_span_tags_snapshot.json +++ b/tests/snapshots/tests.appsec.appsec.test_processor.test_appsec_span_tags_snapshot.json @@ -8,7 +8,7 @@ "parent_id": 0, "type": "web", "meta": { - "_dd.appsec.event_rules.version": "1.12.0", + "_dd.appsec.event_rules.version": "1.13.0", "_dd.appsec.json": "{\"triggers\":[\n {\n \"rule\": {\n \"id\": \"nfd-000-006\",\n \"name\": \"Detect failed attempt to fetch sensitive files\",\n \"tags\": {\n \"capec\": \"1000/118/169\",\n \"category\": \"attack_attempt\",\n \"confidence\": \"1\",\n \"cwe\": \"200\",\n \"type\": \"security_scanner\"\n }\n },\n \"rule_matches\": [\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"^404$\",\n \"parameters\": [\n {\n \"address\": \"server.response.status\",\n \"highlight\": [\n \"404\"\n ],\n \"key_path\": [],\n \"value\": \"404\"\n }\n ]\n },\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"\\\\.(cgi|bat|dll|exe|key|cert|crt|pem|der|pkcs|pkcs|pkcs[0-9]*|nsf|jsa|war|java|class|vb|vba|so|git|svn|hg|cvs)([^a-zA-Z0-9_]|$)\",\n \"parameters\": [\n {\n \"address\": \"server.request.uri.raw\",\n \"highlight\": [\n \".git\"\n ],\n \"key_path\": [],\n \"value\": \"/.git\"\n }\n ]\n }\n ]\n }\n]}", "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", @@ -25,7 +25,7 @@ "metrics": { "_dd.appsec.enabled": 1.0, "_dd.appsec.event_rules.error_count": 0, - "_dd.appsec.event_rules.loaded": 157, + "_dd.appsec.event_rules.loaded": 158, "_dd.appsec.waf.duration": 126.022, "_dd.appsec.waf.duration_ext": 203.3710479736328, "_dd.top_level": 1, diff --git a/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled.json b/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled.json index 1e48d40f8c1..28b5e6f37c2 100644 --- a/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled.json +++ b/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled.json @@ -9,7 +9,7 @@ "type": "web", "error": 0, "meta": { - "_dd.appsec.event_rules.version": "1.12.0", + "_dd.appsec.event_rules.version": "1.13.0", "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", "_dd.p.dm": "-0", @@ -42,7 +42,7 @@ "metrics": { "_dd.appsec.enabled": 1.0, "_dd.appsec.event_rules.error_count": 0, - "_dd.appsec.event_rules.loaded": 157, + "_dd.appsec.event_rules.loaded": 158, "_dd.appsec.waf.duration": 96.626, "_dd.appsec.waf.duration_ext": 147.81951904296875, "_dd.measured": 1, diff --git a/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled_attack.json b/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled_attack.json index 3a94aaef308..2cd56b8fd7c 100644 --- a/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled_attack.json +++ b/tests/snapshots/tests.contrib.django.test_django_appsec_snapshots.test_appsec_enabled_attack.json @@ -9,7 +9,7 @@ "type": "web", "error": 0, "meta": { - "_dd.appsec.event_rules.version": "1.12.0", + "_dd.appsec.event_rules.version": "1.13.0", "_dd.appsec.json": "{\"triggers\":[\n {\n \"rule\": {\n \"id\": \"nfd-000-006\",\n \"name\": \"Detect failed attempt to fetch sensitive files\",\n \"tags\": {\n \"capec\": \"1000/118/169\",\n \"category\": \"attack_attempt\",\n \"confidence\": \"1\",\n \"cwe\": \"200\",\n \"type\": \"security_scanner\"\n }\n },\n \"rule_matches\": [\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"^404$\",\n \"parameters\": [\n {\n \"address\": \"server.response.status\",\n \"highlight\": [\n \"404\"\n ],\n \"key_path\": [],\n \"value\": \"404\"\n }\n ]\n },\n {\n \"operator\": \"match_regex\",\n \"operator_value\": \"\\\\.(cgi|bat|dll|exe|key|cert|crt|pem|der|pkcs|pkcs|pkcs[0-9]*|nsf|jsa|war|java|class|vb|vba|so|git|svn|hg|cvs)([^a-zA-Z0-9_]|$)\",\n \"parameters\": [\n {\n \"address\": \"server.request.uri.raw\",\n \"highlight\": [\n \".git\"\n ],\n \"key_path\": [],\n \"value\": \"/.git\"\n }\n ]\n }\n ]\n }\n]}", "_dd.appsec.waf.version": "1.19.0", "_dd.base_service": "", @@ -45,7 +45,7 @@ "metrics": { "_dd.appsec.enabled": 1.0, "_dd.appsec.event_rules.error_count": 0, - "_dd.appsec.event_rules.loaded": 157, + "_dd.appsec.event_rules.loaded": 158, "_dd.appsec.waf.duration": 236.874, "_dd.appsec.waf.duration_ext": 339.26963806152344, "_dd.measured": 1, From 2de06b297710919918060e0da394c886e20ad588 Mon Sep 17 00:00:00 2001 From: Brett Langdon Date: Wed, 24 Jul 2024 12:02:08 -0400 Subject: [PATCH 23/29] fix(internal): set net.git-fetch-with-cli=true for core rust extension (#9921) https://doc.rust-lang.org/nightly/cargo/reference/config.html#netgit-fetch-with-cli The built-in git client used by Cargo does not support all of the same Git authentication configuration as the git binary. This setting ensures the system git binary is used instead of the built-in client, ensuring that any/all custom git configuration is used. This means we require `git` to be installed to build from source, but this should already be the case. ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- .gitlab/benchmarks.yml | 1 + src/core/Cargo.toml | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/.gitlab/benchmarks.yml b/.gitlab/benchmarks.yml index aef83647c40..38706efe47e 100644 --- a/.gitlab/benchmarks.yml +++ b/.gitlab/benchmarks.yml @@ -33,6 +33,7 @@ variables: UPSTREAM_COMMIT_SHA: $CI_COMMIT_SHA # The commit revision the project is built for. KUBERNETES_SERVICE_ACCOUNT_OVERWRITE: dd-trace-py FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY: "true" + CARGO_NET_GIT_FETCH_WITH_CLI: "true" # use system git binary to pull git dependencies benchmarks-pr-comment: stage: benchmarks-pr-comment diff --git a/src/core/Cargo.toml b/src/core/Cargo.toml index c55ac470d09..f972b216738 100644 --- a/src/core/Cargo.toml +++ b/src/core/Cargo.toml @@ -21,3 +21,9 @@ pyo3-build-config = "0.21.2" name = "_core" path = "lib.rs" crate-type = ["cdylib"] + + +[net] +# Use git binary from the system instead of the built-in git client +# "Setting this to true can be helpful if you have special authentication requirements that Cargo does not support." +git-fetch-with-cli = true From 5b5b7021aa8c6019cffe351ec1c673b7c38a3eb8 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Wed, 24 Jul 2024 15:01:29 -0400 Subject: [PATCH 24/29] chore(tracing): add span links and events to debug info (#9771) `Span._pprint()` is used in span finish debug logs. This PR ensures span_links and span_events values are also printed. ## Checklist - [x] The PR description includes an overview of the change - [x] The PR description articulates the motivation for the change - [x] The change includes tests OR the PR description describes a testing strategy - [x] The PR description notes risks associated with the change, if any - [x] Newly-added code is easy to change - [x] The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - [x] The change includes or references documentation updates if necessary - [x] Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [ ] Title is accurate - [ ] All changes are related to the pull request's stated goal - [ ] Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - [ ] Testing strategy adequately addresses listed risks - [ ] Newly-added code is easy to change - [ ] Release note makes sense to a user of the library - [ ] If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - [ ] Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- ddtrace/_trace/_span_link.py | 7 +++++++ ddtrace/_trace/span.py | 6 ++++++ tests/tracer/test_span.py | 8 ++++++++ 3 files changed, 21 insertions(+) diff --git a/ddtrace/_trace/_span_link.py b/ddtrace/_trace/_span_link.py index 78f06b9888a..6f304d7bf01 100644 --- a/ddtrace/_trace/_span_link.py +++ b/ddtrace/_trace/_span_link.py @@ -109,3 +109,10 @@ def to_dict(self): d["flags"] = self.flags return d + + def __str__(self) -> str: + attrs_str = ",".join([f"{k}:{v}" for k, v in self.attributes.items()]) + return ( + f"trace_id={self.trace_id} span_id={self.span_id} attributes={attrs_str} " + f"tracestate={self.tracestate} flags={self.flags} dropped_attributes={self._dropped_attributes}" + ) diff --git a/ddtrace/_trace/span.py b/ddtrace/_trace/span.py index e7c7fec6b00..b9ea6cdac7f 100644 --- a/ddtrace/_trace/span.py +++ b/ddtrace/_trace/span.py @@ -72,6 +72,10 @@ def __dict__(self): d["attributes"] = self.attributes return d + def __str__(self): + attrs_str = ",".join([f"{k}:{v}" for k, v in self.attributes.items()]) + return f"name={self.name} time={self.time_unix_nano} attributes={attrs_str}" + log = get_logger(__name__) @@ -569,6 +573,8 @@ def _pprint(self) -> str: ("error", self.error), ("tags", dict(sorted(self._meta.items()))), ("metrics", dict(sorted(self._metrics.items()))), + ("links", ", ".join([str(link) for _, link in self._links.items()])), + ("events", ", ".join([str(e) for e in self._events])), ] return " ".join( # use a large column width to keep pprint output on one line diff --git a/tests/tracer/test_span.py b/tests/tracer/test_span.py index fb0392ba275..58e7a96e6ec 100644 --- a/tests/tracer/test_span.py +++ b/tests/tracer/test_span.py @@ -695,6 +695,9 @@ def test_span_pprint(): root = Span("test.span", service="s", resource="r", span_type=SpanTypes.WEB) root.set_tag("t", "v") root.set_metric("m", 1.0) + root._add_event("message", {"importance": 10}, 16789898242) + root.set_link(trace_id=99, span_id=10, attributes={"link.name": "s1_to_s2", "link.kind": "scheduled_by"}) + root.finish() actual = root._pprint() assert "name='test.span'" in actual @@ -704,6 +707,11 @@ def test_span_pprint(): assert "error=0" in actual assert "tags={'t': 'v'}" in actual assert "metrics={'m': 1.0}" in actual + assert "events='name=message time=16789898242 attributes=importance:10'" in actual + assert ( + "links='trace_id=99 span_id=10 attributes=link.name:s1_to_s2,link.kind:scheduled_by " + "tracestate=None flags=None dropped_attributes=0'" in actual + ) assert re.search("id=[0-9]+", actual) is not None assert re.search("trace_id=[0-9]+", actual) is not None assert "parent_id=None" in actual From 9cce458b5ffeabe1dfee22687c89b8635856b9b6 Mon Sep 17 00:00:00 2001 From: David Sanchez <838104+sanchda@users.noreply.github.com> Date: Wed, 24 Jul 2024 16:09:49 -0700 Subject: [PATCH 25/29] chore(core): crashtracker should resolve stacks by default (#9923) Changes the default behavior of crashtracker so it produces stack traces. Enriches the existing tests and adds some new ones. ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- ddtrace/settings/crashtracker.py | 13 ++++++-- .../crashtracker/test_crashtracker.py | 30 +++++++++++++++++++ tests/telemetry/test_writer.py | 4 +-- 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/ddtrace/settings/crashtracker.py b/ddtrace/settings/crashtracker.py index 6637047193d..a27af59bca8 100644 --- a/ddtrace/settings/crashtracker.py +++ b/ddtrace/settings/crashtracker.py @@ -5,12 +5,19 @@ from ddtrace.internal.utils.formats import parse_tags_str +resolver_default = "full" + + def _derive_stacktrace_resolver(config: "CrashtrackerConfig") -> t.Optional[str]: resolver = str(config._stacktrace_resolver or "") resolver = resolver.lower() + if resolver == "none": + return None if resolver in ("fast", "full", "safe"): return resolver - return None + + # Invalid values should degrade to the default + return resolver_default def _check_for_crashtracker_available() -> bool: @@ -75,10 +82,10 @@ class CrashtrackerConfig(En): _stacktrace_resolver = En.v( t.Optional[str], "stacktrace_resolver", - default=None, + default=resolver_default, help_type="String", help="How to collect native stack traces during a crash, if at all. Accepted values are 'none', 'fast'," - " 'safe', and 'full'. The default value is 'none' (no stack traces).", + " 'safe', and 'full'. The default value is '" + resolver_default + "'.", ) stacktrace_resolver = En.d(t.Optional[str], _derive_stacktrace_resolver) diff --git a/tests/internal/crashtracker/test_crashtracker.py b/tests/internal/crashtracker/test_crashtracker.py index 8798da9301c..a3aea313ee4 100644 --- a/tests/internal/crashtracker/test_crashtracker.py +++ b/tests/internal/crashtracker/test_crashtracker.py @@ -306,7 +306,9 @@ def test_crashtracker_preload_default(ddtrace_run_python_code_in_subprocess): conn = utils.listen_get_conn(sock) assert conn data = utils.conn_to_bytes(conn) + conn.close() assert data + assert b"string_at" in data @pytest.mark.skipif(not sys.platform.startswith("linux"), reason="Linux only") @@ -359,7 +361,35 @@ def test_crashtracker_auto_default(run_python_code_in_subprocess): conn = utils.listen_get_conn(sock) assert conn data = utils.conn_to_bytes(conn) + conn.close() + assert data + assert b"string_at" in data + + +@pytest.mark.skipif(not sys.platform.startswith("linux"), reason="Linux only") +def test_crashtracker_auto_nostack(run_python_code_in_subprocess): + # Setup the listening socket before we open ddtrace + port, sock = utils.crashtracker_receiver_bind() + assert sock + + # Call the program + env = os.environ.copy() + env["DD_TRACE_AGENT_URL"] = "http://localhost:%d" % port + env["DD_CRASHTRACKER_STACKTRACE_RESOLVER"] = "none" + stdout, stderr, exitcode, _ = run_python_code_in_subprocess(auto_code, env=env) + + # Check for expected exit condition + assert not stdout + assert not stderr + assert exitcode == -11 + + # Wait for the connection + conn = utils.listen_get_conn(sock) + assert conn + data = utils.conn_to_bytes(conn) + conn.close() assert data + assert b"string_at" not in data @pytest.mark.skipif(not sys.platform.startswith("linux"), reason="Linux only") diff --git a/tests/telemetry/test_writer.py b/tests/telemetry/test_writer.py index ae1959f65e5..a914782d959 100644 --- a/tests/telemetry/test_writer.py +++ b/tests/telemetry/test_writer.py @@ -133,7 +133,7 @@ def test_app_started_event(telemetry_writer, test_agent_session, mock_time): {"name": "crashtracking_available", "origin": "unknown", "value": sys.platform == "linux"}, {"name": "crashtracking_debug_url", "origin": "unknown", "value": "None"}, {"name": "crashtracking_enabled", "origin": "unknown", "value": sys.platform == "linux"}, - {"name": "crashtracking_stacktrace_resolver", "origin": "unknown", "value": "None"}, + {"name": "crashtracking_stacktrace_resolver", "origin": "unknown", "value": "full"}, {"name": "crashtracking_started", "origin": "unknown", "value": False}, {"name": "crashtracking_stderr_filename", "origin": "unknown", "value": "None"}, {"name": "crashtracking_stdout_filename", "origin": "unknown", "value": "None"}, @@ -323,7 +323,7 @@ def test_app_started_event_configuration_override( {"name": "crashtracking_available", "origin": "unknown", "value": sys.platform == "linux"}, {"name": "crashtracking_debug_url", "origin": "unknown", "value": "None"}, {"name": "crashtracking_enabled", "origin": "unknown", "value": sys.platform == "linux"}, - {"name": "crashtracking_stacktrace_resolver", "origin": "unknown", "value": "None"}, + {"name": "crashtracking_stacktrace_resolver", "origin": "unknown", "value": "full"}, {"name": "crashtracking_started", "origin": "unknown", "value": sys.platform == "linux"}, {"name": "crashtracking_stderr_filename", "origin": "unknown", "value": "None"}, {"name": "crashtracking_stdout_filename", "origin": "unknown", "value": "None"}, From 3e1a49ab952596a52c569c6fb4e4d088d4375366 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Thu, 25 Jul 2024 00:13:35 -0400 Subject: [PATCH 26/29] feat(tracing): support listing headers in DD_TRACE_HEADER_TAGS without tag names (#9589) This will align the implementation of DD_TRACE_HEADER_TAGS with the golang and java tracers. ## Checklist - [x] Change(s) are motivated and described in the PR description - [x] Testing strategy is described if automated tests are not included in the PR - [x] Risks are described (performance impact, potential for breakage, maintainability) - [x] Change is maintainable (easy to change, telemetry, documentation) - [x] [Library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) are followed or label `changelog/no-changelog` is set - [x] Documentation is included (in-code, generated user docs, [public corp docs](https://github.com/DataDog/documentation/)) - [x] Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) - [x] If this PR changes the public interface, I've notified `@DataDog/apm-tees`. ## Reviewer Checklist - [x] Title is accurate - [x] All changes are related to the pull request's stated goal - [x] Description motivates each change - [x] Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - [x] Testing strategy adequately addresses listed risks - [x] Change is maintainable (easy to change, telemetry, documentation) - [x] Release note makes sense to a user of the library - [x] Author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - [x] Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --------- Co-authored-by: erikayasuda <153395705+erikayasuda@users.noreply.github.com> Co-authored-by: kyle --- ddtrace/contrib/trace_utils.py | 2 +- ddtrace/internal/utils/formats.py | 10 ++++- docs/configuration.rst | 8 +++- .../list_dd_header_tags-f8a9ce1daa2a1cf6.yaml | 6 +++ tests/internal/test_settings.py | 11 +++++ tests/tracer/test_trace_utils.py | 41 +++++++++++++++++++ tests/tracer/test_tracer.py | 4 +- tests/tracer/test_utils.py | 33 ++++++++++----- 8 files changed, 98 insertions(+), 17 deletions(-) create mode 100644 releasenotes/notes/list_dd_header_tags-f8a9ce1daa2a1cf6.yaml diff --git a/ddtrace/contrib/trace_utils.py b/ddtrace/contrib/trace_utils.py index ace93ec06f2..1fd05e57d8d 100644 --- a/ddtrace/contrib/trace_utils.py +++ b/ddtrace/contrib/trace_utils.py @@ -144,7 +144,7 @@ def _store_headers(headers, span, integration_config, request_or_response): return for header_name, header_value in headers.items(): - """config._header_tag_name gets an element of the dictionary in config.http._header_tags + """config._header_tag_name gets an element of the dictionary in config.trace_http_header_tags which gets the value from DD_TRACE_HEADER_TAGS environment variable.""" tag_name = integration_config._header_tag_name(header_name) if tag_name is None: diff --git a/ddtrace/internal/utils/formats.py b/ddtrace/internal/utils/formats.py index 778c01f2797..e9e3b85f434 100644 --- a/ddtrace/internal/utils/formats.py +++ b/ddtrace/internal/utils/formats.py @@ -70,6 +70,8 @@ def parse_tags_str(tags_str): The expected string is of the form:: "key1:value1,key2:value2" "key1:value1 key2:value2" + "key1,key2" + "key1 key2" :param tags_str: A string of the above form to parse tags from. :return: A dict containing the tags that were parsed. @@ -86,10 +88,14 @@ def parse_tags(tags): for tag in tags: key, sep, value = tag.partition(":") - if not sep or not key or "," in key: + if not key.strip() or "," in key or (sep and not value): invalids.append(tag) - else: + elif sep: + # parse key:val,key2:value2 parsed_tags.append((key, value)) + else: + # parse key,key2 + parsed_tags.append((key, "")) return parsed_tags, invalids diff --git a/docs/configuration.rst b/docs/configuration.rst index 62cb9073536..b95ed0639fd 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -31,6 +31,8 @@ The following environment variables for the tracer are supported: DD_TAGS: description: | Set global tags to be attached to every span. Value must be either comma or space separated. e.g. ``key1:value1,key2:value2`` or ``key1:value key2:value2``. + + If a tag value is not supplied the value will be an empty string. e.g. ``key1,key2`` or ``key1 key2``. version_added: v0.38.0: Comma separated support added v0.48.0: Space separated support added @@ -290,9 +292,11 @@ The following environment variables for the tracer are supported: DD_TRACE_HEADER_TAGS: description: | - A map of case-insensitive header keys to tag names. Automatically applies matching header values as tags on root spans. + A map of case-insensitive http headers to tag names. Automatically applies matching header values as tags on request and response spans. For example if + ``DD_TRACE_HEADER_TAGS=User-Agent:http.useragent,content-type:http.content_type``. The value of the header will be stored in tags with the name ``http.useragent`` and ``http.content_type``. - For example, ``User-Agent:http.useragent,content-type:http.content_type``. + If a tag name is not supplied the header name will be used. For example if + ``DD_TRACE_HEADER_TAGS=User-Agent,content-type``. The value of http header will be stored in tags with the names ``http..headers.user-agent`` and ``http..headers.content-type``. DD_TRACE_API_VERSION: default: | diff --git a/releasenotes/notes/list_dd_header_tags-f8a9ce1daa2a1cf6.yaml b/releasenotes/notes/list_dd_header_tags-f8a9ce1daa2a1cf6.yaml new file mode 100644 index 00000000000..44a81c9b117 --- /dev/null +++ b/releasenotes/notes/list_dd_header_tags-f8a9ce1daa2a1cf6.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + tracing: Updates ``DD_HEADER_TAGS`` and ``DD_TAGS`` to support the following formats: + ``key1,key2,key3``, ``key1:val,key2:val,key3:val3``, ``key1:val key2:val key3:val3``, and ``key1 key2 key3``. + Key value pairs that do not match an expected format will be logged and ignored by the tracer. diff --git a/tests/internal/test_settings.py b/tests/internal/test_settings.py index 0ad706b3951..1f3ecc42a0a 100644 --- a/tests/internal/test_settings.py +++ b/tests/internal/test_settings.py @@ -103,6 +103,17 @@ def _deleted_rc_config(): "expected": {"trace_http_header_tags": {"header": "value"}}, "expected_source": {"trace_http_header_tags": "code"}, }, + { + "env": {"DD_TRACE_HEADER_TAGS": "X-Header-Tag-1,X-Header-Tag-2,X-Header-Tag-3:specific_tag3"}, + "expected": { + "trace_http_header_tags": { + "X-Header-Tag-1": "", + "X-Header-Tag-2": "", + "X-Header-Tag-3": "specific_tag3", + } + }, + "expected_source": {"trace_http_header_tags": "env_var"}, + }, { "env": {"DD_TRACE_HEADER_TAGS": "X-Header-Tag-1:header_tag_1,X-Header-Tag-2:header_tag_2"}, "rc": { diff --git a/tests/tracer/test_trace_utils.py b/tests/tracer/test_trace_utils.py index 380198c2688..fae2256f427 100644 --- a/tests/tracer/test_trace_utils.py +++ b/tests/tracer/test_trace_utils.py @@ -306,6 +306,47 @@ def test_ext_service(int_config, pin, config_val, default, expected): assert trace_utils.ext_service(pin, int_config.myint, default) == expected +@pytest.mark.subprocess( + parametrize={ + "DD_TRACE_HEADER_TAGS": ["header1 header2 header3:third-header", "header1,header2,header3:third-header"] + } +) +def test_set_http_meta_with_http_header_tags_config(): + from ddtrace import config + from ddtrace._trace.span import Span + from ddtrace.contrib.trace_utils import set_http_meta + + assert config.trace_http_header_tags == { + "header1": "", + "header2": "", + "header3": "third-header", + }, config.trace_http_header_tags + integration_config = config.new_integration + assert integration_config.is_header_tracing_configured + + # test request headers + request_span = Span(name="new_integration.request") + set_http_meta( + request_span, + integration_config, + request_headers={"header1": "value1", "header2": "value2", "header3": "value3"}, + ) + assert request_span.get_tag("http.request.headers.header1") == "value1" + assert request_span.get_tag("http.request.headers.header2") == "value2" + assert request_span.get_tag("third-header") == "value3" + + # test response headers + response_span = Span(name="new_integration.response") + set_http_meta( + response_span, + integration_config, + response_headers={"header1": "value1", "header2": "value2", "header3": "value3"}, + ) + assert response_span.get_tag("http.response.headers.header1") == "value1" + assert response_span.get_tag("http.response.headers.header2") == "value2" + assert response_span.get_tag("third-header") == "value3" + + @pytest.mark.parametrize("appsec_enabled", [False, True]) @pytest.mark.parametrize("span_type", [SpanTypes.WEB, SpanTypes.HTTP, None]) @pytest.mark.parametrize( diff --git a/tests/tracer/test_tracer.py b/tests/tracer/test_tracer.py index 61f526c7fa4..4771258e398 100644 --- a/tests/tracer/test_tracer.py +++ b/tests/tracer/test_tracer.py @@ -979,11 +979,11 @@ def test_dd_tags(self): assert self.tracer._tags.get("key1") == "value1" assert self.tracer._tags.get("key2") == "value2" - @run_in_subprocess(env_overrides=dict(DD_TAGS="key1:value1,key2:value2,key3")) + @run_in_subprocess(env_overrides=dict(DD_TAGS="key1:value1,key2:value2, key3")) def test_dd_tags_invalid(self): assert self.tracer._tags.get("key1") assert self.tracer._tags.get("key2") - assert self.tracer._tags.get("key3") is None + assert not self.tracer._tags.get("key3") @run_in_subprocess(env_overrides=dict(DD_TAGS="service:mysvc,env:myenv,version:myvers")) def test_tags_from_DD_TAGS(self): diff --git a/tests/tracer/test_utils.py b/tests/tracer/test_utils.py index a5cee9f284e..d1c2533fcc7 100644 --- a/tests/tracer/test_utils.py +++ b/tests/tracer/test_utils.py @@ -56,33 +56,46 @@ def test_asbool(self): ("key:val,key2:val2,key3:1234.23", dict(key="val", key2="val2", key3="1234.23"), None), ("key:val key2:val2 key3:1234.23", dict(key="val", key2="val2", key3="1234.23"), None), ("key: val", dict(key=" val"), None), - ("key key: val", {"key key": " val"}, None), + ( + "key key: val", + {"key": "", "val": ""}, + [mock.call(_LOG_ERROR_MALFORMED_TAG, "key:", "key key: val")], + ), ("key: val,key2:val2", dict(key=" val", key2="val2"), None), (" key: val,key2:val2", {"key": " val", "key2": "val2"}, None), - ("key key2:val1", {"key key2": "val1"}, None), + ("key key2:val1", {"key": "", "key2": "val1"}, None), ("key:val key2:val:2", {"key": "val", "key2": "val:2"}, None), ( "key:val,key2:val2 key3:1234.23", dict(), [mock.call(_LOG_ERROR_FAIL_SEPARATOR, "key:val,key2:val2 key3:1234.23")], ), - ("key:val key2:val2 key3: ", dict(key="val", key2="val2", key3=""), None), + ( + "key:val key2:val2 key3: ", + {"key": "val", "key2": "val2"}, + [mock.call(_LOG_ERROR_MALFORMED_TAG, "key3:", "key:val key2:val2 key3:")], + ), ( "key:val key2:val 2", - dict(key="val", key2="val"), - [mock.call(_LOG_ERROR_MALFORMED_TAG, "2", "key:val key2:val 2")], + {"2": "", "key": "val", "key2": "val"}, + None, ), ( "key: val key2:val2 key3:val3", - {"key": "", "key2": "val2", "key3": "val3"}, - [mock.call(_LOG_ERROR_MALFORMED_TAG, "val", "key: val key2:val2 key3:val3")], + {"key2": "val2", "key3": "val3", "val": ""}, + [mock.call(_LOG_ERROR_MALFORMED_TAG, "key:", "key: val key2:val2 key3:val3")], + ), + ( + "key:,key3:val1,", + {"key3": "val1"}, + [mock.call(_LOG_ERROR_MALFORMED_TAG, "key:", "key:,key3:val1")], ), - ("key:,key3:val1,", dict(key3="val1", key=""), None), (",", dict(), [mock.call(_LOG_ERROR_FAIL_SEPARATOR, "")]), (":,:", dict(), [mock.call(_LOG_ERROR_FAIL_SEPARATOR, ":,:")]), - ("key,key2:val1", {"key2": "val1"}, [mock.call(_LOG_ERROR_MALFORMED_TAG, "key", "key,key2:val1")]), + ("key,key2:val1", {"key": "", "key2": "val1"}, None), ("key2:val1:", {"key2": "val1:"}, None), - ("key,key2,key3", dict(), [mock.call(_LOG_ERROR_FAIL_SEPARATOR, "key,key2,key3")]), + ("key,key2,key3", {"key": "", "key2": "", "key3": ""}, None), + ("key key2 key3", {"key": "", "key2": "", "key3": ""}, None), ("foo:bar,foo:baz", dict(foo="baz"), None), ("hash:asd url:https://github.com/foo/bar", dict(hash="asd", url="https://github.com/foo/bar"), None), ], From 69c1289f0f5b8ac1925b114e994963812fba0dda Mon Sep 17 00:00:00 2001 From: Juanjo Alvarez Martinez Date: Thu, 25 Jul 2024 16:18:57 +0200 Subject: [PATCH 27/29] fix: disable the iast enabled check from native code (#9905) ## Description Make the `DD_IAST_ENABLED` check from the native code produce a warning instead of raising an exception. Any loading of imported code should be under an `if iast_enabled` guard, and anyway if it's loaded with it disabled we are creating some empty data structures instead of crashing. ## Checklist - [X] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --------- Signed-off-by: Juanjo Alvarez Co-authored-by: erikayasuda <153395705+erikayasuda@users.noreply.github.com> --- .../appsec/_iast/_taint_tracking/_native.cpp | 17 +++++++++-------- ...st-dont-throw-native-a1d1adcf209dc529.yaml | 4 ++++ tests/appsec/iast/test_env_var.py | 12 ++++++++++++ .../test_flask_entrypoint_iast_patches.py | 4 ---- tests/smoke_test.py | 19 ------------------- 5 files changed, 25 insertions(+), 31 deletions(-) create mode 100644 releasenotes/notes/iast-dont-throw-native-a1d1adcf209dc529.yaml diff --git a/ddtrace/appsec/_iast/_taint_tracking/_native.cpp b/ddtrace/appsec/_iast/_taint_tracking/_native.cpp index c98330ad28a..e0a64332431 100644 --- a/ddtrace/appsec/_iast/_taint_tracking/_native.cpp +++ b/ddtrace/appsec/_iast/_taint_tracking/_native.cpp @@ -60,14 +60,15 @@ PYBIND11_MODULE(_native, m) { const char* env_iast_enabled = std::getenv("DD_IAST_ENABLED"); if (env_iast_enabled == nullptr) { - throw py::import_error("IAST not enabled"); - } - - std::string iast_enabled = std::string(env_iast_enabled); - std::transform( - iast_enabled.begin(), iast_enabled.end(), iast_enabled.begin(), [](unsigned char c) { return std::tolower(c); }); - if (iast_enabled != "true" && iast_enabled != "1") { - throw py::import_error("IAST not enabled"); + py::module::import("logging").attr("warning")("IAST not enabled but native module is being loaded"); + } else { + std::string iast_enabled = std::string(env_iast_enabled); + std::transform(iast_enabled.begin(), iast_enabled.end(), iast_enabled.begin(), [](unsigned char c) { + return std::tolower(c); + }); + if (iast_enabled != "true" && iast_enabled != "1") { + py::module::import("logging").attr("warning")("IAST not enabled but native module is being loaded"); + } } initializer = make_unique(); diff --git a/releasenotes/notes/iast-dont-throw-native-a1d1adcf209dc529.yaml b/releasenotes/notes/iast-dont-throw-native-a1d1adcf209dc529.yaml new file mode 100644 index 00000000000..3b353ec074a --- /dev/null +++ b/releasenotes/notes/iast-dont-throw-native-a1d1adcf209dc529.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Code Security: Logs warning instead of throwing an exception in the native module if IAST is not enabled by env var. diff --git a/tests/appsec/iast/test_env_var.py b/tests/appsec/iast/test_env_var.py index 12008077beb..67c4f096b10 100644 --- a/tests/appsec/iast/test_env_var.py +++ b/tests/appsec/iast/test_env_var.py @@ -48,6 +48,18 @@ def test_env_var_iast_unset(monkeypatch, capfd): assert "IAST enabled" not in captured.err +@pytest.mark.subprocess( + env=dict(DD_IAST_ENABLED="False"), err=b"WARNING:root:IAST not enabled but native module is being loaded\n" +) +def test_env_var_iast_disabled_native_module_warning(): + import ddtrace.appsec._iast._taint_tracking._native # noqa: F401 + + +@pytest.mark.subprocess(env=dict(DD_IAST_ENABLED="True"), err=None) +def test_env_var_iast_enabled_no__native_module_warning(): + import ddtrace.appsec._iast._taint_tracking._native # noqa: F401 + + @pytest.mark.xfail(reason="IAST not working with Gevent yet") def test_env_var_iast_enabled_gevent_unload_modules_true(capfd): # type: (...) -> None diff --git a/tests/appsec/integrations/test_flask_entrypoint_iast_patches.py b/tests/appsec/integrations/test_flask_entrypoint_iast_patches.py index 644251f7bb2..4b0812b4807 100644 --- a/tests/appsec/integrations/test_flask_entrypoint_iast_patches.py +++ b/tests/appsec/integrations/test_flask_entrypoint_iast_patches.py @@ -182,8 +182,6 @@ def test_ddtrace_iast_flask_app_create_app_patch_all_enable_iast_propagation_dis import dis import io - import pytest - from ddtrace import ModuleWatchdog from tests.utils import override_env from tests.utils import override_global_config @@ -204,5 +202,3 @@ def _uninstall_watchdog_and_reload(): # Should have replaced the binary op with the aspect in add_test: assert "(add_aspect)" not in str_output assert "BINARY_ADD" in str_output or "BINARY_OP" in str_output - with pytest.raises(ImportError): - assert flask_entrypoint_views.add_test() == [] diff --git a/tests/smoke_test.py b/tests/smoke_test.py index 5e991782b86..a4fbe3d5a39 100644 --- a/tests/smoke_test.py +++ b/tests/smoke_test.py @@ -1,4 +1,3 @@ -import os from platform import system import sys @@ -16,24 +15,6 @@ def mac_supported_iast_version(): if __name__ == "__main__": - # ASM IAST smoke test - if (3, 6, 0) <= sys.version_info < (3, 12) and system() != "Windows" and mac_supported_iast_version(): - # ASM IAST import error test - import_error = False - try: - from ddtrace.appsec._iast._taint_tracking._native import ops - except ImportError: - import_error = True - - assert import_error - assert "ddtrace.appsec._iast._taint_tracking._native.ops" not in sys.modules - - os.environ["DD_IAST_ENABLED"] = "True" - - from ddtrace.appsec._iast._taint_tracking._native import ops - - assert ops - # ASM WAF smoke test if system() == "Linux": if not sys.maxsize > 2**32: From 27cd94cf93611bbae3b8e11b41f8ec167f53dc59 Mon Sep 17 00:00:00 2001 From: Munir Abdinur Date: Thu, 25 Jul 2024 10:46:32 -0400 Subject: [PATCH 28/29] ci(opentelemetry): pin opentelemetry-api version to unblock tests (#9932) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves the following failures: [https://app.circleci.com/pipelines/github/DataDog/dd-trace-py/66676/workflows/fa3470d[…]2a-d3447f3f431a/jobs/4095885/parallel-runs/2?filterBy=FAILED](https://app.circleci.com/pipelines/github/DataDog/dd-trace-py/66676/workflows/fa3470d1-e065-43a1-9a2a-d3447f3f431a/jobs/4095885/parallel-runs/2?filterBy=FAILED) in ci. The `opentelemetry-api` broke compatibility with ddtrace in v1.25.0 and then introduced another breaking change in 1.26.0. This PR ensures the telemetry test suite uses a stable version of the `opentelemetry-api`. ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --- .../requirements/{15235b0.txt => 12974a3.txt} | 33 ++++++++++--------- .../requirements/{1153ad9.txt => 1677649.txt} | 29 +++++++++------- .../requirements/{427c22a.txt => 17c4377.txt} | 15 +++++---- .../requirements/{135aac0.txt => 18589ec.txt} | 33 ++++++++++--------- .../requirements/{118cb50.txt => 1a14242.txt} | 31 +++++++++-------- .../requirements/{17a929f.txt => 5c0475c.txt} | 29 +++++++++------- riotfile.py | 2 ++ 7 files changed, 99 insertions(+), 73 deletions(-) rename .riot/requirements/{15235b0.txt => 12974a3.txt} (50%) rename .riot/requirements/{1153ad9.txt => 1677649.txt} (51%) rename .riot/requirements/{427c22a.txt => 17c4377.txt} (68%) rename .riot/requirements/{135aac0.txt => 18589ec.txt} (50%) rename .riot/requirements/{118cb50.txt => 1a14242.txt} (50%) rename .riot/requirements/{17a929f.txt => 5c0475c.txt} (51%) diff --git a/.riot/requirements/15235b0.txt b/.riot/requirements/12974a3.txt similarity index 50% rename from .riot/requirements/15235b0.txt rename to .riot/requirements/12974a3.txt index 7380eee24f9..db272e2f553 100644 --- a/.riot/requirements/15235b0.txt +++ b/.riot/requirements/12974a3.txt @@ -2,35 +2,38 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/15235b0.in +# pip-compile --no-annotate .riot/requirements/12974a3.in # attrs==23.2.0 -certifi==2023.11.17 +certifi==2024.7.4 charset-normalizer==3.3.2 click==7.1.2 -coverage[toml]==7.4.0 -exceptiongroup==1.2.0 +coverage[toml]==7.6.0 +deprecated==1.2.14 +exceptiongroup==1.2.2 flask==1.1.4 -gunicorn==21.2.0 +gunicorn==22.0.0 httpretty==1.0.5 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.1 +idna==3.7 +importlib-metadata==7.0.0 iniconfig==2.0.0 itsdangerous==1.1.0 jinja2==2.11.3 markupsafe==1.1.1 mock==5.1.0 +opentelemetry-api==1.24.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.3.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -requests==2.31.0 +requests==2.32.3 sortedcontainers==2.4.0 tomli==2.0.1 -urllib3==2.1.0 +urllib3==2.2.2 werkzeug==1.0.1 -zipp==3.17.0 +wrapt==1.16.0 +zipp==3.19.2 diff --git a/.riot/requirements/1153ad9.txt b/.riot/requirements/1677649.txt similarity index 51% rename from .riot/requirements/1153ad9.txt rename to .riot/requirements/1677649.txt index 3816405de28..e4862279695 100644 --- a/.riot/requirements/1153ad9.txt +++ b/.riot/requirements/1677649.txt @@ -2,31 +2,36 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/1153ad9.in +# pip-compile --no-annotate .riot/requirements/1677649.in # attrs==23.2.0 -certifi==2023.11.17 +certifi==2024.7.4 charset-normalizer==3.3.2 click==7.1.2 -coverage[toml]==7.4.0 +coverage[toml]==7.6.0 +deprecated==1.2.14 flask==1.1.4 -gunicorn==21.2.0 +gunicorn==22.0.0 httpretty==1.0.5 hypothesis==6.45.0 -idna==3.6 +idna==3.7 +importlib-metadata==7.0.0 iniconfig==2.0.0 itsdangerous==1.1.0 jinja2==2.11.3 markupsafe==1.1.1 mock==5.1.0 +opentelemetry-api==1.24.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.3.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -requests==2.31.0 +requests==2.32.3 sortedcontainers==2.4.0 -urllib3==2.1.0 +urllib3==2.2.2 werkzeug==1.0.1 +wrapt==1.16.0 +zipp==3.19.2 diff --git a/.riot/requirements/427c22a.txt b/.riot/requirements/17c4377.txt similarity index 68% rename from .riot/requirements/427c22a.txt rename to .riot/requirements/17c4377.txt index 10859c1323e..7ad55b82d7b 100644 --- a/.riot/requirements/427c22a.txt +++ b/.riot/requirements/17c4377.txt @@ -2,27 +2,29 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/427c22a.in +# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/17c4377.in # attrs==23.2.0 -certifi==2023.11.17 +certifi==2024.7.4 charset-normalizer==3.3.2 click==7.1.2 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +deprecated==1.2.14 +exceptiongroup==1.2.2 flask==1.1.4 -gunicorn==21.2.0 +gunicorn==22.0.0 httpretty==1.0.5 hypothesis==6.45.0 -idna==3.6 +idna==3.7 importlib-metadata==6.7.0 iniconfig==2.0.0 itsdangerous==1.1.0 jinja2==2.11.3 markupsafe==1.1.1 mock==5.1.0 +opentelemetry-api==1.22.0 opentracing==2.4.0 -packaging==23.2 +packaging==24.0 pluggy==1.2.0 pytest==7.4.4 pytest-cov==4.1.0 @@ -34,4 +36,5 @@ tomli==2.0.1 typing-extensions==4.7.1 urllib3==2.0.7 werkzeug==1.0.1 +wrapt==1.16.0 zipp==3.15.0 diff --git a/.riot/requirements/135aac0.txt b/.riot/requirements/18589ec.txt similarity index 50% rename from .riot/requirements/135aac0.txt rename to .riot/requirements/18589ec.txt index 34447792a37..b57924b80f4 100644 --- a/.riot/requirements/135aac0.txt +++ b/.riot/requirements/18589ec.txt @@ -2,35 +2,38 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/135aac0.in +# pip-compile --no-annotate .riot/requirements/18589ec.in # attrs==23.2.0 -certifi==2023.11.17 +certifi==2024.7.4 charset-normalizer==3.3.2 click==7.1.2 -coverage[toml]==7.4.0 -exceptiongroup==1.2.0 +coverage[toml]==7.6.0 +deprecated==1.2.14 +exceptiongroup==1.2.2 flask==1.1.4 -gunicorn==21.2.0 +gunicorn==22.0.0 httpretty==1.0.5 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.1 +idna==3.7 +importlib-metadata==7.0.0 iniconfig==2.0.0 itsdangerous==1.1.0 jinja2==2.11.3 markupsafe==1.1.1 mock==5.1.0 +opentelemetry-api==1.24.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.3.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -requests==2.31.0 +requests==2.32.3 sortedcontainers==2.4.0 tomli==2.0.1 -urllib3==2.1.0 +urllib3==2.2.2 werkzeug==1.0.1 -zipp==3.17.0 +wrapt==1.16.0 +zipp==3.19.2 diff --git a/.riot/requirements/118cb50.txt b/.riot/requirements/1a14242.txt similarity index 50% rename from .riot/requirements/118cb50.txt rename to .riot/requirements/1a14242.txt index ecb387eea6c..024e32a631f 100644 --- a/.riot/requirements/118cb50.txt +++ b/.riot/requirements/1a14242.txt @@ -2,33 +2,38 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/118cb50.in +# pip-compile --no-annotate .riot/requirements/1a14242.in # attrs==23.2.0 -certifi==2023.11.17 +certifi==2024.7.4 charset-normalizer==3.3.2 click==7.1.2 -coverage[toml]==7.4.0 -exceptiongroup==1.2.0 +coverage[toml]==7.6.0 +deprecated==1.2.14 +exceptiongroup==1.2.2 flask==1.1.4 -gunicorn==21.2.0 +gunicorn==22.0.0 httpretty==1.0.5 hypothesis==6.45.0 -idna==3.6 +idna==3.7 +importlib-metadata==7.0.0 iniconfig==2.0.0 itsdangerous==1.1.0 jinja2==2.11.3 markupsafe==1.1.1 mock==5.1.0 +opentelemetry-api==1.24.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.3.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -requests==2.31.0 +requests==2.32.3 sortedcontainers==2.4.0 tomli==2.0.1 -urllib3==2.1.0 +urllib3==2.2.2 werkzeug==1.0.1 +wrapt==1.16.0 +zipp==3.19.2 diff --git a/.riot/requirements/17a929f.txt b/.riot/requirements/5c0475c.txt similarity index 51% rename from .riot/requirements/17a929f.txt rename to .riot/requirements/5c0475c.txt index d37acc78410..e57d30b0c6c 100644 --- a/.riot/requirements/17a929f.txt +++ b/.riot/requirements/5c0475c.txt @@ -2,31 +2,36 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --no-annotate .riot/requirements/17a929f.in +# pip-compile --no-annotate .riot/requirements/5c0475c.in # attrs==23.2.0 -certifi==2023.11.17 +certifi==2024.7.4 charset-normalizer==3.3.2 click==7.1.2 -coverage[toml]==7.4.0 +coverage[toml]==7.6.0 +deprecated==1.2.14 flask==1.1.4 -gunicorn==21.2.0 +gunicorn==22.0.0 httpretty==1.0.5 hypothesis==6.45.0 -idna==3.6 +idna==3.7 +importlib-metadata==7.0.0 iniconfig==2.0.0 itsdangerous==1.1.0 jinja2==2.11.3 markupsafe==1.1.1 mock==5.1.0 +opentelemetry-api==1.24.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +packaging==24.1 +pluggy==1.5.0 +pytest==8.3.2 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 -requests==2.31.0 +requests==2.32.3 sortedcontainers==2.4.0 -urllib3==2.1.0 +urllib3==2.2.2 werkzeug==1.0.1 +wrapt==1.16.0 +zipp==3.19.2 diff --git a/riotfile.py b/riotfile.py index f3e73128e78..01ceafb91ff 100644 --- a/riotfile.py +++ b/riotfile.py @@ -330,6 +330,8 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION): "flask": "<=2.2.3", "httpretty": "<1.1", "werkzeug": "<2.0", + # FIXME: ddtrace does not support the latest versions of opentelemetry-api + "opentelemetry-api": "<1.25.0", "pytest-randomly": latest, "markupsafe": "<2.0", }, From 584e00b384b91a93118e9d05b7eb9cf8befbe38a Mon Sep 17 00:00:00 2001 From: Rachel Yang Date: Thu, 25 Jul 2024 13:09:38 -0400 Subject: [PATCH 29/29] chore: privatize public functions in consul and botocore patch.py (#9915) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The API should just be what is necessary. A lot of integrations expose implementation details through the patch.py We can’t just remove these functions right away as it will break our API so for each we will need to deprecate first and then remove in 2.x. ## Checklist - [x] PR author has checked that all the criteria below are met - The PR description includes an overview of the change - The PR description articulates the motivation for the change - The change includes tests OR the PR description describes a testing strategy - The PR description notes risks associated with the change, if any - Newly-added code is easy to change - The change follows the [library release note guidelines](https://ddtrace.readthedocs.io/en/stable/releasenotes.html) - The change includes or references documentation updates if necessary - Backport labels are set (if [applicable](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting)) ## Reviewer Checklist - [x] Reviewer has checked that all the criteria below are met - Title is accurate - All changes are related to the pull request's stated goal - Avoids breaking [API](https://ddtrace.readthedocs.io/en/stable/versioning.html#interfaces) changes - Testing strategy adequately addresses listed risks - Newly-added code is easy to change - Release note makes sense to a user of the library - If necessary, author has acknowledged and discussed the performance implications of this PR as reported in the benchmarks PR comment - Backport labels are set in a manner that is consistent with the [release branch maintenance policy](https://ddtrace.readthedocs.io/en/latest/contributing.html#backporting) --------- Co-authored-by: Zachary Groves <32471391+ZStriker19@users.noreply.github.com> Co-authored-by: Emmett Butler <723615+emmettbutler@users.noreply.github.com> --- ddtrace/contrib/botocore/patch.py | 82 ++++++++++++++++--- ddtrace/contrib/consul/patch.py | 28 ++++++- ...hods-consul-botocore-da36c9501c7fc279.yaml | 6 ++ tests/contrib/botocore/test.py | 6 +- 4 files changed, 106 insertions(+), 16 deletions(-) create mode 100644 releasenotes/notes/deprecate-patch-py-methods-consul-botocore-da36c9501c7fc279.yaml diff --git a/ddtrace/contrib/botocore/patch.py b/ddtrace/contrib/botocore/patch.py index b4df72dcb9e..8078350ccf6 100644 --- a/ddtrace/contrib/botocore/patch.py +++ b/ddtrace/contrib/botocore/patch.py @@ -13,9 +13,11 @@ from ddtrace import config from ddtrace.contrib.trace_utils import with_traced_module +from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning from ddtrace.llmobs._integrations import BedrockIntegration from ddtrace.settings.config import Config from ddtrace.vendor import wrapt +from ddtrace.vendor.debtcollector import deprecate from ...constants import SPAN_KIND from ...ext import SpanKind @@ -77,20 +79,30 @@ ) -def get_version(): +def _get_version(): # type: () -> str return __version__ +def get_version(): + deprecate( + "get_version is deprecated", + message="get_version is deprecated", + removal_version="3.0.0", + category=DDTraceDeprecationWarning, + ) + return _get_version() + + def patch(): if getattr(botocore.client, "_datadog_patch", False): return botocore.client._datadog_patch = True botocore._datadog_integration = BedrockIntegration(integration_config=config.botocore) - wrapt.wrap_function_wrapper("botocore.client", "BaseClient._make_api_call", patched_api_call(botocore)) + wrapt.wrap_function_wrapper("botocore.client", "BaseClient._make_api_call", _patched_api_call(botocore)) Pin().onto(botocore.client.BaseClient) - wrapt.wrap_function_wrapper("botocore.parsers", "ResponseParser.parse", patched_lib_fn) + wrapt.wrap_function_wrapper("botocore.parsers", "ResponseParser.parse", _patched_lib_fn) Pin().onto(botocore.parsers.ResponseParser) _PATCHED_SUBMODULES.clear() @@ -103,7 +115,7 @@ def unpatch(): unwrap(botocore.client.BaseClient, "_make_api_call") -def patch_submodules(submodules): +def _patch_submodules(submodules): # type: (Union[List[str], bool]) -> None if isinstance(submodules, bool) and submodules: _PATCHED_SUBMODULES.clear() @@ -112,7 +124,17 @@ def patch_submodules(submodules): _PATCHED_SUBMODULES.update(submodules) -def patched_lib_fn(original_func, instance, args, kwargs): +def patch_submodules(submodules): + deprecate( + "patch_submodules is deprecated", + message="patch_submodules is deprecated", + removal_version="3.0.0", + category=DDTraceDeprecationWarning, + ) + return _patch_submodules(submodules) + + +def _patched_lib_fn(original_func, instance, args, kwargs): pin = Pin.get_from(instance) if not pin or not pin.enabled() or not config.botocore["instrument_internals"]: return original_func(*args, **kwargs) @@ -124,8 +146,18 @@ def patched_lib_fn(original_func, instance, args, kwargs): return original_func(*args, **kwargs) +def patched_lib_fn(original_func, instance, args, kwargs): + deprecate( + "patched_lib_fn is deprecated", + message="patched_lib_fn is deprecated", + removal_version="3.0.0", + category=DDTraceDeprecationWarning, + ) + return _patched_lib_fn(original_func, instance, args, kwargs) + + @with_traced_module -def patched_api_call(botocore, pin, original_func, instance, args, kwargs): +def _patched_api_call(botocore, pin, original_func, instance, args, kwargs): if not pin or not pin.enabled(): return original_func(*args, **kwargs) @@ -153,7 +185,7 @@ def patched_api_call(botocore, pin, original_func, instance, args, kwargs): if endpoint_name == "bedrock-runtime" and operation.startswith("InvokeModel"): patching_fn = patched_bedrock_api_call else: - patching_fn = PATCHING_FUNCTIONS.get(endpoint_name, patched_api_call_fallback) + patching_fn = PATCHING_FUNCTIONS.get(endpoint_name, _patched_api_call_fallback) return patching_fn( original_func=original_func, @@ -164,7 +196,17 @@ def patched_api_call(botocore, pin, original_func, instance, args, kwargs): ) -def prep_context_injection(ctx, endpoint_name, operation, trace_operation, params): +def patched_api_call(botocore, pin, original_func, instance, args, kwargs): + deprecate( + "patched_api_call is deprecated", + message="patched_api_call is deprecated", + removal_version="3.0.0", + category=DDTraceDeprecationWarning, + ) + return _patched_api_call(botocore, pin, original_func, instance, args, kwargs) + + +def _prep_context_injection(ctx, endpoint_name, operation, trace_operation, params): cloud_service = None injection_function = None schematization_function = schematize_cloud_messaging_operation @@ -189,7 +231,17 @@ def prep_context_injection(ctx, endpoint_name, operation, trace_operation, param ) -def patched_api_call_fallback(original_func, instance, args, kwargs, function_vars): +def prep_context_injection(ctx, endpoint_name, operation, trace_operation, params): + deprecate( + "prep_context_injection is deprecated", + message="prep_context_injection is deprecated", + removal_version="3.0.0", + category=DDTraceDeprecationWarning, + ) + return _prep_context_injection(ctx, endpoint_name, operation, trace_operation, params) + + +def _patched_api_call_fallback(original_func, instance, args, kwargs, function_vars): # default patched api call that is used generally for several services / operations params = function_vars.get("params") trace_operation = function_vars.get("trace_operation") @@ -212,7 +264,7 @@ def patched_api_call_fallback(original_func, instance, args, kwargs, function_va ) as ctx, ctx.get_item("instrumented_api_call"): core.dispatch("botocore.patched_api_call.started", [ctx]) if args and config.botocore["distributed_tracing"]: - prep_context_injection(ctx, endpoint_name, operation, trace_operation, params) + _prep_context_injection(ctx, endpoint_name, operation, trace_operation, params) try: result = original_func(*args, **kwargs) @@ -230,3 +282,13 @@ def patched_api_call_fallback(original_func, instance, args, kwargs, function_va else: core.dispatch("botocore.patched_api_call.success", [ctx, result]) return result + + +def patched_api_call_fallback(original_func, instance, args, kwargs, function_vars): + deprecate( + "patched_api_call_fallback is deprecated", + message="patched_api_call_fallback is deprecated", + removal_version="3.0.0", + category=DDTraceDeprecationWarning, + ) + return _patched_api_call_fallback(original_func, instance, args, kwargs, function_vars) diff --git a/ddtrace/contrib/consul/patch.py b/ddtrace/contrib/consul/patch.py index 41873407c67..a09e290892f 100644 --- a/ddtrace/contrib/consul/patch.py +++ b/ddtrace/contrib/consul/patch.py @@ -3,6 +3,8 @@ from ddtrace import config from ddtrace.internal.constants import COMPONENT from ddtrace.internal.schema.span_attribute_schema import SpanDirection +from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning +from ddtrace.vendor.debtcollector import deprecate from ddtrace.vendor.wrapt import wrap_function_wrapper as _w from ...constants import ANALYTICS_SAMPLE_RATE_KEY @@ -22,11 +24,21 @@ _KV_FUNCS = ["put", "get", "delete"] -def get_version(): +def _get_version(): # type: () -> str return getattr(consul, "__version__", "") +def get_version(): + deprecate( + "get_version is deprecated", + message="get_version is deprecated", + removal_version="3.0.0", + category=DDTraceDeprecationWarning, + ) + return _get_version() + + def patch(): if getattr(consul, "__datadog_patch", False): return @@ -36,7 +48,7 @@ def patch(): pin.onto(consul.Consul.KV) for f_name in _KV_FUNCS: - _w("consul", "Consul.KV.%s" % f_name, wrap_function(f_name)) + _w("consul", "Consul.KV.%s" % f_name, _wrap_function(f_name)) def unpatch(): @@ -48,7 +60,7 @@ def unpatch(): _u(consul.Consul.KV, f_name) -def wrap_function(name): +def _wrap_function(name): def trace_func(wrapped, instance, args, kwargs): pin = Pin.get_from(instance) if not pin or not pin.enabled(): @@ -83,3 +95,13 @@ def trace_func(wrapped, instance, args, kwargs): return wrapped(*args, **kwargs) return trace_func + + +def wrap_function(name): + deprecate( + "wrap_function is deprecated", + message="get_version is deprecated", + removal_version="3.0.0", + category=DDTraceDeprecationWarning, + ) + return _wrap_function(name) diff --git a/releasenotes/notes/deprecate-patch-py-methods-consul-botocore-da36c9501c7fc279.yaml b/releasenotes/notes/deprecate-patch-py-methods-consul-botocore-da36c9501c7fc279.yaml new file mode 100644 index 00000000000..54bfc6eb0c3 --- /dev/null +++ b/releasenotes/notes/deprecate-patch-py-methods-consul-botocore-da36c9501c7fc279.yaml @@ -0,0 +1,6 @@ +--- +deprecations: + - | + botocore: All methods in botocore/patch.py except ``patch()`` and ``unpatch()`` are deprecated and will be removed in version 3.0.0. + - | + consul: All methods in consul/patch.py except ``patch()`` and ``unpatch()`` are deprecated and will be removed in version 3.0.0. diff --git a/tests/contrib/botocore/test.py b/tests/contrib/botocore/test.py index 840165f9ae2..bad2b6fa355 100644 --- a/tests/contrib/botocore/test.py +++ b/tests/contrib/botocore/test.py @@ -36,8 +36,8 @@ from ddtrace.constants import ERROR_MSG from ddtrace.constants import ERROR_STACK from ddtrace.constants import ERROR_TYPE +from ddtrace.contrib.botocore.patch import _patch_submodules from ddtrace.contrib.botocore.patch import patch -from ddtrace.contrib.botocore.patch import patch_submodules from ddtrace.contrib.botocore.patch import unpatch from ddtrace.internal.compat import PYTHON_VERSION_INFO from ddtrace.internal.datastreams.processor import PROPAGATION_KEY_BASE_64 @@ -76,7 +76,7 @@ class BotocoreTest(TracerTestCase): @mock_sqs def setUp(self): patch() - patch_submodules(True) + _patch_submodules(True) self.session = botocore.session.get_session() self.session.set_credentials(access_key="access-key", secret_key="secret-key") @@ -103,7 +103,7 @@ def tearDown(self): @mock_ec2 @mock_s3 def test_patch_submodules(self): - patch_submodules(["s3"]) + _patch_submodules(["s3"]) ec2 = self.session.create_client("ec2", region_name="us-west-2") Pin(service=self.TEST_SERVICE, tracer=self.tracer).onto(ec2)