diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index d281fe80148..23a48b6f344 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -110,6 +110,7 @@ benchmarks/base/aspects_benchmarks_generate.py @DataDog/asm-python ddtrace/appsec/ @DataDog/asm-python ddtrace/settings/asm.py @DataDog/asm-python ddtrace/contrib/subprocess/ @DataDog/asm-python +ddtrace/contrib/internal/subprocess/ @DataDog/asm-python ddtrace/contrib/flask_login/ @DataDog/asm-python ddtrace/contrib/webbrowser @DataDog/asm-python ddtrace/contrib/urllib @DataDog/asm-python diff --git a/.github/workflows/build_python_3.yml b/.github/workflows/build_python_3.yml index fac67e45f82..a3d6066dc0c 100644 --- a/.github/workflows/build_python_3.yml +++ b/.github/workflows/build_python_3.yml @@ -132,6 +132,10 @@ jobs: CIBW_BEFORE_ALL_WINDOWS: rustup target add i686-pc-windows-msvc CIBW_BEFORE_ALL_MACOS: rustup target add aarch64-apple-darwin CIBW_ENVIRONMENT_LINUX: PATH=$HOME/.cargo/bin:$PATH CMAKE_BUILD_PARALLEL_LEVEL=24 + # SYSTEM_VERSION_COMPAT is a workaround for versioning issue, a.k.a. + # `platform.mac_ver()` reports incorrect MacOS version at 11.0 + # See: https://stackoverflow.com/a/65402241 + CIBW_ENVIRONMENT_MACOS: CMAKE_BUILD_PARALLEL_LEVEL=24 SYSTEM_VERSION_COMPAT=0 CIBW_REPAIR_WHEEL_COMMAND_LINUX: | mkdir ./tempwheelhouse && unzip -l {wheel} | grep '\.so' && diff --git a/.riot/requirements/1053dce.txt b/.riot/requirements/1053dce.txt index 5b1c1d31dbe..fe54a35c1c4 100644 --- a/.riot/requirements/1053dce.txt +++ b/.riot/requirements/1053dce.txt @@ -4,23 +4,23 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1053dce.in # -attrs==24.2.0 -coverage[toml]==7.6.1 -gevent==24.2.1 +attrs==24.3.0 +coverage[toml]==7.6.10 +gevent==24.11.1 greenlet==3.1.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.3 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 zope-event==5.0 -zope-interface==7.0.3 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/105b4fa.txt b/.riot/requirements/105b4fa.txt new file mode 100644 index 00000000000..cd828ea969c --- /dev/null +++ b/.riot/requirements/105b4fa.txt @@ -0,0 +1,74 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/105b4fa.in +# +arrow==1.3.0 +asgiref==3.8.1 +attrs==24.3.0 +autobahn==24.4.2 +automat==24.8.1 +bcrypt==4.2.1 +blessed==1.20.0 +certifi==2024.12.14 +cffi==1.17.1 +channels==4.2.0 +charset-normalizer==3.4.0 +constantly==23.10.4 +coverage[toml]==7.6.9 +cryptography==44.0.0 +daphne==4.1.2 +django==4.2.17 +django-configurations==2.5.1 +django-picklefield==3.2 +django-pylibmc==0.6.1 +django-q==1.3.6 +django-redis==4.5.0 +hyperlink==21.0.0 +hypothesis==6.45.0 +idna==3.10 +incremental==24.7.2 +iniconfig==2.0.0 +isodate==0.7.2 +lxml==5.3.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +platformdirs==4.3.6 +pluggy==1.5.0 +psycopg==3.2.3 +psycopg2-binary==2.9.10 +pyasn1==0.6.1 +pyasn1-modules==0.4.1 +pycparser==2.22 +pylibmc==1.6.3 +pyopenssl==24.3.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-django[testing]==3.10.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +python-dateutil==2.9.0.post0 +python-memcached==1.62 +pytz==2024.2 +redis==2.10.6 +requests==2.32.3 +requests-file==2.1.0 +requests-toolbelt==1.0.0 +service-identity==24.2.0 +six==1.17.0 +sortedcontainers==2.4.0 +spyne==2.14.0 +sqlparse==0.5.3 +twisted[tls]==24.11.0 +txaio==23.1.1 +types-python-dateutil==2.9.0.20241206 +typing-extensions==4.12.2 +urllib3==2.3.0 +wcwidth==0.2.13 +zeep==4.3.1 +zope-interface==7.2 + +# The following packages are considered to be unsafe in a requirements file: +setuptools==75.6.0 diff --git a/.riot/requirements/108f9cf.txt b/.riot/requirements/1069d71.txt similarity index 69% rename from .riot/requirements/108f9cf.txt rename to .riot/requirements/1069d71.txt index 68e407c1fea..d528654c86a 100644 --- a/.riot/requirements/108f9cf.txt +++ b/.riot/requirements/1069d71.txt @@ -2,37 +2,37 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/108f9cf.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1069d71.in # aiofiles==24.1.0 -anyio==4.6.2.post1 -attrs==24.2.0 -certifi==2024.8.30 +anyio==4.7.0 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==3.4.0 -coverage[toml]==7.6.3 +coverage[toml]==7.6.9 exceptiongroup==1.2.2 fastapi==0.90.1 h11==0.14.0 -httpcore==1.0.6 +httpcore==1.0.7 httpx==0.27.2 hypothesis==6.45.0 idna==3.10 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pydantic==1.10.18 -pytest==8.3.3 +pydantic==1.10.19 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-multipart==0.0.12 +pytest-randomly==3.16.0 +python-multipart==0.0.20 requests==2.32.3 sniffio==1.3.1 sortedcontainers==2.4.0 starlette==0.23.1 -tomli==2.0.2 +tomli==2.2.1 typing-extensions==4.12.2 urllib3==2.2.3 diff --git a/.riot/requirements/1078c3b.txt b/.riot/requirements/1078c3b.txt new file mode 100644 index 00000000000..00d9778e6da --- /dev/null +++ b/.riot/requirements/1078c3b.txt @@ -0,0 +1,27 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1078c3b.in +# +attrs==24.3.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 +greenlet==3.0.3 +hypothesis==6.45.0 +importlib-metadata==8.5.0 +iniconfig==2.0.0 +mock==5.1.0 +mysql-connector-python==9.0.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +psycopg2-binary==2.9.10 +pytest==8.3.4 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +sqlalchemy==1.3.24 +tomli==2.2.1 +zipp==3.20.2 diff --git a/.riot/requirements/41b3223.txt b/.riot/requirements/108d1af.txt similarity index 75% rename from .riot/requirements/41b3223.txt rename to .riot/requirements/108d1af.txt index d97afcad0ae..3afb1286ce6 100644 --- a/.riot/requirements/41b3223.txt +++ b/.riot/requirements/108d1af.txt @@ -2,19 +2,19 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/41b3223.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/108d1af.in # aiofiles==24.1.0 annotated-types==0.7.0 anyio==4.5.2 -attrs==24.2.0 -certifi==2024.8.30 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==3.4.0 coverage[toml]==7.6.1 exceptiongroup==1.2.2 -fastapi==0.115.2 +fastapi==0.115.6 h11==0.14.0 -httpcore==1.0.6 +httpcore==1.0.7 httpx==0.27.2 hypothesis==6.45.0 idna==3.10 @@ -22,21 +22,21 @@ importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pydantic==2.9.2 -pydantic-core==2.23.4 -pytest==8.3.3 +pydantic==2.10.3 +pydantic-core==2.27.1 +pytest==8.3.4 pytest-asyncio==0.21.1 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-multipart==0.0.12 +python-multipart==0.0.20 requests==2.32.3 sniffio==1.3.1 sortedcontainers==2.4.0 -starlette==0.40.0 -tomli==2.0.2 +starlette==0.41.3 +tomli==2.2.1 typing-extensions==4.12.2 urllib3==2.2.3 zipp==3.20.2 diff --git a/.riot/requirements/1092157.txt b/.riot/requirements/1092157.txt index 5dca0051a12..3d01104cb32 100644 --- a/.riot/requirements/1092157.txt +++ b/.riot/requirements/1092157.txt @@ -4,27 +4,27 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1092157.in # -attrs==23.2.0 -coverage[toml]==7.6.0 -gevent==24.2.1 -greenlet==3.0.3 +attrs==24.3.0 +coverage[toml]==7.6.10 +gevent==24.11.1 +greenlet==3.1.1 httpretty==1.1.4 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pyfakefs==5.6.0 -pytest==8.3.1 +pyfakefs==5.7.3 +pytest==8.3.4 pytest-asyncio==0.23.8 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 python-json-logger==2.0.7 sortedcontainers==2.4.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/109311c.txt b/.riot/requirements/109311c.txt deleted file mode 100644 index be68727bd91..00000000000 --- a/.riot/requirements/109311c.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/109311c.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -falcon==3.0.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 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 diff --git a/.riot/requirements/10f3c55.txt b/.riot/requirements/10f3c55.txt index 34a8e65f917..95237c5566b 100644 --- a/.riot/requirements/10f3c55.txt +++ b/.riot/requirements/10f3c55.txt @@ -17,7 +17,7 @@ channels==4.2.0 charset-normalizer==3.4.0 constantly==23.10.4 coverage[toml]==7.6.9 -cryptography==43.0.3 +cryptography==44.0.0 daphne==4.1.2 django==4.2.17 django-configurations==2.5.1 @@ -39,7 +39,6 @@ opentracing==2.4.0 packaging==24.2 platformdirs==4.3.6 pluggy==1.5.0 -psycopg==3.2.3 psycopg2-binary==2.9.10 pyasn1==0.6.1 pyasn1-modules==0.4.1 diff --git a/.riot/requirements/13f7667.txt b/.riot/requirements/11b0a50.txt similarity index 71% rename from .riot/requirements/13f7667.txt rename to .riot/requirements/11b0a50.txt index cdb3642f7bf..e7ae1d3b05b 100644 --- a/.riot/requirements/13f7667.txt +++ b/.riot/requirements/11b0a50.txt @@ -2,32 +2,32 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/13f7667.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/11b0a50.in # aiofiles==24.1.0 anyio==3.7.1 -attrs==24.2.0 -certifi==2024.8.30 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==3.4.0 -coverage[toml]==7.6.3 +coverage[toml]==7.6.9 fastapi==0.86.0 h11==0.14.0 -httpcore==1.0.6 +httpcore==1.0.7 httpx==0.27.2 hypothesis==6.45.0 idna==3.10 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pydantic==1.10.18 -pytest==8.3.3 +pydantic==1.10.19 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-multipart==0.0.12 +pytest-randomly==3.16.0 +python-multipart==0.0.20 requests==2.32.3 sniffio==1.3.1 sortedcontainers==2.4.0 diff --git a/.riot/requirements/1231d9a.txt b/.riot/requirements/1231d9a.txt deleted file mode 100644 index 15a480253de..00000000000 --- a/.riot/requirements/1231d9a.txt +++ /dev/null @@ -1,20 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1231d9a.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -falcon==3.1.3 -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 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/125c1e6.txt b/.riot/requirements/125c1e6.txt index 77714a4a160..f59c7be042a 100644 --- a/.riot/requirements/125c1e6.txt +++ b/.riot/requirements/125c1e6.txt @@ -4,8 +4,8 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/125c1e6.in # -attrs==24.2.0 -coverage[toml]==7.6.4 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 gevent==24.11.1 greenlet==3.1.1 @@ -17,17 +17,17 @@ opentracing==2.4.0 packaging==24.2 pluggy==1.5.0 py-cpuinfo==8.0.0 -pytest==8.3.3 +pytest==8.3.4 pytest-asyncio==0.21.1 pytest-benchmark==5.1.0 pytest-cov==6.0.0 pytest-mock==3.14.0 pytest-randomly==3.16.0 sortedcontainers==2.4.0 -tomli==2.0.2 +tomli==2.2.1 uwsgi==2.0.28 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.0 +setuptools==75.7.0 diff --git a/.riot/requirements/12a25de.txt b/.riot/requirements/12a25de.txt index f7626378e7a..309a1ea970c 100644 --- a/.riot/requirements/12a25de.txt +++ b/.riot/requirements/12a25de.txt @@ -4,31 +4,31 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/12a25de.in # -attrs==23.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.0 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 -gunicorn==22.0.0 +gevent==24.11.1 +greenlet==3.1.1 +gunicorn==23.0.0 hypothesis==6.45.0 -idna==3.7 +idna==3.10 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.32.3 sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.2.2 +tomli==2.2.1 +urllib3==2.3.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/12a4316.txt b/.riot/requirements/12a4316.txt index de9c85604c9..f1c216b8f13 100644 --- a/.riot/requirements/12a4316.txt +++ b/.riot/requirements/12a4316.txt @@ -4,8 +4,8 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/12a4316.in # -attrs==24.2.0 -coverage[toml]==7.6.4 +attrs==24.3.0 +coverage[toml]==7.6.10 gevent==24.11.1 greenlet==3.1.1 hypothesis==6.45.0 @@ -14,13 +14,13 @@ mock==5.1.0 opentracing==2.4.0 packaging==24.2 pluggy==1.5.0 -pytest==8.3.3 +pytest==8.3.4 pytest-cov==6.0.0 pytest-mock==3.14.0 pytest-randomly==3.16.0 sortedcontainers==2.4.0 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.0 +setuptools==75.7.0 diff --git a/.riot/requirements/134deb1.txt b/.riot/requirements/134deb1.txt new file mode 100644 index 00000000000..71a346694a6 --- /dev/null +++ b/.riot/requirements/134deb1.txt @@ -0,0 +1,27 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/134deb1.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +exceptiongroup==1.2.2 +greenlet==3.0.3 +hypothesis==6.45.0 +importlib-metadata==8.5.0 +iniconfig==2.0.0 +mock==5.1.0 +mysql-connector-python==9.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +psycopg2-binary==2.9.10 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +sqlalchemy==1.3.24 +tomli==2.2.1 +zipp==3.21.0 diff --git a/.riot/requirements/1359ebb.txt b/.riot/requirements/1359ebb.txt index 75c10c261a8..371e017287d 100644 --- a/.riot/requirements/1359ebb.txt +++ b/.riot/requirements/1359ebb.txt @@ -4,8 +4,8 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1359ebb.in # -attrs==24.2.0 -coverage[toml]==7.6.4 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 gevent==24.11.1 greenlet==3.1.1 @@ -18,7 +18,7 @@ opentracing==2.4.0 packaging==24.2 pluggy==1.5.0 py-cpuinfo==8.0.0 -pytest==8.3.3 +pytest==8.3.4 pytest-asyncio==0.21.1 pytest-benchmark==5.1.0 pytest-cov==6.0.0 @@ -26,10 +26,10 @@ pytest-cpp==2.6.0 pytest-mock==3.14.0 pytest-randomly==3.16.0 sortedcontainers==2.4.0 -tomli==2.1.0 +tomli==2.2.1 uwsgi==2.0.28 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.4.0 +setuptools==75.7.0 diff --git a/.riot/requirements/137098c.txt b/.riot/requirements/137098c.txt index 5822ccd7949..24a61c00a85 100644 --- a/.riot/requirements/137098c.txt +++ b/.riot/requirements/137098c.txt @@ -4,11 +4,11 @@ # # pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/137098c.in # -attrs==23.2.0 +attrs==24.2.0 coverage[toml]==7.2.7 exceptiongroup==1.2.2 gevent==22.10.2 -greenlet==3.0.3 +greenlet==3.1.1 httpretty==1.1.4 hypothesis==6.45.0 importlib-metadata==6.7.0 @@ -17,7 +17,7 @@ mock==5.1.0 opentracing==2.4.0 packaging==24.0 pluggy==1.2.0 -pyfakefs==5.6.0 +pyfakefs==5.7.3 pytest==7.4.4 pytest-asyncio==0.21.2 pytest-cov==4.1.0 diff --git a/.riot/requirements/1b7df87.txt b/.riot/requirements/137d3ed.txt similarity index 88% rename from .riot/requirements/1b7df87.txt rename to .riot/requirements/137d3ed.txt index b23492441b9..72b5cba9c65 100644 --- a/.riot/requirements/1b7df87.txt +++ b/.riot/requirements/137d3ed.txt @@ -2,12 +2,12 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1b7df87.in +# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/137d3ed.in # aiofiles==23.2.1 anyio==3.7.1 attrs==24.2.0 -certifi==2024.8.30 +certifi==2024.12.14 charset-normalizer==3.4.0 coverage[toml]==7.2.7 exceptiongroup==1.2.2 @@ -23,7 +23,7 @@ mock==5.1.0 opentracing==2.4.0 packaging==24.0 pluggy==1.2.0 -pydantic==1.10.18 +pydantic==1.10.19 pytest==7.4.4 pytest-asyncio==0.21.1 pytest-cov==4.1.0 diff --git a/.riot/requirements/1384411.txt b/.riot/requirements/1384411.txt new file mode 100644 index 00000000000..6cf47ca63ad --- /dev/null +++ b/.riot/requirements/1384411.txt @@ -0,0 +1,26 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1384411.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +exceptiongroup==1.2.2 +greenlet==3.0.3 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +mysql-connector-python==9.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +psycopg2-binary==2.9.10 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +sqlalchemy==2.0.36 +tomli==2.2.1 +typing-extensions==4.12.2 diff --git a/.riot/requirements/13bb925.txt b/.riot/requirements/13bb925.txt new file mode 100644 index 00000000000..f87641d20cc --- /dev/null +++ b/.riot/requirements/13bb925.txt @@ -0,0 +1,24 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/13bb925.in +# +attrs==24.3.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 +falcon==3.0.1 +hypothesis==6.45.0 +importlib-metadata==8.5.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.2.1 +zipp==3.20.2 diff --git a/.riot/requirements/1413039.txt b/.riot/requirements/1413039.txt index e05e2893ae6..82340d380e3 100644 --- a/.riot/requirements/1413039.txt +++ b/.riot/requirements/1413039.txt @@ -4,7 +4,7 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1413039.in # -attrs==24.2.0 +attrs==24.3.0 coverage[toml]==7.6.1 exceptiongroup==1.2.2 gevent==24.2.1 @@ -16,15 +16,15 @@ mock==5.1.0 opentracing==2.4.0 packaging==24.2 pluggy==1.5.0 -pytest==8.3.3 +pytest==8.3.4 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 -tomli==2.0.2 +tomli==2.2.1 zipp==3.20.2 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: setuptools==75.3.0 diff --git a/.riot/requirements/1438a95.txt b/.riot/requirements/1438a95.txt index 4b43f393d29..7ccc7f8efac 100644 --- a/.riot/requirements/1438a95.txt +++ b/.riot/requirements/1438a95.txt @@ -4,47 +4,47 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1438a95.in # -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.0 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.10 +deprecated==1.2.15 exceptiongroup==1.2.2 flask==2.1.3 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 -opentelemetry-api==1.26.0 -opentelemetry-instrumentation==0.47b0 -opentelemetry-instrumentation-flask==0.47b0 -opentelemetry-instrumentation-wsgi==0.47b0 -opentelemetry-semantic-conventions==0.47b0 -opentelemetry-util-http==0.47b0 +opentelemetry-api==1.29.0 +opentelemetry-instrumentation==0.50b0 +opentelemetry-instrumentation-flask==0.50b0 +opentelemetry-instrumentation-wsgi==0.50b0 +opentelemetry-semantic-conventions==0.50b0 +opentelemetry-util-http==0.50b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==1.26.19 +tomli==2.2.1 +urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/22fdd8b.txt b/.riot/requirements/1486c11.txt similarity index 71% rename from .riot/requirements/22fdd8b.txt rename to .riot/requirements/1486c11.txt index c2ab379f101..a3cd0d8268d 100644 --- a/.riot/requirements/22fdd8b.txt +++ b/.riot/requirements/1486c11.txt @@ -2,32 +2,32 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/22fdd8b.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1486c11.in # aiofiles==24.1.0 anyio==3.7.1 -attrs==24.2.0 -certifi==2024.8.30 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==3.4.0 -coverage[toml]==7.6.3 +coverage[toml]==7.6.9 fastapi==0.86.0 h11==0.14.0 -httpcore==1.0.6 +httpcore==1.0.7 httpx==0.27.2 hypothesis==6.45.0 idna==3.10 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pydantic==1.10.18 -pytest==8.3.3 +pydantic==1.10.19 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-multipart==0.0.12 +pytest-randomly==3.16.0 +python-multipart==0.0.20 requests==2.32.3 sniffio==1.3.1 sortedcontainers==2.4.0 diff --git a/.riot/requirements/148bd89.txt b/.riot/requirements/148bd89.txt index 6857a6638b8..8e4eb9be55e 100644 --- a/.riot/requirements/148bd89.txt +++ b/.riot/requirements/148bd89.txt @@ -4,27 +4,27 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/148bd89.in # -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -importlib-metadata==8.2.0 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.19.2 +tomli==2.2.1 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/9571147.txt b/.riot/requirements/14b883c.txt similarity index 66% rename from .riot/requirements/9571147.txt rename to .riot/requirements/14b883c.txt index 37c6cbc9ad9..fc5fce6885f 100644 --- a/.riot/requirements/9571147.txt +++ b/.riot/requirements/14b883c.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/9571147.in +# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/14b883c.in # -attrs==23.1.0 +attrs==24.2.0 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.2 falcon==3.1.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 -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/14bdc60.txt b/.riot/requirements/14bdc60.txt deleted file mode 100644 index b911301abde..00000000000 --- a/.riot/requirements/14bdc60.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/14bdc60.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -falcon==3.1.3 -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-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/14f0b34.txt b/.riot/requirements/14f0b34.txt index 21c21483d41..88bc844d6d3 100644 --- a/.riot/requirements/14f0b34.txt +++ b/.riot/requirements/14f0b34.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/14f0b34.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/14f0b34.in # -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.0 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.10 +deprecated==1.2.15 flask==2.1.3 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.2.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 opentelemetry-api==1.15.0 @@ -28,21 +28,21 @@ opentelemetry-instrumentation-wsgi==0.45b0 opentelemetry-semantic-conventions==0.45b0 opentelemetry-util-http==0.45b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -urllib3==1.26.19 +urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1560353.txt b/.riot/requirements/1560353.txt index 4b50732d926..78615534ee1 100644 --- a/.riot/requirements/1560353.txt +++ b/.riot/requirements/1560353.txt @@ -4,8 +4,8 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1560353.in # -attrs==24.2.0 -coverage[toml]==7.6.4 +attrs==24.3.0 +coverage[toml]==7.6.10 gevent==24.11.1 greenlet==3.1.1 gunicorn[gevent]==23.0.0 @@ -16,7 +16,7 @@ opentracing==2.4.0 packaging==24.2 pluggy==1.5.0 py-cpuinfo==8.0.0 -pytest==8.3.3 +pytest==8.3.4 pytest-asyncio==0.21.1 pytest-benchmark==5.1.0 pytest-cov==6.0.0 @@ -25,7 +25,7 @@ pytest-randomly==3.16.0 sortedcontainers==2.4.0 uwsgi==2.0.28 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.0 +setuptools==75.7.0 diff --git a/.riot/requirements/15e90ee.txt b/.riot/requirements/15e90ee.txt index 1855f4db88a..aec80194652 100644 --- a/.riot/requirements/15e90ee.txt +++ b/.riot/requirements/15e90ee.txt @@ -4,10 +4,10 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/15e90ee.in # -attrs==24.2.0 -coverage[toml]==7.6.3 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.10.2 +gevent==24.11.1 greenlet==3.1.1 gunicorn[gevent]==23.0.0 hypothesis==6.45.0 @@ -15,21 +15,21 @@ iniconfig==2.0.0 lz4==4.3.3 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 py-cpuinfo==8.0.0 -pytest==8.3.3 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 +pytest-benchmark==5.1.0 +pytest-cov==6.0.0 pytest-cpp==2.6.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 -tomli==2.0.2 -uwsgi==2.0.27 +tomli==2.2.1 +uwsgi==2.0.28 zope-event==5.0 -zope-interface==7.1.0 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.2.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1600ae2.txt b/.riot/requirements/1600ae2.txt index d330d767bc1..8510d225c91 100644 --- a/.riot/requirements/1600ae2.txt +++ b/.riot/requirements/1600ae2.txt @@ -30,7 +30,7 @@ pytest-randomly==3.12.0 sortedcontainers==2.4.0 tomli==2.0.1 typing-extensions==4.7.1 -uwsgi==2.0.27 +uwsgi==2.0.28 zipp==3.15.0 zope-event==5.0 zope-interface==6.4.post2 diff --git a/.riot/requirements/16054bb.txt b/.riot/requirements/16054bb.txt new file mode 100644 index 00000000000..df2a3b259cd --- /dev/null +++ b/.riot/requirements/16054bb.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/16054bb.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +falcon==3.0.1 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/161aef0.txt b/.riot/requirements/161aef0.txt new file mode 100644 index 00000000000..dad819d4d9c --- /dev/null +++ b/.riot/requirements/161aef0.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/161aef0.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +falcon==4.0.2 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/162f3c3.txt b/.riot/requirements/162f3c3.txt deleted file mode 100644 index 05535f25438..00000000000 --- a/.riot/requirements/162f3c3.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/162f3c3.in -# -attrs==23.2.0 -coverage[toml]==7.4.4 -exceptiongroup==1.2.0 -greenlet==3.0.3 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.3.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.4.0 -psycopg2-binary==2.9.9 -pytest==8.1.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -sqlalchemy==1.3.24 -tomli==2.0.1 diff --git a/.riot/requirements/163a963.txt b/.riot/requirements/163a963.txt index edcbb10715b..68e73bd43c0 100644 --- a/.riot/requirements/163a963.txt +++ b/.riot/requirements/163a963.txt @@ -4,27 +4,27 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/163a963.in # -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==24.3.0 +coverage[toml]==7.6.1 exceptiongroup==1.2.2 gevent==24.2.1 -greenlet==3.0.3 +greenlet==3.1.1 hypothesis==6.45.0 -importlib-metadata==8.2.0 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 +pytest==8.3.4 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 +tomli==2.2.1 +zipp==3.20.2 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.3.0 diff --git a/.riot/requirements/f823b38.txt b/.riot/requirements/164cf92.txt similarity index 81% rename from .riot/requirements/f823b38.txt rename to .riot/requirements/164cf92.txt index 99549b8b77f..3fd752de5e8 100644 --- a/.riot/requirements/f823b38.txt +++ b/.riot/requirements/164cf92.txt @@ -2,18 +2,18 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/f823b38.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/164cf92.in # aiofiles==24.1.0 anyio==4.5.2 -attrs==24.2.0 -certifi==2024.8.30 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==3.4.0 coverage[toml]==7.6.1 exceptiongroup==1.2.2 fastapi==0.64.0 h11==0.14.0 -httpcore==1.0.6 +httpcore==1.0.7 httpx==0.27.2 hypothesis==6.45.0 idna==3.10 @@ -21,20 +21,20 @@ importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pydantic==1.10.18 -pytest==8.3.3 +pydantic==1.10.19 +pytest==8.3.4 pytest-asyncio==0.21.1 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-multipart==0.0.12 +python-multipart==0.0.20 requests==2.32.3 sniffio==1.3.1 sortedcontainers==2.4.0 starlette==0.13.6 -tomli==2.0.2 +tomli==2.2.1 typing-extensions==4.12.2 urllib3==2.2.3 zipp==3.20.2 diff --git a/.riot/requirements/167bd61.txt b/.riot/requirements/167bd61.txt new file mode 100644 index 00000000000..da0880effad --- /dev/null +++ b/.riot/requirements/167bd61.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/167bd61.in +# +attrs==24.3.0 +confluent-kafka==2.6.2 +coverage[toml]==7.6.9 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/16c1c69.txt b/.riot/requirements/16c1c69.txt index 42db11315dd..1ead3b9ead1 100644 --- a/.riot/requirements/16c1c69.txt +++ b/.riot/requirements/16c1c69.txt @@ -4,27 +4,27 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/16c1c69.in # -async-timeout==4.0.3 -attrs==23.2.0 -coverage[toml]==7.6.0 +async-timeout==5.0.1 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -redis==5.0.7 +pytest-randomly==3.16.0 +redis==5.2.1 sortedcontainers==2.4.0 -tomli==2.0.1 +tomli==2.2.1 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/16d2d1f.txt b/.riot/requirements/16d2d1f.txt index 7092a5762ac..ef73ff927ab 100644 --- a/.riot/requirements/16d2d1f.txt +++ b/.riot/requirements/16d2d1f.txt @@ -4,21 +4,21 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/16d2d1f.in # -attrs==24.2.0 -certifi==2024.8.30 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.1 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.10 +deprecated==1.2.15 flask==2.1.3 -gevent==24.2.1 +gevent==24.11.1 greenlet==3.1.1 hypothesis==6.45.0 idna==3.10 importlib-metadata==8.5.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 opentelemetry-api==1.15.0 @@ -28,21 +28,21 @@ opentelemetry-instrumentation-wsgi==0.45b0 opentelemetry-semantic-conventions==0.45b0 opentelemetry-util-http==0.45b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.3 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.20.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==7.0.3 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/17148ee.txt b/.riot/requirements/17148ee.txt index 55038acdf9f..2078ecac7e3 100644 --- a/.riot/requirements/17148ee.txt +++ b/.riot/requirements/17148ee.txt @@ -4,24 +4,24 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/17148ee.in # -attrs==23.2.0 -coverage[toml]==7.6.0 -gevent==24.2.1 -greenlet==3.0.3 +attrs==24.3.0 +coverage[toml]==7.6.10 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -redis==5.0.7 +pytest-randomly==3.16.0 +redis==5.2.1 sortedcontainers==2.4.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/173a4e7.txt b/.riot/requirements/173a4e7.txt new file mode 100644 index 00000000000..8402a7e1aad --- /dev/null +++ b/.riot/requirements/173a4e7.txt @@ -0,0 +1,38 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/173a4e7.in +# +aiofiles==24.1.0 +annotated-types==0.7.0 +anyio==3.7.1 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.0 +coverage[toml]==7.6.9 +fastapi==0.115.6 +h11==0.14.0 +httpcore==1.0.7 +httpx==0.27.2 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pydantic==2.10.4 +pydantic-core==2.27.2 +pytest==8.3.4 +pytest-asyncio==0.21.1 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +python-multipart==0.0.20 +requests==2.32.3 +sniffio==1.3.1 +sortedcontainers==2.4.0 +starlette==0.41.3 +typing-extensions==4.12.2 +urllib3==2.2.3 diff --git a/.riot/requirements/173c90a.txt b/.riot/requirements/173c90a.txt deleted file mode 100644 index 4e9e47e9130..00000000000 --- a/.riot/requirements/173c90a.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/173c90a.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -falcon==3.0.1 -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-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/176cb93.txt b/.riot/requirements/176cb93.txt deleted file mode 100644 index 6259626b1f4..00000000000 --- a/.riot/requirements/176cb93.txt +++ /dev/null @@ -1,20 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/176cb93.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -falcon==3.0.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 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/1782179.txt b/.riot/requirements/1782179.txt new file mode 100644 index 00000000000..b6e578ca240 --- /dev/null +++ b/.riot/requirements/1782179.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1782179.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +falcon==3.0.1 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/1785987.txt b/.riot/requirements/1785987.txt new file mode 100644 index 00000000000..eee10d642e6 --- /dev/null +++ b/.riot/requirements/1785987.txt @@ -0,0 +1,22 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1785987.in +# +attrs==24.2.0 +coverage[toml]==7.6.9 +googleapis-common-protos==1.66.0 +grpcio==1.66.2 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +protobuf==5.29.1 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/178dbc8.txt b/.riot/requirements/178dbc8.txt new file mode 100644 index 00000000000..ef5d1cf72c2 --- /dev/null +++ b/.riot/requirements/178dbc8.txt @@ -0,0 +1,23 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/178dbc8.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +greenlet==3.0.3 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +mysql-connector-python==9.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +psycopg2-binary==2.9.10 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +sqlalchemy==1.3.24 diff --git a/.riot/requirements/1f22277.txt b/.riot/requirements/17a7ba8.txt similarity index 66% rename from .riot/requirements/1f22277.txt rename to .riot/requirements/17a7ba8.txt index f8018be64b4..7984fff1ed6 100644 --- a/.riot/requirements/1f22277.txt +++ b/.riot/requirements/17a7ba8.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/1f22277.in +# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/17a7ba8.in # -attrs==23.1.0 +attrs==24.2.0 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.2 falcon==3.1.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 -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/1800771.txt b/.riot/requirements/1800771.txt index 9b2a1d04756..862fe93b3b3 100644 --- a/.riot/requirements/1800771.txt +++ b/.riot/requirements/1800771.txt @@ -4,32 +4,32 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1800771.in # -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 -gunicorn[gevent]==22.0.0 +gevent==24.11.1 +greenlet==3.1.1 +gunicorn[gevent]==23.0.0 hypothesis==6.45.0 -importlib-metadata==8.2.0 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 py-cpuinfo==8.0.0 -pytest==8.3.1 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 +pytest-benchmark==5.1.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 -tomli==2.0.1 -uwsgi==2.0.26 -zipp==3.19.2 +tomli==2.2.1 +uwsgi==2.0.28 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1809449.txt b/.riot/requirements/1809449.txt deleted file mode 100644 index a874c5c1994..00000000000 --- a/.riot/requirements/1809449.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/1809449.in -# -attrs==23.2.0 -coverage[toml]==7.4.4 -exceptiongroup==1.2.0 -greenlet==3.0.3 -hypothesis==6.45.0 -importlib-metadata==7.1.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.3.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.4.0 -psycopg2-binary==2.9.9 -pytest==8.1.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -sqlalchemy==1.3.24 -tomli==2.0.1 -zipp==3.18.1 diff --git a/.riot/requirements/1842452.txt b/.riot/requirements/1842452.txt new file mode 100644 index 00000000000..2c13c9135fd --- /dev/null +++ b/.riot/requirements/1842452.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1842452.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +falcon==4.0.2 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/18730a4.txt b/.riot/requirements/18730a4.txt new file mode 100644 index 00000000000..20d9f1d8a90 --- /dev/null +++ b/.riot/requirements/18730a4.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/18730a4.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +mysqlclient==2.2.6 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/189a9da.txt b/.riot/requirements/189a9da.txt index 327d29ca153..2d4ab01b347 100644 --- a/.riot/requirements/189a9da.txt +++ b/.riot/requirements/189a9da.txt @@ -12,8 +12,8 @@ async-timeout==4.0.3 asynctest==0.13.0 attrs==24.2.0 botocore==1.24.21 -certifi==2024.8.30 -charset-normalizer==3.4.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 coverage[toml]==7.2.7 elastic-transport==8.13.1 elasticsearch==8.14.0 @@ -39,7 +39,7 @@ pytest-mock==3.11.1 pytest-randomly==3.12.0 python-dateutil==2.9.0.post0 requests==2.31.0 -six==1.16.0 +six==1.17.0 sortedcontainers==2.4.0 tomli==2.0.1 typing-extensions==4.7.1 diff --git a/.riot/requirements/18a1686.txt b/.riot/requirements/18a1686.txt deleted file mode 100644 index 9ba614bfc37..00000000000 --- a/.riot/requirements/18a1686.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/18a1686.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -falcon==3.1.3 -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-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/196d465.txt b/.riot/requirements/196d465.txt index f54a0ce3377..16882c4c72e 100644 --- a/.riot/requirements/196d465.txt +++ b/.riot/requirements/196d465.txt @@ -2,23 +2,23 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --no-annotate .riot/requirements/196d465.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/196d465.in # -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.0 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.10 +deprecated==1.2.15 flask==2.1.3 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 +idna==3.10 importlib-metadata==8.0.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 opentelemetry-api==1.26.0 @@ -28,21 +28,21 @@ opentelemetry-instrumentation-wsgi==0.47b0 opentelemetry-semantic-conventions==0.47b0 opentelemetry-util-http==0.47b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -urllib3==1.26.19 +urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/197c6fd.txt b/.riot/requirements/197c6fd.txt new file mode 100644 index 00000000000..745e2a9df4d --- /dev/null +++ b/.riot/requirements/197c6fd.txt @@ -0,0 +1,22 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/197c6fd.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +exceptiongroup==1.2.2 +falcon==3.1.3 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +tomli==2.2.1 diff --git a/.riot/requirements/19a43a5.txt b/.riot/requirements/19a43a5.txt index 25a918eb7ad..9847c944110 100644 --- a/.riot/requirements/19a43a5.txt +++ b/.riot/requirements/19a43a5.txt @@ -4,8 +4,8 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/19a43a5.in # -attrs==24.2.0 -coverage[toml]==7.6.4 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 gevent==24.11.1 greenlet==3.1.1 @@ -16,15 +16,15 @@ mock==5.1.0 opentracing==2.4.0 packaging==24.2 pluggy==1.5.0 -pytest==8.3.3 +pytest==8.3.4 pytest-cov==6.0.0 pytest-mock==3.14.0 pytest-randomly==3.16.0 sortedcontainers==2.4.0 -tomli==2.0.2 +tomli==2.2.1 zipp==3.21.0 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.0 +setuptools==75.7.0 diff --git a/.riot/requirements/19aab60.txt b/.riot/requirements/19aab60.txt new file mode 100644 index 00000000000..0bf2d25d3a2 --- /dev/null +++ b/.riot/requirements/19aab60.txt @@ -0,0 +1,24 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/19aab60.in +# +attrs==24.3.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 +falcon==4.0.2 +hypothesis==6.45.0 +importlib-metadata==8.5.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.2.1 +zipp==3.20.2 diff --git a/.riot/requirements/19db357.txt b/.riot/requirements/19db357.txt new file mode 100644 index 00000000000..1e3ddd64be4 --- /dev/null +++ b/.riot/requirements/19db357.txt @@ -0,0 +1,24 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/19db357.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +greenlet==3.0.3 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +mysql-connector-python==9.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +psycopg2-binary==2.9.10 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +sqlalchemy==2.0.36 +typing-extensions==4.12.2 diff --git a/.riot/requirements/1353f0b.txt b/.riot/requirements/19e4a89.txt similarity index 75% rename from .riot/requirements/1353f0b.txt rename to .riot/requirements/19e4a89.txt index c26716cca4b..a43fb84b853 100644 --- a/.riot/requirements/1353f0b.txt +++ b/.riot/requirements/19e4a89.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/1353f0b.in +# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/19e4a89.in # -attrs==23.2.0 +attrs==24.2.0 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.2 greenlet==3.0.3 hypothesis==6.45.0 importlib-metadata==6.7.0 diff --git a/.riot/requirements/1a1dfc3.txt b/.riot/requirements/1a1dfc3.txt index 314db7a3a01..3b472dee665 100644 --- a/.riot/requirements/1a1dfc3.txt +++ b/.riot/requirements/1a1dfc3.txt @@ -4,32 +4,32 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1a1dfc3.in # -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==24.3.0 +coverage[toml]==7.6.1 exceptiongroup==1.2.2 gevent==24.2.1 -greenlet==3.0.3 -gunicorn[gevent]==22.0.0 +greenlet==3.1.1 +gunicorn[gevent]==23.0.0 hypothesis==6.45.0 -importlib-metadata==8.2.0 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 py-cpuinfo==8.0.0 -pytest==8.3.1 +pytest==8.3.4 pytest-asyncio==0.21.1 pytest-benchmark==4.0.0 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 -tomli==2.0.1 -uwsgi==2.0.26 -zipp==3.19.2 +tomli==2.2.1 +uwsgi==2.0.28 +zipp==3.20.2 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.3.0 diff --git a/.riot/requirements/1d3d3db.txt b/.riot/requirements/1a26314.txt similarity index 69% rename from .riot/requirements/1d3d3db.txt rename to .riot/requirements/1a26314.txt index 8e4d720320e..7c381d39d24 100644 --- a/.riot/requirements/1d3d3db.txt +++ b/.riot/requirements/1a26314.txt @@ -2,18 +2,18 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1d3d3db.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1a26314.in # aiofiles==24.1.0 -anyio==4.6.2.post1 -attrs==24.2.0 -certifi==2024.8.30 +anyio==4.7.0 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==3.4.0 -coverage[toml]==7.6.3 +coverage[toml]==7.6.9 exceptiongroup==1.2.2 fastapi==0.90.1 h11==0.14.0 -httpcore==1.0.6 +httpcore==1.0.7 httpx==0.27.2 hypothesis==6.45.0 idna==3.10 @@ -21,20 +21,20 @@ importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pydantic==1.10.18 -pytest==8.3.3 +pydantic==1.10.19 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-multipart==0.0.12 +pytest-randomly==3.16.0 +python-multipart==0.0.20 requests==2.32.3 sniffio==1.3.1 sortedcontainers==2.4.0 starlette==0.23.1 -tomli==2.0.2 +tomli==2.2.1 typing-extensions==4.12.2 urllib3==2.2.3 -zipp==3.20.2 +zipp==3.21.0 diff --git a/.riot/requirements/1a67f8a.txt b/.riot/requirements/1a67f8a.txt new file mode 100644 index 00000000000..19b9a07ff78 --- /dev/null +++ b/.riot/requirements/1a67f8a.txt @@ -0,0 +1,22 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1a67f8a.in +# +aiomysql==0.1.1 +attrs==24.3.0 +coverage[toml]==7.6.9 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pymysql==1.1.1 +pytest==8.3.4 +pytest-asyncio==0.25.0 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/1a736ea.txt b/.riot/requirements/1a736ea.txt index c6bda03b45b..12c7df3ce6c 100644 --- a/.riot/requirements/1a736ea.txt +++ b/.riot/requirements/1a736ea.txt @@ -4,33 +4,33 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1a736ea.in # -attrs==23.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.0 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 -gunicorn==22.0.0 +gevent==24.11.1 +greenlet==3.1.1 +gunicorn==23.0.0 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.2.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.32.3 sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.2.2 -zipp==3.19.2 +tomli==2.2.1 +urllib3==2.3.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1aa3044.txt b/.riot/requirements/1aa3044.txt index 7bf52690f10..ea24d5777cb 100644 --- a/.riot/requirements/1aa3044.txt +++ b/.riot/requirements/1aa3044.txt @@ -2,19 +2,19 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1aa3044.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1aa3044.in # asgiref==3.8.1 -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 click==7.1.2 -coverage[toml]==7.6.0 +coverage[toml]==7.6.10 flask==1.1.4 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 +idna==3.10 iniconfig==2.0.0 itsdangerous==1.1.0 jinja2==2.11.3 @@ -26,20 +26,20 @@ opentelemetry-instrumentation-flask==0.19b0 opentelemetry-instrumentation-wsgi==0.19b0 opentelemetry-util-http==0.19b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -urllib3==1.26.19 +urllib3==1.26.20 werkzeug==1.0.1 -wrapt==1.16.0 +wrapt==1.17.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -# setuptools +setuptools==75.7.0 diff --git a/.riot/requirements/1aa652f.txt b/.riot/requirements/1aa652f.txt index c93d6b8a86f..1acfd0b6d9f 100644 --- a/.riot/requirements/1aa652f.txt +++ b/.riot/requirements/1aa652f.txt @@ -5,17 +5,17 @@ # pip-compile --allow-unsafe --no-annotate .riot/requirements/1aa652f.in # aiobotocore==2.3.1 -aiohappyeyeballs==2.4.3 -aiohttp==3.10.10 +aiohappyeyeballs==2.4.4 +aiohttp==3.11.11 aioitertools==0.12.0 -aiosignal==1.3.1 -attrs==24.2.0 +aiosignal==1.3.2 +attrs==24.3.0 botocore==1.24.21 -certifi==2024.8.30 -charset-normalizer==3.4.0 -coverage[toml]==7.6.4 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 elastic-transport==8.15.1 -elasticsearch==8.15.1 +elasticsearch==8.17.0 events==0.5 frozenlist==1.5.0 gevent==22.10.2 @@ -26,25 +26,25 @@ iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 multidict==6.1.0 -opensearch-py==2.7.1 +opensearch-py==2.8.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -propcache==0.2.0 +propcache==0.2.1 pynamodb==5.5.1 -pytest==8.3.3 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 pytest-randomly==3.16.0 python-dateutil==2.9.0.post0 requests==2.32.3 -six==1.16.0 +six==1.17.0 sortedcontainers==2.4.0 urllib3==1.26.20 -wrapt==1.16.0 -yarl==1.16.0 +wrapt==1.17.0 +yarl==1.18.3 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.2.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1ace55b.txt b/.riot/requirements/1ace55b.txt index 60ffb476378..ce911d8a998 100644 --- a/.riot/requirements/1ace55b.txt +++ b/.riot/requirements/1ace55b.txt @@ -5,18 +5,18 @@ # pip-compile --allow-unsafe --no-annotate .riot/requirements/1ace55b.in # aiobotocore==2.3.1 -aiohappyeyeballs==2.4.3 -aiohttp==3.10.10 +aiohappyeyeballs==2.4.4 +aiohttp==3.11.11 aioitertools==0.12.0 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==24.2.0 +aiosignal==1.3.2 +async-timeout==5.0.1 +attrs==24.3.0 botocore==1.24.21 -certifi==2024.8.30 -charset-normalizer==3.4.0 -coverage[toml]==7.6.4 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 elastic-transport==8.15.1 -elasticsearch==8.15.1 +elasticsearch==8.17.0 events==0.5 exceptiongroup==1.2.2 frozenlist==1.5.0 @@ -28,27 +28,27 @@ iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 multidict==6.1.0 -opensearch-py==2.7.1 +opensearch-py==2.8.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -propcache==0.2.0 +propcache==0.2.1 pynamodb==5.5.1 -pytest==8.3.3 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 pytest-randomly==3.16.0 python-dateutil==2.9.0.post0 requests==2.32.3 -six==1.16.0 +six==1.17.0 sortedcontainers==2.4.0 -tomli==2.0.2 +tomli==2.2.1 typing-extensions==4.12.2 urllib3==1.26.20 -wrapt==1.16.0 -yarl==1.16.0 +wrapt==1.17.0 +yarl==1.18.3 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.2.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1b284db.txt b/.riot/requirements/1b284db.txt index 890031e7402..d5fd2c4603b 100644 --- a/.riot/requirements/1b284db.txt +++ b/.riot/requirements/1b284db.txt @@ -4,7 +4,7 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1b284db.in # -attrs==24.2.0 +attrs==24.3.0 coverage[toml]==7.6.1 exceptiongroup==1.2.2 gevent==24.2.1 @@ -16,10 +16,10 @@ iniconfig==2.0.0 lz4==4.3.3 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 py-cpuinfo==8.0.0 -pytest==8.3.3 +pytest==8.3.4 pytest-asyncio==0.21.1 pytest-benchmark==4.0.0 pytest-cov==5.0.0 @@ -27,11 +27,11 @@ pytest-cpp==2.6.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 -tomli==2.0.2 -uwsgi==2.0.27 +tomli==2.2.1 +uwsgi==2.0.28 zipp==3.20.2 zope-event==5.0 -zope-interface==7.1.0 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.2.0 +setuptools==75.3.0 diff --git a/.riot/requirements/134c543.txt b/.riot/requirements/1b39725.txt similarity index 66% rename from .riot/requirements/134c543.txt rename to .riot/requirements/1b39725.txt index 9b47784aff9..ac78a5259be 100644 --- a/.riot/requirements/134c543.txt +++ b/.riot/requirements/1b39725.txt @@ -2,37 +2,37 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/134c543.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1b39725.in # aiofiles==24.1.0 annotated-types==0.7.0 anyio==3.7.1 -attrs==24.2.0 -certifi==2024.8.30 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==3.4.0 -coverage[toml]==7.6.3 -fastapi==0.115.2 +coverage[toml]==7.6.9 +fastapi==0.115.6 h11==0.14.0 -httpcore==1.0.6 +httpcore==1.0.7 httpx==0.27.2 hypothesis==6.45.0 idna==3.10 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pydantic==2.9.2 -pydantic-core==2.23.4 -pytest==8.3.3 +pydantic==2.10.3 +pydantic-core==2.27.1 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-multipart==0.0.12 +pytest-randomly==3.16.0 +python-multipart==0.0.20 requests==2.32.3 sniffio==1.3.1 sortedcontainers==2.4.0 -starlette==0.40.0 +starlette==0.41.3 typing-extensions==4.12.2 urllib3==2.2.3 diff --git a/.riot/requirements/1b67e71.txt b/.riot/requirements/1b67e71.txt deleted file mode 100644 index 25a2a3e0ad0..00000000000 --- a/.riot/requirements/1b67e71.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/1b67e71.in -# -attrs==23.2.0 -coverage[toml]==7.4.4 -exceptiongroup==1.2.0 -greenlet==3.0.3 -hypothesis==6.45.0 -importlib-metadata==7.1.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.3.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.4.0 -psycopg2-binary==2.9.9 -pytest==8.1.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -sqlalchemy==1.3.24 -tomli==2.0.1 -zipp==3.18.1 diff --git a/.riot/requirements/1b73c58.txt b/.riot/requirements/1b73c58.txt index dd75b04079c..19a201fee30 100644 --- a/.riot/requirements/1b73c58.txt +++ b/.riot/requirements/1b73c58.txt @@ -4,16 +4,16 @@ # # pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1b73c58.in # -attrs==23.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 +attrs==24.2.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 coverage[toml]==7.2.7 exceptiongroup==1.2.2 gevent==22.10.2 -greenlet==3.0.3 +greenlet==3.1.1 gunicorn==20.0.4 hypothesis==6.45.0 -idna==3.7 +idna==3.10 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 diff --git a/.riot/requirements/1b90fc9.txt b/.riot/requirements/1b90fc9.txt index 1cbc40de4bb..dcfcaa69631 100644 --- a/.riot/requirements/1b90fc9.txt +++ b/.riot/requirements/1b90fc9.txt @@ -4,26 +4,26 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1b90fc9.in # -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 -msgpack==1.0.8 +msgpack==1.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 -tomli==2.0.1 +tomli==2.2.1 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1bb940b.txt b/.riot/requirements/1bb940b.txt deleted file mode 100644 index b4d6c0de42e..00000000000 --- a/.riot/requirements/1bb940b.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1bb940b.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -falcon==3.0.1 -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-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/1bc2c36.txt b/.riot/requirements/1bc2c36.txt deleted file mode 100644 index c2c1d4bb8ab..00000000000 --- a/.riot/requirements/1bc2c36.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1bc2c36.in -# -attrs==23.2.0 -coverage[toml]==7.4.4 -greenlet==3.0.3 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.3.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.4.0 -psycopg2-binary==2.9.9 -pytest==8.1.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -sqlalchemy==1.3.24 diff --git a/.riot/requirements/1bceb88.txt b/.riot/requirements/1bceb88.txt index 444e5a3b49c..2c50572f098 100644 --- a/.riot/requirements/1bceb88.txt +++ b/.riot/requirements/1bceb88.txt @@ -5,18 +5,18 @@ # pip-compile --allow-unsafe --no-annotate .riot/requirements/1bceb88.in # aiobotocore==2.3.1 -aiohappyeyeballs==2.4.3 -aiohttp==3.10.10 +aiohappyeyeballs==2.4.4 +aiohttp==3.10.11 aioitertools==0.12.0 aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==24.2.0 +async-timeout==5.0.1 +attrs==24.3.0 botocore==1.24.21 -certifi==2024.8.30 -charset-normalizer==3.4.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 coverage[toml]==7.6.1 elastic-transport==8.15.1 -elasticsearch==8.15.1 +elasticsearch==8.17.0 events==0.5 exceptiongroup==1.2.2 frozenlist==1.5.0 @@ -29,28 +29,28 @@ iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 multidict==6.1.0 -opensearch-py==2.7.1 +opensearch-py==2.8.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 propcache==0.2.0 pynamodb==5.5.1 -pytest==8.3.3 +pytest==8.3.4 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 +six==1.17.0 sortedcontainers==2.4.0 -tomli==2.0.2 +tomli==2.2.1 typing-extensions==4.12.2 urllib3==1.26.20 -wrapt==1.16.0 +wrapt==1.17.0 yarl==1.15.2 zipp==3.20.2 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.2.0 +setuptools==75.3.0 diff --git a/.riot/requirements/1c21210.txt b/.riot/requirements/1c21210.txt new file mode 100644 index 00000000000..e8b03b2b581 --- /dev/null +++ b/.riot/requirements/1c21210.txt @@ -0,0 +1,24 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1c21210.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +exceptiongroup==1.2.2 +falcon==3.1.3 +hypothesis==6.45.0 +importlib-metadata==8.5.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +tomli==2.2.1 +zipp==3.21.0 diff --git a/.riot/requirements/1c47005.txt b/.riot/requirements/1c47005.txt index 7be57bbcc0d..721efbb4269 100644 --- a/.riot/requirements/1c47005.txt +++ b/.riot/requirements/1c47005.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/1c47005.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1c47005.in # asgiref==3.8.1 -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 click==7.1.2 -coverage[toml]==7.6.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 flask==1.1.4 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 +idna==3.10 iniconfig==2.0.0 itsdangerous==1.1.0 jinja2==2.11.3 @@ -27,22 +27,22 @@ opentelemetry-instrumentation-flask==0.19b0 opentelemetry-instrumentation-wsgi==0.19b0 opentelemetry-util-http==0.19b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -tomli==2.0.1 +tomli==2.2.1 typing-extensions==4.12.2 -urllib3==1.26.19 +urllib3==1.26.20 werkzeug==1.0.1 -wrapt==1.16.0 +wrapt==1.17.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -# setuptools +setuptools==75.7.0 diff --git a/.riot/requirements/1c5581b.txt b/.riot/requirements/1c5581b.txt index 4886bf012bf..6b1f227cb15 100644 --- a/.riot/requirements/1c5581b.txt +++ b/.riot/requirements/1c5581b.txt @@ -17,7 +17,7 @@ channels==4.2.0 charset-normalizer==3.4.0 constantly==23.10.4 coverage[toml]==7.6.9 -cryptography==43.0.3 +cryptography==44.0.0 daphne==4.1.2 django==4.2.17 django-configurations==2.5.1 @@ -39,6 +39,7 @@ opentracing==2.4.0 packaging==24.2 platformdirs==4.3.6 pluggy==1.5.0 +psycopg==3.2.3 psycopg2-binary==2.9.10 pyasn1==0.6.1 pyasn1-modules==0.4.1 diff --git a/.riot/requirements/1c756dc.txt b/.riot/requirements/1c756dc.txt deleted file mode 100644 index 06878afcd04..00000000000 --- a/.riot/requirements/1c756dc.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1c756dc.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -falcon==3.1.3 -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 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 diff --git a/.riot/requirements/1cc7f49.txt b/.riot/requirements/1cc7f49.txt index 4c33ca5b861..644fd59d910 100644 --- a/.riot/requirements/1cc7f49.txt +++ b/.riot/requirements/1cc7f49.txt @@ -4,26 +4,26 @@ # # pip-compile --no-annotate .riot/requirements/1cc7f49.in # -attrs==23.2.0 -coverage[toml]==7.4.1 +attrs==24.3.0 +coverage[toml]==7.6.9 glob2==0.7 hypothesis==6.45.0 iniconfig==2.0.0 -mako==1.3.2 -markupsafe==2.1.5 +mako==1.3.8 +markupsafe==3.0.2 mock==5.1.0 more-itertools==8.10.0 -msgpack==1.0.7 +msgpack==1.1.0 opentracing==2.4.0 -packaging==23.2 -parse==1.20.1 -parse-type==0.6.2 -pluggy==1.4.0 +packaging==24.2 +parse==1.20.2 +parse-type==0.6.4 +pluggy==1.5.0 py==1.11.0 -pytest==8.0.0 +pytest==8.3.4 pytest-bdd==6.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -six==1.16.0 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +six==1.17.0 sortedcontainers==2.4.0 diff --git a/.riot/requirements/1d15df5.txt b/.riot/requirements/1d15df5.txt new file mode 100644 index 00000000000..7aa37dc4bff --- /dev/null +++ b/.riot/requirements/1d15df5.txt @@ -0,0 +1,22 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1d15df5.in +# +attrs==24.2.0 +coverage[toml]==7.6.9 +googleapis-common-protos==1.66.0 +grpcio==1.68.1 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +protobuf==5.29.1 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/1d21682.txt b/.riot/requirements/1d21682.txt index 93fd622b954..f70fec181a5 100644 --- a/.riot/requirements/1d21682.txt +++ b/.riot/requirements/1d21682.txt @@ -4,8 +4,8 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1d21682.in # -attrs==24.2.0 -coverage[toml]==7.6.4 +attrs==24.3.0 +coverage[toml]==7.6.10 gevent==24.11.1 greenlet==3.1.1 gunicorn[gevent]==23.0.0 @@ -17,7 +17,7 @@ opentracing==2.4.0 packaging==24.2 pluggy==1.5.0 py-cpuinfo==8.0.0 -pytest==8.3.3 +pytest==8.3.4 pytest-asyncio==0.21.1 pytest-benchmark==5.1.0 pytest-cov==6.0.0 @@ -27,7 +27,7 @@ pytest-randomly==3.16.0 sortedcontainers==2.4.0 uwsgi==2.0.28 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.4.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1d44438.txt b/.riot/requirements/1d44438.txt index c067e47f7a9..5a2fbefacd8 100644 --- a/.riot/requirements/1d44438.txt +++ b/.riot/requirements/1d44438.txt @@ -4,26 +4,26 @@ # # pip-compile --no-annotate .riot/requirements/1d44438.in # -attrs==23.2.0 -coverage[toml]==7.4.1 +attrs==24.3.0 +coverage[toml]==7.6.9 glob2==0.7 hypothesis==6.45.0 iniconfig==2.0.0 -mako==1.3.2 -markupsafe==2.1.5 +mako==1.3.8 +markupsafe==3.0.2 mock==5.1.0 more-itertools==8.10.0 -msgpack==1.0.7 +msgpack==1.1.0 opentracing==2.4.0 -packaging==23.2 -parse==1.20.1 -parse-type==0.6.2 -pluggy==1.4.0 +packaging==24.2 +parse==1.20.2 +parse-type==0.6.4 +pluggy==1.5.0 py==1.11.0 -pytest==8.0.0 +pytest==8.3.4 pytest-bdd==6.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -six==1.16.0 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +six==1.17.0 sortedcontainers==2.4.0 diff --git a/.riot/requirements/1d6049b.txt b/.riot/requirements/1d6049b.txt new file mode 100644 index 00000000000..bd72dc72359 --- /dev/null +++ b/.riot/requirements/1d6049b.txt @@ -0,0 +1,21 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1d6049b.in +# +asyncpg==0.30.0 +attrs==24.3.0 +coverage[toml]==7.6.9 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-asyncio==0.21.2 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/1d6a1a5.txt b/.riot/requirements/1d6a1a5.txt index 2ec9ed99c31..8c33bbe9819 100644 --- a/.riot/requirements/1d6a1a5.txt +++ b/.riot/requirements/1d6a1a5.txt @@ -4,11 +4,11 @@ # # pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1d6a1a5.in # -attrs==23.2.0 +attrs==24.2.0 coverage[toml]==7.2.7 exceptiongroup==1.2.2 gevent==22.10.2 -greenlet==3.0.3 +greenlet==3.1.1 hypothesis==6.45.0 importlib-metadata==6.7.0 iniconfig==2.0.0 diff --git a/.riot/requirements/1db8cf2.txt b/.riot/requirements/1db8cf2.txt new file mode 100644 index 00000000000..5cf71f8f771 --- /dev/null +++ b/.riot/requirements/1db8cf2.txt @@ -0,0 +1,28 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1db8cf2.in +# +attrs==24.3.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 +greenlet==3.0.3 +hypothesis==6.45.0 +importlib-metadata==8.5.0 +iniconfig==2.0.0 +mock==5.1.0 +mysql-connector-python==9.0.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +psycopg2-binary==2.9.10 +pytest==8.3.4 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +sqlalchemy==2.0.36 +tomli==2.2.1 +typing-extensions==4.12.2 +zipp==3.20.2 diff --git a/.riot/requirements/1dcce79.txt b/.riot/requirements/1dcce79.txt index 77afe779c84..4e759a7f5b6 100644 --- a/.riot/requirements/1dcce79.txt +++ b/.riot/requirements/1dcce79.txt @@ -4,29 +4,29 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1dcce79.in # -attrs==23.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.0 -gevent==24.2.1 -greenlet==3.0.3 -gunicorn==22.0.0 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +gevent==24.11.1 +greenlet==3.1.1 +gunicorn==23.0.0 hypothesis==6.45.0 -idna==3.7 +idna==3.10 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.32.3 sortedcontainers==2.4.0 -urllib3==2.2.2 +urllib3==2.3.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1dd5678.txt b/.riot/requirements/1dd5678.txt index c3ed6ec2447..148c212e752 100644 --- a/.riot/requirements/1dd5678.txt +++ b/.riot/requirements/1dd5678.txt @@ -4,27 +4,27 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1dd5678.in # -attrs==24.2.0 -coverage[toml]==7.6.1 -gevent==24.2.1 +attrs==24.3.0 +coverage[toml]==7.6.10 +gevent==24.11.1 greenlet==3.1.1 httpretty==1.1.4 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pyfakefs==5.6.0 -pytest==8.3.3 +pyfakefs==5.7.3 +pytest==8.3.4 pytest-asyncio==0.23.8 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 python-json-logger==2.0.7 sortedcontainers==2.4.0 zope-event==5.0 -zope-interface==7.0.3 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1dd8c71.txt b/.riot/requirements/1dd8c71.txt new file mode 100644 index 00000000000..569f278cbc6 --- /dev/null +++ b/.riot/requirements/1dd8c71.txt @@ -0,0 +1,36 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1dd8c71.in +# +aiofiles==24.1.0 +anyio==3.7.1 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.0 +coverage[toml]==7.6.9 +fastapi==0.86.0 +h11==0.14.0 +httpcore==1.0.7 +httpx==0.27.2 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pydantic==1.10.19 +pytest==8.3.4 +pytest-asyncio==0.21.1 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +python-multipart==0.0.20 +requests==2.32.3 +sniffio==1.3.1 +sortedcontainers==2.4.0 +starlette==0.20.4 +typing-extensions==4.12.2 +urllib3==2.2.3 diff --git a/.riot/requirements/1ddcf3c.txt b/.riot/requirements/1ddcf3c.txt index 9a981cb2891..a6256298653 100644 --- a/.riot/requirements/1ddcf3c.txt +++ b/.riot/requirements/1ddcf3c.txt @@ -4,33 +4,33 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1ddcf3c.in # -attrs==23.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.0 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 gunicorn==20.0.4 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.2.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.32.3 sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.2.2 -zipp==3.19.2 +tomli==2.2.1 +urllib3==2.3.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1df3425.txt b/.riot/requirements/1df3425.txt index 607001ee8c3..f3b560229bd 100644 --- a/.riot/requirements/1df3425.txt +++ b/.riot/requirements/1df3425.txt @@ -4,27 +4,27 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1df3425.in # -attrs==23.2.0 -coverage[toml]==7.6.0 -gevent==24.2.1 -greenlet==3.0.3 +attrs==24.3.0 +coverage[toml]==7.6.10 +gevent==24.11.1 +greenlet==3.1.1 httpretty==1.1.4 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pyfakefs==5.6.0 -pytest==8.3.1 +pyfakefs==5.7.3 +pytest==8.3.4 pytest-asyncio==0.23.8 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 python-json-logger==2.0.7 sortedcontainers==2.4.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1df8347.txt b/.riot/requirements/1df8347.txt index f99acfad6e4..ca1c3a6ec3f 100644 --- a/.riot/requirements/1df8347.txt +++ b/.riot/requirements/1df8347.txt @@ -4,33 +4,33 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1df8347.in # -attrs==23.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.0 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.1 exceptiongroup==1.2.2 gevent==24.2.1 -greenlet==3.0.3 -gunicorn==22.0.0 +greenlet==3.1.1 +gunicorn==23.0.0 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.2.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 +pytest==8.3.4 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 requests==2.32.3 sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.2.2 -zipp==3.19.2 +tomli==2.2.1 +urllib3==2.2.3 +zipp==3.20.2 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.3.0 diff --git a/.riot/requirements/1e0ee8d.txt b/.riot/requirements/1e0ee8d.txt deleted file mode 100644 index f18af75a99a..00000000000 --- a/.riot/requirements/1e0ee8d.txt +++ /dev/null @@ -1,20 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1e0ee8d.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -falcon==3.0.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 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/1e1ea62.txt b/.riot/requirements/1e1ea62.txt index b3150829b3b..950084f9d03 100644 --- a/.riot/requirements/1e1ea62.txt +++ b/.riot/requirements/1e1ea62.txt @@ -2,23 +2,23 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --no-annotate .riot/requirements/1e1ea62.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1e1ea62.in # -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.0 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.10 +deprecated==1.2.15 flask==2.1.3 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.2.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 opentelemetry-api==1.15.0 @@ -28,21 +28,21 @@ opentelemetry-instrumentation-wsgi==0.45b0 opentelemetry-semantic-conventions==0.45b0 opentelemetry-util-http==0.45b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -urllib3==1.26.19 +urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -# setuptools +setuptools==75.7.0 diff --git a/.riot/requirements/1e2c1f1.txt b/.riot/requirements/1e2c1f1.txt new file mode 100644 index 00000000000..ccd4918ea54 --- /dev/null +++ b/.riot/requirements/1e2c1f1.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1e2c1f1.in +# +attrs==24.3.0 +avro==1.12.0 +coverage[toml]==7.6.9 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/1e535fe.txt b/.riot/requirements/1e535fe.txt deleted file mode 100644 index f04e722a5ff..00000000000 --- a/.riot/requirements/1e535fe.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/1e535fe.in -# -attrs==23.2.0 -coverage[toml]==7.4.1 -glob2==0.7 -hypothesis==6.45.0 -iniconfig==2.0.0 -mako==1.3.2 -markupsafe==2.1.5 -mock==5.1.0 -more-itertools==8.10.0 -msgpack==1.0.7 -opentracing==2.4.0 -packaging==23.2 -parse==1.20.1 -parse-type==0.6.2 -pluggy==1.4.0 -py==1.11.0 -pytest==8.0.0 -pytest-bdd==4.1.0 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -six==1.16.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/1eef7c1.txt b/.riot/requirements/1eef7c1.txt new file mode 100644 index 00000000000..331cab10062 --- /dev/null +++ b/.riot/requirements/1eef7c1.txt @@ -0,0 +1,24 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1eef7c1.in +# +aiopg==1.4.0 +async-timeout==4.0.3 +attrs==24.3.0 +coverage[toml]==7.6.9 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +psycopg2-binary==2.9.10 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +sqlalchemy==2.0.36 +typing-extensions==4.12.2 diff --git a/.riot/requirements/1ef2187.txt b/.riot/requirements/1ef2187.txt index b430f5158b2..02ccf9724c2 100644 --- a/.riot/requirements/1ef2187.txt +++ b/.riot/requirements/1ef2187.txt @@ -4,8 +4,8 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1ef2187.in # -attrs==24.2.0 -coverage[toml]==7.6.4 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 gevent==24.11.1 greenlet==3.1.1 @@ -15,14 +15,14 @@ mock==5.1.0 opentracing==2.4.0 packaging==24.2 pluggy==1.5.0 -pytest==8.3.3 +pytest==8.3.4 pytest-cov==6.0.0 pytest-mock==3.14.0 pytest-randomly==3.16.0 sortedcontainers==2.4.0 -tomli==2.0.2 +tomli==2.2.1 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1efd2cc.txt b/.riot/requirements/1efd2cc.txt deleted file mode 100644 index 7d049eba04a..00000000000 --- a/.riot/requirements/1efd2cc.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1efd2cc.in -# -attrs==23.2.0 -coverage[toml]==7.4.4 -greenlet==3.0.3 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.3.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.4.0 -psycopg2-binary==2.9.9 -pytest==8.1.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.28 -typing-extensions==4.10.0 diff --git a/.riot/requirements/16759fe.txt b/.riot/requirements/1f11fb6.txt similarity index 88% rename from .riot/requirements/16759fe.txt rename to .riot/requirements/1f11fb6.txt index 27b3dd8d79e..3dd008ccf49 100644 --- a/.riot/requirements/16759fe.txt +++ b/.riot/requirements/1f11fb6.txt @@ -2,12 +2,12 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/16759fe.in +# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1f11fb6.in # aiofiles==23.2.1 anyio==3.7.1 attrs==24.2.0 -certifi==2024.8.30 +certifi==2024.12.14 charset-normalizer==3.4.0 coverage[toml]==7.2.7 exceptiongroup==1.2.2 @@ -23,7 +23,7 @@ mock==5.1.0 opentracing==2.4.0 packaging==24.0 pluggy==1.2.0 -pydantic==1.10.18 +pydantic==1.10.19 pytest==7.4.4 pytest-asyncio==0.21.1 pytest-cov==4.1.0 diff --git a/.riot/requirements/1f1570a.txt b/.riot/requirements/1f1570a.txt deleted file mode 100644 index e1cf44a2660..00000000000 --- a/.riot/requirements/1f1570a.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/1f1570a.in -# -attrs==23.2.0 -coverage[toml]==7.4.4 -exceptiongroup==1.2.0 -greenlet==3.0.3 -hypothesis==6.45.0 -importlib-metadata==7.1.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.3.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.4.0 -psycopg2-binary==2.9.9 -pytest==8.1.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.28 -tomli==2.0.1 -typing-extensions==4.10.0 -zipp==3.18.1 diff --git a/.riot/requirements/1f1e236.txt b/.riot/requirements/1f1e236.txt new file mode 100644 index 00000000000..6b89eac7d7e --- /dev/null +++ b/.riot/requirements/1f1e236.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1f1e236.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +falcon==4.0.2 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/1f8ac1c.txt b/.riot/requirements/1f8ac1c.txt index 6038da8e391..4bbe51235ae 100644 --- a/.riot/requirements/1f8ac1c.txt +++ b/.riot/requirements/1f8ac1c.txt @@ -4,47 +4,47 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1f8ac1c.in # -amqp==5.2.0 -attrs==24.2.0 -billiard==4.2.0 +amqp==5.3.1 +attrs==24.3.0 +billiard==4.2.1 celery==5.4.0 -certifi==2024.8.30 -charset-normalizer==3.3.2 -click==8.1.7 +certifi==2024.12.14 +charset-normalizer==3.4.1 +click==8.1.8 click-didyoumean==0.3.1 click-plugins==1.1.1 click-repl==0.3.0 -coverage[toml]==7.6.1 +coverage[toml]==7.6.10 django==2.2.1 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.8 +idna==3.10 iniconfig==2.0.0 -kombu==5.4.0 +kombu==5.4.2 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -prompt-toolkit==3.0.47 -pytest==8.3.2 -pytest-cov==5.0.0 +prompt-toolkit==3.0.48 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 python-dateutil==2.9.0.post0 -pytz==2024.1 +pytz==2024.2 requests==2.32.3 -six==1.16.0 +six==1.17.0 sortedcontainers==2.4.0 sqlalchemy==1.2.19 -sqlparse==0.5.1 +sqlparse==0.5.3 typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==2.2.2 +tzdata==2024.2 +urllib3==2.3.0 vine==5.1.0 wcwidth==0.2.13 zope-event==5.0 -zope-interface==7.0.3 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==74.0.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1f8c44d.txt b/.riot/requirements/1f8c44d.txt new file mode 100644 index 00000000000..67857363013 --- /dev/null +++ b/.riot/requirements/1f8c44d.txt @@ -0,0 +1,24 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1f8c44d.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +greenlet==3.0.3 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +mysql-connector-python==9.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +psycopg2-binary==2.9.10 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +sqlalchemy==2.0.36 +typing-extensions==4.12.2 diff --git a/.riot/requirements/1f9dd35.txt b/.riot/requirements/1f9dd35.txt new file mode 100644 index 00000000000..63225143f57 --- /dev/null +++ b/.riot/requirements/1f9dd35.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1f9dd35.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +falcon==3.1.3 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/1fbf1f2.txt b/.riot/requirements/1fbf1f2.txt index b2acee3ce55..a7b38184134 100644 --- a/.riot/requirements/1fbf1f2.txt +++ b/.riot/requirements/1fbf1f2.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/1fbf1f2.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1fbf1f2.in # asgiref==3.8.1 -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 click==7.1.2 -coverage[toml]==7.6.0 +coverage[toml]==7.6.10 flask==1.1.4 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 +idna==3.10 iniconfig==2.0.0 itsdangerous==1.1.0 jinja2==2.11.3 @@ -26,20 +26,20 @@ opentelemetry-instrumentation-flask==0.19b0 opentelemetry-instrumentation-wsgi==0.19b0 opentelemetry-util-http==0.19b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -urllib3==1.26.19 +urllib3==1.26.20 werkzeug==1.0.1 -wrapt==1.16.0 +wrapt==1.17.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -# setuptools +setuptools==75.7.0 diff --git a/.riot/requirements/1fe881e.txt b/.riot/requirements/1fe881e.txt index 5c187ea3c82..9cc5d6b64c4 100644 --- a/.riot/requirements/1fe881e.txt +++ b/.riot/requirements/1fe881e.txt @@ -4,23 +4,23 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1fe881e.in # -attrs==23.2.0 -coverage[toml]==7.6.0 -gevent==24.2.1 -greenlet==3.0.3 +attrs==24.3.0 +coverage[toml]==7.6.10 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1fefc1d.txt b/.riot/requirements/1fefc1d.txt index 47d4260b2b5..9d32c7b902d 100644 --- a/.riot/requirements/1fefc1d.txt +++ b/.riot/requirements/1fefc1d.txt @@ -4,30 +4,30 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/1fefc1d.in # -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 -gunicorn[gevent]==22.0.0 +gevent==24.11.1 +greenlet==3.1.1 +gunicorn[gevent]==23.0.0 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 py-cpuinfo==8.0.0 -pytest==8.3.1 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 +pytest-benchmark==5.1.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 -tomli==2.0.1 -uwsgi==2.0.26 +tomli==2.2.1 +uwsgi==2.0.28 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/2502b82.txt b/.riot/requirements/2502b82.txt new file mode 100644 index 00000000000..521082afb6d --- /dev/null +++ b/.riot/requirements/2502b82.txt @@ -0,0 +1,22 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/2502b82.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +exceptiongroup==1.2.2 +falcon==4.0.2 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +tomli==2.2.1 diff --git a/.riot/requirements/26ee64c.txt b/.riot/requirements/26ee64c.txt index 02f82b9fee8..f1a65526c25 100644 --- a/.riot/requirements/26ee64c.txt +++ b/.riot/requirements/26ee64c.txt @@ -4,14 +4,14 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/26ee64c.in # -amqp==5.2.0 -attrs==24.2.0 +amqp==5.3.1 +attrs==24.3.0 backports-zoneinfo[tzdata]==0.2.1 -billiard==4.2.0 +billiard==4.2.1 celery==5.4.0 -certifi==2024.8.30 -charset-normalizer==3.3.2 -click==8.1.7 +certifi==2024.12.14 +charset-normalizer==3.4.1 +click==8.1.8 click-didyoumean==0.3.1 click-plugins==1.1.1 click-repl==0.3.0 @@ -19,37 +19,37 @@ coverage[toml]==7.6.1 django==2.2.1 exceptiongroup==1.2.2 gevent==24.2.1 -greenlet==3.0.3 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.8 -importlib-metadata==8.4.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 -kombu==5.4.0 +kombu==5.4.2 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -prompt-toolkit==3.0.47 -pytest==8.3.2 +prompt-toolkit==3.0.48 +pytest==8.3.4 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 python-dateutil==2.9.0.post0 -pytz==2024.1 +pytz==2024.2 requests==2.32.3 -six==1.16.0 +six==1.17.0 sortedcontainers==2.4.0 sqlalchemy==1.2.19 -sqlparse==0.5.1 -tomli==2.0.1 +sqlparse==0.5.3 +tomli==2.2.1 typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==2.2.2 +tzdata==2024.2 +urllib3==2.2.3 vine==5.1.0 wcwidth==0.2.13 -zipp==3.20.1 +zipp==3.20.2 zope-event==5.0 -zope-interface==7.0.3 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==74.0.0 +setuptools==75.3.0 diff --git a/.riot/requirements/27d0ff3.txt b/.riot/requirements/27d0ff3.txt index 136eacdd947..c03419edbdb 100644 --- a/.riot/requirements/27d0ff3.txt +++ b/.riot/requirements/27d0ff3.txt @@ -4,28 +4,28 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/27d0ff3.in # -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==24.3.0 +coverage[toml]==7.6.1 exceptiongroup==1.2.2 gevent==24.2.1 -greenlet==3.0.3 +greenlet==3.1.1 hypothesis==6.45.0 -importlib-metadata==8.2.0 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 -msgpack==1.0.8 +msgpack==1.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 +pytest==8.3.4 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 +tomli==2.2.1 +zipp==3.20.2 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.3.0 diff --git a/.riot/requirements/2b30eed.txt b/.riot/requirements/2b30eed.txt deleted file mode 100644 index 4666128969f..00000000000 --- a/.riot/requirements/2b30eed.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/2b30eed.in -# -attrs==23.2.0 -coverage[toml]==7.4.4 -exceptiongroup==1.2.0 -greenlet==3.0.3 -hypothesis==6.45.0 -importlib-metadata==7.1.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.3.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.4.0 -psycopg2-binary==2.9.9 -pytest==8.1.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.28 -tomli==2.0.1 -typing-extensions==4.10.0 -zipp==3.18.1 diff --git a/.riot/requirements/2d19e52.txt b/.riot/requirements/2d19e52.txt index 0f538889725..8de360e7316 100644 --- a/.riot/requirements/2d19e52.txt +++ b/.riot/requirements/2d19e52.txt @@ -4,11 +4,11 @@ # # pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/2d19e52.in # -attrs==23.2.0 +attrs==24.2.0 coverage[toml]==7.2.7 exceptiongroup==1.2.2 gevent==22.10.2 -greenlet==3.0.3 +greenlet==3.1.1 hypothesis==6.45.0 importlib-metadata==6.7.0 iniconfig==2.0.0 diff --git a/.riot/requirements/2e36381.txt b/.riot/requirements/2e36381.txt index 8629f1a5892..f4a2aa986fc 100644 --- a/.riot/requirements/2e36381.txt +++ b/.riot/requirements/2e36381.txt @@ -4,9 +4,9 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/2e36381.in # -attrs==24.2.0 -coverage[toml]==7.6.3 -gevent==24.10.2 +attrs==24.3.0 +coverage[toml]==7.6.10 +gevent==24.11.1 greenlet==3.1.1 gunicorn[gevent]==23.0.0 hypothesis==6.45.0 @@ -14,20 +14,20 @@ iniconfig==2.0.0 lz4==4.3.3 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 py-cpuinfo==8.0.0 -pytest==8.3.3 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 +pytest-benchmark==5.1.0 +pytest-cov==6.0.0 pytest-cpp==2.6.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 -uwsgi==2.0.27 +uwsgi==2.0.28 zope-event==5.0 -zope-interface==7.1.0 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.2.0 +setuptools==75.7.0 diff --git a/.riot/requirements/37847ab.txt b/.riot/requirements/37847ab.txt deleted file mode 100644 index 35ecea5e3c7..00000000000 --- a/.riot/requirements/37847ab.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/37847ab.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -falcon==3.1.3 -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 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 diff --git a/.riot/requirements/38f510f.txt b/.riot/requirements/38f510f.txt new file mode 100644 index 00000000000..17fae77250d --- /dev/null +++ b/.riot/requirements/38f510f.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/38f510f.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +falcon==4.0.2 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/3f472ba.txt b/.riot/requirements/3f472ba.txt new file mode 100644 index 00000000000..0e303a01101 --- /dev/null +++ b/.riot/requirements/3f472ba.txt @@ -0,0 +1,23 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/3f472ba.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +greenlet==3.0.3 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +mysql-connector-python==9.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +psycopg2-binary==2.9.10 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +sqlalchemy==1.3.24 diff --git a/.riot/requirements/401d7e2.txt b/.riot/requirements/401d7e2.txt index bee88652365..61768550da7 100644 --- a/.riot/requirements/401d7e2.txt +++ b/.riot/requirements/401d7e2.txt @@ -4,29 +4,29 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/401d7e2.in # -attrs==23.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.0 -gevent==24.2.1 -greenlet==3.0.3 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +gevent==24.11.1 +greenlet==3.1.1 gunicorn==20.0.4 hypothesis==6.45.0 -idna==3.7 +idna==3.10 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.32.3 sortedcontainers==2.4.0 -urllib3==2.2.2 +urllib3==2.3.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/4132bce.txt b/.riot/requirements/4132bce.txt index b27023913a3..e9c28c4280c 100644 --- a/.riot/requirements/4132bce.txt +++ b/.riot/requirements/4132bce.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/4132bce.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/4132bce.in # -attrs==24.2.0 -coverage[toml]==7.6.9 +attrs==24.3.0 +coverage[toml]==7.6.10 gevent==23.9.1 greenlet==3.1.1 hypothesis==6.45.0 @@ -23,4 +23,4 @@ zope-event==5.0 zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -# setuptools +setuptools==75.7.0 diff --git a/.riot/requirements/4211915.txt b/.riot/requirements/4211915.txt index 74a4e1c120e..b9365d94058 100644 --- a/.riot/requirements/4211915.txt +++ b/.riot/requirements/4211915.txt @@ -5,22 +5,22 @@ # pip-compile --allow-unsafe --no-annotate .riot/requirements/4211915.in # aiobotocore==2.3.1 -aiohappyeyeballs==2.4.3 -aiohttp==3.10.10 +aiohappyeyeballs==2.4.4 +aiohttp==3.11.11 aioitertools==0.12.0 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==24.2.0 +aiosignal==1.3.2 +async-timeout==5.0.1 +attrs==24.3.0 botocore==1.24.21 -certifi==2024.8.30 -charset-normalizer==3.4.0 -coverage[toml]==7.6.4 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 elastic-transport==8.15.1 -elasticsearch==8.15.1 +elasticsearch==8.17.0 events==0.5 exceptiongroup==1.2.2 frozenlist==1.5.0 -gevent==24.10.3 +gevent==24.11.1 greenlet==3.1.1 hypothesis==6.45.0 idna==3.10 @@ -28,27 +28,27 @@ iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 multidict==6.1.0 -opensearch-py==2.7.1 +opensearch-py==2.8.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -propcache==0.2.0 +propcache==0.2.1 pynamodb==5.5.1 -pytest==8.3.3 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 pytest-randomly==3.16.0 python-dateutil==2.9.0.post0 requests==2.32.3 -six==1.16.0 +six==1.17.0 sortedcontainers==2.4.0 -tomli==2.0.2 +tomli==2.2.1 typing-extensions==4.12.2 urllib3==1.26.20 -wrapt==1.16.0 -yarl==1.16.0 +wrapt==1.17.0 +yarl==1.18.3 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.2.0 +setuptools==75.7.0 diff --git a/.riot/requirements/71adece.txt b/.riot/requirements/4448684.txt similarity index 64% rename from .riot/requirements/71adece.txt rename to .riot/requirements/4448684.txt index 3c7da46fac6..225d852c80b 100644 --- a/.riot/requirements/71adece.txt +++ b/.riot/requirements/4448684.txt @@ -2,19 +2,19 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/71adece.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/4448684.in # aiofiles==24.1.0 annotated-types==0.7.0 -anyio==4.6.2.post1 -attrs==24.2.0 -certifi==2024.8.30 +anyio==4.7.0 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==3.4.0 -coverage[toml]==7.6.3 +coverage[toml]==7.6.9 exceptiongroup==1.2.2 -fastapi==0.115.2 +fastapi==0.115.6 h11==0.14.0 -httpcore==1.0.6 +httpcore==1.0.7 httpx==0.27.2 hypothesis==6.45.0 idna==3.10 @@ -22,21 +22,21 @@ importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pydantic==2.9.2 -pydantic-core==2.23.4 -pytest==8.3.3 +pydantic==2.10.3 +pydantic-core==2.27.1 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-multipart==0.0.12 +pytest-randomly==3.16.0 +python-multipart==0.0.20 requests==2.32.3 sniffio==1.3.1 sortedcontainers==2.4.0 -starlette==0.40.0 -tomli==2.0.2 +starlette==0.41.3 +tomli==2.2.1 typing-extensions==4.12.2 urllib3==2.2.3 -zipp==3.20.2 +zipp==3.21.0 diff --git a/.riot/requirements/4de03a5.txt b/.riot/requirements/4de03a5.txt index 5f1cc3a70e4..8fa32aa29f3 100644 --- a/.riot/requirements/4de03a5.txt +++ b/.riot/requirements/4de03a5.txt @@ -40,6 +40,7 @@ opentracing==2.4.0 packaging==24.2 platformdirs==4.3.6 pluggy==1.5.0 +psycopg==3.2.3 psycopg2-binary==2.9.10 pyasn1==0.6.1 pyasn1-modules==0.4.1 diff --git a/.riot/requirements/4e87dd9.txt b/.riot/requirements/4e87dd9.txt index ec01ebe5392..8326ebf2d8b 100644 --- a/.riot/requirements/4e87dd9.txt +++ b/.riot/requirements/4e87dd9.txt @@ -4,29 +4,29 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/4e87dd9.in # -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 httpretty==1.1.4 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pyfakefs==5.6.0 -pytest==8.3.1 +pyfakefs==5.7.3 +pytest==8.3.4 pytest-asyncio==0.23.8 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 python-json-logger==2.0.7 sortedcontainers==2.4.0 -tomli==2.0.1 +tomli==2.2.1 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/4fe37f9.txt b/.riot/requirements/4fe37f9.txt new file mode 100644 index 00000000000..d23097a4f9f --- /dev/null +++ b/.riot/requirements/4fe37f9.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/4fe37f9.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +protobuf==5.29.1 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/512bff3.txt b/.riot/requirements/512bff3.txt index 044d35664f9..a6997b2c866 100644 --- a/.riot/requirements/512bff3.txt +++ b/.riot/requirements/512bff3.txt @@ -5,18 +5,18 @@ # pip-compile --allow-unsafe --no-annotate .riot/requirements/512bff3.in # aiobotocore==2.3.1 -aiohappyeyeballs==2.4.3 -aiohttp==3.10.10 +aiohappyeyeballs==2.4.4 +aiohttp==3.11.11 aioitertools==0.12.0 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==24.2.0 +aiosignal==1.3.2 +async-timeout==5.0.1 +attrs==24.3.0 botocore==1.24.21 -certifi==2024.8.30 -charset-normalizer==3.4.0 -coverage[toml]==7.6.4 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 elastic-transport==8.15.1 -elasticsearch==8.15.1 +elasticsearch==8.17.0 events==0.5 exceptiongroup==1.2.2 frozenlist==1.5.0 @@ -29,28 +29,28 @@ iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 multidict==6.1.0 -opensearch-py==2.7.1 +opensearch-py==2.8.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -propcache==0.2.0 +propcache==0.2.1 pynamodb==5.5.1 -pytest==8.3.3 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 pytest-randomly==3.16.0 python-dateutil==2.9.0.post0 requests==2.32.3 -six==1.16.0 +six==1.17.0 sortedcontainers==2.4.0 -tomli==2.0.2 +tomli==2.2.1 typing-extensions==4.12.2 urllib3==1.26.20 -wrapt==1.16.0 -yarl==1.16.0 -zipp==3.20.2 +wrapt==1.17.0 +yarl==1.18.3 +zipp==3.21.0 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.2.0 +setuptools==75.7.0 diff --git a/.riot/requirements/51f5382.txt b/.riot/requirements/51f5382.txt index b483c0f1fb2..ad560a48a54 100644 --- a/.riot/requirements/51f5382.txt +++ b/.riot/requirements/51f5382.txt @@ -5,20 +5,20 @@ # pip-compile --allow-unsafe --no-annotate .riot/requirements/51f5382.in # aiobotocore==2.3.1 -aiohappyeyeballs==2.4.3 -aiohttp==3.10.10 +aiohappyeyeballs==2.4.4 +aiohttp==3.11.11 aioitertools==0.12.0 -aiosignal==1.3.1 -attrs==24.2.0 +aiosignal==1.3.2 +attrs==24.3.0 botocore==1.24.21 -certifi==2024.8.30 -charset-normalizer==3.4.0 -coverage[toml]==7.6.4 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 elastic-transport==8.15.1 -elasticsearch==8.15.1 +elasticsearch==8.17.0 events==0.5 frozenlist==1.5.0 -gevent==24.10.3 +gevent==24.11.1 greenlet==3.1.1 hypothesis==6.45.0 idna==3.10 @@ -26,25 +26,25 @@ iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 multidict==6.1.0 -opensearch-py==2.7.1 +opensearch-py==2.8.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -propcache==0.2.0 +propcache==0.2.1 pynamodb==5.5.1 -pytest==8.3.3 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 pytest-randomly==3.16.0 python-dateutil==2.9.0.post0 requests==2.32.3 -six==1.16.0 +six==1.17.0 sortedcontainers==2.4.0 urllib3==1.26.20 -wrapt==1.16.0 -yarl==1.16.0 +wrapt==1.17.0 +yarl==1.18.3 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.2.0 +setuptools==75.7.0 diff --git a/.riot/requirements/522a546.txt b/.riot/requirements/522a546.txt new file mode 100644 index 00000000000..9fde2ac3f0d --- /dev/null +++ b/.riot/requirements/522a546.txt @@ -0,0 +1,24 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/522a546.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +exceptiongroup==1.2.2 +falcon==3.0.1 +hypothesis==6.45.0 +importlib-metadata==8.5.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +tomli==2.2.1 +zipp==3.21.0 diff --git a/.riot/requirements/52e614f.txt b/.riot/requirements/52e614f.txt new file mode 100644 index 00000000000..4d72e7c6c5c --- /dev/null +++ b/.riot/requirements/52e614f.txt @@ -0,0 +1,28 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/52e614f.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +exceptiongroup==1.2.2 +greenlet==3.0.3 +hypothesis==6.45.0 +importlib-metadata==8.5.0 +iniconfig==2.0.0 +mock==5.1.0 +mysql-connector-python==9.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +psycopg2-binary==2.9.10 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +sqlalchemy==2.0.36 +tomli==2.2.1 +typing-extensions==4.12.2 +zipp==3.21.0 diff --git a/.riot/requirements/562df6d.txt b/.riot/requirements/562df6d.txt new file mode 100644 index 00000000000..2204cad14fa --- /dev/null +++ b/.riot/requirements/562df6d.txt @@ -0,0 +1,24 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/562df6d.in +# +aiopg==1.4.0 +async-timeout==4.0.3 +attrs==24.3.0 +coverage[toml]==7.6.9 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +psycopg2-binary==2.9.10 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +sqlalchemy==2.0.36 +typing-extensions==4.12.2 diff --git a/.riot/requirements/573ce40.txt b/.riot/requirements/573ce40.txt deleted file mode 100644 index ccbcbd82b2b..00000000000 --- a/.riot/requirements/573ce40.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/573ce40.in -# -attrs==23.2.0 -coverage[toml]==7.4.4 -exceptiongroup==1.2.0 -greenlet==3.0.3 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.3.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.4.0 -psycopg2-binary==2.9.9 -pytest==8.1.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.28 -tomli==2.0.1 -typing-extensions==4.10.0 diff --git a/.riot/requirements/5b922fc.txt b/.riot/requirements/5b922fc.txt index ff7fa5e6ba6..a77a16b9d1c 100644 --- a/.riot/requirements/5b922fc.txt +++ b/.riot/requirements/5b922fc.txt @@ -5,13 +5,13 @@ # pip-compile --allow-unsafe --no-annotate .riot/requirements/5b922fc.in # asgiref==3.8.1 -attrs==24.2.0 -certifi==2024.8.30 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 click==7.1.2 -coverage[toml]==7.6.1 +coverage[toml]==7.6.10 flask==1.1.4 -gevent==24.2.1 +gevent==24.11.1 greenlet==3.1.1 hypothesis==6.45.0 idna==3.10 @@ -26,20 +26,20 @@ opentelemetry-instrumentation-flask==0.19b0 opentelemetry-instrumentation-wsgi==0.19b0 opentelemetry-util-http==0.19b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.3 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 urllib3==1.26.20 werkzeug==1.0.1 -wrapt==1.16.0 +wrapt==1.17.0 zope-event==5.0 -zope-interface==7.0.3 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/5baaec1.txt b/.riot/requirements/5baaec1.txt index c0c03de46f4..a76d1ffc9ed 100644 --- a/.riot/requirements/5baaec1.txt +++ b/.riot/requirements/5baaec1.txt @@ -4,31 +4,31 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/5baaec1.in # -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 httpretty==1.1.4 hypothesis==6.45.0 -importlib-metadata==8.2.0 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pyfakefs==5.6.0 -pytest==8.3.1 +pyfakefs==5.7.3 +pytest==8.3.4 pytest-asyncio==0.23.8 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 python-json-logger==2.0.7 sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.19.2 +tomli==2.2.1 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/5be696d.txt b/.riot/requirements/5be696d.txt index 15994511d1e..7f38750f686 100644 --- a/.riot/requirements/5be696d.txt +++ b/.riot/requirements/5be696d.txt @@ -2,21 +2,21 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --no-annotate .riot/requirements/5be696d.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/5be696d.in # asgiref==3.8.1 -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 click==7.1.2 -coverage[toml]==7.6.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 flask==1.1.4 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.2.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 itsdangerous==1.1.0 jinja2==2.11.3 @@ -28,23 +28,23 @@ opentelemetry-instrumentation-flask==0.19b0 opentelemetry-instrumentation-wsgi==0.19b0 opentelemetry-util-http==0.19b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -tomli==2.0.1 +tomli==2.2.1 typing-extensions==4.12.2 -urllib3==1.26.19 +urllib3==1.26.20 werkzeug==1.0.1 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -# setuptools +setuptools==75.7.0 diff --git a/.riot/requirements/5ddbef6.txt b/.riot/requirements/5ddbef6.txt index 821ea4b50e8..5107ba9513e 100644 --- a/.riot/requirements/5ddbef6.txt +++ b/.riot/requirements/5ddbef6.txt @@ -4,29 +4,29 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/5ddbef6.in # -attrs==23.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.0 -gevent==24.2.1 -greenlet==3.0.3 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +gevent==24.11.1 +greenlet==3.1.1 gunicorn==20.0.4 hypothesis==6.45.0 -idna==3.7 +idna==3.10 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.32.3 sortedcontainers==2.4.0 -urllib3==2.2.2 +urllib3==2.3.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/5e63315.txt b/.riot/requirements/5e63315.txt index ff4304b6236..2b4d79c191b 100644 --- a/.riot/requirements/5e63315.txt +++ b/.riot/requirements/5e63315.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/5e63315.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/5e63315.in # -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.0 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.10 +deprecated==1.2.15 flask==2.1.3 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 +idna==3.10 importlib-metadata==8.0.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 opentelemetry-api==1.26.0 @@ -28,21 +28,21 @@ opentelemetry-instrumentation-wsgi==0.47b0 opentelemetry-semantic-conventions==0.47b0 opentelemetry-util-http==0.47b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -urllib3==1.26.19 +urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -# setuptools +setuptools==75.7.0 diff --git a/.riot/requirements/61891b4.txt b/.riot/requirements/61891b4.txt index 3b561890425..3e87510d66f 100644 --- a/.riot/requirements/61891b4.txt +++ b/.riot/requirements/61891b4.txt @@ -4,28 +4,28 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/61891b4.in # -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -importlib-metadata==8.2.0 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 -msgpack==1.0.8 +msgpack==1.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.19.2 +tomli==2.2.1 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/620a309.txt b/.riot/requirements/620a309.txt index 732e3bb845e..b0ada3ca20b 100644 --- a/.riot/requirements/620a309.txt +++ b/.riot/requirements/620a309.txt @@ -4,12 +4,12 @@ # # pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/620a309.in # -attrs==23.2.0 +attrs==24.2.0 coverage[toml]==7.2.7 exceptiongroup==1.2.2 gevent==22.10.2 -greenlet==3.0.3 -gunicorn[gevent]==22.0.0 +greenlet==3.1.1 +gunicorn[gevent]==23.0.0 hypothesis==6.45.0 importlib-metadata==6.7.0 iniconfig==2.0.0 @@ -27,7 +27,7 @@ pytest-randomly==3.12.0 sortedcontainers==2.4.0 tomli==2.0.1 typing-extensions==4.7.1 -uwsgi==2.0.26 +uwsgi==2.0.28 zipp==3.15.0 zope-event==5.0 zope-interface==6.4.post2 diff --git a/.riot/requirements/672002e.txt b/.riot/requirements/672002e.txt new file mode 100644 index 00000000000..d39815f738c --- /dev/null +++ b/.riot/requirements/672002e.txt @@ -0,0 +1,22 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/672002e.in +# +aiomysql==0.2.0 +attrs==24.3.0 +coverage[toml]==7.6.9 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pymysql==1.1.1 +pytest==8.3.4 +pytest-asyncio==0.25.0 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/69997b1.txt b/.riot/requirements/69997b1.txt index df6c9557e52..e2747670559 100644 --- a/.riot/requirements/69997b1.txt +++ b/.riot/requirements/69997b1.txt @@ -4,22 +4,22 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/69997b1.in # -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.0 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.10 +deprecated==1.2.15 exceptiongroup==1.2.2 flask==2.1.3 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.2.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 opentelemetry-api==1.15.0 @@ -29,22 +29,22 @@ opentelemetry-instrumentation-wsgi==0.45b0 opentelemetry-semantic-conventions==0.45b0 opentelemetry-util-http==0.45b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==1.26.19 +tomli==2.2.1 +urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/fa3a84d.txt b/.riot/requirements/6b2bec6.txt similarity index 69% rename from .riot/requirements/fa3a84d.txt rename to .riot/requirements/6b2bec6.txt index c8259b6ba0d..f7bfa544703 100644 --- a/.riot/requirements/fa3a84d.txt +++ b/.riot/requirements/6b2bec6.txt @@ -2,18 +2,18 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/fa3a84d.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/6b2bec6.in # aiofiles==24.1.0 -anyio==4.6.2.post1 -attrs==24.2.0 -certifi==2024.8.30 +anyio==4.7.0 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==3.4.0 -coverage[toml]==7.6.3 +coverage[toml]==7.6.9 exceptiongroup==1.2.2 fastapi==0.64.0 h11==0.14.0 -httpcore==1.0.6 +httpcore==1.0.7 httpx==0.27.2 hypothesis==6.45.0 idna==3.10 @@ -21,20 +21,20 @@ importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pydantic==1.10.18 -pytest==8.3.3 +pydantic==1.10.19 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-multipart==0.0.12 +pytest-randomly==3.16.0 +python-multipart==0.0.20 requests==2.32.3 sniffio==1.3.1 sortedcontainers==2.4.0 starlette==0.13.6 -tomli==2.0.2 +tomli==2.2.1 typing-extensions==4.12.2 urllib3==2.2.3 -zipp==3.20.2 +zipp==3.21.0 diff --git a/.riot/requirements/6e78b72.txt b/.riot/requirements/6e78b72.txt index 9068ed17649..eba09755f05 100644 --- a/.riot/requirements/6e78b72.txt +++ b/.riot/requirements/6e78b72.txt @@ -4,31 +4,31 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/6e78b72.in # -attrs==23.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.0 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 gunicorn==20.0.4 hypothesis==6.45.0 -idna==3.7 +idna==3.10 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.32.3 sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.2.2 +tomli==2.2.1 +urllib3==2.3.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/72c03ec.txt b/.riot/requirements/72c03ec.txt new file mode 100644 index 00000000000..1f8978ea899 --- /dev/null +++ b/.riot/requirements/72c03ec.txt @@ -0,0 +1,24 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/72c03ec.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +exceptiongroup==1.2.2 +falcon==4.0.2 +hypothesis==6.45.0 +importlib-metadata==8.5.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +tomli==2.2.1 +zipp==3.21.0 diff --git a/.riot/requirements/7c104f7.txt b/.riot/requirements/7c104f7.txt index f415d67621a..c104f45e033 100644 --- a/.riot/requirements/7c104f7.txt +++ b/.riot/requirements/7c104f7.txt @@ -4,22 +4,22 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/7c104f7.in # -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.0 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.1 +deprecated==1.2.15 exceptiongroup==1.2.2 flask==2.1.3 gevent==24.2.1 -greenlet==3.0.3 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 +idna==3.10 importlib-metadata==8.0.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 opentelemetry-api==1.26.0 @@ -29,22 +29,22 @@ opentelemetry-instrumentation-wsgi==0.47b0 opentelemetry-semantic-conventions==0.47b0 opentelemetry-util-http==0.47b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 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 -tomli==2.0.1 -urllib3==1.26.19 +tomli==2.2.1 +urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.20.2 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.3.0 diff --git a/.riot/requirements/1a692b1.txt b/.riot/requirements/840eb63.txt similarity index 72% rename from .riot/requirements/1a692b1.txt rename to .riot/requirements/840eb63.txt index a13b449b62b..431128fcb61 100644 --- a/.riot/requirements/1a692b1.txt +++ b/.riot/requirements/840eb63.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/1a692b1.in +# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/840eb63.in # -attrs==23.2.0 +attrs==24.2.0 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.2 greenlet==3.0.3 hypothesis==6.45.0 importlib-metadata==6.7.0 @@ -23,7 +23,7 @@ pytest-cov==4.1.0 pytest-mock==3.11.1 pytest-randomly==3.12.0 sortedcontainers==2.4.0 -sqlalchemy==2.0.28 +sqlalchemy==2.0.36 tomli==2.0.1 typing-extensions==4.7.1 zipp==3.15.0 diff --git a/.riot/requirements/8510e2e.txt b/.riot/requirements/8510e2e.txt new file mode 100644 index 00000000000..b03829a2828 --- /dev/null +++ b/.riot/requirements/8510e2e.txt @@ -0,0 +1,22 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/8510e2e.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +exceptiongroup==1.2.2 +falcon==3.0.1 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +tomli==2.2.1 diff --git a/.riot/requirements/85c90b4.txt b/.riot/requirements/85c90b4.txt index c465fca400a..9a51942ad69 100644 --- a/.riot/requirements/85c90b4.txt +++ b/.riot/requirements/85c90b4.txt @@ -2,21 +2,21 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --config=pyproject.toml --no-annotate .riot/requirements/85c90b4.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/85c90b4.in # asgiref==3.8.1 -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 click==7.1.2 -coverage[toml]==7.6.0 +coverage[toml]==7.6.1 exceptiongroup==1.2.2 flask==1.1.4 gevent==24.2.1 -greenlet==3.0.3 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.2.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 itsdangerous==1.1.0 jinja2==2.11.3 @@ -28,23 +28,23 @@ opentelemetry-instrumentation-flask==0.19b0 opentelemetry-instrumentation-wsgi==0.19b0 opentelemetry-util-http==0.19b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 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 -tomli==2.0.1 +tomli==2.2.1 typing-extensions==4.12.2 -urllib3==1.26.19 +urllib3==1.26.20 werkzeug==1.0.1 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.20.2 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -# setuptools +setuptools==75.3.0 diff --git a/.riot/requirements/85e923f.txt b/.riot/requirements/85e923f.txt index 0e4d880f5c9..dc94da04908 100644 --- a/.riot/requirements/85e923f.txt +++ b/.riot/requirements/85e923f.txt @@ -4,33 +4,33 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/85e923f.in # -attrs==23.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.0 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.1 exceptiongroup==1.2.2 gevent==24.2.1 -greenlet==3.0.3 +greenlet==3.1.1 gunicorn==20.0.4 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.2.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 +pytest==8.3.4 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 requests==2.32.3 sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.2.2 -zipp==3.19.2 +tomli==2.2.1 +urllib3==2.2.3 +zipp==3.20.2 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.3.0 diff --git a/.riot/requirements/ee3bb72.txt b/.riot/requirements/883d27c.txt similarity index 63% rename from .riot/requirements/ee3bb72.txt rename to .riot/requirements/883d27c.txt index 9ba70beec7b..4e9f25badee 100644 --- a/.riot/requirements/ee3bb72.txt +++ b/.riot/requirements/883d27c.txt @@ -2,39 +2,39 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/ee3bb72.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/883d27c.in # aiofiles==24.1.0 annotated-types==0.7.0 -anyio==4.6.2.post1 -attrs==24.2.0 -certifi==2024.8.30 +anyio==4.7.0 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==3.4.0 -coverage[toml]==7.6.3 +coverage[toml]==7.6.9 exceptiongroup==1.2.2 -fastapi==0.115.2 +fastapi==0.115.6 h11==0.14.0 -httpcore==1.0.6 +httpcore==1.0.7 httpx==0.27.2 hypothesis==6.45.0 idna==3.10 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pydantic==2.9.2 -pydantic-core==2.23.4 -pytest==8.3.3 +pydantic==2.10.3 +pydantic-core==2.27.1 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-multipart==0.0.12 +pytest-randomly==3.16.0 +python-multipart==0.0.20 requests==2.32.3 sniffio==1.3.1 sortedcontainers==2.4.0 -starlette==0.40.0 -tomli==2.0.2 +starlette==0.41.3 +tomli==2.2.1 typing-extensions==4.12.2 urllib3==2.2.3 diff --git a/.riot/requirements/89b8013.txt b/.riot/requirements/89b8013.txt index 159f4651100..f971cee9f2c 100644 --- a/.riot/requirements/89b8013.txt +++ b/.riot/requirements/89b8013.txt @@ -4,28 +4,28 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/89b8013.in # -attrs==23.2.0 -coverage[toml]==7.6.0 -gevent==24.2.1 -greenlet==3.0.3 -gunicorn[gevent]==22.0.0 +attrs==24.3.0 +coverage[toml]==7.6.10 +gevent==24.11.1 +greenlet==3.1.1 +gunicorn[gevent]==23.0.0 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 py-cpuinfo==8.0.0 -pytest==8.3.1 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 +pytest-benchmark==5.1.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 -uwsgi==2.0.26 +uwsgi==2.0.28 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/8a19bdc.txt b/.riot/requirements/8a19bdc.txt deleted file mode 100644 index 4561c44afa0..00000000000 --- a/.riot/requirements/8a19bdc.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/8a19bdc.in -# -attrs==23.2.0 -coverage[toml]==7.4.1 -glob2==0.7 -hypothesis==6.45.0 -iniconfig==2.0.0 -mako==1.3.2 -markupsafe==2.1.5 -mock==5.1.0 -more-itertools==8.10.0 -msgpack==1.0.7 -opentracing==2.4.0 -packaging==23.2 -parse==1.20.1 -parse-type==0.6.2 -pluggy==1.4.0 -py==1.11.0 -pytest==8.0.0 -pytest-bdd==4.1.0 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -six==1.16.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/1322180.txt b/.riot/requirements/8b97b54.txt similarity index 69% rename from .riot/requirements/1322180.txt rename to .riot/requirements/8b97b54.txt index d7f77ff6d04..82f79372afe 100644 --- a/.riot/requirements/1322180.txt +++ b/.riot/requirements/8b97b54.txt @@ -2,37 +2,37 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1322180.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/8b97b54.in # aiofiles==24.1.0 -anyio==4.6.2.post1 -attrs==24.2.0 -certifi==2024.8.30 +anyio==4.7.0 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==3.4.0 -coverage[toml]==7.6.3 +coverage[toml]==7.6.9 exceptiongroup==1.2.2 fastapi==0.64.0 h11==0.14.0 -httpcore==1.0.6 +httpcore==1.0.7 httpx==0.27.2 hypothesis==6.45.0 idna==3.10 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pydantic==1.10.18 -pytest==8.3.3 +pydantic==1.10.19 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-multipart==0.0.12 +pytest-randomly==3.16.0 +python-multipart==0.0.20 requests==2.32.3 sniffio==1.3.1 sortedcontainers==2.4.0 starlette==0.13.6 -tomli==2.0.2 +tomli==2.2.1 typing-extensions==4.12.2 urllib3==2.2.3 diff --git a/.riot/requirements/8dea090.txt b/.riot/requirements/8dea090.txt index 06f3310a9eb..f54ede984f8 100644 --- a/.riot/requirements/8dea090.txt +++ b/.riot/requirements/8dea090.txt @@ -4,47 +4,47 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/8dea090.in # -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.0 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.1 +deprecated==1.2.15 exceptiongroup==1.2.2 flask==2.1.3 gevent==24.2.1 -greenlet==3.0.3 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 -opentelemetry-api==1.26.0 -opentelemetry-instrumentation==0.47b0 -opentelemetry-instrumentation-flask==0.47b0 -opentelemetry-instrumentation-wsgi==0.47b0 -opentelemetry-semantic-conventions==0.47b0 -opentelemetry-util-http==0.47b0 +opentelemetry-api==1.29.0 +opentelemetry-instrumentation==0.50b0 +opentelemetry-instrumentation-flask==0.50b0 +opentelemetry-instrumentation-wsgi==0.50b0 +opentelemetry-semantic-conventions==0.50b0 +opentelemetry-util-http==0.50b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 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 -tomli==2.0.1 -urllib3==1.26.19 +tomli==2.2.1 +urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.20.2 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.3.0 diff --git a/.riot/requirements/1933645.txt b/.riot/requirements/8ef50f6.txt similarity index 66% rename from .riot/requirements/1933645.txt rename to .riot/requirements/8ef50f6.txt index 5e14a046e99..f3a48228267 100644 --- a/.riot/requirements/1933645.txt +++ b/.riot/requirements/8ef50f6.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/1933645.in +# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/8ef50f6.in # -attrs==23.1.0 +attrs==24.2.0 coverage[toml]==7.2.7 -exceptiongroup==1.2.0 +exceptiongroup==1.2.2 falcon==3.0.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/9093195.txt b/.riot/requirements/9093195.txt deleted file mode 100644 index 1d127a8d540..00000000000 --- a/.riot/requirements/9093195.txt +++ /dev/null @@ -1,20 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/9093195.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -falcon==3.1.3 -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 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/9105e5c.txt b/.riot/requirements/9105e5c.txt deleted file mode 100644 index 0e89e7c376d..00000000000 --- a/.riot/requirements/9105e5c.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/9105e5c.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -falcon==3.1.3 -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-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/9a5c0d9.txt b/.riot/requirements/9a5c0d9.txt index edab275315a..78e0546dfc9 100644 --- a/.riot/requirements/9a5c0d9.txt +++ b/.riot/requirements/9a5c0d9.txt @@ -4,11 +4,11 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/9a5c0d9.in # -attrs==24.2.0 -certifi==2024.8.30 -charset-normalizer==3.3.2 -coverage[toml]==7.6.1 -gevent==24.2.1 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +gevent==24.11.1 greenlet==3.1.1 gunicorn==23.0.0 hypothesis==6.45.0 @@ -16,17 +16,17 @@ idna==3.10 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.3 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.32.3 sortedcontainers==2.4.0 -urllib3==2.2.3 +urllib3==2.3.0 zope-event==5.0 -zope-interface==7.0.3 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/9b3b6c2.txt b/.riot/requirements/9b3b6c2.txt index 68d87089e1e..4e8db321caa 100644 --- a/.riot/requirements/9b3b6c2.txt +++ b/.riot/requirements/9b3b6c2.txt @@ -4,45 +4,45 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/9b3b6c2.in # -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.0 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.10 +deprecated==1.2.15 flask==2.1.3 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 -opentelemetry-api==1.26.0 -opentelemetry-instrumentation==0.47b0 -opentelemetry-instrumentation-flask==0.47b0 -opentelemetry-instrumentation-wsgi==0.47b0 -opentelemetry-semantic-conventions==0.47b0 -opentelemetry-util-http==0.47b0 +opentelemetry-api==1.29.0 +opentelemetry-instrumentation==0.50b0 +opentelemetry-instrumentation-flask==0.50b0 +opentelemetry-instrumentation-wsgi==0.50b0 +opentelemetry-semantic-conventions==0.50b0 +opentelemetry-util-http==0.50b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -urllib3==1.26.19 +urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/a0f2001.txt b/.riot/requirements/a0f2001.txt index 0fc05775a5d..1e2f66ee1e1 100644 --- a/.riot/requirements/a0f2001.txt +++ b/.riot/requirements/a0f2001.txt @@ -2,47 +2,47 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --no-annotate .riot/requirements/a0f2001.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/a0f2001.in # -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.0 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.10 +deprecated==1.2.15 flask==2.1.3 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 -opentelemetry-api==1.26.0 -opentelemetry-instrumentation==0.47b0 -opentelemetry-instrumentation-flask==0.47b0 -opentelemetry-instrumentation-wsgi==0.47b0 -opentelemetry-semantic-conventions==0.47b0 -opentelemetry-util-http==0.47b0 +opentelemetry-api==1.29.0 +opentelemetry-instrumentation==0.50b0 +opentelemetry-instrumentation-flask==0.50b0 +opentelemetry-instrumentation-wsgi==0.50b0 +opentelemetry-semantic-conventions==0.50b0 +opentelemetry-util-http==0.50b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -urllib3==1.26.19 +urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -# setuptools +setuptools==75.7.0 diff --git a/.riot/requirements/a8351f1.txt b/.riot/requirements/a8351f1.txt index 15c5c7af338..5b8e590f7a4 100644 --- a/.riot/requirements/a8351f1.txt +++ b/.riot/requirements/a8351f1.txt @@ -4,22 +4,22 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/a8351f1.in # -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.0 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.10 +deprecated==1.2.15 exceptiongroup==1.2.2 flask==2.1.3 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 +idna==3.10 importlib-metadata==8.0.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 opentelemetry-api==1.26.0 @@ -29,22 +29,22 @@ opentelemetry-instrumentation-wsgi==0.47b0 opentelemetry-semantic-conventions==0.47b0 opentelemetry-util-http==0.47b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==1.26.19 +tomli==2.2.1 +urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/adb0290.txt b/.riot/requirements/adb0290.txt index faf9aac2cc0..28eafd82e1f 100644 --- a/.riot/requirements/adb0290.txt +++ b/.riot/requirements/adb0290.txt @@ -4,51 +4,51 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/adb0290.in # -amqp==5.2.0 -attrs==24.2.0 -billiard==4.2.0 +amqp==5.3.1 +attrs==24.3.0 +billiard==4.2.1 celery==5.4.0 -certifi==2024.8.30 -charset-normalizer==3.3.2 -click==8.1.7 +certifi==2024.12.14 +charset-normalizer==3.4.1 +click==8.1.8 click-didyoumean==0.3.1 click-plugins==1.1.1 click-repl==0.3.0 -coverage[toml]==7.6.1 +coverage[toml]==7.6.10 django==2.2.1 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.8 -importlib-metadata==8.4.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 -kombu==5.4.0 +kombu==5.4.2 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -prompt-toolkit==3.0.47 -pytest==8.3.2 -pytest-cov==5.0.0 +prompt-toolkit==3.0.48 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 python-dateutil==2.9.0.post0 -pytz==2024.1 +pytz==2024.2 requests==2.32.3 -six==1.16.0 +six==1.17.0 sortedcontainers==2.4.0 sqlalchemy==1.2.19 -sqlparse==0.5.1 -tomli==2.0.1 +sqlparse==0.5.3 +tomli==2.2.1 typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==2.2.2 +tzdata==2024.2 +urllib3==2.3.0 vine==5.1.0 wcwidth==0.2.13 -zipp==3.20.1 +zipp==3.21.0 zope-event==5.0 -zope-interface==7.0.3 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==74.0.0 +setuptools==75.7.0 diff --git a/.riot/requirements/afc1791.txt b/.riot/requirements/afc1791.txt index 2a3cfd4447d..f5b76fc758a 100644 --- a/.riot/requirements/afc1791.txt +++ b/.riot/requirements/afc1791.txt @@ -2,10 +2,10 @@ # This file is autogenerated by pip-compile with Python 3.13 # by the following command: # -# pip-compile --no-annotate .riot/requirements/afc1791.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/afc1791.in # attrs==24.3.0 -coverage[toml]==7.6.9 +coverage[toml]==7.6.10 gevent==24.11.1 greenlet==3.1.1 hypothesis==6.45.0 @@ -24,4 +24,4 @@ zope-event==5.0 zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -# setuptools +setuptools==75.7.0 diff --git a/.riot/requirements/b1df5a4.txt b/.riot/requirements/b1df5a4.txt index d5ffb80461e..3d202e5eeba 100644 --- a/.riot/requirements/b1df5a4.txt +++ b/.riot/requirements/b1df5a4.txt @@ -4,16 +4,16 @@ # # pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/b1df5a4.in # -attrs==23.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 +attrs==24.2.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 coverage[toml]==7.2.7 exceptiongroup==1.2.2 gevent==22.10.2 -greenlet==3.0.3 -gunicorn==22.0.0 +greenlet==3.1.1 +gunicorn==23.0.0 hypothesis==6.45.0 -idna==3.7 +idna==3.10 importlib-metadata==6.7.0 iniconfig==2.0.0 mock==5.1.0 diff --git a/.riot/requirements/b1eb794.txt b/.riot/requirements/b1eb794.txt index a29a9e4ac1b..52606cb1258 100644 --- a/.riot/requirements/b1eb794.txt +++ b/.riot/requirements/b1eb794.txt @@ -4,29 +4,29 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/b1eb794.in # -attrs==23.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.0 -gevent==24.2.1 -greenlet==3.0.3 -gunicorn==22.0.0 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +gevent==24.11.1 +greenlet==3.1.1 +gunicorn==23.0.0 hypothesis==6.45.0 -idna==3.7 +idna==3.10 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.32.3 sortedcontainers==2.4.0 -urllib3==2.2.2 +urllib3==2.3.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/b1fd8ec.txt b/.riot/requirements/b1fd8ec.txt index 8f6cdae803e..c08691d7fa4 100644 --- a/.riot/requirements/b1fd8ec.txt +++ b/.riot/requirements/b1fd8ec.txt @@ -4,47 +4,47 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/b1fd8ec.in # -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.0 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.10 +deprecated==1.2.15 exceptiongroup==1.2.2 flask==2.1.3 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 -opentelemetry-api==1.26.0 -opentelemetry-instrumentation==0.47b0 -opentelemetry-instrumentation-flask==0.47b0 -opentelemetry-instrumentation-wsgi==0.47b0 -opentelemetry-semantic-conventions==0.47b0 -opentelemetry-util-http==0.47b0 +opentelemetry-api==1.29.0 +opentelemetry-instrumentation==0.50b0 +opentelemetry-instrumentation-flask==0.50b0 +opentelemetry-instrumentation-wsgi==0.50b0 +opentelemetry-semantic-conventions==0.50b0 +opentelemetry-util-http==0.50b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==1.26.19 +tomli==2.2.1 +urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/b403d9d.txt b/.riot/requirements/b403d9d.txt index 1cb46c6afb0..b3ccfe59066 100644 --- a/.riot/requirements/b403d9d.txt +++ b/.riot/requirements/b403d9d.txt @@ -5,20 +5,20 @@ # pip-compile --allow-unsafe --no-annotate .riot/requirements/b403d9d.in # aiobotocore==2.3.1 -aiohappyeyeballs==2.4.3 -aiohttp==3.10.9 +aiohappyeyeballs==2.4.4 +aiohttp==3.11.11 aioitertools==0.12.0 -aiosignal==1.3.1 -attrs==24.2.0 +aiosignal==1.3.2 +attrs==24.3.0 botocore==1.24.21 -certifi==2024.8.30 -charset-normalizer==3.3.2 -coverage[toml]==7.6.1 -elastic-transport==8.15.0 -elasticsearch==8.15.1 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +elastic-transport==8.15.1 +elasticsearch==8.17.0 events==0.5 -frozenlist==1.4.1 -gevent==24.2.1 +frozenlist==1.5.0 +gevent==24.11.1 greenlet==3.1.1 hypothesis==6.45.0 idna==3.10 @@ -26,24 +26,25 @@ iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 multidict==6.1.0 -opensearch-py==2.7.1 +opensearch-py==2.8.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 +propcache==0.2.1 pynamodb==5.5.1 -pytest==8.3.3 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 python-dateutil==2.9.0.post0 requests==2.32.3 -six==1.16.0 +six==1.17.0 sortedcontainers==2.4.0 urllib3==1.26.20 -wrapt==1.16.0 -yarl==1.13.1 +wrapt==1.17.0 +yarl==1.18.3 zope-event==5.0 -zope-interface==7.0.3 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/b83f7ca.txt b/.riot/requirements/b83f7ca.txt index 72d6ac027ea..43a27df48bc 100644 --- a/.riot/requirements/b83f7ca.txt +++ b/.riot/requirements/b83f7ca.txt @@ -4,10 +4,10 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/b83f7ca.in # -attrs==24.2.0 -coverage[toml]==7.6.3 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.10.2 +gevent==24.11.1 greenlet==3.1.1 gunicorn[gevent]==23.0.0 hypothesis==6.45.0 @@ -16,22 +16,22 @@ iniconfig==2.0.0 lz4==4.3.3 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 py-cpuinfo==8.0.0 -pytest==8.3.3 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 +pytest-benchmark==5.1.0 +pytest-cov==6.0.0 pytest-cpp==2.6.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 -tomli==2.0.2 -uwsgi==2.0.27 -zipp==3.20.2 +tomli==2.2.1 +uwsgi==2.0.28 +zipp==3.21.0 zope-event==5.0 -zope-interface==7.1.0 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.2.0 +setuptools==75.7.0 diff --git a/.riot/requirements/b92b3b0.txt b/.riot/requirements/b92b3b0.txt index 112c5264b96..5ca3a9a729f 100644 --- a/.riot/requirements/b92b3b0.txt +++ b/.riot/requirements/b92b3b0.txt @@ -4,25 +4,25 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/b92b3b0.in # -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 -tomli==2.0.1 +tomli==2.2.1 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/c7b5ba5.txt b/.riot/requirements/ba009af.txt similarity index 64% rename from .riot/requirements/c7b5ba5.txt rename to .riot/requirements/ba009af.txt index b600cea7664..7a653d3034f 100644 --- a/.riot/requirements/c7b5ba5.txt +++ b/.riot/requirements/ba009af.txt @@ -2,25 +2,25 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/c7b5ba5.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/ba009af.in # aiobotocore==2.3.1 -aiohappyeyeballs==2.4.3 -aiohttp==3.10.10 +aiohappyeyeballs==2.4.4 +aiohttp==3.11.11 aioitertools==0.12.0 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==24.2.0 +aiosignal==1.3.2 +async-timeout==5.0.1 +attrs==24.3.0 botocore==1.24.21 -certifi==2024.8.30 -charset-normalizer==3.4.0 -coverage[toml]==7.6.4 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 elastic-transport==8.15.1 -elasticsearch==8.15.1 +elasticsearch==8.17.0 events==0.5 exceptiongroup==1.2.2 frozenlist==1.5.0 -gevent==22.10.1 +gevent==21.1.2 greenlet==1.1.3.post0 hypothesis==6.45.0 idna==3.10 @@ -29,28 +29,28 @@ iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 multidict==6.1.0 -opensearch-py==2.7.1 +opensearch-py==2.8.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -propcache==0.2.0 +propcache==0.2.1 pynamodb==5.5.1 -pytest==8.3.3 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 pytest-randomly==3.16.0 python-dateutil==2.9.0.post0 requests==2.32.3 -six==1.16.0 +six==1.17.0 sortedcontainers==2.4.0 -tomli==2.0.2 +tomli==2.2.1 typing-extensions==4.12.2 urllib3==1.26.20 -wrapt==1.16.0 -yarl==1.16.0 -zipp==3.20.2 +wrapt==1.17.0 +yarl==1.18.3 +zipp==3.21.0 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.2.0 +setuptools==75.7.0 diff --git a/.riot/requirements/bbb3af0.txt b/.riot/requirements/bbb3af0.txt index 5969bf60e1a..0c47cba8e87 100644 --- a/.riot/requirements/bbb3af0.txt +++ b/.riot/requirements/bbb3af0.txt @@ -4,47 +4,47 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/bbb3af0.in # -amqp==5.2.0 +amqp==5.3.1 asgiref==3.8.1 -attrs==24.2.0 -billiard==4.2.0 +attrs==24.3.0 +billiard==4.2.1 celery==5.4.0 -certifi==2024.8.30 -charset-normalizer==3.3.2 -click==8.1.7 +certifi==2024.12.14 +charset-normalizer==3.4.1 +click==8.1.8 click-didyoumean==0.3.1 click-plugins==1.1.1 click-repl==0.3.0 -coverage[toml]==7.6.1 -django==5.1 -gevent==24.2.1 -greenlet==3.0.3 +coverage[toml]==7.6.10 +django==5.1.4 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.8 +idna==3.10 iniconfig==2.0.0 -kombu==5.4.0 +kombu==5.4.2 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -prompt-toolkit==3.0.47 -pytest==8.3.2 -pytest-cov==5.0.0 +prompt-toolkit==3.0.48 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 python-dateutil==2.9.0.post0 requests==2.32.3 -six==1.16.0 +six==1.17.0 sortedcontainers==2.4.0 -sqlalchemy==2.0.32 -sqlparse==0.5.1 +sqlalchemy==2.0.36 +sqlparse==0.5.3 typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==2.2.2 +tzdata==2024.2 +urllib3==2.3.0 vine==5.1.0 wcwidth==0.2.13 zope-event==5.0 -zope-interface==7.0.3 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==74.0.0 +setuptools==75.7.0 diff --git a/.riot/requirements/bc9aff8.txt b/.riot/requirements/bc9aff8.txt new file mode 100644 index 00000000000..25b83e2618d --- /dev/null +++ b/.riot/requirements/bc9aff8.txt @@ -0,0 +1,25 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/bc9aff8.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +exceptiongroup==1.2.2 +greenlet==3.0.3 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +mysql-connector-python==9.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +psycopg2-binary==2.9.10 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +sqlalchemy==1.3.24 +tomli==2.2.1 diff --git a/.riot/requirements/bdada1a.txt b/.riot/requirements/bdada1a.txt new file mode 100644 index 00000000000..2a394359c49 --- /dev/null +++ b/.riot/requirements/bdada1a.txt @@ -0,0 +1,24 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/bdada1a.in +# +attrs==24.3.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 +falcon==3.1.3 +hypothesis==6.45.0 +importlib-metadata==8.5.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +sortedcontainers==2.4.0 +tomli==2.2.1 +zipp==3.20.2 diff --git a/.riot/requirements/c3e8b1a.txt b/.riot/requirements/c3e8b1a.txt index 5ff5316a4b2..6a2e37e2a58 100644 --- a/.riot/requirements/c3e8b1a.txt +++ b/.riot/requirements/c3e8b1a.txt @@ -4,22 +4,22 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/c3e8b1a.in # -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.0 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.10 +deprecated==1.2.15 exceptiongroup==1.2.2 flask==2.1.3 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 +idna==3.10 importlib-metadata==8.0.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 opentelemetry-api==1.26.0 @@ -29,22 +29,22 @@ opentelemetry-instrumentation-wsgi==0.47b0 opentelemetry-semantic-conventions==0.47b0 opentelemetry-util-http==0.47b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==1.26.19 +tomli==2.2.1 +urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/c43afd8.txt b/.riot/requirements/c43afd8.txt deleted file mode 100644 index abca1fbd489..00000000000 --- a/.riot/requirements/c43afd8.txt +++ /dev/null @@ -1,20 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/c43afd8.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -falcon==3.1.3 -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 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/c74560f.txt b/.riot/requirements/c74560f.txt index 5bc94a35733..06136e66715 100644 --- a/.riot/requirements/c74560f.txt +++ b/.riot/requirements/c74560f.txt @@ -4,29 +4,29 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/c74560f.in # -async-timeout==4.0.3 -attrs==23.2.0 -coverage[toml]==7.6.0 +async-timeout==5.0.1 +attrs==24.3.0 +coverage[toml]==7.6.1 exceptiongroup==1.2.2 gevent==24.2.1 -greenlet==3.0.3 +greenlet==3.1.1 hypothesis==6.45.0 -importlib-metadata==8.2.0 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 +pytest==8.3.4 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 -redis==5.0.7 +redis==5.2.1 sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.19.2 +tomli==2.2.1 +zipp==3.20.2 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.3.0 diff --git a/.riot/requirements/c77bbb6.txt b/.riot/requirements/c77bbb6.txt index 3f53bcba5e6..9a655b3df0c 100644 --- a/.riot/requirements/c77bbb6.txt +++ b/.riot/requirements/c77bbb6.txt @@ -4,45 +4,45 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/c77bbb6.in # -attrs==24.2.0 -certifi==2024.8.30 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.1 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.10 +deprecated==1.2.15 flask==2.1.3 -gevent==24.2.1 +gevent==24.11.1 greenlet==3.1.1 hypothesis==6.45.0 idna==3.10 -importlib-metadata==8.4.0 +importlib-metadata==8.5.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 -opentelemetry-api==1.27.0 -opentelemetry-instrumentation==0.48b0 -opentelemetry-instrumentation-flask==0.48b0 -opentelemetry-instrumentation-wsgi==0.48b0 -opentelemetry-semantic-conventions==0.48b0 -opentelemetry-util-http==0.48b0 +opentelemetry-api==1.29.0 +opentelemetry-instrumentation==0.50b0 +opentelemetry-instrumentation-flask==0.50b0 +opentelemetry-instrumentation-wsgi==0.50b0 +opentelemetry-semantic-conventions==0.50b0 +opentelemetry-util-http==0.50b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.3 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.20.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==7.0.3 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/c8b476b.txt b/.riot/requirements/c8b476b.txt index d8fd4322d7f..e6d5e735b27 100644 --- a/.riot/requirements/c8b476b.txt +++ b/.riot/requirements/c8b476b.txt @@ -4,11 +4,11 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/c8b476b.in # -attrs==24.2.0 -certifi==2024.8.30 -charset-normalizer==3.3.2 -coverage[toml]==7.6.1 -gevent==24.2.1 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +gevent==24.11.1 greenlet==3.1.1 gunicorn==20.0.4 hypothesis==6.45.0 @@ -16,17 +16,17 @@ idna==3.10 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.3 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.32.3 sortedcontainers==2.4.0 -urllib3==2.2.3 +urllib3==2.3.0 zope-event==5.0 -zope-interface==7.0.3 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/ccf18c9.txt b/.riot/requirements/ccf18c9.txt deleted file mode 100644 index ce270ef4272..00000000000 --- a/.riot/requirements/ccf18c9.txt +++ /dev/null @@ -1,20 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/ccf18c9.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -falcon==3.1.3 -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 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/cdfce2e.txt b/.riot/requirements/cdfce2e.txt new file mode 100644 index 00000000000..1b93f8e5a0e --- /dev/null +++ b/.riot/requirements/cdfce2e.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/cdfce2e.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +falcon==3.1.3 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/ce6cd33.txt b/.riot/requirements/ce6cd33.txt index a54e367a3dc..c9d940f1e5c 100644 --- a/.riot/requirements/ce6cd33.txt +++ b/.riot/requirements/ce6cd33.txt @@ -4,49 +4,49 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/ce6cd33.in # -amqp==5.2.0 -attrs==24.2.0 -billiard==4.2.0 +amqp==5.3.1 +attrs==24.3.0 +billiard==4.2.1 celery==5.4.0 -certifi==2024.8.30 -charset-normalizer==3.3.2 -click==8.1.7 +certifi==2024.12.14 +charset-normalizer==3.4.1 +click==8.1.8 click-didyoumean==0.3.1 click-plugins==1.1.1 click-repl==0.3.0 -coverage[toml]==7.6.1 +coverage[toml]==7.6.10 django==2.2.1 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.8 +idna==3.10 iniconfig==2.0.0 -kombu==5.4.0 +kombu==5.4.2 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -prompt-toolkit==3.0.47 -pytest==8.3.2 -pytest-cov==5.0.0 +prompt-toolkit==3.0.48 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 python-dateutil==2.9.0.post0 -pytz==2024.1 +pytz==2024.2 requests==2.32.3 -six==1.16.0 +six==1.17.0 sortedcontainers==2.4.0 sqlalchemy==1.2.19 -sqlparse==0.5.1 -tomli==2.0.1 +sqlparse==0.5.3 +tomli==2.2.1 typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==2.2.2 +tzdata==2024.2 +urllib3==2.3.0 vine==5.1.0 wcwidth==0.2.13 zope-event==5.0 -zope-interface==7.0.3 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==74.0.0 +setuptools==75.7.0 diff --git a/.riot/requirements/d0355c2.txt b/.riot/requirements/d0355c2.txt index a64f493f7f9..087e858b6e1 100644 --- a/.riot/requirements/d0355c2.txt +++ b/.riot/requirements/d0355c2.txt @@ -5,11 +5,11 @@ # pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/d0355c2.in # async-timeout==4.0.3 -attrs==23.2.0 +attrs==24.2.0 coverage[toml]==7.2.7 exceptiongroup==1.2.2 gevent==22.10.2 -greenlet==3.0.3 +greenlet==3.1.1 hypothesis==6.45.0 importlib-metadata==6.7.0 iniconfig==2.0.0 @@ -21,7 +21,7 @@ pytest==7.4.4 pytest-cov==4.1.0 pytest-mock==3.11.1 pytest-randomly==3.12.0 -redis==5.0.7 +redis==5.0.8 sortedcontainers==2.4.0 tomli==2.0.1 typing-extensions==4.7.1 diff --git a/.riot/requirements/d171c08.txt b/.riot/requirements/d171c08.txt index a90370ee256..96b05c92f6a 100644 --- a/.riot/requirements/d171c08.txt +++ b/.riot/requirements/d171c08.txt @@ -4,24 +4,24 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/d171c08.in # -attrs==23.2.0 -coverage[toml]==7.6.0 -gevent==24.2.1 -greenlet==3.0.3 +attrs==24.3.0 +coverage[toml]==7.6.10 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 -msgpack==1.0.8 +msgpack==1.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/d44f455.txt b/.riot/requirements/d44f455.txt index 6bf699d0ac7..92fa1159c1b 100644 --- a/.riot/requirements/d44f455.txt +++ b/.riot/requirements/d44f455.txt @@ -4,23 +4,23 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/d44f455.in # -attrs==23.2.0 -coverage[toml]==7.6.0 -gevent==24.2.1 -greenlet==3.0.3 +attrs==24.3.0 +coverage[toml]==7.6.10 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/f709b80.txt b/.riot/requirements/d8c9ddb.txt similarity index 81% rename from .riot/requirements/f709b80.txt rename to .riot/requirements/d8c9ddb.txt index 4d8eec013bb..3d33b05725f 100644 --- a/.riot/requirements/f709b80.txt +++ b/.riot/requirements/d8c9ddb.txt @@ -2,18 +2,18 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/f709b80.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/d8c9ddb.in # aiofiles==24.1.0 anyio==4.5.2 -attrs==24.2.0 -certifi==2024.8.30 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==3.4.0 coverage[toml]==7.6.1 exceptiongroup==1.2.2 fastapi==0.90.1 h11==0.14.0 -httpcore==1.0.6 +httpcore==1.0.7 httpx==0.27.2 hypothesis==6.45.0 idna==3.10 @@ -21,20 +21,20 @@ importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pydantic==1.10.18 -pytest==8.3.3 +pydantic==1.10.19 +pytest==8.3.4 pytest-asyncio==0.21.1 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 -python-multipart==0.0.12 +python-multipart==0.0.20 requests==2.32.3 sniffio==1.3.1 sortedcontainers==2.4.0 starlette==0.23.1 -tomli==2.0.2 +tomli==2.2.1 typing-extensions==4.12.2 urllib3==2.2.3 zipp==3.20.2 diff --git a/.riot/requirements/dbcf3c6.txt b/.riot/requirements/dbcf3c6.txt new file mode 100644 index 00000000000..40184c2cbde --- /dev/null +++ b/.riot/requirements/dbcf3c6.txt @@ -0,0 +1,24 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/dbcf3c6.in +# +attrs==24.2.0 +coverage[toml]==7.6.9 +greenlet==3.1.0 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +mysql-connector-python==9.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +psycopg2-binary==2.9.10 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +sqlalchemy==2.0.36 +typing-extensions==4.12.2 diff --git a/.riot/requirements/dbdd8c0.txt b/.riot/requirements/dbdd8c0.txt deleted file mode 100644 index 2b366f72c7d..00000000000 --- a/.riot/requirements/dbdd8c0.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/dbdd8c0.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -falcon==3.1.3 -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-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/ddba314.txt b/.riot/requirements/ddba314.txt index e99a4ed6a0f..5ec0de6aa63 100644 --- a/.riot/requirements/ddba314.txt +++ b/.riot/requirements/ddba314.txt @@ -5,20 +5,20 @@ # pip-compile --allow-unsafe --no-annotate .riot/requirements/ddba314.in # aiobotocore==2.3.1 -aiohappyeyeballs==2.4.3 -aiohttp==3.10.10 +aiohappyeyeballs==2.4.4 +aiohttp==3.11.11 aioitertools==0.12.0 -aiosignal==1.3.1 -attrs==24.2.0 +aiosignal==1.3.2 +attrs==24.3.0 botocore==1.24.21 -certifi==2024.8.30 -charset-normalizer==3.4.0 -coverage[toml]==7.6.4 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 elastic-transport==8.15.1 -elasticsearch==8.15.1 +elasticsearch==8.17.0 events==0.5 frozenlist==1.5.0 -gevent==24.10.3 +gevent==24.11.1 greenlet==3.1.1 hypothesis==6.45.0 idna==3.10 @@ -26,25 +26,25 @@ iniconfig==2.0.0 jmespath==1.0.1 mock==5.1.0 multidict==6.1.0 -opensearch-py==2.7.1 +opensearch-py==2.8.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -propcache==0.2.0 +propcache==0.2.1 pynamodb==5.5.1 -pytest==8.3.3 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 pytest-randomly==3.16.0 python-dateutil==2.9.0.post0 requests==2.32.3 -six==1.16.0 +six==1.17.0 sortedcontainers==2.4.0 urllib3==1.26.20 -wrapt==1.16.0 -yarl==1.16.0 +wrapt==1.17.0 +yarl==1.18.3 zope-event==5.0 -zope-interface==7.1.1 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.2.0 +setuptools==75.7.0 diff --git a/.riot/requirements/de578a7.txt b/.riot/requirements/de578a7.txt index 351c740cf9d..45c73555c71 100644 --- a/.riot/requirements/de578a7.txt +++ b/.riot/requirements/de578a7.txt @@ -4,24 +4,24 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/de578a7.in # -attrs==23.2.0 -coverage[toml]==7.6.0 -gevent==24.2.1 -greenlet==3.0.3 +attrs==24.3.0 +coverage[toml]==7.6.10 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 -msgpack==1.0.8 +msgpack==1.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/e20bbeb.txt b/.riot/requirements/e20bbeb.txt index f14f6548c9a..1ea4d0c930d 100644 --- a/.riot/requirements/e20bbeb.txt +++ b/.riot/requirements/e20bbeb.txt @@ -4,22 +4,22 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/e20bbeb.in # -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.0 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.10 +deprecated==1.2.15 exceptiongroup==1.2.2 flask==2.1.3 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.2.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 opentelemetry-api==1.15.0 @@ -29,22 +29,22 @@ opentelemetry-instrumentation-wsgi==0.45b0 opentelemetry-semantic-conventions==0.45b0 opentelemetry-util-http==0.45b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==1.26.19 +tomli==2.2.1 +urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/5a5524a.txt b/.riot/requirements/e312e0d.txt similarity index 90% rename from .riot/requirements/5a5524a.txt rename to .riot/requirements/e312e0d.txt index f4faac2d0ad..08cba09f0c4 100644 --- a/.riot/requirements/5a5524a.txt +++ b/.riot/requirements/e312e0d.txt @@ -2,13 +2,13 @@ # This file is autogenerated by pip-compile with Python 3.7 # by the following command: # -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/5a5524a.in +# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/e312e0d.in # aiofiles==23.2.1 annotated-types==0.5.0 anyio==3.7.1 attrs==24.2.0 -certifi==2024.8.30 +certifi==2024.12.14 charset-normalizer==3.4.0 coverage[toml]==7.2.7 exceptiongroup==1.2.2 diff --git a/.riot/requirements/e68fea2.txt b/.riot/requirements/e68fea2.txt index 6ab46c7b910..064c974a99a 100644 --- a/.riot/requirements/e68fea2.txt +++ b/.riot/requirements/e68fea2.txt @@ -4,31 +4,31 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/e68fea2.in # -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==24.3.0 +coverage[toml]==7.6.1 exceptiongroup==1.2.2 gevent==24.2.1 -greenlet==3.0.3 +greenlet==3.1.1 httpretty==1.1.4 hypothesis==6.45.0 -importlib-metadata==8.2.0 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pyfakefs==5.6.0 -pytest==8.3.1 +pyfakefs==5.7.3 +pytest==8.3.4 pytest-asyncio==0.23.8 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.19.2 +tomli==2.2.1 +zipp==3.20.2 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.3.0 diff --git a/.riot/requirements/edd1c7f.txt b/.riot/requirements/edd1c7f.txt deleted file mode 100644 index 8be2caace8c..00000000000 --- a/.riot/requirements/edd1c7f.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/edd1c7f.in -# -attrs==23.2.0 -coverage[toml]==7.4.4 -greenlet==3.0.3 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.3.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.4.0 -psycopg2-binary==2.9.9 -pytest==8.1.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.28 -typing-extensions==4.10.0 diff --git a/.riot/requirements/ee0b75a.txt b/.riot/requirements/ee0b75a.txt index d7c20329467..d31d339e27b 100644 --- a/.riot/requirements/ee0b75a.txt +++ b/.riot/requirements/ee0b75a.txt @@ -4,29 +4,29 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/ee0b75a.in # -async-timeout==4.0.3 -attrs==23.2.0 -coverage[toml]==7.6.0 +async-timeout==5.0.1 +attrs==24.3.0 +coverage[toml]==7.6.10 exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.0.3 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 -importlib-metadata==8.2.0 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -redis==5.0.7 +pytest-randomly==3.16.0 +redis==5.2.1 sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.19.2 +tomli==2.2.1 +zipp==3.21.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/eeaed0d.txt b/.riot/requirements/eeaed0d.txt new file mode 100644 index 00000000000..e91eca7391f --- /dev/null +++ b/.riot/requirements/eeaed0d.txt @@ -0,0 +1,20 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/eeaed0d.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pyodbc==5.2.0 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 diff --git a/.riot/requirements/f066985.txt b/.riot/requirements/f066985.txt deleted file mode 100644 index debd8ebffab..00000000000 --- a/.riot/requirements/f066985.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/f066985.in -# -attrs==23.2.0 -coverage[toml]==7.4.1 -exceptiongroup==1.2.0 -glob2==0.7 -hypothesis==6.45.0 -iniconfig==2.0.0 -mako==1.3.2 -markupsafe==2.1.5 -mock==5.1.0 -more-itertools==8.10.0 -msgpack==1.0.7 -opentracing==2.4.0 -packaging==23.2 -parse==1.20.1 -parse-type==0.6.2 -pluggy==1.4.0 -py==1.11.0 -pytest==8.0.0 -pytest-bdd==4.1.0 -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 diff --git a/.riot/requirements/f15bee1.txt b/.riot/requirements/f15bee1.txt new file mode 100644 index 00000000000..ce381a0ee85 --- /dev/null +++ b/.riot/requirements/f15bee1.txt @@ -0,0 +1,24 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/f15bee1.in +# +attrs==24.3.0 +coverage[toml]==7.6.9 +greenlet==3.1.0 +hypothesis==6.45.0 +iniconfig==2.0.0 +mock==5.1.0 +mysql-connector-python==9.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +psycopg2-binary==2.9.10 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +sortedcontainers==2.4.0 +sqlalchemy==2.0.36 +typing-extensions==4.12.2 diff --git a/.riot/requirements/f19daa4.txt b/.riot/requirements/f19daa4.txt index 14d329e1aeb..eb8d7a6aedb 100644 --- a/.riot/requirements/f19daa4.txt +++ b/.riot/requirements/f19daa4.txt @@ -4,22 +4,22 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/f19daa4.in # -attrs==23.2.0 -certifi==2024.7.4 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.0 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.1 +deprecated==1.2.15 exceptiongroup==1.2.2 flask==2.1.3 gevent==24.2.1 -greenlet==3.0.3 +greenlet==3.1.1 hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.2.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 opentelemetry-api==1.15.0 @@ -29,22 +29,22 @@ opentelemetry-instrumentation-wsgi==0.45b0 opentelemetry-semantic-conventions==0.45b0 opentelemetry-util-http==0.45b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.2 +pytest==8.3.4 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 -tomli==2.0.1 -urllib3==1.26.19 +tomli==2.2.1 +urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.19.2 +wrapt==1.17.0 +zipp==3.20.2 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.3.0 diff --git a/.riot/requirements/f4fafb3.txt b/.riot/requirements/f4fafb3.txt index 09db801e27b..a659cb93729 100644 --- a/.riot/requirements/f4fafb3.txt +++ b/.riot/requirements/f4fafb3.txt @@ -4,21 +4,21 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/f4fafb3.in # -attrs==24.2.0 -certifi==2024.8.30 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==2.1.1 -click==8.1.7 -coverage[toml]==7.6.1 -deprecated==1.2.14 +click==8.1.8 +coverage[toml]==7.6.10 +deprecated==1.2.15 flask==2.1.3 -gevent==24.2.1 +gevent==24.11.1 greenlet==3.1.1 hypothesis==6.45.0 idna==3.10 importlib-metadata==8.0.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.0.1 mock==5.1.0 opentelemetry-api==1.26.0 @@ -28,21 +28,21 @@ opentelemetry-instrumentation-wsgi==0.47b0 opentelemetry-semantic-conventions==0.47b0 opentelemetry-util-http==0.47b0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.3 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 requests==2.28.1 sortedcontainers==2.4.0 urllib3==1.26.20 werkzeug==2.1.2 -wrapt==1.16.0 -zipp==3.20.2 +wrapt==1.17.0 +zipp==3.21.0 zope-event==5.0 -zope-interface==7.0.3 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/f65661f.txt b/.riot/requirements/f65661f.txt index a83263be267..0c9b95e3c59 100644 --- a/.riot/requirements/f65661f.txt +++ b/.riot/requirements/f65661f.txt @@ -4,24 +4,24 @@ # # pip-compile --allow-unsafe --no-annotate .riot/requirements/f65661f.in # -attrs==23.2.0 -coverage[toml]==7.6.0 -gevent==24.2.1 -greenlet==3.0.3 +attrs==24.3.0 +coverage[toml]==7.6.10 +gevent==24.11.1 +greenlet==3.1.1 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -redis==5.0.7 +pytest-randomly==3.16.0 +redis==5.2.1 sortedcontainers==2.4.0 zope-event==5.0 -zope-interface==6.4.post2 +zope-interface==7.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools==75.7.0 diff --git a/.riot/requirements/1912989.txt b/.riot/requirements/f781048.txt similarity index 66% rename from .riot/requirements/1912989.txt rename to .riot/requirements/f781048.txt index 3c74ad97a75..1b4a6f72034 100644 --- a/.riot/requirements/1912989.txt +++ b/.riot/requirements/f781048.txt @@ -2,37 +2,37 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1912989.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/f781048.in # aiofiles==24.1.0 annotated-types==0.7.0 anyio==3.7.1 -attrs==24.2.0 -certifi==2024.8.30 +attrs==24.3.0 +certifi==2024.12.14 charset-normalizer==3.4.0 -coverage[toml]==7.6.3 -fastapi==0.115.2 +coverage[toml]==7.6.9 +fastapi==0.115.6 h11==0.14.0 -httpcore==1.0.6 +httpcore==1.0.7 httpx==0.27.2 hypothesis==6.45.0 idna==3.10 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pydantic==2.9.2 -pydantic-core==2.23.4 -pytest==8.3.3 +pydantic==2.10.3 +pydantic-core==2.27.1 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-multipart==0.0.12 +pytest-randomly==3.16.0 +python-multipart==0.0.20 requests==2.32.3 sniffio==1.3.1 sortedcontainers==2.4.0 -starlette==0.40.0 +starlette==0.41.3 typing-extensions==4.12.2 urllib3==2.2.3 diff --git a/.riot/requirements/fb47988.txt b/.riot/requirements/fb47988.txt index 5bb283612e2..e9cc2d8236d 100644 --- a/.riot/requirements/fb47988.txt +++ b/.riot/requirements/fb47988.txt @@ -4,28 +4,28 @@ # # pip-compile --no-annotate .riot/requirements/fb47988.in # -attrs==23.2.0 -coverage[toml]==7.4.1 -exceptiongroup==1.2.0 +attrs==24.3.0 +coverage[toml]==7.6.9 +exceptiongroup==1.2.2 glob2==0.7 hypothesis==6.45.0 iniconfig==2.0.0 -mako==1.3.2 -markupsafe==2.1.5 +mako==1.3.8 +markupsafe==3.0.2 mock==5.1.0 more-itertools==8.10.0 -msgpack==1.0.7 +msgpack==1.1.0 opentracing==2.4.0 -packaging==23.2 -parse==1.20.1 -parse-type==0.6.2 -pluggy==1.4.0 +packaging==24.2 +parse==1.20.2 +parse-type==0.6.4 +pluggy==1.5.0 py==1.11.0 -pytest==8.0.0 +pytest==8.3.4 pytest-bdd==6.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -six==1.16.0 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +six==1.17.0 sortedcontainers==2.4.0 -tomli==2.0.1 +tomli==2.2.1 diff --git a/.riot/requirements/fd74210.txt b/.riot/requirements/fd74210.txt deleted file mode 100644 index 33429bf35a5..00000000000 --- a/.riot/requirements/fd74210.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/fd74210.in -# -attrs==23.2.0 -coverage[toml]==7.4.4 -greenlet==3.0.3 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.3.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.4.0 -psycopg2-binary==2.9.9 -pytest==8.1.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -sqlalchemy==1.3.24 diff --git a/ddtrace/_trace/tracer.py b/ddtrace/_trace/tracer.py index fa0c89cdd7f..02d5fed7626 100644 --- a/ddtrace/_trace/tracer.py +++ b/ddtrace/_trace/tracer.py @@ -106,14 +106,11 @@ def _default_span_processors_factory( trace_writer: TraceWriter, partial_flush_enabled: bool, partial_flush_min_spans: int, - appsec_enabled: bool, - iast_enabled: bool, compute_stats_enabled: bool, single_span_sampling_rules: List[SpanSamplingRule], agent_url: str, trace_sampler: BaseSampler, profiling_span_processor: EndpointCallCounterProcessor, - apm_opt_out: bool = False, ) -> Tuple[List[SpanProcessor], Optional[Any], List[SpanProcessor]]: # FIXME: type should be AppsecSpanProcessor but we have a cyclic import here """Construct the default list of span processors to use.""" @@ -121,7 +118,9 @@ def _default_span_processors_factory( trace_processors += [ PeerServiceProcessor(_ps_config), BaseServiceProcessor(), - TraceSamplingProcessor(compute_stats_enabled, trace_sampler, single_span_sampling_rules, apm_opt_out), + TraceSamplingProcessor( + compute_stats_enabled, trace_sampler, single_span_sampling_rules, asm_config._apm_opt_out + ), TraceTagsProcessor(), ] trace_processors += trace_filters @@ -130,7 +129,7 @@ def _default_span_processors_factory( span_processors += [TopLevelSpanProcessor()] if asm_config._asm_libddwaf_available: - if appsec_enabled: + if asm_config._asm_enabled: if asm_config._api_security_enabled: from ddtrace.appsec._api_security.api_manager import APIManager @@ -152,7 +151,7 @@ def _default_span_processors_factory( else: appsec_processor = None - if iast_enabled: + if asm_config._iast_enabled: from ddtrace.appsec._iast.processor import AppSecIastSpanProcessor span_processors.append(AppSecIastSpanProcessor()) @@ -229,14 +228,8 @@ def __init__( self.context_provider = context_provider or DefaultContextProvider() # _user_sampler is the backup in case we need to revert from remote config to local self._user_sampler: Optional[BaseSampler] = DatadogSampler() - self._asm_enabled = asm_config._asm_enabled - self._iast_enabled = asm_config._iast_enabled - self._appsec_standalone_enabled = asm_config._appsec_standalone_enabled self._dogstatsd_url = agent.get_stats_url() if dogstatsd_url is None else dogstatsd_url - self._apm_opt_out = self._appsec_standalone_enabled and ( - self._asm_enabled or self._iast_enabled or config._sca_enabled - ) - if self._apm_opt_out: + if asm_config._apm_opt_out: self.enabled = False # Disable compute stats (neither agent or tracer should compute them) config._trace_compute_stats = False @@ -257,8 +250,10 @@ def __init__( agent_url=self._agent_url, dogstatsd=get_dogstatsd_client(self._dogstatsd_url), sync_mode=self._use_sync_mode(), - headers={"Datadog-Client-Computed-Stats": "yes"} if (self._compute_stats or self._apm_opt_out) else {}, - report_metrics=not self._apm_opt_out, + headers={"Datadog-Client-Computed-Stats": "yes"} + if (self._compute_stats or asm_config._apm_opt_out) + else {}, + report_metrics=not asm_config._apm_opt_out, response_callback=self._agent_response_callback, ) self._single_span_sampling_rules: List[SpanSamplingRule] = get_span_sampling_rules() @@ -266,21 +261,17 @@ def __init__( self._partial_flush_enabled = config._partial_flush_enabled self._partial_flush_min_spans = config._partial_flush_min_spans # Direct link to the appsec processor - self._appsec_processor = None self._endpoint_call_counter_span_processor = EndpointCallCounterProcessor() self._span_processors, self._appsec_processor, self._deferred_processors = _default_span_processors_factory( self._filters, self._writer, self._partial_flush_enabled, self._partial_flush_min_spans, - self._asm_enabled, - self._iast_enabled, self._compute_stats, self._single_span_sampling_rules, self._agent_url, self._sampler, self._endpoint_call_counter_span_processor, - self._apm_opt_out, ) if config._data_streams_enabled: # Inline the import to avoid pulling in ddsketch or protobuf @@ -335,7 +326,7 @@ def sampler(self, value): https://ddtrace.readthedocs.io/en/stable/configuration.html#DD_TRACE_SAMPLING_RULES""", category=DDTraceDeprecationWarning, ) - if self._apm_opt_out: + if asm_config._apm_opt_out: log.warning("Cannot set a custom sampler with Standalone ASM mode") return self._sampler = value @@ -407,7 +398,7 @@ def get_log_correlation_context(self, active: Optional[Union[Context, Span]] = N span id of the current active span, as well as the configured service, version, and environment names. If there is no active span, a dictionary with an empty string for each value will be returned. """ - if active is None and (self.enabled or self._apm_opt_out): + if active is None and (self.enabled or asm_config._apm_opt_out): active = self.context_provider.active() if isinstance(active, Span) and active.service: @@ -489,16 +480,15 @@ def configure( self._partial_flush_min_spans = partial_flush_min_spans if appsec_enabled is not None: - self._asm_enabled = asm_config._asm_enabled = appsec_enabled + asm_config._asm_enabled = appsec_enabled if iast_enabled is not None: - self._iast_enabled = asm_config._iast_enabled = iast_enabled + asm_config._iast_enabled = iast_enabled if appsec_standalone_enabled is not None: - self._appsec_standalone_enabled = asm_config._appsec_standalone_enabled = appsec_standalone_enabled + asm_config._appsec_standalone_enabled = appsec_standalone_enabled - if self._appsec_standalone_enabled and (self._asm_enabled or self._iast_enabled or config._sca_enabled): - self._apm_opt_out = True + if asm_config._apm_opt_out: self.enabled = False # Disable compute stats (neither agent or tracer should compute them) config._trace_compute_stats = False @@ -557,7 +547,7 @@ def configure( if writer is not None: self._writer = writer elif any(x is not None for x in [new_url, api_version, sampler, dogstatsd_url, appsec_enabled]): - if self._asm_enabled: + if asm_config._asm_enabled: api_version = "v0.4" self._writer = AgentWriter( self._agent_url, @@ -566,9 +556,11 @@ def configure( api_version=api_version, # if apm opt out, neither agent or tracer should compute the stats headers=( - {"Datadog-Client-Computed-Stats": "yes"} if (compute_stats_enabled or self._apm_opt_out) else {} + {"Datadog-Client-Computed-Stats": "yes"} + if (compute_stats_enabled or asm_config._apm_opt_out) + else {} ), - report_metrics=not self._apm_opt_out, + report_metrics=not asm_config._apm_opt_out, response_callback=self._agent_response_callback, ) elif writer is None and isinstance(self._writer, LogWriter): @@ -601,14 +593,11 @@ def configure( self._writer, self._partial_flush_enabled, self._partial_flush_min_spans, - self._asm_enabled, - self._iast_enabled, self._compute_stats, self._single_span_sampling_rules, self._agent_url, self._sampler, self._endpoint_call_counter_span_processor, - self._apm_opt_out, ) if context_provider is not None: @@ -667,14 +656,11 @@ def _child_after_fork(self): self._writer, self._partial_flush_enabled, self._partial_flush_min_spans, - self._asm_enabled, - self._iast_enabled, self._compute_stats, self._single_span_sampling_rules, self._agent_url, self._sampler, self._endpoint_call_counter_span_processor, - self._apm_opt_out, ) self._new_process = True @@ -859,7 +845,7 @@ def _start_span( self._services.add(service) # Only call span processors if the tracer is enabled (even if APM opted out) - if self.enabled or self._apm_opt_out: + if self.enabled or asm_config._apm_opt_out: for p in chain(self._span_processors, SpanProcessor.__processors__, self._deferred_processors): p.on_span_start(span) self._hooks.emit(self.__class__.start_span, span) @@ -876,7 +862,7 @@ def _on_span_finish(self, span: Span) -> None: log.debug("span %r closing after its parent %r, this is an error when not using async", span, span._parent) # Only call span processors if the tracer is enabled (even if APM opted out) - if self.enabled or self._apm_opt_out: + if self.enabled or asm_config._apm_opt_out: for p in chain(self._span_processors, SpanProcessor.__processors__, self._deferred_processors): p.on_span_finish(span) @@ -954,18 +940,23 @@ def trace( ) def current_root_span(self) -> Optional[Span]: - """Returns the root span of the current execution. + """Returns the local root span of the current execution/process. + + Note: This cannot be used to access the true root span of the trace + in a distributed tracing setup if the actual root span occurred in + another execution/process. - This is useful for attaching information related to the trace as a - whole without needing to add to child spans. + This is useful for attaching information to the local root span + of the current execution/process, which is often also service + entry span. For example:: - # get the root span - root_span = tracer.current_root_span() + # get the local root span + local_root_span = tracer.current_root_span() # set the host just once on the root span - if root_span: - root_span.set_tag('host', '127.0.0.1') + if local_root_span: + local_root_span.set_tag('host', '127.0.0.1') """ span = self.current_span() if span is None: diff --git a/ddtrace/appsec/_capabilities.py b/ddtrace/appsec/_capabilities.py index c173f2d6471..c999b61cb97 100644 --- a/ddtrace/appsec/_capabilities.py +++ b/ddtrace/appsec/_capabilities.py @@ -31,6 +31,7 @@ class Flags(enum.IntFlag): ASM_SESSION_FINGERPRINT = 1 << 33 ASM_NETWORK_FINGERPRINT = 1 << 34 ASM_HEADER_FINGERPRINT = 1 << 35 + ASM_RASP_CMDI = 1 << 37 _ALL_ASM_BLOCKING = ( @@ -49,7 +50,7 @@ class Flags(enum.IntFlag): | Flags.ASM_HEADER_FINGERPRINT ) -_ALL_RASP = Flags.ASM_RASP_SQLI | Flags.ASM_RASP_LFI | Flags.ASM_RASP_SSRF | Flags.ASM_RASP_SHI +_ALL_RASP = Flags.ASM_RASP_SQLI | Flags.ASM_RASP_LFI | Flags.ASM_RASP_SSRF | Flags.ASM_RASP_SHI | Flags.ASM_RASP_CMDI _FEATURE_REQUIRED = Flags.ASM_ACTIVATION | Flags.ASM_AUTO_USER diff --git a/ddtrace/appsec/_common_module_patches.py b/ddtrace/appsec/_common_module_patches.py index 215d8b05ee6..0b455dbba6b 100644 --- a/ddtrace/appsec/_common_module_patches.py +++ b/ddtrace/appsec/_common_module_patches.py @@ -7,16 +7,20 @@ from typing import Callable from typing import Dict from typing import Iterable +from typing import List +from typing import Union from wrapt import FunctionWrapper from wrapt import resolve_path import ddtrace from ddtrace.appsec._asm_request_context import get_blocked +from ddtrace.appsec._constants import EXPLOIT_PREVENTION from ddtrace.appsec._constants import WAF_ACTIONS from ddtrace.appsec._iast._iast_request_context import is_iast_request_enabled from ddtrace.appsec._iast._metrics import _set_metric_iast_instrumented_sink from ddtrace.appsec._iast.constants import VULN_PATH_TRAVERSAL +import ddtrace.contrib.internal.subprocess.patch as subprocess_patch from ddtrace.internal import core from ddtrace.internal._exceptions import BlockingException from ddtrace.internal._unpatched import _gc as gc @@ -30,6 +34,9 @@ _is_patched = False +_RASP_SYSTEM = "rasp_os.system" +_RASP_POPEN = "rasp_Popen" + def patch_common_modules(): global _is_patched @@ -39,7 +46,10 @@ def patch_common_modules(): try_wrap_function_wrapper("urllib.request", "OpenerDirector.open", wrapped_open_ED4CF71136E15EBF) try_wrap_function_wrapper("_io", "BytesIO.read", wrapped_read_F3E51D71B4EC16EF) try_wrap_function_wrapper("_io", "StringIO.read", wrapped_read_F3E51D71B4EC16EF) - try_wrap_function_wrapper("os", "system", wrapped_system_5542593D237084A7) + # ensure that the subprocess patch is applied even after one click activation + subprocess_patch.patch() + subprocess_patch.add_str_callback(_RASP_SYSTEM, wrapped_system_5542593D237084A7) + subprocess_patch.add_lst_callback(_RASP_POPEN, popen_FD233052260D8B4D) core.on("asm.block.dbapi.execute", execute_4C9BAC8E228EB347) if asm_config._iast_enabled: _set_metric_iast_instrumented_sink(VULN_PATH_TRAVERSAL) @@ -54,6 +64,8 @@ def unpatch_common_modules(): try_unwrap("urllib.request", "OpenerDirector.open") try_unwrap("_io", "BytesIO.read") try_unwrap("_io", "StringIO.read") + subprocess_patch.del_str_callback(_RASP_SYSTEM) + subprocess_patch.del_lst_callback(_RASP_POPEN) _is_patched = False @@ -106,7 +118,6 @@ def wrapped_open_CFDDB7ABBA9081B6(original_open_callable, instance, args, kwargs try: from ddtrace.appsec._asm_request_context import call_waf_callback from ddtrace.appsec._asm_request_context import in_asm_context - from ddtrace.appsec._constants import EXPLOIT_PREVENTION except ImportError: # open is used during module initialization # and shouldn't be changed at that time @@ -124,7 +135,9 @@ def wrapped_open_CFDDB7ABBA9081B6(original_open_callable, instance, args, kwargs rule_type=EXPLOIT_PREVENTION.TYPE.LFI, ) if res and _must_block(res.actions): - raise BlockingException(get_blocked(), "exploit_prevention", "lfi", filename) + raise BlockingException( + get_blocked(), EXPLOIT_PREVENTION.BLOCKING, EXPLOIT_PREVENTION.TYPE.LFI, filename + ) try: return original_open_callable(*args, **kwargs) except Exception as e: @@ -151,7 +164,6 @@ def wrapped_open_ED4CF71136E15EBF(original_open_callable, instance, args, kwargs try: from ddtrace.appsec._asm_request_context import call_waf_callback from ddtrace.appsec._asm_request_context import in_asm_context - from ddtrace.appsec._constants import EXPLOIT_PREVENTION except ImportError: # open is used during module initialization # and shouldn't be changed at that time @@ -168,7 +180,9 @@ def wrapped_open_ED4CF71136E15EBF(original_open_callable, instance, args, kwargs rule_type=EXPLOIT_PREVENTION.TYPE.SSRF, ) if res and _must_block(res.actions): - raise BlockingException(get_blocked(), "exploit_prevention", "ssrf", url) + raise BlockingException( + get_blocked(), EXPLOIT_PREVENTION.BLOCKING, EXPLOIT_PREVENTION.TYPE.SSRF, url + ) return original_open_callable(*args, **kwargs) @@ -191,7 +205,6 @@ def wrapped_request_D8CB81E472AF98A2(original_request_callable, instance, args, try: from ddtrace.appsec._asm_request_context import call_waf_callback from ddtrace.appsec._asm_request_context import in_asm_context - from ddtrace.appsec._constants import EXPLOIT_PREVENTION except ImportError: # open is used during module initialization # and shouldn't be changed at that time @@ -206,50 +219,67 @@ def wrapped_request_D8CB81E472AF98A2(original_request_callable, instance, args, rule_type=EXPLOIT_PREVENTION.TYPE.SSRF, ) if res and _must_block(res.actions): - raise BlockingException(get_blocked(), "exploit_prevention", "ssrf", url) + raise BlockingException( + get_blocked(), EXPLOIT_PREVENTION.BLOCKING, EXPLOIT_PREVENTION.TYPE.SSRF, url + ) return original_request_callable(*args, **kwargs) -def wrapped_system_5542593D237084A7(original_command_callable, instance, args, kwargs): +def wrapped_system_5542593D237084A7(command: str) -> None: """ wrapper for os.system function """ - command = args[0] if args else kwargs.get("command", None) - if command is not None: - if asm_config._iast_enabled and is_iast_request_enabled(): - from ddtrace.appsec._iast.taint_sinks.command_injection import _iast_report_cmdi - - _iast_report_cmdi(command) - - if ( - asm_config._asm_enabled - and asm_config._ep_enabled - and ddtrace.tracer._appsec_processor is not None - and ddtrace.tracer._appsec_processor.rasp_cmdi_enabled - ): - try: - from ddtrace.appsec._asm_request_context import call_waf_callback - from ddtrace.appsec._asm_request_context import in_asm_context - from ddtrace.appsec._constants import EXPLOIT_PREVENTION - except ImportError: - return original_command_callable(*args, **kwargs) - - if in_asm_context(): - res = call_waf_callback( - {EXPLOIT_PREVENTION.ADDRESS.CMDI: command}, - crop_trace="wrapped_system_5542593D237084A7", - rule_type=EXPLOIT_PREVENTION.TYPE.CMDI, + if ( + asm_config._asm_enabled + and asm_config._ep_enabled + and ddtrace.tracer._appsec_processor is not None + and ddtrace.tracer._appsec_processor.rasp_shi_enabled + ): + try: + from ddtrace.appsec._asm_request_context import call_waf_callback + from ddtrace.appsec._asm_request_context import in_asm_context + except ImportError: + return + + if in_asm_context(): + res = call_waf_callback( + {EXPLOIT_PREVENTION.ADDRESS.SHI: command}, + crop_trace="wrapped_system_5542593D237084A7", + rule_type=EXPLOIT_PREVENTION.TYPE.SHI, + ) + if res and _must_block(res.actions): + raise BlockingException( + get_blocked(), EXPLOIT_PREVENTION.BLOCKING, EXPLOIT_PREVENTION.TYPE.SHI, command + ) + + +def popen_FD233052260D8B4D(arg_list: Union[List[str], str]) -> None: + """ + listener for subprocess.Popen class + """ + if ( + asm_config._asm_enabled + and asm_config._ep_enabled + and ddtrace.tracer._appsec_processor is not None + and ddtrace.tracer._appsec_processor.rasp_cmdi_enabled + ): + try: + from ddtrace.appsec._asm_request_context import call_waf_callback + from ddtrace.appsec._asm_request_context import in_asm_context + except ImportError: + return + + if in_asm_context(): + res = call_waf_callback( + {EXPLOIT_PREVENTION.ADDRESS.CMDI: arg_list if isinstance(arg_list, list) else [arg_list]}, + crop_trace="popen_FD233052260D8B4D", + rule_type=EXPLOIT_PREVENTION.TYPE.CMDI, + ) + if res and _must_block(res.actions): + raise BlockingException( + get_blocked(), EXPLOIT_PREVENTION.BLOCKING, EXPLOIT_PREVENTION.TYPE.CMDI, arg_list ) - if res and _must_block(res.actions): - raise BlockingException(get_blocked(), "exploit_prevention", "cmdi", command) - try: - return original_command_callable(*args, **kwargs) - except Exception as e: - previous_frame = e.__traceback__.tb_frame.f_back - raise e.with_traceback( - e.__traceback__.__class__(None, previous_frame, previous_frame.f_lasti, previous_frame.f_lineno) - ) _DB_DIALECTS = { @@ -279,7 +309,6 @@ def execute_4C9BAC8E228EB347(instrument_self, query, args, kwargs) -> None: try: from ddtrace.appsec._asm_request_context import call_waf_callback from ddtrace.appsec._asm_request_context import in_asm_context - from ddtrace.appsec._constants import EXPLOIT_PREVENTION except ImportError: # execute is used during module initialization # and shouldn't be changed at that time @@ -296,7 +325,9 @@ def execute_4C9BAC8E228EB347(instrument_self, query, args, kwargs) -> None: rule_type=EXPLOIT_PREVENTION.TYPE.SQLI, ) if res and _must_block(res.actions): - raise BlockingException(get_blocked(), "exploit_prevention", "sqli", query) + raise BlockingException( + get_blocked(), EXPLOIT_PREVENTION.BLOCKING, EXPLOIT_PREVENTION.TYPE.SQLI, query + ) def try_unwrap(module, name): diff --git a/ddtrace/appsec/_constants.py b/ddtrace/appsec/_constants.py index 83cb53e78ff..45a96834cc1 100644 --- a/ddtrace/appsec/_constants.py +++ b/ddtrace/appsec/_constants.py @@ -202,7 +202,8 @@ class WAF_DATA_NAMES(metaclass=Constant_Class): # EPHEMERAL ADDRESSES PROCESSOR_SETTINGS: Literal["waf.context.processor"] = "waf.context.processor" - CMDI_ADDRESS: Literal["server.sys.shell.cmd"] = "server.sys.shell.cmd" + CMDI_ADDRESS: Literal["server.sys.exec.cmd"] = "server.sys.exec.cmd" + SHI_ADDRESS: Literal["server.sys.shell.cmd"] = "server.sys.shell.cmd" 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" @@ -328,6 +329,7 @@ class DEFAULT(metaclass=Constant_Class): class EXPLOIT_PREVENTION(metaclass=Constant_Class): + BLOCKING: Literal["exploit_prevention"] = "exploit_prevention" 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" @@ -339,6 +341,7 @@ class EXPLOIT_PREVENTION(metaclass=Constant_Class): class TYPE(metaclass=Constant_Class): CMDI: Literal["command_injection"] = "command_injection" + SHI: Literal["shell_injection"] = "shell_injection" LFI: Literal["lfi"] = "lfi" SSRF: Literal["ssrf"] = "ssrf" SQLI: Literal["sql_injection"] = "sql_injection" @@ -346,6 +349,7 @@ class TYPE(metaclass=Constant_Class): class ADDRESS(metaclass=Constant_Class): CMDI: Literal["CMDI_ADDRESS"] = "CMDI_ADDRESS" LFI: Literal["LFI_ADDRESS"] = "LFI_ADDRESS" + SHI: Literal["SHI_ADDRESS"] = "SHI_ADDRESS" SSRF: Literal["SSRF_ADDRESS"] = "SSRF_ADDRESS" SQLI: Literal["SQLI_ADDRESS"] = "SQLI_ADDRESS" SQLI_TYPE: Literal["SQLI_SYSTEM_ADDRESS"] = "SQLI_SYSTEM_ADDRESS" diff --git a/ddtrace/appsec/_iast/_pytest_plugin.py b/ddtrace/appsec/_iast/_pytest_plugin.py index 672acc4a031..82c23c53174 100644 --- a/ddtrace/appsec/_iast/_pytest_plugin.py +++ b/ddtrace/appsec/_iast/_pytest_plugin.py @@ -27,6 +27,8 @@ def ddtrace_iast(request, ddspan): Optionally output the test as failed if vulnerabilities are found. """ yield + if ddspan is None: + return data = ddspan.get_tag(IAST.JSON) if not data: return diff --git a/ddtrace/appsec/_iast/taint_sinks/command_injection.py b/ddtrace/appsec/_iast/taint_sinks/command_injection.py index ee22b294bfc..2607c6c9447 100644 --- a/ddtrace/appsec/_iast/taint_sinks/command_injection.py +++ b/ddtrace/appsec/_iast/taint_sinks/command_injection.py @@ -1,18 +1,15 @@ -import os -import subprocess # nosec from typing import List from typing import Union -from ddtrace.appsec._common_module_patches import try_unwrap from ddtrace.appsec._constants import IAST_SPAN_TAGS from ddtrace.appsec._iast import oce from ddtrace.appsec._iast._iast_request_context import is_iast_request_enabled from ddtrace.appsec._iast._metrics import _set_metric_iast_executed_sink from ddtrace.appsec._iast._metrics import _set_metric_iast_instrumented_sink from ddtrace.appsec._iast._metrics import increment_iast_span_metric -from ddtrace.appsec._iast._patch import try_wrap_function_wrapper from ddtrace.appsec._iast._taint_tracking._taint_objects import is_pyobject_tainted from ddtrace.appsec._iast.constants import VULN_CMDI +import ddtrace.contrib.internal.subprocess.patch as subprocess_patch from ddtrace.internal.logger import get_logger from ddtrace.settings.asm import config as asm_config @@ -26,48 +23,20 @@ def get_version() -> str: return "" -def patch(): - if not asm_config._iast_enabled: - return - - if not getattr(os, "_datadog_cmdi_patch", False): - # all os.spawn* variants eventually use this one: - try_wrap_function_wrapper("os", "_spawnvef", _iast_cmdi_osspawn) - - if not getattr(subprocess, "_datadog_cmdi_patch", False): - try_wrap_function_wrapper("subprocess", "Popen.__init__", _iast_cmdi_subprocess_init) +_IAST_CMDI = "iast_cmdi" - os._datadog_cmdi_patch = True - subprocess._datadog_cmdi_patch = True - _set_metric_iast_instrumented_sink(VULN_CMDI) +def patch(): + if asm_config._iast_enabled: + subprocess_patch.patch() + subprocess_patch.add_str_callback(_IAST_CMDI, _iast_report_cmdi) + subprocess_patch.add_lst_callback(_IAST_CMDI, _iast_report_cmdi) + _set_metric_iast_instrumented_sink(VULN_CMDI) def unpatch() -> None: - try_unwrap("os", "system") - try_unwrap("os", "_spawnvef") - try_unwrap("subprocess", "Popen.__init__") - - os._datadog_cmdi_patch = False # type: ignore[attr-defined] - subprocess._datadog_cmdi_patch = False # type: ignore[attr-defined] - - -def _iast_cmdi_osspawn(wrapped, instance, args, kwargs): - mode, file, func_args, _, _ = args - _iast_report_cmdi(func_args) - - if hasattr(wrapped, "__func__"): - return wrapped.__func__(instance, *args, **kwargs) - return wrapped(*args, **kwargs) - - -def _iast_cmdi_subprocess_init(wrapped, instance, args, kwargs): - cmd_args = args[0] if len(args) else kwargs["args"] - _iast_report_cmdi(cmd_args) - - if hasattr(wrapped, "__func__"): - return wrapped.__func__(instance, *args, **kwargs) - return wrapped(*args, **kwargs) + subprocess_patch.del_str_callback(_IAST_CMDI) + subprocess_patch.del_lst_callback(_IAST_CMDI) @oce.register diff --git a/ddtrace/appsec/_iast/taint_sinks/header_injection.py b/ddtrace/appsec/_iast/taint_sinks/header_injection.py index 730e9f05490..da3c9c8e330 100644 --- a/ddtrace/appsec/_iast/taint_sinks/header_injection.py +++ b/ddtrace/appsec/_iast/taint_sinks/header_injection.py @@ -1,3 +1,4 @@ +import typing from typing import Text from wrapt.importer import when_imported @@ -51,6 +52,8 @@ def patch(): return if not set_and_check_module_is_patched("django", default_attr="_datadog_header_injection_patch"): return + if not set_and_check_module_is_patched("fastapi", default_attr="_datadog_header_injection_patch"): + return @when_imported("wsgiref.headers") def _(m): @@ -68,6 +71,16 @@ def _(m): try_wrap_function_wrapper(m, "HttpResponseBase.__setitem__", _iast_h) try_wrap_function_wrapper(m, "ResponseHeaders.__setitem__", _iast_h) + # For headers["foo"] = "bar" + @when_imported("starlette.datastructures") + def _(m): + try_wrap_function_wrapper(m, "MutableHeaders.__setitem__", _iast_h) + + # For Response("ok", header=...) + @when_imported("starlette.responses") + def _(m): + try_wrap_function_wrapper(m, "Response.init_headers", _iast_h) + _set_metric_iast_instrumented_sink(VULN_HEADER_INJECTION) @@ -78,15 +91,16 @@ def unpatch(): try_unwrap("werkzeug.datastructures", "Headers.add") try_unwrap("django.http.response", "HttpResponseBase.__setitem__") try_unwrap("django.http.response", "ResponseHeaders.__setitem__") + try_unwrap("starlette.datastructures", "MutableHeaders.__setitem__") + try_unwrap("starlette.responses", "Response.init_headers") set_module_unpatched("flask", default_attr="_datadog_header_injection_patch") set_module_unpatched("django", default_attr="_datadog_header_injection_patch") - - pass + set_module_unpatched("fastapi", default_attr="_datadog_header_injection_patch") def _iast_h(wrapped, instance, args, kwargs): - if asm_config._iast_enabled: + if asm_config._iast_enabled and args: _iast_report_header_injection(args) if hasattr(wrapped, "__func__"): return wrapped.__func__(instance, *args, **kwargs) @@ -98,10 +112,16 @@ class HeaderInjection(VulnerabilityBase): vulnerability_type = VULN_HEADER_INJECTION -def _iast_report_header_injection(headers_args) -> None: +def _process_header(headers_args): from ddtrace.appsec._iast._taint_tracking.aspects import add_aspect + if len(headers_args) != 2: + return + header_name, header_value = headers_args + if header_name is None: + return + for header_to_exclude in HEADER_INJECTION_EXCLUSIONS: header_name_lower = header_name.lower() if header_name_lower == header_to_exclude or header_name_lower.startswith(header_to_exclude): @@ -114,3 +134,15 @@ def _iast_report_header_injection(headers_args) -> None: if is_pyobject_tainted(header_name) or is_pyobject_tainted(header_value): header_evidence = add_aspect(add_aspect(header_name, HEADER_NAME_VALUE_SEPARATOR), header_value) HeaderInjection.report(evidence_value=header_evidence) + + +def _iast_report_header_injection(headers_or_args) -> None: + if headers_or_args and isinstance(headers_or_args[0], typing.Mapping): + # ({header_name: header_value}, {header_name: header_value}, ...), used by FastAPI Response constructor + # when used with Response(..., headers={...}) + for headers_dict in headers_or_args: + for header_name, header_value in headers_dict.items(): + _process_header((header_name, header_value)) + else: + # (header_name, header_value), used in other cases + _process_header(headers_or_args) diff --git a/ddtrace/appsec/_metrics.py b/ddtrace/appsec/_metrics.py index f8713dc5ea7..cbe8490d717 100644 --- a/ddtrace/appsec/_metrics.py +++ b/ddtrace/appsec/_metrics.py @@ -1,4 +1,5 @@ from ddtrace.appsec import _asm_request_context +from ddtrace.appsec import _constants from ddtrace.appsec._ddwaf import version as _version from ddtrace.appsec._deduplications import deduplication from ddtrace.internal import telemetry @@ -64,6 +65,15 @@ def _set_waf_init_metric(info): log.warning("Error reporting ASM WAF init metrics", exc_info=True) +_TYPES_AND_TAGS = { + _constants.EXPLOIT_PREVENTION.TYPE.CMDI: (("rule_type", "command_injection"), ("rule_variant", "exec")), + _constants.EXPLOIT_PREVENTION.TYPE.SHI: (("rule_type", "command_injection"), ("rule_variant", "shell")), + _constants.EXPLOIT_PREVENTION.TYPE.LFI: (("rule_type", "lfi"),), + _constants.EXPLOIT_PREVENTION.TYPE.SSRF: (("rule_type", "ssrf"),), + _constants.EXPLOIT_PREVENTION.TYPE.SQLI: (("rule_type", "sql_injection"),), +} + + def _set_waf_request_metrics(*args): try: result = _asm_request_context.get_waf_telemetry_results() @@ -94,10 +104,7 @@ def _set_waf_request_metrics(*args): TELEMETRY_NAMESPACE_TAG_APPSEC, n, float(value), - tags=( - ("rule_type", rule_type), - ("waf_version", DDWAF_VERSION), - ), + tags=_TYPES_AND_TAGS.get(rule_type, ()) + (("waf_version", DDWAF_VERSION),), ) except Exception: diff --git a/ddtrace/appsec/_processor.py b/ddtrace/appsec/_processor.py index 06328d1201a..54a9f624afe 100644 --- a/ddtrace/appsec/_processor.py +++ b/ddtrace/appsec/_processor.py @@ -202,6 +202,10 @@ def _update_rules(self, new_rules: Dict[str, Any]) -> bool: def rasp_lfi_enabled(self) -> bool: return WAF_DATA_NAMES.LFI_ADDRESS in self._addresses_to_keep + @property + def rasp_shi_enabled(self) -> bool: + return WAF_DATA_NAMES.SHI_ADDRESS in self._addresses_to_keep + @property def rasp_cmdi_enabled(self) -> bool: return WAF_DATA_NAMES.CMDI_ADDRESS in self._addresses_to_keep diff --git a/ddtrace/appsec/_remoteconfiguration.py b/ddtrace/appsec/_remoteconfiguration.py index 0d470db08c8..1a6fd2e4b6c 100644 --- a/ddtrace/appsec/_remoteconfiguration.py +++ b/ddtrace/appsec/_remoteconfiguration.py @@ -52,12 +52,6 @@ def enable_appsec_rc(test_tracer: Optional[Tracer] = None) -> None: Parameters `test_tracer` and `start_subscribers` are needed for testing purposes """ - # Import tracer here to avoid a circular import - if test_tracer is None: - from ddtrace import tracer - else: - tracer = test_tracer - log.debug("[%s][P: %s] Register ASM Remote Config Callback", os.getpid(), os.getppid()) asm_callback = ( remoteconfig_poller.get_registered(PRODUCTS.ASM_FEATURES) @@ -68,7 +62,7 @@ def enable_appsec_rc(test_tracer: Optional[Tracer] = None) -> None: if _asm_feature_is_required(): remoteconfig_poller.register(PRODUCTS.ASM_FEATURES, asm_callback) - if tracer._asm_enabled and asm_config._asm_static_rule_file is None: + if asm_config._asm_enabled and asm_config._asm_static_rule_file is None: remoteconfig_poller.register(PRODUCTS.ASM_DATA, asm_callback) # IP Blocking remoteconfig_poller.register(PRODUCTS.ASM, asm_callback) # Exclusion Filters & Custom Rules remoteconfig_poller.register(PRODUCTS.ASM_DD, asm_callback) # DD Rules @@ -226,12 +220,12 @@ def _appsec_1click_activation(features: Mapping[str, Any], test_tracer: Optional ) if rc_asm_enabled: - if not tracer._asm_enabled: + if not asm_config._asm_enabled: tracer.configure(appsec_enabled=True) else: asm_config._asm_enabled = True else: - if tracer._asm_enabled: + if asm_config._asm_enabled: tracer.configure(appsec_enabled=False) else: asm_config._asm_enabled = False diff --git a/ddtrace/contrib/aiobotocore/__init__.py b/ddtrace/contrib/aiobotocore/__init__.py index 8869c4647d1..47f16f51796 100644 --- a/ddtrace/contrib/aiobotocore/__init__.py +++ b/ddtrace/contrib/aiobotocore/__init__.py @@ -25,22 +25,19 @@ Default: ``False`` """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["aiobotocore.client"] +# Required to allow users to import from `ddtrace.contrib.aiobotocore.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.aiobotocore.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.aiobotocore.patch import get_version - from ddtrace.contrib.internal.aiobotocore.patch import patch +# Expose public methods +from ddtrace.contrib.internal.aiobotocore.patch import get_version +from ddtrace.contrib.internal.aiobotocore.patch import patch - __all__ = ["patch", "get_version"] + +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/aiohttp/__init__.py b/ddtrace/contrib/aiohttp/__init__.py index 7ff17c21ec0..2bd88e734de 100644 --- a/ddtrace/contrib/aiohttp/__init__.py +++ b/ddtrace/contrib/aiohttp/__init__.py @@ -84,24 +84,21 @@ async def home_handler(request): :ref:`All HTTP tags ` are supported for this integration. """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["aiohttp"] +# Required to allow users to import from `ddtrace.contrib.aiohttp.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.aiohttp.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - from ddtrace.contrib.internal.aiohttp.middlewares import trace_app - from ddtrace.contrib.internal.aiohttp.patch import get_version +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 +from ddtrace.contrib.internal.aiohttp.middlewares import trace_app +from ddtrace.contrib.internal.aiohttp.patch import get_version - # Expose public methods - from ddtrace.contrib.internal.aiohttp.patch import patch - from ddtrace.contrib.internal.aiohttp.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.aiohttp.patch import patch +from ddtrace.contrib.internal.aiohttp.patch import unpatch - __all__ = ["patch", "unpatch", "trace_app", "get_version"] + +__all__ = ["patch", "unpatch", "trace_app", "get_version"] diff --git a/ddtrace/contrib/aiohttp_jinja2/__init__.py b/ddtrace/contrib/aiohttp_jinja2/__init__.py index fe268b6dc54..ef9c76f3da8 100644 --- a/ddtrace/contrib/aiohttp_jinja2/__init__.py +++ b/ddtrace/contrib/aiohttp_jinja2/__init__.py @@ -13,22 +13,19 @@ from ddtrace import patch patch(aiohttp_jinja2=True) """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["aiohttp_jinja2"] +# Required to allow users to import from `ddtrace.contrib.aiohttp.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.aiohttp.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - from ddtrace.contrib.internal.aiohttp_jinja2.patch import get_version - from ddtrace.contrib.internal.aiohttp_jinja2.patch import patch - from ddtrace.contrib.internal.aiohttp_jinja2.patch import unpatch +from ddtrace.contrib.internal.aiohttp_jinja2.patch import get_version +from ddtrace.contrib.internal.aiohttp_jinja2.patch import patch +from ddtrace.contrib.internal.aiohttp_jinja2.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/aiomysql/__init__.py b/ddtrace/contrib/aiomysql/__init__.py index 485eb690fed..98f78d3f3ab 100644 --- a/ddtrace/contrib/aiomysql/__init__.py +++ b/ddtrace/contrib/aiomysql/__init__.py @@ -36,22 +36,18 @@ await cur.execute("SELECT 6*7 AS the_answer;") """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.aiohttp.patch` directly +import warnings as _w -required_modules = ["aiomysql"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.aiohttp.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +from ddtrace.contrib.internal.aiomysql.patch import get_version +from ddtrace.contrib.internal.aiomysql.patch import patch +from ddtrace.contrib.internal.aiomysql.patch import unpatch - from ddtrace.contrib.internal.aiomysql.patch import get_version - from ddtrace.contrib.internal.aiomysql.patch import patch - from ddtrace.contrib.internal.aiomysql.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/aiopg/__init__.py b/ddtrace/contrib/aiopg/__init__.py index 481f9133e57..11a572d12ed 100644 --- a/ddtrace/contrib/aiopg/__init__.py +++ b/ddtrace/contrib/aiopg/__init__.py @@ -15,21 +15,18 @@ # Use a pin to specify metadata related to this connection Pin.override(db, service='postgres-users') """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["aiopg"] +# Required to allow users to import from `ddtrace.contrib.aiohttp.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.aiohttp.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - from ddtrace.contrib.internal.aiopg.patch import get_version - from ddtrace.contrib.internal.aiopg.patch import patch +from ddtrace.contrib.internal.aiopg.patch import get_version +from ddtrace.contrib.internal.aiopg.patch import patch - __all__ = ["patch", "get_version"] + +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/aioredis/__init__.py b/ddtrace/contrib/aioredis/__init__.py index 32449af6b6f..2bc3669a340 100644 --- a/ddtrace/contrib/aioredis/__init__.py +++ b/ddtrace/contrib/aioredis/__init__.py @@ -69,22 +69,17 @@ myaioredis = aioredis.Aioredis() Pin.override(myaioredis, service="myaioredis") """ -from ddtrace.internal.utils.importlib import require_modules # noqa:E402 +import warnings as _w # noqa: E402 -required_modules = ["aioredis"] +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + # Required to allow users to import from `ddtrace.contrib.aioredis.patch` directly + from . import patch as _ # noqa: F401, I001 -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.aioredis.patch` directly - import warnings as _w +from ddtrace.contrib.internal.aioredis.patch import get_version # noqa: E402 +from ddtrace.contrib.internal.aioredis.patch import patch # noqa: E402 +from ddtrace.contrib.internal.aioredis.patch import unpatch # noqa: E402 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - from ddtrace.contrib.internal.aioredis.patch import get_version - from ddtrace.contrib.internal.aioredis.patch import patch - from ddtrace.contrib.internal.aioredis.patch import unpatch - - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/algoliasearch/__init__.py b/ddtrace/contrib/algoliasearch/__init__.py index 4b172bca67a..b594d6238cc 100644 --- a/ddtrace/contrib/algoliasearch/__init__.py +++ b/ddtrace/contrib/algoliasearch/__init__.py @@ -22,22 +22,18 @@ .. __: https://www.algolia.com """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.algoliasearch.patch` directly +import warnings as _w -required_modules = ["algoliasearch", "algoliasearch.version"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.algoliasearch.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +from ddtrace.contrib.internal.algoliasearch.patch import get_version +from ddtrace.contrib.internal.algoliasearch.patch import patch +from ddtrace.contrib.internal.algoliasearch.patch import unpatch - from ddtrace.contrib.internal.algoliasearch.patch import get_version - from ddtrace.contrib.internal.algoliasearch.patch import patch - from ddtrace.contrib.internal.algoliasearch.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/anthropic/__init__.py b/ddtrace/contrib/anthropic/__init__.py index 7a55e6947c9..c43ee4bb43c 100644 --- a/ddtrace/contrib/anthropic/__init__.py +++ b/ddtrace/contrib/anthropic/__init__.py @@ -80,22 +80,19 @@ Pin.override(anthropic, service="my-anthropic-service") """ # noqa: E501 -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["anthropic"] +# Required to allow users to import from `ddtrace.contrib.anthropic.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.anthropic.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - from ddtrace.contrib.internal.anthropic.patch import get_version - from ddtrace.contrib.internal.anthropic.patch import patch - from ddtrace.contrib.internal.anthropic.patch import unpatch +from ddtrace.contrib.internal.anthropic.patch import get_version +from ddtrace.contrib.internal.anthropic.patch import patch +from ddtrace.contrib.internal.anthropic.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/aredis/__init__.py b/ddtrace/contrib/aredis/__init__.py index 17c1408caa5..1af4c5db664 100644 --- a/ddtrace/contrib/aredis/__init__.py +++ b/ddtrace/contrib/aredis/__init__.py @@ -66,21 +66,17 @@ async def example(): await client.get("my-key") """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.aredis.patch` directly +import warnings as _w -required_modules = ["aredis", "aredis.client"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.aredis.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +from ddtrace.contrib.internal.aredis.patch import get_version +from ddtrace.contrib.internal.aredis.patch import patch - from ddtrace.contrib.internal.aredis.patch import get_version - from ddtrace.contrib.internal.aredis.patch import patch - __all__ = ["patch", "get_version"] +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/asgi/__init__.py b/ddtrace/contrib/asgi/__init__.py index 0bfcd1ade5b..8c30f4e609e 100644 --- a/ddtrace/contrib/asgi/__init__.py +++ b/ddtrace/contrib/asgi/__init__.py @@ -55,18 +55,10 @@ def handle_request(scope, send): .. __: https://asgi.readthedocs.io/ """ -from ddtrace.internal.utils.importlib import require_modules +from ddtrace.contrib.internal.asgi.middleware import TraceMiddleware +from ddtrace.contrib.internal.asgi.middleware import get_version +from ddtrace.contrib.internal.asgi.middleware import span_from_scope -required_modules = [] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.asgi.patch` directly - from . import middleware as _ # noqa: F401, I001 - - from ddtrace.contrib.internal.asgi.middleware import TraceMiddleware - from ddtrace.contrib.internal.asgi.middleware import get_version - from ddtrace.contrib.internal.asgi.middleware import span_from_scope - - __all__ = ["TraceMiddleware", "span_from_scope", "get_version"] +__all__ = ["TraceMiddleware", "span_from_scope", "get_version"] diff --git a/ddtrace/contrib/asyncio/__init__.py b/ddtrace/contrib/asyncio/__init__.py index 5ff3a69adee..205935222fb 100644 --- a/ddtrace/contrib/asyncio/__init__.py +++ b/ddtrace/contrib/asyncio/__init__.py @@ -2,29 +2,24 @@ This integration provides context management for tracing the execution flow of concurrent execution of ``asyncio.Task``. """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.asyncio.patch` directly +# Expose public methods +import warnings as _w # noqa:E402 -required_modules = ["asyncio"] +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 +from ddtrace._trace.provider import DefaultContextProvider +from ddtrace.contrib.internal.asyncio.helpers import ensure_future +from ddtrace.contrib.internal.asyncio.helpers import run_in_executor +from ddtrace.contrib.internal.asyncio.helpers import set_call_context +from ddtrace.contrib.internal.asyncio.patch import get_version +from ddtrace.contrib.internal.asyncio.patch import patch +from ddtrace.contrib.internal.asyncio.patch import unpatch # noqa: F401 -with require_modules(required_modules) as missing_modules: - if not missing_modules: - from ddtrace._trace.provider import DefaultContextProvider - context_provider = DefaultContextProvider() +context_provider = DefaultContextProvider() - # Required to allow users to import from `ddtrace.contrib.asyncio.patch` directly - # Expose public methods - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - from ddtrace.contrib.internal.asyncio.helpers import ensure_future - from ddtrace.contrib.internal.asyncio.helpers import run_in_executor - from ddtrace.contrib.internal.asyncio.helpers import set_call_context - from ddtrace.contrib.internal.asyncio.patch import get_version - from ddtrace.contrib.internal.asyncio.patch import patch - from ddtrace.contrib.internal.asyncio.patch import unpatch # noqa: F401 - - __all__ = ["context_provider", "set_call_context", "ensure_future", "run_in_executor", "patch", "get_version"] +__all__ = ["context_provider", "set_call_context", "ensure_future", "run_in_executor", "patch", "get_version"] diff --git a/ddtrace/contrib/asyncpg/__init__.py b/ddtrace/contrib/asyncpg/__init__.py index 21cc9b613a9..c8e56511469 100644 --- a/ddtrace/contrib/asyncpg/__init__.py +++ b/ddtrace/contrib/asyncpg/__init__.py @@ -43,22 +43,19 @@ conn = asyncpg.connect("postgres://localhost:5432") Pin.override(conn, service="custom-service") """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["asyncpg"] +# Required to allow users to import from `ddtrace.contrib.asyncpg.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.asyncpg.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - from ddtrace.contrib.internal.asyncpg.patch import get_version - from ddtrace.contrib.internal.asyncpg.patch import patch - from ddtrace.contrib.internal.asyncpg.patch import unpatch +from ddtrace.contrib.internal.asyncpg.patch import get_version +from ddtrace.contrib.internal.asyncpg.patch import patch +from ddtrace.contrib.internal.asyncpg.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/avro/__init__.py b/ddtrace/contrib/avro/__init__.py index 6ca7f3c9847..328704bbfea 100644 --- a/ddtrace/contrib/avro/__init__.py +++ b/ddtrace/contrib/avro/__init__.py @@ -15,15 +15,9 @@ ~~~~~~~~~~~~~ """ -from ...internal.utils.importlib import require_modules +# Expose public methods +from ..internal.avro.patch import get_version +from ..internal.avro.patch import patch -required_modules = ["avro"] - -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Expose public methods - from ..internal.avro.patch import get_version - from ..internal.avro.patch import patch - - __all__ = ["patch", "get_version"] +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/boto/__init__.py b/ddtrace/contrib/boto/__init__.py index e17db53e5ae..6b967b28b2b 100644 --- a/ddtrace/contrib/boto/__init__.py +++ b/ddtrace/contrib/boto/__init__.py @@ -28,21 +28,17 @@ """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.boto.patch` directly +import warnings as _w -required_modules = ["boto.connection"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.boto.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +from ddtrace.contrib.internal.boto.patch import get_version +from ddtrace.contrib.internal.boto.patch import patch - from ddtrace.contrib.internal.boto.patch import get_version - from ddtrace.contrib.internal.boto.patch import patch - __all__ = ["patch", "get_version"] +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/botocore/__init__.py b/ddtrace/contrib/botocore/__init__.py index 143ef70b9d7..60b01d39839 100644 --- a/ddtrace/contrib/botocore/__init__.py +++ b/ddtrace/contrib/botocore/__init__.py @@ -153,22 +153,17 @@ """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.botocore.patch` directly +import warnings as _w -required_modules = ["botocore.client"] +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.botocore.patch` directly - import warnings as _w +from ddtrace.contrib.internal.botocore.patch import get_version +from ddtrace.contrib.internal.botocore.patch import patch +from ddtrace.contrib.internal.botocore.patch import patch_submodules - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - from ddtrace.contrib.internal.botocore.patch import get_version - from ddtrace.contrib.internal.botocore.patch import patch - from ddtrace.contrib.internal.botocore.patch import patch_submodules - - __all__ = ["patch", "patch_submodules", "get_version"] +__all__ = ["patch", "patch_submodules", "get_version"] diff --git a/ddtrace/contrib/bottle/__init__.py b/ddtrace/contrib/bottle/__init__.py index 1391f1cd667..448c709b952 100644 --- a/ddtrace/contrib/bottle/__init__.py +++ b/ddtrace/contrib/bottle/__init__.py @@ -33,22 +33,18 @@ """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.bottle.patch` directly +import warnings as _w -required_modules = ["bottle"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.bottle.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +from ddtrace.contrib.internal.bottle.patch import get_version +from ddtrace.contrib.internal.bottle.patch import patch +from ddtrace.contrib.internal.bottle.trace import TracePlugin - from ddtrace.contrib.internal.bottle.patch import get_version - from ddtrace.contrib.internal.bottle.patch import patch - from ddtrace.contrib.internal.bottle.trace import TracePlugin - __all__ = ["TracePlugin", "patch", "get_version"] +__all__ = ["TracePlugin", "patch", "get_version"] diff --git a/ddtrace/contrib/cassandra/__init__.py b/ddtrace/contrib/cassandra/__init__.py index 9c3c1d7de6a..1d0b6ad0afd 100644 --- a/ddtrace/contrib/cassandra/__init__.py +++ b/ddtrace/contrib/cassandra/__init__.py @@ -21,22 +21,19 @@ session = cluster.connect("my_keyspace") session.execute("select id from my_table limit 10;") """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["cassandra.cluster"] +# Required to allow users to import from `ddtrace.contrib.cassandra.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.cassandra.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.cassandra.patch import patch - from ddtrace.contrib.internal.cassandra.session import get_version +# Expose public methods +from ddtrace.contrib.internal.cassandra.patch import patch +from ddtrace.contrib.internal.cassandra.session import get_version - __all__ = ["patch", "get_version"] + +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/celery/__init__.py b/ddtrace/contrib/celery/__init__.py index 7b63089e206..83ad7a870a3 100644 --- a/ddtrace/contrib/celery/__init__.py +++ b/ddtrace/contrib/celery/__init__.py @@ -51,25 +51,22 @@ def run(self): Default: ``'celery-worker'`` """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["celery"] +# Required to allow users to import from `ddtrace.contrib.celery.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.celery.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.celery.app import patch_app - from ddtrace.contrib.internal.celery.app import unpatch_app - from ddtrace.contrib.internal.celery.patch import get_version - from ddtrace.contrib.internal.celery.patch import patch - from ddtrace.contrib.internal.celery.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.celery.app import patch_app +from ddtrace.contrib.internal.celery.app import unpatch_app +from ddtrace.contrib.internal.celery.patch import get_version +from ddtrace.contrib.internal.celery.patch import patch +from ddtrace.contrib.internal.celery.patch import unpatch - __all__ = ["patch", "patch_app", "unpatch", "unpatch_app", "get_version"] + +__all__ = ["patch", "patch_app", "unpatch", "unpatch_app", "get_version"] diff --git a/ddtrace/contrib/cherrypy/__init__.py b/ddtrace/contrib/cherrypy/__init__.py index ff072fa426f..efd1210db6c 100644 --- a/ddtrace/contrib/cherrypy/__init__.py +++ b/ddtrace/contrib/cherrypy/__init__.py @@ -53,14 +53,9 @@ def index(self): cherrypy.quickstart(HelloWorld()) """ -from ddtrace.internal.utils.importlib import require_modules +from ddtrace.contrib.internal.cherrypy.middleware import TraceMiddleware +from ddtrace.contrib.internal.cherrypy.middleware import get_version -required_modules = ["cherrypy"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - from ddtrace.contrib.internal.cherrypy.middleware import TraceMiddleware - from ddtrace.contrib.internal.cherrypy.middleware import get_version - - __all__ = ["TraceMiddleware", "get_version"] +__all__ = ["TraceMiddleware", "get_version"] diff --git a/ddtrace/contrib/consul/__init__.py b/ddtrace/contrib/consul/__init__.py index 8b7498c80d3..a6317d0bce0 100644 --- a/ddtrace/contrib/consul/__init__.py +++ b/ddtrace/contrib/consul/__init__.py @@ -19,23 +19,19 @@ Pin.override(client, service='consul-kv') """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.consul.patch` directly +import warnings as _w -required_modules = ["consul"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.consul.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.consul.patch import get_version +from ddtrace.contrib.internal.consul.patch import patch +from ddtrace.contrib.internal.consul.patch import unpatch - # Expose public methods - from ddtrace.contrib.internal.consul.patch import get_version - from ddtrace.contrib.internal.consul.patch import patch - from ddtrace.contrib.internal.consul.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/coverage/__init__.py b/ddtrace/contrib/coverage/__init__.py index b32d27ebff4..6ae090e3fe0 100644 --- a/ddtrace/contrib/coverage/__init__.py +++ b/ddtrace/contrib/coverage/__init__.py @@ -15,26 +15,21 @@ Note: Coverage.py instrumentation is only enabled if `pytest` or `unittest` instrumentation is enabled. """ -from ddtrace.internal.logger import get_logger -from ddtrace.internal.utils.importlib import require_modules - +# Required to allow users to import from `ddtrace.contrib.internal.coverage.patch` directly +import warnings as _w # noqa:E402 -required_modules = ["coverage"] -log = get_logger(__name__) +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.internal.coverage.patch` directly - import warnings as _w +# Expose public methods +from ddtrace.contrib.internal.coverage.patch import get_version +from ddtrace.contrib.internal.coverage.patch import patch +from ddtrace.contrib.internal.coverage.patch import unpatch +from ddtrace.internal.logger import get_logger - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.coverage.patch import get_version - from ddtrace.contrib.internal.coverage.patch import patch - from ddtrace.contrib.internal.coverage.patch import unpatch +log = get_logger(__name__) - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/django/__init__.py b/ddtrace/contrib/django/__init__.py index 55a867ed560..2eeea57b2c6 100644 --- a/ddtrace/contrib/django/__init__.py +++ b/ddtrace/contrib/django/__init__.py @@ -201,25 +201,20 @@ .. __: https://www.djangoproject.com/ """ # noqa: E501 -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.django.patch` directly +import warnings as _w -required_modules = ["django"] +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.django.patch` directly - import warnings as _w +# Expose public methods +from ddtrace.contrib.internal.django.patch import get_version +from ddtrace.contrib.internal.django.patch import patch +from ddtrace.contrib.internal.django.patch import patch as _patch +from ddtrace.contrib.internal.django.patch import unpatch - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.django.patch import get_version - from ddtrace.contrib.internal.django.patch import patch - from ddtrace.contrib.internal.django.patch import patch as _patch - from ddtrace.contrib.internal.django.patch import unpatch - - __all__ = ["patch", "unpatch", "_patch", "get_version"] +__all__ = ["patch", "unpatch", "_patch", "get_version"] diff --git a/ddtrace/contrib/dogpile_cache/__init__.py b/ddtrace/contrib/dogpile_cache/__init__.py index 6e796e93320..63898aa4a5a 100644 --- a/ddtrace/contrib/dogpile_cache/__init__.py +++ b/ddtrace/contrib/dogpile_cache/__init__.py @@ -36,23 +36,20 @@ def hello(name): .. __: https://dogpilecache.sqlalchemy.org/ """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["dogpile.cache"] +# Required to allow users to import from `ddtrace.contrib.dogpile_cache.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.dogpile_cache.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.dogpile_cache.patch import get_version - from ddtrace.contrib.internal.dogpile_cache.patch import patch - from ddtrace.contrib.internal.dogpile_cache.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.dogpile_cache.patch import get_version +from ddtrace.contrib.internal.dogpile_cache.patch import patch +from ddtrace.contrib.internal.dogpile_cache.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/dramatiq/__init__.py b/ddtrace/contrib/dramatiq/__init__.py index ebf2c355743..2e5f37c4cba 100644 --- a/ddtrace/contrib/dramatiq/__init__.py +++ b/ddtrace/contrib/dramatiq/__init__.py @@ -28,23 +28,20 @@ def my_other_task(content): ddtrace-run python app.py """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["dramatiq"] +# Required to allow users to import from `ddtrace.contrib.dramatiq.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.dramatiq.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.dramatiq.patch import get_version - from ddtrace.contrib.internal.dramatiq.patch import patch - from ddtrace.contrib.internal.dramatiq.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.dramatiq.patch import get_version +from ddtrace.contrib.internal.dramatiq.patch import patch +from ddtrace.contrib.internal.dramatiq.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/falcon/__init__.py b/ddtrace/contrib/falcon/__init__.py index e8d2038ccc1..c54b58dbd9c 100644 --- a/ddtrace/contrib/falcon/__init__.py +++ b/ddtrace/contrib/falcon/__init__.py @@ -44,21 +44,18 @@ def on_falcon_request(span, request, response): :ref:`Headers tracing ` is supported for this integration. """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["falcon"] +# Required to allow users to import from `ddtrace.contrib.falcon.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.falcon.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - from ddtrace.contrib.internal.falcon.middleware import TraceMiddleware - from ddtrace.contrib.internal.falcon.patch import get_version - from ddtrace.contrib.internal.falcon.patch import patch +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 +from ddtrace.contrib.internal.falcon.middleware import TraceMiddleware +from ddtrace.contrib.internal.falcon.patch import get_version +from ddtrace.contrib.internal.falcon.patch import patch - __all__ = ["TraceMiddleware", "patch", "get_version"] + +__all__ = ["TraceMiddleware", "patch", "get_version"] diff --git a/ddtrace/contrib/fastapi/__init__.py b/ddtrace/contrib/fastapi/__init__.py index 9931a2d3ea6..df989abf766 100644 --- a/ddtrace/contrib/fastapi/__init__.py +++ b/ddtrace/contrib/fastapi/__init__.py @@ -50,23 +50,20 @@ config.fastapi['request_span_name'] = 'custom-request-span-name' """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["fastapi"] +# Required to allow users to import from `ddtrace.contrib.fastapi.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.fastapi.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.fastapi.patch import get_version - from ddtrace.contrib.internal.fastapi.patch import patch - from ddtrace.contrib.internal.fastapi.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.fastapi.patch import get_version +from ddtrace.contrib.internal.fastapi.patch import patch +from ddtrace.contrib.internal.fastapi.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/flask/__init__.py b/ddtrace/contrib/flask/__init__.py index 47226eed5c6..22e90ffb604 100644 --- a/ddtrace/contrib/flask/__init__.py +++ b/ddtrace/contrib/flask/__init__.py @@ -96,21 +96,17 @@ def index(): """ -from ddtrace.internal.utils.importlib import require_modules +# DEV: We do this so we can `@mock.patch('ddtrace.contrib.flask._patch.')` in tests +import warnings as _w -required_modules = ["flask"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # DEV: We do this so we can `@mock.patch('ddtrace.contrib.flask._patch.')` in tests - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 +from ddtrace.contrib.internal.flask.patch import get_version +from ddtrace.contrib.internal.flask.patch import patch +from ddtrace.contrib.internal.flask.patch import unpatch - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - from ddtrace.contrib.internal.flask.patch import get_version - from ddtrace.contrib.internal.flask.patch import patch - from ddtrace.contrib.internal.flask.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/flask_cache/__init__.py b/ddtrace/contrib/flask_cache/__init__.py index 1919f55efb5..f11b006f723 100644 --- a/ddtrace/contrib/flask_cache/__init__.py +++ b/ddtrace/contrib/flask_cache/__init__.py @@ -44,18 +44,9 @@ def counter(): """ -from ddtrace.internal.utils.importlib import require_modules +# Expose public methods +from ddtrace.contrib.internal.flask_cache.tracers import get_traced_cache +from ddtrace.contrib.internal.flask_cache.tracers import get_version -required_modules = ["flask_cache", "flask_caching"] - -with require_modules(required_modules) as missing_modules: - if len(missing_modules) < len(required_modules): - # Required to allow users to import from `ddtrace.contrib.aiohttp.patch` directly - from . import tracers as _ # noqa: F401, I001 - - # Expose public methods - from ddtrace.contrib.internal.flask_cache.tracers import get_traced_cache - from ddtrace.contrib.internal.flask_cache.tracers import get_version - - __all__ = ["get_traced_cache", "get_version"] +__all__ = ["get_traced_cache", "get_version"] diff --git a/ddtrace/contrib/freezegun/__init__.py b/ddtrace/contrib/freezegun/__init__.py index 7e2df3c557c..8c072c74d5a 100644 --- a/ddtrace/contrib/freezegun/__init__.py +++ b/ddtrace/contrib/freezegun/__init__.py @@ -13,16 +13,10 @@ The freezegun integration is not configurable, but may be disabled using DD_PATCH_MODULES=freezegun:false . """ -from ...internal.utils.importlib import require_modules +# Expose public methods +from ..internal.freezegun.patch import get_version +from ..internal.freezegun.patch import patch +from ..internal.freezegun.patch import unpatch -required_modules = ["freezegun"] - -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Expose public methods - from ..internal.freezegun.patch import get_version - from ..internal.freezegun.patch import patch - from ..internal.freezegun.patch import unpatch - - __all__ = ["get_version", "patch", "unpatch"] +__all__ = ["get_version", "patch", "unpatch"] diff --git a/ddtrace/contrib/futures/__init__.py b/ddtrace/contrib/futures/__init__.py index c589912c07a..1ba8741ebe9 100644 --- a/ddtrace/contrib/futures/__init__.py +++ b/ddtrace/contrib/futures/__init__.py @@ -16,27 +16,24 @@ from ddtrace import patch patch(futures=True) """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["concurrent.futures"] +# Required to allow users to import from `ddtrace.contrib.futures.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.futures.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.futures.patch import get_version - from ddtrace.contrib.internal.futures.patch import patch - from ddtrace.contrib.internal.futures.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.futures.patch import get_version +from ddtrace.contrib.internal.futures.patch import patch +from ddtrace.contrib.internal.futures.patch import unpatch - __all__ = [ - "get_version", - "patch", - "unpatch", - ] + +__all__ = [ + "get_version", + "patch", + "unpatch", +] diff --git a/ddtrace/contrib/gevent/__init__.py b/ddtrace/contrib/gevent/__init__.py index 1b8e2811ef5..fb051e5f88b 100644 --- a/ddtrace/contrib/gevent/__init__.py +++ b/ddtrace/contrib/gevent/__init__.py @@ -36,26 +36,23 @@ def worker_function(): with tracer.trace("greenlet.child_call") as child: ... """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.gevent.patch` directly +import warnings as _w -required_modules = ["gevent"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.gevent.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.gevent.patch import get_version - from ddtrace.contrib.internal.gevent.patch import patch - from ddtrace.contrib.internal.gevent.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.gevent.patch import get_version +from ddtrace.contrib.internal.gevent.patch import patch +from ddtrace.contrib.internal.gevent.patch import unpatch - from ...provider import DefaultContextProvider as _DefaultContextProvider +from ...provider import DefaultContextProvider as _DefaultContextProvider - context_provider = _DefaultContextProvider() - __all__ = ["patch", "unpatch", "context_provider", "get_version"] +context_provider = _DefaultContextProvider() + +__all__ = ["patch", "unpatch", "context_provider", "get_version"] diff --git a/ddtrace/contrib/google_generativeai/__init__.py b/ddtrace/contrib/google_generativeai/__init__.py index 03cb35c9eae..d63a1134ab2 100644 --- a/ddtrace/contrib/google_generativeai/__init__.py +++ b/ddtrace/contrib/google_generativeai/__init__.py @@ -77,15 +77,11 @@ Pin.override(genai, service="my-gemini-service") """ # noqa: E501 -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["google.generativeai"] +from ..internal.google_generativeai.patch import get_version +from ..internal.google_generativeai.patch import patch +from ..internal.google_generativeai.patch import unpatch -with require_modules(required_modules) as missing_modules: - if not missing_modules: - from ..internal.google_generativeai.patch import get_version - from ..internal.google_generativeai.patch import patch - from ..internal.google_generativeai.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/graphql/__init__.py b/ddtrace/contrib/graphql/__init__.py index 89350191ef1..5394f243533 100644 --- a/ddtrace/contrib/graphql/__init__.py +++ b/ddtrace/contrib/graphql/__init__.py @@ -44,23 +44,20 @@ Pin.override(graphql, service="mygraphql") """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["graphql"] +# Required to allow users to import from `ddtrace.contrib.graphql.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.graphql.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.graphql.patch import get_version - from ddtrace.contrib.internal.graphql.patch import patch - from ddtrace.contrib.internal.graphql.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.graphql.patch import get_version +from ddtrace.contrib.internal.graphql.patch import patch +from ddtrace.contrib.internal.graphql.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/grpc/__init__.py b/ddtrace/contrib/grpc/__init__.py index c329762316c..ff5adb86aea 100644 --- a/ddtrace/contrib/grpc/__init__.py +++ b/ddtrace/contrib/grpc/__init__.py @@ -75,23 +75,18 @@ """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.grpc.patch` directly +import warnings as _w -required_modules = ["grpc"] +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.grpc.patch` directly - import warnings as _w +# Expose public methods +from ddtrace.contrib.internal.grpc.patch import get_version +from ddtrace.contrib.internal.grpc.patch import patch +from ddtrace.contrib.internal.grpc.patch import unpatch - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.grpc.patch import get_version - from ddtrace.contrib.internal.grpc.patch import patch - from ddtrace.contrib.internal.grpc.patch import unpatch - - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/httplib/__init__.py b/ddtrace/contrib/httplib/__init__.py index 509e80df270..948b885199a 100644 --- a/ddtrace/contrib/httplib/__init__.py +++ b/ddtrace/contrib/httplib/__init__.py @@ -58,22 +58,18 @@ :ref:`Headers tracing ` is supported for this integration. """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["http.client"] +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - from ddtrace.contrib.internal.httplib.patch import get_version - from ddtrace.contrib.internal.httplib.patch import patch - from ddtrace.contrib.internal.httplib.patch import unpatch +from ddtrace.contrib.internal.httplib.patch import get_version +from ddtrace.contrib.internal.httplib.patch import patch +from ddtrace.contrib.internal.httplib.patch import unpatch __all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/httpx/__init__.py b/ddtrace/contrib/httpx/__init__.py index 4575d39e7c6..118d0a738b5 100644 --- a/ddtrace/contrib/httpx/__init__.py +++ b/ddtrace/contrib/httpx/__init__.py @@ -77,23 +77,20 @@ .. __: https://www.python-httpx.org/ """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["httpx"] +# Required to allow users to import from `ddtrace.contrib.httpx.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.httpx.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.httpx.patch import get_version - from ddtrace.contrib.internal.httpx.patch import patch - from ddtrace.contrib.internal.httpx.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.httpx.patch import get_version +from ddtrace.contrib.internal.httpx.patch import patch +from ddtrace.contrib.internal.httpx.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/internal/django/patch.py b/ddtrace/contrib/internal/django/patch.py index c40f49b627f..d4b14487e39 100644 --- a/ddtrace/contrib/internal/django/patch.py +++ b/ddtrace/contrib/internal/django/patch.py @@ -215,7 +215,7 @@ def traced_cache(django, pin, func, instance, args, kwargs): "django.cache", span_name="django.cache", span_type=SpanTypes.CACHE, - service=config.django.cache_service_name, + service=schematize_service_name(config.django.cache_service_name), resource=utils.resource_from_cache_prefix(func_name(func), instance), tags=tags, pin=pin, diff --git a/ddtrace/contrib/internal/requests/connection.py b/ddtrace/contrib/internal/requests/connection.py index 83c8d82927f..06d3347f0a1 100644 --- a/ddtrace/contrib/internal/requests/connection.py +++ b/ddtrace/contrib/internal/requests/connection.py @@ -15,6 +15,7 @@ from ddtrace.internal.schema.span_attribute_schema import SpanDirection from ddtrace.internal.utils import get_argument_value from ddtrace.propagation.http import HTTPPropagator +from ddtrace.settings.asm import config as asm_config log = get_logger(__name__) @@ -59,7 +60,7 @@ def _wrap_send(func, instance, args, kwargs): tracer = getattr(instance, "datadog_tracer", ddtrace.tracer) # skip if tracing is not enabled - if not tracer.enabled and not tracer._apm_opt_out: + if not tracer.enabled and not asm_config._apm_opt_out: return func(*args, **kwargs) request = get_argument_value(args, kwargs, 0, "request") diff --git a/ddtrace/contrib/internal/subprocess/patch.py b/ddtrace/contrib/internal/subprocess/patch.py index 7380e72fdaf..76530c195df 100644 --- a/ddtrace/contrib/internal/subprocess/patch.py +++ b/ddtrace/contrib/internal/subprocess/patch.py @@ -4,8 +4,8 @@ import os import re import shlex -import subprocess # nosec from threading import RLock +from typing import Callable # noqa:F401 from typing import Deque # noqa:F401 from typing import Dict # noqa:F401 from typing import List # noqa:F401 @@ -33,45 +33,71 @@ ) -def get_version(): - # type: () -> str +def get_version() -> str: return "" -def patch(): - # type: () -> List[str] - patched = [] # type: List[str] - if not asm_config._asm_enabled: - return patched +_STR_CALLBACKS: Dict[str, Callable[[str], None]] = {} +_LST_CALLBACKS: Dict[str, Callable[[Union[List[str], str]], None]] = {} - import os - if not getattr(os, "_datadog_patch", False): - Pin().onto(os) - trace_utils.wrap(os, "system", _traced_ossystem(os)) - trace_utils.wrap(os, "fork", _traced_fork(os)) +def add_str_callback(name: str, callback: Callable[[str], None]): + _STR_CALLBACKS[name] = callback + + +def del_str_callback(name: str): + _STR_CALLBACKS.pop(name, None) + + +def add_lst_callback(name: str, callback: Callable[[Union[List[str], str]], None]): + _LST_CALLBACKS[name] = callback + + +def del_lst_callback(name: str): + _LST_CALLBACKS.pop(name, None) + - # all os.spawn* variants eventually use this one: - trace_utils.wrap(os, "_spawnvef", _traced_osspawn(os)) +def patch() -> List[str]: + if not (asm_config._asm_enabled or asm_config._iast_enabled): + return [] + patched: List[str] = [] + import os # nosec + import subprocess # nosec + + should_patch_system = not trace_utils.iswrapped(os.system) + should_patch_fork = not trace_utils.iswrapped(os.fork) + spawnvef = getattr(os, "_spawnvef", None) + should_patch_spawnvef = spawnvef is not None and not trace_utils.iswrapped(spawnvef) + + if should_patch_system or should_patch_fork or should_patch_spawnvef: + Pin().onto(os) + if should_patch_system: + trace_utils.wrap(os, "system", _traced_ossystem(os)) + if should_patch_fork: + trace_utils.wrap(os, "fork", _traced_fork(os)) + if should_patch_spawnvef: + # all os.spawn* variants eventually use this one: + trace_utils.wrap(os, "_spawnvef", _traced_osspawn(os)) patched.append("os") - if not getattr(subprocess, "_datadog_patch", False): + should_patch_Popen_init = not trace_utils.iswrapped(subprocess.Popen.__init__) + should_patch_Popen_wait = not trace_utils.iswrapped(subprocess.Popen.wait) + if should_patch_Popen_init or should_patch_Popen_wait: Pin().onto(subprocess) # We store the parameters on __init__ in the context and set the tags on wait # (where all the Popen objects eventually arrive, unless killed before it) - trace_utils.wrap(subprocess, "Popen.__init__", _traced_subprocess_init(subprocess)) - trace_utils.wrap(subprocess, "Popen.wait", _traced_subprocess_wait(subprocess)) - - os._datadog_patch = True - subprocess._datadog_patch = True + if should_patch_Popen_init: + trace_utils.wrap(subprocess, "Popen.__init__", _traced_subprocess_init(subprocess)) + if should_patch_Popen_wait: + trace_utils.wrap(subprocess, "Popen.wait", _traced_subprocess_wait(subprocess)) patched.append("subprocess") return patched @dataclass(eq=False) -class SubprocessCmdLineCacheEntry(object): +class SubprocessCmdLineCacheEntry: binary: Optional[str] = None arguments: Optional[List] = None truncated: bool = False @@ -80,10 +106,10 @@ class SubprocessCmdLineCacheEntry(object): as_string: Optional[str] = None -class SubprocessCmdLine(object): +class SubprocessCmdLine: # This catches the computed values into a SubprocessCmdLineCacheEntry object - _CACHE = {} # type: Dict[str, SubprocessCmdLineCacheEntry] - _CACHE_DEQUE = collections.deque() # type: Deque[str] + _CACHE: Dict[str, SubprocessCmdLineCacheEntry] = {} + _CACHE_DEQUE: Deque[str] = collections.deque() _CACHE_MAXSIZE = 32 _CACHE_LOCK = RLock() @@ -138,8 +164,7 @@ def _clear_cache(cls): ] _COMPILED_ENV_VAR_REGEXP = re.compile(r"\b[A-Z_]+=\w+") - def __init__(self, shell_args, shell=False): - # type: (Union[str, List[str]], bool) -> None + def __init__(self, shell_args: Union[str, List[str]], shell: bool = False) -> None: cache_key = str(shell_args) + str(shell) self._cache_entry = SubprocessCmdLine._CACHE.get(cache_key) if self._cache_entry: @@ -250,8 +275,7 @@ def scrub_arguments(self): self.arguments = new_args - def truncate_string(self, str_): - # type: (str) -> str + def truncate_string(self, str_: str) -> str: oversize = len(str_) - self.TRUNCATE_LIMIT if oversize <= 0: @@ -263,9 +287,7 @@ def truncate_string(self, str_): msg = ' "4kB argument truncated by %d characters"' % oversize return str_[0 : -(oversize + len(msg))] + msg - def _as_list_and_string(self): - # type: () -> Tuple[list[str], str] - + def _as_list_and_string(self) -> Tuple[List[str], str]: total_list = self.env_vars + [self.binary] + self.arguments truncated_str = self.truncate_string(shjoin(total_list)) truncated_list = shlex.split(truncated_str) @@ -290,8 +312,10 @@ def as_string(self): return str_res -def unpatch(): - # type: () -> None +def unpatch() -> None: + import os # nosec + import subprocess # nosec + trace_utils.unwrap(os, "system") trace_utils.unwrap(os, "_spawnvef") trace_utils.unwrap(subprocess.Popen, "__init__") @@ -299,13 +323,13 @@ def unpatch(): SubprocessCmdLine._clear_cache() - os._datadog_patch = False - subprocess._datadog_patch = False - @trace_utils.with_traced_module def _traced_ossystem(module, pin, wrapped, instance, args, kwargs): try: + if isinstance(args[0], str): + for callback in _STR_CALLBACKS.values(): + callback(args[0]) shellcmd = SubprocessCmdLine(args[0], shell=True) # nosec with pin.tracer.trace(COMMANDS.SPAN_NAME, resource=shellcmd.binary, span_type=SpanTypes.SYSTEM) as span: @@ -342,6 +366,10 @@ def _traced_fork(module, pin, wrapped, instance, args, kwargs): def _traced_osspawn(module, pin, wrapped, instance, args, kwargs): try: mode, file, func_args, _, _ = args + if isinstance(func_args, (list, tuple, str)): + commands = [file] + list(func_args) + for callback in _LST_CALLBACKS.values(): + callback(commands) shellcmd = SubprocessCmdLine(func_args, shell=False) with pin.tracer.trace(COMMANDS.SPAN_NAME, resource=shellcmd.binary, span_type=SpanTypes.SYSTEM) as span: @@ -366,6 +394,13 @@ def _traced_osspawn(module, pin, wrapped, instance, args, kwargs): def _traced_subprocess_init(module, pin, wrapped, instance, args, kwargs): try: cmd_args = args[0] if len(args) else kwargs["args"] + if isinstance(cmd_args, (list, tuple, str)): + if kwargs.get("shell", False): + for callback in _STR_CALLBACKS.values(): + callback(cmd_args) + else: + for callback in _LST_CALLBACKS.values(): + callback(cmd_args) cmd_args_list = shlex.split(cmd_args) if isinstance(cmd_args, str) else cmd_args is_shell = kwargs.get("shell", False) shellcmd = SubprocessCmdLine(cmd_args_list, shell=is_shell) # nosec diff --git a/ddtrace/contrib/jinja2/__init__.py b/ddtrace/contrib/jinja2/__init__.py index af2f6580041..b10c98609a8 100644 --- a/ddtrace/contrib/jinja2/__init__.py +++ b/ddtrace/contrib/jinja2/__init__.py @@ -27,23 +27,19 @@ By default, the service name is set to None, so it is inherited from the parent span. If there is no parent span and the service name is not overridden the agent will drop the traces. """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.jinja2.patch` directly +import warnings as _w -required_modules = ["jinja2"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.jinja2.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.jinja2.patch import get_version +from ddtrace.contrib.internal.jinja2.patch import patch +from ddtrace.contrib.internal.jinja2.patch import unpatch - # Expose public methods - from ddtrace.contrib.internal.jinja2.patch import get_version - from ddtrace.contrib.internal.jinja2.patch import patch - from ddtrace.contrib.internal.jinja2.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/kafka/__init__.py b/ddtrace/contrib/kafka/__init__.py index e784e6c9e52..f3cf66f6f23 100644 --- a/ddtrace/contrib/kafka/__init__.py +++ b/ddtrace/contrib/kafka/__init__.py @@ -41,23 +41,20 @@ Pin.override(confluent_kafka, service="custom-service-name") """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["confluent_kafka"] +# Required to allow users to import from `ddtrace.contrib.kafka.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.kafka.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.kafka.patch import get_version - from ddtrace.contrib.internal.kafka.patch import patch - from ddtrace.contrib.internal.kafka.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.kafka.patch import get_version +from ddtrace.contrib.internal.kafka.patch import patch +from ddtrace.contrib.internal.kafka.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/langchain/__init__.py b/ddtrace/contrib/langchain/__init__.py index ba42e44af75..9f306fe07ed 100644 --- a/ddtrace/contrib/langchain/__init__.py +++ b/ddtrace/contrib/langchain/__init__.py @@ -207,23 +207,19 @@ Default: ``0.1`` """ # noqa: E501 -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.langchain.patch` directly +import warnings as _w -required_modules = ["langchain"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.langchain.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.langchain.patch import get_version +from ddtrace.contrib.internal.langchain.patch import patch +from ddtrace.contrib.internal.langchain.patch import unpatch - # Expose public methods - from ddtrace.contrib.internal.langchain.patch import get_version - from ddtrace.contrib.internal.langchain.patch import patch - from ddtrace.contrib.internal.langchain.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/logbook/__init__.py b/ddtrace/contrib/logbook/__init__.py index 1257af21a07..d42491706f2 100644 --- a/ddtrace/contrib/logbook/__init__.py +++ b/ddtrace/contrib/logbook/__init__.py @@ -48,23 +48,19 @@ https://docs.datadoghq.com/logs/log_collection/python/ """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.logbook.patch` directly +import warnings as _w -required_modules = ["logbook"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.logbook.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.logbook.patch import get_version +from ddtrace.contrib.internal.logbook.patch import patch +from ddtrace.contrib.internal.logbook.patch import unpatch - # Expose public methods - from ddtrace.contrib.internal.logbook.patch import get_version - from ddtrace.contrib.internal.logbook.patch import patch - from ddtrace.contrib.internal.logbook.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/logging/__init__.py b/ddtrace/contrib/logging/__init__.py index 137a8f1a1af..24deca593a5 100644 --- a/ddtrace/contrib/logging/__init__.py +++ b/ddtrace/contrib/logging/__init__.py @@ -61,23 +61,19 @@ def hello(): https://docs.datadoghq.com/logs/guide/logs-not-showing-expected-timestamp/ """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.logging.patch` directly +import warnings as _w -required_modules = ["logging"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.logging.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.logging.patch import get_version +from ddtrace.contrib.internal.logging.patch import patch +from ddtrace.contrib.internal.logging.patch import unpatch - # Expose public methods - from ddtrace.contrib.internal.logging.patch import get_version - from ddtrace.contrib.internal.logging.patch import patch - from ddtrace.contrib.internal.logging.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/loguru/__init__.py b/ddtrace/contrib/loguru/__init__.py index ef4cf4e8cc0..4fb56886108 100644 --- a/ddtrace/contrib/loguru/__init__.py +++ b/ddtrace/contrib/loguru/__init__.py @@ -63,23 +63,19 @@ def log_format(record): https://docs.datadoghq.com/logs/log_collection/python/ """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.loguru.patch` directly +import warnings as _w -required_modules = ["loguru"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.loguru.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.loguru.patch import get_version +from ddtrace.contrib.internal.loguru.patch import patch +from ddtrace.contrib.internal.loguru.patch import unpatch - # Expose public methods - from ddtrace.contrib.internal.loguru.patch import get_version - from ddtrace.contrib.internal.loguru.patch import patch - from ddtrace.contrib.internal.loguru.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/mako/__init__.py b/ddtrace/contrib/mako/__init__.py index e76fabc7e2a..2dda665270e 100644 --- a/ddtrace/contrib/mako/__init__.py +++ b/ddtrace/contrib/mako/__init__.py @@ -10,23 +10,20 @@ t = Template(filename="index.html") """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["mako"] +# Required to allow users to import from `ddtrace.contrib.mako.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.mako.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.mako.patch import get_version - from ddtrace.contrib.internal.mako.patch import patch - from ddtrace.contrib.internal.mako.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.mako.patch import get_version +from ddtrace.contrib.internal.mako.patch import patch +from ddtrace.contrib.internal.mako.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/mariadb/__init__.py b/ddtrace/contrib/mariadb/__init__.py index 976514fadc9..e5c7139ee74 100644 --- a/ddtrace/contrib/mariadb/__init__.py +++ b/ddtrace/contrib/mariadb/__init__.py @@ -52,23 +52,20 @@ cursor.execute("SELECT 6*7 AS the_answer;") """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["mariadb"] +# Required to allow users to import from `ddtrace.contrib.mariadb.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.mariadb.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.mariadb.patch import get_version - from ddtrace.contrib.internal.mariadb.patch import patch - from ddtrace.contrib.internal.mariadb.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.mariadb.patch import get_version +from ddtrace.contrib.internal.mariadb.patch import patch +from ddtrace.contrib.internal.mariadb.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/molten/__init__.py b/ddtrace/contrib/molten/__init__.py index 624f13ac8e7..4116e4fd8c7 100644 --- a/ddtrace/contrib/molten/__init__.py +++ b/ddtrace/contrib/molten/__init__.py @@ -34,23 +34,20 @@ def hello(name: str, age: int) -> str: :ref:`All HTTP tags ` are supported for this integration. """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["molten"] +# Required to allow users to import from `ddtrace.contrib.molten.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.molten.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.molten.patch import get_version - from ddtrace.contrib.internal.molten.patch import patch - from ddtrace.contrib.internal.molten.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.molten.patch import get_version +from ddtrace.contrib.internal.molten.patch import patch +from ddtrace.contrib.internal.molten.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/mongoengine/__init__.py b/ddtrace/contrib/mongoengine/__init__.py index a7ded2176f3..1522ac1438b 100644 --- a/ddtrace/contrib/mongoengine/__init__.py +++ b/ddtrace/contrib/mongoengine/__init__.py @@ -17,22 +17,18 @@ Pin.override(client, service="mongo-master") """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.mongoengine.patch` directly +import warnings as _w -required_modules = ["mongoengine"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.mongoengine.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.mongoengine.patch import get_version +from ddtrace.contrib.internal.mongoengine.patch import patch - # Expose public methods - from ddtrace.contrib.internal.mongoengine.patch import get_version - from ddtrace.contrib.internal.mongoengine.patch import patch - __all__ = ["patch", "get_version"] +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/mysql/__init__.py b/ddtrace/contrib/mysql/__init__.py index 2c43bec69c0..1c3f6064e55 100644 --- a/ddtrace/contrib/mysql/__init__.py +++ b/ddtrace/contrib/mysql/__init__.py @@ -62,23 +62,22 @@ Help on mysql.connector can be found on: https://dev.mysql.com/doc/connector-python/en/ """ -from ddtrace.internal.utils.importlib import require_modules # check `mysql-connector` availability -required_modules = ["mysql.connector"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.mysql.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Required to allow users to import from `ddtrace.contrib.mysql.patch` directly +import warnings as _w - # Expose public methods - from ddtrace.contrib.internal.mysql.patch import get_version - from ddtrace.contrib.internal.mysql.patch import patch - __all__ = ["patch", "get_version"] +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 + +# Expose public methods +from ddtrace.contrib.internal.mysql.patch import get_version +from ddtrace.contrib.internal.mysql.patch import patch + + +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/mysqldb/__init__.py b/ddtrace/contrib/mysqldb/__init__.py index 6201e7016d7..17bb76b08a8 100644 --- a/ddtrace/contrib/mysqldb/__init__.py +++ b/ddtrace/contrib/mysqldb/__init__.py @@ -75,21 +75,18 @@ https://mysqlclient.readthedocs.io/ """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["MySQLdb"] +# Required to allow users to import from `ddtrace.contrib.mysqldb.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.mysqldb.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.mysqldb.patch import get_version - from ddtrace.contrib.internal.mysqldb.patch import patch +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.mysqldb.patch import get_version +from ddtrace.contrib.internal.mysqldb.patch import patch - __all__ = ["patch", "get_version"] + +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/openai/__init__.py b/ddtrace/contrib/openai/__init__.py index 0f3da05407d..79a5b488834 100644 --- a/ddtrace/contrib/openai/__init__.py +++ b/ddtrace/contrib/openai/__init__.py @@ -246,23 +246,20 @@ Pin.override(openai, service="my-openai-service") """ # noqa: E501 -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["openai"] +# Required to allow users to import from `ddtrace.contrib.openai.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.openai.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.openai.patch import get_version - from ddtrace.contrib.internal.openai.patch import patch - from ddtrace.contrib.internal.openai.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.openai.patch import get_version +from ddtrace.contrib.internal.openai.patch import patch +from ddtrace.contrib.internal.openai.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/protobuf/__init__.py b/ddtrace/contrib/protobuf/__init__.py index 4284782cdbf..dd429d3aa83 100644 --- a/ddtrace/contrib/protobuf/__init__.py +++ b/ddtrace/contrib/protobuf/__init__.py @@ -15,16 +15,10 @@ ~~~~~~~~~~~~~ """ -from ...internal.utils.importlib import require_modules +# Expose public methods +from ..internal.protobuf.patch import get_version +from ..internal.protobuf.patch import patch +from ..internal.protobuf.patch import unpatch -required_modules = ["protobuf"] - -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Expose public methods - from ..internal.protobuf.patch import get_version - from ..internal.protobuf.patch import patch - from ..internal.protobuf.patch import unpatch - - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/pylibmc/__init__.py b/ddtrace/contrib/pylibmc/__init__.py index c7d397153b7..5689fcd9070 100644 --- a/ddtrace/contrib/pylibmc/__init__.py +++ b/ddtrace/contrib/pylibmc/__init__.py @@ -19,22 +19,18 @@ Pin.override(client, service="memcached-sessions") """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.pylibmc.patch` directly +import warnings as _w -required_modules = ["pylibmc"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.pylibmc.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.pylibmc.client import TracedClient +from ddtrace.contrib.internal.pylibmc.patch import get_version +from ddtrace.contrib.internal.pylibmc.patch import patch - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.pylibmc.client import TracedClient - from ddtrace.contrib.internal.pylibmc.patch import get_version - from ddtrace.contrib.internal.pylibmc.patch import patch - __all__ = ["TracedClient", "patch", "get_version"] +__all__ = ["TracedClient", "patch", "get_version"] diff --git a/ddtrace/contrib/pymemcache/__init__.py b/ddtrace/contrib/pymemcache/__init__.py index 937b6688895..871d8ee0f6c 100644 --- a/ddtrace/contrib/pymemcache/__init__.py +++ b/ddtrace/contrib/pymemcache/__init__.py @@ -30,22 +30,19 @@ Pymemcache ``HashClient`` will also be indirectly patched as it uses ``Client`` under the hood. """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["pymemcache"] +# Required to allow users to import from `ddtrace.contrib.pymemcache.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.pymemcache.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.pymemcache.patch import get_version - from ddtrace.contrib.internal.pymemcache.patch import patch - from ddtrace.contrib.internal.pymemcache.patch import unpatch +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.pymemcache.patch import get_version +from ddtrace.contrib.internal.pymemcache.patch import patch +from ddtrace.contrib.internal.pymemcache.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/pymongo/__init__.py b/ddtrace/contrib/pymongo/__init__.py index 66174b10ff5..60394b6c2f3 100644 --- a/ddtrace/contrib/pymongo/__init__.py +++ b/ddtrace/contrib/pymongo/__init__.py @@ -35,22 +35,19 @@ Default: ``"pymongo"`` """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["pymongo"] +# Required to allow users to import from `ddtrace.contrib.pymongo.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.pymongo.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.pymongo.patch import get_version - from ddtrace.contrib.internal.pymongo.patch import patch +# Expose public methods +from ddtrace.contrib.internal.pymongo.patch import get_version +from ddtrace.contrib.internal.pymongo.patch import patch - __all__ = ["patch", "get_version"] + +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/pymysql/__init__.py b/ddtrace/contrib/pymysql/__init__.py index 4e7b322c5d6..d4b24e2cd5f 100644 --- a/ddtrace/contrib/pymysql/__init__.py +++ b/ddtrace/contrib/pymysql/__init__.py @@ -55,22 +55,18 @@ cursor.execute("SELECT 6*7 AS the_answer;") """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.pymysql.patch` directly +import warnings as _w -required_modules = ["pymysql"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.pymysql.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.pymysql.patch import get_version +from ddtrace.contrib.internal.pymysql.patch import patch - # Expose public methods - from ddtrace.contrib.internal.pymysql.patch import get_version - from ddtrace.contrib.internal.pymysql.patch import patch - __all__ = ["patch", "get_version"] +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/pynamodb/__init__.py b/ddtrace/contrib/pynamodb/__init__.py index 12c138f5377..3a84e603243 100644 --- a/ddtrace/contrib/pynamodb/__init__.py +++ b/ddtrace/contrib/pynamodb/__init__.py @@ -29,22 +29,17 @@ """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.pynamodb.patch` directly +import warnings as _w -required_modules = ["pynamodb.connection.base"] +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.pynamodb.patch` directly - import warnings as _w +# Expose public methods +from ddtrace.contrib.internal.pynamodb.patch import get_version +from ddtrace.contrib.internal.pynamodb.patch import patch - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.pynamodb.patch import get_version - from ddtrace.contrib.internal.pynamodb.patch import patch - - __all__ = ["patch", "get_version"] +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/pyodbc/__init__.py b/ddtrace/contrib/pyodbc/__init__.py index f874f561013..44605b7cdc9 100644 --- a/ddtrace/contrib/pyodbc/__init__.py +++ b/ddtrace/contrib/pyodbc/__init__.py @@ -53,22 +53,19 @@ cursor = db.cursor() cursor.execute("select * from users where id = 1") """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["pyodbc"] +# Required to allow users to import from `ddtrace.contrib.pyodbc.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.pyodbc.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.pyodbc.patch import get_version - from ddtrace.contrib.internal.pyodbc.patch import patch +# Expose public methods +from ddtrace.contrib.internal.pyodbc.patch import get_version +from ddtrace.contrib.internal.pyodbc.patch import patch - __all__ = ["patch", "get_version"] + +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/pyramid/__init__.py b/ddtrace/contrib/pyramid/__init__.py index b0cb0c9fcb3..72ef2613117 100644 --- a/ddtrace/contrib/pyramid/__init__.py +++ b/ddtrace/contrib/pyramid/__init__.py @@ -40,25 +40,21 @@ """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.pyramid.patch` directly +import warnings as _w -required_modules = ["pyramid"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.pyramid.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.pyramid.patch import get_version +from ddtrace.contrib.internal.pyramid.patch import patch +from ddtrace.contrib.internal.pyramid.trace import includeme +from ddtrace.contrib.internal.pyramid.trace import trace_pyramid +from ddtrace.contrib.internal.pyramid.trace import trace_tween_factory - # Expose public methods - from ddtrace.contrib.internal.pyramid.patch import get_version - from ddtrace.contrib.internal.pyramid.patch import patch - from ddtrace.contrib.internal.pyramid.trace import includeme - from ddtrace.contrib.internal.pyramid.trace import trace_pyramid - from ddtrace.contrib.internal.pyramid.trace import trace_tween_factory - __all__ = ["patch", "trace_pyramid", "trace_tween_factory", "includeme", "get_version"] +__all__ = ["patch", "trace_pyramid", "trace_tween_factory", "includeme", "get_version"] diff --git a/ddtrace/contrib/redis/__init__.py b/ddtrace/contrib/redis/__init__.py index 6ab85b1a9fa..4fddef1c742 100644 --- a/ddtrace/contrib/redis/__init__.py +++ b/ddtrace/contrib/redis/__init__.py @@ -67,22 +67,18 @@ client.get("my-key") """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.redis.patch` directly +import warnings as _w -required_modules = ["redis", "redis.client"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.redis.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.redis.patch import get_version +from ddtrace.contrib.internal.redis.patch import patch - # Expose public methods - from ddtrace.contrib.internal.redis.patch import get_version - from ddtrace.contrib.internal.redis.patch import patch - __all__ = ["patch", "get_version"] +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/rediscluster/__init__.py b/ddtrace/contrib/rediscluster/__init__.py index 55d20f9d933..cb14eb9aa30 100644 --- a/ddtrace/contrib/rediscluster/__init__.py +++ b/ddtrace/contrib/rediscluster/__init__.py @@ -48,22 +48,18 @@ Default: ``True`` """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.rediscluster.patch` directly +import warnings as _w -required_modules = ["rediscluster", "rediscluster.client"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.rediscluster.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.rediscluster.patch import get_version +from ddtrace.contrib.internal.rediscluster.patch import patch - # Expose public methods - from ddtrace.contrib.internal.rediscluster.patch import get_version - from ddtrace.contrib.internal.rediscluster.patch import patch - __all__ = ["patch", "get_version"] +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/requests/__init__.py b/ddtrace/contrib/requests/__init__.py index e9a9e973d77..727e8219339 100644 --- a/ddtrace/contrib/requests/__init__.py +++ b/ddtrace/contrib/requests/__init__.py @@ -72,24 +72,21 @@ cfg['service_name'] = 'auth-api' cfg['distributed_tracing'] = False """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["requests"] +# Required to allow users to import from `ddtrace.contrib.requests.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.requests.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.requests.patch import get_version - from ddtrace.contrib.internal.requests.patch import patch - from ddtrace.contrib.internal.requests.patch import unpatch - from ddtrace.contrib.internal.requests.session import TracedSession +# Expose public methods +from ddtrace.contrib.internal.requests.patch import get_version +from ddtrace.contrib.internal.requests.patch import patch +from ddtrace.contrib.internal.requests.patch import unpatch +from ddtrace.contrib.internal.requests.session import TracedSession - __all__ = ["patch", "unpatch", "TracedSession", "get_version"] + +__all__ = ["patch", "unpatch", "TracedSession", "get_version"] diff --git a/ddtrace/contrib/sanic/__init__.py b/ddtrace/contrib/sanic/__init__.py index b68db2efe1c..96f47d156ac 100644 --- a/ddtrace/contrib/sanic/__init__.py +++ b/ddtrace/contrib/sanic/__init__.py @@ -55,23 +55,20 @@ def index(request): .. __: https://sanic.readthedocs.io/en/latest/ """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["sanic"] +# Required to allow users to import from `ddtrace.contrib.sanic.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.sanic.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.sanic.patch import get_version - from ddtrace.contrib.internal.sanic.patch import patch - from ddtrace.contrib.internal.sanic.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.sanic.patch import get_version +from ddtrace.contrib.internal.sanic.patch import patch +from ddtrace.contrib.internal.sanic.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/selenium/__init__.py b/ddtrace/contrib/selenium/__init__.py index d30c896fdd7..f5016ce0254 100644 --- a/ddtrace/contrib/selenium/__init__.py +++ b/ddtrace/contrib/selenium/__init__.py @@ -22,16 +22,10 @@ DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS: The time in milliseconds to wait after flushing the RUM session. """ -from ...internal.utils.importlib import require_modules +# Expose public methods +from ..internal.selenium.patch import get_version +from ..internal.selenium.patch import patch +from ..internal.selenium.patch import unpatch -required_modules = ["selenium"] - -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Expose public methods - from ..internal.selenium.patch import get_version - from ..internal.selenium.patch import patch - from ..internal.selenium.patch import unpatch - - __all__ = ["get_version", "patch", "unpatch"] +__all__ = ["get_version", "patch", "unpatch"] diff --git a/ddtrace/contrib/snowflake/__init__.py b/ddtrace/contrib/snowflake/__init__.py index c89f42cf8c4..e675ff7a067 100644 --- a/ddtrace/contrib/snowflake/__init__.py +++ b/ddtrace/contrib/snowflake/__init__.py @@ -58,23 +58,20 @@ cursor = conn.cursor() cursor.execute("SELECT current_version()") """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["snowflake.connector"] +# Required to allow users to import from `ddtrace.contrib.snowflake.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.snowflake.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.snowflake.patch import get_version - from ddtrace.contrib.internal.snowflake.patch import patch - from ddtrace.contrib.internal.snowflake.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.snowflake.patch import get_version +from ddtrace.contrib.internal.snowflake.patch import patch +from ddtrace.contrib.internal.snowflake.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/sqlalchemy/__init__.py b/ddtrace/contrib/sqlalchemy/__init__.py index 15d05aa45f6..c294b8c976c 100644 --- a/ddtrace/contrib/sqlalchemy/__init__.py +++ b/ddtrace/contrib/sqlalchemy/__init__.py @@ -19,24 +19,21 @@ # Use a PIN to specify metadata related to this engine Pin.override(engine, service='replica-db') """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["sqlalchemy", "sqlalchemy.event"] +# Required to allow users to import from `ddtrace.contrib.sqlalchemy.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.sqlalchemy.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.sqlalchemy.engine import trace_engine - from ddtrace.contrib.internal.sqlalchemy.patch import get_version - from ddtrace.contrib.internal.sqlalchemy.patch import patch - from ddtrace.contrib.internal.sqlalchemy.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.sqlalchemy.engine import trace_engine +from ddtrace.contrib.internal.sqlalchemy.patch import get_version +from ddtrace.contrib.internal.sqlalchemy.patch import patch +from ddtrace.contrib.internal.sqlalchemy.patch import unpatch - __all__ = ["trace_engine", "patch", "unpatch", "get_version"] + +__all__ = ["trace_engine", "patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/sqlite3/__init__.py b/ddtrace/contrib/sqlite3/__init__.py index 02624851300..42499cf0447 100644 --- a/ddtrace/contrib/sqlite3/__init__.py +++ b/ddtrace/contrib/sqlite3/__init__.py @@ -53,22 +53,19 @@ cursor = db.cursor() cursor.execute("select * from users where id = 1") """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["sqlite3"] +# Required to allow users to import from `ddtrace.contrib.sqlite3.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.sqlite3.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.sqlite3.patch import get_version - from ddtrace.contrib.internal.sqlite3.patch import patch +# Expose public methods +from ddtrace.contrib.internal.sqlite3.patch import get_version +from ddtrace.contrib.internal.sqlite3.patch import patch - __all__ = ["patch", "get_version"] + +__all__ = ["patch", "get_version"] diff --git a/ddtrace/contrib/starlette/__init__.py b/ddtrace/contrib/starlette/__init__.py index 9413e507759..d3327feded4 100644 --- a/ddtrace/contrib/starlette/__init__.py +++ b/ddtrace/contrib/starlette/__init__.py @@ -57,23 +57,20 @@ config.starlette['request_span_name'] = 'custom-request-span-name' """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["starlette"] +# Required to allow users to import from `ddtrace.contrib.starlette.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.starlette.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.starlette.patch import get_version - from ddtrace.contrib.internal.starlette.patch import patch - from ddtrace.contrib.internal.starlette.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.starlette.patch import get_version +from ddtrace.contrib.internal.starlette.patch import patch +from ddtrace.contrib.internal.starlette.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/structlog/__init__.py b/ddtrace/contrib/structlog/__init__.py index c953b974f34..0a9bcb56395 100644 --- a/ddtrace/contrib/structlog/__init__.py +++ b/ddtrace/contrib/structlog/__init__.py @@ -38,23 +38,19 @@ https://docs.datadoghq.com/logs/log_collection/python/ """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.structlog.patch` directly +import warnings as _w -required_modules = ["structlog"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.structlog.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.structlog.patch import get_version +from ddtrace.contrib.internal.structlog.patch import patch +from ddtrace.contrib.internal.structlog.patch import unpatch - # Expose public methods - from ddtrace.contrib.internal.structlog.patch import get_version - from ddtrace.contrib.internal.structlog.patch import patch - from ddtrace.contrib.internal.structlog.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/subprocess/__init__.py b/ddtrace/contrib/subprocess/__init__.py index ea0faae85aa..2e4969648d1 100644 --- a/ddtrace/contrib/subprocess/__init__.py +++ b/ddtrace/contrib/subprocess/__init__.py @@ -19,23 +19,19 @@ ```ddtrace.contrib.subprocess.constants.SENSITIVE_WORDS_WILDCARDS```. """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.subprocess.patch` directly +import warnings as _w -required_modules = ["os", "subprocess"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.subprocess.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.subprocess.patch import get_version +from ddtrace.contrib.internal.subprocess.patch import patch +from ddtrace.contrib.internal.subprocess.patch import unpatch - # Expose public methods - from ddtrace.contrib.internal.subprocess.patch import get_version - from ddtrace.contrib.internal.subprocess.patch import patch - from ddtrace.contrib.internal.subprocess.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/tornado/__init__.py b/ddtrace/contrib/tornado/__init__.py index 9d681396810..ad0adef2dd5 100644 --- a/ddtrace/contrib/tornado/__init__.py +++ b/ddtrace/contrib/tornado/__init__.py @@ -104,33 +104,30 @@ def log_exception(self, typ, value, tb): * ``agent_port`` (default: `8126`): define the port of the APM agent. * ``settings`` (default: ``{}``): Tracer extra settings used to change, for instance, the filtering behavior. """ -from ddtrace.internal.utils.importlib import require_modules - - -required_modules = ["tornado"] - -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.tornado.patch` directly - import warnings as _w - - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - # Expose public methods - from ddtrace.contrib.internal.tornado.patch import get_version - from ddtrace.contrib.internal.tornado.patch import patch - from ddtrace.contrib.internal.tornado.patch import unpatch - from ddtrace.contrib.internal.tornado.stack_context import TracerStackContext - from ddtrace.contrib.internal.tornado.stack_context import context_provider - from ddtrace.contrib.internal.tornado.stack_context import run_with_trace_context - - __all__ = [ - "patch", - "unpatch", - "context_provider", - "run_with_trace_context", - "TracerStackContext", - "get_version", - ] + + +# Required to allow users to import from `ddtrace.contrib.tornado.patch` directly +import warnings as _w + + +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 + +# Expose public methods +from ddtrace.contrib.internal.tornado.patch import get_version +from ddtrace.contrib.internal.tornado.patch import patch +from ddtrace.contrib.internal.tornado.patch import unpatch +from ddtrace.contrib.internal.tornado.stack_context import TracerStackContext +from ddtrace.contrib.internal.tornado.stack_context import context_provider +from ddtrace.contrib.internal.tornado.stack_context import run_with_trace_context + + +__all__ = [ + "patch", + "unpatch", + "context_provider", + "run_with_trace_context", + "TracerStackContext", + "get_version", +] diff --git a/ddtrace/contrib/unittest/__init__.py b/ddtrace/contrib/unittest/__init__.py index cc15ea375c3..5180b59c959 100644 --- a/ddtrace/contrib/unittest/__init__.py +++ b/ddtrace/contrib/unittest/__init__.py @@ -34,15 +34,11 @@ Default: ``True`` """ -from ddtrace.internal.utils.importlib import require_modules + from .patch import get_version from .patch import patch from .patch import unpatch -required_modules = ["unittest"] - -with require_modules(required_modules) as missing_modules: - if not missing_modules: - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/urllib/__init__.py b/ddtrace/contrib/urllib/__init__.py index 8f22672d3d9..596251e99ad 100644 --- a/ddtrace/contrib/urllib/__init__.py +++ b/ddtrace/contrib/urllib/__init__.py @@ -4,23 +4,20 @@ if ``DD_IAST_ENABLED`` is set to ``True`` (for detecting sink points) and/or ``DD_ASM_ENABLED`` is set to ``True`` (for exploit prevention). """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["urllib"] +# Required to allow users to import from `ddtrace.contrib.urllib.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.urllib.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.urllib.patch import get_version - from ddtrace.contrib.internal.urllib.patch import patch - from ddtrace.contrib.internal.urllib.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.urllib.patch import get_version +from ddtrace.contrib.internal.urllib.patch import patch +from ddtrace.contrib.internal.urllib.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/urllib3/__init__.py b/ddtrace/contrib/urllib3/__init__.py index 71f6ad2eebe..0f2ebf2b12f 100644 --- a/ddtrace/contrib/urllib3/__init__.py +++ b/ddtrace/contrib/urllib3/__init__.py @@ -50,23 +50,20 @@ Default: ``False`` """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["urllib3"] +# Required to allow users to import from `ddtrace.contrib.urllib3.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.urllib3.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.urllib3.patch import get_version - from ddtrace.contrib.internal.urllib3.patch import patch - from ddtrace.contrib.internal.urllib3.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.urllib3.patch import get_version +from ddtrace.contrib.internal.urllib3.patch import patch +from ddtrace.contrib.internal.urllib3.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/vertexai/__init__.py b/ddtrace/contrib/vertexai/__init__.py index acc2417b679..f472d28790d 100644 --- a/ddtrace/contrib/vertexai/__init__.py +++ b/ddtrace/contrib/vertexai/__init__.py @@ -82,15 +82,10 @@ Pin.override(vertexai, service="my-vertexai-service") """ # noqa: E501 -from ddtrace.internal.utils.importlib import require_modules +from ddtrace.contrib.internal.vertexai.patch import get_version +from ddtrace.contrib.internal.vertexai.patch import patch +from ddtrace.contrib.internal.vertexai.patch import unpatch -required_modules = ["vertexai"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - from ddtrace.contrib.internal.vertexai.patch import get_version - from ddtrace.contrib.internal.vertexai.patch import patch - from ddtrace.contrib.internal.vertexai.patch import unpatch - - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/vertica/__init__.py b/ddtrace/contrib/vertica/__init__.py index dfafe39a79f..3ec424fbb53 100644 --- a/ddtrace/contrib/vertica/__init__.py +++ b/ddtrace/contrib/vertica/__init__.py @@ -39,23 +39,19 @@ Pin.override(conn, service='myverticaservice', tracer=custom_tracer) """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.vertica.patch` directly +import warnings as _w -required_modules = ["vertica_python"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.vertica.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.vertica.patch import get_version +from ddtrace.contrib.internal.vertica.patch import patch +from ddtrace.contrib.internal.vertica.patch import unpatch - # Expose public methods - from ddtrace.contrib.internal.vertica.patch import get_version - from ddtrace.contrib.internal.vertica.patch import patch - from ddtrace.contrib.internal.vertica.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/webbrowser/__init__.py b/ddtrace/contrib/webbrowser/__init__.py index e5123725b0c..49a251cad50 100644 --- a/ddtrace/contrib/webbrowser/__init__.py +++ b/ddtrace/contrib/webbrowser/__init__.py @@ -4,23 +4,20 @@ if ``DD_IAST_ENABLED`` is set to ``True`` (for detecting sink points) and/or ``DD_ASM_ENABLED`` is set to ``True`` (for exploit prevention). """ -from ddtrace.internal.utils.importlib import require_modules -required_modules = ["webbrowser"] +# Required to allow users to import from `ddtrace.contrib.webbrowser.patch` directly +import warnings as _w -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.webbrowser.patch` directly - import warnings as _w - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - # Expose public methods - from ddtrace.contrib.internal.webbrowser.patch import get_version - from ddtrace.contrib.internal.webbrowser.patch import patch - from ddtrace.contrib.internal.webbrowser.patch import unpatch +# Expose public methods +from ddtrace.contrib.internal.webbrowser.patch import get_version +from ddtrace.contrib.internal.webbrowser.patch import patch +from ddtrace.contrib.internal.webbrowser.patch import unpatch - __all__ = ["patch", "unpatch", "get_version"] + +__all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/yaaredis/__init__.py b/ddtrace/contrib/yaaredis/__init__.py index 05396dae7a3..03d76db11c0 100644 --- a/ddtrace/contrib/yaaredis/__init__.py +++ b/ddtrace/contrib/yaaredis/__init__.py @@ -66,22 +66,18 @@ async def example(): await client.get("my-key") """ -from ddtrace.internal.utils.importlib import require_modules +# Required to allow users to import from `ddtrace.contrib.yaaredis.patch` directly +import warnings as _w -required_modules = ["yaaredis", "yaaredis.client"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.yaaredis.patch` directly - import warnings as _w +with _w.catch_warnings(): + _w.simplefilter("ignore", DeprecationWarning) + from . import patch as _ # noqa: F401, I001 - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 +# Expose public methods +from ddtrace.contrib.internal.yaaredis.patch import get_version +from ddtrace.contrib.internal.yaaredis.patch import patch - # Expose public methods - from ddtrace.contrib.internal.yaaredis.patch import get_version - from ddtrace.contrib.internal.yaaredis.patch import patch - __all__ = ["patch", "get_version"] +__all__ = ["patch", "get_version"] diff --git a/ddtrace/internal/core/__init__.py b/ddtrace/internal/core/__init__.py index fab9b07c183..da31218f73c 100644 --- a/ddtrace/internal/core/__init__.py +++ b/ddtrace/internal/core/__init__.py @@ -110,7 +110,6 @@ def _on_jsonify_context_started_flask(ctx): from typing import Dict # noqa:F401 from typing import List # noqa:F401 from typing import Optional # noqa:F401 -from typing import Union # noqa:F401 from ddtrace.vendor.debtcollector import deprecate @@ -276,7 +275,11 @@ def root(self): @property def span(self) -> "Span": if self._inner_span is None: - raise ValueError("No span set on ExecutionContext") + log.warning("No span found in ExecutionContext %s", self.identifier) + # failsafe + from ddtrace import tracer + + self._inner_span = tracer.current_span() or tracer.trace("default") return self._inner_span @span.setter @@ -362,15 +365,14 @@ def discard_local_item(data_key: str) -> None: def get_span() -> Optional["Span"]: current: Optional[ExecutionContext] = _CURRENT_CONTEXT.get() while current is not None: - try: - return current.span - except ValueError: - current = current.parent + if current._inner_span is not None: + return current._inner_span + current = current.parent return None def get_root_span() -> Optional["Span"]: - span = _CURRENT_CONTEXT.get().span + span = get_span() if span is None: return None return span._local_root or span diff --git a/ddtrace/internal/coverage/instrumentation.py b/ddtrace/internal/coverage/instrumentation.py index 4a846944efc..19bc61238ff 100644 --- a/ddtrace/internal/coverage/instrumentation.py +++ b/ddtrace/internal/coverage/instrumentation.py @@ -2,7 +2,9 @@ # Import are noqa'd otherwise some formatters will helpfully remove them -if sys.version_info >= (3, 12): +if sys.version_info >= (3, 13): + from ddtrace.internal.coverage.instrumentation_py3_13 import instrument_all_lines # noqa +elif sys.version_info >= (3, 12): from ddtrace.internal.coverage.instrumentation_py3_12 import instrument_all_lines # noqa elif sys.version_info >= (3, 11): from ddtrace.internal.coverage.instrumentation_py3_11 import instrument_all_lines # noqa diff --git a/ddtrace/internal/coverage/instrumentation_py3_13.py b/ddtrace/internal/coverage/instrumentation_py3_13.py new file mode 100644 index 00000000000..2953a514e85 --- /dev/null +++ b/ddtrace/internal/coverage/instrumentation_py3_13.py @@ -0,0 +1,23 @@ +import dis +import sys +from types import CodeType +import typing as t + +from ddtrace.internal.injection import HookType +from ddtrace.internal.test_visibility.coverage_lines import CoverageLines + + +# This is primarily to make mypy happy without having to nest the rest of this module behind a version check +assert sys.version_info >= (3, 13) # nosec + +EXTENDED_ARG = dis.EXTENDED_ARG +IMPORT_NAME = dis.opmap["IMPORT_NAME"] +IMPORT_FROM = dis.opmap["IMPORT_FROM"] +RESUME = dis.opmap["RESUME"] +RETURN_CONST = dis.opmap["RETURN_CONST"] +EMPTY_MODULE_BYTES = bytes([RESUME, 0, RETURN_CONST, 0]) + + +def instrument_all_lines(code: CodeType, hook: HookType, path: str, package: str) -> t.Tuple[CodeType, CoverageLines]: + # No-op + return code, CoverageLines() diff --git a/ddtrace/internal/opentelemetry/span.py b/ddtrace/internal/opentelemetry/span.py index 15f497a358e..acb5e066311 100644 --- a/ddtrace/internal/opentelemetry/span.py +++ b/ddtrace/internal/opentelemetry/span.py @@ -220,9 +220,16 @@ def set_status(self, status, description=None): return if isinstance(status, Status): + if description is not None and description != status.description: + log.warning( + "Conflicting descriptions detected. The following description will not be set on the %s span: %s. " + "Ensure `Span.set_status(...)` is called with `(Status(status_code, description), None)` " + "or `(status_code, description)`", + self._ddspan.name, + description, + ) status_code = status.status_code message = status.description - log.warning("Description %s ignored. Use either `Status` or `(StatusCode, Description)`", description) else: status_code = status message = description diff --git a/ddtrace/internal/telemetry/writer.py b/ddtrace/internal/telemetry/writer.py index 71de6b03907..2be240c06fd 100644 --- a/ddtrace/internal/telemetry/writer.py +++ b/ddtrace/internal/telemetry/writer.py @@ -118,11 +118,17 @@ def send_event(self, request: Dict) -> Optional[httplib.HTTPResponse]: conn.request("POST", self._endpoint, rb_json, headers) resp = get_connection_response(conn) if resp.status < 300: - log.debug("sent %d in %.5fs to %s. response: %s", len(rb_json), sw.elapsed(), self.url, resp.status) + log.debug( + "Instrumentation Telemetry sent %d in %.5fs to %s. response: %s", + len(rb_json), + sw.elapsed(), + self.url, + resp.status, + ) else: - log.debug("failed to send telemetry to %s. response: %s", self.url, resp.status) - except Exception: - log.debug("failed to send telemetry to %s.", self.url, exc_info=True) + log.debug("Failed to send Instrumentation Telemetry to %s. response: %s", self.url, resp.status) + except Exception as e: + log.debug("Failed to send Instrumentation Telemetry to %s. Error: %s", self.url, str(e)) finally: if conn is not None: conn.close() diff --git a/ddtrace/pin.py b/ddtrace/pin.py index 7070efcf71c..926918b6cea 100644 --- a/ddtrace/pin.py +++ b/ddtrace/pin.py @@ -144,7 +144,10 @@ def override( def enabled(self): # type: () -> bool """Return true if this pin's tracer is enabled.""" - return bool(self.tracer) and (self.tracer.enabled or self.tracer._apm_opt_out) + # inline to avoid circular imports + from ddtrace.settings.asm import config as asm_config + + return bool(self.tracer) and (self.tracer.enabled or asm_config._apm_opt_out) def onto(self, obj, send=True): # type: (Any, bool) -> None diff --git a/ddtrace/profiling/collector/_memalloc.c b/ddtrace/profiling/collector/_memalloc.c index 3876517baaf..b55e9ebcfab 100644 --- a/ddtrace/profiling/collector/_memalloc.c +++ b/ddtrace/profiling/collector/_memalloc.c @@ -5,6 +5,7 @@ #define PY_SSIZE_T_CLEAN #include +#include "_memalloc_debug.h" #include "_memalloc_heap.h" #include "_memalloc_reentrant.h" #include "_memalloc_tb.h" @@ -48,7 +49,13 @@ static PyObject* object_string = NULL; // We add an option here to _add_ a crash, in order to observe this condition in a future diagnostic iteration. // **This option is _intended_ to crash the Python process** do not use without a good reason! static char g_crash_on_mutex_pass_str[] = "_DD_PROFILING_MEMALLOC_CRASH_ON_MUTEX_PASS"; -static const char* g_truthy_values[] = { "1", "true", "yes", "on", "enable", "enabled", NULL }; // NB the sentinel NULL +// The allocation profiler functions should (in theory) only be called when allocating Python +// objects, which should (in theory) only be done with the GIL held. We have reason to believe +// that this code is sometimes reached without the GIL held, since some crashes in the code +// seem to go away with our own locking. This debug flag will make the profiler crash if +// it detects the GIL is not held in places where we think it ought to be. +static char g_crash_on_no_gil_str[] = "_DD_PROFILING_MEMALLOC_CRASH_ON_NO_GIL"; +static bool g_crash_on_no_gil = false; static memlock_t g_memalloc_lock; static alloc_tracker_t* global_alloc_tracker; @@ -57,6 +64,28 @@ static alloc_tracker_t* global_alloc_tracker; static void memalloc_init(void); +static void +memalloc_prefork(void) +{ + // Lock the mutex prior to forking. This ensures that the memory profiler + // data structures will be in a consistent state in the child process. + // The rest of the memalloc calls do trylock so we don't run the risk + // of deadlocking if some other fork handler allocates + memlock_lock(&g_memalloc_lock); +} + +static void +memalloc_postfork_parent(void) +{ + memlock_unlock(&g_memalloc_lock); +} + +static void +memalloc_postfork_child(void) +{ + memlock_unlock(&g_memalloc_lock); +} + #ifdef _MSC_VER #pragma section(".CRT$XCU", read) __declspec(allocate(".CRT$XCU")) void (*memalloc_init_func)(void) = memalloc_init; @@ -70,22 +99,24 @@ static void memalloc_init() { // Check if we should crash the process on mutex pass - char* crash_on_mutex_pass_str = getenv(g_crash_on_mutex_pass_str); - bool crash_on_mutex_pass = false; - if (crash_on_mutex_pass_str) { - for (int i = 0; g_truthy_values[i]; i++) { - if (strcmp(crash_on_mutex_pass_str, g_truthy_values[i]) == 0) { - crash_on_mutex_pass = true; - break; - } - } - } + bool crash_on_mutex_pass = memalloc_get_bool_env(g_crash_on_mutex_pass_str); memlock_init(&g_memalloc_lock, crash_on_mutex_pass); +#ifndef _WIN32 + pthread_atfork(memalloc_prefork, memalloc_postfork_parent, memalloc_postfork_child); +#endif + + g_crash_on_no_gil = memalloc_get_bool_env(g_crash_on_no_gil_str); } static void memalloc_add_event(memalloc_context_t* ctx, void* ptr, size_t size) { + if (g_crash_on_no_gil && !PyGILState_Check()) { + int* p = NULL; + *p = 0; + abort(); // should never reach here + } + uint64_t alloc_count = atomic_add_clamped(&global_alloc_tracker->alloc_count, 1, ALLOC_TRACKER_MAX_COUNT); /* Return if we've reached the maximum number of allocations */ diff --git a/ddtrace/profiling/collector/_memalloc_debug.h b/ddtrace/profiling/collector/_memalloc_debug.h new file mode 100644 index 00000000000..0e2ad4653c3 --- /dev/null +++ b/ddtrace/profiling/collector/_memalloc_debug.h @@ -0,0 +1,25 @@ +#ifndef _DDTRACE_MEMALLOC_DEBUG_H +#define _DDTRACE_MEMALLOC_DEBUG_H + +#include +#include +#include + +static const char* g_truthy_values[] = { "1", "true", "yes", "on", "enable", "enabled", NULL }; // NB the sentinel NULL + +static bool +memalloc_get_bool_env(char* key) +{ + char* val = getenv(key); + if (!val) { + return false; + } + for (int i = 0; g_truthy_values[i]; i++) { + if (strcmp(val, g_truthy_values[i]) == 0) { + return true; + } + } + return false; +} + +#endif diff --git a/ddtrace/profiling/collector/_memalloc_heap.c b/ddtrace/profiling/collector/_memalloc_heap.c index d2a5cc29eee..5ca38dc8bac 100644 --- a/ddtrace/profiling/collector/_memalloc_heap.c +++ b/ddtrace/profiling/collector/_memalloc_heap.c @@ -2,6 +2,7 @@ #include #define PY_SSIZE_T_CLEAN +#include "_memalloc_debug.h" #include "_memalloc_heap.h" #include "_memalloc_reentrant.h" #include "_memalloc_tb.h" @@ -27,7 +28,6 @@ typedef struct } heap_tracker_t; static char g_crash_on_mutex_pass_str[] = "_DD_PROFILING_MEMHEAP_CRASH_ON_MUTEX_PASS"; -static const char* g_truthy_values[] = { "1", "true", "yes", "on", "enable", "enabled", NULL }; // NB the sentinel NULL static memlock_t g_memheap_lock; static heap_tracker_t global_heap_tracker; @@ -36,6 +36,25 @@ static heap_tracker_t global_heap_tracker; static void memheap_init(void); +static void +memheap_prefork(void) +{ + // See memalloc_prefork for an explanation of why this is here + memlock_lock(&g_memheap_lock); +} + +static void +memheap_postfork_parent(void) +{ + memlock_unlock(&g_memheap_lock); +} + +static void +memheap_postfork_child(void) +{ + memlock_unlock(&g_memheap_lock); +} + #ifdef _MSC_VER #pragma section(".CRT$XCU", read) __declspec(allocate(".CRT$XCU")) void (*memheap_init_func)(void) = memheap_init; @@ -49,17 +68,11 @@ static void memheap_init() { // Check if we should crash the process on mutex pass - char* crash_on_mutex_pass_str = getenv(g_crash_on_mutex_pass_str); - bool crash_on_mutex_pass = false; - if (crash_on_mutex_pass_str) { - for (int i = 0; g_truthy_values[i]; i++) { - if (strcmp(crash_on_mutex_pass_str, g_truthy_values[i]) == 0) { - crash_on_mutex_pass = true; - break; - } - } - } + bool crash_on_mutex_pass = memalloc_get_bool_env(g_crash_on_mutex_pass_str); memlock_init(&g_memheap_lock, crash_on_mutex_pass); +#ifndef _WIN32 + pthread_atfork(memheap_prefork, memheap_postfork_parent, memheap_postfork_child); +#endif } static uint32_t diff --git a/ddtrace/profiling/collector/_memalloc_reentrant.h b/ddtrace/profiling/collector/_memalloc_reentrant.h index cb4aa246961..54a07320236 100644 --- a/ddtrace/profiling/collector/_memalloc_reentrant.h +++ b/ddtrace/profiling/collector/_memalloc_reentrant.h @@ -125,19 +125,6 @@ memlock_trylock(memlock_t* lock) if (!lock) return false; -#ifdef __linux__ - // On Linux, we need to make sure we didn't just fork - // pthreads will guarantee the lock is consistent, but we at least need to clear it - static pid_t my_pid = 0; - if (my_pid == 0) { - my_pid = getpid(); - } else if (my_pid != getpid()) { - // We've forked, so we need to free the lock - memlock_unlock(lock); - my_pid = getpid(); - } -#endif - #ifdef _WIN32 bool result = WAIT_OBJECT_0 == WaitForSingleObject(lock->mutex, 0); // 0ms timeout -> no wait #else @@ -153,6 +140,19 @@ memlock_trylock(memlock_t* lock) return result; } +static inline void +memlock_lock(memlock_t* lock) +{ + if (!lock) + return; + +#ifdef _WIN32 + WaitForSingleObject(lock->mutex, INFINITE); +#else + pthread_mutex_lock(&lock->mutex); +#endif +} + // Cleanup function static inline bool memlock_destroy(memlock_t* lock) diff --git a/ddtrace/settings/asm.py b/ddtrace/settings/asm.py index cf20ea08f1a..0aadda674f5 100644 --- a/ddtrace/settings/asm.py +++ b/ddtrace/settings/asm.py @@ -269,6 +269,12 @@ def _eval_asm_can_be_enabled(self): def _api_security_feature_active(self) -> bool: return self._asm_libddwaf_available and self._asm_enabled and self._api_security_enabled + @property + def _apm_opt_out(self) -> bool: + return ( + self._asm_enabled or self._iast_enabled or tracer_config._sca_enabled is True + ) and self._appsec_standalone_enabled + @property def _user_event_mode(self) -> str: if self._asm_enabled and self._auto_user_instrumentation_enabled: diff --git a/docs/conf.py b/docs/conf.py index 84ebe856954..9a20184de0a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -140,6 +140,12 @@ def _skip(self, word): # This patterns also effect to html_static_path and html_extra_path exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# autodoc_mock_imports contains a list of modules to be mocked up. +# This is useful when some external dependencies are installed at build time and break the building process. +# The following modules require third party packages and should be mocked when generating docs: +autodoc_mock_imports = ["ddtrace.contrib.internal"] + # The reST default role (used for this markup: `text`) to use for all # documents. # diff --git a/hatch.toml b/hatch.toml index 614054dbfed..0baca1fd235 100644 --- a/hatch.toml +++ b/hatch.toml @@ -471,7 +471,7 @@ pytest = ["~=6.0", "~=7.0"] [[envs.pytest_plugin_v2.matrix]] -python = ["3.9", "3.10", "3.12", "3.13"] +python = ["3.9", "3.10", "3.12"] pytest = ["~=6.0", "~=7.0", "~=8.0"] [envs.snapshot_viewer] diff --git a/lib-injection/sources/min_compatible_versions.csv b/lib-injection/sources/min_compatible_versions.csv index b49ced9c42e..4537863f24c 100644 --- a/lib-injection/sources/min_compatible_versions.csv +++ b/lib-injection/sources/min_compatible_versions.csv @@ -24,6 +24,7 @@ asyncpg,~=0.23 asynctest,==0.13.0 austin-python,~=1.0 avro,0 +azure.functions,0 blinker,0 boto3,==1.34.49 bottle,>=0.12 @@ -31,6 +32,7 @@ bytecode,0 cassandra-driver,~=3.24.0 cattrs,<23.1.1 celery,~=5.1.0 +celery[redis],0 cfn-lint,~=0.53.1 channels,~=3.0 cherrypy,>=17 @@ -68,12 +70,13 @@ flask,~=0.12.0 flask-caching,~=1.10.0 flask-openapi3,0 gevent,~=20.12.0 +google-ai-generativelanguage,0 google-generativeai,0 googleapis-common-protos,0 graphene,~=3.0.0 graphql-core,~=3.2.0 graphql-relay,0 -greenlet,~=1.0 +greenlet,~=1.0.0 grpcio,~=1.34.0 gunicorn,==20.0.4 gunicorn[gevent],0 @@ -97,9 +100,10 @@ langchain-pinecone,==0.1.0 langchain_experimental,==0.0.47 logbook,~=1.0.0 loguru,~=0.4.0 +lxml,0 lz4,0 mako,~=1.1.0 -mariadb,~=1.0 +mariadb,~=1.0.0 markupsafe,<2.0 mock,0 molten,>=1.0 @@ -149,7 +153,6 @@ pytest-memray,~=1.7.0 pytest-mock,==2.0.0 pytest-sanic,~=1.6.2 python-consul,>=1.1 -python-json-logger,==2.0.7 python-memcached,0 python-multipart,0 ragas,==0.1.21 @@ -180,6 +183,7 @@ typing_extensions,0 urllib3,~=1.0 uwsgi,0 vcrpy,==4.2.1 +vertexai,0 vertica-python,>=0.6.0 virtualenv-clone,0 websockets,<11.0 diff --git a/min_compatible_versions.csv b/min_compatible_versions.csv index b49ced9c42e..4537863f24c 100644 --- a/min_compatible_versions.csv +++ b/min_compatible_versions.csv @@ -24,6 +24,7 @@ asyncpg,~=0.23 asynctest,==0.13.0 austin-python,~=1.0 avro,0 +azure.functions,0 blinker,0 boto3,==1.34.49 bottle,>=0.12 @@ -31,6 +32,7 @@ bytecode,0 cassandra-driver,~=3.24.0 cattrs,<23.1.1 celery,~=5.1.0 +celery[redis],0 cfn-lint,~=0.53.1 channels,~=3.0 cherrypy,>=17 @@ -68,12 +70,13 @@ flask,~=0.12.0 flask-caching,~=1.10.0 flask-openapi3,0 gevent,~=20.12.0 +google-ai-generativelanguage,0 google-generativeai,0 googleapis-common-protos,0 graphene,~=3.0.0 graphql-core,~=3.2.0 graphql-relay,0 -greenlet,~=1.0 +greenlet,~=1.0.0 grpcio,~=1.34.0 gunicorn,==20.0.4 gunicorn[gevent],0 @@ -97,9 +100,10 @@ langchain-pinecone,==0.1.0 langchain_experimental,==0.0.47 logbook,~=1.0.0 loguru,~=0.4.0 +lxml,0 lz4,0 mako,~=1.1.0 -mariadb,~=1.0 +mariadb,~=1.0.0 markupsafe,<2.0 mock,0 molten,>=1.0 @@ -149,7 +153,6 @@ pytest-memray,~=1.7.0 pytest-mock,==2.0.0 pytest-sanic,~=1.6.2 python-consul,>=1.1 -python-json-logger,==2.0.7 python-memcached,0 python-multipart,0 ragas,==0.1.21 @@ -180,6 +183,7 @@ typing_extensions,0 urllib3,~=1.0 uwsgi,0 vcrpy,==4.2.1 +vertexai,0 vertica-python,>=0.6.0 virtualenv-clone,0 websockets,<11.0 diff --git a/pyproject.toml b/pyproject.toml index 3c83cfc5067..df5fbdcdbb2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -175,6 +175,7 @@ exclude-modules = ''' | ddtrace.internal.coverage.instrumentation_py3_10 | ddtrace.internal.coverage.instrumentation_py3_11 | ddtrace.internal.coverage.instrumentation_py3_12 + | ddtrace.internal.coverage.instrumentation_py3_13 ) ''' @@ -203,12 +204,6 @@ test-command = ["python {project}/tests/smoke_test.py"] # Skip trying to test arm64 builds on Intel Macs test-skip = "*-macosx_universal2:arm64" -[tool.cibuildwheel.macos.environment] -# Workaround for Macos 11.0 versioning issue, a.k.a. -# `platform.mac_ver()` reports incorrect MacOS version at 11.0 -# See: https://stackoverflow.com/a/65402241 -SYSTEM_VERSION_COMPAT = "0" - [tool.ruff] exclude = [ ".riot", diff --git a/releasenotes/notes/313-enable-integrations-01990085769ea3f3.yaml b/releasenotes/notes/313-enable-integrations-01990085769ea3f3.yaml new file mode 100644 index 00000000000..cc3c4cc49ab --- /dev/null +++ b/releasenotes/notes/313-enable-integrations-01990085769ea3f3.yaml @@ -0,0 +1,17 @@ +--- +upgrade: + - | + Enables tests with Python 3.13 for the following integrations: + - aiomysql + - aiopg + - asyncpg + - avro + - confluent-kafka + - django + - falcon + - fastapi + - grpcio + - mysqldb + - protobuf + - pyodbc + - sqlalchemy diff --git a/releasenotes/notes/core_context_span_failsafe-8b2f2f5344689c1d.yaml b/releasenotes/notes/core_context_span_failsafe-8b2f2f5344689c1d.yaml new file mode 100644 index 00000000000..e4ef2651f64 --- /dev/null +++ b/releasenotes/notes/core_context_span_failsafe-8b2f2f5344689c1d.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + tracer: This fix resolves an issue where the core instrumentation could raise an uncaught exception. diff --git a/releasenotes/notes/django-cache-service-name-schematization-bef19b44b7414016.yaml b/releasenotes/notes/django-cache-service-name-schematization-bef19b44b7414016.yaml new file mode 100644 index 00000000000..0fbdb9993a5 --- /dev/null +++ b/releasenotes/notes/django-cache-service-name-schematization-bef19b44b7414016.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + tracing(django): Fixes issue where django cache is represented as a django service rather than the third party service. \ No newline at end of file diff --git a/releasenotes/notes/fix-lib-injection-python-json-logger-5248a251acb1adf4.yaml b/releasenotes/notes/fix-lib-injection-python-json-logger-5248a251acb1adf4.yaml new file mode 100644 index 00000000000..916bdd88afe --- /dev/null +++ b/releasenotes/notes/fix-lib-injection-python-json-logger-5248a251acb1adf4.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + lib-injection: remove python-json-logger from library compatibility check. diff --git a/releasenotes/notes/iast-fastapi-header-injection-ce4805c91e87ebe2.yaml b/releasenotes/notes/iast-fastapi-header-injection-ce4805c91e87ebe2.yaml new file mode 100644 index 00000000000..6b478151e88 --- /dev/null +++ b/releasenotes/notes/iast-fastapi-header-injection-ce4805c91e87ebe2.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Code Security: add support for Header Injection vulnerability sink point. diff --git a/releasenotes/notes/profiling-remove-getpid-from-memalloc-74f54043accdfc9e.yaml b/releasenotes/notes/profiling-remove-getpid-from-memalloc-74f54043accdfc9e.yaml new file mode 100644 index 00000000000..1680dba0673 --- /dev/null +++ b/releasenotes/notes/profiling-remove-getpid-from-memalloc-74f54043accdfc9e.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + profiling: Removed a system call from the memory allocation profiler, used to detect forks, + which ran on every allocation and resulted in a significant slowdown. diff --git a/releasenotes/notes/rasp_cmdi-3c7819ee9e33e447.yaml b/releasenotes/notes/rasp_cmdi-3c7819ee9e33e447.yaml new file mode 100644 index 00000000000..89744bf9be2 --- /dev/null +++ b/releasenotes/notes/rasp_cmdi-3c7819ee9e33e447.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + ASM: This introduces the support for command injection for Exploit Prevention. With previous support of shell injection with os.system, + this provides automatic instrumentation for subprocess module functions and os.spawn* functions, + ensuring monitoring and blocking for Exploit Prevention on those endpoints. diff --git a/riotfile.py b/riotfile.py index 69467452a1f..0d9f66ca925 100644 --- a/riotfile.py +++ b/riotfile.py @@ -473,7 +473,8 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT Venv( pys="3.9", pkgs={ - "gevent": ["~=21.1.0", latest], + # https://github.com/gevent/gevent/issues/2076 + "gevent": ["~=21.1.0", "<21.8.0"], "greenlet": "~=1.0", }, ), @@ -608,15 +609,30 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT Venv( name="falcon", command="pytest {cmdargs} tests/contrib/falcon", - pys=select_pys(min_version="3.7", max_version="3.12"), pkgs={ - "falcon": [ - "~=3.0.0", - "~=3.0", # latest 3.x - latest, - ], "pytest-randomly": latest, }, + venvs=[ + Venv( + pys=select_pys(min_version="3.7", max_version="3.12"), + pkgs={ + "falcon": [ + "~=3.0.0", + "~=3.0", # latest 3.x + latest, + ], + }, + ), + Venv( + pys=select_pys(min_version="3.13"), + pkgs={ + "falcon": [ + "~=4.0", # latest 4.x + latest, + ], + }, + ), + ], ), Venv( name="bottle", @@ -831,7 +847,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT ), Venv( # django started supporting psycopg3 in 4.2 for versions >3.1.8 - pys=select_pys(min_version="3.8", max_version="3.12"), + pys=select_pys(min_version="3.8", max_version="3.13"), pkgs={ "django": ["~=4.2"], "psycopg": latest, @@ -1334,15 +1350,22 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT command="pytest {cmdargs} tests/contrib/sqlalchemy", pkgs={ "pytest-randomly": latest, - "greenlet": "==3.0.3", + "psycopg2-binary": latest, + "mysql-connector-python": latest, + "sqlalchemy": latest, }, venvs=[ Venv( pys=select_pys(min_version="3.7", max_version="3.12"), pkgs={ + "greenlet": "==3.0.3", "sqlalchemy": ["~=1.3.0", latest], - "psycopg2-binary": latest, - "mysql-connector-python": latest, + }, + ), + Venv( + pys=select_pys(min_version="3.12"), + pkgs={ + "greenlet": "==3.1.0", }, ), ], @@ -1573,7 +1596,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT name="fastapi", command="pytest {cmdargs} tests/contrib/fastapi", pkgs={ - "httpx": latest, + "httpx": "<=0.27.2", "pytest-asyncio": "==0.21.1", "python-multipart": latest, "pytest-randomly": latest, @@ -1587,20 +1610,32 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT ), Venv( # fastapi added support for Python 3.11 in 0.86.0 - pys=select_pys(min_version="3.11", max_version="3.12"), + pys=select_pys(min_version="3.11"), pkgs={"fastapi": ["~=0.86.0", latest], "anyio": ">=3.4.0,<4.0"}, ), ], ), Venv( name="aiomysql", - pys=select_pys(min_version="3.7", max_version="3.12"), command="pytest {cmdargs} tests/contrib/aiomysql", - pkgs={ - "pytest-randomly": latest, - "pytest-asyncio": "==0.21.1", - "aiomysql": ["~=0.1.0", latest], - }, + venvs=[ + Venv( + pys=select_pys(min_version="3.7", max_version="3.12"), + pkgs={ + "pytest-randomly": latest, + "pytest-asyncio": "==0.21.1", + "aiomysql": ["~=0.1.0", latest], + }, + ), + Venv( + pys=select_pys(min_version="3.13"), + pkgs={ + "pytest-randomly": latest, + "pytest-asyncio": latest, + "aiomysql": ["~=0.1.0", latest], + }, + ), + ], ), Venv( name="pytest", @@ -1721,6 +1756,11 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "msgpack": latest, "more_itertools": "<8.11.0", "pytest-randomly": latest, + "pytest-bdd": [ + ">=4.0,<5.0", + # FIXME: add support for v6.1 + ">=6.0,<6.1", + ], }, venvs=[ Venv( @@ -1749,7 +1789,6 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT pys=select_pys(min_version="3.10", max_version="3.12"), pkgs={ "pytest-bdd": [ - ">=4.0,<5.0", # FIXME: add support for v6.1 ">=6.0,<6.1", ] @@ -1827,12 +1866,19 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT ), Venv( # grpcio added support for Python 3.12 in 1.59 - pys=select_pys(min_version="3.12", max_version="3.12"), + pys="3.12", pkgs={ "grpcio": ["~=1.59.0", latest], "pytest-asyncio": "==0.23.7", }, ), + Venv( + # grpcio added support for Python 3.13 in 1.66.2 + pys=select_pys(min_version="3.13"), + pkgs={ + "grpcio": ["~=1.66.2", latest], + }, + ), ], ), Venv( @@ -2029,7 +2075,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, 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"], }, @@ -2187,7 +2233,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT ), Venv( name="avro", - pys=select_pys(min_version="3.7", max_version="3.12"), + pys=select_pys(min_version="3.7"), command="pytest {cmdargs} tests/contrib/avro", pkgs={ "avro": latest, @@ -2197,7 +2243,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT Venv( name="protobuf", command="pytest {cmdargs} tests/contrib/protobuf", - pys=select_pys(min_version="3.8", max_version="3.12"), + pys=select_pys(min_version="3.8"), pkgs={ "protobuf": latest, "pytest-randomly": latest, @@ -2349,7 +2395,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT pkgs={"asyncpg": ["~=0.27", latest]}, ), Venv( - pys=select_pys(min_version="3.12", max_version="3.12"), + pys=select_pys(min_version="3.12"), pkgs={"asyncpg": [latest]}, ), ], @@ -2584,7 +2630,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT ), Venv( # pyodbc added support for Python 3.11 in 4.0.35 - pys=select_pys(min_version="3.11", max_version="3.12"), + pys=select_pys(min_version="3.11"), pkgs={"pyodbc": [latest]}, ), ], @@ -2670,6 +2716,10 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT pys=select_pys(min_version="3.9", max_version="3.12"), pkgs={"mysqlclient": ["~=2.1", latest]}, ), + Venv( + pys=select_pys(min_version="3.13"), + pkgs={"mysqlclient": "==2.2.6"}, + ), ], ), Venv( @@ -2847,7 +2897,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT pkgs={"confluent-kafka": ["~=1.9.2", latest]}, ), # confluent-kafka added support for Python 3.11 in 2.0.2 - Venv(pys=select_pys(min_version="3.11", max_version="3.12"), pkgs={"confluent-kafka": latest}), + Venv(pys=select_pys(min_version="3.11"), pkgs={"confluent-kafka": latest}), ], ), ], diff --git a/scripts/freshvenvs.py b/scripts/freshvenvs.py index 13cd81a6fcc..22fa848e21d 100644 --- a/scripts/freshvenvs.py +++ b/scripts/freshvenvs.py @@ -123,7 +123,7 @@ def _get_updatable_packages_implementing(modules: typing.Set[str]) -> typing.Set if not _venv_sets_latest_for_package(v, package): pinned_packages.add(package) - packages = {m for m in modules if "." not in m} + packages = {m for m in modules if "." not in m and m not in pinned_packages} return packages diff --git a/scripts/gen_circleci_config.py b/scripts/gen_circleci_config.py index bc51f2c5519..3a68a1a7975 100644 --- a/scripts/gen_circleci_config.py +++ b/scripts/gen_circleci_config.py @@ -17,10 +17,13 @@ def gen_required_suites(template: dict) -> None: required_suites = template["requires_tests"]["requires"] = [] for_each_testrun_needed( suites=sorted( - set(n.rpartition("::")[-1] for n, s in get_suites().items() if not s.get("skip", False)) - & set(template["jobs"].keys()) + set( + n + for n, s in get_suites().items() + if not s.get("skip", False) and n.rpartition("::")[-1] in template["jobs"] + ) ), - action=lambda suite: required_suites.append(suite), + action=lambda suite: required_suites.append(suite.rpartition("::")[-1]), git_selections=extract_git_commit_selections(os.getenv("GIT_COMMIT_DESC", "")), ) diff --git a/scripts/min_compatible_versions.py b/scripts/min_compatible_versions.py index ae35049f02b..88d955e8f5f 100644 --- a/scripts/min_compatible_versions.py +++ b/scripts/min_compatible_versions.py @@ -14,7 +14,16 @@ OUT_FILENAME = "min_compatible_versions.csv" OUT_DIRECTORIES = (".", "lib-injection/sources") -IGNORED_PACKAGES = {"setuptools", "attrs", "pytest-randomly", "pillow", "botocore", "pytest-asyncio", "click"} +IGNORED_PACKAGES = { + "attrs", + "botocore", + "click", + "pillow", + "pytest-asyncio", + "pytest-randomly", + "python-json-logger", + "setuptools", +} def _format_version_specifiers(spec: Set[str]) -> Set[str]: diff --git a/templates/integration/__init__.py b/templates/integration/__init__.py index 1fb943b8226..ef19d262e58 100644 --- a/templates/integration/__init__.py +++ b/templates/integration/__init__.py @@ -40,15 +40,10 @@ myfoo = foo.Foo() Pin.override(myfoo, service="myfoo") """ -from ...internal.utils.importlib import require_modules +from .patch import get_version +from .patch import patch +from .patch import unpatch -required_modules = ["foo"] -with require_modules(required_modules) as missing_modules: - if not missing_modules: - from .patch import get_version - from .patch import patch - from .patch import unpatch - - __all__ = ["patch", "unpatch", "get_version"] +__all__ = ["patch", "unpatch", "get_version"] diff --git a/tests/appsec/appsec/rules-rasp-blocking.json b/tests/appsec/appsec/rules-rasp-blocking.json index f2f8c4d7955..e5038e4a7c2 100644 --- a/tests/appsec/appsec/rules-rasp-blocking.json +++ b/tests/appsec/appsec/rules-rasp-blocking.json @@ -201,6 +201,55 @@ "stack_trace", "block" ] + }, + { + "id": "rasp-932-110", + "name": "OS command injection exploit", + "tags": { + "type": "command_injection", + "category": "vulnerability_trigger", + "cwe": "77", + "capec": "1000/152/248/88", + "confidence": "0", + "module": "rasp" + }, + "conditions": [ + { + "parameters": { + "resource": [ + { + "address": "server.sys.exec.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": "cmdi_detector" + } + ], + "transformers": [], + "on_match": [ + "stack_trace", + "block" + ] } ] } \ No newline at end of file diff --git a/tests/appsec/appsec/rules-rasp-disabled.json b/tests/appsec/appsec/rules-rasp-disabled.json index 4a0943a34fb..ec67b186732 100644 --- a/tests/appsec/appsec/rules-rasp-disabled.json +++ b/tests/appsec/appsec/rules-rasp-disabled.json @@ -201,6 +201,55 @@ "on_match": [ "stack_trace" ] + }, + { + "id": "rasp-932-110", + "name": "OS command 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.exec.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": "cmdi_detector" + } + ], + "transformers": [], + "on_match": [ + "stack_trace" + ] } ] } \ No newline at end of file diff --git a/tests/appsec/appsec/rules-rasp-redirecting.json b/tests/appsec/appsec/rules-rasp-redirecting.json index a7a53db6e3b..6e2080b2dbf 100644 --- a/tests/appsec/appsec/rules-rasp-redirecting.json +++ b/tests/appsec/appsec/rules-rasp-redirecting.json @@ -211,6 +211,55 @@ "stack_trace", "block" ] + }, + { + "id": "rasp-932-110", + "name": "OS command injection exploit", + "tags": { + "type": "command_injection", + "category": "vulnerability_trigger", + "cwe": "77", + "capec": "1000/152/248/88", + "confidence": "0", + "module": "rasp" + }, + "conditions": [ + { + "parameters": { + "resource": [ + { + "address": "server.sys.exec.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": "cmdi_detector" + } + ], + "transformers": [], + "on_match": [ + "stack_trace", + "block" + ] } ] } \ No newline at end of file diff --git a/tests/appsec/appsec/rules-rasp.json b/tests/appsec/appsec/rules-rasp.json index c1a6822d261..d73672392af 100644 --- a/tests/appsec/appsec/rules-rasp.json +++ b/tests/appsec/appsec/rules-rasp.json @@ -197,6 +197,54 @@ "on_match": [ "stack_trace" ] + }, + { + "id": "rasp-932-110", + "name": "OS command injection exploit", + "tags": { + "type": "command_injection", + "category": "vulnerability_trigger", + "cwe": "77", + "capec": "1000/152/248/88", + "confidence": "0", + "module": "rasp" + }, + "conditions": [ + { + "parameters": { + "resource": [ + { + "address": "server.sys.exec.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": "cmdi_detector" + } + ], + "transformers": [], + "on_match": [ + "stack_trace" + ] } ] } \ No newline at end of file diff --git a/tests/appsec/appsec/test_asm_standalone.py b/tests/appsec/appsec/test_asm_standalone.py index 6841314cea8..3c2ed58caf6 100644 --- a/tests/appsec/appsec/test_asm_standalone.py +++ b/tests/appsec/appsec/test_asm_standalone.py @@ -138,8 +138,6 @@ def test_appsec_standalone_apm_enabled_metric(tracer_appsec_standalone): or args.get("iast_enabled", None) or args.get("DD_APPSEC_SCA_ENABLED", "0") == "1" ): - assert tracer._apm_opt_out is True assert span.get_metric("_dd.apm.enabled") == 0.0 else: - assert tracer._apm_opt_out is False assert span.get_metric("_dd.apm.enabled") is None diff --git a/tests/appsec/appsec/test_remoteconfiguration.py b/tests/appsec/appsec/test_remoteconfiguration.py index f00167706dc..1d2c47bc190 100644 --- a/tests/appsec/appsec/test_remoteconfiguration.py +++ b/tests/appsec/appsec/test_remoteconfiguration.py @@ -117,7 +117,7 @@ def test_rc_activation_states_off(tracer, appsec_enabled, rc_value, remote_confi @pytest.mark.parametrize( "rc_enabled, appsec_enabled, capability", [ - (True, "true", "D4HkA/w="), # All capabilities except ASM_ACTIVATION + (True, "true", "L4HkA/w="), # All capabilities except ASM_ACTIVATION (False, "true", ""), (True, "false", "gAAAAA=="), (False, "false", ""), @@ -142,7 +142,7 @@ def test_rc_capabilities(rc_enabled, appsec_enabled, capability, tracer): @pytest.mark.parametrize( "env_rules, expected", [ - ({}, "D4HkA/4="), # All capabilities + ({}, "L4HkA/4="), # All capabilities ({"_asm_static_rule_file": DEFAULT.RULES}, "gAAAAg=="), # Only ASM_FEATURES ], ) diff --git a/tests/appsec/contrib_appsec/django_app/urls.py b/tests/appsec/contrib_appsec/django_app/urls.py index 77ad7a7f0a6..aaff69169b5 100644 --- a/tests/appsec/contrib_appsec/django_app/urls.py +++ b/tests/appsec/contrib_appsec/django_app/urls.py @@ -1,5 +1,6 @@ import os import sqlite3 +import subprocess import tempfile import django @@ -129,13 +130,33 @@ def rasp(request, endpoint: str): res.append(f"Error: {e}") tracer.current_span()._local_root.set_tag("rasp.request.done", endpoint) return HttpResponse("<\\br>\n".join(res)) + elif endpoint == "shell_injection": + res = ["shell_injection endpoint"] + for param in query_params: + if param.startswith("cmd"): + cmd = query_params[param] + try: + if param.startswith("cmdsys"): + res.append(f'cmd stdout: {os.system(f"ls {cmd}")}') + else: + res.append(f'cmd stdout: {subprocess.run(f"ls {cmd}", shell=True)}') + except Exception as e: + res.append(f"Error: {e}") + tracer.current_span()._local_root.set_tag("rasp.request.done", endpoint) + return HttpResponse("<\\br>\n".join(res)) elif endpoint == "command_injection": res = ["command_injection endpoint"] for param in query_params: - if param.startswith("cmd"): + if param.startswith("cmda"): + cmd = query_params[param] + try: + res.append(f'cmd stdout: {subprocess.run([cmd, "-c", "3", "localhost"])}') + except Exception as e: + res.append(f"Error: {e}") + elif param.startswith("cmds"): cmd = query_params[param] try: - res.append(f'cmd stdout: {os.system(f"ls {cmd}")}') + res.append(f"cmd stdout: {subprocess.run(cmd)}") except Exception as e: res.append(f"Error: {e}") tracer.current_span()._local_root.set_tag("rasp.request.done", endpoint) diff --git a/tests/appsec/contrib_appsec/fastapi_app/app.py b/tests/appsec/contrib_appsec/fastapi_app/app.py index 10b7b430543..c5b765c4bbb 100644 --- a/tests/appsec/contrib_appsec/fastapi_app/app.py +++ b/tests/appsec/contrib_appsec/fastapi_app/app.py @@ -1,6 +1,7 @@ import asyncio import os import sqlite3 +import subprocess from typing import Optional from fastapi import FastAPI @@ -178,13 +179,33 @@ async def rasp(endpoint: str, request: Request): res.append(f"Error: {e}") tracer.current_span()._local_root.set_tag("rasp.request.done", endpoint) return HTMLResponse("<\\br>\n".join(res)) + elif endpoint == "shell_injection": + res = ["shell_injection endpoint"] + for param in query_params: + if param.startswith("cmd"): + cmd = query_params[param] + try: + if param.startswith("cmdsys"): + res.append(f'cmd stdout: {os.system(f"ls {cmd}")}') + else: + res.append(f'cmd stdout: {subprocess.run(f"ls {cmd}", shell=True)}') + except Exception as e: + res.append(f"Error: {e}") + tracer.current_span()._local_root.set_tag("rasp.request.done", endpoint) + return HTMLResponse("<\\br>\n".join(res)) elif endpoint == "command_injection": res = ["command_injection endpoint"] for param in query_params: - if param.startswith("cmd"): + if param.startswith("cmda"): + cmd = query_params[param] + try: + res.append(f'cmd stdout: {subprocess.run([cmd, "-c", "3", "localhost"])}') + except Exception as e: + res.append(f"Error: {e}") + elif param.startswith("cmds"): cmd = query_params[param] try: - res.append(f'cmd stdout: {os.system(f"ls {cmd}")}') + res.append(f"cmd stdout: {subprocess.run(cmd)}") except Exception as e: res.append(f"Error: {e}") tracer.current_span()._local_root.set_tag("rasp.request.done", endpoint) diff --git a/tests/appsec/contrib_appsec/flask_app/app.py b/tests/appsec/contrib_appsec/flask_app/app.py index 5270229d3e9..939a7cad678 100644 --- a/tests/appsec/contrib_appsec/flask_app/app.py +++ b/tests/appsec/contrib_appsec/flask_app/app.py @@ -1,5 +1,6 @@ import os import sqlite3 +import subprocess from typing import Optional from flask import Flask @@ -126,13 +127,33 @@ def rasp(endpoint: str): res.append(f"Error: {e}") tracer.current_span()._local_root.set_tag("rasp.request.done", endpoint) return "<\\br>\n".join(res) + elif endpoint == "shell_injection": + res = ["shell_injection endpoint"] + for param in query_params: + if param.startswith("cmd"): + cmd = query_params[param] + try: + if param.startswith("cmdsys"): + res.append(f'cmd stdout: {os.system(f"ls {cmd}")}') + else: + res.append(f'cmd stdout: {subprocess.run(f"ls {cmd}", shell=True)}') + except Exception as e: + res.append(f"Error: {e}") + tracer.current_span()._local_root.set_tag("rasp.request.done", endpoint) + return "<\\br>\n".join(res) elif endpoint == "command_injection": res = ["command_injection endpoint"] for param in query_params: - if param.startswith("cmd"): + if param.startswith("cmda"): + cmd = query_params[param] + try: + res.append(f'cmd stdout: {subprocess.run([cmd, "-c", "3", "localhost"])}') + except Exception as e: + res.append(f"Error: {e}") + elif param.startswith("cmds"): cmd = query_params[param] try: - res.append(f'cmd stdout: {os.system(f"ls {cmd}")}') + res.append(f"cmd stdout: {subprocess.run(cmd)}") except Exception as e: res.append(f"Error: {e}") tracer.current_span()._local_root.set_tag("rasp.request.done", endpoint) diff --git a/tests/appsec/contrib_appsec/utils.py b/tests/appsec/contrib_appsec/utils.py index 0d195df764e..d3691e2bea3 100644 --- a/tests/appsec/contrib_appsec/utils.py +++ b/tests/appsec/contrib_appsec/utils.py @@ -88,8 +88,6 @@ def check_rules_triggered(self, rule_id: List[str], root_span): assert result == rule_id, f"result={result}, expected={rule_id}" def update_tracer(self, interface): - interface.tracer._asm_enabled = asm_config._asm_enabled - interface.tracer._iast_enabled = asm_config._iast_enabled interface.tracer.configure(api_version="v0.4") assert asm_config._asm_libddwaf_available # Only for tests diagnostics @@ -1310,11 +1308,19 @@ def test_stream_response( + [("sql_injection", "user_id_1=1 OR 1=1&user_id_2=1 OR 1=1", "rasp-942-100", ("dispatch",))] + [ ( - "command_injection", - "cmd_1=$(cat /etc/passwd 1>%262 ; echo .)&cmd_2=$(uname -a 1>%262 ; echo .)", + "shell_injection", + "cmdsys_1=$(cat /etc/passwd 1>%262 ; echo .)&cmdrun_2=$(uname -a 1>%262 ; echo .)", "rasp-932-100", ("system", "rasp"), ) + ] + + [ + ( + "command_injection", + "cmda_1=/sbin/ping&cmds_2=/usr/bin/ls%20-la", + "rasp-932-110", + ("Popen", "rasp"), + ) ], ) @pytest.mark.parametrize( @@ -1383,11 +1389,23 @@ def validate_top_function(trace): trace ), f"unknown top function {trace['frames'][0]} {[t['function'] for t in trace['frames'][:4]]}" # assert mocked.call_args_list == [] + expected_rule_type = "command_injection" if endpoint == "shell_injection" else endpoint + expected_variant = ( + "exec" if endpoint == "command_injection" else "shell" if endpoint == "shell_injection" else None + ) matches = [t for c, n, t in telemetry_calls if c == "CountMetric" and n == "appsec.rasp.rule.match"] - assert matches == [(("rule_type", endpoint), ("waf_version", DDWAF_VERSION))], matches + if expected_variant: + expected_tags = ( + ("rule_type", expected_rule_type), + ("rule_variant", expected_variant), + ("waf_version", DDWAF_VERSION), + ) + else: + expected_tags = (("rule_type", expected_rule_type), ("waf_version", DDWAF_VERSION)) + assert matches == [expected_tags], matches evals = [t for c, n, t in telemetry_calls if c == "CountMetric" and n == "appsec.rasp.rule.eval"] # there may have been multiple evaluations of other rules too - assert (("rule_type", endpoint), ("waf_version", DDWAF_VERSION)) in evals + assert expected_tags in evals if action_level == 2: assert get_tag("rasp.request.done") is None, get_tag("rasp.request.done") else: @@ -1511,7 +1529,7 @@ def test_fingerprinting(self, interface, root_span, get_tag, asm_enabled, user_a def test_iast(self, interface, root_span, get_tag): from ddtrace.ext import http - url = "/rasp/command_injection/?cmd=." + url = "/rasp/command_injection/?cmds=." self.update_tracer(interface) response = interface.client.get(url) assert self.status(response) == 200 diff --git a/tests/appsec/iast/taint_sinks/test_command_injection.py b/tests/appsec/iast/taint_sinks/test_command_injection.py index b716f594e85..ab611c1969b 100644 --- a/tests/appsec/iast/taint_sinks/test_command_injection.py +++ b/tests/appsec/iast/taint_sinks/test_command_injection.py @@ -123,7 +123,7 @@ def test_popen_wait_shell_true(iast_context_defaults): _assert_vulnerability("test_popen_wait_shell_true", source_name=source_name) -@pytest.mark.skipif(sys.platform != "linux", reason="Only for Linux") +@pytest.mark.skipif(sys.platform not in ["linux", "darwin"], reason="Only for Unix") @pytest.mark.parametrize( "function,mode,arguments,tag", [ @@ -156,11 +156,11 @@ def test_osspawn_variants(iast_context_defaults, function, mode, arguments, tag) if "spawnv" in cleaned_name: # label test_osspawn_variants2 - function(mode, copied_args[0], copied_args) + function(mode, copied_args[0], copied_args[1:]) label = "test_osspawn_variants2" else: # label test_osspawn_variants1 - function(mode, copied_args[0], *copied_args) + function(mode, copied_args[0], *copied_args[1:]) label = "test_osspawn_variants1" _assert_vulnerability( @@ -171,7 +171,7 @@ def test_osspawn_variants(iast_context_defaults, function, mode, arguments, tag) ) -@pytest.mark.skipif(sys.platform != "linux", reason="Only for Linux") +@pytest.mark.skipif(sys.platform not in ["linux", "darwin"], reason="Only for Unix") def test_multiple_cmdi(iast_context_defaults): _BAD_DIR = taint_pyobject( pyobject=_BAD_DIR_DEFAULT, @@ -193,7 +193,7 @@ def test_multiple_cmdi(iast_context_defaults): assert len(list(data["vulnerabilities"])) == 2 -@pytest.mark.skipif(sys.platform != "linux", reason="Only for Linux") +@pytest.mark.skipif(sys.platform not in ["linux", "darwin"], reason="Only for Unix") def test_string_cmdi(iast_context_defaults): cmd = taint_pyobject( pyobject="dir -l .", diff --git a/tests/appsec/utils.py b/tests/appsec/utils.py index 9e09b3ae2ad..9df1065f005 100644 --- a/tests/appsec/utils.py +++ b/tests/appsec/utils.py @@ -6,7 +6,6 @@ from ddtrace._trace.span import Span from ddtrace.ext import SpanTypes import ddtrace.internal.core as core -from ddtrace.settings.asm import config as asm_config from tests.utils import override_global_config @@ -35,8 +34,6 @@ def asm_context( with override_global_config(config) if config else contextlib.nullcontext(): if tracer is None: tracer = default_tracer - if asm_config._asm_enabled: - tracer._asm_enabled = True if config: tracer.configure(api_version="v0.4") diff --git a/tests/contrib/django/test_django.py b/tests/contrib/django/test_django.py index cf44ed6bcdd..1bd223539c9 100644 --- a/tests/contrib/django/test_django.py +++ b/tests/contrib/django/test_django.py @@ -30,6 +30,7 @@ from ddtrace.ext import http from ddtrace.ext import user from ddtrace.internal.compat import ensure_text +from ddtrace.internal.schema import schematize_service_name from ddtrace.propagation._utils import get_wsgi_header from ddtrace.propagation.http import HTTP_HEADER_PARENT_ID from ddtrace.propagation.http import HTTP_HEADER_SAMPLING_PRIORITY @@ -769,6 +770,18 @@ def test_cache_get(test_spans): assert_dict_issuperset(span.get_tags(), expected_meta) +def test_cache_service_schematization(test_spans): + cache = django.core.cache.caches["default"] + + with override_config("django", dict(cache_service_name="test-cache-service")): + cache.get("missing_key") + spans = test_spans.get_spans() + assert spans + span = spans[0] + expected_service_name = schematize_service_name(config.django.cache_service_name) + assert span.service == expected_service_name + + def test_cache_get_rowcount_existing_key(test_spans): # get the default cache cache = django.core.cache.caches["default"] diff --git a/tests/contrib/django/test_django_appsec.py b/tests/contrib/django/test_django_appsec.py index fb262918a56..3c5cb399739 100644 --- a/tests/contrib/django/test_django_appsec.py +++ b/tests/contrib/django/test_django_appsec.py @@ -47,8 +47,6 @@ def _aux_appsec_get_root_span( ): if cookies is None: cookies = {} - tracer._asm_enabled = asm_config._asm_enabled - tracer._iast_enabled = asm_config._iast_enabled # Hack: need to pass an argument to configure so that the processors are recreated tracer.configure(api_version="v0.4") # Set cookies diff --git a/tests/contrib/django/test_django_appsec_iast.py b/tests/contrib/django/test_django_appsec_iast.py index 7e42e8aa903..ee5cb069331 100644 --- a/tests/contrib/django/test_django_appsec_iast.py +++ b/tests/contrib/django/test_django_appsec_iast.py @@ -14,7 +14,6 @@ from ddtrace.appsec._iast.constants import VULN_INSECURE_COOKIE from ddtrace.appsec._iast.constants import VULN_SQL_INJECTION from ddtrace.internal.compat import urlencode -from ddtrace.settings.asm import config as asm_config from tests.appsec.iast.iast_utils import get_line_and_hash from tests.utils import override_env from tests.utils import override_global_config @@ -66,8 +65,6 @@ def _aux_appsec_get_root_span( ): if cookies is None: cookies = {} - tracer._asm_enabled = asm_config._asm_enabled - tracer._iast_enabled = asm_config._iast_enabled # Hack: need to pass an argument to configure so that the processors are recreated tracer.configure(api_version="v0.4") # Set cookies diff --git a/tests/contrib/djangorestframework/test_appsec.py b/tests/contrib/djangorestframework/test_appsec.py index cf2985f32f3..68489f99be0 100644 --- a/tests/contrib/djangorestframework/test_appsec.py +++ b/tests/contrib/djangorestframework/test_appsec.py @@ -11,7 +11,6 @@ @pytest.mark.skipif(django.VERSION < (1, 10), reason="requires django version >= 1.10") def test_djangorest_request_body_urlencoded(client, test_spans, tracer): with override_global_config(dict(_asm_enabled=True)): - tracer._asm_enabled = True # Hack: need to pass an argument to configure so that the processors are recreated tracer.configure(api_version="v0.4") payload = urlencode({"mytestingbody_key": "mytestingbody_value"}) diff --git a/tests/contrib/elasticsearch/test_elasticsearch.py b/tests/contrib/elasticsearch/test_elasticsearch.py index b80b4486e71..4a480c550c8 100644 --- a/tests/contrib/elasticsearch/test_elasticsearch.py +++ b/tests/contrib/elasticsearch/test_elasticsearch.py @@ -1,6 +1,7 @@ import datetime from http.client import HTTPConnection from importlib import import_module +import json import time import pytest @@ -167,7 +168,12 @@ def test_elasticsearch(self): es.index(id=10, body={"name": "ten", "created": datetime.date(2016, 1, 1)}, **args) es.index(id=11, body={"name": "eleven", "created": datetime.date(2016, 2, 1)}, **args) es.index(id=12, body={"name": "twelve", "created": datetime.date(2016, 3, 1)}, **args) - result = es.search(sort=["name:desc"], size=100, body={"query": {"match_all": {}}}, **args) + result = es.search( + sort={"name": {"order": "desc", "unmapped_type": "keyword"}}, + size=100, + body={"query": {"match_all": {}}}, + **args, + ) assert len(result["hits"]["hits"]) == 3, result spans = self.get_spans() @@ -183,13 +189,25 @@ def test_elasticsearch(self): assert url.endswith("/_search") assert url == span.get_tag("elasticsearch.url") if elasticsearch.__version__ >= (8, 0, 0): - assert span.get_tag("elasticsearch.body").replace(" ", "") == '{"query":{"match_all":{}},"size":100}' - assert set(span.get_tag("elasticsearch.params").split("&")) == {"sort=name%3Adesc"} - assert set(span.get_tag(http.QUERY_STRING).split("&")) == {"sort=name%3Adesc"} + # Key order is not consistent, parse into dict to compare + body = json.loads(span.get_tag("elasticsearch.body")) + assert body == { + "query": {"match_all": {}}, + "sort": {"name": {"order": "desc", "unmapped_type": "keyword"}}, + "size": 100, + } + assert not span.get_tag("elasticsearch.params") + assert not span.get_tag(http.QUERY_STRING) else: assert span.get_tag("elasticsearch.body").replace(" ", "") == '{"query":{"match_all":{}}}' - assert set(span.get_tag("elasticsearch.params").split("&")) == {"sort=name%3Adesc", "size=100"} - assert set(span.get_tag(http.QUERY_STRING).split("&")) == {"sort=name%3Adesc", "size=100"} + assert set(span.get_tag("elasticsearch.params").split("&")) == { + "sort=%7B%27name%27%3A+%7B%27order%27%3A+%27desc%27%2C+%27unmapped_type%27%3A+%27keyword%27%7D%7D", + "size=100", + } + assert set(span.get_tag(http.QUERY_STRING).split("&")) == { + "sort=%7B%27name%27%3A+%7B%27order%27%3A+%27desc%27%2C+%27unmapped_type%27%3A+%27keyword%27%7D%7D", + "size=100", + } assert span.get_tag("component") == "elasticsearch" assert span.get_tag("span.kind") == "client" diff --git a/tests/contrib/falcon/app/resources.py b/tests/contrib/falcon/app/resources.py index 74bb5b2a2e3..0b6df3bfaa5 100644 --- a/tests/contrib/falcon/app/resources.py +++ b/tests/contrib/falcon/app/resources.py @@ -1,5 +1,11 @@ import falcon +from ddtrace.internal.utils.version import parse_version + + +FALCON_VERSION = parse_version(falcon.__version__) +TEXT_ATTR = "text" if FALCON_VERSION >= (3, 0, 0) else "body" + class Resource200(object): """Throw a handled exception here to ensure our use of @@ -13,26 +19,26 @@ def on_get(self, req, resp, **kwargs): pass resp.status = falcon.HTTP_200 - resp.body = "Success" + setattr(resp, TEXT_ATTR, "Success") resp.append_header("my-response-header", "my_response_value") class DynamicURIResource(object): def on_get(self, req, resp, name): resp.status = falcon.HTTP_200 - resp.body = name + setattr(resp, TEXT_ATTR, name) class Resource201(object): def on_post(self, req, resp, **kwargs): resp.status = falcon.HTTP_201 - resp.body = "Success" + setattr(resp, TEXT_ATTR, "Success") class Resource500(object): def on_get(self, req, resp, **kwargs): resp.status = falcon.HTTP_500 - resp.body = "Failure" + setattr(resp, TEXT_ATTR, "Failure") class ResourceException(object): diff --git a/tests/contrib/fastapi/test_fastapi_appsec.py b/tests/contrib/fastapi/test_fastapi_appsec.py index 69284807d09..d2f1b6492f9 100644 --- a/tests/contrib/fastapi/test_fastapi_appsec.py +++ b/tests/contrib/fastapi/test_fastapi_appsec.py @@ -9,7 +9,6 @@ def _aux_appsec_prepare_tracer(tracer, asm_enabled=True): - tracer._asm_enabled = asm_enabled # Hack: need to pass an argument to configure so that the processors are recreated tracer.configure(api_version="v0.4") diff --git a/tests/contrib/fastapi/test_fastapi_appsec_iast.py b/tests/contrib/fastapi/test_fastapi_appsec_iast.py index 1a5db995af4..dd3050771c6 100644 --- a/tests/contrib/fastapi/test_fastapi_appsec_iast.py +++ b/tests/contrib/fastapi/test_fastapi_appsec_iast.py @@ -13,10 +13,13 @@ from fastapi import __version__ as _fastapi_version from fastapi.responses import JSONResponse import pytest +from starlette.responses import PlainTextResponse from ddtrace.appsec._constants import IAST from ddtrace.appsec._iast import oce from ddtrace.appsec._iast._handlers import _on_iast_fastapi_patch +from ddtrace.appsec._iast._patch_modules import patch_iast +from ddtrace.appsec._iast.constants import VULN_HEADER_INJECTION from ddtrace.appsec._iast.constants import VULN_INSECURE_COOKIE from ddtrace.appsec._iast.constants import VULN_NO_HTTPONLY_COOKIE from ddtrace.appsec._iast.constants import VULN_NO_SAMESITE_COOKIE @@ -39,7 +42,6 @@ def _aux_appsec_prepare_tracer(tracer): patch_sqlite_sqli() 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") @@ -765,3 +767,77 @@ def insecure_cookie(request: Request): assert "line" not in vulnerability["location"].keys() assert vulnerability["location"]["spanId"] assert vulnerability["hash"] + + +def test_fastapi_header_injection(fastapi_application, client, tracer, test_spans): + @fastapi_application.get("/header_injection/") + async def header_injection(request: Request): + from ddtrace.appsec._iast._taint_tracking._taint_objects import is_pyobject_tainted + + tainted_string = request.headers.get("test") + assert is_pyobject_tainted(tainted_string) + result_response = JSONResponse(content={"message": "OK"}) + # label test_fastapi_header_injection + result_response.headers["Header-Injection"] = tainted_string + result_response.headers["Vary"] = tainted_string + result_response.headers["Foo"] = "bar" + + return result_response + + with override_global_config(dict(_iast_enabled=True, _deduplication_enabled=False, _iast_request_sampling=100.0)): + _aux_appsec_prepare_tracer(tracer) + patch_iast({"header_injection": True}) + resp = client.get( + "/header_injection/", + headers={"test": "test_injection_header"}, + ) + assert resp.status_code == 200 + + span = test_spans.pop_traces()[0][0] + assert span.get_metric(IAST.ENABLED) == 1.0 + + iast_tag = span.get_tag(IAST.JSON) + assert iast_tag is not None + loaded = json.loads(iast_tag) + line, hash_value = get_line_and_hash( + "test_fastapi_header_injection", VULN_HEADER_INJECTION, filename=TEST_FILE_PATH + ) + assert len(loaded["vulnerabilities"]) == 1 + vulnerability = loaded["vulnerabilities"][0] + assert vulnerability["type"] == VULN_HEADER_INJECTION + assert vulnerability["hash"] == hash_value + assert vulnerability["location"]["line"] == line + assert vulnerability["location"]["path"] == TEST_FILE_PATH + assert vulnerability["location"]["spanId"] + + +def test_fastapi_header_injection_inline_response(fastapi_application, client, tracer, test_spans): + @fastapi_application.get("/header_injection_inline_response/", response_class=PlainTextResponse) + async def header_injection_inline_response(request: Request): + from ddtrace.appsec._iast._taint_tracking._taint_objects import is_pyobject_tainted + + tainted_string = request.headers.get("test") + assert is_pyobject_tainted(tainted_string) + return PlainTextResponse( + content="OK", + headers={"Header-Injection": tainted_string, "Vary": tainted_string, "Foo": "bar"}, + ) + + with override_global_config(dict(_iast_enabled=True, _deduplication_enabled=False, _iast_request_sampling=100.0)): + _aux_appsec_prepare_tracer(tracer) + patch_iast({"header_injection": True}) + resp = client.get( + "/header_injection_inline_response/", + headers={"test": "test_injection_header"}, + ) + assert resp.status_code == 200 + + span = test_spans.pop_traces()[0][0] + assert span.get_metric(IAST.ENABLED) == 1.0 + + iast_tag = span.get_tag(IAST.JSON) + assert iast_tag is not None + loaded = json.loads(iast_tag) + assert len(loaded["vulnerabilities"]) == 1 + vulnerability = loaded["vulnerabilities"][0] + assert vulnerability["type"] == VULN_HEADER_INJECTION diff --git a/tests/contrib/flask/test_flask_appsec.py b/tests/contrib/flask/test_flask_appsec.py index 82433e63b64..7fd045c61f2 100644 --- a/tests/contrib/flask/test_flask_appsec.py +++ b/tests/contrib/flask/test_flask_appsec.py @@ -30,7 +30,6 @@ def setUp(self): patch() def _aux_appsec_prepare_tracer(self, appsec_enabled=True): - self.tracer._asm_enabled = appsec_enabled # Hack: need to pass an argument to configure so that the processors are recreated self.tracer.configure(api_version="v0.4") diff --git a/tests/contrib/flask/test_flask_appsec_iast.py b/tests/contrib/flask/test_flask_appsec_iast.py index 238d0630549..94948bde0b2 100644 --- a/tests/contrib/flask/test_flask_appsec_iast.py +++ b/tests/contrib/flask/test_flask_appsec_iast.py @@ -48,9 +48,7 @@ def setUp(self): patch_header_injection() patch_json() - self.tracer._iast_enabled = True - self.tracer._asm_enabled = True - self.tracer.configure(api_version="v0.4") + self.tracer.configure(api_version="v0.4", appsec_enabled=True, iast_enabled=True) oce.reconfigure() @pytest.mark.skipif(not python_supported_by_iast(), reason="Python version not supported by IAST") @@ -1381,8 +1379,6 @@ def setUp(self): ) ): super(FlaskAppSecIASTDisabledTestCase, self).setUp() - self.tracer._iast_enabled = False - self.tracer._asm_enabled = False self.tracer.configure(api_version="v0.4") @pytest.mark.skipif(not python_supported_by_iast(), reason="Python version not supported by IAST") diff --git a/tests/contrib/flask/test_flask_appsec_telemetry.py b/tests/contrib/flask/test_flask_appsec_telemetry.py index 499d806f56f..df21a2b508b 100644 --- a/tests/contrib/flask/test_flask_appsec_telemetry.py +++ b/tests/contrib/flask/test_flask_appsec_telemetry.py @@ -16,7 +16,6 @@ def inject_fixtures(self, telemetry_writer): # noqa: F811 self.telemetry_writer = telemetry_writer def _aux_appsec_prepare_tracer(self, appsec_enabled=True): - self.tracer._asm_enabled = appsec_enabled # Hack: need to pass an argument to configure so that the processors are recreated self.tracer.configure(api_version="v0.4") diff --git a/tests/contrib/kafka/test_kafka.py b/tests/contrib/kafka/test_kafka.py index d49f85f26b2..9d2786151da 100644 --- a/tests/contrib/kafka/test_kafka.py +++ b/tests/contrib/kafka/test_kafka.py @@ -37,6 +37,7 @@ SNAPSHOT_IGNORES = [ "metrics.kafka.message_offset", "meta.error.stack", + "meta.error.message", "meta.messaging.kafka.bootstrap.servers", "meta.peer.service", ] diff --git a/tests/contrib/requests/test_requests_distributed.py b/tests/contrib/requests/test_requests_distributed.py index bda32171f6b..b3974700f87 100644 --- a/tests/contrib/requests/test_requests_distributed.py +++ b/tests/contrib/requests/test_requests_distributed.py @@ -1,6 +1,7 @@ from requests_mock import Adapter from ddtrace import config +from ddtrace.settings.asm import config as asm_config from tests.utils import TracerTestCase from tests.utils import get_128_bit_trace_id_from_headers @@ -117,47 +118,48 @@ def matcher(request): def test_propagation_apm_opt_out_true(self): # ensure distributed tracing works when APM is opted out - self.tracer._apm_opt_out = True - self.tracer.enabled = False + with self.override_global_config(dict(_appsec_standalone_enabled=True, _asm_enabled=True)): + assert asm_config._apm_opt_out + self.tracer.enabled = False + cfg = config.get_from(self.session) + cfg["distributed_tracing"] = True + adapter = Adapter() + self.session.mount("mock", adapter) - cfg = config.get_from(self.session) - cfg["distributed_tracing"] = True - adapter = Adapter() - self.session.mount("mock", adapter) + with self.tracer.trace("root") as root: - with self.tracer.trace("root") as root: + def matcher(request): + return self.headers_not_here(self.tracer, request) - def matcher(request): - return self.headers_here(self.tracer, request, root) + adapter.register_uri("GET", "mock://datadog/foo", additional_matcher=matcher, text="bar") + resp = self.session.get("mock://datadog/foo") + assert 200 == resp.status_code + assert "bar" == resp.text - adapter.register_uri("GET", "mock://datadog/foo", additional_matcher=matcher, text="bar") - resp = self.session.get("mock://datadog/foo") - assert 200 == resp.status_code - assert "bar" == resp.text - - spans = self.pop_spans() - root, req = spans - assert "root" == root.name - assert "requests.request" == req.name - assert root.trace_id == req.trace_id - assert root.span_id == req.parent_id + spans = self.pop_spans() + root, req = spans + assert "root" == root.name + assert "requests.request" == req.name + assert root.trace_id == req.trace_id + assert root.span_id == req.parent_id def test_propagation_apm_opt_out_false(self): # ensure distributed tracing doesn't works when APM is disabled but not opted out - self.tracer._apm_opt_out = False - self.tracer.enabled = False + with self.override_global_config(dict(_appsec_standalone_enabled=False, _asm_enabled=True)): + assert not asm_config._apm_opt_out + self.tracer.enabled = False - cfg = config.get_from(self.session) - cfg["distributed_tracing"] = True - adapter = Adapter() - self.session.mount("mock", adapter) + cfg = config.get_from(self.session) + cfg["distributed_tracing"] = True + adapter = Adapter() + self.session.mount("mock", adapter) - with self.tracer.trace("root"): + with self.tracer.trace("root"): - def matcher(request): - return self.headers_not_here(self.tracer, request) + def matcher(request): + return self.headers_not_here(self.tracer, request) - adapter.register_uri("GET", "mock://datadog/foo", additional_matcher=matcher, text="bar") - resp = self.session.get("mock://datadog/foo") - assert 200 == resp.status_code - assert "bar" == resp.text + adapter.register_uri("GET", "mock://datadog/foo", additional_matcher=matcher, text="bar") + resp = self.session.get("mock://datadog/foo") + assert 200 == resp.status_code + assert "bar" == resp.text diff --git a/tests/contrib/urllib3/test_urllib3.py b/tests/contrib/urllib3/test_urllib3.py index 8aa92a4dfb0..841e2c826ab 100644 --- a/tests/contrib/urllib3/test_urllib3.py +++ b/tests/contrib/urllib3/test_urllib3.py @@ -12,6 +12,7 @@ from ddtrace.ext import http from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME from ddtrace.pin import Pin +from ddtrace.settings.asm import config as asm_config from tests.contrib.config import HTTPBIN_CONFIG from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase @@ -527,13 +528,16 @@ def test_distributed_tracing_disabled(self): timeout=mock.ANY, ) + @pytest.mark.skip(reason="urlib3 does not set the ASM Manual keep tag so x-datadog headers are not propagated") def test_distributed_tracing_apm_opt_out_true(self): """Tests distributed tracing headers are passed by default""" # Check that distributed tracing headers are passed down; raise an error rather than make the # request since we don't care about the response at all config.urllib3["distributed_tracing"] = True - self.tracer._apm_opt_out = True self.tracer.enabled = False + # Ensure the ASM SpanProcessor is set + self.tracer.configure(appsec_standalone_enabled=True, appsec_enabled=True) + assert asm_config._apm_opt_out with mock.patch( "urllib3.connectionpool.HTTPConnectionPool._make_request", side_effect=ValueError ) as m_make_request: @@ -580,8 +584,10 @@ def test_distributed_tracing_apm_opt_out_true(self): def test_distributed_tracing_apm_opt_out_false(self): """Test with distributed tracing disabled does not propagate the headers""" config.urllib3["distributed_tracing"] = True - self.tracer._apm_opt_out = False self.tracer.enabled = False + # Ensure the ASM SpanProcessor is set. + self.tracer.configure(appsec_standalone_enabled=False, appsec_enabled=True) + assert not asm_config._apm_opt_out with mock.patch( "urllib3.connectionpool.HTTPConnectionPool._make_request", side_effect=ValueError ) as m_make_request: diff --git a/tests/debugging/exception/test_replay.py b/tests/debugging/exception/test_replay.py index 54baeb8b826..9aae75dae47 100644 --- a/tests/debugging/exception/test_replay.py +++ b/tests/debugging/exception/test_replay.py @@ -123,7 +123,7 @@ def c(foo=42): for n, span in enumerate(self.spans): assert span.get_tag(replay.DEBUG_INFO_TAG) == "true" - exc_id = span.get_tag("_dd.debug.error.exception_id") + exc_id = span.get_tag(replay.EXCEPTION_ID_TAG) info = {k: v for k, v in enumerate(["c", "b", "a"][n:], start=1)} @@ -147,8 +147,8 @@ def c(foo=42): assert all(str(s.exc_id) == exc_id for s in snapshots.values()) # assert all spans use the same exc_id - exc_ids = set(span.get_tag("_dd.debug.error.exception_id") for span in self.spans) - assert len(exc_ids) == 1 + exc_ids = set(span.get_tag(replay.EXCEPTION_ID_TAG) for span in self.spans) + assert None not in exc_ids and len(exc_ids) == 1 def test_debugger_exception_chaining(self): def a(v, d=None): @@ -190,7 +190,7 @@ def c(foo=42): for n, span in enumerate(self.spans): assert span.get_tag(replay.DEBUG_INFO_TAG) == "true" - exc_id = span.get_tag("_dd.debug.error.exception_id") + exc_id = span.get_tag(replay.EXCEPTION_ID_TAG) info = {k: v for k, v in enumerate(stacks[n], start=1)} @@ -215,8 +215,8 @@ def c(foo=42): assert any(str(s.exc_id) == exc_id for s in snapshots.values()) # assert number of unique exc_ids based on python version - exc_ids = set(span.get_tag("_dd.debug.error.exception_id") for span in self.spans) - assert len(exc_ids) == number_of_exc_ids + exc_ids = set(span.get_tag(replay.EXCEPTION_ID_TAG) for span in self.spans) + assert None not in exc_ids and len(exc_ids) == number_of_exc_ids # invoke again (should be in less than 1 sec) with with_rate_limiter(rate_limiter): diff --git a/tests/opentelemetry/test_span.py b/tests/opentelemetry/test_span.py index 8909f3db07f..24b2f1524f3 100644 --- a/tests/opentelemetry/test_span.py +++ b/tests/opentelemetry/test_span.py @@ -119,8 +119,9 @@ def test_otel_span_status_with_status_obj(oteltracer, caplog): assert errspan_dup_des._ddspan.error == 1 assert errspan_dup_des._ddspan.get_tag("error.message") in "main otel err message" assert ( - "Description ot_duplicate_message ignored. Use either `Status` or `(StatusCode, Description)`" - in caplog.text + "Conflicting descriptions detected. The following description will not be set " + "on the otel-error-dup-description span: ot_duplicate_message. Ensure `Span.set_status(...)` " + "is called with `(Status(status_code, description), None)` or `(status_code, description)`" in caplog.text ) with oteltracer.start_span("set-status-on-otel-span") as span1: diff --git a/tests/profiling_v2/collector/test_memalloc.py b/tests/profiling_v2/collector/test_memalloc.py index 2787507bdce..881a64a162c 100644 --- a/tests/profiling_v2/collector/test_memalloc.py +++ b/tests/profiling_v2/collector/test_memalloc.py @@ -1,7 +1,10 @@ import os +import threading -from ddtrace.profiling import Profiler -from ddtrace.settings.profiling import config +import pytest + +from ddtrace.internal.datadog.profiling import ddup +from ddtrace.profiling.collector import memalloc from tests.profiling.collector import pprof_utils @@ -9,12 +12,22 @@ def _allocate_1k(): return [object() for _ in range(1000)] -def test_heap_samples_collected(tmp_path, monkeypatch): +_ALLOC_LINE_NUMBER = _allocate_1k.__code__.co_firstlineno + 1 + + +# This test is marked as subprocess as it changes default heap sample size +@pytest.mark.subprocess( + env=dict(DD_PROFILING_HEAP_SAMPLE_SIZE="1024", DD_PROFILING_OUTPUT_PPROF="/tmp/test_heap_samples_collected") +) +def test_heap_samples_collected(): + import os + + from ddtrace.profiling import Profiler + from tests.profiling.collector import pprof_utils + from tests.profiling_v2.collector.test_memalloc import _allocate_1k + # Test for https://github.com/DataDog/dd-trace-py/issues/11069 - test_name = "test_heap" - pprof_prefix = str(tmp_path / test_name) - monkeypatch.setattr(config, "output_pprof", pprof_prefix) - monkeypatch.setattr(config.heap, "sample_size", 1024) + pprof_prefix = os.environ["DD_PROFILING_OUTPUT_PPROF"] output_filename = pprof_prefix + "." + str(os.getpid()) p = Profiler() @@ -25,3 +38,92 @@ def test_heap_samples_collected(tmp_path, monkeypatch): profile = pprof_utils.parse_profile(output_filename) samples = pprof_utils.get_samples_with_value_type(profile, "heap-space") assert len(samples) > 0 + + +def test_memory_collector(tmp_path): + test_name = "test_memory_collector" + pprof_prefix = str(tmp_path / test_name) + output_filename = pprof_prefix + "." + str(os.getpid()) + + ddup.config( + service=test_name, + version="test", + env="test", + output_filename=pprof_prefix, + ) + ddup.start() + + mc = memalloc.MemoryCollector(None) + with mc: + _allocate_1k() + mc.periodic() + + ddup.upload() + + profile = pprof_utils.parse_profile(output_filename) + # Gets samples with alloc-space > 0 + samples = pprof_utils.get_samples_with_value_type(profile, "alloc-space") + + assert len(samples) > 0 + + alloc_samples_idx = pprof_utils.get_sample_type_index(profile, "alloc-samples") + for sample in samples: + # We also want to check 'alloc-samples' is > 0. + assert sample.value[alloc_samples_idx] > 0 + + # We also want to assert that there's a sample that's coming from _allocate_1k() + # And also assert that it's actually coming from _allocate_1k() + pprof_utils.assert_profile_has_sample( + profile, + samples, + expected_sample=pprof_utils.StackEvent( + thread_name="MainThread", + thread_id=threading.main_thread().ident, + locations=[ + pprof_utils.StackLocation( + function_name="_allocate_1k", filename="test_memalloc.py", line_no=_ALLOC_LINE_NUMBER + ) + ], + ), + ) + + +def test_memory_collector_ignore_profiler(tmp_path): + test_name = "test_memory_collector_ignore_profiler" + pprof_prefix = str(tmp_path / test_name) + output_filename = pprof_prefix + "." + str(os.getpid()) + + ddup.config( + service=test_name, + version="test", + env="test", + output_filename=pprof_prefix, + ) + ddup.start() + + mc = memalloc.MemoryCollector(None, ignore_profiler=True) + quit_thread = threading.Event() + + with mc: + + def alloc(): + _allocate_1k() + quit_thread.wait() + + alloc_thread = threading.Thread(name="allocator", target=alloc) + alloc_thread._ddtrace_profiling_ignore = True + alloc_thread.start() + + mc.periodic() + + # We need to wait for the data collection to happen so it gets the `_ddtrace_profiling_ignore` Thread attribute from + # the global thread list. + quit_thread.set() + alloc_thread.join() + + ddup.upload() + + try: + pprof_utils.parse_profile(output_filename) + except AssertionError as e: + assert "No samples found" in str(e) diff --git a/tests/telemetry/test_writer.py b/tests/telemetry/test_writer.py index bcc3be9e38c..3b5ec7226af 100644 --- a/tests/telemetry/test_writer.py +++ b/tests/telemetry/test_writer.py @@ -638,7 +638,7 @@ def test_send_failing_request(mock_status, telemetry_writer): telemetry_writer.periodic(force_flush=True) # asserts unsuccessful status code was logged log.debug.assert_called_with( - "failed to send telemetry to %s. response: %s", + "Failed to send Instrumentation Telemetry to %s. response: %s", telemetry_writer._client.url, mock_status, ) diff --git a/tests/tracer/test_span.py b/tests/tracer/test_span.py index e746632037e..8cdaad831f0 100644 --- a/tests/tracer/test_span.py +++ b/tests/tracer/test_span.py @@ -283,10 +283,16 @@ def wrapper(): assert 0, "should have failed" stack = s.get_tag(ERROR_STACK) + assert stack, "No error stack collected" # one header "Traceback (most recent call last):" and one footer "ZeroDivisionError: division by zero" header_and_footer_lines = 2 + # Python 3.13 adds extra lines to the traceback: + # File dd-trace-py/tests/tracer/test_span.py", line 279, in test_custom_traceback_size_with_error + # wrapper() + # ~~~~~~~^^ + multiplier = 3 if "~~" in stack else 2 assert ( - len(stack.splitlines()) == tb_length_limit * 2 + header_and_footer_lines + len(stack.splitlines()) == tb_length_limit * multiplier + header_and_footer_lines ), "stacktrace should contain two lines per entry" def test_ctx_mgr(self): diff --git a/tests/tracer/test_tracer.py b/tests/tracer/test_tracer.py index 4cdcf876aba..cae00259086 100644 --- a/tests/tracer/test_tracer.py +++ b/tests/tracer/test_tracer.py @@ -2054,15 +2054,8 @@ def test_asm_standalone_configuration(sca_enabled, appsec_enabled, iast_enabled) ddtrace.config._reset() tracer = ddtrace.Tracer() tracer.configure(appsec_enabled=appsec_enabled, iast_enabled=iast_enabled, appsec_standalone_enabled=True) - if appsec_enabled: - assert tracer._asm_enabled is True - if iast_enabled: - assert tracer._iast_enabled is True if sca_enabled == "true": assert bool(ddtrace.config._sca_enabled) is True - - assert tracer._appsec_standalone_enabled is True - assert tracer._apm_opt_out is True assert tracer.enabled is False assert isinstance(tracer._sampler.limiter, RateLimiter)