diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 87979ba7e45..d0b48378e59 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -69,6 +69,7 @@ tests/ci_visibility @DataDog/ci-app-libraries tests/coverage @DataDog/apm-core-python @DataDog/ci-app-libraries tests/tracer/test_ci.py @DataDog/ci-app-libraries ddtrace/ext/git.py @DataDog/ci-app-libraries @DataDog/apm-core-python +scripts/ci_visibility/* @DataDog/ci-app-libraries # Debugger ddtrace/debugging/ @DataDog/debugger-python diff --git a/.riot/requirements/10ebb4e.txt b/.riot/requirements/10ebb4e.txt index 7e6b6f70c32..055e112214f 100644 --- a/.riot/requirements/10ebb4e.txt +++ b/.riot/requirements/10ebb4e.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/10ebb4e.in +# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/10ebb4e.in # aiobotocore==1.4.2 aiohttp==3.8.6 @@ -11,33 +11,33 @@ aiosignal==1.3.1 async-generator==1.10 async-timeout==4.0.3 asynctest==0.13.0 -attrs==23.1.0 +attrs==24.2.0 botocore==1.20.106 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.8 importlib-metadata==6.7.0 iniconfig==2.0.0 jmespath==0.10.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-asyncio==0.21.1 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 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 diff --git a/.riot/requirements/13804af.txt b/.riot/requirements/13804af.txt index 54924327397..7035a764386 100644 --- a/.riot/requirements/13804af.txt +++ b/.riot/requirements/13804af.txt @@ -2,22 +2,22 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/13804af.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/13804af.in # annotated-types==0.7.0 anyio==4.4.0 -attrs==23.2.0 +attrs==24.2.0 certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.6.0 +coverage[toml]==7.6.1 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 +idna==3.8 +importlib-metadata==8.4.0 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 @@ -31,22 +31,22 @@ pillow==10.1.0 pluggy==1.5.0 pydantic==2.8.2 pydantic-core==2.20.1 -pytest==8.2.2 +pytest==8.3.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 +pyyaml==6.0.2 +regex==2024.7.24 requests==2.32.3 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 tiktoken==0.7.0 tomli==2.0.1 -tqdm==4.66.4 +tqdm==4.66.5 types-pytz==2024.1.0.20240417 typing-extensions==4.12.2 tzdata==2024.1 @@ -54,4 +54,4 @@ urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 -zipp==3.19.2 +zipp==3.20.1 diff --git a/.riot/requirements/13c0fff.txt b/.riot/requirements/13c0fff.txt index 3919d9ddaf1..4d18f2bca7b 100644 --- a/.riot/requirements/13c0fff.txt +++ b/.riot/requirements/13c0fff.txt @@ -2,19 +2,20 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --no-annotate .riot/requirements/13c0fff.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/13c0fff.in # -aiobotocore==2.13.1 -aiohttp==3.9.5 +aiobotocore==2.13.3 +aiohappyeyeballs==2.4.0 +aiohttp==3.10.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 +attrs==24.2.0 +botocore==1.34.162 +coverage[toml]==7.6.1 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.7 +idna==3.8 iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 @@ -22,7 +23,7 @@ multidict==6.0.5 opentracing==2.4.0 packaging==24.1 pluggy==1.5.0 -pytest==8.2.2 +pytest==8.3.2 pytest-asyncio==0.21.1 pytest-cov==5.0.0 pytest-mock==3.14.0 diff --git a/.riot/requirements/13fec34.txt b/.riot/requirements/13fec34.txt index a73160dd648..8858506f793 100644 --- a/.riot/requirements/13fec34.txt +++ b/.riot/requirements/13fec34.txt @@ -2,44 +2,44 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/13fec34.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/13fec34.in # annotated-types==0.7.0 anyio==3.7.1 -attrs==23.2.0 +attrs==24.2.0 certifi==2024.7.4 -coverage[toml]==7.6.0 +coverage[toml]==7.6.1 distro==1.9.0 h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 hypothesis==6.45.0 -idna==3.7 +idna==3.8 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 -numpy==2.0.0 +numpy==2.1.0 openai[datalib,embeddings]==1.1.1 opentracing==2.4.0 packaging==24.1 pandas==2.2.2 -pandas-stubs==2.2.2.240603 +pandas-stubs==2.2.2.240807 pillow==9.5.0 pluggy==1.5.0 pydantic==2.8.2 pydantic-core==2.20.1 -pytest==8.2.2 +pytest==8.3.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 +pyyaml==6.0.2 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 -tqdm==4.66.4 +tqdm==4.66.5 types-pytz==2024.1.0.20240417 typing-extensions==4.12.2 tzdata==2024.1 diff --git a/.riot/requirements/15fd7ec.txt b/.riot/requirements/15fd7ec.txt index 2a64f0bd8f7..45dc5952f92 100644 --- a/.riot/requirements/15fd7ec.txt +++ b/.riot/requirements/15fd7ec.txt @@ -2,40 +2,41 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/15fd7ec.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/15fd7ec.in # aiobotocore==1.4.2 -aiohttp==3.9.1 +aiohappyeyeballs==2.4.0 +aiohttp==3.10.5 aioitertools==0.11.0 aiosignal==1.3.1 async-generator==1.10 async-timeout==4.0.3 -attrs==23.1.0 +attrs==24.2.0 botocore==1.20.106 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 +idna==3.8 +importlib-metadata==8.4.0 iniconfig==2.0.0 jmespath==0.10.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.3.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 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 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.20.0 diff --git a/.riot/requirements/181216c.txt b/.riot/requirements/181216c.txt index 3297b734317..ac739930363 100644 --- a/.riot/requirements/181216c.txt +++ b/.riot/requirements/181216c.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/181216c.in +# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/181216c.in # annotated-types==0.5.0 anyio==3.7.1 -attrs==23.2.0 +attrs==24.2.0 cached-property==1.5.2 certifi==2024.7.4 coverage[toml]==7.2.7 @@ -16,7 +16,7 @@ h11==0.14.0 httpcore==0.17.3 httpx==0.24.1 hypothesis==6.45.0 -idna==3.7 +idna==3.8 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 @@ -43,7 +43,7 @@ six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 tomli==2.0.1 -tqdm==4.66.4 +tqdm==4.66.5 typing-extensions==4.7.1 urllib3==1.26.19 vcrpy==4.2.1 diff --git a/.riot/requirements/1825740.txt b/.riot/requirements/1825740.txt index d802e1be924..b4660fad985 100644 --- a/.riot/requirements/1825740.txt +++ b/.riot/requirements/1825740.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/1825740.in +# pip-compile --allow-unsafe --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.2.0 +attrs==24.2.0 certifi==2024.7.4 charset-normalizer==3.3.2 coverage[toml]==7.2.7 exceptiongroup==1.2.2 frozenlist==1.3.3 hypothesis==6.45.0 -idna==3.7 +idna==3.8 importlib-metadata==6.7.0 iniconfig==2.0.0 joblib==1.3.2 @@ -40,7 +40,7 @@ six==1.16.0 sortedcontainers==2.4.0 threadpoolctl==3.1.0 tomli==2.0.1 -tqdm==4.66.4 +tqdm==4.66.5 typing-extensions==4.7.1 urllib3==1.26.19 vcrpy==4.2.1 diff --git a/.riot/requirements/183e307.txt b/.riot/requirements/183e307.txt index e933e086349..1e45a0f52c1 100644 --- a/.riot/requirements/183e307.txt +++ b/.riot/requirements/183e307.txt @@ -2,37 +2,38 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/183e307.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/183e307.in # aiobotocore==1.4.2 -aiohttp==3.9.1 +aiohappyeyeballs==2.4.0 +aiohttp==3.10.5 aioitertools==0.11.0 aiosignal==1.3.1 async-generator==1.10 async-timeout==4.0.3 -attrs==23.1.0 +attrs==24.2.0 botocore==1.20.106 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.8 iniconfig==2.0.0 jmespath==0.10.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.3.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 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 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 diff --git a/.riot/requirements/1a06ac7.txt b/.riot/requirements/1a06ac7.txt index 370abdb0622..010713c7820 100644 --- a/.riot/requirements/1a06ac7.txt +++ b/.riot/requirements/1a06ac7.txt @@ -2,23 +2,23 @@ # 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/1a06ac7.in +# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1a06ac7.in # algoliasearch==2.6.3 -attrs==23.1.0 -certifi==2023.11.17 +attrs==24.2.0 +certifi==2024.7.4 charset-normalizer==3.3.2 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.2 hypothesis==6.45.0 -idna==3.6 +idna==3.8 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 @@ -26,5 +26,5 @@ requests==2.31.0 sortedcontainers==2.4.0 tomli==2.0.1 typing-extensions==4.7.1 -urllib3==1.26.18 +urllib3==1.26.19 zipp==3.15.0 diff --git a/.riot/requirements/1a3a39d.txt b/.riot/requirements/1a3a39d.txt index dca82a93fd1..6ba873d2190 100644 --- a/.riot/requirements/1a3a39d.txt +++ b/.riot/requirements/1a3a39d.txt @@ -2,40 +2,41 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1a3a39d.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1a3a39d.in # aiobotocore==2.0.1 -aiohttp==3.9.1 +aiohappyeyeballs==2.4.0 +aiohttp==3.10.5 aioitertools==0.11.0 aiosignal==1.3.1 async-generator==1.10 async-timeout==4.0.3 -attrs==23.1.0 +attrs==24.2.0 botocore==1.22.8 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 +idna==3.8 +importlib-metadata==8.4.0 iniconfig==2.0.0 jmespath==0.10.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.3.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 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 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.20.0 diff --git a/.riot/requirements/1b0d918.txt b/.riot/requirements/1b0d918.txt index 7fb12079c5e..e661569015e 100644 --- a/.riot/requirements/1b0d918.txt +++ b/.riot/requirements/1b0d918.txt @@ -2,28 +2,28 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1b0d918.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1b0d918.in # algoliasearch==2.6.3 -attrs==23.1.0 -certifi==2023.11.17 +attrs==24.2.0 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 +idna==3.8 +importlib-metadata==8.4.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.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==1.26.18 -zipp==3.17.0 +urllib3==1.26.19 +zipp==3.20.0 diff --git a/.riot/requirements/1c1bb1f.txt b/.riot/requirements/1c1bb1f.txt index a6e98c55cbf..b139adf58fb 100644 --- a/.riot/requirements/1c1bb1f.txt +++ b/.riot/requirements/1c1bb1f.txt @@ -2,34 +2,35 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1c1bb1f.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1c1bb1f.in # aiobotocore==1.4.2 -aiohttp==3.9.1 +aiohappyeyeballs==2.4.0 +aiohttp==3.10.5 aioitertools==0.11.0 aiosignal==1.3.1 async-generator==1.10 -attrs==23.1.0 +attrs==24.2.0 botocore==1.20.106 -coverage[toml]==7.3.4 +coverage[toml]==7.6.1 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.8 iniconfig==2.0.0 jmespath==0.10.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.3.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 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 six==1.16.0 sortedcontainers==2.4.0 -urllib3==1.26.18 +urllib3==1.26.19 wrapt==1.16.0 yarl==1.9.4 diff --git a/.riot/requirements/1c4a762.txt b/.riot/requirements/1c4a762.txt index 3c0d53a5233..74805275ef2 100644 --- a/.riot/requirements/1c4a762.txt +++ b/.riot/requirements/1c4a762.txt @@ -2,34 +2,35 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1c4a762.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1c4a762.in # -aiobotocore==2.9.0 -aiohttp==3.9.1 +aiobotocore==2.13.3 +aiohappyeyeballs==2.4.0 +aiohttp==3.10.5 aioitertools==0.11.0 aiosignal==1.3.1 async-generator==1.10 -attrs==23.1.0 -botocore==1.33.13 -coverage[toml]==7.3.4 +attrs==24.2.0 +botocore==1.34.162 +coverage[toml]==7.6.1 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.8 iniconfig==2.0.0 jmespath==1.0.1 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.3.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 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 six==1.16.0 sortedcontainers==2.4.0 -urllib3==2.0.7 +urllib3==2.2.2 wrapt==1.16.0 yarl==1.9.4 diff --git a/.riot/requirements/1ccf91d.txt b/.riot/requirements/1ccf91d.txt index c40234d30c6..99ec808468d 100644 --- a/.riot/requirements/1ccf91d.txt +++ b/.riot/requirements/1ccf91d.txt @@ -2,26 +2,26 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1ccf91d.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1ccf91d.in # algoliasearch==2.6.3 -attrs==23.1.0 -certifi==2023.11.17 +attrs==24.2.0 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 hypothesis==6.45.0 -idna==3.6 +idna==3.8 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.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==1.26.18 +urllib3==1.26.19 diff --git a/.riot/requirements/1d390e8.txt b/.riot/requirements/1d390e8.txt index 9ece5ce8d04..e288067465c 100644 --- a/.riot/requirements/1d390e8.txt +++ b/.riot/requirements/1d390e8.txt @@ -2,40 +2,41 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1d390e8.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1d390e8.in # -aiobotocore==2.9.0 -aiohttp==3.9.1 +aiobotocore==2.13.3 +aiohappyeyeballs==2.4.0 +aiohttp==3.10.5 aioitertools==0.11.0 aiosignal==1.3.1 async-generator==1.10 async-timeout==4.0.3 -attrs==23.1.0 -botocore==1.33.13 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==24.2.0 +botocore==1.34.162 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 +idna==3.8 +importlib-metadata==8.4.0 iniconfig==2.0.0 jmespath==1.0.1 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.3.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 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 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.20.0 diff --git a/.riot/requirements/1db5311.txt b/.riot/requirements/1db5311.txt index 8f59080503b..c29bc9bdb8f 100644 --- a/.riot/requirements/1db5311.txt +++ b/.riot/requirements/1db5311.txt @@ -2,21 +2,21 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1db5311.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1db5311.in # annotated-types==0.7.0 anyio==4.4.0 -attrs==23.2.0 +attrs==24.2.0 certifi==2024.7.4 -coverage[toml]==7.6.0 +coverage[toml]==7.6.1 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 +idna==3.8 +importlib-metadata==8.4.0 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 @@ -30,19 +30,19 @@ pillow==9.5.0 pluggy==1.5.0 pydantic==2.8.2 pydantic-core==2.20.1 -pytest==8.2.2 +pytest==8.3.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 +pyyaml==6.0.2 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 tomli==2.0.1 -tqdm==4.66.4 +tqdm==4.66.5 types-pytz==2024.1.0.20240417 typing-extensions==4.12.2 tzdata==2024.1 @@ -50,4 +50,4 @@ urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 -zipp==3.19.2 +zipp==3.20.1 diff --git a/.riot/requirements/1ec15f5.txt b/.riot/requirements/1ec15f5.txt index d40fd1e4cca..b4479a2fb39 100644 --- a/.riot/requirements/1ec15f5.txt +++ b/.riot/requirements/1ec15f5.txt @@ -2,51 +2,51 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1ec15f5.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1ec15f5.in # annotated-types==0.7.0 anyio==4.4.0 -attrs==23.2.0 +attrs==24.2.0 certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.6.0 +coverage[toml]==7.6.1 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 +idna==3.8 +importlib-metadata==8.4.0 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 -numpy==2.0.0 +numpy==2.0.1 openai[datalib]==1.30.1 opentracing==2.4.0 packaging==24.1 pandas==2.2.2 -pandas-stubs==2.2.2.240603 +pandas-stubs==2.2.2.240807 pillow==10.1.0 pluggy==1.5.0 pydantic==2.8.2 pydantic-core==2.20.1 -pytest==8.2.2 +pytest==8.3.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 +pyyaml==6.0.2 +regex==2024.7.24 requests==2.32.3 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 tiktoken==0.7.0 tomli==2.0.1 -tqdm==4.66.4 +tqdm==4.66.5 types-pytz==2024.1.0.20240417 typing-extensions==4.12.2 tzdata==2024.1 @@ -54,4 +54,4 @@ urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 -zipp==3.19.2 +zipp==3.20.1 diff --git a/.riot/requirements/1ee49b9.txt b/.riot/requirements/1ee49b9.txt index 9e04d313a33..f170e2885c4 100644 --- a/.riot/requirements/1ee49b9.txt +++ b/.riot/requirements/1ee49b9.txt @@ -2,48 +2,48 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1ee49b9.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1ee49b9.in # annotated-types==0.7.0 anyio==4.4.0 -attrs==23.2.0 +attrs==24.2.0 certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.6.0 +coverage[toml]==7.6.1 distro==1.9.0 h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 hypothesis==6.45.0 -idna==3.7 +idna==3.8 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 -numpy==2.0.0 +numpy==2.1.0 openai[datalib]==1.30.1 opentracing==2.4.0 packaging==24.1 pandas==2.2.2 -pandas-stubs==2.2.2.240603 +pandas-stubs==2.2.2.240807 pillow==10.1.0 pluggy==1.5.0 pydantic==2.8.2 pydantic-core==2.20.1 -pytest==8.2.2 +pytest==8.3.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 +pyyaml==6.0.2 +regex==2024.7.24 requests==2.32.3 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 tiktoken==0.7.0 -tqdm==4.66.4 +tqdm==4.66.5 types-pytz==2024.1.0.20240417 typing-extensions==4.12.2 tzdata==2024.1 diff --git a/.riot/requirements/2ab4a50.txt b/.riot/requirements/2ab4a50.txt index 4aa46d3ffa7..86cfe6eb60d 100644 --- a/.riot/requirements/2ab4a50.txt +++ b/.riot/requirements/2ab4a50.txt @@ -2,37 +2,38 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/2ab4a50.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/2ab4a50.in # aiobotocore==2.0.1 -aiohttp==3.9.1 +aiohappyeyeballs==2.4.0 +aiohttp==3.10.5 aioitertools==0.11.0 aiosignal==1.3.1 async-generator==1.10 async-timeout==4.0.3 -attrs==23.1.0 +attrs==24.2.0 botocore==1.22.8 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.8 iniconfig==2.0.0 jmespath==0.10.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.3.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 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 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 diff --git a/.riot/requirements/2b7ab63.txt b/.riot/requirements/2b7ab63.txt index 8f1506867fb..98b66d8d809 100644 --- a/.riot/requirements/2b7ab63.txt +++ b/.riot/requirements/2b7ab63.txt @@ -2,37 +2,38 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/2b7ab63.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/2b7ab63.in # -aiobotocore==2.9.0 -aiohttp==3.9.1 +aiobotocore==2.13.3 +aiohappyeyeballs==2.4.0 +aiohttp==3.10.5 aioitertools==0.11.0 aiosignal==1.3.1 async-generator==1.10 async-timeout==4.0.3 -attrs==23.1.0 -botocore==1.33.13 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==24.2.0 +botocore==1.34.162 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.8 iniconfig==2.0.0 jmespath==1.0.1 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.3.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 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 six==1.16.0 sortedcontainers==2.4.0 tomli==2.0.1 -urllib3==2.0.7 +urllib3==2.2.2 wrapt==1.16.0 yarl==1.9.4 diff --git a/.riot/requirements/3506e01.txt b/.riot/requirements/3506e01.txt index bc70e8b8957..0a8af6a2555 100644 --- a/.riot/requirements/3506e01.txt +++ b/.riot/requirements/3506e01.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/3506e01.in +# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/3506e01.in # aiobotocore==2.6.0 aiohttp==3.8.6 @@ -11,33 +11,33 @@ aiosignal==1.3.1 async-generator==1.10 async-timeout==4.0.3 asynctest==0.13.0 -attrs==23.1.0 +attrs==24.2.0 botocore==1.31.17 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.8 importlib-metadata==6.7.0 iniconfig==2.0.0 jmespath==1.0.1 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-asyncio==0.21.1 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 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 diff --git a/.riot/requirements/35ce786.txt b/.riot/requirements/35ce786.txt index 8f19eb63ade..3489155be91 100644 --- a/.riot/requirements/35ce786.txt +++ b/.riot/requirements/35ce786.txt @@ -2,50 +2,50 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/35ce786.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/35ce786.in # annotated-types==0.7.0 anyio==4.4.0 -attrs==23.2.0 +attrs==24.2.0 certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.6.0 +coverage[toml]==7.6.1 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 +idna==3.8 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 -numpy==2.0.0 +numpy==2.1.0 openai[datalib]==1.30.1 opentracing==2.4.0 packaging==24.1 pandas==2.2.2 -pandas-stubs==2.2.2.240603 +pandas-stubs==2.2.2.240807 pillow==10.1.0 pluggy==1.5.0 pydantic==2.8.2 pydantic-core==2.20.1 -pytest==8.2.2 +pytest==8.3.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 +pyyaml==6.0.2 +regex==2024.7.24 requests==2.32.3 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 tiktoken==0.7.0 tomli==2.0.1 -tqdm==4.66.4 +tqdm==4.66.5 types-pytz==2024.1.0.20240417 typing-extensions==4.12.2 tzdata==2024.1 diff --git a/.riot/requirements/404933a.txt b/.riot/requirements/404933a.txt index 0c7259518fb..e5e9f34ccfb 100644 --- a/.riot/requirements/404933a.txt +++ b/.riot/requirements/404933a.txt @@ -2,24 +2,24 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/404933a.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/404933a.in # algoliasearch==2.6.3 -attrs==23.1.0 -certifi==2023.11.17 +attrs==24.2.0 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 +coverage[toml]==7.6.1 hypothesis==6.45.0 -idna==3.6 +idna==3.8 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.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==1.26.18 +urllib3==1.26.19 diff --git a/.riot/requirements/5da4fd8.txt b/.riot/requirements/5da4fd8.txt index a1c5ebc9a1c..a700b91bf81 100644 --- a/.riot/requirements/5da4fd8.txt +++ b/.riot/requirements/5da4fd8.txt @@ -2,44 +2,44 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/5da4fd8.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/5da4fd8.in # annotated-types==0.7.0 anyio==4.4.0 -attrs==23.2.0 +attrs==24.2.0 certifi==2024.7.4 -coverage[toml]==7.6.0 +coverage[toml]==7.6.1 distro==1.9.0 h11==0.14.0 httpcore==1.0.5 httpx==0.27.0 hypothesis==6.45.0 -idna==3.7 +idna==3.8 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 -numpy==2.0.0 +numpy==2.1.0 openai[datalib,embeddings]==1.30.1 opentracing==2.4.0 packaging==24.1 pandas==2.2.2 -pandas-stubs==2.2.2.240603 +pandas-stubs==2.2.2.240807 pillow==9.5.0 pluggy==1.5.0 pydantic==2.8.2 pydantic-core==2.20.1 -pytest==8.2.2 +pytest==8.3.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 +pyyaml==6.0.2 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 -tqdm==4.66.4 +tqdm==4.66.5 types-pytz==2024.1.0.20240417 typing-extensions==4.12.2 tzdata==2024.1 diff --git a/.riot/requirements/79deb5b.txt b/.riot/requirements/79deb5b.txt index 17c16e34d6d..22e9b499ea7 100644 --- a/.riot/requirements/79deb5b.txt +++ b/.riot/requirements/79deb5b.txt @@ -2,40 +2,41 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/79deb5b.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/79deb5b.in # aiobotocore==1.4.2 -aiohttp==3.9.1 +aiohappyeyeballs==2.4.0 +aiohttp==3.10.5 aioitertools==0.11.0 aiosignal==1.3.1 async-generator==1.10 async-timeout==4.0.3 -attrs==23.1.0 +attrs==24.2.0 botocore==1.20.106 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 +idna==3.8 +importlib-metadata==8.4.0 iniconfig==2.0.0 jmespath==0.10.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.3.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 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 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.20.0 diff --git a/.riot/requirements/84ec59a.txt b/.riot/requirements/84ec59a.txt index 4f74f601126..9b079cf3a38 100644 --- a/.riot/requirements/84ec59a.txt +++ b/.riot/requirements/84ec59a.txt @@ -2,21 +2,21 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/84ec59a.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/84ec59a.in # annotated-types==0.7.0 anyio==3.7.1 -attrs==23.2.0 +attrs==24.2.0 certifi==2024.7.4 -coverage[toml]==7.6.0 +coverage[toml]==7.6.1 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 +idna==3.8 +importlib-metadata==8.4.0 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 @@ -30,19 +30,19 @@ pillow==9.5.0 pluggy==1.5.0 pydantic==2.8.2 pydantic-core==2.20.1 -pytest==8.2.2 +pytest==8.3.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 +pyyaml==6.0.2 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 tomli==2.0.1 -tqdm==4.66.4 +tqdm==4.66.5 types-pytz==2024.1.0.20240417 typing-extensions==4.12.2 tzdata==2024.1 @@ -50,4 +50,4 @@ urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 -zipp==3.19.2 +zipp==3.20.1 diff --git a/.riot/requirements/87a1fff.txt b/.riot/requirements/87a1fff.txt index 29c1d482b75..b85e76cdd56 100644 --- a/.riot/requirements/87a1fff.txt +++ b/.riot/requirements/87a1fff.txt @@ -2,47 +2,47 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/87a1fff.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/87a1fff.in # annotated-types==0.7.0 anyio==4.4.0 -attrs==23.2.0 +attrs==24.2.0 certifi==2024.7.4 -coverage[toml]==7.6.0 +coverage[toml]==7.6.1 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 +idna==3.8 +importlib-metadata==8.4.0 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 -numpy==2.0.0 +numpy==2.0.1 openai[datalib,embeddings]==1.30.1 opentracing==2.4.0 packaging==24.1 pandas==2.2.2 -pandas-stubs==2.2.2.240603 +pandas-stubs==2.2.2.240807 pillow==9.5.0 pluggy==1.5.0 pydantic==2.8.2 pydantic-core==2.20.1 -pytest==8.2.2 +pytest==8.3.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 +pyyaml==6.0.2 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 tomli==2.0.1 -tqdm==4.66.4 +tqdm==4.66.5 types-pytz==2024.1.0.20240417 typing-extensions==4.12.2 tzdata==2024.1 @@ -50,4 +50,4 @@ urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 -zipp==3.19.2 +zipp==3.20.1 diff --git a/.riot/requirements/b80e42b.txt b/.riot/requirements/b80e42b.txt index 861a7bf8850..6885e5531e6 100644 --- a/.riot/requirements/b80e42b.txt +++ b/.riot/requirements/b80e42b.txt @@ -2,28 +2,28 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --no-annotate .riot/requirements/b80e42b.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/b80e42b.in # algoliasearch==2.6.3 -attrs==23.1.0 -certifi==2023.11.17 +attrs==24.2.0 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 +idna==3.8 +importlib-metadata==8.4.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.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==1.26.18 -zipp==3.17.0 +urllib3==1.26.19 +zipp==3.20.0 diff --git a/.riot/requirements/bb514db.txt b/.riot/requirements/bb514db.txt index 06709f2ca6c..c7bbae59c2a 100644 --- a/.riot/requirements/bb514db.txt +++ b/.riot/requirements/bb514db.txt @@ -2,40 +2,41 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/bb514db.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/bb514db.in # -aiobotocore==2.9.0 -aiohttp==3.9.1 +aiobotocore==2.13.3 +aiohappyeyeballs==2.4.0 +aiohttp==3.10.5 aioitertools==0.11.0 aiosignal==1.3.1 async-generator==1.10 async-timeout==4.0.3 -attrs==23.1.0 -botocore==1.33.13 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==24.2.0 +botocore==1.34.162 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 +idna==3.8 +importlib-metadata==8.4.0 iniconfig==2.0.0 jmespath==1.0.1 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.3.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 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 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.20.0 diff --git a/.riot/requirements/c74f6e0.txt b/.riot/requirements/c74f6e0.txt index 05e4f0a233f..63345853661 100644 --- a/.riot/requirements/c74f6e0.txt +++ b/.riot/requirements/c74f6e0.txt @@ -2,46 +2,46 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/c74f6e0.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/c74f6e0.in # annotated-types==0.7.0 anyio==4.4.0 -attrs==23.2.0 +attrs==24.2.0 certifi==2024.7.4 -coverage[toml]==7.6.0 +coverage[toml]==7.6.1 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 +idna==3.8 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 -numpy==2.0.0 +numpy==2.1.0 openai[datalib,embeddings]==1.30.1 opentracing==2.4.0 packaging==24.1 pandas==2.2.2 -pandas-stubs==2.2.2.240603 +pandas-stubs==2.2.2.240807 pillow==9.5.0 pluggy==1.5.0 pydantic==2.8.2 pydantic-core==2.20.1 -pytest==8.2.2 +pytest==8.3.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 +pyyaml==6.0.2 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 tomli==2.0.1 -tqdm==4.66.4 +tqdm==4.66.5 types-pytz==2024.1.0.20240417 typing-extensions==4.12.2 tzdata==2024.1 diff --git a/.riot/requirements/cc2f3f8.txt b/.riot/requirements/cc2f3f8.txt index 71e8f8a7efc..0d23b62e020 100644 --- a/.riot/requirements/cc2f3f8.txt +++ b/.riot/requirements/cc2f3f8.txt @@ -2,28 +2,28 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/cc2f3f8.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/cc2f3f8.in # algoliasearch==2.6.3 -attrs==23.1.0 -certifi==2023.11.17 +attrs==24.2.0 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 +idna==3.8 +importlib-metadata==8.4.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.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==1.26.18 -zipp==3.17.0 +urllib3==1.26.19 +zipp==3.20.0 diff --git a/.riot/requirements/cd2e4ea.txt b/.riot/requirements/cd2e4ea.txt index 21c29f1243f..24353dafa0c 100644 --- a/.riot/requirements/cd2e4ea.txt +++ b/.riot/requirements/cd2e4ea.txt @@ -2,47 +2,47 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/cd2e4ea.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/cd2e4ea.in # annotated-types==0.7.0 anyio==3.7.1 -attrs==23.2.0 +attrs==24.2.0 certifi==2024.7.4 -coverage[toml]==7.6.0 +coverage[toml]==7.6.1 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 +idna==3.8 +importlib-metadata==8.4.0 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 -numpy==2.0.0 +numpy==2.0.1 openai[datalib,embeddings]==1.1.1 opentracing==2.4.0 packaging==24.1 pandas==2.2.2 -pandas-stubs==2.2.2.240603 +pandas-stubs==2.2.2.240807 pillow==9.5.0 pluggy==1.5.0 pydantic==2.8.2 pydantic-core==2.20.1 -pytest==8.2.2 +pytest==8.3.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 +pyyaml==6.0.2 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 tomli==2.0.1 -tqdm==4.66.4 +tqdm==4.66.5 types-pytz==2024.1.0.20240417 typing-extensions==4.12.2 tzdata==2024.1 @@ -50,4 +50,4 @@ urllib3==1.26.19 vcrpy==4.2.1 wrapt==1.16.0 yarl==1.9.4 -zipp==3.19.2 +zipp==3.20.1 diff --git a/.riot/requirements/d751a10.txt b/.riot/requirements/d751a10.txt index ce91512341b..3169a9ed793 100644 --- a/.riot/requirements/d751a10.txt +++ b/.riot/requirements/d751a10.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/d751a10.in +# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/d751a10.in # aiobotocore==2.0.1 aiohttp==3.8.6 @@ -11,33 +11,33 @@ aiosignal==1.3.1 async-generator==1.10 async-timeout==4.0.3 asynctest==0.13.0 -attrs==23.1.0 +attrs==24.2.0 botocore==1.22.8 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.8 importlib-metadata==6.7.0 iniconfig==2.0.0 jmespath==0.10.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-asyncio==0.21.1 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 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 diff --git a/.riot/requirements/daa4242.txt b/.riot/requirements/daa4242.txt index c9a7ffa19a3..9f64141f2f4 100644 --- a/.riot/requirements/daa4242.txt +++ b/.riot/requirements/daa4242.txt @@ -2,40 +2,41 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/daa4242.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/daa4242.in # aiobotocore==2.0.1 -aiohttp==3.9.1 +aiohappyeyeballs==2.4.0 +aiohttp==3.10.5 aioitertools==0.11.0 aiosignal==1.3.1 async-generator==1.10 async-timeout==4.0.3 -attrs==23.1.0 +attrs==24.2.0 botocore==1.22.8 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 +idna==3.8 +importlib-metadata==8.4.0 iniconfig==2.0.0 jmespath==0.10.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.3.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 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 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.20.0 diff --git a/.riot/requirements/db0f71f.txt b/.riot/requirements/db0f71f.txt index 9c03de78e8f..6caa27dcbbf 100644 --- a/.riot/requirements/db0f71f.txt +++ b/.riot/requirements/db0f71f.txt @@ -2,34 +2,35 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --no-annotate .riot/requirements/db0f71f.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/db0f71f.in # aiobotocore==2.0.1 -aiohttp==3.9.1 +aiohappyeyeballs==2.4.0 +aiohttp==3.10.5 aioitertools==0.11.0 aiosignal==1.3.1 async-generator==1.10 -attrs==23.1.0 +attrs==24.2.0 botocore==1.22.8 -coverage[toml]==7.3.4 +coverage[toml]==7.6.1 frozenlist==1.4.1 hypothesis==6.45.0 -idna==3.6 +idna==3.8 iniconfig==2.0.0 jmespath==0.10.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.3.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 -python-dateutil==2.8.2 +python-dateutil==2.9.0.post0 six==1.16.0 sortedcontainers==2.4.0 -urllib3==1.26.18 +urllib3==1.26.19 wrapt==1.16.0 yarl==1.9.4 diff --git a/.riot/requirements/e1220d6.txt b/.riot/requirements/e1220d6.txt index 45bc4729eab..a4b3ae11043 100644 --- a/.riot/requirements/e1220d6.txt +++ b/.riot/requirements/e1220d6.txt @@ -2,24 +2,24 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --no-annotate .riot/requirements/e1220d6.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/e1220d6.in # algoliasearch==2.6.3 -attrs==23.1.0 -certifi==2023.11.17 +attrs==24.2.0 +certifi==2024.7.4 charset-normalizer==3.3.2 -coverage[toml]==7.3.4 +coverage[toml]==7.6.1 hypothesis==6.45.0 -idna==3.6 +idna==3.8 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.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==1.26.18 +urllib3==1.26.19 diff --git a/.riot/requirements/f1c37b1.txt b/.riot/requirements/f1c37b1.txt index 5fe13450a50..4da5078a988 100644 --- a/.riot/requirements/f1c37b1.txt +++ b/.riot/requirements/f1c37b1.txt @@ -2,46 +2,46 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --no-annotate .riot/requirements/f1c37b1.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/f1c37b1.in # annotated-types==0.7.0 anyio==3.7.1 -attrs==23.2.0 +attrs==24.2.0 certifi==2024.7.4 -coverage[toml]==7.6.0 +coverage[toml]==7.6.1 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 +idna==3.8 iniconfig==2.0.0 mock==5.1.0 multidict==6.0.5 -numpy==2.0.0 +numpy==2.1.0 openai[datalib,embeddings]==1.1.1 opentracing==2.4.0 packaging==24.1 pandas==2.2.2 -pandas-stubs==2.2.2.240603 +pandas-stubs==2.2.2.240807 pillow==9.5.0 pluggy==1.5.0 pydantic==2.8.2 pydantic-core==2.20.1 -pytest==8.2.2 +pytest==8.3.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 +pyyaml==6.0.2 six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 tomli==2.0.1 -tqdm==4.66.4 +tqdm==4.66.5 types-pytz==2024.1.0.20240417 typing-extensions==4.12.2 tzdata==2024.1 diff --git a/.riot/requirements/f7c30a0.txt b/.riot/requirements/f7c30a0.txt index 39dc4709cbf..3e4716aede1 100644 --- a/.riot/requirements/f7c30a0.txt +++ b/.riot/requirements/f7c30a0.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/f7c30a0.in +# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/f7c30a0.in # annotated-types==0.5.0 anyio==3.7.1 -attrs==23.2.0 +attrs==24.2.0 certifi==2024.7.4 coverage[toml]==7.2.7 distro==1.9.0 @@ -15,7 +15,7 @@ h11==0.14.0 httpcore==0.17.3 httpx==0.24.1 hypothesis==6.45.0 -idna==3.7 +idna==3.8 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 @@ -42,7 +42,7 @@ six==1.16.0 sniffio==1.3.1 sortedcontainers==2.4.0 tomli==2.0.1 -tqdm==4.66.4 +tqdm==4.66.5 typing-extensions==4.7.1 urllib3==1.26.19 vcrpy==4.2.1 diff --git a/.riot/requirements/feaf737.txt b/.riot/requirements/feaf737.txt index 013049afc75..9aaa6e5ca6d 100644 --- a/.riot/requirements/feaf737.txt +++ b/.riot/requirements/feaf737.txt @@ -2,23 +2,23 @@ # 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/feaf737.in +# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/feaf737.in # algoliasearch==2.6.3 -attrs==23.1.0 -certifi==2023.11.17 +attrs==24.2.0 +certifi==2024.7.4 charset-normalizer==3.3.2 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.2 hypothesis==6.45.0 -idna==3.6 +idna==3.8 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 @@ -26,5 +26,5 @@ requests==2.31.0 sortedcontainers==2.4.0 tomli==2.0.1 typing-extensions==4.7.1 -urllib3==1.26.18 +urllib3==1.26.19 zipp==3.15.0 diff --git a/ddtrace/appsec/_iast/_patch.py b/ddtrace/appsec/_iast/_patch.py index dc4836dbd0b..e114318bbce 100644 --- a/ddtrace/appsec/_iast/_patch.py +++ b/ddtrace/appsec/_iast/_patch.py @@ -1,3 +1,4 @@ +import functools import sys from typing import Callable from typing import Text @@ -7,6 +8,7 @@ from ddtrace.appsec._common_module_patches import wrap_object from ddtrace.internal.logger import get_logger +from ._metrics import _set_metric_iast_instrumented_source from ._utils import _is_iast_enabled @@ -80,3 +82,20 @@ def if_iast_taint_yield_tuple_for(origins, wrapped, instance, args, kwargs): else: for key, value in wrapped(*args, **kwargs): yield key, value + + +def _on_iast_fastapi_patch(): + from ddtrace.appsec._iast._taint_tracking import OriginType + + try_wrap_function_wrapper( + "starlette.datastructures", + "QueryParams.__getitem__", + functools.partial(if_iast_taint_returned_object_for, OriginType.PARAMETER), + ) + try_wrap_function_wrapper( + "starlette.datastructures", + "QueryParams.get", + functools.partial(if_iast_taint_returned_object_for, OriginType.PARAMETER), + ) + + _set_metric_iast_instrumented_source(OriginType.PARAMETER) diff --git a/ddtrace/contrib/internal/fastapi/patch.py b/ddtrace/contrib/internal/fastapi/patch.py index a32847ce704..cd6f580a082 100644 --- a/ddtrace/contrib/internal/fastapi/patch.py +++ b/ddtrace/contrib/internal/fastapi/patch.py @@ -7,6 +7,7 @@ from ddtrace import Pin from ddtrace import config +from ddtrace.appsec._iast._utils import _is_iast_enabled from ddtrace.contrib.asgi.middleware import TraceMiddleware from ddtrace.contrib.internal.starlette.patch import _trace_background_tasks from ddtrace.contrib.internal.starlette.patch import traced_handler @@ -74,7 +75,6 @@ def patch(): if not isinstance(fastapi.BackgroundTasks.add_task, ObjectProxy): _w("fastapi", "BackgroundTasks.add_task", _trace_background_tasks(fastapi)) - # We need to check that Starlette instrumentation hasn't already patched these if not isinstance(fastapi.routing.APIRoute.handle, ObjectProxy): _w("fastapi.routing", "APIRoute.handle", traced_handler) @@ -82,6 +82,11 @@ def patch(): if not isinstance(fastapi.routing.Mount.handle, ObjectProxy): _w("starlette.routing", "Mount.handle", traced_handler) + if _is_iast_enabled(): + from ddtrace.appsec._iast._patch import _on_iast_fastapi_patch + + _on_iast_fastapi_patch() + def unpatch(): if not getattr(fastapi, "_datadog_patch", False): diff --git a/hatch.toml b/hatch.toml index 5ab2bf96831..53f2a9f46f6 100644 --- a/hatch.toml +++ b/hatch.toml @@ -368,3 +368,15 @@ pytest = ["~=6.0", "latest"] [[envs.pytest_plugin_v2.matrix]] python = ["3.10", "3.12"] pytest = ["~=6.0", "~=7.0", "latest"] + +[envs.snapshot_viewer] +dev-mode = false +template = "snapshot_viewer" +dependencies = [ + "PrettyPrintTree" +] + +[envs.snapshot_viewer.scripts] +view = [ + "python scripts/ci_visibility/view_snapshot.py {args:}", +] diff --git a/scripts/ci_visibility/view_snapshot.py b/scripts/ci_visibility/view_snapshot.py new file mode 100644 index 00000000000..29b73bce305 --- /dev/null +++ b/scripts/ci_visibility/view_snapshot.py @@ -0,0 +1,98 @@ +import json +import os +import sys + +from PrettyPrint import PrettyPrintTree + + +class Tree: + def __init__(self, span, component, resource, parent_id=None): + self.span = span + self.component = component + self.resource = resource + self.parent_id = parent_id + self.children = [] + + def add_child(self, child): + self.children.append(child) + return child + + def __repr__(self): + return f"{self.component}\n- {self.resource}" + + +class Snapshots(Tree): + def __init__(self): + super().__init__(None, None, None) + + def __repr__(self): + return "Snapshots" + + +pt = PrettyPrintTree(lambda x: x.children, lambda x: x.__repr__(), orientation=PrettyPrintTree.Horizontal) + +PARENT_SPAN_IDS = {"test": "test_suite_id", "test_suite_end": "test_module_id", "test_module_end": "test_session_id"} +TYPE_IDS = { + "test_suite_end": "test_suite_id", + "test_module_end": "test_module_id", + "test_session_end": "test_session_id", +} + + +def load_snapshot(snapshot_file): + with open(snapshot_file) as f: + snapshot = json.load(f) + return snapshot + + +def get_nodes(traces): + nodes = {} + for trace in traces: + for span in trace: + try: + span_meta = span.get("meta", {}) + span_type = span_meta.get("type") + span_id = span_meta.get(TYPE_IDS.get(span_type), f"{span['trace_id']}.{span['span_id']}") + parent_id = span_meta.get(PARENT_SPAN_IDS.get(span_type), f"{span['trace_id']}.{span['parent_id']}") + nodes[span_id] = Tree(span, span_meta.get("component"), span["resource"], parent_id) + except Exception as e: + print("Error processing span", span, e) + return nodes + + +def sort_nodes(nodes): + roots = [] + for node_id, node in nodes.items(): + if node.parent_id is None or node.parent_id not in nodes: + roots.append(node) + else: + nodes[node.parent_id].add_child(node) + + return roots + + +def build_snapshot_tree(snapshot): + nodes = get_nodes(snapshot) + + t = Snapshots() + t.children = sort_nodes(nodes) + + return t + + +if __name__ == "__main__": + try: + w, _ = os.get_terminal_size() + except OSError: + w = 80 + + snapshot_files = sys.argv[1:] + for snapshot_file in snapshot_files: + print(f" Showing snapshot: {snapshot_file} ".center(w, "="), "\n") + snapshot = load_snapshot(snapshot_file) + + tree = build_snapshot_tree(snapshot) + + pt(tree) + + print("\n\n") diff --git a/tests/contrib/fastapi/conftest.py b/tests/contrib/fastapi/conftest.py new file mode 100644 index 00000000000..821ef269414 --- /dev/null +++ b/tests/contrib/fastapi/conftest.py @@ -0,0 +1,86 @@ +from fastapi.testclient import TestClient +import pytest + +import ddtrace +from ddtrace.contrib.fastapi import patch as fastapi_patch +from ddtrace.contrib.fastapi import unpatch as fastapi_unpatch +from tests.utils import DummyTracer +from tests.utils import TracerSpanContainer + +from . import app + + +@pytest.fixture +def tracer(): + original_tracer = ddtrace.tracer + tracer = DummyTracer() + + ddtrace.tracer = tracer + fastapi_patch() + yield tracer + ddtrace.tracer = original_tracer + fastapi_unpatch() + + +@pytest.fixture +def test_spans(tracer): + container = TracerSpanContainer(tracer) + yield container + container.reset() + + +@pytest.fixture +def fastapi_application(tracer): + application = app.get_app() + yield application + + +@pytest.fixture +def snapshot_app_with_middleware(): + fastapi_patch() + + application = app.get_app() + + @application.middleware("http") + async def traced_middlware(request, call_next): + with ddtrace.tracer.trace("traced_middlware"): + response = await call_next(request) + return response + + yield application + + fastapi_unpatch() + + +@pytest.fixture +def client(tracer, fastapi_application): + with TestClient(fastapi_application) as test_client: + yield test_client + + +@pytest.fixture +def snapshot_app(): + fastapi_patch() + application = app.get_app() + yield application + fastapi_unpatch() + + +@pytest.fixture +def snapshot_client(snapshot_app): + with TestClient(snapshot_app) as test_client: + yield test_client + + +@pytest.fixture +def snapshot_app_with_tracer(tracer): + fastapi_patch() + application = app.get_app() + yield application + fastapi_unpatch() + + +@pytest.fixture +def snapshot_client_with_tracer(snapshot_app_with_tracer): + with TestClient(snapshot_app_with_tracer) as test_client: + yield test_client diff --git a/tests/contrib/fastapi/test_fastapi.py b/tests/contrib/fastapi/test_fastapi.py index d67e8f525e8..7d63b6a6bf1 100644 --- a/tests/contrib/fastapi/test_fastapi.py +++ b/tests/contrib/fastapi/test_fastapi.py @@ -6,99 +6,16 @@ import httpx import pytest -import ddtrace -from ddtrace.contrib.fastapi import patch as fastapi_patch -from ddtrace.contrib.fastapi import unpatch as fastapi_unpatch from ddtrace.contrib.starlette.patch import patch as patch_starlette from ddtrace.contrib.starlette.patch import unpatch as unpatch_starlette from ddtrace.internal.schema.span_attribute_schema import _DEFAULT_SPAN_SERVICE_NAMES from ddtrace.internal.utils.version import parse_version from ddtrace.propagation import http as http_propagation -from tests.utils import DummyTracer -from tests.utils import TracerSpanContainer from tests.utils import flaky from tests.utils import override_config from tests.utils import override_http_config from tests.utils import snapshot -from . import app - - -@pytest.fixture -def tracer(): - original_tracer = ddtrace.tracer - tracer = DummyTracer() - - ddtrace.tracer = tracer - fastapi_patch() - yield tracer - ddtrace.tracer = original_tracer - fastapi_unpatch() - - -@pytest.fixture -def test_spans(tracer): - container = TracerSpanContainer(tracer) - yield container - container.reset() - - -@pytest.fixture -def application(tracer): - application = app.get_app() - yield application - - -@pytest.fixture -def snapshot_app_with_middleware(): - fastapi_patch() - - application = app.get_app() - - @application.middleware("http") - async def traced_middlware(request, call_next): - with ddtrace.tracer.trace("traced_middlware"): - response = await call_next(request) - return response - - yield application - - fastapi_unpatch() - - -@pytest.fixture -def client(tracer): - with TestClient(app.get_app()) as test_client: - yield test_client - - -@pytest.fixture -def snapshot_app(): - fastapi_patch() - application = app.get_app() - yield application - fastapi_unpatch() - - -@pytest.fixture -def snapshot_client(snapshot_app): - with TestClient(snapshot_app) as test_client: - yield test_client - - -@pytest.fixture -def snapshot_app_with_tracer(tracer): - fastapi_patch() - application = app.get_app() - yield application - fastapi_unpatch() - - -@pytest.fixture -def snapshot_client_with_tracer(snapshot_app_with_tracer): - with TestClient(snapshot_app_with_tracer) as test_client: - yield test_client - def assert_serialize_span(serialize_span): assert serialize_span.service == "fastapi" @@ -506,9 +423,9 @@ def test_distributed_tracing(client, tracer, test_spans): @pytest.mark.asyncio -async def test_multiple_requests(application, tracer, test_spans): +async def test_multiple_requests(fastapi_application, tracer, test_spans): with override_http_config("fastapi", dict(trace_query_string=True)): - async with httpx.AsyncClient(app=application) as client: + async with httpx.AsyncClient(app=fastapi_application) as client: responses = await asyncio.gather( client.get("http://testserver/", headers={"sleep": "True"}), client.get("http://testserver/", headers={"sleep": "False"}), @@ -713,8 +630,8 @@ def test_schematization(ddtrace_run_python_code_in_subprocess, schema_tuples): import pytest import sys -from tests.contrib.fastapi.test_fastapi import snapshot_app -from tests.contrib.fastapi.test_fastapi import snapshot_client +from tests.contrib.fastapi.conftest import snapshot_app +from tests.contrib.fastapi.conftest import snapshot_client def test_read_homepage(snapshot_client): snapshot_client.get("/sub-app/hello/name") diff --git a/tests/contrib/fastapi/test_fastapi_appsec.py b/tests/contrib/fastapi/test_fastapi_appsec.py index ab864e361d8..f9ce2931a14 100644 --- a/tests/contrib/fastapi/test_fastapi_appsec.py +++ b/tests/contrib/fastapi/test_fastapi_appsec.py @@ -1,20 +1,12 @@ from fastapi import Request from fastapi.responses import PlainTextResponse -from fastapi.testclient import TestClient import pytest -import ddtrace from ddtrace.appsec._handlers import _on_asgi_request_parse_body -from ddtrace.contrib.fastapi import patch as fastapi_patch -from ddtrace.contrib.fastapi import unpatch as fastapi_unpatch from ddtrace.internal import core import tests.appsec.rules as rules -from tests.utils import DummyTracer -from tests.utils import TracerSpanContainer from tests.utils import override_global_config -from . import app as fastapi_app - def _aux_appsec_prepare_tracer(tracer, asm_enabled=True): tracer._asm_enabled = asm_enabled @@ -22,35 +14,6 @@ def _aux_appsec_prepare_tracer(tracer, asm_enabled=True): tracer.configure(api_version="v0.4") -@pytest.fixture -def tracer(): - original_tracer = ddtrace.tracer - tracer = DummyTracer() - ddtrace.tracer = tracer - fastapi_patch() - yield tracer - ddtrace.tracer = original_tracer - fastapi_unpatch() - - -@pytest.fixture -def app(tracer): - return fastapi_app.get_app() - - -@pytest.fixture -def client(tracer, app): - with TestClient(app) as test_client: - yield test_client - - -@pytest.fixture -def test_spans(tracer): - container = TracerSpanContainer(tracer) - yield container - container.reset() - - def get_response_body(response): return response.text @@ -59,9 +22,6 @@ def get_root_span(spans): return spans.pop_traces()[0][0] -# Core Instrumentation - - @pytest.fixture def setup_core_ok_after_test(): yield @@ -69,9 +29,9 @@ def setup_core_ok_after_test(): @pytest.mark.usefixtures("setup_core_ok_after_test") -def test_core_callback_request_body(app, client, tracer, test_spans): - @app.get("/index.html") - @app.post("/index.html") +def test_core_callback_request_body(fastapi_application, client, tracer, test_spans): + @fastapi_application.get("/index.html") + @fastapi_application.post("/index.html") async def test_route(request: Request): body = await request._receive() return PlainTextResponse(body["body"]) diff --git a/tests/contrib/fastapi/test_fastapi_appsec_iast.py b/tests/contrib/fastapi/test_fastapi_appsec_iast.py new file mode 100644 index 00000000000..3d31a2da454 --- /dev/null +++ b/tests/contrib/fastapi/test_fastapi_appsec_iast.py @@ -0,0 +1,73 @@ +import json + +from fastapi import Request +from fastapi.responses import JSONResponse +import pytest + +from ddtrace.appsec._handlers import _on_asgi_request_parse_body +from ddtrace.appsec._iast import oce +from ddtrace.appsec._iast._patch import _on_iast_fastapi_patch +from ddtrace.internal import core +from tests.utils import override_env +from tests.utils import override_global_config + + +IAST_ENV = {"DD_IAST_REQUEST_SAMPLING": "100"} + + +def _aux_appsec_prepare_tracer(tracer): + _on_iast_fastapi_patch() + oce.reconfigure() + + tracer._iast_enabled = True + # Hack: need to pass an argument to configure so that the processors are recreated + tracer.configure(api_version="v0.4") + + +def get_response_body(response): + return response.text + + +def get_root_span(spans): + return spans.pop_traces()[0][0] + + +@pytest.fixture +def setup_core_ok_after_test(): + yield + core.on("asgi.request.parse.body", _on_asgi_request_parse_body, "await_receive_and_body") + + +@pytest.mark.usefixtures("setup_core_ok_after_test") +def test_query_param_source(fastapi_application, client, tracer, test_spans): + @fastapi_application.get("/index.html") + async def test_route(request: Request): + from ddtrace.appsec._iast._taint_tracking import get_tainted_ranges + + query_params = request.query_params.get("iast_queryparam") + ranges_result = get_tainted_ranges(query_params) + return JSONResponse( + { + "result": query_params, + "is_tainted": len(ranges_result), + "ranges_start": ranges_result[0].start, + "ranges_length": ranges_result[0].length, + } + ) + + # test if asgi middleware is ok without any callback registered + core.reset_listeners(event_id="asgi.request.parse.body") + + with override_global_config(dict(_iast_enabled=True)), override_env(IAST_ENV): + # disable callback + _aux_appsec_prepare_tracer(tracer) + resp = client.get( + "/index.html?iast_queryparam=test1234", + headers={"Content-Type": "application/json"}, + ) + assert resp.status_code == 200 + result = json.loads(get_response_body(resp)) + assert result["result"] == "test1234" + assert result["is_tainted"] == 1 + assert result["ranges_start"] == 0 + assert result["ranges_length"] == 8 diff --git a/tests/tracer/test_propagation.py b/tests/tracer/test_propagation.py index f485f9aa2db..8d65fe77a09 100644 --- a/tests/tracer/test_propagation.py +++ b/tests/tracer/test_propagation.py @@ -37,9 +37,10 @@ from ddtrace.propagation.http import HTTP_HEADER_TRACE_ID from ddtrace.propagation.http import HTTPPropagator from ddtrace.propagation.http import _TraceContext -from tests.contrib.fastapi.test_fastapi import client as fastapi_client # noqa:F401 -from tests.contrib.fastapi.test_fastapi import test_spans as fastapi_test_spans # noqa:F401 -from tests.contrib.fastapi.test_fastapi import tracer # noqa:F401 +from tests.contrib.fastapi.conftest import client as fastapi_client # noqa:F401 +from tests.contrib.fastapi.conftest import fastapi_application # noqa:F401 +from tests.contrib.fastapi.conftest import test_spans as fastapi_test_spans # noqa:F401 +from tests.contrib.fastapi.conftest import tracer # noqa:F401 from ..utils import override_global_config