diff --git a/.github/workflows/build_deploy.yml b/.github/workflows/build_deploy.yml index 03fb56277fb..cc97a3c8220 100644 --- a/.github/workflows/build_deploy.yml +++ b/.github/workflows/build_deploy.yml @@ -50,8 +50,12 @@ jobs: "$GITHUB_REF_NAME" =~ ^[0-9]+\.x$ ]]; then LIBRARY_VERSION=$(setuptools-scm --strip-dev) else - # All else, maintain the dev version - LIBRARY_VERSION=$(setuptools-scm) + # use version string explicitly set in the project metadata, if exists + LIBRARY_VERSION=$(grep '^version = ' pyproject.toml | tr -d '"' | cut -d' ' -f3) + if [[ -z $LIBRARY_VERSION ]]; then + # All else, maintain the dev version + LIBRARY_VERSION=$(setuptools-scm) + fi fi echo "${LIBRARY_VERSION}" | tee version.txt @@ -65,8 +69,8 @@ jobs: needs: [ "compute_version" ] uses: ./.github/workflows/build_python_3.yml with: - cibw_build: 'cp38* cp39* cp310* cp311* cp312* cp313* cp314*' - cibw_skip: 'cp38-win_arm64 cp39-win_arm64 cp310-win_arm64 cp314t*' + cibw_build: 'cp39* cp310* cp311* cp312* cp313* cp314*' + cibw_skip: 'cp39-win_arm64 cp310-win_arm64 cp314t*' library_version: ${{ needs.compute_version.outputs.library_version }} build_sdist: diff --git a/.github/workflows/system-tests.yml b/.github/workflows/system-tests.yml index 2cdc1ac32ad..a8229553fa9 100644 --- a/.github/workflows/system-tests.yml +++ b/.github/workflows/system-tests.yml @@ -45,7 +45,7 @@ jobs: persist-credentials: false repository: 'DataDog/system-tests' # Automatically managed, use scripts/update-system-tests-version to update - ref: '58dc99266c404d0e04868a5817c61fad360cc4cb' + ref: 'f053b033c1d93c95c3b76882b2aedf9b9929aff2' - name: Download wheels to binaries directory uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 @@ -90,7 +90,7 @@ jobs: persist-credentials: false repository: 'DataDog/system-tests' # Automatically managed, use scripts/update-system-tests-version to update - ref: '58dc99266c404d0e04868a5817c61fad360cc4cb' + ref: 'f053b033c1d93c95c3b76882b2aedf9b9929aff2' - name: Build runner uses: ./.github/actions/install_runner @@ -275,7 +275,7 @@ jobs: persist-credentials: false repository: 'DataDog/system-tests' # Automatically managed, use scripts/update-system-tests-version to update - ref: '58dc99266c404d0e04868a5817c61fad360cc4cb' + ref: 'f053b033c1d93c95c3b76882b2aedf9b9929aff2' - name: Download wheels to binaries directory uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 7451f923229..93c6cb727e2 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -16,7 +16,7 @@ jobs: matrix: os: [ubuntu-latest, windows-latest, macos-latest] # Keep this in sync with hatch.toml - python-version: ["3.8", "3.10", "3.12", "3.14"] + python-version: ["3.10", "3.12", "3.14"] steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 24f62ef3267..c936a14a553 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -14,7 +14,7 @@ variables: DD_VPA_TEMPLATE: "vpa-template-cpu-p70-10percent-2x-oom-min-cap" # CI_DEBUG_SERVICES: "true" # Automatically managed, use scripts/update-system-tests-version to update - SYSTEM_TESTS_REF: "58dc99266c404d0e04868a5817c61fad360cc4cb" + SYSTEM_TESTS_REF: "f053b033c1d93c95c3b76882b2aedf9b9929aff2" default: interruptible: true diff --git a/.gitlab/package.yml b/.gitlab/package.yml index 1206e4305f1..75bdbf9c68d 100644 --- a/.gitlab/package.yml +++ b/.gitlab/package.yml @@ -59,8 +59,6 @@ download_dependency_wheels: PIP_CACHE_DIR: "${CI_PROJECT_DIR}/.cache/pip" parallel: matrix: # The image tags that are mirrored are in: https://github.com/DataDog/images/blob/master/mirror.yaml - - PYTHON_IMAGE_TAG: "3.8" - PYTHON_VERSION: "3.8" - PYTHON_IMAGE_TAG: "3.9.13" PYTHON_VERSION: "3.9" - PYTHON_IMAGE_TAG: "3.10.13" diff --git a/.gitlab/templates/build-base-venvs.yml b/.gitlab/templates/build-base-venvs.yml index de8d29218ea..36557c6d510 100644 --- a/.gitlab/templates/build-base-venvs.yml +++ b/.gitlab/templates/build-base-venvs.yml @@ -4,7 +4,7 @@ build_base_venvs: needs: [] parallel: matrix: - - PYTHON_VERSION: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] + - PYTHON_VERSION: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] variables: CMAKE_BUILD_PARALLEL_LEVEL: '12' PIP_VERBOSE: '0' diff --git a/.gitlab/templates/cached-testrunner.yml b/.gitlab/templates/cached-testrunner.yml index 1faef291770..5c4f91dee7b 100644 --- a/.gitlab/templates/cached-testrunner.yml +++ b/.gitlab/templates/cached-testrunner.yml @@ -5,7 +5,7 @@ EXT_CACHE_VENV: '${{CI_PROJECT_DIR}}/.cache/ext_cache_venv${{PYTHON_VERSION}}' before_script: | ulimit -c unlimited - pyenv global 3.12 3.8 3.9 3.10 3.11 3.13 3.14 + pyenv global 3.12 3.9 3.10 3.11 3.13 3.14 export _CI_DD_AGENT_URL=http://${{HOST_IP}}:8126/ set -e -o pipefail if [ ! -d $EXT_CACHE_VENV ]; then diff --git a/.gitlab/templates/detect-global-locks.yml b/.gitlab/templates/detect-global-locks.yml index 18e5a7f5281..5b16e8d1722 100644 --- a/.gitlab/templates/detect-global-locks.yml +++ b/.gitlab/templates/detect-global-locks.yml @@ -4,7 +4,7 @@ detect-global-locks: needs: [] parallel: matrix: - - PYTHON_VERSION: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] + - PYTHON_VERSION: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] variables: DD_DYNAMIC_INSTRUMENTATION_ENABLED: '1' DD_CODE_ORIGIN_FOR_SPANS_ENABLED: '1' diff --git a/.gitlab/testrunner.yml b/.gitlab/testrunner.yml index 4420728793e..1c010690c71 100644 --- a/.gitlab/testrunner.yml +++ b/.gitlab/testrunner.yml @@ -12,7 +12,7 @@ variables: before_script: - ulimit -c unlimited - git config --global --add safe.directory ${CI_PROJECT_DIR} - - pyenv global 3.12 3.8 3.9 3.10 3.11 3.13 3.14 + - pyenv global 3.12 3.9 3.10 3.11 3.13 3.14 - export _CI_DD_AGENT_URL=http://${HOST_IP}:8126/ retry: 2 artifacts: diff --git a/.riot/requirements/1002685.txt b/.riot/requirements/1002685.txt deleted file mode 100644 index 8bea0b26ba6..00000000000 --- a/.riot/requirements/1002685.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1002685.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.2.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -protobuf==4.21.12 -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/1067a9b.txt b/.riot/requirements/1067a9b.txt deleted file mode 100644 index d9b1caa7c54..00000000000 --- a/.riot/requirements/1067a9b.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1067a9b.in -# -aiofiles==23.2.1 -anyio==4.2.0 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.16.3 -httptools==0.6.1 -httpx==0.23.3 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.4 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -requests==2.31.0 -rfc3986[idna2008]==1.5.0 -sanic==22.12.0 -sanic-routing==23.6.0 -sanic-testing==22.3.1 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.9.0 -ujson==5.9.0 -urllib3==2.1.0 -uvloop==0.19.0 -websockets==10.4 -zipp==3.17.0 diff --git a/.riot/requirements/106f38d.txt b/.riot/requirements/106f38d.txt deleted file mode 100644 index 35ad753ef8f..00000000000 --- a/.riot/requirements/106f38d.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.14 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/106f38d.in -# -attrs==25.3.0 -coverage[toml]==7.10.5 -dnspython==2.7.0 -hypothesis==6.45.0 -iniconfig==2.1.0 -mock==5.2.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -pygments==2.19.2 -pymongo==4.8.0 -pytest==8.4.1 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pytest-randomly==3.16.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/1078c3b.txt b/.riot/requirements/1078c3b.txt deleted file mode 100644 index 3dfee8f68b4..00000000000 --- a/.riot/requirements/1078c3b.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# 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==25.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.1.0 -mock==5.2.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.5 -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/1087ca6.txt b/.riot/requirements/1087ca6.txt deleted file mode 100644 index 875cc5be3a4..00000000000 --- a/.riot/requirements/1087ca6.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1087ca6.in -# -attrs==25.3.0 -coverage[toml]==7.8.2 -dnspython==2.7.0 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -iniconfig==2.1.0 -mock==5.2.0 -mongoengine==0.24.2 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -pygments==2.19.1 -pymongo==4.8.0 -pytest==8.4.0 -pytest-cov==6.1.1 -pytest-mock==3.14.1 -pytest-randomly==3.16.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.14.0 diff --git a/.riot/requirements/108d1af.txt b/.riot/requirements/108d1af.txt deleted file mode 100644 index 95aa2e94b5b..00000000000 --- a/.riot/requirements/108d1af.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/108d1af.in -# -aiofiles==24.1.0 -annotated-types==0.7.0 -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -fastapi==0.116.1 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-multipart==0.0.20 -requests==2.32.4 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.44.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -zipp==3.20.2 diff --git a/.riot/requirements/1097f9f.txt b/.riot/requirements/1097f9f.txt deleted file mode 100644 index 3154cac7e78..00000000000 --- a/.riot/requirements/1097f9f.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1097f9f.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.3.4 -elasticsearch7==7.13.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==1.26.18 -zipp==3.17.0 diff --git a/.riot/requirements/10a00e7.txt b/.riot/requirements/10a00e7.txt deleted file mode 100644 index ed2fd846015..00000000000 --- a/.riot/requirements/10a00e7.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/10a00e7.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -dnspython==2.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pymongo==4.8.0 -pytest==8.3.3 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 diff --git a/.riot/requirements/10b490c.txt b/.riot/requirements/10b490c.txt deleted file mode 100644 index 4126321ff11..00000000000 --- a/.riot/requirements/10b490c.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/10b490c.in -# -attrs==25.3.0 -coverage[toml]==7.8.2 -dnspython==2.7.0 -hypothesis==6.45.0 -iniconfig==2.1.0 -mock==5.2.0 -mongoengine==0.24.2 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -pygments==2.19.1 -pymongo==4.8.0 -pytest==8.4.0 -pytest-cov==6.1.1 -pytest-mock==3.14.1 -pytest-randomly==3.16.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/10b89f6.txt b/.riot/requirements/10b89f6.txt deleted file mode 100644 index 59297b1e0b1..00000000000 --- a/.riot/requirements/10b89f6.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/10b89f6.in -# -attrs==23.2.0 -blinker==1.7.0 -click==8.1.7 -coverage[toml]==7.4.2 -exceptiongroup==1.2.0 -flask==3.0.2 -flask-caching==1.10.1 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -itsdangerous==2.1.2 -jinja2==3.1.3 -markupsafe==2.1.5 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-memcached==1.62 -redis==2.10.6 -sortedcontainers==2.4.0 -tomli==2.0.1 -werkzeug==3.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/10bae0a.txt b/.riot/requirements/10bae0a.txt deleted file mode 100644 index b6ac23fbc1a..00000000000 --- a/.riot/requirements/10bae0a.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/10bae0a.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.0.0 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -tornado==6.0.4 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/11047da.txt b/.riot/requirements/11047da.txt deleted file mode 100644 index 205ab7860ff..00000000000 --- a/.riot/requirements/11047da.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/11047da.in -# -aiomysql==0.1.1 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pymysql==1.1.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/11091fd.txt b/.riot/requirements/11091fd.txt deleted file mode 100644 index 90586cdcc5f..00000000000 --- a/.riot/requirements/11091fd.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/11091fd.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pymemcache==4.0.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/110b5c2.txt b/.riot/requirements/110b5c2.txt deleted file mode 100644 index d2a20cc6715..00000000000 --- a/.riot/requirements/110b5c2.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/110b5c2.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mako==1.0.14 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/111559c.txt b/.riot/requirements/111559c.txt deleted file mode 100644 index 1440229c1ce..00000000000 --- a/.riot/requirements/111559c.txt +++ /dev/null @@ -1,74 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/111559c.in -# -annotated-types==0.7.0 -attrs==25.3.0 -aws-sam-translator==1.97.0 -aws-xray-sdk==2.14.0 -boto==2.49.0 -boto3==1.37.38 -botocore==1.37.38 -certifi==2025.4.26 -cffi==1.17.1 -cfn-lint==0.53.1 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -cryptography==45.0.3 -docker==7.1.0 -ecdsa==0.14.1 -exceptiongroup==1.3.0 -execnet==2.1.1 -hypothesis==6.45.0 -idna==2.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -jinja2==2.10.3 -jmespath==1.0.1 -jsondiff==2.2.1 -jsonpatch==1.33 -jsonpointer==3.0.0 -jsonschema==3.2.0 -junit-xml==1.9 -markupsafe==1.1.1 -mock==5.2.0 -more-itertools==10.5.0 -moto==1.3.16 -networkx==2.8.8 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pyasn1==0.4.8 -pycparser==2.22 -pydantic==2.10.6 -pydantic-core==2.27.2 -pynamodb==5.5.1 -pyrsistent==0.20.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pytest-xdist==3.6.1 -python-dateutil==2.9.0.post0 -python-jose[cryptography]==3.4.0 -pytz==2025.2 -pyyaml==6.0.2 -requests==2.32.3 -responses==0.25.7 -rsa==4.9.1 -s3transfer==0.11.5 -six==1.17.0 -sortedcontainers==2.4.0 -sshpubkeys==3.3.1 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -werkzeug==2.1.2 -wrapt==1.17.2 -xmltodict==0.14.2 -zipp==3.20.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/112e093.txt b/.riot/requirements/112e093.txt deleted file mode 100644 index 5fff90d1609..00000000000 --- a/.riot/requirements/112e093.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/112e093.in -# -aiofiles==24.1.0 -aiosqlite==0.20.0 -anyio==3.7.1 -attrs==25.3.0 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -databases==0.8.0 -exceptiongroup==1.3.0 -greenlet==3.1.1 -h11==0.12.0 -httpcore==0.14.7 -httpx==0.22.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.32.4 -rfc3986[idna2008]==1.5.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -sqlalchemy==1.4.54 -starlette==0.44.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -zipp==3.20.2 diff --git a/.riot/requirements/114922a.txt b/.riot/requirements/114922a.txt deleted file mode 100644 index 9e2467bba9a..00000000000 --- a/.riot/requirements/114922a.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/114922a.in -# -async-timeout==5.0.1 -attrs==25.3.0 -coverage[toml]==7.6.1 -dramatiq==1.10.0 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pika==1.3.2 -pluggy==1.5.0 -prometheus-client==0.21.1 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -redis==6.1.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 diff --git a/.riot/requirements/116b01f.txt b/.riot/requirements/116b01f.txt deleted file mode 100644 index d3d083bf336..00000000000 --- a/.riot/requirements/116b01f.txt +++ /dev/null @@ -1,60 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/116b01f.in -# -attrs==25.3.0 -certifi==2025.6.15 -charset-normalizer==2.1.1 -click==8.1.8 -coverage[toml]==7.6.1 -deprecated==1.2.18 -exceptiongroup==1.3.0 -flask==2.1.3 -gevent==24.2.1 -googleapis-common-protos==1.70.0 -greenlet==3.1.1 -grpcio==1.70.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==2.2.0 -jinja2==3.1.6 -markupsafe==2.0.1 -mock==5.2.0 -opentelemetry-api==1.33.1 -opentelemetry-exporter-otlp==1.33.1 -opentelemetry-exporter-otlp-proto-common==1.33.1 -opentelemetry-exporter-otlp-proto-grpc==1.33.1 -opentelemetry-exporter-otlp-proto-http==1.33.1 -opentelemetry-instrumentation==0.54b1 -opentelemetry-instrumentation-flask==0.54b1 -opentelemetry-instrumentation-wsgi==0.54b1 -opentelemetry-proto==1.33.1 -opentelemetry-sdk==1.33.1 -opentelemetry-semantic-conventions==0.54b1 -opentelemetry-util-http==0.54b1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -protobuf==5.29.5 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.28.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -werkzeug==2.1.2 -wrapt==1.17.2 -zipp==3.20.2 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/119044a.txt b/.riot/requirements/119044a.txt deleted file mode 100644 index cae7551e20a..00000000000 --- a/.riot/requirements/119044a.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/119044a.in -# -attrs==25.3.0 -azure-core==1.33.0 -azure-functions==1.23.0 -azure-servicebus==7.14.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -isodate==0.7.2 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -werkzeug==3.0.6 diff --git a/.riot/requirements/11ac941.txt b/.riot/requirements/11ac941.txt deleted file mode 100644 index 92df617ba6e..00000000000 --- a/.riot/requirements/11ac941.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/11ac941.in -# -async-timeout==5.0.1 -attrs==24.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.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-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -valkey==6.0.2 -zipp==3.20.2 diff --git a/.riot/requirements/11d9fc2.txt b/.riot/requirements/11d9fc2.txt deleted file mode 100644 index b89da5d9931..00000000000 --- a/.riot/requirements/11d9fc2.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/11d9fc2.in -# -aiofiles==23.2.1 -anyio==4.2.0 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.16.3 -httptools==0.6.1 -httpx==0.23.3 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.4 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -requests==2.31.0 -rfc3986[idna2008]==1.5.0 -sanic==22.12.0 -sanic-routing==23.6.0 -sanic-testing==22.3.1 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.9.0 -ujson==5.9.0 -urllib3==2.1.0 -uvloop==0.19.0 -websockets==10.4 -zipp==3.17.0 diff --git a/.riot/requirements/1213604.txt b/.riot/requirements/1213604.txt deleted file mode 100644 index df2535c1773..00000000000 --- a/.riot/requirements/1213604.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/1213604.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/1214426.txt b/.riot/requirements/1214426.txt deleted file mode 100644 index 27ac717aad0..00000000000 --- a/.riot/requirements/1214426.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/1214426.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -msgpack==1.0.7 -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/122e427.txt b/.riot/requirements/122e427.txt deleted file mode 100644 index 58d51498b2c..00000000000 --- a/.riot/requirements/122e427.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/122e427.in -# -attrs==25.3.0 -certifi==2025.1.31 -coverage[toml]==7.6.1 -elastic-transport==8.17.1 -elasticsearch==9.0.0 -elasticsearch7==7.17.12 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -zipp==3.20.2 diff --git a/.riot/requirements/12304dc.txt b/.riot/requirements/12304dc.txt deleted file mode 100644 index a7efa420de5..00000000000 --- a/.riot/requirements/12304dc.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/12304dc.in -# -attrs==25.3.0 -backports-zoneinfo==0.2.1 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -psycopg==3.0.18 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/1258e80.txt b/.riot/requirements/1258e80.txt deleted file mode 100644 index 449021d50d8..00000000000 --- a/.riot/requirements/1258e80.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1258e80.in -# -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-consul==1.1.0 -requests==2.31.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.1.0 -zipp==3.17.0 diff --git a/.riot/requirements/1280196.txt b/.riot/requirements/1280196.txt deleted file mode 100644 index 9ddea946400..00000000000 --- a/.riot/requirements/1280196.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1280196.in -# -attrs==25.3.0 -beautifulsoup4==4.14.2 -bottle==0.13.4 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -soupsieve==2.7 -tomli==2.3.0 -typing-extensions==4.13.2 -waitress==3.0.0 -webob==1.8.9 -webtest==3.0.1 -zipp==3.20.2 diff --git a/.riot/requirements/128a8db.txt b/.riot/requirements/128a8db.txt deleted file mode 100644 index 8fbc2c95ecf..00000000000 --- a/.riot/requirements/128a8db.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/128a8db.in -# -attrs==25.3.0 -clang==20.1.5 -cmake==4.0.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pybind11==3.0.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 diff --git a/.riot/requirements/1291b76.txt b/.riot/requirements/1291b76.txt deleted file mode 100644 index 383d3c58109..00000000000 --- a/.riot/requirements/1291b76.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1291b76.in -# -asgiref==3.8.1 -attrs==25.3.0 -certifi==2025.6.15 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -django==3.2.25 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytz==2025.2 -requests==2.32.4 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 diff --git a/.riot/requirements/12aa44c.txt b/.riot/requirements/12aa44c.txt deleted file mode 100644 index 2c11e62efab..00000000000 --- a/.riot/requirements/12aa44c.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/12aa44c.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.3.4 -elastic-transport==8.11.0 -elasticsearch==8.0.1 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.1.0 -zipp==3.17.0 diff --git a/.riot/requirements/12b4a54.txt b/.riot/requirements/12b4a54.txt deleted file mode 100644 index 11a84b3a69a..00000000000 --- a/.riot/requirements/12b4a54.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/12b4a54.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -logbook==1.0.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/13015fd.txt b/.riot/requirements/13015fd.txt deleted file mode 100644 index 29ed26daa1c..00000000000 --- a/.riot/requirements/13015fd.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/13015fd.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -dnspython==2.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pymongo==4.10.1 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/130dd21.txt b/.riot/requirements/130dd21.txt deleted file mode 100644 index a1eb686cbfd..00000000000 --- a/.riot/requirements/130dd21.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/130dd21.in -# -attrs==25.3.0 -cheroot==10.0.1 -cherrypy==17.0.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -jaraco-functools==4.1.0 -mock==5.2.0 -more-itertools==8.10.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -portend==3.2.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -six==1.17.0 -sortedcontainers==2.4.0 -tempora==5.7.1 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/132915c.txt b/.riot/requirements/132915c.txt deleted file mode 100644 index 7b85f7727d7..00000000000 --- a/.riot/requirements/132915c.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/132915c.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -googleapis-common-protos==1.70.0 -grpcio==1.59.5 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -protobuf==5.29.4 -pytest==8.3.5 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -zipp==3.20.2 diff --git a/.riot/requirements/13342d2.txt b/.riot/requirements/13342d2.txt deleted file mode 100644 index bca1e8dc140..00000000000 --- a/.riot/requirements/13342d2.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/13342d2.in -# -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.8.3 -coverage==7.6.1 -exceptiongroup==1.3.0 -execnet==2.1.1 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -more-itertools==8.10.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -py==1.11.0 -pytest==6.2.5 -pytest-cov==2.9.0 -pytest-mock==2.0.0 -pytest-randomly==3.15.0 -pytest-xdist==3.5.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -toml==0.10.2 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/1337ee3.txt b/.riot/requirements/1337ee3.txt deleted file mode 100644 index 7a2b39ce1e6..00000000000 --- a/.riot/requirements/1337ee3.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1337ee3.in -# -attrs==25.3.0 -azure-functions==1.23.0 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -werkzeug==3.0.6 diff --git a/.riot/requirements/1344329.txt b/.riot/requirements/1344329.txt deleted file mode 100644 index cf2e4583b0a..00000000000 --- a/.riot/requirements/1344329.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1344329.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -elasticsearch5==5.5.6 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.1.0 -zipp==3.17.0 diff --git a/.riot/requirements/134a53d.txt b/.riot/requirements/134a53d.txt deleted file mode 100644 index 1473061d7c1..00000000000 --- a/.riot/requirements/134a53d.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/134a53d.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pyyaml==6.0.2 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/134e77a.txt b/.riot/requirements/134e77a.txt deleted file mode 100644 index da96e381bb6..00000000000 --- a/.riot/requirements/134e77a.txt +++ /dev/null @@ -1,41 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/134e77a.in -# -amqp==5.3.1 -attrs==25.3.0 -backports-zoneinfo[tzdata]==0.2.1 -billiard==4.2.1 -celery==5.5.3 -click==8.1.8 -click-didyoumean==0.3.1 -click-plugins==1.1.1.2 -click-repl==0.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -kombu==5.5.4 -mock==5.2.0 -more-itertools==8.10.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -prompt-toolkit==3.0.51 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -redis==3.5.3 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -tzdata==2025.2 -vine==5.1.0 -wcwidth==0.2.13 -zipp==3.20.2 diff --git a/.riot/requirements/1356251.txt b/.riot/requirements/1356251.txt deleted file mode 100644 index 0b3c927d4fb..00000000000 --- a/.riot/requirements/1356251.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1356251.in -# -aiohttp==3.9.5 -aiohttp-jinja2==1.6 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==23.2.0 -coverage[toml]==7.5.4 -exceptiongroup==1.2.1 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 -iniconfig==2.0.0 -jinja2==3.1.4 -markupsafe==2.1.5 -mock==5.1.0 -multidict==6.0.5 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pytest==8.2.2 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -yarl==1.9.4 -zipp==3.19.2 diff --git a/.riot/requirements/1367a0e.txt b/.riot/requirements/1367a0e.txt deleted file mode 100644 index 10a489ee4f0..00000000000 --- a/.riot/requirements/1367a0e.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/1367a0e.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -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 -tornado==5.1.1 -zipp==3.17.0 diff --git a/.riot/requirements/137cba1.txt b/.riot/requirements/137cba1.txt deleted file mode 100644 index 4ce4b48c527..00000000000 --- a/.riot/requirements/137cba1.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/137cba1.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -decorator==5.1.1 -dogpile-cache==1.3.0 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pbr==6.0.0 -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 -stevedore==5.1.0 -tomli==2.0.1 -typing-extensions==4.9.0 -zipp==3.17.0 diff --git a/.riot/requirements/138886e.txt b/.riot/requirements/138886e.txt deleted file mode 100644 index 480cd22178b..00000000000 --- a/.riot/requirements/138886e.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/138886e.in -# -aiohappyeyeballs==2.4.4 -aiohttp==3.10.11 -aiosignal==1.3.1 -async-timeout==5.0.1 -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -frozenlist==1.5.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -multidict==6.1.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -propcache==0.2.0 -pytest==8.3.5 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -yarl==1.15.2 -zipp==3.20.2 diff --git a/.riot/requirements/13bb925.txt b/.riot/requirements/13bb925.txt deleted file mode 100644 index f87641d20cc..00000000000 --- a/.riot/requirements/13bb925.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# 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/13c380c.txt b/.riot/requirements/13c380c.txt deleted file mode 100644 index bea29a1b8ab..00000000000 --- a/.riot/requirements/13c380c.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/13c380c.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -psycopg2-binary==2.9.10 -pytest==8.3.5 -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/13c42e3.txt b/.riot/requirements/13c42e3.txt deleted file mode 100644 index 82838d89360..00000000000 --- a/.riot/requirements/13c42e3.txt +++ /dev/null @@ -1,54 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/13c42e3.in -# -annotated-types==0.7.0 -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.4.26 -coverage[toml]==7.6.1 -distro==1.9.0 -exceptiongroup==1.3.0 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -multidict==6.1.0 -numpy==1.24.4 -openai[datalib,embeddings]==1.30.1 -opentracing==2.4.0 -packaging==25.0 -pandas==2.0.3 -pandas-stubs==2.0.3.230814 -pillow==9.5.0 -pluggy==1.5.0 -propcache==0.2.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -pytz==2025.2 -pyyaml==6.0.2 -six==1.17.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -tqdm==4.67.1 -types-pytz==2024.2.0.20241221 -typing-extensions==4.13.2 -tzdata==2025.2 -urllib3==1.26.20 -vcrpy==6.0.2 -wrapt==1.17.2 -yarl==1.15.2 -zipp==3.20.2 diff --git a/.riot/requirements/13f5237.txt b/.riot/requirements/13f5237.txt deleted file mode 100644 index a9f480d16ae..00000000000 --- a/.riot/requirements/13f5237.txt +++ /dev/null @@ -1,60 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/13f5237.in -# -attrs==25.3.0 -backoff==2.2.1 -certifi==2025.6.15 -charset-normalizer==2.1.1 -click==8.1.8 -coverage[toml]==7.6.1 -deprecated==1.2.18 -exceptiongroup==1.3.0 -flask==2.1.3 -gevent==24.2.1 -googleapis-common-protos==1.70.0 -greenlet==3.1.1 -grpcio==1.70.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==2.2.0 -jinja2==3.1.6 -markupsafe==2.0.1 -mock==5.2.0 -opentelemetry-api==1.33.1 -opentelemetry-exporter-otlp==1.15.0 -opentelemetry-exporter-otlp-proto-grpc==1.15.0 -opentelemetry-exporter-otlp-proto-http==1.15.0 -opentelemetry-instrumentation==0.54b1 -opentelemetry-instrumentation-flask==0.54b1 -opentelemetry-instrumentation-wsgi==0.54b1 -opentelemetry-proto==1.15.0 -opentelemetry-sdk==1.33.1 -opentelemetry-semantic-conventions==0.54b1 -opentelemetry-util-http==0.54b1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -protobuf==4.25.8 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.28.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -werkzeug==2.1.2 -wrapt==1.17.2 -zipp==3.20.2 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/13f6818.txt b/.riot/requirements/13f6818.txt deleted file mode 100644 index 11bbbf63862..00000000000 --- a/.riot/requirements/13f6818.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/13f6818.in -# -aiohappyeyeballs==2.4.4 -aiohttp==3.10.11 -aiosignal==1.3.1 -async-timeout==5.0.1 -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -frozenlist==1.5.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -multidict==6.1.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -propcache==0.2.0 -pytest==8.3.5 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -yarl==1.15.2 -zipp==3.20.2 diff --git a/.riot/requirements/13f7c51.txt b/.riot/requirements/13f7c51.txt deleted file mode 100644 index caf600998bb..00000000000 --- a/.riot/requirements/13f7c51.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/13f7c51.in -# -attrs==25.3.0 -certifi==2025.7.9 -charset-normalizer==3.4.2 -click==8.1.8 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -flask==2.1.3 -hypothesis==6.113.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==2.2.0 -jinja2==3.1.6 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -werkzeug==2.3.8 -zipp==3.20.2 diff --git a/.riot/requirements/140ec91.txt b/.riot/requirements/140ec91.txt deleted file mode 100644 index 2c62a8d4b92..00000000000 --- a/.riot/requirements/140ec91.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/140ec91.in -# -attrs==23.2.0 -blinker==1.7.0 -cachelib==0.9.0 -click==8.1.7 -coverage[toml]==7.4.2 -exceptiongroup==1.2.0 -flask==3.0.2 -flask-caching==2.1.0 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -itsdangerous==2.1.2 -jinja2==3.1.3 -markupsafe==2.1.5 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-memcached==1.62 -redis==2.10.6 -sortedcontainers==2.4.0 -tomli==2.0.1 -werkzeug==3.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/1413039.txt b/.riot/requirements/1413039.txt deleted file mode 100644 index 82340d380e3..00000000000 --- a/.riot/requirements/1413039.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1413039.in -# -attrs==24.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.1.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 -zope-event==5.0 -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/1415ef8.txt b/.riot/requirements/1415ef8.txt deleted file mode 100644 index 24cd0a250b4..00000000000 --- a/.riot/requirements/1415ef8.txt +++ /dev/null @@ -1,40 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1415ef8.in -# -annotated-types==0.7.0 -attrs==25.3.0 -blinker==1.8.2 -certifi==2025.10.5 -charset-normalizer==3.4.3 -click==8.1.8 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -flask==3.0.3 -flask-openapi3==4.0.3 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==2.2.0 -jinja2==3.1.6 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.32.4 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -werkzeug==3.0.6 -zipp==3.20.2 diff --git a/.riot/requirements/1424e42.txt b/.riot/requirements/1424e42.txt deleted file mode 100644 index f58bbb22bd6..00000000000 --- a/.riot/requirements/1424e42.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1424e42.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -dnspython==2.6.1 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pymongo==4.8.0 -pytest==8.3.3 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/14395e9.txt b/.riot/requirements/14395e9.txt deleted file mode 100644 index 55ad6e69192..00000000000 --- a/.riot/requirements/14395e9.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/14395e9.in -# -asgiref==3.8.1 -attrs==25.3.0 -backports-zoneinfo==0.2.1 -bcrypt==4.2.1 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -dill==0.4.0 -django==4.2.24 -django-configurations==2.5.1 -exceptiongroup==1.3.0 -gevent==24.2.1 -greenlet==3.1.1 -gunicorn==23.0.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pylibmc==1.6.3 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.1 -pyyaml==6.0.2 -requests==2.32.4 -six==1.17.0 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/144ad1a.txt b/.riot/requirements/144ad1a.txt deleted file mode 100644 index 2a1b6cd94b3..00000000000 --- a/.riot/requirements/144ad1a.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/144ad1a.in -# -annotated-types==0.7.0 -anthropic==0.67.0 -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.8.3 -coverage[toml]==7.6.1 -distro==1.9.0 -exceptiongroup==1.3.0 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jiter==0.9.1 -mock==5.2.0 -multidict==6.1.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -propcache==0.2.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-asyncio==0.24.0 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pyyaml==6.0.2 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -vcrpy==6.0.2 -wrapt==1.17.3 -yarl==1.15.2 diff --git a/.riot/requirements/14676df.txt b/.riot/requirements/14676df.txt deleted file mode 100644 index 055678228c9..00000000000 --- a/.riot/requirements/14676df.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/14676df.in -# -attrs==25.3.0 -coverage[toml]==7.8.2 -exceptiongroup==1.3.0 -freezegun==1.5.2 -hypothesis==6.45.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -pygments==2.19.1 -pytest==8.4.0 -pytest-cov==6.1.1 -pytest-mock==3.14.1 -pytest-randomly==3.16.0 -python-dateutil==2.9.0.post0 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.14.0 diff --git a/.riot/requirements/1467f24.txt b/.riot/requirements/1467f24.txt deleted file mode 100644 index a59bd2ed545..00000000000 --- a/.riot/requirements/1467f24.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1467f24.in -# -asgiref==3.8.1 -attrs==25.3.0 -backports-zoneinfo==0.2.1 -coverage[toml]==7.6.1 -django==4.2.21 -django-configurations==2.5.1 -djangorestframework==3.15.2 -exceptiongroup==1.3.0 -execnet==2.1.1 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pytest-xdist==3.6.1 -six==1.17.0 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/1468cf5.txt b/.riot/requirements/1468cf5.txt deleted file mode 100644 index 6b90ac2ac97..00000000000 --- a/.riot/requirements/1468cf5.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.14 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1468cf5.in -# -attrs==25.3.0 -coverage[toml]==7.10.5 -dnspython==2.7.0 -hypothesis==6.45.0 -iniconfig==2.1.0 -mock==5.2.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -pygments==2.19.2 -pymongo==4.8.0 -pytest==8.4.1 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pytest-randomly==3.16.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/14767b5.txt b/.riot/requirements/14767b5.txt deleted file mode 100644 index 0bb110811df..00000000000 --- a/.riot/requirements/14767b5.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/14767b5.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -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/14e85f3.txt b/.riot/requirements/14e85f3.txt deleted file mode 100644 index 44ce4a54256..00000000000 --- a/.riot/requirements/14e85f3.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/14e85f3.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -dnspython==2.6.1 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pymongo==4.8.0 -pytest==8.3.3 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/14e9a3d.txt b/.riot/requirements/14e9a3d.txt deleted file mode 100644 index ffbb95edc30..00000000000 --- a/.riot/requirements/14e9a3d.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/14e9a3d.in -# -asgiref==3.8.1 -attrs==25.3.0 -coverage[toml]==7.6.1 -django==3.2.25 -django-configurations==2.5.1 -djangorestframework==3.11.2 -exceptiongroup==1.3.0 -execnet==2.1.1 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pytest-xdist==3.6.1 -pytz==2025.2 -six==1.17.0 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/14effbf.txt b/.riot/requirements/14effbf.txt deleted file mode 100644 index 0fcf733c893..00000000000 --- a/.riot/requirements/14effbf.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/14effbf.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pylibmc==1.6.3 -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/15199f6.txt b/.riot/requirements/15199f6.txt deleted file mode 100644 index 039082c9342..00000000000 --- a/.riot/requirements/15199f6.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/15199f6.in -# -attrs==25.3.0 -azure-core==1.33.0 -azure-eventhub==5.12.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 diff --git a/.riot/requirements/151e533.txt b/.riot/requirements/151e533.txt deleted file mode 100644 index 6f9a56bd894..00000000000 --- a/.riot/requirements/151e533.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/151e533.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -logbook==1.7.0.post0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/1522cb8.txt b/.riot/requirements/1522cb8.txt deleted file mode 100644 index fb583577f6d..00000000000 --- a/.riot/requirements/1522cb8.txt +++ /dev/null @@ -1,51 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1522cb8.in -# -attrs==25.3.0 -certifi==2025.6.15 -charset-normalizer==2.1.1 -click==8.1.8 -coverage[toml]==7.6.1 -deprecated==1.2.18 -exceptiongroup==1.3.0 -flask==2.1.3 -gevent==24.2.1 -greenlet==3.1.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.0.0 -iniconfig==2.1.0 -itsdangerous==2.2.0 -jinja2==3.1.6 -markupsafe==2.0.1 -mock==5.2.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 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.28.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -werkzeug==2.1.2 -wrapt==1.17.2 -zipp==3.20.2 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/1560ba9.txt b/.riot/requirements/1560ba9.txt deleted file mode 100644 index e7f12e49d80..00000000000 --- a/.riot/requirements/1560ba9.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/1560ba9.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -psycopg2-binary==2.9.10 -pytest==8.3.5 -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/15ba505.txt b/.riot/requirements/15ba505.txt deleted file mode 100644 index 0de23cc2c0a..00000000000 --- a/.riot/requirements/15ba505.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/15ba505.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -googleapis-common-protos==1.65.0 -grpcio==1.66.1 -hypothesis==6.45.0 -importlib-metadata==8.4.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -protobuf==5.28.0 -pytest==8.3.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.20.1 diff --git a/.riot/requirements/15c5dd6.txt b/.riot/requirements/15c5dd6.txt deleted file mode 100644 index a015618b336..00000000000 --- a/.riot/requirements/15c5dd6.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/15c5dd6.in -# -attrs==23.1.0 -beautifulsoup4==4.12.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -soupsieve==2.5 -tomli==2.0.1 -waitress==2.1.2 -webob==1.8.7 -webtest==3.0.0 -zipp==3.17.0 diff --git a/.riot/requirements/15de642.txt b/.riot/requirements/15de642.txt deleted file mode 100644 index 9e138c07de8..00000000000 --- a/.riot/requirements/15de642.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/15de642.in -# -attrs==25.3.0 -coverage[toml]==7.8.2 -freezegun==1.5.2 -hypothesis==6.45.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -pygments==2.19.1 -pytest==8.4.0 -pytest-cov==6.1.1 -pytest-mock==3.14.1 -pytest-randomly==3.16.0 -python-dateutil==2.9.0.post0 -six==1.17.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/15eba42.txt b/.riot/requirements/15eba42.txt deleted file mode 100644 index e815da238a7..00000000000 --- a/.riot/requirements/15eba42.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/15eba42.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -graphql-core==3.2.3 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/15eea13.txt b/.riot/requirements/15eea13.txt deleted file mode 100644 index 882c470efc7..00000000000 --- a/.riot/requirements/15eea13.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/15eea13.in -# -asgiref==3.8.1 -attrs==25.3.0 -backports-zoneinfo==0.2.1 -coverage[toml]==7.6.1 -django==4.2.21 -django-configurations==2.5.1 -djangorestframework==3.15.2 -exceptiongroup==1.3.0 -execnet==2.1.1 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pytest-xdist==3.6.1 -six==1.17.0 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/15eebc1.txt b/.riot/requirements/15eebc1.txt deleted file mode 100644 index 04325d6e406..00000000000 --- a/.riot/requirements/15eebc1.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/15eebc1.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -graphene==3.4.3 -graphql-core==3.2.6 -graphql-relay==3.2.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/1631653.txt b/.riot/requirements/1631653.txt deleted file mode 100644 index 2f8bf49a9df..00000000000 --- a/.riot/requirements/1631653.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1631653.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -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/1632ff5.txt b/.riot/requirements/1632ff5.txt deleted file mode 100644 index e382438fc6a..00000000000 --- a/.riot/requirements/1632ff5.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1632ff5.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -future==1.0.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -pytz==2025.2 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -vertica-python==0.7.4 -zipp==3.20.2 diff --git a/.riot/requirements/1634f79.txt b/.riot/requirements/1634f79.txt deleted file mode 100644 index b9cc3be1e5f..00000000000 --- a/.riot/requirements/1634f79.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1634f79.in -# -attrs==25.1.0 -blinker==1.8.2 -certifi==2025.1.31 -charset-normalizer==3.4.1 -click==7.1.2 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -flask==1.1.4 -flask-openapi3==1.1.5 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.0.0 -itsdangerous==1.1.0 -jinja2==2.11.3 -markupsafe==1.1.1 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -pydantic==1.10.21 -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.2.1 -typing-extensions==4.12.2 -urllib3==1.26.20 -werkzeug==1.0.1 -zipp==3.20.2 diff --git a/.riot/requirements/163a963.txt b/.riot/requirements/163a963.txt deleted file mode 100644 index 68e73bd43c0..00000000000 --- a/.riot/requirements/163a963.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/163a963.in -# -attrs==24.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.1.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 -zope-event==5.0 -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/164cf92.txt b/.riot/requirements/164cf92.txt deleted file mode 100644 index 83dfe13f9e2..00000000000 --- a/.riot/requirements/164cf92.txt +++ /dev/null @@ -1,40 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/164cf92.in -# -aiofiles==24.1.0 -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -fastapi==0.64.0 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pydantic==1.10.22 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-multipart==0.0.20 -requests==2.32.4 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.13.6 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -zipp==3.20.2 diff --git a/.riot/requirements/164d658.txt b/.riot/requirements/164d658.txt deleted file mode 100644 index cd0bb3c4f4c..00000000000 --- a/.riot/requirements/164d658.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/164d658.in -# -attrs==23.1.0 -cassandra-driver==3.28.0 -click==8.1.7 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -geomet==0.2.1.post1 -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 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/167d6de.txt b/.riot/requirements/167d6de.txt deleted file mode 100644 index 295e09e1410..00000000000 --- a/.riot/requirements/167d6de.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/167d6de.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pymongo==3.8.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/168e13d.txt b/.riot/requirements/168e13d.txt deleted file mode 100644 index 5161e01c8a3..00000000000 --- a/.riot/requirements/168e13d.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.14 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/168e13d.in -# -attrs==25.3.0 -coverage[toml]==7.10.5 -dnspython==2.7.0 -hypothesis==6.45.0 -iniconfig==2.1.0 -mock==5.2.0 -mongoengine==0.24.2 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -pygments==2.19.2 -pymongo==4.8.0 -pytest==8.4.1 -pytest-cov==6.2.1 -pytest-mock==3.14.1 -pytest-randomly==3.16.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/169a623.txt b/.riot/requirements/169a623.txt deleted file mode 100644 index 3b56c7174fb..00000000000 --- a/.riot/requirements/169a623.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/169a623.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/16b7aa5.txt b/.riot/requirements/16b7aa5.txt deleted file mode 100644 index 1957b9a5706..00000000000 --- a/.riot/requirements/16b7aa5.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/16b7aa5.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mariadb==1.0.11 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/16bdd8d.txt b/.riot/requirements/16bdd8d.txt deleted file mode 100644 index f248df3e158..00000000000 --- a/.riot/requirements/16bdd8d.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/16bdd8d.in -# -attrs==23.2.0 -certifi==2024.2.2 -charset-normalizer==3.3.2 -coverage[toml]==7.4.2 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -requests==2.31.0 -requests-mock==1.11.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==1.26.18 -zipp==3.17.0 diff --git a/.riot/requirements/16c251e.txt b/.riot/requirements/16c251e.txt deleted file mode 100644 index 31796fe5ae4..00000000000 --- a/.riot/requirements/16c251e.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/16c251e.in -# -attrs==25.3.0 -backports-zoneinfo==0.2.1 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -psycopg==3.2.9 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/16eb426.txt b/.riot/requirements/16eb426.txt deleted file mode 100644 index e1072294f88..00000000000 --- a/.riot/requirements/16eb426.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/16eb426.in -# -attrs==23.2.0 -coverage[toml]==7.4.3 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -pytest==8.0.2 -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/170ff7e.txt b/.riot/requirements/170ff7e.txt deleted file mode 100644 index 64fffcfc4f2..00000000000 --- a/.riot/requirements/170ff7e.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/170ff7e.in -# -attrs==25.3.0 -coverage[toml]==7.8.2 -dnspython==2.7.0 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.7.0 -iniconfig==2.1.0 -mock==5.2.0 -mongoengine==0.24.2 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -pygments==2.19.1 -pymongo==4.8.0 -pytest==8.4.0 -pytest-cov==6.1.1 -pytest-mock==3.14.1 -pytest-randomly==3.16.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.14.0 -zipp==3.23.0 diff --git a/.riot/requirements/174cced.txt b/.riot/requirements/174cced.txt deleted file mode 100644 index 61ba59f5372..00000000000 --- a/.riot/requirements/174cced.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/174cced.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.3.4 -elasticsearch==7.13.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==1.26.18 -zipp==3.17.0 diff --git a/.riot/requirements/177f4da.txt b/.riot/requirements/177f4da.txt deleted file mode 100644 index 09614cde509..00000000000 --- a/.riot/requirements/177f4da.txt +++ /dev/null @@ -1,44 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/177f4da.in -# -aiobotocore==1.0.7 -aiohappyeyeballs==2.4.4 -aiohttp==3.10.11 -aioitertools==0.12.0 -aiosignal==1.3.1 -async-generator==1.10 -async-timeout==5.0.1 -attrs==25.3.0 -botocore==1.15.32 -coverage[toml]==7.6.1 -docutils==0.15.2 -exceptiongroup==1.3.0 -frozenlist==1.5.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -jmespath==0.10.0 -mock==5.2.0 -multidict==6.1.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -propcache==0.2.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.25.11 -wrapt==1.17.2 -yarl==1.15.2 -zipp==3.20.2 diff --git a/.riot/requirements/178cd30.txt b/.riot/requirements/178cd30.txt deleted file mode 100644 index 635350b856e..00000000000 --- a/.riot/requirements/178cd30.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/178cd30.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -future==1.0.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -pytz==2025.2 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -vertica-python==0.6.14 -zipp==3.20.2 diff --git a/.riot/requirements/17b0130.txt b/.riot/requirements/17b0130.txt deleted file mode 100644 index c893b33f3ff..00000000000 --- a/.riot/requirements/17b0130.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/17b0130.in -# -attrs==25.3.0 -azure-core==1.33.0 -azure-functions==1.10.1 -azure-servicebus==7.14.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -isodate==0.7.2 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 diff --git a/.riot/requirements/17c09be.txt b/.riot/requirements/17c09be.txt deleted file mode 100644 index 232f0a3a355..00000000000 --- a/.riot/requirements/17c09be.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/17c09be.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -mysqlclient==2.2.1 -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/17d317e.txt b/.riot/requirements/17d317e.txt deleted file mode 100644 index 819553cb0e3..00000000000 --- a/.riot/requirements/17d317e.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/17d317e.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -elasticsearch6==6.8.2 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.1.0 -zipp==3.17.0 diff --git a/.riot/requirements/17ec5eb.txt b/.riot/requirements/17ec5eb.txt deleted file mode 100644 index 40b68f0c906..00000000000 --- a/.riot/requirements/17ec5eb.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/17ec5eb.in -# -aiohttp==3.9.5 -aiohttp-jinja2==1.5.1 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==23.2.0 -coverage[toml]==7.5.4 -exceptiongroup==1.2.1 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 -iniconfig==2.0.0 -jinja2==3.1.4 -markupsafe==2.1.5 -mock==5.1.0 -multidict==6.0.5 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pytest==8.2.2 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -yarl==1.9.4 -zipp==3.19.2 diff --git a/.riot/requirements/180a9be.txt b/.riot/requirements/180a9be.txt deleted file mode 100644 index ed0a3c11f03..00000000000 --- a/.riot/requirements/180a9be.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/180a9be.in -# -attrs==25.3.0 -certifi==2025.4.26 -chardet==3.0.4 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==2.7 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.20.1 -requests-mock==1.11.0 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.24.3 -zipp==3.20.2 diff --git a/.riot/requirements/1810da7.txt b/.riot/requirements/1810da7.txt deleted file mode 100644 index 020c016edce..00000000000 --- a/.riot/requirements/1810da7.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1810da7.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.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 -pyodbc==4.0.39 -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/181c98f.txt b/.riot/requirements/181c98f.txt deleted file mode 100644 index b89a5382948..00000000000 --- a/.riot/requirements/181c98f.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/181c98f.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -msgpack==1.0.7 -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/1828aa7.txt b/.riot/requirements/1828aa7.txt deleted file mode 100644 index 8a7d96d3a0e..00000000000 --- a/.riot/requirements/1828aa7.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1828aa7.in -# -attrs==23.2.0 -certifi==2024.2.2 -charset-normalizer==3.3.2 -coverage[toml]==7.4.4 -docker==7.0.0 -exceptiongroup==1.2.1 -hypothesis==6.45.0 -idna==3.7 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.4.0 -pytest==8.1.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -requests==2.31.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.2.1 diff --git a/.riot/requirements/185fc1c.txt b/.riot/requirements/185fc1c.txt deleted file mode 100644 index f593ce365a6..00000000000 --- a/.riot/requirements/185fc1c.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/185fc1c.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pymongo==3.13.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/1878fa7.txt b/.riot/requirements/1878fa7.txt deleted file mode 100644 index db98927c9c0..00000000000 --- a/.riot/requirements/1878fa7.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/1878fa7.in -# -attrs==25.3.0 -certifi==2025.1.31 -charset-normalizer==3.4.1 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opensearch-py[requests]==2.0.1 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -pytest==8.3.5 -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.2.1 -urllib3==1.26.20 -zipp==3.20.2 diff --git a/.riot/requirements/189128e.txt b/.riot/requirements/189128e.txt deleted file mode 100644 index a90089d09b4..00000000000 --- a/.riot/requirements/189128e.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/189128e.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.4.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pymysql==0.10.1 -pytest==8.3.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.20.1 diff --git a/.riot/requirements/18abddb.txt b/.riot/requirements/18abddb.txt deleted file mode 100644 index cf90d7073c4..00000000000 --- a/.riot/requirements/18abddb.txt +++ /dev/null @@ -1,77 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/18abddb.in -# -arrow==1.3.0 -asgiref==3.8.1 -attrs==25.3.0 -autobahn==23.1.2 -automat==24.8.1 -bcrypt==4.2.1 -blessed==1.21.0 -certifi==2025.4.26 -cffi==1.17.1 -channels==3.0.5 -charset-normalizer==3.4.2 -constantly==23.10.4 -coverage[toml]==7.6.1 -cryptography==45.0.3 -daphne==3.0.2 -django==2.2.28 -django-configurations==2.3.2 -django-picklefield==3.0.1 -django-pylibmc==0.6.1 -django-q==1.3.6 -django-redis==4.5.0 -exceptiongroup==1.3.0 -hyperlink==21.0.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -incremental==24.7.2 -iniconfig==2.1.0 -isodate==0.7.2 -lxml==5.4.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -platformdirs==4.3.6 -pluggy==1.5.0 -psycopg2-binary==2.9.10 -pyasn1==0.6.1 -pyasn1-modules==0.4.2 -pycparser==2.22 -pylibmc==1.6.3 -pyopenssl==25.1.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -python-memcached==1.62 -pytz==2025.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 -tomli==2.2.1 -twisted[tls]==24.11.0 -txaio==23.1.1 -types-python-dateutil==2.9.0.20241206 -typing-extensions==4.13.2 -urllib3==2.2.3 -wcwidth==0.2.13 -zeep==4.3.1 -zipp==3.20.2 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/18c9043.txt b/.riot/requirements/18c9043.txt deleted file mode 100644 index 93b2a354491..00000000000 --- a/.riot/requirements/18c9043.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/18c9043.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -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 -tornado==4.5.3 -zipp==3.17.0 diff --git a/.riot/requirements/192e4d0.txt b/.riot/requirements/192e4d0.txt deleted file mode 100644 index a2835589432..00000000000 --- a/.riot/requirements/192e4d0.txt +++ /dev/null @@ -1,46 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/192e4d0.in -# -attrs==23.2.0 -beautifulsoup4==4.12.3 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.0 -exceptiongroup==1.2.2 -hupper==1.12.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.2.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pastedeploy==3.1.0 -plaster==1.1.2 -plaster-pastedeploy==1.0.1 -pluggy==1.5.0 -pserve-test-app @ file:///home/bits/project/tests/contrib/pyramid/pserve_app -pyramid==2.0.2 -pytest==8.3.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -requests==2.32.3 -sortedcontainers==2.4.0 -soupsieve==2.5 -tomli==2.0.1 -translationstring==1.4 -urllib3==2.2.2 -venusian==3.1.0 -waitress==3.0.0 -webob==1.8.7 -webtest==3.0.0 -zipp==3.19.2 -zope-deprecation==5.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 diff --git a/.riot/requirements/1951a77.txt b/.riot/requirements/1951a77.txt deleted file mode 100644 index 384b84d06d0..00000000000 --- a/.riot/requirements/1951a77.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1951a77.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -jinja2==3.1.2 -markupsafe==2.1.3 -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/195a93b.txt b/.riot/requirements/195a93b.txt deleted file mode 100644 index 418997b2e76..00000000000 --- a/.riot/requirements/195a93b.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/195a93b.in -# -asgiref==3.8.1 -attrs==25.3.0 -backports-zoneinfo==0.2.1 -coverage[toml]==7.6.1 -django==4.2.20 -django-configurations==2.5.1 -django-hosts==6.0 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -six==1.17.0 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/198266a.txt b/.riot/requirements/198266a.txt deleted file mode 100644 index a0a7c21269e..00000000000 --- a/.riot/requirements/198266a.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/198266a.in -# -asgiref==3.8.1 -attrs==25.3.0 -backports-zoneinfo==0.2.1 -bcrypt==4.2.1 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -dill==0.4.0 -django==4.0.10 -django-configurations==2.5.1 -exceptiongroup==1.3.0 -gevent==24.2.1 -greenlet==3.1.1 -gunicorn==23.0.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pylibmc==1.6.3 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.1 -pyyaml==6.0.2 -requests==2.32.4 -six==1.17.0 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/19aab60.txt b/.riot/requirements/19aab60.txt deleted file mode 100644 index 0bf2d25d3a2..00000000000 --- a/.riot/requirements/19aab60.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# 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/19aba18.txt b/.riot/requirements/19aba18.txt deleted file mode 100644 index 752af632f91..00000000000 --- a/.riot/requirements/19aba18.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/19aba18.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -dnspython==2.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pymongo==4.10.1 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/19aeb31.txt b/.riot/requirements/19aeb31.txt deleted file mode 100644 index 148e9a30091..00000000000 --- a/.riot/requirements/19aeb31.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/19aeb31.in -# -anyio==4.5.2 -asgiref==3.0.0 -async-timeout==3.0.1 -attrs==25.3.0 -certifi==2025.8.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/1a1c5ae.txt b/.riot/requirements/1a1c5ae.txt deleted file mode 100644 index d56f382026a..00000000000 --- a/.riot/requirements/1a1c5ae.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1a1c5ae.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -gunicorn==23.0.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -importlib-resources==6.4.5 -iniconfig==2.1.0 -jsonschema==4.23.0 -jsonschema-specifications==2023.12.1 -lz4==4.3.3 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pkgutil-resolve-name==1.3.10 -pluggy==1.5.0 -py-cpuinfo==8.0.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 -pytest-cpp==2.6.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -referencing==0.35.1 -rpds-py==0.20.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/1a2c79e.txt b/.riot/requirements/1a2c79e.txt deleted file mode 100644 index 9edb41d3df2..00000000000 --- a/.riot/requirements/1a2c79e.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/1a2c79e.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -decorator==5.1.1 -dogpile-cache==1.3.0 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pbr==6.0.0 -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 -stevedore==5.1.0 -tomli==2.0.1 -typing-extensions==4.9.0 -zipp==3.17.0 diff --git a/.riot/requirements/1a3a39d.txt b/.riot/requirements/1a3a39d.txt deleted file mode 100644 index 6ba873d2190..00000000000 --- a/.riot/requirements/1a3a39d.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1a3a39d.in -# -aiobotocore==2.0.1 -aiohappyeyeballs==2.4.0 -aiohttp==3.10.5 -aioitertools==0.11.0 -aiosignal==1.3.1 -async-generator==1.10 -async-timeout==4.0.3 -attrs==24.2.0 -botocore==1.22.8 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==8.4.0 -iniconfig==2.0.0 -jmespath==0.10.0 -mock==5.1.0 -multidict==6.0.5 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pytest==8.3.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.12.2 -urllib3==1.26.19 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.20.0 diff --git a/.riot/requirements/1a6e6c0.txt b/.riot/requirements/1a6e6c0.txt deleted file mode 100644 index b7d1ec2eb01..00000000000 --- a/.riot/requirements/1a6e6c0.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1a6e6c0.in -# -anyio==4.2.0 -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==1.0.2 -httpx==0.26.0 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.9.0 -zipp==3.17.0 diff --git a/.riot/requirements/1a84cc2.txt b/.riot/requirements/1a84cc2.txt deleted file mode 100644 index beb0cbbdbc9..00000000000 --- a/.riot/requirements/1a84cc2.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/1a84cc2.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -pytest==8.3.5 -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/1ac9ec1.txt b/.riot/requirements/1ac9ec1.txt deleted file mode 100644 index a491beef90c..00000000000 --- a/.riot/requirements/1ac9ec1.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1ac9ec1.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -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/1aca748.txt b/.riot/requirements/1aca748.txt deleted file mode 100644 index 3dac8924a3d..00000000000 --- a/.riot/requirements/1aca748.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1aca748.in -# -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-consul==1.1.0 -requests==2.31.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.1.0 -zipp==3.17.0 diff --git a/.riot/requirements/1adbb5d.txt b/.riot/requirements/1adbb5d.txt deleted file mode 100644 index efa8a19a752..00000000000 --- a/.riot/requirements/1adbb5d.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1adbb5d.in -# -aiofiles==24.1.0 -aiosqlite==0.20.0 -anyio==3.7.1 -attrs==25.3.0 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -databases==0.8.0 -exceptiongroup==1.3.0 -greenlet==3.1.1 -h11==0.12.0 -httpcore==0.14.7 -httpx==0.22.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.32.4 -rfc3986[idna2008]==1.5.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -sqlalchemy==1.4.54 -starlette==0.14.2 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -zipp==3.20.2 diff --git a/.riot/requirements/1ae2797.txt b/.riot/requirements/1ae2797.txt deleted file mode 100644 index b1170153af9..00000000000 --- a/.riot/requirements/1ae2797.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1ae2797.in -# -aiohttp==3.9.5 -aiohttp-jinja2==1.5.1 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==23.2.0 -coverage[toml]==7.5.4 -exceptiongroup==1.2.1 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 -iniconfig==2.0.0 -jinja2==3.1.4 -markupsafe==2.1.5 -mock==5.1.0 -multidict==6.0.5 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pytest==8.2.2 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -yarl==1.9.4 -zipp==3.19.2 diff --git a/.riot/requirements/1af4fe2.txt b/.riot/requirements/1af4fe2.txt deleted file mode 100644 index 3a4761a3456..00000000000 --- a/.riot/requirements/1af4fe2.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1af4fe2.in -# -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.8.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -execnet==2.1.1 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -more-itertools==8.10.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==7.4.4 -pytest-cov==2.12.0 -pytest-mock==2.0.0 -pytest-randomly==3.15.0 -pytest-xdist==3.6.1 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/1b02ea2.txt b/.riot/requirements/1b02ea2.txt deleted file mode 100644 index 73847ef6b54..00000000000 --- a/.riot/requirements/1b02ea2.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1b02ea2.in -# -anyio==3.7.1 -attrs==25.3.0 -certifi==2025.7.9 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -fastapi==0.86.0 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.113.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pydantic==1.10.22 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.20.4 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 diff --git a/.riot/requirements/1b19707.txt b/.riot/requirements/1b19707.txt deleted file mode 100644 index 5a50cb0f571..00000000000 --- a/.riot/requirements/1b19707.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1b19707.in -# -attrs==24.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.0.0 -mako==1.3.8 -markupsafe==2.1.5 -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/1b6f5be.txt b/.riot/requirements/1b6f5be.txt deleted file mode 100644 index 30ccd368628..00000000000 --- a/.riot/requirements/1b6f5be.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/1b6f5be.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -msgpack==1.0.7 -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/1ba4b57.txt b/.riot/requirements/1ba4b57.txt deleted file mode 100644 index 18b24da31a7..00000000000 --- a/.riot/requirements/1ba4b57.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/1ba4b57.in -# -attrs==23.2.0 -coverage[toml]==7.4.1 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -pytest==8.0.0 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.2.0 -zipp==3.17.0 diff --git a/.riot/requirements/1bceb88.txt b/.riot/requirements/1bceb88.txt deleted file mode 100644 index 2c50572f098..00000000000 --- a/.riot/requirements/1bceb88.txt +++ /dev/null @@ -1,56 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1bceb88.in -# -aiobotocore==2.3.1 -aiohappyeyeballs==2.4.4 -aiohttp==3.10.11 -aioitertools==0.12.0 -aiosignal==1.3.1 -async-timeout==5.0.1 -attrs==24.3.0 -botocore==1.24.21 -certifi==2024.12.14 -charset-normalizer==3.4.1 -coverage[toml]==7.6.1 -elastic-transport==8.15.1 -elasticsearch==8.17.0 -events==0.5 -exceptiongroup==1.2.2 -frozenlist==1.5.0 -gevent==20.12.1 -greenlet==1.0.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.0.0 -jmespath==1.0.1 -mock==5.1.0 -multidict==6.1.0 -opensearch-py==2.8.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -propcache==0.2.0 -pynamodb==5.5.1 -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.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.12.2 -urllib3==1.26.20 -wrapt==1.17.0 -yarl==1.15.2 -zipp==3.20.2 -zope-event==5.0 -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/1bf3da5.txt b/.riot/requirements/1bf3da5.txt deleted file mode 100644 index da379d432f9..00000000000 --- a/.riot/requirements/1bf3da5.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1bf3da5.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mariadb==1.1.13 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/1c0509d.txt b/.riot/requirements/1c0509d.txt deleted file mode 100644 index e08e98db570..00000000000 --- a/.riot/requirements/1c0509d.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/1c0509d.in -# -async-timeout==4.0.3 -attrs==23.1.0 -click==7.1.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -redis==5.0.1 -rq==1.8.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/1c0ccc9.txt b/.riot/requirements/1c0ccc9.txt deleted file mode 100644 index 8a49d5e9d54..00000000000 --- a/.riot/requirements/1c0ccc9.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1c0ccc9.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.3.4 -elasticsearch==7.17.9 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==1.26.18 -zipp==3.17.0 diff --git a/.riot/requirements/1c1da8c.txt b/.riot/requirements/1c1da8c.txt deleted file mode 100644 index 090dda34995..00000000000 --- a/.riot/requirements/1c1da8c.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1c1da8c.in -# -attrs==23.2.0 -coverage[toml]==7.5.4 -exceptiongroup==1.2.1 -hypothesis==6.45.0 -importlib-metadata==8.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pytest==8.2.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -redis==3.5.3 -redis-py-cluster==2.1.3 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.19.2 diff --git a/.riot/requirements/1c31001.txt b/.riot/requirements/1c31001.txt deleted file mode 100644 index 0aa511b0f41..00000000000 --- a/.riot/requirements/1c31001.txt +++ /dev/null @@ -1,50 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1c31001.in -# -annotated-types==0.7.0 -anthropic==0.28.1 -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.4.26 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -distro==1.9.0 -exceptiongroup==1.3.0 -filelock==3.16.1 -fsspec==2025.3.0 -h11==0.16.0 -hf-xet==1.1.3 -httpcore==1.0.9 -httpx==0.27.2 -huggingface-hub==0.32.4 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jiter==0.9.1 -mock==5.2.0 -multidict==6.1.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -propcache==0.2.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-asyncio==0.24.0 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pyyaml==6.0.2 -requests==2.32.3 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tokenizers==0.21.0 -tomli==2.2.1 -tqdm==4.67.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -vcrpy==6.0.2 -wrapt==1.17.2 -yarl==1.15.2 diff --git a/.riot/requirements/1c4e625.txt b/.riot/requirements/1c4e625.txt deleted file mode 100644 index 4ee880ebb56..00000000000 --- a/.riot/requirements/1c4e625.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/1c4e625.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -mongoengine==0.23.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pymongo==3.13.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/1c56cf0.txt b/.riot/requirements/1c56cf0.txt deleted file mode 100644 index d292b56cb3d..00000000000 --- a/.riot/requirements/1c56cf0.txt +++ /dev/null @@ -1,74 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1c56cf0.in -# -annotated-types==0.7.0 -attrs==25.3.0 -aws-sam-translator==1.98.0 -aws-xray-sdk==2.14.0 -boto==2.49.0 -boto3==1.22.0 -botocore==1.25.0 -certifi==2025.4.26 -cffi==1.17.1 -cfn-lint==0.53.1 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -cryptography==45.0.3 -docker==7.1.0 -ecdsa==0.14.1 -exceptiongroup==1.3.0 -execnet==2.1.1 -hypothesis==6.45.0 -idna==2.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -jinja2==2.10.3 -jmespath==1.0.1 -jsondiff==2.2.1 -jsonpatch==1.33 -jsonpointer==3.0.0 -jsonschema==3.2.0 -junit-xml==1.9 -markupsafe==1.1.1 -mock==5.2.0 -more-itertools==10.5.0 -moto==1.3.16 -networkx==2.8.8 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pyasn1==0.4.8 -pycparser==2.22 -pydantic==2.10.6 -pydantic-core==2.27.2 -pynamodb==5.0.3 -pyrsistent==0.20.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pytest-xdist==3.6.1 -python-dateutil==2.9.0.post0 -python-jose[cryptography]==3.4.0 -pytz==2025.2 -pyyaml==6.0.2 -requests==2.32.4 -responses==0.25.7 -rsa==4.9.1 -s3transfer==0.5.2 -six==1.17.0 -sortedcontainers==2.4.0 -sshpubkeys==3.3.1 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -werkzeug==2.1.2 -wrapt==1.17.2 -xmltodict==0.14.2 -zipp==3.20.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/1c84e93.txt b/.riot/requirements/1c84e93.txt deleted file mode 100644 index 66fc775af92..00000000000 --- a/.riot/requirements/1c84e93.txt +++ /dev/null @@ -1,37 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1c84e93.in -# -attrs==25.3.0 -azure-core==1.33.0 -azure-eventhub==5.15.0 -azure-functions==1.23.0 -azure-storage-blob==12.26.0 -certifi==2025.8.3 -cffi==1.17.1 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -cryptography==46.0.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -isodate==0.7.2 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pycparser==2.23 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -werkzeug==3.0.6 diff --git a/.riot/requirements/1c87bc4.txt b/.riot/requirements/1c87bc4.txt deleted file mode 100644 index bc50f51cc3a..00000000000 --- a/.riot/requirements/1c87bc4.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/1c87bc4.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.0.5 -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/1cc7b0e.txt b/.riot/requirements/1cc7b0e.txt deleted file mode 100644 index adb8f71e30b..00000000000 --- a/.riot/requirements/1cc7b0e.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1cc7b0e.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -yaaredis==2.0.4 -zipp==3.17.0 diff --git a/.riot/requirements/1cda235.txt b/.riot/requirements/1cda235.txt deleted file mode 100644 index 5b372bb3fec..00000000000 --- a/.riot/requirements/1cda235.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/1cda235.in -# -aiopg==1.4.0 -async-timeout==4.0.3 -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -psycopg2-binary==2.9.10 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.41 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/1ce3412.txt b/.riot/requirements/1ce3412.txt deleted file mode 100644 index 2013dc5e8b8..00000000000 --- a/.riot/requirements/1ce3412.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1ce3412.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.12.3 -httpx==0.17.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -rfc3986[idna2008]==1.5.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/1ce4e3f.txt b/.riot/requirements/1ce4e3f.txt deleted file mode 100644 index 744c86d71c0..00000000000 --- a/.riot/requirements/1ce4e3f.txt +++ /dev/null @@ -1,51 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1ce4e3f.in -# -annotated-types==0.7.0 -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.4.26 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -distro==1.9.0 -exceptiongroup==1.3.0 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.28.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -jiter==0.9.1 -mock==5.2.0 -multidict==6.1.0 -openai==1.76.2 -opentracing==2.4.0 -packaging==25.0 -pillow==10.4.0 -pluggy==1.5.0 -propcache==0.2.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pyyaml==6.0.2 -regex==2024.11.6 -requests==2.32.4 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tiktoken==0.7.0 -tomli==2.2.1 -tqdm==4.67.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -vcrpy==6.0.2 -wrapt==1.17.2 -yarl==1.15.2 -zipp==3.20.2 diff --git a/.riot/requirements/1ce93b3.txt b/.riot/requirements/1ce93b3.txt deleted file mode 100644 index a0edba9ffd0..00000000000 --- a/.riot/requirements/1ce93b3.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.13 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1ce93b3.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -dnspython==2.7.0 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pymongo==4.8.0 -pytest==8.3.3 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/1cef696.txt b/.riot/requirements/1cef696.txt deleted file mode 100644 index 7a7725cdf1a..00000000000 --- a/.riot/requirements/1cef696.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/1cef696.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -googleapis-common-protos==1.65.0 -grpcio==1.34.1 -hypothesis==6.45.0 -importlib-metadata==8.4.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -protobuf==5.28.0 -pytest==8.3.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.20.1 diff --git a/.riot/requirements/1d1dbc1.txt b/.riot/requirements/1d1dbc1.txt deleted file mode 100644 index 179f45bf156..00000000000 --- a/.riot/requirements/1d1dbc1.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/1d1dbc1.in -# -attrs==25.3.0 -coverage[toml]==7.8.2 -exceptiongroup==1.3.0 -freezegun==1.3.1 -hypothesis==6.45.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -pygments==2.19.1 -pytest==8.4.0 -pytest-cov==6.1.1 -pytest-mock==3.14.1 -pytest-randomly==3.16.0 -python-dateutil==2.9.0.post0 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.14.0 diff --git a/.riot/requirements/1d23fbc.txt b/.riot/requirements/1d23fbc.txt deleted file mode 100644 index ba4db809a86..00000000000 --- a/.riot/requirements/1d23fbc.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1d23fbc.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.0.0 -jinja2==2.10.3 -markupsafe==1.1.1 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -pytest==8.3.3 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.1.0 -zipp==3.20.2 diff --git a/.riot/requirements/1d38b9f.txt b/.riot/requirements/1d38b9f.txt deleted file mode 100644 index 2be422fecc0..00000000000 --- a/.riot/requirements/1d38b9f.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1d38b9f.in -# -attrs==25.3.0 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 diff --git a/.riot/requirements/1d390e8.txt b/.riot/requirements/1d390e8.txt deleted file mode 100644 index e288067465c..00000000000 --- a/.riot/requirements/1d390e8.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1d390e8.in -# -aiobotocore==2.13.3 -aiohappyeyeballs==2.4.0 -aiohttp==3.10.5 -aioitertools==0.11.0 -aiosignal==1.3.1 -async-generator==1.10 -async-timeout==4.0.3 -attrs==24.2.0 -botocore==1.34.162 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==8.4.0 -iniconfig==2.0.0 -jmespath==1.0.1 -mock==5.1.0 -multidict==6.0.5 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pytest==8.3.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.12.2 -urllib3==1.26.19 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.20.0 diff --git a/.riot/requirements/1d788df.txt b/.riot/requirements/1d788df.txt deleted file mode 100644 index 29c6cd06a17..00000000000 --- a/.riot/requirements/1d788df.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1d788df.in -# -attrs==25.3.0 -certifi==2025.7.9 -charset-normalizer==3.4.2 -click==7.1.2 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -flask==1.1.4 -hypothesis==6.113.0 -idna==3.10 -iniconfig==2.1.0 -itsdangerous==1.1.0 -jinja2==2.11.3 -markupsafe==1.1.1 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -werkzeug==1.0.1 diff --git a/.riot/requirements/1d81907.txt b/.riot/requirements/1d81907.txt deleted file mode 100644 index cc2a4fca3c9..00000000000 --- a/.riot/requirements/1d81907.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1d81907.in -# -astunparse==1.6.3 -attrs==25.3.0 -certifi==2025.7.14 -cffi==1.17.1 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -cryptography==45.0.5 -exceptiongroup==1.3.0 -grpcio==1.70.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pycparser==2.22 -pycryptodome==3.23.0 -pytest==8.3.5 -pytest-asyncio==0.24.0 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -simplejson==3.20.1 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -wheel==0.45.1 diff --git a/.riot/requirements/1db8cf2.txt b/.riot/requirements/1db8cf2.txt deleted file mode 100644 index e84a492d5e7..00000000000 --- a/.riot/requirements/1db8cf2.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# 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==25.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.1.0 -mock==5.2.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.5 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.40 -tomli==2.2.1 -typing-extensions==4.13.1 -zipp==3.20.2 diff --git a/.riot/requirements/1dcf37e.txt b/.riot/requirements/1dcf37e.txt deleted file mode 100644 index 458a62f2355..00000000000 --- a/.riot/requirements/1dcf37e.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/1dcf37e.in -# -aiopg==0.16.0 -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -psycopg2-binary==2.9.10 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.41 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/1dd7f62.txt b/.riot/requirements/1dd7f62.txt deleted file mode 100644 index a9e66451ce7..00000000000 --- a/.riot/requirements/1dd7f62.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1dd7f62.in -# -amqp==5.3.1 -attrs==25.3.0 -backports-zoneinfo[tzdata]==0.2.1 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -kombu==5.5.4 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -tzdata==2025.2 -vine==5.1.0 -zipp==3.20.2 diff --git a/.riot/requirements/1df8347.txt b/.riot/requirements/1df8347.txt deleted file mode 100644 index ca1c3a6ec3f..00000000000 --- a/.riot/requirements/1df8347.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1df8347.in -# -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.1.1 -gunicorn==23.0.0 -hypothesis==6.45.0 -idna==3.10 -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 -requests==2.32.3 -sortedcontainers==2.4.0 -tomli==2.2.1 -urllib3==2.2.3 -zipp==3.20.2 -zope-event==5.0 -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/1dfd438.txt b/.riot/requirements/1dfd438.txt deleted file mode 100644 index 32ced73b7f7..00000000000 --- a/.riot/requirements/1dfd438.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1dfd438.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.4.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pymysql==1.1.1 -pytest==8.3.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.20.1 diff --git a/.riot/requirements/1e08b64.txt b/.riot/requirements/1e08b64.txt deleted file mode 100644 index 1145707ee4c..00000000000 --- a/.riot/requirements/1e08b64.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1e08b64.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -msgpack==1.0.8 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/1e0e29e.txt b/.riot/requirements/1e0e29e.txt deleted file mode 100644 index 2ba80bbb6ef..00000000000 --- a/.riot/requirements/1e0e29e.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/1e0e29e.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -loguru==0.7.2 -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/1e3534f.txt b/.riot/requirements/1e3534f.txt deleted file mode 100644 index 6f5850a6d4f..00000000000 --- a/.riot/requirements/1e3534f.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1e3534f.in -# -attrs==23.2.0 -cheroot==10.0.1 -cherrypy==17.4.2 -contextlib2==21.6.0 -coverage[toml]==7.6.0 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.2.0 -iniconfig==2.0.0 -jaraco-functools==4.0.1 -mock==5.1.0 -more-itertools==8.10.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -portend==3.2.0 -pytest==8.3.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -six==1.16.0 -sortedcontainers==2.4.0 -tempora==5.6.0 -tomli==2.0.1 -typing-extensions==4.12.2 -zc-lockfile==3.0.post1 -zipp==3.19.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 diff --git a/.riot/requirements/1e649b4.txt b/.riot/requirements/1e649b4.txt deleted file mode 100644 index 964238d148f..00000000000 --- a/.riot/requirements/1e649b4.txt +++ /dev/null @@ -1,55 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/1e649b4.in -# -amqp==5.3.1 -attrs==25.3.0 -backports-zoneinfo[tzdata]==0.2.1 -billiard==4.2.1 -celery==5.5.3 -certifi==2025.4.26 -charset-normalizer==3.4.2 -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==2.2.28 -exceptiongroup==1.3.0 -gevent==24.2.1 -greenlet==3.1.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -kombu==5.5.4 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -prompt-toolkit==3.0.51 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -pytz==2025.2 -requests==2.32.4 -six==1.17.0 -sortedcontainers==2.4.0 -sqlalchemy==1.2.19 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -tzdata==2025.2 -urllib3==2.2.3 -vine==5.1.0 -wcwidth==0.2.13 -zipp==3.20.2 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/1e8124b.txt b/.riot/requirements/1e8124b.txt deleted file mode 100644 index e9d4b404a12..00000000000 --- a/.riot/requirements/1e8124b.txt +++ /dev/null @@ -1,54 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1e8124b.in -# -annotated-types==0.7.0 -anyio==3.7.1 -attrs==25.3.0 -certifi==2025.4.26 -coverage[toml]==7.6.1 -distro==1.9.0 -exceptiongroup==1.3.0 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -multidict==6.1.0 -numpy==1.24.4 -openai[datalib,embeddings]==1.0.0 -opentracing==2.4.0 -packaging==25.0 -pandas==2.0.3 -pandas-stubs==2.0.3.230814 -pillow==9.5.0 -pluggy==1.5.0 -propcache==0.2.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -pytz==2025.2 -pyyaml==6.0.2 -six==1.17.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -tqdm==4.67.1 -types-pytz==2024.2.0.20241221 -typing-extensions==4.13.2 -tzdata==2025.2 -urllib3==1.26.20 -vcrpy==6.0.2 -wrapt==1.17.2 -yarl==1.15.2 -zipp==3.20.2 diff --git a/.riot/requirements/1ea308d.txt b/.riot/requirements/1ea308d.txt deleted file mode 100644 index 8c8ddfcc11f..00000000000 --- a/.riot/requirements/1ea308d.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1ea308d.in -# -asgiref==3.8.1 -attrs==25.3.0 -backports-zoneinfo==0.2.1 -certifi==2025.6.15 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -django==4.0.10 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 diff --git a/.riot/requirements/1eb29d6.txt b/.riot/requirements/1eb29d6.txt deleted file mode 100644 index 2de32e68a6d..00000000000 --- a/.riot/requirements/1eb29d6.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/1eb29d6.in -# -attrs==23.2.0 -coverage[toml]==7.4.2 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==1.25 -zipp==3.17.0 diff --git a/.riot/requirements/1eded52.txt b/.riot/requirements/1eded52.txt deleted file mode 100644 index 145cebeb4a7..00000000000 --- a/.riot/requirements/1eded52.txt +++ /dev/null @@ -1,44 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1eded52.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -gevent==24.2.1 -greenlet==3.1.1 -gunicorn[gevent]==23.0.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -importlib-resources==6.4.5 -iniconfig==2.1.0 -jsonschema==4.23.0 -jsonschema-specifications==2023.12.1 -lz4==4.3.3 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pkgutil-resolve-name==1.3.10 -pluggy==1.5.0 -py-cpuinfo==8.0.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 -pytest-cpp==2.6.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -referencing==0.35.1 -rpds-py==0.20.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -uwsgi==2.0.30 -zipp==3.20.2 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/1ee2a7f.txt b/.riot/requirements/1ee2a7f.txt deleted file mode 100644 index 714af2c4877..00000000000 --- a/.riot/requirements/1ee2a7f.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/1ee2a7f.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -gunicorn==23.0.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -lz4==4.3.3 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -protobuf==5.29.5 -py-cpuinfo==8.0.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -uwsgi==2.0.30 -zipp==3.20.2 diff --git a/.riot/requirements/1ef7371.txt b/.riot/requirements/1ef7371.txt deleted file mode 100644 index c94f76cedcb..00000000000 --- a/.riot/requirements/1ef7371.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1ef7371.in -# -attrs==23.2.0 -coverage[toml]==7.5.4 -exceptiongroup==1.2.1 -hypothesis==6.45.0 -importlib-metadata==8.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pytest==8.2.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -redis==3.0.1 -redis-py-cluster==2.0.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.19.2 diff --git a/.riot/requirements/1efb912.txt b/.riot/requirements/1efb912.txt deleted file mode 100644 index 50742922dd8..00000000000 --- a/.riot/requirements/1efb912.txt +++ /dev/null @@ -1,47 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1efb912.in -# -attrs==25.3.0 -certifi==2025.4.26 -cffi==1.17.1 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -cryptography==45.0.3 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -jinja2==3.1.6 -linkify-it-py==2.0.3 -markdown-it-py[linkify,plugins]==3.0.0 -markupsafe==2.1.5 -mdit-py-plugins==0.4.2 -mdurl==0.1.2 -memray==1.17.2 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -platformdirs==4.3.6 -pluggy==1.5.0 -psycopg2-binary==2.9.10 -pycparser==2.22 -pycryptodome==3.23.0 -pygments==2.19.1 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-memray==1.7.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.32.3 -rich==14.0.0 -sortedcontainers==2.4.0 -textual==3.2.0 -tomli==2.2.1 -typing-extensions==4.13.2 -uc-micro-py==1.0.3 -urllib3==2.2.3 -zipp==3.20.2 diff --git a/.riot/requirements/1f27e33.txt b/.riot/requirements/1f27e33.txt deleted file mode 100644 index c4a6c126e7f..00000000000 --- a/.riot/requirements/1f27e33.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/1f27e33.in -# -attrs==23.1.0 -confluent-kafka==2.3.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-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/1f2ab25.txt b/.riot/requirements/1f2ab25.txt deleted file mode 100644 index ee70e55666e..00000000000 --- a/.riot/requirements/1f2ab25.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1f2ab25.in -# -async-timeout==5.0.1 -asyncpg==0.30.0 -attrs==24.2.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.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-asyncio==0.21.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -zipp==3.20.2 diff --git a/.riot/requirements/1f540f4.txt b/.riot/requirements/1f540f4.txt deleted file mode 100644 index 46b38265655..00000000000 --- a/.riot/requirements/1f540f4.txt +++ /dev/null @@ -1,49 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/1f540f4.in -# -attrs==24.2.0 -boto3==1.35.45 -botocore==1.35.45 -bytecode==0.15.1 -cattrs==23.2.3 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.5.4 -datadog==0.51.0 -datadog-lambda==6.105.0 -ddsketch==3.0.1 -ddtrace==2.20.0 -deprecated==1.2.14 -envier==0.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.4.0 -iniconfig==2.0.0 -jmespath==1.0.1 -mock==5.1.0 -opentelemetry-api==1.27.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -protobuf==5.28.2 -pytest==8.3.3 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -requests==2.32.3 -s3transfer==0.10.3 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.2 -typing-extensions==4.12.2 -ujson==5.10.0 -urllib3==1.26.20 -wrapt==1.16.0 -xmltodict==0.14.2 -zipp==3.20.2 diff --git a/.riot/requirements/1f9c58a.txt b/.riot/requirements/1f9c58a.txt deleted file mode 100644 index 141f6723214..00000000000 --- a/.riot/requirements/1f9c58a.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1f9c58a.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -gevent==24.2.1 -greenlet==3.1.1 -httpretty==1.1.4 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -py-cpuinfo==9.0.0 -pyfakefs==5.10.0 -pytest==8.3.5 -pytest-asyncio==0.23.8 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-json-logger==2.0.7 -sortedcontainers==2.4.0 -tomli==2.3.0 -typing-extensions==4.13.2 -wrapt==1.17.3 -zipp==3.20.2 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/1fb1389.txt b/.riot/requirements/1fb1389.txt deleted file mode 100644 index 6006e992b98..00000000000 --- a/.riot/requirements/1fb1389.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1fb1389.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pymemcache==3.5.2 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/1fcb05f.txt b/.riot/requirements/1fcb05f.txt deleted file mode 100644 index a9332da417c..00000000000 --- a/.riot/requirements/1fcb05f.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1fcb05f.in -# -amqp==2.6.1 -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -kombu==4.6.11 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -vine==1.3.0 -zipp==3.20.2 diff --git a/.riot/requirements/1fe5c31.txt b/.riot/requirements/1fe5c31.txt deleted file mode 100644 index 106cb794d61..00000000000 --- a/.riot/requirements/1fe5c31.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/1fe5c31.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -structlog==23.2.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/1ffebce.txt b/.riot/requirements/1ffebce.txt deleted file mode 100644 index 5b613bc5d30..00000000000 --- a/.riot/requirements/1ffebce.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1ffebce.in -# -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.8.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -execnet==2.1.1 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -more-itertools==8.10.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==2.12.0 -pytest-mock==2.0.0 -pytest-randomly==3.15.0 -pytest-xdist==3.6.1 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/20699e5.txt b/.riot/requirements/20699e5.txt deleted file mode 100644 index 75d6b416d16..00000000000 --- a/.riot/requirements/20699e5.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/20699e5.in -# -asyncpg==0.22.0 -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.21.2 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/206be6b.txt b/.riot/requirements/206be6b.txt deleted file mode 100644 index 2b2d3633eca..00000000000 --- a/.riot/requirements/206be6b.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/206be6b.in -# -annotated-types==0.7.0 -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.7.9 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -fastapi==0.114.2 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.113.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.38.6 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 diff --git a/.riot/requirements/24618e2.txt b/.riot/requirements/24618e2.txt deleted file mode 100644 index 2481c88634f..00000000000 --- a/.riot/requirements/24618e2.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/24618e2.in -# -aiofiles==24.1.0 -aiosqlite==0.20.0 -anyio==3.7.1 -attrs==25.3.0 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -databases==0.8.0 -exceptiongroup==1.3.0 -greenlet==3.1.1 -h11==0.12.0 -httpcore==0.14.7 -httpx==0.22.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.32.4 -rfc3986[idna2008]==1.5.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -sqlalchemy==1.4.54 -starlette==0.20.4 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -zipp==3.20.2 diff --git a/.riot/requirements/260ead7.txt b/.riot/requirements/260ead7.txt deleted file mode 100644 index f006fcd4f84..00000000000 --- a/.riot/requirements/260ead7.txt +++ /dev/null @@ -1,48 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/260ead7.in -# -aiofiles==23.2.1 -aiohttp==3.9.1 -aiosignal==1.3.1 -async-generator==1.10 -async-timeout==4.0.3 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -frozenlist==1.4.1 -h11==0.9.0 -httpcore==0.11.1 -httptools==0.6.1 -httpx==0.15.4 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==5.2.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -pytest-sanic==1.6.2 -requests==2.31.0 -rfc3986[idna2008]==1.5.0 -sanic==20.12.7 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -ujson==5.9.0 -urllib3==2.1.0 -uvloop==0.19.0 -websockets==9.1 -yarl==1.9.4 -zipp==3.17.0 diff --git a/.riot/requirements/2715c88.txt b/.riot/requirements/2715c88.txt deleted file mode 100644 index ed246768e2e..00000000000 --- a/.riot/requirements/2715c88.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/2715c88.in -# -aiofiles==24.1.0 -aiosqlite==0.20.0 -anyio==3.7.1 -attrs==25.3.0 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -databases==0.8.0 -exceptiongroup==1.3.0 -greenlet==3.1.1 -h11==0.12.0 -httpcore==0.14.7 -httpx==0.22.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.32.4 -rfc3986[idna2008]==1.5.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -sqlalchemy==1.4.54 -starlette==0.33.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -zipp==3.20.2 diff --git a/.riot/requirements/273fcaf.txt b/.riot/requirements/273fcaf.txt deleted file mode 100644 index eb4ea0f7ab0..00000000000 --- a/.riot/requirements/273fcaf.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/273fcaf.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -msgpack==1.1.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -py-cpuinfo==9.0.0 -pytest==8.3.5 -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.2.1 -zipp==3.20.2 diff --git a/.riot/requirements/2bcce4e.txt b/.riot/requirements/2bcce4e.txt deleted file mode 100644 index c444938efa6..00000000000 --- a/.riot/requirements/2bcce4e.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/2bcce4e.in -# -attrs==25.3.0 -coverage[toml]==7.8.2 -freezegun==1.3.1 -hypothesis==6.45.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -pygments==2.19.1 -pytest==8.4.0 -pytest-cov==6.1.1 -pytest-mock==3.14.1 -pytest-randomly==3.16.0 -python-dateutil==2.9.0.post0 -six==1.17.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/2be0e27.txt b/.riot/requirements/2be0e27.txt deleted file mode 100644 index da5795c27eb..00000000000 --- a/.riot/requirements/2be0e27.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/2be0e27.in -# -aiofiles==23.2.1 -anyio==4.2.0 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.16.3 -httptools==0.6.1 -httpx==0.23.3 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==5.2.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -requests==2.31.0 -rfc3986[idna2008]==1.5.0 -sanic==21.12.2 -sanic-routing==0.7.2 -sanic-testing==0.8.3 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.9.0 -ujson==5.9.0 -urllib3==2.1.0 -uvloop==0.19.0 -websockets==10.4 -zipp==3.17.0 diff --git a/.riot/requirements/2c0f966.txt b/.riot/requirements/2c0f966.txt deleted file mode 100644 index 6291808fc42..00000000000 --- a/.riot/requirements/2c0f966.txt +++ /dev/null @@ -1,39 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/2c0f966.in -# -anyio==3.7.1 -attrs==25.3.0 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.1.8 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -fastapi==0.86.0 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jinja2==3.1.6 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pydantic==1.10.24 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -python-multipart==0.0.20 -requests==2.32.4 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.20.4 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -uvicorn==0.33.0 diff --git a/.riot/requirements/2d3b0ef.txt b/.riot/requirements/2d3b0ef.txt deleted file mode 100644 index d99a88b036e..00000000000 --- a/.riot/requirements/2d3b0ef.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/2d3b0ef.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -graphql-core==3.2.3 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/2f7da3e.txt b/.riot/requirements/2f7da3e.txt deleted file mode 100644 index 362060f9ca9..00000000000 --- a/.riot/requirements/2f7da3e.txt +++ /dev/null @@ -1,88 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/2f7da3e.in -# -annotated-types==0.7.0 -attrs==25.3.0 -aws-sam-translator==1.100.0 -aws-xray-sdk==2.14.0 -boto3==1.34.49 -botocore==1.34.49 -certifi==2025.8.3 -cffi==1.17.1 -cfn-lint==1.26.1 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -cryptography==45.0.7 -docker==7.1.0 -ecdsa==0.19.1 -exceptiongroup==1.3.0 -graphql-core==3.2.6 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -importlib-resources==6.4.5 -iniconfig==2.1.0 -jinja2==3.1.6 -jmespath==1.0.1 -jsondiff==2.2.1 -jsonpatch==1.33 -jsonpointer==3.0.0 -jsonschema==4.23.0 -jsonschema-path==0.3.4 -jsonschema-specifications==2023.12.1 -lazy-object-proxy==1.10.0 -markupsafe==2.1.5 -mock==5.2.0 -moto[all]==4.2.14 -mpmath==1.3.0 -multidict==6.1.0 -multipart==1.3.0 -networkx==3.1 -openapi-schema-validator==0.6.3 -openapi-spec-validator==0.7.2 -opentracing==2.4.0 -packaging==25.0 -pathable==0.4.4 -pkgutil-resolve-name==1.3.10 -pluggy==1.5.0 -propcache==0.2.0 -py-partiql-parser==0.5.0 -pyasn1==0.4.8 -pycparser==2.23 -pydantic==2.10.6 -pydantic-core==2.27.2 -pyparsing==3.1.4 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -python-jose[cryptography]==3.4.0 -pyyaml==6.0.2 -referencing==0.35.1 -regex==2024.11.6 -requests==2.32.4 -responses==0.25.8 -rfc3339-validator==0.1.4 -rpds-py==0.20.1 -rsa==4.9.1 -s3transfer==0.10.4 -six==1.17.0 -sortedcontainers==2.4.0 -sshpubkeys==3.3.1 -sympy==1.13.3 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -vcrpy==6.0.1 -werkzeug==3.0.6 -wrapt==1.17.3 -xmltodict==0.15.0 -yarl==1.15.2 -zipp==3.20.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/3007b59.txt b/.riot/requirements/3007b59.txt deleted file mode 100644 index ae662d03dd9..00000000000 --- a/.riot/requirements/3007b59.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/3007b59.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/30641af.txt b/.riot/requirements/30641af.txt deleted file mode 100644 index 407ecbf61ed..00000000000 --- a/.riot/requirements/30641af.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/30641af.in -# -attrs==25.3.0 -certifi==2025.6.15 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -django==2.2.28 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytz==2025.2 -requests==2.32.4 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 diff --git a/.riot/requirements/30b2227.txt b/.riot/requirements/30b2227.txt deleted file mode 100644 index 11938ffc708..00000000000 --- a/.riot/requirements/30b2227.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/30b2227.in -# -aiohttp==3.9.5 -aiohttp-jinja2==1.6 -aiosignal==1.3.1 -async-timeout==4.0.3 -attrs==23.2.0 -coverage[toml]==7.5.4 -exceptiongroup==1.2.1 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 -iniconfig==2.0.0 -jinja2==3.1.4 -markupsafe==2.1.5 -mock==5.1.0 -multidict==6.0.5 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pytest==8.2.2 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -yarl==1.9.4 -zipp==3.19.2 diff --git a/.riot/requirements/315c2cb.txt b/.riot/requirements/315c2cb.txt deleted file mode 100644 index 8a45f9b13fe..00000000000 --- a/.riot/requirements/315c2cb.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/315c2cb.in -# -async-timeout==5.0.1 -attrs==24.2.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.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.3 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -redis==4.6.0 -sortedcontainers==2.4.0 -tomli==2.1.0 -zipp==3.20.2 diff --git a/.riot/requirements/328b28c.txt b/.riot/requirements/328b28c.txt deleted file mode 100644 index 38eac9651b9..00000000000 --- a/.riot/requirements/328b28c.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/328b28c.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -dnspython==2.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pymongo==4.8.0 -pytest==8.3.3 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 diff --git a/.riot/requirements/3348fe3.txt b/.riot/requirements/3348fe3.txt deleted file mode 100644 index 956b6f44882..00000000000 --- a/.riot/requirements/3348fe3.txt +++ /dev/null @@ -1,46 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/3348fe3.in -# -attrs==23.2.0 -beautifulsoup4==4.12.3 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.0 -exceptiongroup==1.2.2 -hupper==1.12.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.2.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pastedeploy==3.1.0 -plaster==1.1.2 -plaster-pastedeploy==1.0.1 -pluggy==1.5.0 -pserve-test-app @ file:///home/bits/project/tests/contrib/pyramid/pserve_app -pyramid==2.0.2 -pytest==8.3.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -requests==2.32.3 -sortedcontainers==2.4.0 -soupsieve==2.5 -tomli==2.0.1 -translationstring==1.4 -urllib3==2.2.2 -venusian==3.1.0 -waitress==3.0.0 -webob==1.8.7 -webtest==3.0.0 -zipp==3.19.2 -zope-deprecation==5.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 diff --git a/.riot/requirements/3a2a320.txt b/.riot/requirements/3a2a320.txt deleted file mode 100644 index 0b00a03ec2b..00000000000 --- a/.riot/requirements/3a2a320.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/3a2a320.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -gunicorn==23.0.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -importlib-resources==6.4.5 -iniconfig==2.1.0 -jsonschema==4.23.0 -jsonschema-specifications==2023.12.1 -lz4==4.3.3 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pkgutil-resolve-name==1.3.10 -pluggy==1.5.0 -protobuf==5.29.5 -py-cpuinfo==8.0.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 -pytest-cpp==2.6.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -referencing==0.35.1 -rpds-py==0.20.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -uwsgi==2.0.30 -zipp==3.20.2 diff --git a/.riot/requirements/3aa457c.txt b/.riot/requirements/3aa457c.txt deleted file mode 100644 index 0f35c37a47a..00000000000 --- a/.riot/requirements/3aa457c.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/3aa457c.in -# -asgiref==3.8.1 -attrs==25.3.0 -backports-zoneinfo==0.2.1 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==7.1.2 -coverage[toml]==7.6.1 -django==4.2.24 -exceptiongroup==1.3.0 -flask==1.1.4 -gunicorn==23.0.0 -httpretty==1.0.5 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==1.1.0 -jinja2==2.11.3 -markupsafe==1.1.1 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.32.4 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -werkzeug==1.0.1 -xmltodict==0.15.0 -zipp==3.20.2 diff --git a/.riot/requirements/3b65323.txt b/.riot/requirements/3b65323.txt deleted file mode 100644 index 6e7fb0a5c7f..00000000000 --- a/.riot/requirements/3b65323.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/3b65323.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -mysqlclient==2.2.1 -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/3ba7e37.txt b/.riot/requirements/3ba7e37.txt deleted file mode 100644 index 3dbb32d1178..00000000000 --- a/.riot/requirements/3ba7e37.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/3ba7e37.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -glob2==0.7 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mako==1.3.10 -markupsafe==2.1.5 -mock==5.2.0 -more-itertools==8.10.0 -msgpack==1.1.0 -opentracing==2.4.0 -packaging==25.0 -parse==1.20.2 -parse-type==0.6.4 -pluggy==1.5.0 -py==1.11.0 -pytest==7.4.4 -pytest-bdd==6.0.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -zipp==3.20.2 diff --git a/.riot/requirements/3dd53da.txt b/.riot/requirements/3dd53da.txt deleted file mode 100644 index 088ac0ddd7e..00000000000 --- a/.riot/requirements/3dd53da.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.13 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/3dd53da.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -dnspython==2.7.0 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pymongo==4.8.0 -pytest==8.3.3 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/3f2ebdc.txt b/.riot/requirements/3f2ebdc.txt deleted file mode 100644 index a8cdfd63d33..00000000000 --- a/.riot/requirements/3f2ebdc.txt +++ /dev/null @@ -1,40 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/3f2ebdc.in -# -annotated-types==0.7.0 -attrs==25.3.0 -blinker==1.8.2 -certifi==2025.10.5 -charset-normalizer==3.4.3 -click==8.1.8 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -flask==2.3.3 -flask-openapi3==4.0.3 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==2.2.0 -jinja2==3.1.6 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.32.4 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -werkzeug==3.0.6 -zipp==3.20.2 diff --git a/.riot/requirements/3f3ce6e.txt b/.riot/requirements/3f3ce6e.txt deleted file mode 100644 index 15223e399f6..00000000000 --- a/.riot/requirements/3f3ce6e.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/3f3ce6e.in -# -attrs==25.3.0 -azure-core==1.33.0 -azure-eventhub==5.15.0 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 diff --git a/.riot/requirements/3f40530.txt b/.riot/requirements/3f40530.txt deleted file mode 100644 index 125f04e194c..00000000000 --- a/.riot/requirements/3f40530.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/3f40530.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -loguru==0.4.1 -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/40a41fd.txt b/.riot/requirements/40a41fd.txt deleted file mode 100644 index 9f9034b3892..00000000000 --- a/.riot/requirements/40a41fd.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.13 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/40a41fd.in -# -attrs==25.3.0 -coverage[toml]==7.8.2 -dnspython==2.7.0 -hypothesis==6.45.0 -iniconfig==2.1.0 -mock==5.2.0 -mongoengine==0.24.2 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -pygments==2.19.1 -pymongo==4.8.0 -pytest==8.4.0 -pytest-cov==6.1.1 -pytest-mock==3.14.1 -pytest-randomly==3.16.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/40adc31.txt b/.riot/requirements/40adc31.txt deleted file mode 100644 index 21dbd2582a2..00000000000 --- a/.riot/requirements/40adc31.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/40adc31.in -# -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.7.9 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -fastapi==0.94.1 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.113.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pydantic==1.10.22 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.26.1 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 diff --git a/.riot/requirements/44339c7.txt b/.riot/requirements/44339c7.txt deleted file mode 100644 index 2aa39fbf0f5..00000000000 --- a/.riot/requirements/44339c7.txt +++ /dev/null @@ -1,56 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/44339c7.in -# -anyio==4.2.0 -asn1crypto==1.5.1 -attrs==23.1.0 -azure-common==1.1.28 -azure-core==1.29.6 -azure-storage-blob==12.19.0 -boto3==1.34.6 -botocore==1.34.6 -certifi==2020.12.5 -cffi==1.16.0 -chardet==3.0.4 -charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -cryptography==3.4.8 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -idna==2.10 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -isodate==0.6.1 -jmespath==1.0.1 -mock==5.1.0 -opentracing==2.4.0 -oscrypto==1.3.0 -packaging==23.2 -pluggy==1.3.0 -pycparser==2.21 -pycryptodomex==3.19.0 -pyjwt==2.8.0 -pyopenssl==19.1.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-dateutil==2.8.2 -pytz==2020.5 -requests==2.31.0 -responses==0.16.0 -s3transfer==0.10.0 -six==1.16.0 -sniffio==1.3.0 -snowflake-connector-python==2.3.10 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.9.0 -urllib3==1.26.18 -zipp==3.17.0 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 diff --git a/.riot/requirements/4ad5317.txt b/.riot/requirements/4ad5317.txt deleted file mode 100644 index 9d6cecbc8e5..00000000000 --- a/.riot/requirements/4ad5317.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/4ad5317.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -psycopg2-binary==2.8.6 -pytest==8.3.5 -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/4de03a5.txt b/.riot/requirements/4de03a5.txt deleted file mode 100644 index 8fa32aa29f3..00000000000 --- a/.riot/requirements/4de03a5.txt +++ /dev/null @@ -1,79 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/4de03a5.in -# -arrow==1.3.0 -asgiref==3.8.1 -attrs==24.3.0 -autobahn==23.1.2 -automat==24.8.1 -backports-zoneinfo==0.2.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.1 -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 -exceptiongroup==1.2.2 -hyperlink==21.0.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -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==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.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 -tomli==2.2.1 -twisted[tls]==24.11.0 -txaio==23.1.1 -types-python-dateutil==2.9.0.20241206 -typing-extensions==4.12.2 -urllib3==2.2.3 -wcwidth==0.2.13 -zeep==4.3.1 -zipp==3.20.2 -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/4ef6c1c.txt b/.riot/requirements/4ef6c1c.txt deleted file mode 100644 index b17633d8a1a..00000000000 --- a/.riot/requirements/4ef6c1c.txt +++ /dev/null @@ -1,47 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/4ef6c1c.in -# -attrs==25.1.0 -boto3==1.36.19 -botocore==1.36.19 -bytecode==0.16.1 -certifi==2025.1.31 -charset-normalizer==3.4.1 -coverage[toml]==7.6.1 -datadog==0.51.0 -datadog-lambda==6.105.0 -ddtrace==2.20.1 -deprecated==1.2.18 -envier==0.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.0.0 -jmespath==1.0.1 -mock==5.1.0 -opentelemetry-api==1.30.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -protobuf==5.29.3 -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-dateutil==2.9.0.post0 -requests==2.32.3 -s3transfer==0.11.2 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.12.2 -ujson==5.10.0 -urllib3==1.26.20 -wrapt==1.17.2 -xmltodict==0.14.2 -zipp==3.20.2 diff --git a/.riot/requirements/4f441db.txt b/.riot/requirements/4f441db.txt deleted file mode 100644 index 8bcbc844c30..00000000000 --- a/.riot/requirements/4f441db.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/4f441db.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -dogpile-cache==0.6.8 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/4f4caf8.txt b/.riot/requirements/4f4caf8.txt deleted file mode 100644 index 7441d0631a9..00000000000 --- a/.riot/requirements/4f4caf8.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/4f4caf8.in -# -attrs==25.3.0 -babel==2.17.0 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -execnet==2.1.1 -gevent==24.2.1 -greenlet==3.1.1 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -markupsafe==2.1.5 -mock==5.2.0 -mysql-connector-python==9.0.0 -mysqlclient==2.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -psycopg2-binary==2.9.10 -pymysql==1.1.2 -pytest==8.3.5 -pytest-asyncio==0.24.0 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-xdist==3.6.1 -pytz==2025.2 -requests==2.32.4 -sortedcontainers==2.4.0 -sqlalchemy==2.0.43 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -werkzeug==3.0.6 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/4f9be04.txt b/.riot/requirements/4f9be04.txt deleted file mode 100644 index 1bc07ce87aa..00000000000 --- a/.riot/requirements/4f9be04.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/4f9be04.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -elasticsearch2==2.5.1 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==1.26.18 -zipp==3.17.0 diff --git a/.riot/requirements/50b70d9.txt b/.riot/requirements/50b70d9.txt deleted file mode 100644 index 8bedee18d6e..00000000000 --- a/.riot/requirements/50b70d9.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/50b70d9.in -# -asgiref==3.8.1 -attrs==25.3.0 -coverage[toml]==7.6.1 -django==3.2.25 -django-configurations==2.5.1 -django-hosts==4.0 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -pytz==2025.2 -six==1.17.0 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/55b2430.txt b/.riot/requirements/55b2430.txt deleted file mode 100644 index 9e5c9096838..00000000000 --- a/.riot/requirements/55b2430.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/55b2430.in -# -attrs==25.3.0 -cattrs==22.2.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -execnet==2.1.1 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -molten==1.0.2 -mypy-extensions==1.1.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pytest-xdist==3.6.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==3.10.0.2 -typing-inspect==0.6.0 -zipp==3.20.2 diff --git a/.riot/requirements/5b0fa38.txt b/.riot/requirements/5b0fa38.txt deleted file mode 100644 index 82a78c0afdc..00000000000 --- a/.riot/requirements/5b0fa38.txt +++ /dev/null @@ -1,39 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/5b0fa38.in -# -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.1.8 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -fastapi==0.94.1 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jinja2==3.1.6 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pydantic==1.10.24 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -python-multipart==0.0.20 -requests==2.32.4 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.26.1 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -uvicorn==0.33.0 diff --git a/.riot/requirements/5b339ac.txt b/.riot/requirements/5b339ac.txt deleted file mode 100644 index 9c52400986b..00000000000 --- a/.riot/requirements/5b339ac.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/5b339ac.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.3.4 -elasticsearch7==7.17.9 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==1.26.18 -zipp==3.17.0 diff --git a/.riot/requirements/5b55f2d.txt b/.riot/requirements/5b55f2d.txt deleted file mode 100644 index 4d502d83648..00000000000 --- a/.riot/requirements/5b55f2d.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/5b55f2d.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.3.4 -elastic-transport==8.11.0 -elasticsearch8==8.11.1 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.1.0 -zipp==3.17.0 diff --git a/.riot/requirements/5e79012.txt b/.riot/requirements/5e79012.txt deleted file mode 100644 index 22de4e112ba..00000000000 --- a/.riot/requirements/5e79012.txt +++ /dev/null @@ -1,44 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/5e79012.in -# -aiohappyeyeballs==2.4.4 -aiohttp==3.10.11 -aiosignal==1.3.1 -async-timeout==5.0.1 -attrs==25.3.0 -certifi==2025.1.31 -charset-normalizer==3.4.1 -coverage[toml]==7.6.1 -elastic-transport==8.17.1 -elasticsearch[async]==9.0.0 -elasticsearch7[async]==7.17.12 -events==0.5 -exceptiongroup==1.2.2 -frozenlist==1.5.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -multidict==6.1.0 -opensearch-py[async]==2.8.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -propcache==0.2.0 -pytest==8.3.5 -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.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -yarl==1.15.2 -zipp==3.20.2 diff --git a/.riot/requirements/5ed7bed.txt b/.riot/requirements/5ed7bed.txt deleted file mode 100644 index 8d62589d83b..00000000000 --- a/.riot/requirements/5ed7bed.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/5ed7bed.in -# -attrs==23.1.0 -confluent-kafka==1.9.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-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/610b7cb.txt b/.riot/requirements/610b7cb.txt deleted file mode 100644 index 59a69bc25a6..00000000000 --- a/.riot/requirements/610b7cb.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/610b7cb.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.3.4 -elastic-transport==8.11.0 -elasticsearch==8.11.1 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.1.0 -zipp==3.17.0 diff --git a/.riot/requirements/65abb19.txt b/.riot/requirements/65abb19.txt deleted file mode 100644 index 3144d75498d..00000000000 --- a/.riot/requirements/65abb19.txt +++ /dev/null @@ -1,41 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/65abb19.in -# -annotated-types==0.7.0 -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.1.8 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -fastapi==0.114.2 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jinja2==3.1.6 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -python-multipart==0.0.20 -requests==2.32.4 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.38.6 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -uvicorn==0.33.0 diff --git a/.riot/requirements/66e0a12.txt b/.riot/requirements/66e0a12.txt deleted file mode 100644 index bda03628b26..00000000000 --- a/.riot/requirements/66e0a12.txt +++ /dev/null @@ -1,51 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/66e0a12.in -# -annotated-types==0.7.0 -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.10.5 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -distro==1.9.0 -exceptiongroup==1.3.0 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.28.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -jiter==0.9.1 -mock==5.2.0 -multidict==6.1.0 -openai==1.109.1 -opentracing==2.4.0 -packaging==25.0 -pillow==10.4.0 -pluggy==1.5.0 -propcache==0.2.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pyyaml==6.0.3 -regex==2024.11.6 -requests==2.32.4 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tiktoken==0.7.0 -tomli==2.2.1 -tqdm==4.67.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -vcrpy==6.0.2 -wrapt==1.17.3 -yarl==1.15.2 -zipp==3.20.2 diff --git a/.riot/requirements/6724bb2.txt b/.riot/requirements/6724bb2.txt deleted file mode 100644 index 8962a3db440..00000000000 --- a/.riot/requirements/6724bb2.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/6724bb2.in -# -asgiref==3.8.1 -attrs==25.3.0 -backports-zoneinfo==0.2.1 -certifi==2025.6.15 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -django==4.2.23 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 diff --git a/.riot/requirements/685a359.txt b/.riot/requirements/685a359.txt deleted file mode 100644 index 72c9d9c6554..00000000000 --- a/.riot/requirements/685a359.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/685a359.in -# -aiofiles==23.2.1 -anyio==4.2.0 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.16.3 -httptools==0.6.1 -httpx==0.23.3 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==5.2.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -requests==2.31.0 -rfc3986[idna2008]==1.5.0 -sanic==21.12.2 -sanic-routing==0.7.2 -sanic-testing==0.8.3 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.9.0 -ujson==5.9.0 -urllib3==2.1.0 -uvloop==0.19.0 -websockets==10.4 -zipp==3.17.0 diff --git a/.riot/requirements/696c125.txt b/.riot/requirements/696c125.txt deleted file mode 100644 index 6dfb1e7605d..00000000000 --- a/.riot/requirements/696c125.txt +++ /dev/null @@ -1,74 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/696c125.in -# -annotated-types==0.7.0 -attrs==25.3.0 -aws-sam-translator==1.97.0 -aws-xray-sdk==2.14.0 -boto==2.49.0 -boto3==1.37.38 -botocore==1.37.38 -certifi==2025.4.26 -cffi==1.17.1 -cfn-lint==0.53.1 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -cryptography==45.0.3 -docker==7.1.0 -ecdsa==0.14.1 -exceptiongroup==1.3.0 -execnet==2.1.1 -hypothesis==6.45.0 -idna==2.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -jinja2==2.10.3 -jmespath==1.0.1 -jsondiff==2.2.1 -jsonpatch==1.33 -jsonpointer==3.0.0 -jsonschema==3.2.0 -junit-xml==1.9 -markupsafe==1.1.1 -mock==5.2.0 -more-itertools==10.5.0 -moto==1.3.16 -networkx==2.8.8 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pyasn1==0.4.8 -pycparser==2.22 -pydantic==2.10.6 -pydantic-core==2.27.2 -pynamodb==5.5.1 -pyrsistent==0.20.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pytest-xdist==3.6.1 -python-dateutil==2.9.0.post0 -python-jose[cryptography]==3.4.0 -pytz==2025.2 -pyyaml==6.0.2 -requests==2.32.3 -responses==0.25.7 -rsa==4.9.1 -s3transfer==0.11.5 -six==1.17.0 -sortedcontainers==2.4.0 -sshpubkeys==3.3.1 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -werkzeug==2.1.2 -wrapt==1.17.2 -xmltodict==0.14.2 -zipp==3.20.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/6a87378.txt b/.riot/requirements/6a87378.txt deleted file mode 100644 index 8e0eabae4ad..00000000000 --- a/.riot/requirements/6a87378.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/6a87378.in -# -attrs==25.3.0 -blinker==1.8.2 -certifi==2025.7.9 -charset-normalizer==3.4.2 -click==8.1.8 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -flask==3.0.3 -hypothesis==6.113.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==2.2.0 -jinja2==3.1.6 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -werkzeug==3.0.6 -zipp==3.20.2 diff --git a/.riot/requirements/6bec1ec.txt b/.riot/requirements/6bec1ec.txt deleted file mode 100644 index 3e128a77c79..00000000000 --- a/.riot/requirements/6bec1ec.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/6bec1ec.in -# -attrs==24.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.1.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.0.0 -mock==5.1.0 -msgpack==1.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 -zope-event==5.0 -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/6c7321b.txt b/.riot/requirements/6c7321b.txt deleted file mode 100644 index 95dbc79d252..00000000000 --- a/.riot/requirements/6c7321b.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/6c7321b.in -# -attrs==25.3.0 -cattrs==22.2.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -execnet==2.1.1 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -molten==1.0.2 -mypy-extensions==1.1.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pytest-xdist==3.6.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==3.10.0.2 -typing-inspect==0.6.0 -zipp==3.20.2 diff --git a/.riot/requirements/6c872ab.txt b/.riot/requirements/6c872ab.txt deleted file mode 100644 index e5434a6da08..00000000000 --- a/.riot/requirements/6c872ab.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/6c872ab.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.3.4 -elastic-transport==8.11.0 -elasticsearch8==8.0.1 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==2.1.0 -zipp==3.17.0 diff --git a/.riot/requirements/6d67b0b.txt b/.riot/requirements/6d67b0b.txt deleted file mode 100644 index d701321ec5c..00000000000 --- a/.riot/requirements/6d67b0b.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/6d67b0b.in -# -asn1crypto==1.5.1 -attrs==23.1.0 -certifi==2023.11.17 -cffi==1.16.0 -charset-normalizer==3.3.2 -coverage[toml]==7.3.4 -cryptography==38.0.4 -exceptiongroup==1.2.0 -filelock==3.13.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -platformdirs==3.11.0 -pluggy==1.3.0 -pycparser==2.21 -pyjwt==2.8.0 -pyopenssl==23.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -pytz==2023.3.post1 -requests==2.31.0 -responses==0.16.0 -six==1.16.0 -snowflake-connector-python==3.6.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -tomlkit==0.12.3 -typing-extensions==4.9.0 -urllib3==1.26.18 -zipp==3.17.0 diff --git a/.riot/requirements/6da0824.txt b/.riot/requirements/6da0824.txt deleted file mode 100644 index 72d3c32244c..00000000000 --- a/.riot/requirements/6da0824.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/6da0824.in -# -attrs==25.3.0 -azure-functions==1.10.1 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 diff --git a/.riot/requirements/6e26af7.txt b/.riot/requirements/6e26af7.txt deleted file mode 100644 index 96aa8bbb8ad..00000000000 --- a/.riot/requirements/6e26af7.txt +++ /dev/null @@ -1,51 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/6e26af7.in -# -annotated-types==0.7.0 -anyio==4.5.2 -attrs==25.3.0 -boto3==1.37.38 -botocore==1.37.38 -certifi==2025.8.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -fastapi==0.116.1 -freezegun==1.5.5 -h11==0.16.0 -httpcore==1.0.9 -httpretty==1.1.4 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -jmespath==1.0.1 -mock==5.2.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -s3transfer==0.11.5 -six==1.17.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.44.0 -structlog==25.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -wheel==0.45.1 -zipp==3.20.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/70dec77.txt b/.riot/requirements/70dec77.txt deleted file mode 100644 index 16751370567..00000000000 --- a/.riot/requirements/70dec77.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/70dec77.in -# -asgiref==3.8.1 -attrs==25.3.0 -backports-zoneinfo==0.2.1 -coverage[toml]==7.6.1 -django==4.2.20 -django-configurations==2.5.1 -django-hosts==5.2 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -six==1.17.0 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/7341bd9.txt b/.riot/requirements/7341bd9.txt deleted file mode 100644 index 95fd932c141..00000000000 --- a/.riot/requirements/7341bd9.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/7341bd9.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pymemcache==3.4.4 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/73d37c5.txt b/.riot/requirements/73d37c5.txt deleted file mode 100644 index af1be13fd5b..00000000000 --- a/.riot/requirements/73d37c5.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/73d37c5.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.0.0 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -tornado==6.4.2 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/75dda93.txt b/.riot/requirements/75dda93.txt deleted file mode 100644 index 8d2df273f73..00000000000 --- a/.riot/requirements/75dda93.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/75dda93.in -# -attrs==23.2.0 -blinker==1.7.0 -cachelib==0.9.0 -click==7.1.2 -coverage[toml]==7.4.2 -exceptiongroup==1.2.0 -flask==1.1.4 -flask-caching==2.1.0 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -itsdangerous==1.1.0 -jinja2==2.11.3 -markupsafe==1.1.1 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-memcached==1.62 -redis==2.10.6 -sortedcontainers==2.4.0 -tomli==2.0.1 -werkzeug==1.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/7613d04.txt b/.riot/requirements/7613d04.txt deleted file mode 100644 index af4b5537dd7..00000000000 --- a/.riot/requirements/7613d04.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/7613d04.in -# -attrs==25.3.0 -certifi==2025.1.31 -charset-normalizer==3.4.1 -coverage[toml]==7.6.1 -events==0.5 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opensearch-py[requests]==2.8.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -pytest==8.3.5 -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.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -urllib3==1.26.20 -zipp==3.20.2 diff --git a/.riot/requirements/777f0da.txt b/.riot/requirements/777f0da.txt deleted file mode 100644 index ad98b1b9997..00000000000 --- a/.riot/requirements/777f0da.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/777f0da.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -gunicorn==23.0.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -importlib-resources==6.4.5 -iniconfig==2.1.0 -jsonschema==4.23.0 -jsonschema-specifications==2023.12.1 -lz4==4.3.3 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pkgutil-resolve-name==1.3.10 -pluggy==1.5.0 -protobuf==3.19.0 -py-cpuinfo==8.0.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 -pytest-cpp==2.6.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -referencing==0.35.1 -rpds-py==0.20.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -uwsgi==2.0.30 -zipp==3.20.2 diff --git a/.riot/requirements/77db507.txt b/.riot/requirements/77db507.txt deleted file mode 100644 index bc4ac6664eb..00000000000 --- a/.riot/requirements/77db507.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/77db507.in -# -astunparse==1.6.3 -attrs==25.3.0 -blinker==1.8.2 -certifi==2025.4.26 -charset-normalizer==3.4.2 -click==8.1.8 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -flask==3.0.3 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==2.2.0 -jinja2==3.1.6 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -requests==2.32.3 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -urllib3==2.2.3 -virtualenv-clone==0.5.7 -werkzeug==3.0.6 -wheel==0.45.1 -zipp==3.20.2 diff --git a/.riot/requirements/79deb5b.txt b/.riot/requirements/79deb5b.txt deleted file mode 100644 index 22e9b499ea7..00000000000 --- a/.riot/requirements/79deb5b.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/79deb5b.in -# -aiobotocore==1.4.2 -aiohappyeyeballs==2.4.0 -aiohttp==3.10.5 -aioitertools==0.11.0 -aiosignal==1.3.1 -async-generator==1.10 -async-timeout==4.0.3 -attrs==24.2.0 -botocore==1.20.106 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -frozenlist==1.4.1 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==8.4.0 -iniconfig==2.0.0 -jmespath==0.10.0 -mock==5.1.0 -multidict==6.0.5 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pytest==8.3.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.12.2 -urllib3==1.26.19 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.20.0 diff --git a/.riot/requirements/7b02bf5.txt b/.riot/requirements/7b02bf5.txt deleted file mode 100644 index 399b31b7be8..00000000000 --- a/.riot/requirements/7b02bf5.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/7b02bf5.in -# -attrs==25.3.0 -azure-core==1.33.0 -azure-servicebus==7.14.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -isodate==0.7.2 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 diff --git a/.riot/requirements/7fc5d79.txt b/.riot/requirements/7fc5d79.txt deleted file mode 100644 index 3b3c5a35f65..00000000000 --- a/.riot/requirements/7fc5d79.txt +++ /dev/null @@ -1,49 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/7fc5d79.in -# -attrs==25.3.0 -babel==2.17.0 -blinker==1.8.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.1.8 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -flask==3.0.3 -flask-babel==4.0.0 -gevent==24.2.1 -greenlet==3.1.1 -gunicorn==23.0.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==2.2.0 -jinja2==3.1.6 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -psycopg2-binary==2.9.10 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pytz==2025.2 -requests==2.32.4 -sortedcontainers==2.4.0 -sqlalchemy==2.0.43 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -werkzeug==3.0.6 -zipp==3.20.2 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/7ffd29a.txt b/.riot/requirements/7ffd29a.txt deleted file mode 100644 index 447a518853d..00000000000 --- a/.riot/requirements/7ffd29a.txt +++ /dev/null @@ -1,20 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/7ffd29a.in -# -attrs==25.1.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.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==5.0.0 -pytest-mock==3.14.0 -sortedcontainers==2.4.0 -tomli==2.2.1 diff --git a/.riot/requirements/82fb241.txt b/.riot/requirements/82fb241.txt deleted file mode 100644 index 269b0fb3b8b..00000000000 --- a/.riot/requirements/82fb241.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/82fb241.in -# -aiohttp==3.7.4.post0 -async-timeout==3.0.1 -attrs==25.3.0 -chardet==4.0.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -multidict==6.1.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -propcache==0.2.0 -pytest==8.3.5 -pytest-aiohttp==0.3.0 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -yarl==1.15.2 -zipp==3.20.2 diff --git a/.riot/requirements/85e923f.txt b/.riot/requirements/85e923f.txt deleted file mode 100644 index dc94da04908..00000000000 --- a/.riot/requirements/85e923f.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/85e923f.in -# -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.1.1 -gunicorn==20.0.4 -hypothesis==6.45.0 -idna==3.10 -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 -requests==2.32.3 -sortedcontainers==2.4.0 -tomli==2.2.1 -urllib3==2.2.3 -zipp==3.20.2 -zope-event==5.0 -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/8733595.txt b/.riot/requirements/8733595.txt deleted file mode 100644 index e921c950132..00000000000 --- a/.riot/requirements/8733595.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/8733595.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -gevent==24.2.1 -greenlet==3.1.1 -httpretty==1.1.4 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -py-cpuinfo==9.0.0 -pyfakefs==5.10.0 -pytest==8.3.5 -pytest-asyncio==0.23.8 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-json-logger==2.0.7 -sortedcontainers==2.4.0 -tomli==2.3.0 -typing-extensions==4.13.2 -wrapt==2.0.0 -zipp==3.20.2 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/89a14cf.txt b/.riot/requirements/89a14cf.txt deleted file mode 100644 index 70772bfb1ad..00000000000 --- a/.riot/requirements/89a14cf.txt +++ /dev/null @@ -1,37 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/89a14cf.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -gunicorn==23.0.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -importlib-resources==6.4.5 -iniconfig==2.1.0 -jsonschema==4.23.0 -jsonschema-specifications==2023.12.1 -lz4==4.3.3 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pkgutil-resolve-name==1.3.10 -pluggy==1.5.0 -py-cpuinfo==8.0.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 -pytest-cpp==2.6.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -referencing==0.35.1 -rpds-py==0.20.1 -sortedcontainers==2.4.0 -tomli==2.3.0 -typing-extensions==4.13.2 -uwsgi==2.0.29 -zipp==3.20.2 diff --git a/.riot/requirements/8a17cb2.txt b/.riot/requirements/8a17cb2.txt deleted file mode 100644 index c692572e88b..00000000000 --- a/.riot/requirements/8a17cb2.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/8a17cb2.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mariadb==1.1.13 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/8c110bf.txt b/.riot/requirements/8c110bf.txt deleted file mode 100644 index 7ad7d4b82f0..00000000000 --- a/.riot/requirements/8c110bf.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/8c110bf.in -# -attrs==25.3.0 -beautifulsoup4==4.14.2 -bottle==0.12.25 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -soupsieve==2.7 -tomli==2.3.0 -typing-extensions==4.13.2 -waitress==3.0.0 -webob==1.8.9 -webtest==3.0.1 -zipp==3.20.2 diff --git a/.riot/requirements/9029977.txt b/.riot/requirements/9029977.txt deleted file mode 100644 index e320a67d9a0..00000000000 --- a/.riot/requirements/9029977.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/9029977.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -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/921b9fb.txt b/.riot/requirements/921b9fb.txt deleted file mode 100644 index 8ec138a215a..00000000000 --- a/.riot/requirements/921b9fb.txt +++ /dev/null @@ -1,51 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/921b9fb.in -# -attrs==25.3.0 -certifi==2025.6.15 -charset-normalizer==2.1.1 -click==8.1.8 -coverage[toml]==7.6.1 -deprecated==1.2.18 -exceptiongroup==1.3.0 -flask==2.1.3 -gevent==24.2.1 -greenlet==3.1.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==2.2.0 -jinja2==3.1.6 -markupsafe==2.0.1 -mock==5.2.0 -opentelemetry-api==1.15.0 -opentelemetry-instrumentation==0.45b0 -opentelemetry-instrumentation-flask==0.45b0 -opentelemetry-instrumentation-wsgi==0.45b0 -opentelemetry-semantic-conventions==0.45b0 -opentelemetry-util-http==0.45b0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.28.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -werkzeug==2.1.2 -wrapt==1.17.2 -zipp==3.20.2 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/95f5020.txt b/.riot/requirements/95f5020.txt deleted file mode 100644 index ba732f47c55..00000000000 --- a/.riot/requirements/95f5020.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/95f5020.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -msgpack==1.1.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/9777f3d.txt b/.riot/requirements/9777f3d.txt deleted file mode 100644 index 4dddf9cd5d5..00000000000 --- a/.riot/requirements/9777f3d.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/9777f3d.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.4.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pymysql==1.1.1 -pytest==8.3.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.20.1 diff --git a/.riot/requirements/97f1328.txt b/.riot/requirements/97f1328.txt deleted file mode 100644 index 68875c403e1..00000000000 --- a/.riot/requirements/97f1328.txt +++ /dev/null @@ -1,88 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/97f1328.in -# -aiohappyeyeballs==2.4.4 -aiohttp==3.10.11 -aiosignal==1.3.1 -annotated-types==0.7.0 -anyio==4.5.2 -appdirs==1.4.4 -async-timeout==4.0.3 -attrs==25.3.0 -certifi==2025.7.14 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -dataclasses-json==0.6.7 -datasets==3.1.0 -dill==0.3.8 -distro==1.9.0 -exceptiongroup==1.3.0 -filelock==3.16.1 -frozenlist==1.5.0 -fsspec[http]==2024.9.0 -greenlet==3.1.1 -h11==0.16.0 -hf-xet==1.1.5 -httpcore==1.0.9 -httpx==0.28.1 -huggingface-hub==0.33.4 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -jiter==0.9.1 -jsonpatch==1.33 -jsonpointer==3.0.0 -langchain==0.2.17 -langchain-community==0.2.19 -langchain-core==0.2.43 -langchain-openai==0.1.25 -langchain-text-splitters==0.2.4 -langsmith==0.1.147 -marshmallow==3.22.0 -mock==5.2.0 -multidict==6.1.0 -multiprocess==0.70.16 -mypy-extensions==1.1.0 -nest-asyncio==1.6.0 -numpy==1.24.4 -openai==1.97.1 -opentracing==2.4.0 -orjson==3.10.15 -packaging==24.2 -pandas==2.0.3 -pluggy==1.5.0 -propcache==0.2.0 -pyarrow==17.0.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pysbd==0.3.4 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -python-dateutil==2.9.0.post0 -pytz==2025.2 -pyyaml==6.0.2 -ragas==0.1.21 -regex==2024.11.6 -requests==2.32.4 -requests-toolbelt==1.0.0 -six==1.17.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -sqlalchemy==2.0.41 -tenacity==8.5.0 -tiktoken==0.7.0 -tomli==2.2.1 -tqdm==4.67.1 -typing-extensions==4.13.2 -typing-inspect==0.9.0 -tzdata==2025.2 -urllib3==1.26.20 -vcrpy==6.0.2 -wrapt==1.17.2 -xxhash==3.5.0 -yarl==1.15.2 diff --git a/.riot/requirements/9a319c8.txt b/.riot/requirements/9a319c8.txt deleted file mode 100644 index b36e8f8dda6..00000000000 --- a/.riot/requirements/9a319c8.txt +++ /dev/null @@ -1,37 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/9a319c8.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -gevent==24.2.1 -greenlet==3.1.1 -gunicorn[gevent]==23.0.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -lz4==4.3.3 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -py-cpuinfo==8.0.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -uwsgi==2.0.30 -zipp==3.20.2 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/9a6a8b9.txt b/.riot/requirements/9a6a8b9.txt deleted file mode 100644 index fc4a1144f87..00000000000 --- a/.riot/requirements/9a6a8b9.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/9a6a8b9.in -# -algoliasearch==2.5.0 -attrs==25.3.0 -certifi==2025.4.26 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.32.3 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -zipp==3.20.2 diff --git a/.riot/requirements/9b8251b.txt b/.riot/requirements/9b8251b.txt deleted file mode 100644 index c6c4004b105..00000000000 --- a/.riot/requirements/9b8251b.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/9b8251b.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -yaaredis==3.0.0 -zipp==3.17.0 diff --git a/.riot/requirements/9d50a6f.txt b/.riot/requirements/9d50a6f.txt deleted file mode 100644 index e09d60c42d8..00000000000 --- a/.riot/requirements/9d50a6f.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/9d50a6f.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -glob2==0.7 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mako==1.3.10 -markupsafe==2.1.5 -mock==5.2.0 -more-itertools==8.10.0 -msgpack==1.1.0 -opentracing==2.4.0 -packaging==25.0 -parse==1.20.2 -parse-type==0.6.4 -pluggy==1.5.0 -py==1.11.0 -pytest==7.4.4 -pytest-bdd==4.1.0 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -zipp==3.20.2 diff --git a/.riot/requirements/9d72125.txt b/.riot/requirements/9d72125.txt deleted file mode 100644 index 7b0be1b80c9..00000000000 --- a/.riot/requirements/9d72125.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/9d72125.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -mysqlclient==2.2.1 -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/9e76fdf.txt b/.riot/requirements/9e76fdf.txt deleted file mode 100644 index c4d483c9361..00000000000 --- a/.riot/requirements/9e76fdf.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/9e76fdf.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -django==2.2.28 -django-configurations==2.3.2 -djangorestframework==3.12.4 -exceptiongroup==1.3.0 -execnet==2.1.1 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pytest-xdist==3.6.1 -pytz==2025.2 -six==1.17.0 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/9eedbc0.txt b/.riot/requirements/9eedbc0.txt deleted file mode 100644 index 7d4ef3d6baf..00000000000 --- a/.riot/requirements/9eedbc0.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/9eedbc0.in -# -attrs==23.2.0 -autocommand==2.2.2 -backports-tarfile==1.2.0 -cheroot==10.0.1 -cherrypy==18.10.0 -coverage[toml]==7.6.0 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.2.0 -importlib-resources==6.4.0 -inflect==7.3.1 -iniconfig==2.0.0 -jaraco-collections==5.0.1 -jaraco-context==5.3.0 -jaraco-functools==4.0.1 -jaraco-text==3.14.0 -mock==5.1.0 -more-itertools==8.10.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -portend==3.2.0 -pytest==8.3.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tempora==5.6.0 -tomli==2.0.1 -typeguard==4.3.0 -typing-extensions==4.12.2 -zc-lockfile==3.0.post1 -zipp==3.19.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 diff --git a/.riot/requirements/a0b94b1.txt b/.riot/requirements/a0b94b1.txt deleted file mode 100644 index 71d76a09e22..00000000000 --- a/.riot/requirements/a0b94b1.txt +++ /dev/null @@ -1,23 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/a0b94b1.in -# -attrs==25.3.0 -coverage[toml]==7.8.2 -dnspython==2.7.0 -hypothesis==6.45.0 -iniconfig==2.1.0 -mock==5.2.0 -mongoengine==0.24.2 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.6.0 -pygments==2.19.1 -pymongo==4.8.0 -pytest==8.4.0 -pytest-cov==6.1.1 -pytest-mock==3.14.1 -pytest-randomly==3.16.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/a25912e.txt b/.riot/requirements/a25912e.txt deleted file mode 100644 index e08d10b7a83..00000000000 --- a/.riot/requirements/a25912e.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/a25912e.in -# -attrs==25.3.0 -certifi==2025.1.31 -charset-normalizer==3.4.1 -coverage[toml]==7.6.1 -ddtrace-api==0.0.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -requests==2.32.3 -sortedcontainers==2.4.0 -tomli==2.2.1 -urllib3==2.2.3 diff --git a/.riot/requirements/a3adb9c.txt b/.riot/requirements/a3adb9c.txt deleted file mode 100644 index 39528f00e9d..00000000000 --- a/.riot/requirements/a3adb9c.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/a3adb9c.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -msgpack==1.1.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/a582736.txt b/.riot/requirements/a582736.txt deleted file mode 100644 index 4f6a4e7e1a2..00000000000 --- a/.riot/requirements/a582736.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/a582736.in -# -aiopg==1.4.0 -async-timeout==4.0.3 -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -psycopg2-binary==2.9.10 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.41 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/a6f9342.txt b/.riot/requirements/a6f9342.txt deleted file mode 100644 index bd9fa7ad268..00000000000 --- a/.riot/requirements/a6f9342.txt +++ /dev/null @@ -1,51 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/a6f9342.in -# -attrs==25.3.0 -certifi==2025.6.15 -charset-normalizer==2.1.1 -click==8.1.8 -coverage[toml]==7.6.1 -deprecated==1.2.18 -exceptiongroup==1.3.0 -flask==2.1.3 -gevent==24.2.1 -greenlet==3.1.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==2.2.0 -jinja2==3.1.6 -markupsafe==2.0.1 -mock==5.2.0 -opentelemetry-api==1.33.1 -opentelemetry-instrumentation==0.54b1 -opentelemetry-instrumentation-flask==0.54b1 -opentelemetry-instrumentation-wsgi==0.54b1 -opentelemetry-semantic-conventions==0.54b1 -opentelemetry-util-http==0.54b1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.28.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -werkzeug==2.1.2 -wrapt==1.17.2 -zipp==3.20.2 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/aa2ebfa.txt b/.riot/requirements/aa2ebfa.txt deleted file mode 100644 index 8cefc17f634..00000000000 --- a/.riot/requirements/aa2ebfa.txt +++ /dev/null @@ -1,48 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/aa2ebfa.in -# -attrs==25.3.0 -babel==2.17.0 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.1.8 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -flask==1.1.2 -flask-babel==2.0.0 -gevent==24.2.1 -greenlet==3.1.1 -gunicorn==23.0.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==2.0.1 -jinja2==2.11.3 -markupsafe==1.1.1 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -psycopg2-binary==2.9.10 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pytz==2025.2 -requests==2.32.4 -sortedcontainers==2.4.0 -sqlalchemy==2.0.43 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -werkzeug==2.0.3 -zipp==3.20.2 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/abc0b46.txt b/.riot/requirements/abc0b46.txt deleted file mode 100644 index 64f004d6b5b..00000000000 --- a/.riot/requirements/abc0b46.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/abc0b46.in -# -aiomysql==0.2.0 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pymysql==1.1.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/ac01b32.txt b/.riot/requirements/ac01b32.txt deleted file mode 100644 index 8668be156c8..00000000000 --- a/.riot/requirements/ac01b32.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/ac01b32.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -django==2.2.28 -django-configurations==2.3.2 -djangorestframework==3.13.1 -exceptiongroup==1.3.0 -execnet==2.1.1 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pytest-xdist==3.6.1 -pytz==2025.2 -six==1.17.0 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/ac28820.txt b/.riot/requirements/ac28820.txt deleted file mode 100644 index 22f151f0679..00000000000 --- a/.riot/requirements/ac28820.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/ac28820.in -# -aniso8601==9.0.1 -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -graphene==3.0 -graphql-core==3.1.7 -graphql-relay==3.1.5 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/ad1bcb5.txt b/.riot/requirements/ad1bcb5.txt deleted file mode 100644 index 701deb13fa4..00000000000 --- a/.riot/requirements/ad1bcb5.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/ad1bcb5.in -# -async-timeout==4.0.3 -attrs==23.1.0 -click==7.1.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -redis==5.0.1 -rq==1.15.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/ad40916.txt b/.riot/requirements/ad40916.txt deleted file mode 100644 index 853f497ee9e..00000000000 --- a/.riot/requirements/ad40916.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/ad40916.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -dnspython==2.6.1 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pymongo==4.8.0 -pytest==8.3.3 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/b089663.txt b/.riot/requirements/b089663.txt deleted file mode 100644 index 956c6d73e92..00000000000 --- a/.riot/requirements/b089663.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/b089663.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -dnspython==2.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pymongo==4.8.0 -pytest==8.3.3 -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.20.2 diff --git a/.riot/requirements/b344fed.txt b/.riot/requirements/b344fed.txt deleted file mode 100644 index 73e61eb69f9..00000000000 --- a/.riot/requirements/b344fed.txt +++ /dev/null @@ -1,22 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/b344fed.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -dnspython==2.6.1 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pymongo==4.8.0 -pytest==8.3.3 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 diff --git a/.riot/requirements/b39e5f7.txt b/.riot/requirements/b39e5f7.txt deleted file mode 100644 index e0845dfc719..00000000000 --- a/.riot/requirements/b39e5f7.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/b39e5f7.in -# -attrs==23.2.0 -blinker==1.7.0 -click==7.1.2 -coverage[toml]==7.4.2 -exceptiongroup==1.2.0 -flask==1.1.4 -flask-caching==1.10.1 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -itsdangerous==1.1.0 -jinja2==2.11.3 -markupsafe==1.1.1 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.4.0 -pytest==8.0.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -python-memcached==1.62 -redis==2.10.6 -sortedcontainers==2.4.0 -tomli==2.0.1 -werkzeug==1.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/b436a4c.txt b/.riot/requirements/b436a4c.txt deleted file mode 100644 index dddc661ed72..00000000000 --- a/.riot/requirements/b436a4c.txt +++ /dev/null @@ -1,46 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/b436a4c.in -# -attrs==23.2.0 -beautifulsoup4==4.12.3 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.0 -exceptiongroup==1.2.2 -hupper==1.12.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.2.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pastedeploy==3.1.0 -plaster==1.1.2 -plaster-pastedeploy==1.0.1 -pluggy==1.5.0 -pserve-test-app @ file:///home/bits/project/tests/contrib/pyramid/pserve_app -pyramid==1.10.8 -pytest==8.3.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -requests==2.32.3 -sortedcontainers==2.4.0 -soupsieve==2.5 -tomli==2.0.1 -translationstring==1.4 -urllib3==2.2.2 -venusian==3.1.0 -waitress==3.0.0 -webob==1.8.7 -webtest==3.0.0 -zipp==3.19.2 -zope-deprecation==5.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 diff --git a/.riot/requirements/b68c552.txt b/.riot/requirements/b68c552.txt deleted file mode 100644 index 723fa90b9bc..00000000000 --- a/.riot/requirements/b68c552.txt +++ /dev/null @@ -1,51 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/b68c552.in -# -annotated-types==0.7.0 -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.7.14 -charset-normalizer==3.4.2 -coverage[toml]==7.6.1 -distro==1.9.0 -exceptiongroup==1.3.0 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.28.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -jiter==0.9.1 -mock==5.2.0 -multidict==6.1.0 -openai==1.66.0 -opentracing==2.4.0 -packaging==25.0 -pillow==10.4.0 -pluggy==1.5.0 -propcache==0.2.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pyyaml==6.0.2 -regex==2024.11.6 -requests==2.32.4 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tiktoken==0.7.0 -tomli==2.2.1 -tqdm==4.67.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -vcrpy==6.0.2 -wrapt==1.17.2 -yarl==1.15.2 -zipp==3.20.2 diff --git a/.riot/requirements/b6e9905.txt b/.riot/requirements/b6e9905.txt deleted file mode 100644 index c17865f1eae..00000000000 --- a/.riot/requirements/b6e9905.txt +++ /dev/null @@ -1,79 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/b6e9905.in -# -arrow==1.3.0 -asgiref==3.8.1 -attrs==24.3.0 -autobahn==23.1.2 -automat==24.8.1 -backports-zoneinfo==0.2.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.1 -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 -exceptiongroup==1.2.2 -hyperlink==21.0.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -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==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.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 -tomli==2.2.1 -twisted[tls]==24.11.0 -txaio==23.1.1 -types-python-dateutil==2.9.0.20241206 -typing-extensions==4.12.2 -urllib3==2.2.3 -wcwidth==0.2.13 -zeep==4.3.1 -zipp==3.20.2 -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/b786604.txt b/.riot/requirements/b786604.txt deleted file mode 100644 index cb26a822c6d..00000000000 --- a/.riot/requirements/b786604.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/b786604.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -elasticsearch1==1.10.0 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==1.26.18 -zipp==3.17.0 diff --git a/.riot/requirements/b7a530f.txt b/.riot/requirements/b7a530f.txt deleted file mode 100644 index 802d6e0593e..00000000000 --- a/.riot/requirements/b7a530f.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/b7a530f.in -# -attrs==25.1.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.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-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -zipp==3.20.2 diff --git a/.riot/requirements/b80e42b.txt b/.riot/requirements/b80e42b.txt deleted file mode 100644 index 6885e5531e6..00000000000 --- a/.riot/requirements/b80e42b.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/b80e42b.in -# -algoliasearch==2.6.3 -attrs==24.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==8.4.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pytest==8.3.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -requests==2.32.3 -sortedcontainers==2.4.0 -tomli==2.0.1 -urllib3==1.26.19 -zipp==3.20.0 diff --git a/.riot/requirements/baf46ab.txt b/.riot/requirements/baf46ab.txt deleted file mode 100644 index 5a983e008c5..00000000000 --- a/.riot/requirements/baf46ab.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/baf46ab.in -# -async-timeout==5.0.1 -attrs==24.2.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.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.3 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -redis==4.6.0 -sortedcontainers==2.4.0 -tomli==2.1.0 -zipp==3.20.2 diff --git a/.riot/requirements/bb588fd.txt b/.riot/requirements/bb588fd.txt deleted file mode 100644 index 900d23b901a..00000000000 --- a/.riot/requirements/bb588fd.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/bb588fd.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -msgpack==1.1.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/bdada1a.txt b/.riot/requirements/bdada1a.txt deleted file mode 100644 index 2a394359c49..00000000000 --- a/.riot/requirements/bdada1a.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# 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/c10c210.txt b/.riot/requirements/c10c210.txt deleted file mode 100644 index 309fa2b596d..00000000000 --- a/.riot/requirements/c10c210.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/c10c210.in -# -anyio==4.5.2 -asgiref==3.8.1 -attrs==25.3.0 -certifi==2025.8.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/c2ee914.txt b/.riot/requirements/c2ee914.txt deleted file mode 100644 index 66ce3c49b64..00000000000 --- a/.riot/requirements/c2ee914.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/c2ee914.in -# -attrs==23.1.0 -coverage[toml]==7.3.0 -exceptiongroup==1.1.3 -httpretty==1.1.4 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==23.1 -pluggy==1.2.0 -pytest==7.4.0 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 diff --git a/.riot/requirements/c482689.txt b/.riot/requirements/c482689.txt deleted file mode 100644 index 4d61b425aa3..00000000000 --- a/.riot/requirements/c482689.txt +++ /dev/null @@ -1,50 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/c482689.in -# -asgiref==3.8.1 -attrs==25.3.0 -certifi==2025.6.15 -charset-normalizer==2.1.1 -click==7.1.2 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -flask==1.1.4 -gevent==24.2.1 -greenlet==3.1.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==1.1.0 -jinja2==2.11.3 -markupsafe==2.0.1 -mock==5.2.0 -opentelemetry-api==1.0.0 -opentelemetry-instrumentation==0.19b0 -opentelemetry-instrumentation-flask==0.19b0 -opentelemetry-instrumentation-wsgi==0.19b0 -opentelemetry-util-http==0.19b0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.28.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -werkzeug==1.0.1 -wrapt==1.17.2 -zipp==3.20.2 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/c4dace8.txt b/.riot/requirements/c4dace8.txt deleted file mode 100644 index b828932c4c2..00000000000 --- a/.riot/requirements/c4dace8.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/c4dace8.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.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 -pyodbc==5.2.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/c74560f.txt b/.riot/requirements/c74560f.txt deleted file mode 100644 index 06136e66715..00000000000 --- a/.riot/requirements/c74560f.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/c74560f.in -# -async-timeout==5.0.1 -attrs==24.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -gevent==24.2.1 -greenlet==3.1.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 -redis==5.2.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -zipp==3.20.2 -zope-event==5.0 -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/c826075.txt b/.riot/requirements/c826075.txt deleted file mode 100644 index 8b37fe1c728..00000000000 --- a/.riot/requirements/c826075.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/c826075.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -flaky==3.8.1 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/ce26b2c.txt b/.riot/requirements/ce26b2c.txt deleted file mode 100644 index 85a8151acd0..00000000000 --- a/.riot/requirements/ce26b2c.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/ce26b2c.in -# -aredis==1.1.8 -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/ce48624.txt b/.riot/requirements/ce48624.txt deleted file mode 100644 index 7f4fe653b48..00000000000 --- a/.riot/requirements/ce48624.txt +++ /dev/null @@ -1,49 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/ce48624.in -# -attrs==25.3.0 -babel==2.17.0 -blinker==1.8.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -click==8.1.8 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -flask==2.3.3 -flask-babel==4.0.0 -gevent==24.2.1 -greenlet==3.1.1 -gunicorn==23.0.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==2.2.0 -jinja2==3.1.6 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -psycopg2-binary==2.9.10 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -pytz==2025.2 -requests==2.32.4 -sortedcontainers==2.4.0 -sqlalchemy==2.0.43 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -werkzeug==3.0.6 -zipp==3.20.2 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/bfd8366.txt b/.riot/requirements/cf86081.txt similarity index 52% rename from .riot/requirements/bfd8366.txt rename to .riot/requirements/cf86081.txt index 3c91ad7fcca..7d61954e17b 100644 --- a/.riot/requirements/bfd8366.txt +++ b/.riot/requirements/cf86081.txt @@ -1,52 +1,54 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/bfd8366.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/cf86081.in # annotated-types==0.7.0 -anyio==4.5.2 +anyio==4.11.0 attrs==22.1.0 -boto3==1.37.38 -botocore==1.37.38 +boto3==1.40.52 +botocore==1.40.52 cattrs==23.1.2 -certifi==2025.8.3 -coverage[toml]==7.6.1 +certifi==2025.10.5 +coverage[toml]==7.10.7 exceptiongroup==1.3.0 -fastapi==0.116.1 +fastapi==0.119.0 freezegun==1.5.5 h11==0.16.0 httpcore==1.0.9 httpretty==1.1.4 httpx==0.27.2 hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 +idna==3.11 +importlib-metadata==8.7.0 iniconfig==2.1.0 jmespath==1.0.1 mock==5.2.0 -msgpack==1.1.1 +msgpack==1.1.2 opentracing==2.4.0 packaging==25.0 -pluggy==1.5.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 +pluggy==1.6.0 +pydantic==2.12.2 +pydantic-core==2.41.4 +pygments==2.19.2 +pytest==8.4.2 +pytest-cov==7.0.0 +pytest-mock==3.15.1 +pytest-randomly==4.0.1 python-dateutil==2.9.0.post0 -s3transfer==0.11.5 +s3transfer==0.14.0 six==1.17.0 sniffio==1.3.1 sortedcontainers==2.4.0 -starlette==0.44.0 +starlette==0.48.0 structlog==25.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 +tomli==2.3.0 +typing-extensions==4.15.0 +typing-inspection==0.4.2 urllib3==1.26.20 wheel==0.45.1 -zipp==3.20.2 +zipp==3.23.0 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 +setuptools==80.9.0 diff --git a/.riot/requirements/cfb7b47.txt b/.riot/requirements/cfb7b47.txt deleted file mode 100644 index c6b7817267a..00000000000 --- a/.riot/requirements/cfb7b47.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/cfb7b47.in -# -anyio==4.5.2 -asgiref==3.8.1 -attrs==25.3.0 -certifi==2025.8.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/d002f87.txt b/.riot/requirements/d002f87.txt deleted file mode 100644 index 54053f21afb..00000000000 --- a/.riot/requirements/d002f87.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/d002f87.in -# -attrs==24.2.0 -avro==1.12.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.4.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pytest==8.3.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.20.1 diff --git a/.riot/requirements/d15c0f8.txt b/.riot/requirements/d15c0f8.txt deleted file mode 100644 index a75affdf75b..00000000000 --- a/.riot/requirements/d15c0f8.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/d15c0f8.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -gunicorn==23.0.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -lz4==4.3.3 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -protobuf==5.29.5 -py-cpuinfo==8.0.0 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -uwsgi==2.0.30 -zipp==3.20.2 diff --git a/.riot/requirements/d2cb323.txt b/.riot/requirements/d2cb323.txt deleted file mode 100644 index cec5fdb7891..00000000000 --- a/.riot/requirements/d2cb323.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/d2cb323.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -structlog==20.2.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/d59e395.txt b/.riot/requirements/d59e395.txt deleted file mode 100644 index b865c214967..00000000000 --- a/.riot/requirements/d59e395.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/d59e395.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -decorator==5.1.1 -dogpile-cache==0.9.2 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-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/d66afaf.txt b/.riot/requirements/d66afaf.txt deleted file mode 100644 index 0b95a2b04d0..00000000000 --- a/.riot/requirements/d66afaf.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/d66afaf.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pymongo==3.9.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/d776a9a.txt b/.riot/requirements/d776a9a.txt deleted file mode 100644 index 07d09e22b12..00000000000 --- a/.riot/requirements/d776a9a.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/d776a9a.in -# -attrs==25.3.0 -azure-core==1.33.0 -azure-eventhub==5.15.0 -azure-functions==1.10.1 -azure-storage-blob==12.26.0 -certifi==2025.8.3 -cffi==1.17.1 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -cryptography==46.0.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -isodate==0.7.2 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pycparser==2.23 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 diff --git a/.riot/requirements/d84f5ef.txt b/.riot/requirements/d84f5ef.txt deleted file mode 100644 index 57914495970..00000000000 --- a/.riot/requirements/d84f5ef.txt +++ /dev/null @@ -1,51 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/d84f5ef.in -# -annotated-types==0.7.0 -anyio==4.5.2 -attrs==25.3.0 -boto3==1.37.38 -botocore==1.37.38 -certifi==2025.8.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -fastapi==0.116.1 -freezegun==1.5.5 -h11==0.16.0 -httpcore==1.0.9 -httpretty==1.1.4 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -jmespath==1.0.1 -mock==5.2.0 -msgpack==1.1.1 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -s3transfer==0.11.5 -six==1.17.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.44.0 -structlog==25.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -wheel==0.45.1 -zipp==3.20.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/d8c9ddb.txt b/.riot/requirements/d8c9ddb.txt deleted file mode 100644 index a8703fdfcfe..00000000000 --- a/.riot/requirements/d8c9ddb.txt +++ /dev/null @@ -1,40 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/d8c9ddb.in -# -aiofiles==24.1.0 -anyio==4.5.2 -attrs==25.3.0 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -fastapi==0.90.1 -h11==0.16.0 -httpcore==1.0.9 -httpx==0.27.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pydantic==1.10.22 -pytest==8.3.5 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-multipart==0.0.20 -requests==2.32.4 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.23.1 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -zipp==3.20.2 diff --git a/.riot/requirements/dbf191e.txt b/.riot/requirements/dbf191e.txt deleted file mode 100644 index 3e34c492c5e..00000000000 --- a/.riot/requirements/dbf191e.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/dbf191e.in -# -asn1crypto==1.5.1 -attrs==23.2.0 -certifi==2024.7.4 -cffi==1.16.0 -charset-normalizer==2.1.1 -coverage[toml]==7.6.0 -cryptography==38.0.4 -exceptiongroup==1.2.2 -filelock==3.15.4 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.2.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -oscrypto==1.3.0 -packaging==24.1 -pluggy==1.5.0 -pycparser==2.22 -pycryptodomex==3.20.0 -pyjwt==2.8.0 -pyopenssl==22.1.0 -pytest==8.3.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -pytz==2024.1 -requests==2.32.3 -responses==0.16.0 -six==1.16.0 -snowflake-connector-python==2.9.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.12.2 -urllib3==1.26.19 -zipp==3.19.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 diff --git a/.riot/requirements/dc3ecf5.txt b/.riot/requirements/dc3ecf5.txt deleted file mode 100644 index 3a9c449bce0..00000000000 --- a/.riot/requirements/dc3ecf5.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/dc3ecf5.in -# -attrs==25.3.0 -blinker==1.8.2 -certifi==2025.7.9 -charset-normalizer==3.4.2 -click==8.1.8 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -flask==2.3.3 -hypothesis==6.113.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==2.2.0 -jinja2==3.1.6 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -werkzeug==3.0.6 -zipp==3.20.2 diff --git a/.riot/requirements/dc9f475.txt b/.riot/requirements/dc9f475.txt deleted file mode 100644 index 163edfe0799..00000000000 --- a/.riot/requirements/dc9f475.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/dc9f475.in -# -attrs==23.2.0 -autocommand==2.2.2 -backports-tarfile==1.2.0 -cheroot==10.0.1 -cherrypy==18.10.0 -coverage[toml]==7.6.0 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.2.0 -importlib-resources==6.4.0 -inflect==7.3.1 -iniconfig==2.0.0 -jaraco-collections==5.0.1 -jaraco-context==5.3.0 -jaraco-functools==4.0.1 -jaraco-text==3.14.0 -mock==5.1.0 -more-itertools==8.10.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -portend==3.2.0 -pytest==8.3.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tempora==5.6.0 -tomli==2.0.1 -typeguard==4.3.0 -typing-extensions==4.12.2 -zc-lockfile==3.0.post1 -zipp==3.19.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 diff --git a/.riot/requirements/de53117.txt b/.riot/requirements/de53117.txt deleted file mode 100644 index 1dd3dcf18f2..00000000000 --- a/.riot/requirements/de53117.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/de53117.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -dnspython==2.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pymongo==4.8.0 -pytest==8.3.3 -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.20.2 diff --git a/.riot/requirements/e1e09c9.txt b/.riot/requirements/e1e09c9.txt deleted file mode 100644 index 9f07d4c2561..00000000000 --- a/.riot/requirements/e1e09c9.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/e1e09c9.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pylibmc==1.6.3 -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/e222783.txt b/.riot/requirements/e222783.txt deleted file mode 100644 index 9d6fa6e77f5..00000000000 --- a/.riot/requirements/e222783.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/e222783.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.0.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -protobuf==5.29.3 -pytest==8.3.5 -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/e2c6900.txt b/.riot/requirements/e2c6900.txt deleted file mode 100644 index f3cb21179d5..00000000000 --- a/.riot/requirements/e2c6900.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/e2c6900.in -# -anyio==4.4.0 -attrs==23.2.0 -certifi==2024.6.2 -coverage[toml]==7.5.4 -exceptiongroup==1.2.1 -h11==0.14.0 -httpcore==0.16.3 -httpx==0.23.3 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pytest==8.2.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -rfc3986[idna2008]==1.5.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.12.2 -zipp==3.19.2 diff --git a/.riot/requirements/e7a63a3.txt b/.riot/requirements/e7a63a3.txt deleted file mode 100644 index 6c1feed2bd3..00000000000 --- a/.riot/requirements/e7a63a3.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/e7a63a3.in -# -attrs==25.3.0 -certifi==2025.1.31 -charset-normalizer==3.4.1 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opensearch-py[requests]==1.1.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -pytest==8.3.5 -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.2.1 -urllib3==1.26.20 -zipp==3.20.2 diff --git a/.riot/requirements/e8693b9.txt b/.riot/requirements/e8693b9.txt deleted file mode 100644 index 4db2ef78998..00000000000 --- a/.riot/requirements/e8693b9.txt +++ /dev/null @@ -1,77 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/e8693b9.in -# -arrow==1.3.0 -asgiref==3.8.1 -attrs==25.3.0 -autobahn==23.1.2 -automat==24.8.1 -bcrypt==4.2.1 -blessed==1.21.0 -certifi==2025.4.26 -cffi==1.17.1 -channels==3.0.5 -charset-normalizer==3.4.2 -constantly==23.10.4 -coverage[toml]==7.6.1 -cryptography==45.0.3 -daphne==3.0.2 -django==3.0.14 -django-configurations==2.3.2 -django-picklefield==3.0.1 -django-pylibmc==0.6.1 -django-q==1.3.6 -django-redis==4.5.0 -exceptiongroup==1.3.0 -hyperlink==21.0.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -incremental==24.7.2 -iniconfig==2.1.0 -isodate==0.7.2 -lxml==5.4.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -platformdirs==4.3.6 -pluggy==1.5.0 -psycopg2-binary==2.9.10 -pyasn1==0.6.1 -pyasn1-modules==0.4.2 -pycparser==2.22 -pylibmc==1.6.3 -pyopenssl==25.1.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -python-memcached==1.62 -pytz==2025.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 -tomli==2.2.1 -twisted[tls]==24.11.0 -txaio==23.1.1 -types-python-dateutil==2.9.0.20241206 -typing-extensions==4.13.2 -urllib3==2.2.3 -wcwidth==0.2.13 -zeep==4.3.1 -zipp==3.20.2 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/e871798.txt b/.riot/requirements/e871798.txt deleted file mode 100644 index 3b8c98da668..00000000000 --- a/.riot/requirements/e871798.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/e871798.in -# -attrs==23.2.0 -coverage[toml]==7.6.0 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.2.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pytest==8.3.1 -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 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 diff --git a/.riot/requirements/e87b392.txt b/.riot/requirements/e87b392.txt deleted file mode 100644 index 56eccef1dbf..00000000000 --- a/.riot/requirements/e87b392.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/e87b392.in -# -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.0 -iniconfig==2.0.0 -jinja2==3.0.3 -markupsafe==2.1.3 -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/eab5e7a.txt b/.riot/requirements/eab5e7a.txt deleted file mode 100644 index 272838ed70e..00000000000 --- a/.riot/requirements/eab5e7a.txt +++ /dev/null @@ -1,41 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/eab5e7a.in -# -amqp==5.3.1 -attrs==25.3.0 -backports-zoneinfo[tzdata]==0.2.1 -billiard==4.2.1 -celery==5.5.3 -click==8.1.8 -click-didyoumean==0.3.1 -click-plugins==1.1.1.2 -click-repl==0.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -kombu==5.5.4 -mock==5.2.0 -more-itertools==8.10.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -prompt-toolkit==3.0.51 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -redis==3.5.3 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -tzdata==2025.2 -vine==5.1.0 -wcwidth==0.2.13 -zipp==3.20.2 diff --git a/.riot/requirements/eb4440f.txt b/.riot/requirements/eb4440f.txt deleted file mode 100644 index 9420d403230..00000000000 --- a/.riot/requirements/eb4440f.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/eb4440f.in -# -asgiref==3.8.1 -attrs==25.3.0 -bcrypt==4.2.1 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -dill==0.4.0 -django==3.2.25 -django-configurations==2.5.1 -exceptiongroup==1.3.0 -gevent==24.2.1 -greenlet==3.1.1 -gunicorn==23.0.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pylibmc==1.6.3 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.1 -pytz==2025.2 -pyyaml==6.0.2 -requests==2.32.4 -six==1.17.0 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/ee62ebe.txt b/.riot/requirements/ee62ebe.txt deleted file mode 100644 index b0e384be4e5..00000000000 --- a/.riot/requirements/ee62ebe.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/ee62ebe.in -# -async-timeout==4.0.3 -attrs==24.2.0 -coverage[toml]==7.6.1 -dramatiq==1.17.0 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -prometheus-client==0.20.0 -pytest==8.3.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -redis==5.0.8 -sortedcontainers==2.4.0 -tomli==2.0.1 diff --git a/.riot/requirements/ef10d26.txt b/.riot/requirements/ef10d26.txt deleted file mode 100644 index 02b4ccf8a17..00000000000 --- a/.riot/requirements/ef10d26.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/ef10d26.in -# -amqp==5.3.1 -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -kombu==5.0.2 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -vine==5.1.0 -zipp==3.20.2 diff --git a/.riot/requirements/ef66bb3.txt b/.riot/requirements/ef66bb3.txt deleted file mode 100644 index 7e584779306..00000000000 --- a/.riot/requirements/ef66bb3.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/ef66bb3.in -# -asynctest==0.13.0 -attrs==23.1.0 -coverage[toml]==7.3.4 -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 -py==1.11.0 -pytest==6.2.5 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -toml==0.10.2 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/f229429.txt b/.riot/requirements/f229429.txt deleted file mode 100644 index 4f0448ccdbb..00000000000 --- a/.riot/requirements/f229429.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/f229429.in -# -attrs==23.1.0 -cassandra-driver==3.24.0 -click==8.1.7 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -geomet==0.2.1.post1 -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 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/f334e66.txt b/.riot/requirements/f334e66.txt deleted file mode 100644 index ba4030e4718..00000000000 --- a/.riot/requirements/f334e66.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/f334e66.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -msgpack==1.1.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/f408d1f.txt b/.riot/requirements/f408d1f.txt deleted file mode 100644 index 9a59658b081..00000000000 --- a/.riot/requirements/f408d1f.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/f408d1f.in -# -attrs==25.1.0 -blinker==1.8.2 -certifi==2025.1.31 -charset-normalizer==3.4.1 -click==7.1.2 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -flask==1.1.4 -flask-openapi3==1.1.5 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.0.0 -itsdangerous==1.1.0 -jinja2==2.11.3 -markupsafe==1.1.1 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -pydantic==1.10.21 -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.2.1 -typing-extensions==4.12.2 -urllib3==1.26.20 -werkzeug==1.0.1 -zipp==3.20.2 diff --git a/.riot/requirements/f4b1bd3.txt b/.riot/requirements/f4b1bd3.txt deleted file mode 100644 index da3d86a840f..00000000000 --- a/.riot/requirements/f4b1bd3.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/f4b1bd3.in -# -async-timeout==5.0.1 -attrs==24.2.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.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.3 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -redis==5.0.1 -sortedcontainers==2.4.0 -tomli==2.1.0 -zipp==3.20.2 diff --git a/.riot/requirements/f61cdff.txt b/.riot/requirements/f61cdff.txt deleted file mode 100644 index 853373c6a43..00000000000 --- a/.riot/requirements/f61cdff.txt +++ /dev/null @@ -1,44 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/f61cdff.in -# -attrs==25.3.0 -bcrypt==4.2.1 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -dill==0.4.0 -django==2.2.28 -django-configurations==2.3.2 -exceptiongroup==1.3.0 -gevent==24.2.1 -greenlet==3.1.1 -gunicorn==23.0.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pylibmc==1.6.3 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.14.1 -pytz==2025.2 -pyyaml==6.0.2 -requests==2.32.4 -six==1.17.0 -sortedcontainers==2.4.0 -sqlparse==0.5.3 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 -zope-event==5.0 -zope-interface==7.2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==75.3.2 diff --git a/.riot/requirements/f7e8645.txt b/.riot/requirements/f7e8645.txt deleted file mode 100644 index 3bc220b653d..00000000000 --- a/.riot/requirements/f7e8645.txt +++ /dev/null @@ -1,21 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/f7e8645.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 diff --git a/.riot/requirements/f8e5119.txt b/.riot/requirements/f8e5119.txt deleted file mode 100644 index a06b17c8085..00000000000 --- a/.riot/requirements/f8e5119.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/f8e5119.in -# -attrs==25.3.0 -azure-core==1.33.0 -azure-servicebus==7.14.2 -certifi==2025.8.3 -charset-normalizer==3.4.3 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -idna==3.10 -iniconfig==2.1.0 -isodate==0.7.2 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -requests==2.32.4 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==2.2.3 diff --git a/.riot/requirements/f903257.txt b/.riot/requirements/f903257.txt deleted file mode 100644 index 1822758bfe4..00000000000 --- a/.riot/requirements/f903257.txt +++ /dev/null @@ -1,37 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/f903257.in -# -attrs==25.3.0 -blinker==1.8.2 -click==8.1.8 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -flask==0.12.5 -flask-cache==0.13.1 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==1.1.0 -jinja2==2.10.3 -markupsafe==1.1.1 -mock==5.2.0 -more-itertools==8.10.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -py==1.11.0 -pytest==6.2.5 -pytest-cov==3.0.0 -pytest-mock==2.0.0 -pytest-randomly==3.15.0 -python-memcached==1.62 -redis==2.10.6 -sortedcontainers==2.4.0 -toml==0.10.2 -tomli==2.2.1 -typing-extensions==4.13.2 -werkzeug==0.16.1 -zipp==3.20.2 diff --git a/.riot/requirements/f9d0e8e.txt b/.riot/requirements/f9d0e8e.txt deleted file mode 100644 index 42bc8937d56..00000000000 --- a/.riot/requirements/f9d0e8e.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/f9d0e8e.in -# -attrs==24.2.0 -coverage[toml]==7.6.1 -dnspython==2.6.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pymongo==4.8.0 -pytest==8.3.3 -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.20.2 diff --git a/.riot/requirements/fadb064.txt b/.riot/requirements/fadb064.txt deleted file mode 100644 index ad51389c99f..00000000000 --- a/.riot/requirements/fadb064.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/fadb064.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.2.2 -googleapis-common-protos==1.70.0 -grpcio==1.34.1 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -opentracing==2.4.0 -packaging==24.2 -pluggy==1.5.0 -protobuf==5.29.4 -pytest==8.3.5 -pytest-asyncio==0.23.7 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -zipp==3.20.2 diff --git a/.riot/requirements/fbab99a.txt b/.riot/requirements/fbab99a.txt deleted file mode 100644 index 6351c78934a..00000000000 --- a/.riot/requirements/fbab99a.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/fbab99a.in -# -async-timeout==4.0.3 -attrs==23.1.0 -click==7.1.2 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==7.0.1 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 -redis==5.0.1 -rq==1.10.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 diff --git a/.riot/requirements/fd2d2d1.txt b/.riot/requirements/fd2d2d1.txt deleted file mode 100644 index 3cdc7c85224..00000000000 --- a/.riot/requirements/fd2d2d1.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/fd2d2d1.in -# -attrs==25.3.0 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -hypothesis==6.45.0 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -mock==5.2.0 -msgpack==1.1.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -zipp==3.20.2 diff --git a/.riot/requirements/ff0c51d.txt b/.riot/requirements/ff0c51d.txt deleted file mode 100644 index 56853212b68..00000000000 --- a/.riot/requirements/ff0c51d.txt +++ /dev/null @@ -1,40 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/ff0c51d.in -# -annotated-types==0.7.0 -attrs==25.3.0 -blinker==1.8.2 -certifi==2025.10.5 -charset-normalizer==3.4.3 -click==8.1.8 -coverage[toml]==7.6.1 -exceptiongroup==1.3.0 -flask==3.0.3 -flask-openapi3==4.0.3 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==8.5.0 -iniconfig==2.1.0 -itsdangerous==2.2.0 -jinja2==3.1.6 -markupsafe==2.1.5 -mock==5.2.0 -opentracing==2.4.0 -packaging==25.0 -pluggy==1.5.0 -pydantic==2.10.6 -pydantic-core==2.27.2 -pytest==8.3.5 -pytest-cov==5.0.0 -pytest-mock==3.14.1 -pytest-randomly==3.15.0 -requests==2.32.4 -sortedcontainers==2.4.0 -tomli==2.2.1 -typing-extensions==4.13.2 -urllib3==1.26.20 -werkzeug==3.0.6 -zipp==3.20.2 diff --git a/ddtrace/__init__.py b/ddtrace/__init__.py index 3491da5a392..a86597bdb08 100644 --- a/ddtrace/__init__.py +++ b/ddtrace/__init__.py @@ -39,12 +39,12 @@ def check_supported_python_version(): - if PYTHON_VERSION_INFO < (3, 9): + if PYTHON_VERSION_INFO < (3, 10): deprecation_message = ( - "Support for ddtrace with Python version %d.%d is deprecated and will be removed in 4.0.0." + "Support for ddtrace with Python version %d.%d is deprecated and will be removed in 5.0.0." ) - if PYTHON_VERSION_INFO < (3, 8): - deprecation_message = "Support for ddtrace with Python version %d.%d was removed in 3.0.0." + if PYTHON_VERSION_INFO < (3, 9): + deprecation_message = "Support for ddtrace with Python version %d.%d was removed in 4.0.0." debtcollector.deprecate( (deprecation_message % (PYTHON_VERSION_INFO[0], PYTHON_VERSION_INFO[1])), category=DDTraceDeprecationWarning, diff --git a/ddtrace/_monkey.py b/ddtrace/_monkey.py index 599a4dae857..9e7dca4a29e 100644 --- a/ddtrace/_monkey.py +++ b/ddtrace/_monkey.py @@ -38,7 +38,6 @@ "boto": True, "botocore": True, "bottle": True, - "cassandra": True, "celery": True, "consul": True, "ddtrace_api": True, @@ -47,7 +46,6 @@ "elasticsearch": True, "algoliasearch": True, "futures": True, - "freezegun": False, # deprecated, to be removed in ddtrace 4.x "google_adk": True, "google_generativeai": True, "google_genai": True, @@ -58,7 +56,6 @@ "kafka": True, "langgraph": True, "litellm": True, - "mongoengine": True, "mysql": True, "mysqldb": True, "pymysql": True, @@ -155,7 +152,6 @@ "psycopg2", ), "snowflake": ("snowflake.connector",), - "cassandra": ("cassandra.cluster",), "dogpile_cache": ("dogpile.cache",), "mysqldb": ("MySQLdb",), "futures": ("concurrent.futures.thread",), @@ -334,7 +330,7 @@ def patch_all(**patch_modules: bool) -> None: :param dict patch_modules: Override whether particular modules are patched or not. - >>> _patch_all(redis=False, cassandra=False) + >>> _patch_all(redis=False) """ deprecate( "patch_all is deprecated and will be removed in a future version of the tracer.", diff --git a/ddtrace/_trace/span.py b/ddtrace/_trace/span.py index ea14e40a42a..fbc23395bf3 100644 --- a/ddtrace/_trace/span.py +++ b/ddtrace/_trace/span.py @@ -52,10 +52,8 @@ from ddtrace.internal.constants import SPAN_API_DATADOG from ddtrace.internal.constants import SamplingMechanism from ddtrace.internal.logger import get_logger -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning from ddtrace.internal.utils.time import Time from ddtrace.settings._config import config -from ddtrace.vendor.debtcollector import deprecate from ddtrace.vendor.debtcollector import removals @@ -630,8 +628,6 @@ def record_exception( self, exception: BaseException, attributes: Optional[Dict[str, _AttributeValueType]] = None, - timestamp: Optional[int] = None, - escaped: bool = False, ) -> None: """ Records an exception as a span event. Multiple exceptions can be recorded on a span. @@ -643,23 +639,6 @@ def record_exception( :param timestamp: Deprecated. :param escaped: Deprecated. """ - if escaped: - deprecate( - prefix="The escaped argument is deprecated for record_exception", - message="""If an exception exits the scope of the span, it will automatically be - reported in the span tags.""", - category=DDTraceDeprecationWarning, - removal_version="4.0.0", - ) - if timestamp is not None: - deprecate( - prefix="The timestamp argument is deprecated for record_exception", - message="""The timestamp of the span event should correspond to the time when the - error is recorded which is set automatically.""", - category=DDTraceDeprecationWarning, - removal_version="4.0.0", - ) - tb = self._get_traceback(type(exception), exception, exception.__traceback__) attrs: Dict[str, _AttributeValueType] = { @@ -847,18 +826,6 @@ def __exit__( except Exception: log.exception("error closing trace") - def _pprint(self) -> str: - # Although Span._pprint has been internal to ddtrace since v1.0.0, it is still - # used to debug spans in the wild. Introducing a deprecation warning here to - # give users a chance to migrate to __repr__ before we remove it. - deprecate( - prefix="The _pprint method is deprecated for __repr__", - message="""Use __repr__ instead.""", - category=DDTraceDeprecationWarning, - removal_version="4.0.0", - ) - return self.__repr__() - def __repr__(self) -> str: """Return a detailed string representation of a span.""" return ( diff --git a/ddtrace/_version.py b/ddtrace/_version.py new file mode 100644 index 00000000000..9fc278ef97a --- /dev/null +++ b/ddtrace/_version.py @@ -0,0 +1,34 @@ +# file generated by setuptools-scm +# don't change, don't track in version control + +__all__ = [ + "__version__", + "__version_tuple__", + "version", + "version_tuple", + "__commit_id__", + "commit_id", +] + +TYPE_CHECKING = False +if TYPE_CHECKING: + from typing import Tuple + from typing import Union + + VERSION_TUPLE = Tuple[Union[int, str], ...] + COMMIT_ID = Union[str, None] +else: + VERSION_TUPLE = object + COMMIT_ID = object + +version: str +__version__: str +__version_tuple__: VERSION_TUPLE +version_tuple: VERSION_TUPLE +commit_id: COMMIT_ID +__commit_id__: COMMIT_ID + +__version__ = version = "4.0.0.dev0" +__version_tuple__ = version_tuple = (4, 0, 0, "dev0", "") + +# __commit_id__ = commit_id = 'g5db831a3e' diff --git a/ddtrace/appsec/_iast/_ast/visitor.py b/ddtrace/appsec/_iast/_ast/visitor.py index a7e1474f5f9..0df51cba7fe 100644 --- a/ddtrace/appsec/_iast/_ast/visitor.py +++ b/ddtrace/appsec/_iast/_ast/visitor.py @@ -392,7 +392,6 @@ def find_insert_position(module_node: ast.Module) -> int: @staticmethod def _none_constant(from_node: Any) -> Any: # noqa: B008 - # 3.8+ return ast.Constant( lineno=from_node.lineno, col_offset=from_node.col_offset, @@ -863,17 +862,6 @@ def visit_Subscript(self, subscr_node: ast.Subscript) -> Any: call_node.func.attr = aspect_split[1] call_node.func.value.id = aspect_split[0] call_node.args.extend([subscr_node.value, subscr_node.slice]) - # TODO: python 3.8 isn't working correctly with index_aspect, tests raise: - # corrupted size vs. prev_size in fastbins - # Test failed with exit code -6 - # https://app.circleci.com/pipelines/github/DataDog/dd-trace-py/46665/workflows/3cf1257c-feaf-4653-bb9c-fb840baa1776/jobs/3031799 - # elif isinstance(subscr_node.slice, ast.Index): - # if self._is_string_node(subscr_node.slice.value): # type: ignore[attr-defined] - # return subscr_node - # aspect_split = self._aspect_index.split(".") - # call_node.func.attr = aspect_split[1] - # call_node.func.value.id = aspect_split[0] - # call_node.args.extend([subscr_node.value, subscr_node.slice.value]) # type: ignore[attr-defined] else: return subscr_node diff --git a/ddtrace/contrib/integration_registry/registry.yaml b/ddtrace/contrib/integration_registry/registry.yaml index 4a467241940..0240ac13050 100644 --- a/ddtrace/contrib/integration_registry/registry.yaml +++ b/ddtrace/contrib/integration_registry/registry.yaml @@ -66,7 +66,7 @@ integrations: - algoliasearch tested_versions_by_dependency: algoliasearch: - min: 2.5.0 + min: 2.6.3 max: 2.6.3 - integration_name: anthropic @@ -104,7 +104,7 @@ integrations: - asyncpg tested_versions_by_dependency: asyncpg: - min: 0.22.0 + min: 0.23.0 max: 0.30.0 - integration_name: avro @@ -195,16 +195,6 @@ integrations: min: 0.12.25 max: 0.13.4 -- integration_name: cassandra - is_external_package: true - is_tested: true - dependency_names: - - cassandra-driver - tested_versions_by_dependency: - cassandra-driver: - min: 3.24.0 - max: 3.28.0 - - integration_name: celery is_external_package: true is_tested: true @@ -379,16 +369,6 @@ integrations: min: 1.10.1 max: 2.3.0 -- integration_name: freezegun - is_external_package: true - is_tested: true - dependency_names: - - freezegun - tested_versions_by_dependency: - freezegun: - min: 1.3.1 - max: 1.5.2 - - integration_name: futures is_external_package: false is_tested: true @@ -400,7 +380,7 @@ integrations: - gevent tested_versions_by_dependency: gevent: - min: 20.12.1 + min: 21.1.2 max: 25.5.1 - integration_name: google_adk @@ -609,16 +589,6 @@ integrations: min: 1.0.2 max: 1.0.2 -- integration_name: mongoengine - is_external_package: true - is_tested: true - dependency_names: - - mongoengine - tested_versions_by_dependency: - mongoengine: - min: 0.23.1 - max: 0.29.1 - - integration_name: mysql is_external_package: true is_tested: true @@ -666,7 +636,7 @@ integrations: - protobuf tested_versions_by_dependency: protobuf: - min: 5.29.3 + min: 6.30.1 max: 6.32.0 - integration_name: psycopg @@ -680,7 +650,7 @@ integrations: min: 3.0.18 max: 3.2.10 psycopg2-binary: - min: 2.8.6 + min: 2.9.10 max: 2.9.10 - integration_name: pydantic_ai @@ -740,7 +710,7 @@ integrations: - pynamodb tested_versions_by_dependency: pynamodb: - min: 5.0.3 + min: 5.5.1 max: 5.5.1 - integration_name: pyodbc @@ -826,7 +796,7 @@ integrations: - requests tested_versions_by_dependency: requests: - min: 2.20.1 + min: 2.25.1 max: 2.32.5 - integration_name: rq @@ -862,7 +832,7 @@ integrations: - snowflake-connector-python tested_versions_by_dependency: snowflake-connector-python: - min: 2.3.10 + min: 2.4.6 max: 3.17.2 - integration_name: sqlalchemy @@ -928,7 +898,7 @@ integrations: - urllib3 tested_versions_by_dependency: urllib3: - min: 1.25.0 + min: 1.25.8 max: 2.5.0 - integration_name: valkey diff --git a/ddtrace/contrib/internal/aioredis/patch.py b/ddtrace/contrib/internal/aioredis/patch.py index 3ce4629620f..96945d1d33a 100644 --- a/ddtrace/contrib/internal/aioredis/patch.py +++ b/ddtrace/contrib/internal/aioredis/patch.py @@ -177,8 +177,7 @@ def _finish_span(future): future.result() if redis_command in ROW_RETURNING_COMMANDS: span.set_metric(db.ROWCOUNT, determine_row_count(redis_command=redis_command, result=future.result())) - # CancelledError exceptions extend from BaseException as of Python 3.8, instead of usual Exception - except (Exception, aioredis.CancelledError): + except aioredis.CancelledError: span.set_exc_info(*sys.exc_info()) if redis_command in ROW_RETURNING_COMMANDS: span.set_metric(db.ROWCOUNT, 0) diff --git a/ddtrace/contrib/internal/algoliasearch/patch.py b/ddtrace/contrib/internal/algoliasearch/patch.py index 5b8571457be..93b0c3caa6d 100644 --- a/ddtrace/contrib/internal/algoliasearch/patch.py +++ b/ddtrace/contrib/internal/algoliasearch/patch.py @@ -37,13 +37,12 @@ algoliasearch_version = VERSION = V0 -def get_version(): - # type: () -> str +def get_version() -> str: return VERSION def _supported_versions() -> Dict[str, str]: - return {"algoliasearch": ">=2.5.0"} + return {"algoliasearch": ">=2.6.3"} def patch(): diff --git a/ddtrace/contrib/internal/asyncpg/patch.py b/ddtrace/contrib/internal/asyncpg/patch.py index 586b751a1a0..67b55c40d70 100644 --- a/ddtrace/contrib/internal/asyncpg/patch.py +++ b/ddtrace/contrib/internal/asyncpg/patch.py @@ -47,13 +47,12 @@ log = get_logger(__name__) -def get_version(): - # type: () -> str +def get_version() -> str: return getattr(asyncpg, "__version__", "") def _supported_versions() -> Dict[str, str]: - return {"asyncpg": ">=0.22.0"} + return {"asyncpg": ">=0.23.0"} def _get_connection_tags(conn): diff --git a/ddtrace/contrib/internal/cassandra/__init__.py b/ddtrace/contrib/internal/cassandra/__init__.py deleted file mode 100644 index d0de07f8f16..00000000000 --- a/ddtrace/contrib/internal/cassandra/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -"""Instrument Cassandra to report Cassandra queries. - -``import ddtrace.auto`` will automatically patch your Cluster instance to make it work. -:: - - from ddtrace import patch - from ddtrace.trace import Pin - from cassandra.cluster import Cluster - - # If not patched yet, you can patch cassandra specifically - patch(cassandra=True) - - # This will report spans with the default instrumentation - cluster = Cluster(contact_points=["127.0.0.1"], port=9042) - session = cluster.connect("my_keyspace") - # Example of instrumented query - session.execute("select id from my_table limit 10;") - - # Use a pin to specify metadata related to this cluster - cluster = Cluster(contact_points=['10.1.1.3', '10.1.1.4', '10.1.1.5'], port=9042) - Pin.override(cluster, service='cassandra-backend') - session = cluster.connect("my_keyspace") - session.execute("select id from my_table limit 10;") -""" diff --git a/ddtrace/contrib/internal/cassandra/patch.py b/ddtrace/contrib/internal/cassandra/patch.py deleted file mode 100644 index bc82b8dbe0e..00000000000 --- a/ddtrace/contrib/internal/cassandra/patch.py +++ /dev/null @@ -1,9 +0,0 @@ -from typing import Dict - -from .session import get_version # noqa: F401 -from .session import patch # noqa: F401 -from .session import unpatch # noqa: F401 - - -def _supported_versions() -> Dict[str, str]: - return {"cassandra": ">=3.24.0"} diff --git a/ddtrace/contrib/internal/cassandra/session.py b/ddtrace/contrib/internal/cassandra/session.py deleted file mode 100644 index 92b0bf989bc..00000000000 --- a/ddtrace/contrib/internal/cassandra/session.py +++ /dev/null @@ -1,316 +0,0 @@ -""" -Trace queries along a session to a cassandra cluster -""" -import sys -from typing import Any -from typing import Dict -from typing import List -from typing import Optional - -from cassandra import __version__ - - -try: - import cassandra.cluster as cassandra_cluster -except AttributeError: - from cassandra import cluster as cassandra_cluster -from cassandra.query import BatchStatement -from cassandra.query import BoundStatement -from cassandra.query import PreparedStatement -from cassandra.query import SimpleStatement -import wrapt - -from ddtrace import config -from ddtrace._trace.pin import Pin -from ddtrace.constants import _SPAN_MEASURED_KEY -from ddtrace.constants import ERROR_MSG -from ddtrace.constants import ERROR_TYPE -from ddtrace.constants import SPAN_KIND -from ddtrace.ext import SpanKind -from ddtrace.ext import SpanTypes -from ddtrace.ext import cassandra as cassx -from ddtrace.ext import db -from ddtrace.ext import net -from ddtrace.internal.compat import maybe_stringify -from ddtrace.internal.constants import COMPONENT -from ddtrace.internal.logger import get_logger -from ddtrace.internal.schema import schematize_database_operation -from ddtrace.internal.schema import schematize_service_name -from ddtrace.internal.utils import get_argument_value -from ddtrace.internal.utils.formats import deep_getattr -from ddtrace.trace import Span - - -log = get_logger(__name__) - -RESOURCE_MAX_LENGTH = 5000 -SERVICE = schematize_service_name("cassandra") -CURRENT_SPAN = "_ddtrace_current_span" -PAGE_NUMBER = "_ddtrace_page_number" - - -# Original connect connect function -_connect = cassandra_cluster.Cluster.connect - - -def get_version(): - # type: () -> str - return __version__ - - -def patch(): - """patch will add tracing to the cassandra library.""" - cassandra_cluster.Cluster.connect = wrapt.FunctionWrapper(_connect, traced_connect) - Pin(service=SERVICE).onto(cassandra_cluster.Cluster) - cassandra_cluster._datadog_patch = True - - -def unpatch(): - cassandra_cluster.Cluster.connect = _connect - cassandra_cluster._datadog_patch = False - - -def traced_connect(func, instance, args, kwargs): - session = func(*args, **kwargs) - if not isinstance(session.execute, wrapt.FunctionWrapper): - # FIXME[matt] this should probably be private. - session.execute_async = wrapt.FunctionWrapper(session.execute_async, traced_execute_async) - return session - - -def _close_span_on_success(result, future): - span = getattr(future, CURRENT_SPAN, None) - if not span: - log.debug("traced_set_final_result was not able to get the current span from the ResponseFuture") - return - try: - span.set_tags(_extract_result_metas(cassandra_cluster.ResultSet(future, result))) - except Exception: - log.debug("an exception occurred while setting tags", exc_info=True) - finally: - span.finish() - delattr(future, CURRENT_SPAN) - - -def traced_set_final_result(func, instance, args, kwargs): - result = get_argument_value(args, kwargs, 0, "response") - _close_span_on_success(result, instance) - return func(*args, **kwargs) - - -def _close_span_on_error(exc, future): - span = getattr(future, CURRENT_SPAN, None) - if not span: - log.debug("traced_set_final_exception was not able to get the current span from the ResponseFuture") - return - try: - # handling the exception manually because we - # don't have an ongoing exception here - span.error = 1 - span._set_tag_str(ERROR_MSG, exc.args[0]) - span._set_tag_str(ERROR_TYPE, exc.__class__.__name__) - except Exception: - log.debug("traced_set_final_exception was not able to set the error, failed with error", exc_info=True) - finally: - span.finish() - delattr(future, CURRENT_SPAN) - - -def traced_set_final_exception(func, instance, args, kwargs): - exc = get_argument_value(args, kwargs, 0, "response") - _close_span_on_error(exc, instance) - return func(*args, **kwargs) - - -def traced_start_fetching_next_page(func, instance, args, kwargs): - has_more_pages = getattr(instance, "has_more_pages", True) - if not has_more_pages: - return func(*args, **kwargs) - session = getattr(instance, "session", None) - cluster = getattr(session, "cluster", None) - pin = Pin.get_from(cluster) - if not pin or not pin.enabled(): - return func(*args, **kwargs) - - # In case the current span is not finished we make sure to finish it - old_span = getattr(instance, CURRENT_SPAN, None) - if old_span: - log.debug("previous span was not finished before fetching next page") - old_span.finish() - - query = getattr(instance, "query", None) - - sanitized_query = _sanitize_query(query) if isinstance(query, BatchStatement) else None - statements_and_parameters = query._statements_and_parameters if isinstance(query, BatchStatement) else None - additional_tags = dict(**_extract_session_metas(session), **_extract_cluster_metas(cluster)) - span = _start_span_and_set_tags( - pin, _get_resource(query), additional_tags, sanitized_query, statements_and_parameters - ) - - page_number = getattr(instance, PAGE_NUMBER, 1) + 1 - setattr(instance, PAGE_NUMBER, page_number) - setattr(instance, CURRENT_SPAN, span) - try: - return func(*args, **kwargs) - except Exception: - with span: - span.set_exc_info(*sys.exc_info()) - raise - - -def traced_execute_async(func, instance, args, kwargs): - cluster = getattr(instance, "cluster", None) - pin = Pin.get_from(cluster) - if not pin or not pin.enabled(): - return func(*args, **kwargs) - - query = get_argument_value(args, kwargs, 0, "query") - - sanitized_query = _sanitize_query(query) if isinstance(query, BatchStatement) else None - statements_and_parameters = query._statements_and_parameters if isinstance(query, BatchStatement) else None - additional_tags = dict(**_extract_session_metas(instance), **_extract_cluster_metas(cluster)) - span = _start_span_and_set_tags( - pin, _get_resource(query), additional_tags, sanitized_query, statements_and_parameters - ) - - try: - result = func(*args, **kwargs) - setattr(result, CURRENT_SPAN, span) - setattr(result, PAGE_NUMBER, 1) - result._set_final_result = wrapt.FunctionWrapper(result._set_final_result, traced_set_final_result) - result._set_final_exception = wrapt.FunctionWrapper(result._set_final_exception, traced_set_final_exception) - result.start_fetching_next_page = wrapt.FunctionWrapper( - result.start_fetching_next_page, traced_start_fetching_next_page - ) - - # Since we cannot be sure that the previous methods were overwritten - # before the call ended, we add callbacks that will be run - # synchronously if the call already returned and we remove them right - # after. - result.add_callbacks( - _close_span_on_success, _close_span_on_error, callback_args=(result,), errback_args=(result,) - ) - result.clear_callbacks() - return result - except Exception: - with span: - span.set_exc_info(*sys.exc_info()) - raise - - -def _start_span_and_set_tags( - pin, - resource: str, - additional_tags: Dict, - query: Optional[str] = None, - statements_and_parameters: Optional[List] = None, -) -> Span: - span = pin.tracer.trace( - schematize_database_operation("cassandra.query", database_provider="cassandra"), - service=pin.service, - span_type=SpanTypes.CASSANDRA, - ) - span._set_tag_str(COMPONENT, config.cassandra.integration_name) - span._set_tag_str(db.SYSTEM, "cassandra") - span._set_tag_str(SPAN_KIND, SpanKind.CLIENT) - # PERF: avoid setting via Span.set_tag - span.set_metric(_SPAN_MEASURED_KEY, 1) - span.set_tags(additional_tags) - if query is not None: - span._set_tag_str("cassandra.query", query) - if statements_and_parameters is not None: - span.set_metric("cassandra.batch_size", len(statements_and_parameters)) - span.resource = resource[:RESOURCE_MAX_LENGTH] - return span - - -def _extract_session_metas(session): - metas = {} - - if getattr(session, "keyspace", None): - # FIXME the keyspace can be overridden explicitly in the query itself - # e.g. 'select * from trace.hash_to_resource' - metas[cassx.KEYSPACE] = session.keyspace.lower() - - return metas - - -def _extract_cluster_metas(cluster): - metas = {} - if deep_getattr(cluster, "metadata.cluster_name"): - metas[cassx.CLUSTER] = cluster.metadata.cluster_name - if getattr(cluster, "port", None): - metas[net.TARGET_PORT] = cluster.port - - return metas - - -def _extract_result_metas(result): - metas = {} - if result is None: - return metas - - future = getattr(result, "response_future", None) - - if future: - # get the host - host = maybe_stringify(getattr(future, "coordinator_host", None)) - if host: - host, _, port = host.partition(":") - metas[net.TARGET_HOST] = host - metas[net.SERVER_ADDRESS] = host - if port: - metas[net.TARGET_PORT] = int(port) - elif hasattr(future, "_current_host"): - address = deep_getattr(future, "_current_host.address") - if address: - metas[net.TARGET_HOST] = address - metas[net.SERVER_ADDRESS] = address - - query = getattr(future, "query", None) - if getattr(query, "consistency_level", None): - metas[cassx.CONSISTENCY_LEVEL] = query.consistency_level - if getattr(query, "keyspace", None): - metas[cassx.KEYSPACE] = query.keyspace.lower() - - page_number = getattr(future, PAGE_NUMBER, 1) - has_more_pages = future.has_more_pages - is_paginated = has_more_pages or page_number > 1 - metas[cassx.PAGINATED] = is_paginated - if is_paginated: - metas[cassx.PAGE_NUMBER] = page_number - - if hasattr(result, "current_rows"): - result_rows = result.current_rows or [] - metas[db.ROWCOUNT] = len(result_rows) - - return metas - - -def _get_resource(query: Any) -> str: - if isinstance(query, SimpleStatement) or isinstance(query, PreparedStatement): - return getattr(query, "query_string", query) - elif isinstance(query, BatchStatement): - return "BatchStatement" - elif isinstance(query, BoundStatement): - ps = getattr(query, "prepared_statement", None) - if ps: - return getattr(ps, "query_string", None) - elif isinstance(query, str): - return query - else: - return "unknown-query-type" - - -def _sanitize_query(query: BatchStatement) -> str: - """ - Each element in `_statements_and_parameters` is: - (is_prepared, statement, parameters) - ref:https://github.com/datastax/python-driver/blob/13d6d72be74f40fcef5ec0f2b3e98538b3b87459/cassandra/query.py#L844 - - For prepared statements, the `statement` value is just the query_id - which is not a statement and when trying to join with other strings - raises an error in python3 around joining bytes to unicode, so this - just filters out prepared statements from this tag value - """ - return "; ".join(q[1] for q in query._statements_and_parameters[:2] if not q[0]) diff --git a/ddtrace/contrib/internal/freezegun/__init__.py b/ddtrace/contrib/internal/freezegun/__init__.py deleted file mode 100644 index 89086940c89..00000000000 --- a/ddtrace/contrib/internal/freezegun/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -""" -The freezegun integration updates freezegun's default ignore list to ignore ddtrace. - -Enabling -~~~~~~~~ -The freezegun integration is enabled by default. Use :func:`patch()` to enable the integration:: - from ddtrace import patch - patch(freezegun=True) - - -Configuration -~~~~~~~~~~~~~ -The freezegun integration is not configurable, but may be disabled using DD_PATCH_MODULES=freezegun:false . -""" diff --git a/ddtrace/contrib/internal/freezegun/patch.py b/ddtrace/contrib/internal/freezegun/patch.py deleted file mode 100644 index 676952eda45..00000000000 --- a/ddtrace/contrib/internal/freezegun/patch.py +++ /dev/null @@ -1,37 +0,0 @@ -from typing import Dict - -from ddtrace import DDTraceDeprecationWarning -from ddtrace.internal.logger import get_logger -from ddtrace.vendor.debtcollector import deprecate - - -log = get_logger(__name__) - -DDTRACE_MODULE_NAME = "ddtrace" - - -def get_version() -> str: - import freezegun - - try: - return freezegun.__version__ - except AttributeError: - log.debug("Could not get freezegun version") - return "" - - -def _supported_versions() -> Dict[str, str]: - return {"freezegun": "*"} - - -def patch() -> None: - deprecate( - "the freezegun integration is deprecated", - message="this integration is not needed anymore for the correct reporting of span durations.", - removal_version="4.0.0", - category=DDTraceDeprecationWarning, - ) - - -def unpatch() -> None: - pass diff --git a/ddtrace/contrib/internal/gevent/patch.py b/ddtrace/contrib/internal/gevent/patch.py index 1c1cad5ebea..6452370c338 100644 --- a/ddtrace/contrib/internal/gevent/patch.py +++ b/ddtrace/contrib/internal/gevent/patch.py @@ -19,7 +19,7 @@ def get_version(): def _supported_versions() -> Dict[str, str]: - return {"gevent": ">=20.12"} + return {"gevent": ">=21.1.2"} def patch(): diff --git a/ddtrace/contrib/internal/mongoengine/__init__.py b/ddtrace/contrib/internal/mongoengine/__init__.py deleted file mode 100644 index a72c861f4b7..00000000000 --- a/ddtrace/contrib/internal/mongoengine/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -"""Instrument mongoengine to report MongoDB queries. - -``import ddtrace.auto`` will automatically patch your mongoengine connect method to make it work. -:: - - from ddtrace import patch - from ddtrace.trace import Pin - import mongoengine - - # If not patched yet, you can patch mongoengine specifically - patch(mongoengine=True) - - # At that point, mongoengine is instrumented with the default settings - mongoengine.connect('db', alias='default') - - # Use a pin to specify metadata related to this client - client = mongoengine.connect('db', alias='master') - Pin.override(client, service="mongo-master") -""" diff --git a/ddtrace/contrib/internal/mongoengine/patch.py b/ddtrace/contrib/internal/mongoengine/patch.py deleted file mode 100644 index 550d1e83199..00000000000 --- a/ddtrace/contrib/internal/mongoengine/patch.py +++ /dev/null @@ -1,38 +0,0 @@ -# TODO(mabdinur): Remove the pymongoengine integration, this integration does nothing special -# it just uses the pymongo integration and creates unnecessary pin objects -from typing import Dict - -import mongoengine - -from ..pymongo.patch import patch as patch_pymongo_module -from ..pymongo.patch import unpatch as unpatch_pymongo_module -from .trace import WrappedConnect - - -# Original connect function -_connect = mongoengine.connect - - -def get_version(): - # type: () -> str - return getattr(mongoengine, "__version__", "") - - -def _supported_versions() -> Dict[str, str]: - return {"mongoengine": ">=0.23"} - - -def patch(): - if getattr(mongoengine, "_datadog_patch", False): - return - mongoengine.connect = WrappedConnect(_connect) - mongoengine._datadog_patch = True - patch_pymongo_module() - - -def unpatch(): - if not getattr(mongoengine, "_datadog_patch", False): - return - mongoengine.connect = _connect - mongoengine._datadog_patch = False - unpatch_pymongo_module() diff --git a/ddtrace/contrib/internal/mongoengine/trace.py b/ddtrace/contrib/internal/mongoengine/trace.py deleted file mode 100644 index e3deee0e4a4..00000000000 --- a/ddtrace/contrib/internal/mongoengine/trace.py +++ /dev/null @@ -1,38 +0,0 @@ -# 3p -# project -import wrapt - -from ddtrace._trace.pin import Pin - -# keep the TracedMongoClient import to avoid breaking the public api -from ddtrace.contrib.internal.pymongo.client import TracedMongoClient # noqa: F401 -from ddtrace.ext import mongo as mongox -from ddtrace.internal.schema import schematize_service_name - - -# TODO(Benjamin): we should instrument register_connection instead, because more generic -# We should also extract the "alias" attribute and set it as a meta -_SERVICE = schematize_service_name(mongox.SERVICE) - - -# TODO(mabdinur): Remove this class when ``ddtrace.contrib.mongoengine.trace`` is removed -class WrappedConnect(wrapt.ObjectProxy): - """WrappedConnect wraps mongoengines 'connect' function to ensure - that all returned connections are wrapped for tracing. - """ - - def __init__(self, connect): - super(WrappedConnect, self).__init__(connect) - Pin(_SERVICE).onto(self) - - def __call__(self, *args, **kwargs): - client = self.__wrapped__(*args, **kwargs) - pin = Pin.get_from(self) - if pin: - tracer = pin.tracer - pp = Pin(service=pin.service) - if tracer is not None: - pp._tracer = tracer - pp.onto(client) - - return client diff --git a/ddtrace/contrib/internal/psycopg/patch.py b/ddtrace/contrib/internal/psycopg/patch.py index f9ae4669a98..1891e803e8a 100644 --- a/ddtrace/contrib/internal/psycopg/patch.py +++ b/ddtrace/contrib/internal/psycopg/patch.py @@ -76,8 +76,7 @@ def _psycopg_sql_injector(dbm_comment, sql_statement): ) -def get_version(): - # type: () -> str +def get_version() -> str: return "" @@ -85,11 +84,10 @@ def get_version(): def _supported_versions() -> Dict[str, str]: - return {"psycopg": ">=3.0.0", "psycopg2": ">=2.8.0"} + return {"psycopg": ">=3.0.0", "psycopg2": ">=2.9.10"} -def get_versions(): - # type: () -> List[str] +def get_versions() -> List[str]: return PATCHED_VERSIONS diff --git a/ddtrace/contrib/internal/pynamodb/patch.py b/ddtrace/contrib/internal/pynamodb/patch.py index 1d2eb8176a3..71ff07367d6 100644 --- a/ddtrace/contrib/internal/pynamodb/patch.py +++ b/ddtrace/contrib/internal/pynamodb/patch.py @@ -35,13 +35,12 @@ ) -def get_version(): - # type: () -> str +def get_version() -> str: return getattr(pynamodb, "__version__", "") def _supported_versions() -> Dict[str, str]: - return {"pynamodb": ">=5.0"} + return {"pynamodb": ">=5.5.1"} def patch(): diff --git a/ddtrace/contrib/internal/requests/patch.py b/ddtrace/contrib/internal/requests/patch.py index 8db2b85189d..57e4a4d6aae 100644 --- a/ddtrace/contrib/internal/requests/patch.py +++ b/ddtrace/contrib/internal/requests/patch.py @@ -31,13 +31,12 @@ Pin(_config=config.requests).onto(TracedSession) -def get_version(): - # type: () -> str +def get_version() -> str: return getattr(requests, "__version__", "") def _supported_versions() -> Dict[str, str]: - return {"requests": ">=2.20.0"} + return {"requests": ">=2.25.1"} def patch(): diff --git a/ddtrace/contrib/internal/snowflake/patch.py b/ddtrace/contrib/internal/snowflake/patch.py index bab4c6f06bc..4fc3f5b2973 100644 --- a/ddtrace/contrib/internal/snowflake/patch.py +++ b/ddtrace/contrib/internal/snowflake/patch.py @@ -29,8 +29,7 @@ ) -def get_version(): - # type: () -> str +def get_version() -> str: try: import snowflake.connector as c except AttributeError: @@ -41,7 +40,7 @@ def get_version(): def _supported_versions() -> Dict[str, str]: - return {"snowflake": ">=2.3.0"} + return {"snowflake": ">=2.4.6"} class _SFTracedCursor(TracedCursor): diff --git a/ddtrace/ext/cassandra.py b/ddtrace/ext/cassandra.py deleted file mode 100644 index d510897d12d..00000000000 --- a/ddtrace/ext/cassandra.py +++ /dev/null @@ -1,6 +0,0 @@ -# tags -CLUSTER = "cassandra.cluster" -KEYSPACE = "cassandra.keyspace" -CONSISTENCY_LEVEL = "cassandra.consistency_level" -PAGINATED = "cassandra.paginated" -PAGE_NUMBER = "cassandra.page_number" diff --git a/ddtrace/internal/compat.py b/ddtrace/internal/compat.py index aaa4b8fd358..a9067b36170 100644 --- a/ddtrace/internal/compat.py +++ b/ddtrace/internal/compat.py @@ -74,11 +74,11 @@ def ip_is_global(ip: str) -> bool: return parsed_ip.is_global +# This fix was implemented in 3.9.8 +# https://github.com/python/cpython/issues/83860 if PYTHON_VERSION_INFO >= (3, 9, 8): from functools import singledispatchmethod else: - # This fix was not backported to 3.8 - # https://github.com/python/cpython/issues/83860 from functools import singledispatchmethod def _register(self, cls, method=None): diff --git a/ddtrace/internal/coverage/instrumentation.py b/ddtrace/internal/coverage/instrumentation.py index 503f902ed9d..be58152e961 100644 --- a/ddtrace/internal/coverage/instrumentation.py +++ b/ddtrace/internal/coverage/instrumentation.py @@ -11,5 +11,4 @@ elif sys.version_info >= (3, 10): from ddtrace.internal.coverage.instrumentation_py3_10 import instrument_all_lines # noqa else: - # Python 3.8 and 3.9 use the same instrumentation - from ddtrace.internal.coverage.instrumentation_py3_8 import instrument_all_lines # noqa + from ddtrace.internal.coverage.instrumentation_py3_9 import instrument_all_lines # noqa diff --git a/ddtrace/internal/coverage/instrumentation_py3_8.py b/ddtrace/internal/coverage/instrumentation_py3_8.py deleted file mode 100644 index 59cc2841137..00000000000 --- a/ddtrace/internal/coverage/instrumentation_py3_8.py +++ /dev/null @@ -1,390 +0,0 @@ -from abc import ABC -import dis -from enum import Enum -import sys -from types import CodeType -import typing as t - -from ddtrace.internal.bytecode_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 -# NOTE: the "prettier" one-liner version (eg: assert (3,11) <= sys.version_info < (3,12)) does not work for mypy -# NOTE: Python 3.8 and 3.9 use the same instrumentation -assert sys.version_info < (3, 10) # nosec - - -class JumpDirection(int, Enum): - FORWARD = 1 - BACKWARD = -1 - - @classmethod - def from_opcode(cls, opcode: int) -> "JumpDirection": - return cls.BACKWARD if "BACKWARD" in dis.opname[opcode] else cls.FORWARD - - -class Jump(ABC): - # NOTE: in Python 3.9, jump arguments are offsets, vs instruction numbers (ie offsets/2) in Python 3.10 - def __init__(self, start: int, arg: int) -> None: - self.start = start - self.end: int - self.arg = arg - - -class AJump(Jump): - __opcodes__ = set(dis.hasjabs) - - def __init__(self, start: int, arg: int) -> None: - super().__init__(start, arg) - self.end = self.arg - - -class RJump(Jump): - __opcodes__ = set(dis.hasjrel) - - def __init__(self, start: int, arg: int, direction: JumpDirection) -> None: - super().__init__(start, arg) - self.direction = direction - self.end = start + (self.arg) * self.direction + 2 - - -class Instruction: - __slots__ = ("offset", "opcode", "arg", "targets") - - def __init__(self, offset: int, opcode: int, arg: int) -> None: - self.offset = offset - self.opcode = opcode - self.arg = arg - self.targets: t.List["Branch"] = [] - - -class Branch(ABC): - def __init__(self, start: Instruction, end: Instruction) -> None: - self.start = start - self.end = end - - @property - def arg(self) -> int: - raise NotImplementedError - - -class RBranch(Branch): - @property - def arg(self) -> int: - return abs(self.end.offset - self.start.offset - 2) >> 1 - - -class ABranch(Branch): - @property - def arg(self) -> int: - return self.end.offset >> 1 - - -EXTENDED_ARG = dis.EXTENDED_ARG -NO_OFFSET = -1 - - -def instr_with_arg(opcode: int, arg: int) -> t.List[Instruction]: - instructions = [Instruction(-1, opcode, arg & 0xFF)] - arg >>= 8 - while arg: - instructions.insert(0, Instruction(NO_OFFSET, EXTENDED_ARG, arg & 0xFF)) - arg >>= 8 - return instructions - - -def update_location_data( - code: CodeType, trap_map: t.Dict[int, int], ext_arg_offsets: t.List[t.Tuple[int, int]] -) -> bytes: - # Some code objects do not have co_lnotab data (eg: certain lambdas) - if code.co_lnotab == b"": - return code.co_lnotab - - # DEV: We expect the original offsets in the trap_map - new_data = bytearray() - data = code.co_lnotab - - ext_arg_offset_iter = iter(sorted(ext_arg_offsets)) - ext_arg_offset, ext_arg_size = next(ext_arg_offset_iter, (None, None)) - - current_orig_offset = 0 # Cumulative offset used to compare against trap offsets - - # All instructions have to have line numbers, so the first instructions of the trap call must mark the beginning of - # the line. The subsequent offsets need to be incremented by the size of the trap call instructions plus any - # extended args. - - # Set the first trap size: - current_new_offset = accumulated_new_offset = trap_map[0] << 1 - - for i in range(0, len(data), 2): - orig_offset_delta = data[i] - line_delta = data[i + 1] - - # For each original offset, we compute how many offsets have been added in the new code, this includes: - # - the size of the trap at the previous offset - # - the amount of extended args added since the previous offset - - current_new_offset += orig_offset_delta - current_orig_offset += orig_offset_delta - accumulated_new_offset += orig_offset_delta - - # If the current offset is 255, just increment: - if orig_offset_delta == 255: - continue - - # If the current offset is 0, it means we are only incrementing the amount of lines jumped by the previous - # non-zero offset - if orig_offset_delta == 0: - new_data.append(0) - new_data.append(line_delta) - continue - - while ext_arg_offset is not None and ext_arg_size is not None and current_new_offset > ext_arg_offset: - accumulated_new_offset += ext_arg_size << 1 - current_new_offset += ext_arg_size << 1 - ext_arg_offset, ext_arg_size = next(ext_arg_offset_iter, (None, None)) - - # If the current line delta changes, flush accumulated data: - if line_delta != 0: - while accumulated_new_offset > 255: - new_data.append(255) - new_data.append(0) - accumulated_new_offset -= 255 - - new_data.append(accumulated_new_offset) - new_data.append(line_delta) - - # Also add the current trap size to the accumulated offset - accumulated_new_offset = trap_map[current_orig_offset] << 1 - current_new_offset += accumulated_new_offset - - return bytes(new_data) - - -LOAD_CONST = dis.opmap["LOAD_CONST"] -CALL = dis.opmap["CALL_FUNCTION"] -POP_TOP = dis.opmap["POP_TOP"] -IMPORT_NAME = dis.opmap["IMPORT_NAME"] -IMPORT_FROM = dis.opmap["IMPORT_FROM"] - - -def trap_call(trap_index: int, arg_index: int) -> t.Tuple[Instruction, ...]: - return ( - *instr_with_arg(LOAD_CONST, trap_index), - *instr_with_arg(LOAD_CONST, arg_index), - Instruction(NO_OFFSET, CALL, 1), - Instruction(NO_OFFSET, POP_TOP, 0), - ) - - -def instrument_all_lines(code: CodeType, hook: HookType, path: str, package: str) -> t.Tuple[CodeType, CoverageLines]: - # TODO[perf]: Check if we really need to << and >> everywhere - trap_func, trap_arg = hook, path - - instructions: t.List[Instruction] = [] - - new_consts = list(code.co_consts) - trap_index = len(new_consts) - new_consts.append(trap_func) - - seen_lines = CoverageLines() - - offset_map = {} - - # Collect all the original jumps - jumps: t.Dict[int, Jump] = {} - traps: t.Dict[int, int] = {} # DEV: This uses the original offsets - line_map = {} - line_starts = dict(dis.findlinestarts(code)) - - # The previous two arguments are kept in order to track the depth of the IMPORT_NAME - # For example, from ...package import module - current_arg: int = 0 - previous_arg: int = 0 - previous_previous_arg: int = 0 - current_import_name: t.Optional[str] = None - current_import_package: t.Optional[str] = None - - try: - code_iter = iter(enumerate(code.co_code)) - ext: list[int] = [] - while True: - original_offset, opcode = next(code_iter) - - if original_offset in line_starts: - # Inject trap call at the beginning of the line. Keep track - # of location and size of the trap call instructions. We - # need this to adjust the location table. - line = line_starts[original_offset] - trap_instructions = trap_call(trap_index, len(new_consts)) - traps[original_offset] = len(trap_instructions) - instructions.extend(trap_instructions) - - # Make sure that the current module is marked as depending on its own package by instrumenting the - # first executable line - package_dep = None - if code.co_name == "" and len(new_consts) == len(code.co_consts) + 1: - package_dep = (package, ("",)) - - new_consts.append((line, trap_arg, package_dep)) - - line_map[original_offset] = trap_instructions[0] - - seen_lines.add(line) - - _, arg = next(code_iter) - - offset = len(instructions) << 1 - - # Propagate code - instructions.append(Instruction(original_offset, opcode, arg)) - - if opcode is EXTENDED_ARG: - ext.append(arg) - continue - else: - previous_previous_arg = previous_arg - previous_arg = current_arg - current_arg = int.from_bytes([*ext, arg], "big", signed=False) - ext.clear() - - # Track imports names - if opcode == IMPORT_NAME: - import_depth = code.co_consts[previous_previous_arg] - current_import_name = code.co_names[current_arg] - # Adjust package name if the import is relative and a parent (ie: if depth is more than 1) - current_import_package = ( - ".".join(package.split(".")[: -import_depth + 1]) if import_depth > 1 else package - ) - new_consts[-1] = ( - new_consts[-1][0], - new_consts[-1][1], - (current_import_package, (current_import_name,)), - ) - - # Also track import from statements since it's possible that the "from" target is a module, eg: - # from my_package import my_module - # Since the package has not changed, we simply extend the previous import names with the new value - if opcode == IMPORT_FROM: - import_from_name = f"{current_import_name}.{code.co_names[current_arg]}" - new_consts[-1] = ( - new_consts[-1][0], - new_consts[-1][1], - (new_consts[-1][2][0], tuple(list(new_consts[-1][2][1]) + [import_from_name])), - ) - - # Collect branching instructions for processing - if opcode in AJump.__opcodes__: - jumps[offset] = AJump(original_offset, current_arg) - elif opcode in RJump.__opcodes__: - jumps[offset] = RJump(original_offset, current_arg, JumpDirection.from_opcode(opcode)) - - if opcode is EXTENDED_ARG: - ext.append(arg) - else: - ext.clear() - except StopIteration: - pass - - # Collect all the old jump start and end offsets - jump_targets = {_ for j in jumps.values() for _ in (j.start, j.end)} - - # Adjust all the offsets and map the old offsets to the new ones for the - # jumps - for index, instr in enumerate(instructions): - new_offset = index << 1 - if instr.offset in jump_targets: - offset_map[instr.offset] = new_offset - instr.offset = new_offset - - # Adjust all the jumps, neglecting any EXTENDED_ARGs for now - branches: t.List[Branch] = [] - for jump in jumps.values(): - new_start = offset_map[jump.start] - new_end = offset_map[jump.end] - - # If we are jumping at the beginning of a line, jump to the - # beginning of the trap call instead - target_instr = line_map.get(jump.end, instructions[new_end >> 1]) - branch: Branch = ( - RBranch(instructions[new_start >> 1], target_instr) - if isinstance(jump, RJump) - else ABranch(instructions[new_start >> 1], target_instr) - ) - target_instr.targets.append(branch) - - branches.append(branch) - - # Process all the branching instructions to adjust the arguments. We - # need to add EXTENDED_ARGs if the argument is too large. - process_branches = True - exts: t.List[t.Tuple[Instruction, int]] = [] - while process_branches: - process_branches = False - for branch in branches: - jump_instr = branch.start - new_arg = branch.arg << 1 # 3.9 uses offsets, not instruction numbers - jump_instr.arg = new_arg & 0xFF - new_arg >>= 8 - c = 0 - index = jump_instr.offset >> 1 - - # Update the argument of the branching instruction, adding - # EXTENDED_ARGs if needed - while new_arg: - if index and instructions[index - 1].opcode is EXTENDED_ARG: - index -= 1 - instructions[index].arg = new_arg & 0xFF - else: - ext_instr = Instruction(index << 1, EXTENDED_ARG, new_arg & 0xFF) - instructions.insert(index, ext_instr) - c += 1 - # If the jump instruction was a target of another jump, - # make the latest EXTENDED_ARG instruction the target - # of that jump. - if jump_instr.targets: - for target in jump_instr.targets: - if target.end is not jump_instr: - raise ValueError("Invalid target") - target.end = ext_instr - ext_instr.targets.extend(jump_instr.targets) - jump_instr.targets.clear() - new_arg >>= 8 - - # Check if we added any EXTENDED_ARGs because we would have to - # reprocess the branches. - # TODO[perf]: only reprocess the branches that are affected. - # However, this branch is not expected to be taken often. - if c: - exts.append((ext_instr, c)) - # Update the instruction offset from the point of insertion - # of the EXTENDED_ARGs - for instr_index, instr in enumerate(instructions[index + 1 :], index + 1): - instr.offset = instr_index << 1 - - process_branches = True - - # Create the new code object - new_code = bytearray() - for instr in instructions: - new_code.append(instr.opcode) - new_code.append(instr.arg) - - # Instrument nested code objects recursively - for original_offset, nested_code in enumerate(code.co_consts): - if isinstance(nested_code, CodeType): - new_consts[original_offset], nested_lines = instrument_all_lines(nested_code, trap_func, trap_arg, package) - seen_lines.update(nested_lines) - - ext_arg_offsets = [(instr.offset, s) for instr, s in exts] - - return ( - code.replace( - co_code=bytes(new_code), - co_consts=tuple(new_consts), - co_stacksize=code.co_stacksize + 4, # TODO: Compute the value! - co_lnotab=update_location_data(code, traps, ext_arg_offsets), - ), - seen_lines, - ) diff --git a/ddtrace/internal/coverage/instrumentation_py3_9.py b/ddtrace/internal/coverage/instrumentation_py3_9.py new file mode 100644 index 00000000000..05544187618 --- /dev/null +++ b/ddtrace/internal/coverage/instrumentation_py3_9.py @@ -0,0 +1,380 @@ +from abc import ABC +import dis +from enum import Enum +import sys + +# This is primarily to make mypy happy without having to nest the rest of this module behind a version check +# NOTE: the "prettier" one-liner version (eg: assert (3,11) <= sys.version_info < (3,12)) does not work for mypy +from types import CodeType +import typing as t + +from ddtrace.internal.bytecode_injection import HookType +from ddtrace.internal.test_visibility.coverage_lines import CoverageLines + + +if sys.version_info < (3, 10): + + class JumpDirection(int, Enum): + FORWARD = 1 + BACKWARD = -1 + + @classmethod + def from_opcode(cls, opcode: int) -> "JumpDirection": + return cls.BACKWARD if "BACKWARD" in dis.opname[opcode] else cls.FORWARD + + class Jump(ABC): + # NOTE: in Python 3.9, jump arguments are offsets, vs instruction numbers (ie offsets/2) in Python 3.10 + def __init__(self, start: int, arg: int) -> None: + self.start = start + self.end: int + self.arg = arg + + class AJump(Jump): + __opcodes__ = set(dis.hasjabs) + + def __init__(self, start: int, arg: int) -> None: + super().__init__(start, arg) + self.end = self.arg + + class RJump(Jump): + __opcodes__ = set(dis.hasjrel) + + def __init__(self, start: int, arg: int, direction: JumpDirection) -> None: + super().__init__(start, arg) + self.direction = direction + self.end = start + (self.arg) * self.direction + 2 + + class Instruction: + __slots__ = ("offset", "opcode", "arg", "targets") + + def __init__(self, offset: int, opcode: int, arg: int) -> None: + self.offset = offset + self.opcode = opcode + self.arg = arg + self.targets: t.List["Branch"] = [] + + class Branch(ABC): + def __init__(self, start: Instruction, end: Instruction) -> None: + self.start = start + self.end = end + + @property + def arg(self) -> int: + raise NotImplementedError + + class RBranch(Branch): + @property + def arg(self) -> int: + return abs(self.end.offset - self.start.offset - 2) >> 1 + + class ABranch(Branch): + @property + def arg(self) -> int: + return self.end.offset >> 1 + + EXTENDED_ARG = dis.EXTENDED_ARG + NO_OFFSET = -1 + + def instr_with_arg(opcode: int, arg: int) -> t.List[Instruction]: + instructions = [Instruction(-1, opcode, arg & 0xFF)] + arg >>= 8 + while arg: + instructions.insert(0, Instruction(NO_OFFSET, EXTENDED_ARG, arg & 0xFF)) + arg >>= 8 + return instructions + + def update_location_data( + code: CodeType, trap_map: t.Dict[int, int], ext_arg_offsets: t.List[t.Tuple[int, int]] + ) -> bytes: + # Some code objects do not have co_lnotab data (eg: certain lambdas) + if code.co_lnotab == b"": + return code.co_lnotab + + # DEV: We expect the original offsets in the trap_map + new_data = bytearray() + data = code.co_lnotab + + ext_arg_offset_iter = iter(sorted(ext_arg_offsets)) + ext_arg_offset, ext_arg_size = next(ext_arg_offset_iter, (None, None)) + + current_orig_offset = 0 # Cumulative offset used to compare against trap offsets + + # All instructions have to have line numbers, so the first instructions of the trap call must mark the + # beginning of the line. The subsequent offsets need to be incremented by the size of the trap call + # instructions plus any extended args. + + # Set the first trap size: + current_new_offset = accumulated_new_offset = trap_map[0] << 1 + + for i in range(0, len(data), 2): + orig_offset_delta = data[i] + line_delta = data[i + 1] + + # For each original offset, we compute how many offsets have been added in the new code, this includes: + # - the size of the trap at the previous offset + # - the amount of extended args added since the previous offset + + current_new_offset += orig_offset_delta + current_orig_offset += orig_offset_delta + accumulated_new_offset += orig_offset_delta + + # If the current offset is 255, just increment: + if orig_offset_delta == 255: + continue + + # If the current offset is 0, it means we are only incrementing the amount of lines jumped by the previous + # non-zero offset + if orig_offset_delta == 0: + new_data.append(0) + new_data.append(line_delta) + continue + + while ext_arg_offset is not None and ext_arg_size is not None and current_new_offset > ext_arg_offset: + accumulated_new_offset += ext_arg_size << 1 + current_new_offset += ext_arg_size << 1 + ext_arg_offset, ext_arg_size = next(ext_arg_offset_iter, (None, None)) + + # If the current line delta changes, flush accumulated data: + if line_delta != 0: + while accumulated_new_offset > 255: + new_data.append(255) + new_data.append(0) + accumulated_new_offset -= 255 + + new_data.append(accumulated_new_offset) + new_data.append(line_delta) + + # Also add the current trap size to the accumulated offset + accumulated_new_offset = trap_map[current_orig_offset] << 1 + current_new_offset += accumulated_new_offset + + return bytes(new_data) + + LOAD_CONST = dis.opmap["LOAD_CONST"] + CALL = dis.opmap["CALL_FUNCTION"] + POP_TOP = dis.opmap["POP_TOP"] + IMPORT_NAME = dis.opmap["IMPORT_NAME"] + IMPORT_FROM = dis.opmap["IMPORT_FROM"] + + def trap_call(trap_index: int, arg_index: int) -> t.Tuple[Instruction, ...]: + return ( + *instr_with_arg(LOAD_CONST, trap_index), + *instr_with_arg(LOAD_CONST, arg_index), + Instruction(NO_OFFSET, CALL, 1), + Instruction(NO_OFFSET, POP_TOP, 0), + ) + + def instrument_all_lines( + code: CodeType, hook: HookType, path: str, package: str + ) -> t.Tuple[CodeType, CoverageLines]: + # TODO[perf]: Check if we really need to << and >> everywhere + trap_func, trap_arg = hook, path + + instructions: t.List[Instruction] = [] + + new_consts = list(code.co_consts) + trap_index = len(new_consts) + new_consts.append(trap_func) + + seen_lines = CoverageLines() + + offset_map = {} + + # Collect all the original jumps + jumps: t.Dict[int, Jump] = {} + traps: t.Dict[int, int] = {} # DEV: This uses the original offsets + line_map = {} + line_starts = dict(dis.findlinestarts(code)) + + # The previous two arguments are kept in order to track the depth of the IMPORT_NAME + # For example, from ...package import module + current_arg: int = 0 + previous_arg: int = 0 + previous_previous_arg: int = 0 + current_import_name: t.Optional[str] = None + current_import_package: t.Optional[str] = None + + try: + code_iter = iter(enumerate(code.co_code)) + ext: list[int] = [] + while True: + original_offset, opcode = next(code_iter) + + if original_offset in line_starts: + # Inject trap call at the beginning of the line. Keep track + # of location and size of the trap call instructions. We + # need this to adjust the location table. + line = line_starts[original_offset] + trap_instructions = trap_call(trap_index, len(new_consts)) + traps[original_offset] = len(trap_instructions) + instructions.extend(trap_instructions) + + # Make sure that the current module is marked as depending on its own package by instrumenting the + # first executable line + package_dep = None + if code.co_name == "" and len(new_consts) == len(code.co_consts) + 1: + package_dep = (package, ("",)) + + new_consts.append((line, trap_arg, package_dep)) + + line_map[original_offset] = trap_instructions[0] + + seen_lines.add(line) + + _, arg = next(code_iter) + + offset = len(instructions) << 1 + + # Propagate code + instructions.append(Instruction(original_offset, opcode, arg)) + + if opcode is EXTENDED_ARG: + ext.append(arg) + continue + else: + previous_previous_arg = previous_arg + previous_arg = current_arg + current_arg = int.from_bytes([*ext, arg], "big", signed=False) + ext.clear() + + # Track imports names + if opcode == IMPORT_NAME: + import_depth = code.co_consts[previous_previous_arg] + current_import_name = code.co_names[current_arg] + # Adjust package name if the import is relative and a parent (ie: if depth is more than 1) + current_import_package = ( + ".".join(package.split(".")[: -import_depth + 1]) if import_depth > 1 else package + ) + new_consts[-1] = ( + new_consts[-1][0], + new_consts[-1][1], + (current_import_package, (current_import_name,)), + ) + + # Also track import from statements since it's possible that the "from" target is a module, eg: + # from my_package import my_module + # Since the package has not changed, we simply extend the previous import names with the new value + if opcode == IMPORT_FROM: + import_from_name = f"{current_import_name}.{code.co_names[current_arg]}" + new_consts[-1] = ( + new_consts[-1][0], + new_consts[-1][1], + (new_consts[-1][2][0], tuple(list(new_consts[-1][2][1]) + [import_from_name])), + ) + + # Collect branching instructions for processing + if opcode in AJump.__opcodes__: + jumps[offset] = AJump(original_offset, current_arg) + elif opcode in RJump.__opcodes__: + jumps[offset] = RJump(original_offset, current_arg, JumpDirection.from_opcode(opcode)) + + if opcode is EXTENDED_ARG: + ext.append(arg) + else: + ext.clear() + except StopIteration: + pass + + # Collect all the old jump start and end offsets + jump_targets = {_ for j in jumps.values() for _ in (j.start, j.end)} + + # Adjust all the offsets and map the old offsets to the new ones for the + # jumps + for index, instr in enumerate(instructions): + new_offset = index << 1 + if instr.offset in jump_targets: + offset_map[instr.offset] = new_offset + instr.offset = new_offset + + # Adjust all the jumps, neglecting any EXTENDED_ARGs for now + branches: t.List[Branch] = [] + for jump in jumps.values(): + new_start = offset_map[jump.start] + new_end = offset_map[jump.end] + + # If we are jumping at the beginning of a line, jump to the + # beginning of the trap call instead + target_instr = line_map.get(jump.end, instructions[new_end >> 1]) + branch: Branch = ( + RBranch(instructions[new_start >> 1], target_instr) + if isinstance(jump, RJump) + else ABranch(instructions[new_start >> 1], target_instr) + ) + target_instr.targets.append(branch) + + branches.append(branch) + + # Process all the branching instructions to adjust the arguments. We + # need to add EXTENDED_ARGs if the argument is too large. + process_branches = True + exts: t.List[t.Tuple[Instruction, int]] = [] + while process_branches: + process_branches = False + for branch in branches: + jump_instr = branch.start + new_arg = branch.arg << 1 # 3.9 uses offsets, not instruction numbers + jump_instr.arg = new_arg & 0xFF + new_arg >>= 8 + c = 0 + index = jump_instr.offset >> 1 + + # Update the argument of the branching instruction, adding + # EXTENDED_ARGs if needed + while new_arg: + if index and instructions[index - 1].opcode is EXTENDED_ARG: + index -= 1 + instructions[index].arg = new_arg & 0xFF + else: + ext_instr = Instruction(index << 1, EXTENDED_ARG, new_arg & 0xFF) + instructions.insert(index, ext_instr) + c += 1 + # If the jump instruction was a target of another jump, + # make the latest EXTENDED_ARG instruction the target + # of that jump. + if jump_instr.targets: + for target in jump_instr.targets: + if target.end is not jump_instr: + raise ValueError("Invalid target") + target.end = ext_instr + ext_instr.targets.extend(jump_instr.targets) + jump_instr.targets.clear() + new_arg >>= 8 + + # Check if we added any EXTENDED_ARGs because we would have to + # reprocess the branches. + # TODO[perf]: only reprocess the branches that are affected. + # However, this branch is not expected to be taken often. + if c: + exts.append((ext_instr, c)) + # Update the instruction offset from the point of insertion + # of the EXTENDED_ARGs + for instr_index, instr in enumerate(instructions[index + 1 :], index + 1): + instr.offset = instr_index << 1 + + process_branches = True + + # Create the new code object + new_code = bytearray() + for instr in instructions: + new_code.append(instr.opcode) + new_code.append(instr.arg) + + # Instrument nested code objects recursively + for original_offset, nested_code in enumerate(code.co_consts): + if isinstance(nested_code, CodeType): + new_consts[original_offset], nested_lines = instrument_all_lines( + nested_code, trap_func, trap_arg, package + ) + seen_lines.update(nested_lines) + + ext_arg_offsets = [(instr.offset, s) for instr, s in exts] + + return ( + code.replace( + co_code=bytes(new_code), + co_consts=tuple(new_consts), + co_stacksize=code.co_stacksize + 4, # TODO: Compute the value! + co_lnotab=update_location_data(code, traps, ext_arg_offsets), + ), + seen_lines, + ) diff --git a/ddtrace/internal/datadog/profiling/ddup/CMakeLists.txt b/ddtrace/internal/datadog/profiling/ddup/CMakeLists.txt index dbe4395cc16..1b111633968 100644 --- a/ddtrace/internal/datadog/profiling/ddup/CMakeLists.txt +++ b/ddtrace/internal/datadog/profiling/ddup/CMakeLists.txt @@ -57,10 +57,6 @@ add_library(${EXTENSION_NAME} SHARED ${DDUP_CPP_SRC}) add_ddup_config(${EXTENSION_NAME}) # Cython generates code that produces errors for the following, so relax compile options target_compile_options(${EXTENSION_NAME} PRIVATE -Wno-old-style-cast -Wno-shadow -Wno-address) -# tp_print is marked deprecated in Python 3.8, but cython still generates code using it -if("${Python3_VERSION_MINOR}" STREQUAL "8") - target_compile_options(${EXTENSION_NAME} PRIVATE -Wno-deprecated-declarations) -endif() # cmake may mutate the name of the library (e.g., lib- and -.so for dynamic libraries). This suppresses that behavior, # which is required to ensure all paths can be inferred correctly by setup.py. diff --git a/ddtrace/internal/runtime/constants.py b/ddtrace/internal/runtime/constants.py index 78b9c5e032f..41b7edb8cd2 100644 --- a/ddtrace/internal/runtime/constants.py +++ b/ddtrace/internal/runtime/constants.py @@ -18,6 +18,7 @@ ) DEFAULT_RUNTIME_METRICS = GC_RUNTIME_METRICS | PSUTIL_RUNTIME_METRICS +DEFAULT_RUNTIME_METRICS_INTERVAL = 10 SERVICE = "service" ENV = "env" diff --git a/ddtrace/internal/runtime/runtime_metrics.py b/ddtrace/internal/runtime/runtime_metrics.py index 124b97ae262..c541b333748 100644 --- a/ddtrace/internal/runtime/runtime_metrics.py +++ b/ddtrace/internal/runtime/runtime_metrics.py @@ -1,5 +1,4 @@ import itertools -import os from typing import ClassVar # noqa:F401 from typing import List # noqa:F401 from typing import Optional # noqa:F401 @@ -8,13 +7,13 @@ from ddtrace.internal import atexit from ddtrace.internal import forksafe from ddtrace.internal.constants import EXPERIMENTAL_FEATURES -from ddtrace.vendor.debtcollector import deprecate from ddtrace.vendor.dogstatsd import DogStatsd from .. import periodic from ..dogstatsd import get_dogstatsd_client from ..logger import get_logger from .constants import DEFAULT_RUNTIME_METRICS +from .constants import DEFAULT_RUNTIME_METRICS_INTERVAL from .metric_collectors import GCRuntimeMetricCollector from .metric_collectors import PSUtilRuntimeMetricCollector from .tag_collectors import PlatformTagCollector @@ -68,25 +67,14 @@ class RuntimeMetrics(RuntimeCollectorsIterable): ] -def _get_interval_or_default(): - if "DD_RUNTIME_METRICS_INTERVAL" in os.environ: - deprecate( - "`DD_RUNTIME_METRICS_INTERVAL` is deprecated and will be removed in a future version.", - removal_version="4.0.0", - ) - return float(os.getenv("DD_RUNTIME_METRICS_INTERVAL", default=10)) - - class RuntimeWorker(periodic.PeriodicService): - """Worker thread for collecting and writing runtime metrics to a DogStatsd - client. - """ + """Worker thread for collecting and writing runtime metrics to a DogStatsd client.""" enabled = False _instance = None # type: ClassVar[Optional[RuntimeWorker]] _lock = forksafe.Lock() - def __init__(self, interval=_get_interval_or_default(), tracer=None, dogstatsd_url=None) -> None: + def __init__(self, interval=DEFAULT_RUNTIME_METRICS_INTERVAL, tracer=None, dogstatsd_url=None) -> None: super().__init__(interval=interval) self.dogstatsd_url: Optional[str] = dogstatsd_url self._dogstatsd_client: DogStatsd = get_dogstatsd_client( @@ -107,8 +95,7 @@ def __init__(self, interval=_get_interval_or_default(), tracer=None, dogstatsd_u self._platform_tags = self._format_tags(PlatformTags()) @classmethod - def disable(cls): - # type: () -> None + def disable(cls) -> None: with cls._lock: if cls._instance is None: return @@ -134,14 +121,15 @@ def _restart(cls): cls.enable() @classmethod - def enable(cls, flush_interval=None, tracer=None, dogstatsd_url=None): - # type: (Optional[float], Optional[ddtrace.trace.Tracer], Optional[str]) -> None + def enable( + cls, + tracer: Optional[ddtrace.trace.Tracer] = None, + dogstatsd_url: Optional[str] = None, + ) -> None: with cls._lock: if cls._instance is not None: return - if flush_interval is None: - flush_interval = _get_interval_or_default() - runtime_worker = cls(flush_interval, tracer, dogstatsd_url) + runtime_worker = cls(DEFAULT_RUNTIME_METRICS_INTERVAL, tracer, dogstatsd_url) runtime_worker.start() forksafe.register(cls._restart) @@ -150,8 +138,7 @@ def enable(cls, flush_interval=None, tracer=None, dogstatsd_url=None): cls._instance = runtime_worker cls.enabled = True - def flush(self): - # type: () -> None + def flush(self) -> None: # Ensure runtime metrics have up-to-date tags (ex: service, env, version) rumtime_tags = self._format_tags(TracerTags()) + self._platform_tags log.debug("Sending runtime metrics with the following tags: %s", rumtime_tags) @@ -162,11 +149,6 @@ def flush(self): log.debug("Sending ddtrace runtime metric %s:%s", key, value) self.send_metric(key, value) - def _stop_service(self): - # type: (...) -> None - # De-register span hook - super(RuntimeWorker, self)._stop_service() - def _format_tags(self, tags: RuntimeCollectorsIterable) -> List[str]: # DEV: ddstatsd expects tags in the form ['key1:value1', 'key2:value2', ...] return ["{}:{}".format(k, v) for k, v in tags] diff --git a/ddtrace/opentracer/__init__.py b/ddtrace/opentracer/__init__.py deleted file mode 100644 index 815cdae0022..00000000000 --- a/ddtrace/opentracer/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -from ddtrace.vendor.debtcollector import deprecate - -from .helpers import set_global_tracer -from .tracer import Tracer - - -deprecate( - "The `ddtrace.opentracer` package is deprecated", - message="The ddtrace library no longer supports the OpenTracing API. " - "Use the OpenTelemetry API instead (`ddtrace.opentelemetry`).", - removal_version="4.0.0", -) - - -__all__ = [ - "Tracer", - "set_global_tracer", -] diff --git a/ddtrace/opentracer/helpers.py b/ddtrace/opentracer/helpers.py deleted file mode 100644 index e8e6c4896a4..00000000000 --- a/ddtrace/opentracer/helpers.py +++ /dev/null @@ -1,25 +0,0 @@ -from typing import TYPE_CHECKING - -import opentracing - -import ddtrace - - -if TYPE_CHECKING: # pragma: no cover - from ddtrace.opentracer import Tracer # noqa:F401 - - -""" -Helper routines for Datadog OpenTracing. -""" - - -def set_global_tracer(tracer): - # type: (Tracer) -> None - """Sets the global tracers to the given tracer.""" - - # overwrite the opentracer reference - opentracing.tracer = tracer - - # overwrite the Datadog tracer reference - ddtrace.tracer = tracer._dd_tracer diff --git a/ddtrace/opentracer/propagation/__init__.py b/ddtrace/opentracer/propagation/__init__.py deleted file mode 100644 index 04ddde7014d..00000000000 --- a/ddtrace/opentracer/propagation/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from .http import HTTPPropagator - - -__all__ = [ - "HTTPPropagator", -] diff --git a/ddtrace/opentracer/propagation/binary.py b/ddtrace/opentracer/propagation/binary.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/ddtrace/opentracer/propagation/http.py b/ddtrace/opentracer/propagation/http.py deleted file mode 100644 index 539f8dc2ebd..00000000000 --- a/ddtrace/opentracer/propagation/http.py +++ /dev/null @@ -1,74 +0,0 @@ -from typing import Dict # noqa:F401 - -from opentracing import InvalidCarrierException - -from ddtrace.propagation.http import HTTPPropagator as DDHTTPPropagator - -from ...internal.logger import get_logger -from ..span_context import SpanContext -from .propagator import Propagator - - -log = get_logger(__name__) - -_HTTP_BAGGAGE_PREFIX = "ot-baggage-" -_HTTP_BAGGAGE_PREFIX_LEN = len(_HTTP_BAGGAGE_PREFIX) - - -class HTTPPropagator(Propagator): - """OpenTracing compatible HTTP_HEADER and TEXT_MAP format propagator. - - `HTTPPropagator` provides compatibility by using existing OpenTracing - compatible methods from the ddtracer along with new logic supporting the - outstanding OpenTracing-defined functionality. - """ - - @staticmethod - def inject(span_context, carrier): - # type: (SpanContext, Dict[str, str]) -> None - """Inject a span context into a carrier. - - *span_context* is injected into the carrier by first using an - :class:`ddtrace.propagation.http.HTTPPropagator` to inject the ddtracer - specific fields. - - Then the baggage is injected into *carrier*. - - :param span_context: span context to inject. - - :param carrier: carrier to inject into. - """ - if not isinstance(carrier, dict): - raise InvalidCarrierException("propagator expects carrier to be a dict") - - DDHTTPPropagator.inject(span_context._dd_context, carrier) - - # Add the baggage - if span_context.baggage is not None: - for key in span_context.baggage: - carrier[_HTTP_BAGGAGE_PREFIX + key] = span_context.baggage[key] - - @staticmethod - def extract(carrier): - # type: (Dict[str, str]) -> SpanContext - """Extract a span context from a carrier. - - :class:`ddtrace.propagation.http.HTTPPropagator` is used to extract - ddtracer supported fields into a `ddtrace.Context` context which is - combined with new logic to extract the baggage which is returned in an - OpenTracing compatible span context. - - :param carrier: carrier to extract from. - - :return: extracted span context. - """ - if not isinstance(carrier, dict): - raise InvalidCarrierException("propagator expects carrier to be a dict") - - ddspan_ctx = DDHTTPPropagator.extract(carrier) - baggage = {} - for key in carrier: - if key.startswith(_HTTP_BAGGAGE_PREFIX): - baggage[key[_HTTP_BAGGAGE_PREFIX_LEN:]] = carrier[key] - - return SpanContext(ddcontext=ddspan_ctx, baggage=baggage) diff --git a/ddtrace/opentracer/propagation/propagator.py b/ddtrace/opentracer/propagation/propagator.py deleted file mode 100644 index 77eadf3912b..00000000000 --- a/ddtrace/opentracer/propagation/propagator.py +++ /dev/null @@ -1,13 +0,0 @@ -import abc - - -class Propagator(metaclass=abc.ABCMeta): - @staticmethod - @abc.abstractmethod - def inject(span_context, carrier): - pass - - @staticmethod - @abc.abstractmethod - def extract(carrier): - pass diff --git a/ddtrace/opentracer/propagation/text.py b/ddtrace/opentracer/propagation/text.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/ddtrace/opentracer/settings.py b/ddtrace/opentracer/settings.py deleted file mode 100644 index 944df88233b..00000000000 --- a/ddtrace/opentracer/settings.py +++ /dev/null @@ -1,41 +0,0 @@ -from collections import namedtuple -from typing import Any # noqa:F401 -from typing import Dict # noqa:F401 -from typing import List # noqa:F401 - - -# Keys used for the configuration dict -ConfigKeyNames = namedtuple( - "ConfigKeyNames", - [ - "AGENT_HOSTNAME", - "AGENT_HTTPS", - "AGENT_PORT", - "DEBUG", - "ENABLED", - "GLOBAL_TAGS", - "SAMPLER", - "PRIORITY_SAMPLING", - "UDS_PATH", - "SETTINGS", - ], -) - -ConfigKeys = ConfigKeyNames( - AGENT_HOSTNAME="agent_hostname", - AGENT_HTTPS="agent_https", - AGENT_PORT="agent_port", - DEBUG="debug", - ENABLED="enabled", - GLOBAL_TAGS="global_tags", - SAMPLER="sampler", - PRIORITY_SAMPLING="priority_sampling", - UDS_PATH="uds_path", - SETTINGS="settings", -) - - -def config_invalid_keys(config): - # type: (Dict[str, Any]) -> List[str] - """Returns a list of keys that exist in *config* and not in KEYS.""" - return [key for key in config.keys() if key not in ConfigKeys] diff --git a/ddtrace/opentracer/span.py b/ddtrace/opentracer/span.py deleted file mode 100644 index 3aea2eda580..00000000000 --- a/ddtrace/opentracer/span.py +++ /dev/null @@ -1,197 +0,0 @@ -import threading -from typing import TYPE_CHECKING # noqa:F401 -from typing import Any # noqa:F401 -from typing import Dict # noqa:F401 -from typing import Optional # noqa:F401 -from typing import Text # noqa:F401 -from typing import Union # noqa:F401 - -from opentracing import Span as OpenTracingSpan -from opentracing.ext import tags as OTTags - -from ddtrace.constants import ERROR_MSG -from ddtrace.constants import ERROR_STACK -from ddtrace.constants import ERROR_TYPE -from ddtrace.internal.compat import NumericType # noqa:F401 -from ddtrace.internal.constants import SPAN_API_OPENTRACING -from ddtrace.trace import Context as DatadogContext # noqa:F401 -from ddtrace.trace import Span as DatadogSpan - -from .span_context import SpanContext -from .tags import Tags - - -if TYPE_CHECKING: # pragma: no cover - from ddtrace.trace import Tracer # noqa:F401 - - -_TagNameType = Union[Text, bytes] - - -class Span(OpenTracingSpan): - """Datadog implementation of :class:`opentracing.Span`""" - - def __init__(self, tracer, context, operation_name): - # type: (Tracer, Optional[SpanContext], str) -> None - if context is not None: - context = SpanContext(ddcontext=context._dd_context, baggage=context.baggage) - else: - context = SpanContext() - - super(Span, self).__init__(tracer, context) - - self.finished = False - self._lock = threading.Lock() - # use a datadog span - self._dd_span = DatadogSpan(operation_name, context=context._dd_context, span_api=SPAN_API_OPENTRACING) - - def finish(self, finish_time=None): - # type: (Optional[float]) -> None - """Finish the span. - - This calls finish on the ddspan. - - :param finish_time: specify a custom finish time with a unix timestamp - per time.time() - :type timestamp: float - """ - if self.finished: - return - - # finish the datadog span - self._dd_span.finish(finish_time) - self.finished = True - - def set_baggage_item(self, key, value): - # type: (str, Any) -> Span - """Sets a baggage item in the span context of this span. - - Baggage is used to propagate state between spans. - - :param key: baggage item key - :type key: str - - :param value: baggage item value - :type value: a type that can be str'd - - :rtype: Span - :return: itself for chaining calls - """ - new_ctx = self.context.with_baggage_item(key, value) - with self._lock: - self._context = new_ctx - return self - - def get_baggage_item(self, key): - # type: (str) -> Optional[str] - """Gets a baggage item from the span context of this span. - - :param key: baggage item key - :type key: str - - :rtype: str - :return: the baggage value for the given key or ``None``. - """ - return self.context.get_baggage_item(key) - - def set_operation_name(self, operation_name): - # type: (str) -> Span - """Set the operation name.""" - self._dd_span.name = operation_name - return self - - def log_kv(self, key_values, timestamp=None): - # type: (Dict[_TagNameType, Any], Optional[float]) -> Span - """Add a log record to this span. - - Passes on relevant opentracing key values onto the datadog span. - - :param key_values: a dict of string keys and values of any type - :type key_values: dict - - :param timestamp: a unix timestamp per time.time() - :type timestamp: float - - :return: the span itself, for call chaining - :rtype: Span - """ - - # match opentracing defined keys to datadog functionality - # opentracing/specification/blob/1be630515dafd4d2a468d083300900f89f28e24d/semantic_conventions.md#log-fields-table # noqa: E501 - for key, val in key_values.items(): - if key == "event" and val == "error": - # TODO: not sure if it's actually necessary to set the error manually - self._dd_span.error = 1 - self.set_tag("error", 1) - elif key == "error" or key == "error.object": - self.set_tag(ERROR_TYPE, val) - elif key == "message": - self.set_tag(ERROR_MSG, val) - elif key == "stack": - self.set_tag(ERROR_STACK, val) - else: - pass - - return self - - def set_tag(self, key, value): - # type: (_TagNameType, Any) -> Span - """Set a tag on the span. - - This sets the tag on the underlying datadog span. - """ - if key == Tags.SPAN_TYPE: - self._dd_span.span_type = value - elif key == Tags.SERVICE_NAME: - self._dd_span.service = value - elif key == Tags.RESOURCE_NAME or key == OTTags.DATABASE_STATEMENT: - self._dd_span.resource = value - elif key == OTTags.PEER_HOSTNAME: - self._dd_span._set_tag_str(Tags.TARGET_HOST, value) - elif key == OTTags.PEER_PORT: - self._dd_span.set_tag(Tags.TARGET_PORT, value) - elif key == Tags.SAMPLING_PRIORITY: - self._dd_span.context.sampling_priority = value - else: - self._dd_span.set_tag(key, value) - return self - - def _get_tag(self, key): - # type: (_TagNameType) -> Optional[Text] - """Gets a tag from the span. - - This method retrieves the tag from the underlying datadog span. - """ - return self._dd_span.get_tag(key) - - def _get_metric(self, key): - # type: (_TagNameType) -> Optional[NumericType] - """Gets a metric from the span. - - This method retrieves the metric from the underlying datadog span. - """ - return self._dd_span.get_metric(key) - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - if exc_type: - self._dd_span.set_exc_info(exc_type, exc_val, exc_tb) - - # note: self.finish() AND _dd_span.__exit__ will call _span.finish() but - # it is idempotent - self._dd_span.__exit__(exc_type, exc_val, exc_tb) - self.finish() - - def _associate_dd_span(self, ddspan): - # type: (DatadogSpan) -> None - """Associates a DD span with this span.""" - # get the datadog span context - self._dd_span = ddspan - self.context._dd_context = ddspan.context - - @property - def _dd_context(self): - # type: () -> DatadogContext - return self._dd_span.context diff --git a/ddtrace/opentracer/span_context.py b/ddtrace/opentracer/span_context.py deleted file mode 100644 index 171142d18a8..00000000000 --- a/ddtrace/opentracer/span_context.py +++ /dev/null @@ -1,66 +0,0 @@ -from typing import Any # noqa:F401 -from typing import Dict # noqa:F401 -from typing import Optional # noqa:F401 - -from opentracing import SpanContext as OpenTracingSpanContext - -from ddtrace.internal.compat import NumericType # noqa:F401 -from ddtrace.trace import Context as DatadogContext - - -class SpanContext(OpenTracingSpanContext): - """Implementation of the OpenTracing span context.""" - - def __init__( - self, - trace_id=None, # type: Optional[int] - span_id=None, # type: Optional[int] - sampling_priority=None, # type: Optional[NumericType] - baggage=None, # type: Optional[Dict[str, Any]] - ddcontext=None, # type: Optional[DatadogContext] - ): - # type: (...) -> None - # create a new dict for the baggage if it is not provided - # NOTE: it would be preferable to use opentracing.SpanContext.EMPTY_BAGGAGE - # but it is mutable. - # see: opentracing-python/blob/8775c7bfc57fd66e1c8bcf9a54d3e434d37544f9/opentracing/span.py#L30 - baggage = baggage or {} - - if ddcontext is not None: - self._dd_context = ddcontext - else: - self._dd_context = DatadogContext( - trace_id=trace_id, - span_id=span_id, - sampling_priority=sampling_priority, - ) - - self._baggage = dict(baggage) - - @property - def baggage(self): - # type: () -> Dict[str, Any] - return self._baggage - - def set_baggage_item(self, key, value): - # type: (str, Any) -> None - """Sets a baggage item in this span context. - - Note that this operation mutates the baggage of this span context - """ - self.baggage[key] = value - - def with_baggage_item(self, key, value): - # type: (str, Any) -> SpanContext - """Returns a copy of this span with a new baggage item. - - Useful for instantiating new child span contexts. - """ - baggage = dict(self._baggage) - baggage[key] = value - return SpanContext(ddcontext=self._dd_context, baggage=baggage) - - def get_baggage_item(self, key): - # type: (str) -> Optional[Any] - """Gets a baggage item in this span context.""" - return self.baggage.get(key, None) diff --git a/ddtrace/opentracer/tags.py b/ddtrace/opentracer/tags.py deleted file mode 100644 index ebc2d86d146..00000000000 --- a/ddtrace/opentracer/tags.py +++ /dev/null @@ -1,23 +0,0 @@ -from collections import namedtuple - - -TagNames = namedtuple( - "TagNames", - [ - "RESOURCE_NAME", - "SAMPLING_PRIORITY", - "SERVICE_NAME", - "SPAN_TYPE", - "TARGET_HOST", - "TARGET_PORT", - ], -) - -Tags = TagNames( - RESOURCE_NAME="resource.name", - SAMPLING_PRIORITY="sampling.priority", - SERVICE_NAME="service.name", - TARGET_HOST="out.host", - TARGET_PORT="network.destination.port", - SPAN_TYPE="span.type", -) diff --git a/ddtrace/opentracer/tracer.py b/ddtrace/opentracer/tracer.py deleted file mode 100644 index a783d3263dc..00000000000 --- a/ddtrace/opentracer/tracer.py +++ /dev/null @@ -1,399 +0,0 @@ -from typing import Any # noqa:F401 -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 urllib.parse import urlparse - -import opentracing -from opentracing import Format -from opentracing import Scope # noqa:F401 -from opentracing import ScopeManager # noqa:F401 -from opentracing.scope_managers import ThreadLocalScopeManager - -import ddtrace -from ddtrace import config as ddconfig -from ddtrace.internal.constants import SPAN_API_OPENTRACING -from ddtrace.internal.utils.config import get_application_name -from ddtrace.internal.writer import AgentWriterInterface -from ddtrace.settings.exceptions import ConfigException -from ddtrace.trace import Context as DatadogContext # noqa:F401 -from ddtrace.trace import Span as DatadogSpan -from ddtrace.trace import Tracer as DatadogTracer - -from ..internal.logger import get_logger -from .propagation import HTTPPropagator -from .settings import ConfigKeys as keys -from .settings import config_invalid_keys -from .span import Span -from .span_context import SpanContext -from .utils import get_context_provider_for_scope_manager - - -log = get_logger(__name__) - -DEFAULT_CONFIG: Dict[str, Optional[Any]] = { - keys.AGENT_HOSTNAME: None, - keys.AGENT_HTTPS: None, - keys.AGENT_PORT: None, - keys.DEBUG: False, - keys.ENABLED: None, - keys.GLOBAL_TAGS: {}, - keys.SAMPLER: None, - # Not used, priority sampling can not be disabled in +v3.0 - keys.PRIORITY_SAMPLING: None, - keys.UDS_PATH: None, - keys.SETTINGS: { - "FILTERS": [], - }, -} - - -class Tracer(opentracing.Tracer): - """A wrapper providing an OpenTracing API for the Datadog tracer.""" - - def __init__( - self, - service_name: Optional[str] = None, - config: Optional[Dict[str, Any]] = None, - scope_manager: Optional[ScopeManager] = None, - _dd_tracer: Optional[DatadogTracer] = None, - ) -> None: - """Initialize a new Datadog opentracer. - - :param service_name: (optional) the name of the service that this - tracer will be used with. Note if not provided, a service name will - try to be determined based off of ``sys.argv``. If this fails a - :class:`ddtrace.settings.ConfigException` will be raised. - :param config: (optional) a configuration object to specify additional - options. See the documentation for further information. - :param scope_manager: (optional) the scope manager for this tracer to - use. The available managers are listed in the Python OpenTracing repo - here: https://github.com/opentracing/opentracing-python#scope-managers. - If ``None`` is provided, defaults to - :class:`opentracing.scope_managers.ThreadLocalScopeManager`. - """ - # Merge the given config with the default into a new dict - self._config = DEFAULT_CONFIG.copy() - if config is not None: - self._config.update(config) - # Pull out commonly used properties for performance - self._service_name = service_name or get_application_name() - self._debug = self._config.get(keys.DEBUG) - - if self._debug and ddconfig._raise: - # Ensure there are no typos in any of the keys - invalid_keys = config_invalid_keys(self._config) - if invalid_keys: - str_invalid_keys = ",".join(invalid_keys) - raise ConfigException("invalid key(s) given ({})".format(str_invalid_keys)) - - if not self._service_name and ddconfig._raise: - raise ConfigException( - """ Cannot detect the \'service_name\'. - Please set the \'service_name=\' - keyword argument. - """ - ) - - self._scope_manager = scope_manager or ThreadLocalScopeManager() - self._dd_tracer = _dd_tracer or ddtrace.tracer - self._dd_tracer.context_provider = get_context_provider_for_scope_manager(self._scope_manager) - - self._dd_tracer.set_tags(self._config.get(keys.GLOBAL_TAGS)) # type: ignore[arg-type] - trace_processors = None - if isinstance(self._config.get(keys.SETTINGS), dict) and self._config[keys.SETTINGS].get("FILTERS"): # type: ignore[union-attr] - trace_processors = self._config[keys.SETTINGS]["FILTERS"] # type: ignore[index] - self._dd_tracer._span_aggregator.user_processors = trace_processors - - if self._config[keys.ENABLED]: - self._dd_tracer.enabled = self._config[keys.ENABLED] - - if ( - self._config[keys.AGENT_HOSTNAME] - or self._config[keys.AGENT_HTTPS] - or self._config[keys.AGENT_PORT] - or self._config[keys.UDS_PATH] - ): - scheme = "https" if self._config[keys.AGENT_HTTPS] else "http" - hostname = self._config[keys.AGENT_HOSTNAME] - port = self._config[keys.AGENT_PORT] - if self._dd_tracer._agent_url: - curr_agent_url = urlparse(self._dd_tracer._agent_url) - scheme = "https" if self._config[keys.AGENT_HTTPS] else curr_agent_url.scheme - hostname = hostname or curr_agent_url.hostname - port = port or curr_agent_url.port - uds_path = self._config[keys.UDS_PATH] - - if uds_path: - new_url = f"unix://{uds_path}" - else: - new_url = f"{scheme}://{hostname}:{port}" - if isinstance(self._dd_tracer._span_aggregator.writer, AgentWriterInterface): - self._dd_tracer._span_aggregator.writer.intake_url = new_url - self._dd_tracer._recreate() - - if self._config[keys.SAMPLER]: - self._dd_tracer._sampler = self._config[keys.SAMPLER] - - self._propagators = { - Format.HTTP_HEADERS: HTTPPropagator, - Format.TEXT_MAP: HTTPPropagator, - } - - @property - def scope_manager(self): - # type: () -> ScopeManager - """Returns the scope manager being used by this tracer.""" - return self._scope_manager - - def start_active_span( - self, - operation_name, # type: str - child_of=None, # type: Optional[Union[Span, SpanContext]] - references=None, # type: Optional[List[Any]] - tags=None, # type: Optional[Dict[str, str]] - start_time=None, # type: Optional[int] - ignore_active_span=False, # type: bool - finish_on_close=True, # type: bool - ): - # type: (...) -> Scope - """Returns a newly started and activated `Scope`. - The returned `Scope` supports with-statement contexts. For example:: - - with tracer.start_active_span('...') as scope: - scope.span.set_tag('http.method', 'GET') - do_some_work() - # Span.finish() is called as part of Scope deactivation through - # the with statement. - - It's also possible to not finish the `Span` when the `Scope` context - expires:: - - with tracer.start_active_span('...', - finish_on_close=False) as scope: - scope.span.set_tag('http.method', 'GET') - do_some_work() - # Span.finish() is not called as part of Scope deactivation as - # `finish_on_close` is `False`. - - :param operation_name: name of the operation represented by the new - span from the perspective of the current service. - :param child_of: (optional) a Span or SpanContext instance representing - the parent in a REFERENCE_CHILD_OF Reference. If specified, the - `references` parameter must be omitted. - :param references: (optional) a list of Reference objects that identify - one or more parent SpanContexts. (See the Reference documentation - for detail). - :param tags: an optional dictionary of Span Tags. The caller gives up - ownership of that dictionary, because the Tracer may use it as-is - to avoid extra data copying. - :param start_time: an explicit Span start time as a unix timestamp per - time.time(). - :param ignore_active_span: (optional) an explicit flag that ignores - the current active `Scope` and creates a root `Span`. - :param finish_on_close: whether span should automatically be finished - when `Scope.close()` is called. - :return: a `Scope`, already registered via the `ScopeManager`. - """ - otspan = self.start_span( - operation_name=operation_name, - child_of=child_of, - references=references, - tags=tags, - start_time=start_time, - ignore_active_span=ignore_active_span, - ) - - # activate this new span - scope = self._scope_manager.activate(otspan, finish_on_close) - self._dd_tracer.context_provider.activate(otspan._dd_span) - return scope - - def start_span( - self, - operation_name: Optional[str] = None, - child_of: Optional[Union[Span, SpanContext]] = None, - references: Optional[List[Any]] = None, - tags: Optional[Dict[str, str]] = None, - start_time: Optional[int] = None, - ignore_active_span: bool = False, - ) -> Span: - """Starts and returns a new Span representing a unit of work. - - Starting a root Span (a Span with no causal references):: - - tracer.start_span('...') - - Starting a child Span (see also start_child_span()):: - - tracer.start_span( - '...', - child_of=parent_span) - - Starting a child Span in a more verbose way:: - - tracer.start_span( - '...', - references=[opentracing.child_of(parent_span)]) - - Note: the precedence when defining a relationship is the following, from highest to lowest: - 1. *child_of* - 2. *references* - 3. `scope_manager.active` (unless *ignore_active_span* is True) - 4. None - - Currently Datadog only supports `child_of` references. - - :param operation_name: name of the operation represented by the new - span from the perspective of the current service. - :param child_of: (optional) a Span or SpanContext instance representing - the parent in a REFERENCE_CHILD_OF Reference. If specified, the - `references` parameter must be omitted. - :param references: (optional) a list of Reference objects that identify - one or more parent SpanContexts. (See the Reference documentation - for detail) - :param tags: an optional dictionary of Span Tags. The caller gives up - ownership of that dictionary, because the Tracer may use it as-is - to avoid extra data copying. - :param start_time: an explicit Span start time as a unix timestamp per - time.time() - :param ignore_active_span: an explicit flag that ignores the current - active `Scope` and creates a root `Span`. - :return: an already-started Span instance. - """ - ot_parent = None # 'ot_parent' is more readable than 'child_of' - ot_parent_context = None # the parent span's context - # dd_parent: the child_of to pass to the ddtracer - dd_parent = None # type: Optional[Union[DatadogSpan, DatadogContext]] - - if child_of is not None: - ot_parent = child_of # 'ot_parent' is more readable than 'child_of' - elif references and isinstance(references, list): - # we currently only support child_of relations to one span - ot_parent = references[0].referenced_context - - # - whenever child_of is not None ddspans with parent-child - # relationships will share a ddcontext which maintains a hierarchy of - # ddspans for the execution flow - # - when child_of is a ddspan then the ddtracer uses this ddspan to - # create the child ddspan - # - when child_of is a ddcontext then the ddtracer uses the ddcontext to - # get_current_span() for the parent - if ot_parent is None and not ignore_active_span: - # attempt to get the parent span from the scope manager - scope = self._scope_manager.active - parent_span = getattr(scope, "span", None) - ot_parent_context = getattr(parent_span, "context", None) - - # Compare the active ot and dd spans. Using the one which - # was created later as the parent. - active_dd_parent = self._dd_tracer.context_provider.active() - if parent_span and isinstance(active_dd_parent, DatadogSpan): - dd_parent_span = parent_span._dd_span - if active_dd_parent.start_ns >= dd_parent_span.start_ns: - dd_parent = active_dd_parent - else: - dd_parent = dd_parent_span - else: - dd_parent = active_dd_parent - elif ot_parent is not None and isinstance(ot_parent, Span): - # a span is given to use as a parent - ot_parent_context = ot_parent.context - dd_parent = ot_parent._dd_span - elif ot_parent is not None and isinstance(ot_parent, SpanContext): - # a span context is given to use to find the parent ddspan - dd_parent = ot_parent._dd_context - elif ot_parent is None: - # user wants to create a new parent span we don't have to do - # anything - pass - elif ddconfig._raise: - raise TypeError("invalid span configuration given") - - # create a new otspan and ddspan using the ddtracer and associate it - # with the new otspan - ddspan = self._dd_tracer.start_span( - name=operation_name, # type: ignore[arg-type] - child_of=dd_parent, - service=self._service_name, - activate=False, - span_api=SPAN_API_OPENTRACING, - ) - - # set the start time if one is specified - ddspan.start = start_time or ddspan.start - - otspan = Span(self, ot_parent_context, operation_name) # type: ignore[arg-type] - # sync up the OT span with the DD span - otspan._associate_dd_span(ddspan) - - if tags is not None: - for k in tags: - # Make sure we set the tags on the otspan to ensure that the special compatibility tags - # are handled correctly (resource name, span type, sampling priority, etc). - otspan.set_tag(k, tags[k]) - - return otspan - - @property - def active_span(self): - # type: () -> Optional[Span] - """Retrieves the active span from the opentracing scope manager - - Falls back to using the datadog active span if one is not found. This - allows opentracing users to use datadog instrumentation. - """ - scope = self._scope_manager.active - if scope: - return scope.span - else: - dd_span = self._dd_tracer.current_span() - ot_span = None # type: Optional[Span] - if dd_span: - ot_span = Span(self, None, dd_span.name) - ot_span._associate_dd_span(dd_span) - return ot_span - - def inject(self, span_context, format, carrier): # noqa: A002 - # type: (SpanContext, str, Dict[str, str]) -> None - """Injects a span context into a carrier. - - :param span_context: span context to inject. - :param format: format to encode the span context with. - :param carrier: the carrier of the encoded span context. - """ - propagator = self._propagators.get(format, None) - - if propagator is None: - raise opentracing.UnsupportedFormatException - - propagator.inject(span_context, carrier) - - def extract(self, format, carrier): # noqa: A002 - # type: (str, Dict[str, str]) -> SpanContext - """Extracts a span context from a carrier. - - :param format: format that the carrier is encoded with. - :param carrier: the carrier to extract from. - """ - propagator = self._propagators.get(format, None) - - if propagator is None: - raise opentracing.UnsupportedFormatException - - # we have to manually activate the returned context from a distributed - # trace - ot_span_ctx = propagator.extract(carrier) - dd_span_ctx = ot_span_ctx._dd_context - self._dd_tracer.context_provider.activate(dd_span_ctx) - return ot_span_ctx - - def get_log_correlation_context(self): - # type: () -> Dict[str, str] - """Retrieves the data used to correlate a log with the current active trace. - Generates a dictionary for custom logging instrumentation including the trace id and - 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. - """ - return self._dd_tracer.get_log_correlation_context() diff --git a/ddtrace/opentracer/utils.py b/ddtrace/opentracer/utils.py deleted file mode 100644 index 886e998d8a3..00000000000 --- a/ddtrace/opentracer/utils.py +++ /dev/null @@ -1,43 +0,0 @@ -from opentracing import ScopeManager # noqa:F401 - -from ddtrace._trace.provider import BaseContextProvider -from ddtrace._trace.provider import DefaultContextProvider - - -# DEV: If `asyncio` or `gevent` are unavailable we do not throw an error, -# `context_provider` will just not be set and we'll get an `AttributeError` instead - - -def get_context_provider_for_scope_manager(scope_manager: ScopeManager) -> BaseContextProvider: - """Returns the context_provider to use with a given scope_manager.""" - - dd_context_provider = DefaultContextProvider() - _patch_scope_manager(scope_manager, dd_context_provider) - - return dd_context_provider - - -def _patch_scope_manager(scope_manager: ScopeManager, context_provider: BaseContextProvider) -> None: - """ - Patches a scope manager so that any time a span is activated - it'll also activate the underlying ddcontext with the underlying - datadog context provider. - - This allows opentracing users to rely on ddtrace.contrib patches and - have them parent correctly. - - :param scope_manager: Something that implements `opentracing.ScopeManager` - :param context_provider: Something that implements `datadog.provider.BaseContextProvider` - """ - if getattr(scope_manager, "_datadog_patch", False): - return - scope_manager._datadog_patch = True - - old_method = scope_manager.activate - - def _patched_activate(*args, **kwargs): - otspan = kwargs.get("span", args[0]) - context_provider.activate(otspan._dd_context) - return old_method(*args, **kwargs) - - scope_manager.activate = _patched_activate diff --git a/ddtrace/profiling/_asyncio.py b/ddtrace/profiling/_asyncio.py index 66d44f7fc45..32f85b7be1f 100644 --- a/ddtrace/profiling/_asyncio.py +++ b/ddtrace/profiling/_asyncio.py @@ -50,9 +50,7 @@ def _(asyncio): elif hasattr(asyncio.Task, "all_tasks"): globals()["all_tasks"] = asyncio.Task.all_tasks - if hasattr(asyncio.Task, "get_name"): - # `get_name` is only available in Python ≥ 3.8 - globals()["_task_get_name"] = lambda task: task.get_name() + globals()["_task_get_name"] = lambda task: task.get_name() if THREAD_LINK is None: THREAD_LINK = _threading._ThreadLink() diff --git a/ddtrace/profiling/_threading.pyx b/ddtrace/profiling/_threading.pyx index 2a20b29b678..70896332424 100644 --- a/ddtrace/profiling/_threading.pyx +++ b/ddtrace/profiling/_threading.pyx @@ -55,14 +55,7 @@ cpdef get_thread_native_id(thread_id): if thread is None: return thread_id - try: - # We prioritize using native ids since we expect them to be surely unique for a program. This is less true - # for hashes since they are relative to the memory address which can easily be the same across different - # objects. - return thread.native_id - except AttributeError: - # Python < 3.8 - return hash(thread) + return thread.native_id # cython does not play well with mypy diff --git a/ddtrace/profiling/collector/stack.pyx b/ddtrace/profiling/collector/stack.pyx index 78fb0efd26a..05b62469911 100644 --- a/ddtrace/profiling/collector/stack.pyx +++ b/ddtrace/profiling/collector/stack.pyx @@ -180,24 +180,22 @@ ELIF UNAME_SYSNAME != "Windows": PyObject* PyException_GetTraceback(PyObject* exc) PyObject* Py_TYPE(PyObject* ob) - IF PY_VERSION_HEX >= 0x03080000: - # Python 3.8 - cdef extern from "": + cdef extern from "": - cdef struct pyinterpreters: - PyThread_type_lock mutex + cdef struct pyinterpreters: + PyThread_type_lock mutex - ctypedef struct _PyRuntimeState: - pyinterpreters interpreters + ctypedef struct _PyRuntimeState: + pyinterpreters interpreters - cdef extern _PyRuntimeState _PyRuntime + cdef extern _PyRuntimeState _PyRuntime - IF PY_VERSION_HEX >= 0x03090000: - # Needed for accessing _PyGC_FINALIZED when we build with -DPy_BUILD_CORE - cdef extern from "": - pass - cdef extern from "": - PyObject* PyThreadState_GetFrame(PyThreadState* tstate) + IF PY_VERSION_HEX >= 0x03090000: + # Needed for accessing _PyGC_FINALIZED when we build with -DPy_BUILD_CORE + cdef extern from "": + pass + cdef extern from "": + PyObject* PyThreadState_GetFrame(PyThreadState* tstate) ELSE: FEATURES['stack-exceptions'] = False diff --git a/ddtrace/runtime/__init__.py b/ddtrace/runtime/__init__.py index 79745217f11..2963023fc29 100644 --- a/ddtrace/runtime/__init__.py +++ b/ddtrace/runtime/__init__.py @@ -1,5 +1,6 @@ from typing import Optional # noqa:F401 +import ddtrace import ddtrace.internal.runtime.runtime_metrics from ddtrace.internal.telemetry import telemetry_writer @@ -29,27 +30,22 @@ class RuntimeMetrics(metaclass=_RuntimeMetricsStatus): """ @staticmethod - def enable(tracer=None, dogstatsd_url=None, flush_interval=None): - # type: (Optional[ddtrace.trace.Tracer], Optional[str], Optional[float]) -> None + def enable( + tracer: Optional[ddtrace.trace.Tracer] = None, + dogstatsd_url: Optional[str] = None, + ) -> None: """ - Enable the runtime metrics collection service. - If the service has already been activated before, this method does nothing. Use ``disable`` to turn off the runtime metric collection service. :param tracer: The tracer instance to correlate with. - :param dogstatsd_url: The DogStatsD URL. - :param flush_interval: The flush interval. """ telemetry_writer.add_configuration(TELEMETRY_RUNTIMEMETRICS_ENABLED, True, origin="code") - ddtrace.internal.runtime.runtime_metrics.RuntimeWorker.enable( - tracer=tracer, dogstatsd_url=dogstatsd_url, flush_interval=flush_interval - ) + ddtrace.internal.runtime.runtime_metrics.RuntimeWorker.enable(tracer=tracer, dogstatsd_url=dogstatsd_url) @staticmethod - def disable(): - # type: () -> None + def disable() -> None: """ Disable the runtime metrics collection service. diff --git a/ddtrace/settings/_config.py b/ddtrace/settings/_config.py index 96c66bb5fce..aabd1a1a4cb 100644 --- a/ddtrace/settings/_config.py +++ b/ddtrace/settings/_config.py @@ -126,7 +126,6 @@ "protobuf", "aiohttp_jinja2", "pymongo", - "freezegun", "vertica", "rq_worker", "elasticsearch", @@ -158,7 +157,6 @@ "aiopg", "dogpile_cache", "pylibmc", - "mongoengine", "httpx", "httplib", "rq", @@ -178,7 +176,6 @@ "crewai", "pydantic_ai", "logging", - "cassandra", "boto", "mariadb", "aiohttp", diff --git a/ddtrace/settings/integration.py b/ddtrace/settings/integration.py index e06241bfc47..6bb9b1a16cc 100644 --- a/ddtrace/settings/integration.py +++ b/ddtrace/settings/integration.py @@ -1,9 +1,6 @@ import os from typing import Optional # noqa:F401 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - from .._hooks import Hooks from ..internal.utils.attrdict import AttrDict from .http import HttpConfig @@ -81,8 +78,7 @@ def trace_query_string(self): return self.global_config._http.trace_query_string @property - def is_header_tracing_configured(self): - # type: (...) -> bool + def is_header_tracing_configured(self) -> bool: """Returns whether header tracing is enabled for this integration. Will return true if traced headers are configured for this integration @@ -90,45 +86,23 @@ def is_header_tracing_configured(self): """ return self.http.is_header_tracing_configured or self.global_config._http.is_header_tracing_configured - def header_is_traced(self, header_name): - # type: (str) -> bool - """ - Returns whether or not the current header should be traced. - :param header_name: the header name - :type header_name: str - :rtype: bool - """ + def header_is_traced(self, header_name: str) -> bool: + """Returns whether or not the current header should be traced.""" return self._header_tag_name(header_name) is not None - def _header_tag_name(self, header_name): - # type: (str) -> Optional[str] + def _header_tag_name(self, header_name: str) -> Optional[str]: tag_name = self.http._header_tag_name(header_name) if tag_name is None: return self.global_config._header_tag_name(header_name) return tag_name def __getattr__(self, key): - if key in self.APP_ANALYTICS_CONFIG_NAMES: - self.app_analytics_deprecated_warning(key) return super().__getattr__(key) def __setattr__(self, key, value): - if key in self.APP_ANALYTICS_CONFIG_NAMES: - self.app_analytics_deprecated_warning(key) return super().__setattr__(key, value) - def app_analytics_deprecated_warning(self, key): - deprecate( - f"{key} is deprecated", - message="Controlling ingestion via analytics is no longer supported. " - "See https://docs.datadoghq.com/tracing/legacy_app_analytics/" - "?code-lang=python#migrate-to-the-new-configuration-options", - category=DDTraceDeprecationWarning, - removal_version="4.0.0", - ) - def get_analytics_sample_rate(self, use_global_config=False): - self.app_analytics_deprecated_warning("get_analytics_sample_rate") return 1 def __repr__(self): diff --git a/docs/contributing-integrations.rst b/docs/contributing-integrations.rst index 8db0e205a2f..0ec2289013d 100644 --- a/docs/contributing-integrations.rst +++ b/docs/contributing-integrations.rst @@ -204,7 +204,6 @@ are not yet any expected spans stored for it, so we need to create some. mongo: - ddtrace/contrib/internal/pymongo/* - - ddtrace/contrib/internal/mongoengine/* - ddtrace/ext/mongo.py 15. Add a `suite` for your integration in `tests/contrib/suitespec.yml`. This defines test configuration diff --git a/docs/index.rst b/docs/index.rst index caf65d873e2..93aa02503ad 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -52,7 +52,7 @@ contacting support. +--------------------------------------------------+------------+----------+------+ | :ref:`aiopg` | >= 0.16.0 | Yes | | +--------------------------------------------------+------------+----------+------+ -| :ref:`algoliasearch` | >= 2.5.0 | Yes | | +| :ref:`algoliasearch` | >= 2.6.3 | Yes | | +--------------------------------------------------+------------+----------+------+ | :ref:`anthropic` | >= 0.28.0 | Yes | | +--------------------------------------------------+------------+----------+------+ @@ -62,7 +62,7 @@ contacting support. +--------------------------------------------------+------------+----------+------+ | :ref:`asyncio` | \* | Yes | | +--------------------------------------------------+------------+----------+------+ -| :ref:`asyncpg` | >= 0.22.0 | Yes | | +| :ref:`asyncpg` | >= 0.23.0 | Yes | | +--------------------------------------------------+------------+----------+------+ | :ref:`avro` | \* | Yes | | +--------------------------------------------------+------------+----------+------+ @@ -72,8 +72,6 @@ contacting support. +--------------------------------------------------+------------+----------+------+ | :ref:`bottle` | >= 0.12 | No | | +--------------------------------------------------+------------+----------+------+ -| :ref:`cassandra` | >= 3.24 | Yes | | -+--------------------------------------------------+------------+----------+------+ | :ref:`celery` | >= 4.4 | Yes | | +--------------------------------------------------+------------+----------+------+ | :ref:`cherrypy` | >= 17.0 | No | | @@ -106,11 +104,9 @@ contacting support. +--------------------------------------------------+------------+----------+------+ | :ref:`flask_cache` | >= 0.13 | No | | +--------------------------------------------------+------------+----------+------+ -| :ref:`freezegun` | \* | Yes | | -+--------------------------------------------------+------------+----------+------+ | :ref:`futures` | \* | Yes | | +--------------------------------------------------+------------+----------+------+ -| :ref:`gevent` (greenlet>=1.0) | >= 20.12 | Yes | | +| :ref:`gevent` (greenlet>=1.0) | >= 21.1.2 | Yes | | +--------------------------------------------------+------------+----------+------+ | :ref:`google_adk` | >= 1.0.0 | Yes | | +--------------------------------------------------+------------+----------+------+ @@ -154,8 +150,6 @@ contacting support. +--------------------------------------------------+------------+----------+------+ | :ref:`molten` | >= 1.0 | Yes | | +--------------------------------------------------+------------+----------+------+ -| :ref:`mongoengine` | >= 0.23 | Yes | | -+--------------------------------------------------+------------+----------+------+ | :ref:`mysql-connector` | >= 8.0.5 | Yes | | +--------------------------------------------------+------------+----------+------+ | :ref:`mysqldb` | \* | Yes | | @@ -168,7 +162,7 @@ contacting support. +--------------------------------------------------+------------+----------+------+ | :ref:`protobuf` | \* | Yes [6]_ | | +--------------------------------------------------+------------+----------+------+ -| :ref:`psycopg` | >= 2.8 | Yes | | +| :ref:`psycopg` | >= 2.9.10 | Yes | | +--------------------------------------------------+------------+----------+------+ | :ref:`pylibmc` | >= 1.6.2 | Yes | | +--------------------------------------------------+------------+----------+------+ @@ -178,7 +172,7 @@ contacting support. +--------------------------------------------------+------------+----------+------+ | :ref:`pymysql` | >= 0.10 | Yes | | +--------------------------------------------------+------------+----------+------+ -| :ref:`pynamodb` | >= 5.0 | Yes | | +| :ref:`pynamodb` | >= 5.5.1 | Yes | | +--------------------------------------------------+------------+----------+------+ | :ref:`pyodbc` | >= 4.0.31 | Yes | | +--------------------------------------------------+------------+----------+------+ @@ -194,7 +188,7 @@ contacting support. +--------------------------------------------------+------------+----------+------+ | :ref:`rediscluster` | >= 2.0 | Yes | | +--------------------------------------------------+------------+----------+------+ -| :ref:`requests` | >= 2.20 | Yes | | +| :ref:`requests` | >= 2.25.1 | Yes | | +--------------------------------------------------+------------+----------+------+ | :ref:`rq` | >= 1.8 | Yes | | +--------------------------------------------------+------------+----------+------+ @@ -202,7 +196,7 @@ contacting support. +--------------------------------------------------+------------+----------+------+ | :ref:`selenium` | \* | Yes | | +--------------------------------------------------+------------+----------+------+ -| :ref:`snowflake` | >= 2.3.0 | No | | +| :ref:`snowflake` | >= 2.4.6 | No | | +--------------------------------------------------+------------+----------+------+ | :ref:`sqlalchemy` | >= 1.3 | No | | +--------------------------------------------------+------------+----------+------+ diff --git a/docs/integrations.rst b/docs/integrations.rst index c33138a508e..18223f31009 100644 --- a/docs/integrations.rst +++ b/docs/integrations.rst @@ -110,13 +110,6 @@ Bottle .. automodule:: ddtrace.contrib.bottle -.. _cassandra: - -Cassandra -^^^^^^^^^ -.. automodule:: ddtrace.contrib.internal.cassandra - - .. _celery: Celery @@ -216,13 +209,6 @@ Flask Cache .. automodule:: ddtrace.contrib.flask_cache -.. _freezegun: - -FreezeGun -^^^^^^^^^ -.. automodule:: ddtrace.contrib.internal.freezegun - - .. _futures: futures @@ -375,13 +361,6 @@ Molten .. automodule:: ddtrace.contrib.internal.molten -.. _mongoengine: - -Mongoengine -^^^^^^^^^^^ -.. automodule:: ddtrace.contrib.internal.mongoengine - - .. _mysql-connector: mysql-connector diff --git a/hatch.toml b/hatch.toml index f826ba78a09..f3fb254691e 100644 --- a/hatch.toml +++ b/hatch.toml @@ -234,7 +234,7 @@ test = [ ] [[envs.multiple_os_tests.matrix]] -python = ["3.14", "3.12", "3.10", "3.8"] +python = ["3.14", "3.12", "3.10"] [envs.snapshot_viewer] dev-mode = false diff --git a/pyproject.toml b/pyproject.toml index 5fbe581eadc..835bf1633ad 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,11 +10,14 @@ build-backend = "setuptools.build_meta" [project] name = "ddtrace" -dynamic = ["version"] +# DEV: to directly override the version specifier, comment this... +#dynamic = ["version"] +# ...and uncomment this +version = "4.0.0.dev0" description = "Datadog APM client library" readme = "README.md" license = { text = "LICENSE.BSD3" } -requires-python = ">=3.8" +requires-python = ">=3.9" authors = [ { name = "Datadog, Inc.", email = "dev@datadoghq.com" }, ] @@ -106,7 +109,7 @@ exclude = ''' [tool.black] line-length = 120 -target_version = ['py37', 'py38', 'py39', 'py310', 'py311', 'py312'] +target_version = ['py39', 'py310', 'py311', 'py312'] include = '''\.py[ix]?$''' exclude = ''' ( diff --git a/releasenotes/notes/cassandra-d3c8aaf478bddc56.yaml b/releasenotes/notes/cassandra-d3c8aaf478bddc56.yaml new file mode 100644 index 00000000000..07df72ad56a --- /dev/null +++ b/releasenotes/notes/cassandra-d3c8aaf478bddc56.yaml @@ -0,0 +1,5 @@ +--- +other: + - | + cassandra: The Cassandra integration is removed because it is only compatible with Python 3.8, + which is a year past its end-of-life. diff --git a/releasenotes/notes/freezegun-remove-44312810d30f9e0b.yaml b/releasenotes/notes/freezegun-remove-44312810d30f9e0b.yaml new file mode 100644 index 00000000000..75620f165d7 --- /dev/null +++ b/releasenotes/notes/freezegun-remove-44312810d30f9e0b.yaml @@ -0,0 +1,4 @@ +--- +upgrade: + - | + freezegun: The deprecated `freezegun` integration is now removed. diff --git a/releasenotes/notes/opentracer-remove-b1883d26ea035c50.yaml b/releasenotes/notes/opentracer-remove-b1883d26ea035c50.yaml new file mode 100644 index 00000000000..6d248930d9c --- /dev/null +++ b/releasenotes/notes/opentracer-remove-b1883d26ea035c50.yaml @@ -0,0 +1,4 @@ +--- +upgrade: + - | + opentracer: This change removes the deprecated ``opentracer`` package diff --git a/releasenotes/notes/py38-remove-52943a5d318b4736.yaml b/releasenotes/notes/py38-remove-52943a5d318b4736.yaml new file mode 100644 index 00000000000..f71a666e383 --- /dev/null +++ b/releasenotes/notes/py38-remove-52943a5d318b4736.yaml @@ -0,0 +1,8 @@ +--- +upgrade: + - | + Support for ddtrace with Python 3.8 is removed after being deprecated in the 3.0 release line. Use ddtrace 4.x with + Python 3.9 or newer. +deprecations: + - | + Support for ddtrace with Python 3.9 is deprecated after Python 3.9 reached its end-of-life. diff --git a/releasenotes/notes/remove-app-analytics-52ac993f27e2607f.yaml b/releasenotes/notes/remove-app-analytics-52ac993f27e2607f.yaml new file mode 100644 index 00000000000..4cc2631d603 --- /dev/null +++ b/releasenotes/notes/remove-app-analytics-52ac993f27e2607f.yaml @@ -0,0 +1,4 @@ +--- +other: + - | + tracing: This change removes the deprecated functionality that controls ingestion via analytics. diff --git a/releasenotes/notes/remove-interval-envvar-88c126a791a448a0.yaml b/releasenotes/notes/remove-interval-envvar-88c126a791a448a0.yaml new file mode 100644 index 00000000000..2dcd05f9c50 --- /dev/null +++ b/releasenotes/notes/remove-interval-envvar-88c126a791a448a0.yaml @@ -0,0 +1,4 @@ +--- +other: + - | + This change removes the deprecated environment variable `DEFAULT_RUNTIME_METRICS_INTERVAL`. diff --git a/releasenotes/notes/remove-pymongo-engine-0584c2055377f718.yaml b/releasenotes/notes/remove-pymongo-engine-0584c2055377f718.yaml new file mode 100644 index 00000000000..772aade8185 --- /dev/null +++ b/releasenotes/notes/remove-pymongo-engine-0584c2055377f718.yaml @@ -0,0 +1,5 @@ +--- +other: + - | + mongoengine: Drops support for the ``ddtrace.Pin`` object with mongoengine. With this change, the ddtrace library no longer directly supports mongoengine. + Mongoengine will be supported through the ``pymongo`` integration. diff --git a/releasenotes/notes/span-args-remove-5feecae6cf00537f.yaml b/releasenotes/notes/span-args-remove-5feecae6cf00537f.yaml new file mode 100644 index 00000000000..03d65342e97 --- /dev/null +++ b/releasenotes/notes/span-args-remove-5feecae6cf00537f.yaml @@ -0,0 +1,4 @@ +--- +other: + - | + This change removes deprecated methods and method parameters from the `Span` class. diff --git a/riotfile.py b/riotfile.py index 92a986e5d15..b809a13017f 100644 --- a/riotfile.py +++ b/riotfile.py @@ -10,21 +10,18 @@ latest = "" SUPPORTED_PYTHON_VERSIONS: List[Tuple[int, int]] = [ - (3, 8), (3, 9), (3, 10), (3, 11), (3, 12), (3, 13), (3, 14), -] # type: List[Tuple[int, int]] +] def version_to_str(version: Tuple[int, int]) -> str: """Convert a Python version tuple to a string - >>> version_to_str((3, 8)) - '3.8' >>> version_to_str((3, 9)) '3.9' >>> version_to_str((3, 10)) @@ -46,8 +43,6 @@ def version_to_str(version: Tuple[int, int]) -> str: def str_to_version(version: str) -> Tuple[int, int]: """Convert a Python version string to a tuple - >>> str_to_version("3.8") - (3, 8) >>> str_to_version("3.9") (3, 9) >>> str_to_version("3.10") @@ -74,13 +69,13 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT """Helper to select python versions from the list of versions we support >>> select_pys() - ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] + ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] >>> select_pys(min_version='3') - ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] + ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] >>> select_pys(max_version='3') [] - >>> select_pys(min_version='3.8', max_version='3.9') - ['3.8', '3.9'] + >>> select_pys(min_version='3.9', max_version='3.10') + ['3.9', '3.10'] """ min_version = str_to_version(min_version) max_version = str_to_version(max_version) @@ -188,7 +183,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT Venv( name="appsec_iast_packages", # FIXME: GrpcIO is hanging with 3.13 on CI + hatch for some reason - pys=["3.8", "3.9", "3.10", "3.11", "3.12"], + pys=["3.9", "3.10", "3.11", "3.12"], command="pytest {cmdargs} tests/appsec/iast_packages/", pkgs={ "requests": latest, @@ -244,19 +239,19 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=["3.8", "3.9"], + pys=["3.9"], pkgs={"django": "~=2.2"}, ), Venv( - pys=["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"], + pys=["3.9", "3.10", "3.11", "3.12", "3.13"], pkgs={"django": "~=3.2"}, ), Venv( - pys=["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"], + pys=["3.9", "3.10", "3.11", "3.12", "3.13"], pkgs={"django": "==4.0.10"}, ), Venv( - pys=["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"], + pys=["3.9", "3.10", "3.11", "3.12", "3.13"], pkgs={"django": "~=4.2"}, ), Venv( @@ -284,18 +279,6 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "DD_IAST_DEDUPLICATION_ENABLED": "false", }, venvs=[ - Venv( - pys=["3.8"], - pkgs={"fastapi": "==0.86.0", "anyio": "==3.7.1"}, - ), - Venv( - pys=["3.8"], - pkgs={"fastapi": "==0.94.1"}, - ), - Venv( - pys=["3.8"], - pkgs={"fastapi": "~=0.114.2"}, - ), Venv( pys=select_pys(min_version="3.9", max_version="3.13"), pkgs={"fastapi": "==0.86.0", "anyio": "==3.7.1"}, @@ -516,7 +499,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.11"), + pys=select_pys(min_version="3.9", max_version="3.11"), pkgs={ "pytest-asyncio": "~=0.23.7", }, @@ -563,14 +546,6 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "opensearch-py": latest, }, venvs=[ - Venv( - pys="3.8", - pkgs={ - "gevent": "~=20.12.0", - # greenlet v1.0.0 adds support for contextvars - "greenlet": "~=1.0.0", - }, - ), Venv( pys="3.9", pkgs={ @@ -678,7 +653,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT # FIXME: tests fail on vertica 1.x # Venv( # # vertica-python added support for Python 3.9/3.10 in 1.0 - # pys=select_pys(min_version="3.8", max_version="3.10"), + # pys=select_pys(min_version="3.9", max_version="3.10"), # pkgs={"vertica-python": ["~=1.0", latest]}, # ), # Venv( @@ -737,7 +712,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.12"), + pys=select_pys(min_version="3.9", max_version="3.12"), pkgs={ "falcon": [ "~=3.0.0", @@ -793,23 +768,8 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "pytest-randomly": latest, }, venvs=[ - # Celery 4.3 wants Kombu >= 4.4 and Redis >= 3.2 - # Split into <3.8 and >=3.8 to pin importlib_metadata dependency for kombu - # # celery added support for Python 3.9 in 4.x - # pys=select_pys(min_version="3.8", max_version="3.9"), - # pkgs={ - # "pytest": "~=4.0", - # "celery": [ - # "latest", # most recent 4.x - # ], - # "redis": "~=3.5", - # "kombu": "~=4.4", - # }, - # ), - # Celery 5.x wants Python 3.6+ - # Split into <3.8 and >=3.8 to pin importlib_metadata dependency for kombu - Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + Venv( + pys=["3.9"], env={ # https://docs.celeryproject.org/en/v5.0.5/userguide/testing.html#enabling "PYTEST_PLUGINS": "celery.contrib.pytest", @@ -856,7 +816,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT ), Venv( # cherrypy added support for Python 3.11 in 18.7 - pys=select_pys(min_version="3.8"), + pys=select_pys(), pkgs={ "cherrypy": [">=18.0,<19", latest], "more_itertools": "<8.11.0", @@ -876,7 +836,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT # pymmongo<3.9, 3.9<=pymongo<3.12, 3.12<=pymongo<4.5, pymongo>=4.5 # To get full test coverage we must test all these version ranges Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys=["3.9"], pkgs={"pymongo": ["~=3.8.0", "~=3.9.0", "~=3.11", "~=4.0", latest]}, ), Venv( @@ -891,14 +851,14 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT name="ddtrace_api", command="pytest {cmdargs} tests/contrib/ddtrace_api", pkgs={"ddtrace-api": "==0.0.1", "requests": latest}, - pys=select_pys(min_version="3.8"), + pys=select_pys(), ), # Django Python version support - # 2.2 3.5, 3.6, 3.7, 3.8 3.9 - # 3.2 3.6, 3.7, 3.8, 3.9, 3.10 - # 4.0 3.8, 3.9, 3.10 - # 4.1 3.8, 3.9, 3.10, 3.11 - # 4.2 3.8, 3.9, 3.10, 3.11, 3.12 + # 2.2 3.9 + # 3.2 3.9, 3.10 + # 4.0 3.9, 3.10 + # 4.1 3.9, 3.10, 3.11 + # 4.2 3.9, 3.10, 3.11, 3.12 # 5.0 3.10, 3.11, 3.12 # 5.1 3.10, 3.11, 3.12, 3.13 # 5.2 3.10, 3.11, 3.12, 3.13 @@ -930,10 +890,10 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - # django dropped support for Python 3.8/3.9 in 5.0 + # django dropped support for Python 3.9 in 5.0 # limit tests to only the main django test files to avoid import errors due to some tests # targeting newer django versions - pys=select_pys(min_version="3.8", max_version="3.9"), + pys=["3.9"], command="pytest {cmdargs} --ignore=tests/contrib/django/test_django_snapshots.py \ --ignore=tests/contrib/django/test_django_wsgi.py tests/contrib/django", pkgs={ @@ -943,7 +903,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.13"), + pys=select_pys(min_version="3.9", max_version="3.13"), pkgs={ "django": ["~=4.2"], "psycopg": latest, @@ -964,14 +924,14 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.10"), + pys=select_pys(min_version="3.9", max_version="3.10"), pkgs={ "django_hosts": "~=4.0", "django": "~=3.2", }, ), Venv( - pys=select_pys(min_version="3.8", max_version="3.13"), + pys=select_pys(min_version="3.9", max_version="3.13"), pkgs={ "django_hosts": ["~=5.0", latest], "django": "~=4.0", @@ -990,21 +950,21 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT venvs=[ Venv( # djangorestframework dropped support for Django 2.x in 3.14 - pys=select_pys(min_version="3.8", max_version="3.9"), + pys=["3.9"], pkgs={ "django": ">=2.2,<2.3", "djangorestframework": ["==3.12.4", "==3.13.1"], }, ), Venv( - pys=select_pys(min_version="3.8", max_version="3.10"), + pys=select_pys(min_version="3.9", max_version="3.10"), pkgs={ "django": "~=3.2", "djangorestframework": ">=3.11,<3.12", }, ), Venv( - pys=select_pys(min_version="3.8", max_version="3.13"), + pys=select_pys(min_version="3.9", max_version="3.13"), pkgs={ "django": ["~=4.0"], "djangorestframework": ["~=3.13", latest], @@ -1028,7 +988,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys=["3.9"], pkgs={ "sqlalchemy": "~=1.2.18", "django": "~=2.2.0", @@ -1048,7 +1008,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT command="pytest {cmdargs} tests/contrib/dramatiq", venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys=["3.9"], pkgs={"dramatiq": "~=1.10.0", "pytest": latest, "redis": latest, "pika": latest}, ), Venv( @@ -1171,7 +1131,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, ), Venv( - pys=select_pys(min_version="3.8"), + pys=select_pys(), pkgs={ "flask": [ "~=2.0", @@ -1183,7 +1143,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, ), Venv( - pys=select_pys(min_version="3.8"), + pys=select_pys(), command="python tests/ddtrace_run.py pytest {cmdargs} tests/contrib/flask_autopatch", env={ "DD_SERVICE": "test.flask.service", @@ -1229,7 +1189,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "markupsafe": "<2.0", }, venvs=[ - Venv(pys=select_pys(min_version="3.8", max_version="3.9"), pkgs={"exceptiongroup": latest}), + Venv(pys=["3.9"], pkgs={"exceptiongroup": latest}), ], ), Venv( @@ -1245,7 +1205,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.11"), + pys=select_pys(min_version="3.9", max_version="3.11"), ), Venv( pys=select_pys(min_version="3.12", max_version="3.13"), @@ -1262,7 +1222,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.11"), + pys=select_pys(min_version="3.9", max_version="3.11"), ), Venv(pys=select_pys(min_version="3.12", max_version="3.13"), pkgs={"redis": latest}), ], @@ -1286,7 +1246,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys=["3.9"], pkgs={"mysql-connector-python": ["==8.0.5", latest]}, ), Venv( @@ -1313,13 +1273,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys="3.8", - pkgs={"psycopg2-binary": "~=2.8.0"}, - ), - Venv( - pys=select_pys(min_version="3.8"), - # psycopg2-binary added support for Python 3.9/3.10 in 2.9.1 - # psycopg2-binary added support for Python 3.11 in 2.9.2 + pys=select_pys(), pkgs={"psycopg2-binary": ["~=2.9.2", latest]}, ), ], @@ -1334,14 +1288,14 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT Venv( venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys=["3.9"], pkgs={ "psycopg": "~=3.0.0", "pytest-asyncio": "==0.21.1", }, ), Venv( - pys=select_pys(min_version="3.8", max_version="3.11"), + pys=select_pys(min_version="3.9", max_version="3.11"), pkgs={ "psycopg": latest, "pytest-asyncio": "==0.21.1", @@ -1428,19 +1382,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT # TODO: Py312 requires changes to test code venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.8"), - pkgs={ - "pynamodb": ["~=5.0.0"], - "botocore": ["<=1.25.0"], - "moto": ">=1.0,<2.0", - "cfn-lint": "~=0.53.1", - "Jinja2": "~=2.10.0", - "pytest-randomly": latest, - "pytest-xdist": latest, - }, - ), - Venv( - pys=select_pys(min_version="3.8", max_version="3.11"), + pys=select_pys(min_version="3.9", max_version="3.11"), pkgs={ "pynamodb": ["~=5.3", "<6.0"], "moto": ">=1.0,<2.0", @@ -1471,7 +1413,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT # starlette added new root_path/path definitions after v0.33 Venv( # starlette added support for Python 3.9 in 0.14 - pys=select_pys(min_version="3.8", max_version="3.9"), + pys="3.9", pkgs={"starlette": ["~=0.14.0", "~=0.20.0", "~=0.33.0"], "httpx": "~=0.22.0"}, ), Venv( @@ -1489,7 +1431,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT pkgs={"starlette": latest, "httpx": "~=0.27.0"}, ), Venv( - pys=select_pys(min_version="3.8", max_version="3.11"), + pys=select_pys(min_version="3.9", max_version="3.11"), pkgs={"starlette": [latest], "httpx": "~=0.22.0"}, ), ], @@ -1514,7 +1456,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.12"), + pys=select_pys(min_version="3.9", max_version="3.12"), pkgs={ "greenlet": "==3.0.3", "sqlalchemy": ["~=1.3.0", latest], @@ -1543,16 +1485,6 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "requests-mock": ">=1.4", }, venvs=[ - Venv( - # requests added support for Python 3.8 in 2.23 - pys="3.8", - pkgs={ - "requests": [ - "~=2.20.0", - latest, - ], - }, - ), Venv( # requests added support for Python 3.9 in 2.25 pys="3.9", @@ -1619,7 +1551,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT pkgs={"botocore": "==1.34.49", "boto3": "==1.34.49"}, venvs=[ Venv( - pys=select_pys(min_version="3.8"), + pys=select_pys(), ), ], ), @@ -1627,32 +1559,12 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT pkgs={"vcrpy": "==7.0.0", "botocore": "==1.38.26", "boto3": "==1.38.26"}, venvs=[ Venv( - pys=select_pys(min_version="3.9"), + pys=select_pys(), ), ], ), ], ), - Venv( - name="mongoengine", - command="pytest {cmdargs} tests/contrib/mongoengine", - pkgs={ - # pymongo v4.9.0 introduced breaking changes that are not yet supported by mongoengine - "pymongo": "<4.9.0", - "pytest-randomly": latest, - }, - venvs=[ - Venv( - pys="3.8", - pkgs={"mongoengine": ["~=0.23.0", latest]}, - ), - Venv( - # mongoengine added support for Python 3.9/3.10 in 0.24 - pys=select_pys(min_version="3.9"), - pkgs={"mongoengine": ["~=0.24.0", "~=0.24", latest]}, - ), - ], - ), Venv( name="asgi", pkgs={ @@ -1661,7 +1573,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "asgiref": ["~=3.0.0", "~=3.0", latest], "pytest-randomly": latest, }, - pys=select_pys(min_version="3.8"), + pys=select_pys(), command="pytest {cmdargs} tests/contrib/asgi", ), Venv( @@ -1672,7 +1584,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.10"), + pys=select_pys(min_version="3.9", max_version="3.10"), pkgs={ "mariadb": [ "~=1.0.0", @@ -1692,12 +1604,12 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - # pymysql added support for Python 3.8/3.9 in 0.10 - pys=select_pys(min_version="3.8", max_version="3.9"), + # pymysql added support for Python 3.9 in 0.10 + pys="3.9", pkgs={"pymysql": "~=0.10"}, ), Venv( - pys=select_pys(min_version="3.8", max_version="3.12"), + pys=select_pys(min_version="3.9", max_version="3.12"), pkgs={ "pymysql": [ "~=1.0", @@ -1726,7 +1638,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys="3.9", pkgs={ "pyramid": [ "~=1.10", @@ -1755,7 +1667,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.11"), + pys=select_pys(min_version="3.9", max_version="3.11"), pkgs={ "aiobotocore": ["~=1.0.0", "~=1.4.2", "~=2.0.0", latest], }, @@ -1779,7 +1691,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.10"), + pys=select_pys(min_version="3.9", max_version="3.10"), pkgs={"fastapi": ["~=0.64.0", "~=0.90.0", latest]}, ), Venv( @@ -1798,7 +1710,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT command="pytest {cmdargs} tests/contrib/aiomysql", venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.12"), + pys=select_pys(min_version="3.9", max_version="3.12"), pkgs={ "pytest-randomly": latest, "pytest-asyncio": "==0.21.1", @@ -1827,7 +1739,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys="3.9", pkgs={ "pytest": [ ">=6.0,<7.0", @@ -1893,7 +1805,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys="3.9", pkgs={ "pytest": [ ">=6.0,<7.0", @@ -1919,7 +1831,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys="3.9", pkgs={ "pytest-bdd": [ ">=4.0,<5.0", @@ -1941,7 +1853,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT ), Venv( name="pytest_benchmark", - pys=select_pys(min_version="3.8"), + pys=select_pys(), command="pytest {cmdargs} --no-ddtrace --no-cov tests/contrib/pytest_benchmark/", pkgs={ "msgpack": latest, @@ -1959,7 +1871,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT ), Venv( name="pytest:flaky", - pys=select_pys(min_version="3.8"), + pys=select_pys(), command="pytest {cmdargs} --no-ddtrace --no-cov -p no:flaky tests/contrib/pytest_flaky/", pkgs={ "flaky": latest, @@ -1977,7 +1889,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT # Versions between 1.14 and 1.20 have known threading issues # See https://github.com/grpc/grpc/issues/18994 Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys="3.9", pkgs={"grpcio": ["~=1.34.0", latest]}, ), Venv( @@ -2024,7 +1936,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT env={"_DD_TRACE_GRPC_AIO_ENABLED": "true"}, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys="3.9", pkgs={ "grpcio": ["~=1.34.0", "~=1.59.0"], "pytest-asyncio": "==0.23.7", @@ -2058,7 +1970,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.13"), + pys=select_pys(min_version="3.9", max_version="3.13"), pkgs={ "graphene": ["~=3.0.0", latest], "pytest-asyncio": "==0.21.1", @@ -2076,7 +1988,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT Venv( name="graphql", command="pytest {cmdargs} tests/contrib/graphql", - pys=select_pys(min_version="3.8"), + pys=select_pys(), pkgs={ "pytest-asyncio": "==0.21.1", "graphql-core": ["~=3.2.0", latest], @@ -2091,18 +2003,6 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "pytest-randomly": latest, }, venvs=[ - Venv( - pys="3.8", - pkgs={ - "rq": [ - "~=1.8.0", - "~=1.10.0", - latest, - ], - # https://github.com/rq/rq/issues/1469 rq [1.0,1.8] is incompatible with click 8.0+ - "click": "==7.1.2", - }, - ), Venv( # rq added support for Python 3.9 in 1.8.1 pys="3.9", @@ -2125,7 +2025,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT ), Venv( name="httpx", - pys=select_pys(min_version="3.8"), + pys=select_pys(), command="pytest {cmdargs} tests/contrib/httpx", pkgs={ "pytest-asyncio": "==0.21.1", @@ -2144,11 +2044,6 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "pytest-randomly": latest, }, venvs=[ - Venv( - # Support added for Python 3.8 in 1.25.0 - pys="3.8", - pkgs={"urllib3": ["==1.25.0", latest]}, - ), Venv( # Support added for Python 3.9 in 1.25.8 pys="3.9", @@ -2171,24 +2066,14 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT ), ], ), - Venv( - name="cassandra", - pys="3.8", # see https://github.com/r4fek/django-cassandra-engine/issues/104 - pkgs={"cassandra-driver": ["~=3.24.0", latest], "pytest-randomly": latest}, - command="pytest {cmdargs} tests/contrib/cassandra", - ), Venv( name="algoliasearch", command="pytest {cmdargs} tests/contrib/algoliasearch", pkgs={"urllib3": "~=1.26.15", "pytest-randomly": latest}, venvs=[ - Venv( - pys="3.8", - pkgs={"algoliasearch": ["~=2.5.0", "~=2.6"]}, - ), Venv( # algoliasearch added support for Python 3.9, 3.10, 3.11 in 3.0 - pys=select_pys(min_version="3.9"), + pys=select_pys(), pkgs={"algoliasearch": "~=2.6"}, ), ], @@ -2202,13 +2087,13 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys="3.9", pkgs={ "aiopg": ["~=0.16.0"], }, ), Venv( - pys=select_pys(min_version="3.8"), + pys=select_pys(), pkgs={ "aiopg": ["~=1.0", "~=1.4.0"], }, @@ -2231,7 +2116,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT # only test a subset of files for older aiohttp versions command="pytest {cmdargs} tests/contrib/aiohttp/test_aiohttp_client.py \ tests/contrib/aiohttp/test_aiohttp_patch.py", - pys=select_pys(min_version="3.8", max_version="3.9"), + pys="3.9", pkgs={ "pytest-aiohttp": ["<=1.0.5"], "aiohttp": ["~=3.7.0"], @@ -2239,7 +2124,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, ), Venv( - pys=select_pys(min_version="3.8", max_version="3.12"), + pys=select_pys(min_version="3.9", max_version="3.12"), pkgs={ "pytest-asyncio": ["==0.23.7"], "pytest-aiohttp": ["==1.0.5"], @@ -2272,7 +2157,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.12"), + pys=select_pys(min_version="3.9", max_version="3.12"), pkgs={ "pytest-asyncio": ["==0.23.7"], }, @@ -2292,7 +2177,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(max_version="3.9"), + pys="3.9", pkgs={ "jinja2": "~=2.10.0", # https://github.com/pallets/markupsafe/issues/282 @@ -2301,7 +2186,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, ), Venv( - pys=select_pys(min_version="3.8"), + pys=select_pys(), pkgs={ "jinja2": ["~=3.0.0", latest], }, @@ -2334,7 +2219,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.10"), + pys=select_pys(min_version="3.9", max_version="3.10"), pkgs={ "pytest-asyncio": "==0.23.7", }, @@ -2370,7 +2255,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT ), Venv( name="aredis", - pys=select_pys(min_version="3.8", max_version="3.9"), + pys="3.9", command="pytest {cmdargs} tests/contrib/aredis", pkgs={ "pytest-asyncio": "==0.21.1", @@ -2380,7 +2265,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT ), Venv( name="avro", - pys=select_pys(min_version="3.8"), + pys=select_pys(), command="pytest {cmdargs} tests/contrib/avro", pkgs={ "avro": latest, @@ -2390,7 +2275,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"), + pys=select_pys(), pkgs={ "protobuf": latest, "pytest-randomly": latest, @@ -2405,7 +2290,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys="3.9", pkgs={"yaaredis": ["~=2.0.0", latest]}, ), Venv( @@ -2427,14 +2312,14 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT venvs=[ Venv( # sanic added support for Python 3.9 in 20.12 - pys=select_pys(min_version="3.8", max_version="3.9"), + pys="3.9", pkgs={ "sanic": "~=20.12", "pytest-sanic": "~=1.6.2", }, ), Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys="3.9", pkgs={ "sanic": [ "~=21.3", @@ -2452,7 +2337,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, ), Venv( - pys=select_pys(min_version="3.8", max_version="3.10"), + pys=select_pys(min_version="3.9", max_version="3.10"), pkgs={ "sanic": ["~=22.3", "~=22.12"], "sanic-testing": "~=22.3.0", @@ -2484,10 +2369,6 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "pytest-randomly": latest, }, venvs=[ - Venv( - pys="3.8", - pkgs={"snowflake-connector-python": ["~=2.3.0", "~=2.9.0", latest]}, - ), Venv( # snowflake-connector-python added support for Python 3.9 in 2.4.0 pys="3.9", @@ -2521,11 +2402,6 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "pytest-randomly": latest, }, venvs=[ - # our test_asyncpg.py uses `yield` in an async function and is not compatible with Python 3.5 - Venv( - pys="3.8", - pkgs={"asyncpg": ["~=0.22.0", latest]}, - ), Venv( # asyncpg added support for Python 3.9 in 0.22 pys="3.9", @@ -2567,7 +2443,6 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT # To test a range of versions without updating Python, we use Linux only pysqlite3-binary package # Remove pysqlite3-binary on Python 3.9+ locally on non-linux machines Venv(pys=select_pys(min_version="3.9", max_version="3.12"), pkgs={"pysqlite3-binary": [latest]}), - Venv(pys=select_pys(max_version="3.8"), pkgs={"importlib-metadata": latest}), ], ), Venv( @@ -2594,7 +2469,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "pytest-randomly": latest, }, venvs=[ - Venv(pys=select_pys(min_version="3.8", max_version="3.10")), + Venv(pys=select_pys(min_version="3.9", max_version="3.10")), Venv(pys=select_pys(min_version="3.11"), pkgs={"attrs": latest}), ], ), @@ -2606,7 +2481,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.10"), + pys=select_pys(min_version="3.9", max_version="3.10"), pkgs={ "dogpile.cache": [ "~=0.6.0", @@ -2655,29 +2530,16 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "markupsafe": "==2.0.1", "mock": latest, "flask": latest, - "gevent": latest, # gevent>22.12 is not compatible with py3.8 + "gevent": latest, "requests": "==2.28.1", # specific version expected by tests }, venvs=[ - Venv( - pys="3.8", - # Ensure we test against versions of opentelemetry-api that broke compatibility with ddtrace - # gevent>24.2.1 is not compatible with py3.8 so we pin it to the last compatible version - pkgs={"gevent": "<=24.2.1", "opentelemetry-api": ["~=1.0.0", "~=1.15.0", "~=1.26.0", latest]}, - ), Venv( # opentelemetry-api doesn't yet work with Python 3.14 pys=select_pys(min_version="3.9", max_version="3.13"), # Ensure we test against versions of opentelemetry-api that broke compatibility with ddtrace pkgs={"opentelemetry-api": ["~=1.0.0", "~=1.15.0", "~=1.26.0", latest]}, ), - Venv( - pys="3.8", - # Ensure we test against versions of opentelemetry-api that broke compatibility with ddtrace - # gevent>24.2.1 is not compatible with py3.8 so we pin it to the last compatible version - pkgs={"gevent": "<=24.2.1", "opentelemetry-exporter-otlp": ["~=1.15.0", latest]}, - env={"SDK_EXPORTER_INSTALLED": "1"}, - ), Venv( # opentelemetry-exporter-otlp doesn't yet work with Python 3.14 pys=select_pys(min_version="3.9", max_version="3.13"), @@ -2734,7 +2596,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.11"), + pys=select_pys(min_version="3.9", max_version="3.11"), pkgs={ "openai[embeddings,datalib]": ["==1.0.0", "==1.30.1"], "pillow": "==9.5.0", @@ -2742,7 +2604,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, ), Venv( - pys=select_pys(min_version="3.8", max_version="3.13"), + pys=select_pys(min_version="3.9", max_version="3.13"), pkgs={ "openai": ["<2.0.0", "~=1.76.2", "==1.66.0"], "tiktoken": latest, @@ -2761,12 +2623,12 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT command="pytest {cmdargs} tests/opentracer/core", ), Venv( - pys=select_pys(min_version="3.8"), + pys=select_pys(), command="pytest {cmdargs} tests/opentracer/test_tracer_asyncio.py", pkgs={"pytest-asyncio": "==0.21.1"}, ), Venv( - pys=select_pys(min_version="3.8", max_version="3.11"), + pys=select_pys(min_version="3.9", max_version="3.11"), command="pytest {cmdargs} tests/opentracer/test_tracer_tornado.py", # TODO: update opentracing tests to be compatible with Tornado v6. # https://github.com/opentracing/opentracing-python/issues/136 @@ -2777,13 +2639,6 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT Venv( command="pytest {cmdargs} tests/opentracer/test_tracer_gevent.py", venvs=[ - Venv( - pys="3.8", - pkgs={ - "gevent": latest, - "greenlet": latest, - }, - ), Venv( pys="3.9", pkgs={"gevent": latest, "greenlet": latest}, @@ -2813,10 +2668,6 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT command="pytest {cmdargs} tests/contrib/pyodbc", pkgs={"pytest-randomly": latest}, venvs=[ - Venv( - pys=select_pys(max_version="3.8"), - pkgs={"pyodbc": ["~=4.0.31", latest]}, - ), Venv( # pyodbc added support for Python 3.9/3.10 in 4.0.34 pys=select_pys(min_version="3.9", max_version="3.10"), @@ -2835,8 +2686,8 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT pkgs={"pytest-randomly": latest}, venvs=[ Venv( - # pylibmc added support for Python 3.8/3.9/3.10 in 1.6.2 - pys=select_pys(min_version="3.8", max_version="3.10"), + # pylibmc added support for Python 3.9/3.10 in 1.6.2 + pys=select_pys(min_version="3.9", max_version="3.10"), pkgs={ "pylibmc": ["~=1.6.2", latest], }, @@ -2855,7 +2706,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT pkgs={"pytest-randomly": latest}, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys="3.9", pkgs={ "kombu": [">=4.6,<4.7", ">=5.0,<5.1", latest], }, @@ -2876,8 +2727,8 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT pkgs={"pytest-randomly": latest}, venvs=[ Venv( - # tornado added support for Python 3.8/3.9 in 6.1 - pys=select_pys(min_version="3.8", max_version="3.9"), + # tornado added support for Python 3.9 in 6.1 + pys="3.9", # tornado 6.0.x and pytest 8.x have a compatibility bug pkgs={"tornado": ["~=6.0.0", "~=6.2"], "pytest": "<=8"}, ), @@ -2899,7 +2750,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT pkgs={"pytest-randomly": latest}, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.9"), + pys="3.9", pkgs={"mysqlclient": ["~=2.0", "~=2.1", latest]}, ), Venv( @@ -3025,11 +2876,11 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.12"), + pys=select_pys(min_version="3.9", max_version="3.12"), pkgs={"anthropic": "~=0.28.0", "httpx": "~=0.27.0"}, ), Venv( - pys=select_pys(min_version="3.8"), + pys=select_pys(), pkgs={"anthropic": latest, "httpx": "<0.28.0"}, ), ], @@ -3071,7 +2922,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.9"), + pys=select_pys(), ), ], ), @@ -3084,7 +2935,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.9"), + pys=select_pys(), ), ], ), @@ -3109,7 +2960,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=select_pys(min_version="3.9"), + pys=select_pys(), pkgs={ "pydantic-ai": ["==0.3.0", "==0.4.4"], "pydantic": "==2.12.0a1", @@ -3179,7 +3030,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT command="pytest {cmdargs} -vv tests/contrib/kafka", venvs=[ Venv( - pys=select_pys(min_version="3.8", max_version="3.10"), + pys=select_pys(min_version="3.9", max_version="3.10"), pkgs={"confluent-kafka": ["~=1.9.2", latest]}, ), # confluent-kafka added support for Python 3.11 in 2.0.2 @@ -3191,7 +3042,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT Venv( name="aws_lambda", command="pytest --no-ddtrace {cmdargs} tests/contrib/aws_lambda", - pys=select_pys(min_version="3.8", max_version="3.13"), + pys=select_pys(min_version="3.9", max_version="3.13"), pkgs={ "boto3": latest, "datadog-lambda": [">=6.105.0", latest], @@ -3202,7 +3053,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT Venv( name="azure_eventhubs", command="pytest {cmdargs} tests/contrib/azure_eventhubs", - pys=select_pys(min_version="3.8", max_version="3.13"), + pys=select_pys(min_version="3.9", max_version="3.13"), pkgs={ "azure.eventhub": ["~=5.12.0", latest], "pytest-asyncio": "==0.23.7", @@ -3211,7 +3062,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT Venv( name="azure_functions", command="pytest {cmdargs} tests/contrib/azure_functions", - pys=select_pys(min_version="3.8", max_version="3.11"), + pys=select_pys(min_version="3.9", max_version="3.11"), pkgs={ "azure.functions": ["~=1.10.1", latest], "requests": latest, @@ -3220,7 +3071,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT Venv( name="azure_functions:eventhubs", command="pytest {cmdargs} tests/contrib/azure_functions_eventhubs", - pys=select_pys(min_version="3.8", max_version="3.11"), + pys=select_pys(min_version="3.9", max_version="3.11"), pkgs={ "azure.functions": ["~=1.10.1", latest], "azure.eventhub": latest, @@ -3230,7 +3081,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT Venv( name="azure_functions:servicebus", command="pytest {cmdargs} tests/contrib/azure_functions_servicebus", - pys=select_pys(min_version="3.8", max_version="3.11"), + pys=select_pys(min_version="3.9", max_version="3.11"), pkgs={ "azure.functions": ["~=1.10.1", latest], "azure.servicebus": latest, @@ -3278,12 +3129,6 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "DD_AGENT_PORT": "9126", }, venvs=[ - Venv( - pys=["3.8"], - pkgs={"greenlet": "==3.1.0"}, - # Prevent segfaults from zope.interface c optimizations - env={"PURE_PYTHON": "1"}, - ), Venv( pys=select_pys(min_version="3.9", max_version="3.13"), ), @@ -3320,7 +3165,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "langchain": latest, "pandas": latest, }, - pys=select_pys(min_version="3.8", max_version="3.13"), + pys=select_pys(min_version="3.9", max_version="3.13"), ), Venv( name="valkey", @@ -3330,7 +3175,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "pytest-randomly": latest, "pytest-asyncio": "==0.23.7", }, - pys=select_pys(min_version="3.8"), + pys=select_pys(), ), Venv( name="profile", @@ -3353,9 +3198,8 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT "pytest-randomly": latest, }, venvs=[ - # Python 3.8 + 3.9 Venv( - pys=["3.8", "3.9"], + pys="3.9", pkgs={"uwsgi": latest}, venvs=[ Venv( @@ -3456,9 +3300,8 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT pys=select_pys(max_version="3.13"), pkgs={"uwsgi": "<2.0.30"}, ), - # Python 3.8 + 3.9 Venv( - pys=["3.8", "3.9"], + pys="3.9", pkgs={"uwsgi": latest}, venvs=[ Venv( @@ -3571,21 +3414,6 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT ), ], ), - Venv( - name="freezegun", - command="pytest tests/contrib/freezegun {cmdargs}", - pkgs={ - "pytest-randomly": latest, - }, - venvs=[ - Venv( - pys=["3.10", "3.12"], - pkgs={ - "freezegun": ["~=1.3.0", "~=1.5.0"], - }, - ), - ], - ), Venv( name="appsec_integrations_flask", command="pytest -vvv {cmdargs} tests/appsec/integrations/flask_tests/", @@ -3607,7 +3435,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=["3.8", "3.9"], + pys="3.9", pkgs={ "flask": "~=1.1", "MarkupSafe": "~=1.1", @@ -3616,26 +3444,25 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, ), Venv( - pys=["3.8", "3.9", "3.10", "3.11"], + pys=select_pys(min_version="3.9", max_version="3.11"), pkgs={ "flask": "~=2.2", }, ), Venv( - pys=["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"], + pys=select_pys(max_version="3.13"), pkgs={ "flask": "~=2.2", }, ), Venv( - pys=["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"], + pys=select_pys(max_version="3.13"), pkgs={ "flask": "~=3.0", }, ), Venv( - # werkzeug 3.1 drops support for py3.8 - pys=["3.11", "3.12", "3.13"], + pys=select_pys(min_version="3.11", max_version="3.13"), pkgs={ "flask": "~=3.1", "Werkzeug": "~=3.1", @@ -3698,28 +3525,28 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=["3.8", "3.9"], + pys="3.9", pkgs={ "django": "~=2.2", }, venvs=_appsec_threats_iast_variants, ), Venv( - pys=["3.8", "3.9", "3.10"], + pys=["3.9", "3.10"], pkgs={ "django": "~=3.2", }, venvs=_appsec_threats_iast_variants, ), Venv( - pys=["3.8", "3.10"], + pys="3.10", pkgs={ "django": "==4.0.10", }, venvs=_appsec_threats_iast_variants, ), Venv( - pys=["3.8", "3.11", "3.13"], + pys=["3.11", "3.13"], pkgs={ "django": "~=4.2", }, @@ -3752,7 +3579,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=["3.8", "3.9"], + pys="3.9", pkgs={ "flask": "~=1.1", "MarkupSafe": "~=1.1", @@ -3760,7 +3587,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT venvs=_appsec_threats_iast_variants, ), Venv( - pys=["3.8", "3.9"], + pys="3.9", pkgs={ "flask": "==2.1.3", "Werkzeug": "<3.0", @@ -3768,14 +3595,14 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT venvs=_appsec_threats_iast_variants, ), Venv( - pys=["3.8", "3.10", "3.13"], + pys=["3.10", "3.13"], pkgs={ "flask": "~=2.3", }, venvs=_appsec_threats_iast_variants, ), Venv( - pys=["3.8", "3.11", "3.13"], + pys=["3.11", "3.13"], pkgs={ "flask": "~=3.0", }, @@ -3803,7 +3630,7 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT }, venvs=[ Venv( - pys=["3.8", "3.10", "3.13"], + pys=["3.10", "3.13"], pkgs={ "fastapi": "==0.86.0", "anyio": "==3.7.1", @@ -3811,14 +3638,14 @@ def select_pys(min_version: str = MIN_PYTHON_VERSION, max_version: str = MAX_PYT venvs=_appsec_threats_iast_variants, ), Venv( - pys=["3.8", "3.10", "3.13"], + pys=["3.10", "3.13"], pkgs={ "fastapi": "==0.94.1", }, venvs=_appsec_threats_iast_variants, ), Venv( - pys=["3.8", "3.10", "3.13"], + pys=["3.10", "3.13"], pkgs={ "fastapi": "~=0.114.2", }, diff --git a/supported_versions_output.json b/supported_versions_output.json index c1ea2d658ad..f9e361f828c 100644 --- a/supported_versions_output.json +++ b/supported_versions_output.json @@ -45,7 +45,7 @@ { "dependency": "algoliasearch", "integration": "algoliasearch", - "minimum_tracer_supported": "2.5.0", + "minimum_tracer_supported": "2.6.3", "max_tracer_supported": "2.6.3", "pinned": "true", "auto-instrumented": true @@ -75,7 +75,7 @@ { "dependency": "asyncpg", "integration": "asyncpg", - "minimum_tracer_supported": "0.22.0", + "minimum_tracer_supported": "0.23.0", "max_tracer_supported": "0.30.0", "auto-instrumented": true }, @@ -106,7 +106,7 @@ "minimum_tracer_supported": "5.12.2", "max_tracer_supported": "5.15.0", "pinned": "true", - "auto-instrumented": false + "auto-instrumented": true }, { "dependency": "azure-functions", @@ -147,13 +147,6 @@ "max_tracer_supported": "0.13.4", "auto-instrumented": true }, - { - "dependency": "cassandra-driver", - "integration": "cassandra", - "minimum_tracer_supported": "3.24.0", - "max_tracer_supported": "3.28.0", - "auto-instrumented": true - }, { "dependency": "celery", "integration": "celery", @@ -308,18 +301,10 @@ "max_tracer_supported": "2.3.0", "auto-instrumented": false }, - { - "dependency": "freezegun", - "integration": "freezegun", - "minimum_tracer_supported": "1.3.1", - "max_tracer_supported": "1.5.2", - "pinned": "true", - "auto-instrumented": false - }, { "dependency": "gevent", "integration": "gevent", - "minimum_tracer_supported": "20.12.1", + "minimum_tracer_supported": "21.1.2", "max_tracer_supported": "25.5.1", "auto-instrumented": true }, @@ -464,13 +449,6 @@ "max_tracer_supported": "1.0.2", "auto-instrumented": true }, - { - "dependency": "mongoengine", - "integration": "mongoengine", - "minimum_tracer_supported": "0.23.1", - "max_tracer_supported": "0.29.1", - "auto-instrumented": true - }, { "dependency": "mysql-connector-python", "integration": "mysql", @@ -489,7 +467,8 @@ "dependency": "openai", "integration": "openai", "minimum_tracer_supported": "1.0.0", - "max_tracer_supported": "1.91.0", + "max_tracer_supported": "1.109.1", + "pinned": "true", "auto-instrumented": true }, { @@ -502,7 +481,7 @@ { "dependency": "protobuf", "integration": "protobuf", - "minimum_tracer_supported": "5.29.3", + "minimum_tracer_supported": "6.30.1", "max_tracer_supported": "6.32.0", "auto-instrumented": false }, @@ -516,7 +495,7 @@ { "dependency": "psycopg2-binary", "integration": "psycopg", - "minimum_tracer_supported": "2.8.6", + "minimum_tracer_supported": "2.9.10", "max_tracer_supported": "2.9.10", "auto-instrumented": true }, @@ -559,7 +538,7 @@ { "dependency": "pynamodb", "integration": "pynamodb", - "minimum_tracer_supported": "5.0.3", + "minimum_tracer_supported": "5.5.1", "max_tracer_supported": "5.5.1", "pinned": "true", "auto-instrumented": true @@ -618,7 +597,7 @@ { "dependency": "requests", "integration": "requests", - "minimum_tracer_supported": "2.20.1", + "minimum_tracer_supported": "2.25.1", "max_tracer_supported": "2.32.5", "auto-instrumented": true }, @@ -639,7 +618,7 @@ { "dependency": "snowflake-connector-python", "integration": "snowflake", - "minimum_tracer_supported": "2.3.10", + "minimum_tracer_supported": "2.4.6", "max_tracer_supported": "3.17.2", "auto-instrumented": false }, @@ -682,7 +661,7 @@ { "dependency": "urllib3", "integration": "urllib3", - "minimum_tracer_supported": "1.25", + "minimum_tracer_supported": "1.25.8", "max_tracer_supported": "2.5.0", "auto-instrumented": false }, diff --git a/supported_versions_table.csv b/supported_versions_table.csv index 94af82316ad..446583b9b0c 100644 --- a/supported_versions_table.csv +++ b/supported_versions_table.csv @@ -5,21 +5,20 @@ aiohttp-jinja2,aiohttp_jinja2,1.5.1,1.6,True aiohttp_jinja2,aiohttp_jinja2,1.5.1,1.6,True aiomysql,aiomysql,0.1.1,0.2.0,True aiopg,aiopg *,0.16.0,1.4.0,True -algoliasearch,algoliasearch *,2.5.0,2.6.3,True +algoliasearch,algoliasearch *,2.6.3,2.6.3,True anthropic,anthropic,0.28.1,0.69.0,True aredis,aredis,1.1.8,1.1.8,True pytest-asyncio,asyncio *,0.21.1,1.2.0,True -asyncpg,asyncpg,0.22.0,0.30.0,True +asyncpg,asyncpg,0.23.0,0.30.0,True avro,avro,1.12.0,1.12.0,True datadog-lambda,aws_lambda,6.105.0,6.105.0,True datadog_lambda,aws_lambda,6.105.0,6.105.0,True -azure-eventhub,azure_eventhubs *,5.12.2,5.15.0,False +azure-eventhub,azure_eventhubs *,5.12.2,5.15.0,True azure-functions,azure_functions *,1.10.1,1.23.0,True azure-servicebus,azure_servicebus *,7.14.2,7.14.2,True boto3,botocore *,1.34.49,1.38.26,True botocore,botocore *,1.34.49,1.38.26,True bottle,bottle,0.12.25,0.13.4,True -cassandra-driver,cassandra,3.24.0,3.28.0,True celery,celery,5.5.3,5.5.3,True cherrypy,cherrypy,17.0.0,18.10.0,False python-consul,consul,1.1.0,1.1.0,True @@ -42,8 +41,7 @@ fastapi,fastapi,0.64.0,0.118.0,True flask,flask,1.1.4,3.1.2,True flask-cache,flask_cache,0.13.1,0.13.1,False flask-caching,flask_cache,1.10.1,2.3.0,False -freezegun,freezegun *,1.3.1,1.5.2,False -gevent,gevent,20.12.1,25.5.1,True +gevent,gevent,21.1.2,25.5.1,True google-adk,google_adk,1.0.0,1.15.1,True google-genai,google_genai,1.21.1,1.41.0,True google-generativeai,google_generativeai,0.7.2,0.8.5,True @@ -64,20 +62,19 @@ mako,mako,1.0.14,1.3.10,True mariadb,mariadb,1.0.11,1.1.13,True mcp,mcp,1.10.1,1.16.0,True molten,molten,1.0.2,1.0.2,True -mongoengine,mongoengine,0.23.1,0.29.1,True mysql-connector-python,mysql,8.0.5,9.4.0,True mysqlclient,mysqldb,2.2.1,2.2.6,True -openai,openai,1.0.0,1.91.0,True +openai,openai *,1.0.0,1.109.1,True openai-agents,openai_agents,0.0.8,0.0.16,True -protobuf,protobuf,5.29.3,6.32.0,False +protobuf,protobuf,6.30.1,6.32.0,False psycopg,psycopg,3.0.18,3.2.10,True -psycopg2-binary,psycopg,2.8.6,2.9.10,True +psycopg2-binary,psycopg,2.9.10,2.9.10,True pydantic-ai-slim,pydantic_ai *,0.3.0,0.4.4,True pylibmc,pylibmc,1.6.3,1.6.3,True pymemcache,pymemcache,3.4.4,4.0.0,True pymongo,pymongo,3.8.0,4.15.0,True pymysql,pymysql,0.10.1,1.1.2,True -pynamodb,pynamodb *,5.0.3,5.5.1,True +pynamodb,pynamodb *,5.5.1,5.5.1,True pyodbc,pyodbc,4.0.39,5.2.0,True pyramid,pyramid,1.10.8,2.0.2,True pytest,pytest,6.2.5,8.4.2,False @@ -85,16 +82,16 @@ pytest-bdd,pytest_bdd *,4.1.0,6.0.1,False ray,ray *,2.46.0,2.49.2,False redis,redis,4.6.0,6.4.0,True redis-py-cluster,rediscluster,2.0.0,2.1.3,True -requests,requests,2.20.1,2.32.5,True +requests,requests,2.25.1,2.32.5,True rq,rq,1.8.1,1.16.2,True sanic,sanic,20.12.7,24.6.0,True -snowflake-connector-python,snowflake,2.3.10,3.17.2,False +snowflake-connector-python,snowflake,2.4.6,3.17.2,False sqlalchemy,sqlalchemy,1.3.24,2.0.43,False pysqlite3-binary,sqlite3,0.5.2.post3,0.5.2.post3,True starlette,starlette,0.14.2,0.48.0,True structlog,structlog,20.2.0,25.4.0,True tornado,tornado *,6.0.4,6.5.1,False -urllib3,urllib3,1.25,2.5.0,False +urllib3,urllib3,1.25.8,2.5.0,False valkey,valkey,6.0.2,6.1.1,True google-cloud-aiplatform,vertexai,1.71.1,1.71.1,True vertexai,vertexai,1.71.1,1.71.1,True diff --git a/tests/appsec/suitespec.yml b/tests/appsec/suitespec.yml index 12df4a54ed0..b215b5edb54 100644 --- a/tests/appsec/suitespec.yml +++ b/tests/appsec/suitespec.yml @@ -27,7 +27,7 @@ suites: runner: riot snapshot: true appsec_iast_default: - parallelism: 6 + parallelism: 4 paths: - '@bootstrap' - '@core' @@ -139,7 +139,7 @@ suites: retry: 2 runner: riot appsec_integrations_flask: - parallelism: 17 + parallelism: 13 paths: - '@bootstrap' - '@core' @@ -154,7 +154,7 @@ suites: - testagent timeout: 40m appsec_integrations_django: - parallelism: 22 + parallelism: 16 paths: - '@bootstrap' - '@core' @@ -169,7 +169,7 @@ suites: - testagent timeout: 30m appsec_integrations_fastapi: - parallelism: 23 + parallelism: 17 paths: - '@bootstrap' - '@core' @@ -183,7 +183,7 @@ suites: services: - testagent appsec_threats_django: - parallelism: 12 + parallelism: 8 paths: - '@bootstrap' - '@core' @@ -199,7 +199,7 @@ suites: retry: 2 runner: riot appsec_threats_fastapi: - parallelism: 9 + parallelism: 6 paths: - '@bootstrap' - '@core' @@ -216,7 +216,7 @@ suites: retry: 2 runner: riot appsec_threats_flask: - parallelism: 10 + parallelism: 4 paths: - '@bootstrap' - '@core' @@ -270,4 +270,4 @@ suites: retry: 2 runner: riot services: - - testagent \ No newline at end of file + - testagent diff --git a/tests/ci_visibility/suitespec.yml b/tests/ci_visibility/suitespec.yml index 99b565bcd10..6046b518c31 100644 --- a/tests/ci_visibility/suitespec.yml +++ b/tests/ci_visibility/suitespec.yml @@ -14,8 +14,6 @@ components: - ddtrace/contrib/internal/selenium/* unittest: - ddtrace/contrib/internal/unittest/* - freezegun: - - ddtrace/contrib/internal/freezegun/* suites: ci_visibility: parallelism: 4 @@ -28,14 +26,12 @@ suites: - '@pytest' - '@codeowners' - '@unittest' - - '@freezegun' - - '@tracing' - tests/ci_visibility/* - tests/snapshots/test_api_fake_runners.* runner: riot snapshot: true dd_coverage: - parallelism: 5 + parallelism: 3 paths: - '@bootstrap' - '@core' @@ -55,7 +51,6 @@ suites: - '@ci_visibility' - '@coverage' - '@codeowners' - - '@freezegun' - tests/contrib/pytest/* - tests/contrib/pytest_benchmark/* - tests/contrib/pytest_bdd/* @@ -85,8 +80,6 @@ suites: - '@unittest' - '@ci_visibility' - '@coverage' - - '@freezegun' - - '@tracing' - tests/contrib/unittest/* - tests/snapshots/tests.contrib.unittest.* runner: riot diff --git a/tests/commands/ddtrace_run_app_name.py b/tests/commands/ddtrace_run_app_name.py deleted file mode 100644 index 4cf41192e79..00000000000 --- a/tests/commands/ddtrace_run_app_name.py +++ /dev/null @@ -1,6 +0,0 @@ -from ddtrace.opentracer import Tracer - - -if __name__ == "__main__": - tracer = Tracer() - print(tracer._service_name) diff --git a/tests/commands/test_runner.py b/tests/commands/test_runner.py index f4bc9faebd9..b795223328e 100644 --- a/tests/commands/test_runner.py +++ b/tests/commands/test_runner.py @@ -6,6 +6,7 @@ import pytest import ddtrace +from ddtrace.internal.compat import PYTHON_VERSION_INFO from ..utils import BaseTestCase from ..utils import override_env @@ -197,13 +198,6 @@ def test_argv_passed(self): out = subprocess.check_output(["ddtrace-run", "python", "tests/commands/ddtrace_run_argv.py", "foo", "bar"]) assert out.startswith(b"Test success") - def test_got_app_name(self): - """ - apps run with ddtrace-run have a proper app name - """ - out = subprocess.check_output(["ddtrace-run", "python", "tests/commands/ddtrace_run_app_name.py"]) - assert out.startswith(b"ddtrace_run_app_name.py") - def test_global_trace_tags(self): """Ensure global tags are passed in from environment""" with self.override_env(dict(DD_TRACE_GLOBAL_TAGS="a:True,b:0,c:C")): @@ -522,6 +516,7 @@ def test_ddtrace_run_and_auto_sitecustomize(): assert final_modules - starting_modules == set(["ddtrace.auto"]) +@pytest.mark.skipif(PYTHON_VERSION_INFO < (3, 10), reason="ddtrace under Python 3.9 is deprecated") @pytest.mark.subprocess(env=dict(DD_TRACE_GLOBAL_TAGS="a:True"), err=None) def test_global_trace_tags_deprecation_warning(): """Ensure DD_TRACE_GLOBAL_TAGS deprecation warning shows""" diff --git a/tests/contrib/aiobotocore/test.py b/tests/contrib/aiobotocore/test.py index 5e7151797b0..0fdf25414e8 100644 --- a/tests/contrib/aiobotocore/test.py +++ b/tests/contrib/aiobotocore/test.py @@ -303,92 +303,6 @@ async def test_double_patch(tracer): assert len(traces[0]) == 1 -@pytest.mark.asyncio -async def test_opentraced_client(tracer): - from tests.opentracer.utils import init_tracer - - ot_tracer = init_tracer("my_svc", tracer) - - with ot_tracer.start_active_span("ot_outer_span"): - async with aiobotocore_client("ec2", tracer) as ec2: - await ec2.describe_instances() - - traces = tracer.pop_traces() - assert len(traces) == 1 - assert len(traces[0]) == 2 - ot_span = traces[0][0] - dd_span = traces[0][1] - - assert ot_span.resource == "ot_outer_span" - assert ot_span.service == "my_svc" - - # confirm the parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert_is_measured(dd_span) - assert dd_span.get_tag("aws.agent") == "aiobotocore" - assert dd_span.get_tag("aws.region") == "us-west-2" - assert dd_span.get_tag("region") == "us-west-2" - assert dd_span.get_tag("aws.operation") == "DescribeInstances" - assert_span_http_status_code(dd_span, 200) - assert dd_span.get_metric("retry_attempts") == 0 - assert dd_span.service == "aws.ec2" - assert dd_span.resource == "ec2.describeinstances" - assert dd_span.name == "ec2.command" - assert dd_span.get_tag("component") == "aiobotocore" - assert dd_span.get_tag("span.kind") == "client" - - -@pytest.mark.asyncio -async def test_opentraced_s3_client(tracer): - from tests.opentracer.utils import init_tracer - - ot_tracer = init_tracer("my_svc", tracer) - - with ot_tracer.start_active_span("ot_outer_span"): - async with aiobotocore_client("s3", tracer) as s3: - await s3.list_buckets() - with ot_tracer.start_active_span("ot_inner_span1"): - await s3.list_buckets() - with ot_tracer.start_active_span("ot_inner_span2"): - pass - - traces = tracer.pop_traces() - assert len(traces) == 1 - assert len(traces[0]) == 5 - ot_outer_span = traces[0][0] - dd_span = traces[0][1] - ot_inner_span = traces[0][2] - dd_span2 = traces[0][3] - ot_inner_span2 = traces[0][4] - - assert ot_outer_span.resource == "ot_outer_span" - assert ot_inner_span.resource == "ot_inner_span1" - assert ot_inner_span2.resource == "ot_inner_span2" - - # confirm the parenting - assert ot_outer_span.parent_id is None - assert dd_span.parent_id == ot_outer_span.span_id - assert ot_inner_span.parent_id == ot_outer_span.span_id - assert dd_span2.parent_id == ot_inner_span.span_id - assert ot_inner_span2.parent_id == ot_outer_span.span_id - - assert_is_measured(dd_span) - assert dd_span.get_tag("aws.operation") == "ListBuckets" - assert_span_http_status_code(dd_span, 200) - assert dd_span.service == "aws.s3" - assert dd_span.resource == "s3.listbuckets" - assert dd_span.name == "s3.command" - - assert dd_span2.get_tag("aws.operation") == "ListBuckets" - assert_span_http_status_code(dd_span2, 200) - assert dd_span2.service == "aws.s3" - assert dd_span2.resource == "s3.listbuckets" - assert dd_span2.name == "s3.command" - assert dd_span.get_tag("component") == "aiobotocore" - - @pytest.mark.asyncio async def test_user_specified_service(tracer): """ diff --git a/tests/contrib/aiohttp/test_middleware.py b/tests/contrib/aiohttp/test_middleware.py index 37e6ea2e3de..e067c197685 100644 --- a/tests/contrib/aiohttp/test_middleware.py +++ b/tests/contrib/aiohttp/test_middleware.py @@ -1,6 +1,5 @@ import os -from opentracing.scope_managers.asyncio import AsyncioScopeManager import pytest import pytest_asyncio @@ -14,7 +13,6 @@ from ddtrace.contrib.internal.aiohttp.middlewares import trace_middleware from ddtrace.ext import http from ddtrace.internal.utils.version import parse_version -from tests.opentracer.utils import init_tracer from tests.tracer.utils_inferred_spans.test_helpers import assert_web_and_inferred_aws_api_gateway_span_data from tests.utils import assert_span_http_status_code from tests.utils import override_global_config @@ -545,22 +543,6 @@ async def test_parenting_200_dd(app_tracer, aiohttp_client): _assert_200_parenting(client, traces) -async def test_parenting_200_ot(app_tracer, aiohttp_client): - """OpenTracing version of test_handler.""" - app, tracer = app_tracer - client = await aiohttp_client(app) - ot_tracer = init_tracer("aiohttp_svc", tracer, scope_manager=AsyncioScopeManager()) - - with ot_tracer.start_active_span("aiohttp_op"): - request = await client.request("GET", "/") - assert 200 == request.status - text = await request.text() - - assert "What's tracing?" == text - traces = tracer.pop_traces() - _assert_200_parenting(client, traces) - - @pytest.mark.parametrize( "test_app", [ diff --git a/tests/contrib/aiopg/test.py b/tests/contrib/aiopg/test.py index b60e5989dda..63f2b89a379 100644 --- a/tests/contrib/aiopg/test.py +++ b/tests/contrib/aiopg/test.py @@ -11,7 +11,6 @@ from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME from tests.contrib.asyncio.utils import AsyncioTestCase from tests.contrib.config import POSTGRES_CONFIG -from tests.opentracer.utils import init_tracer from tests.subprocesstest import run_in_subprocess from tests.utils import assert_is_measured @@ -75,29 +74,6 @@ async def assert_conn_is_traced(self, tracer, db, service): assert span.get_tag("component") == "aiopg" assert span.get_tag("span.kind") == "client" - # Ensure OpenTracing compatibility - ot_tracer = init_tracer("aiopg_svc", tracer) - with ot_tracer.start_active_span("aiopg_op"): - cursor = await db.cursor() - await cursor.execute(q) - rows = await cursor.fetchall() - assert rows == [("foobarblah",)] - spans = self.pop_spans() - assert len(spans) == 2 - ot_span, dd_span = spans - # confirm the parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - assert ot_span.name == "aiopg_op" - assert ot_span.service == "aiopg_svc" - assert dd_span.name == "postgres.query" - assert dd_span.resource == q - assert dd_span.service == service - assert dd_span.error == 0 - assert dd_span.span_type == "sql" - assert dd_span.get_tag("component") == "aiopg" - assert span.get_tag("span.kind") == "client" - # run a query with an error and ensure all is well q = "select * from some_non_existant_table" cur = await db.cursor() diff --git a/tests/contrib/aredis/test_aredis.py b/tests/contrib/aredis/test_aredis.py index c1ae507aae5..a05e70fcdb4 100644 --- a/tests/contrib/aredis/test_aredis.py +++ b/tests/contrib/aredis/test_aredis.py @@ -9,7 +9,6 @@ from ddtrace.contrib.internal.aredis.patch import unpatch from ddtrace.internal.compat import is_wrapted from tests.conftest import DEFAULT_DDTRACE_SUBPROCESS_TEST_SERVICE_NAME -from tests.opentracer.utils import init_tracer from tests.utils import override_config from ..config import REDIS_CONFIG @@ -185,19 +184,6 @@ async def test(tracer, test_spans): assert err == b"", err.decode() -@pytest.mark.asyncio -async def test_opentracing(tracer, snapshot_context): - """Ensure OpenTracing works with redis.""" - - with snapshot_context(): - r = aredis.StrictRedis(port=REDIS_CONFIG["port"]) - pin = Pin.get_from(r) - ot_tracer = init_tracer("redis_svc", pin.tracer) - - with ot_tracer.start_active_span("redis_get"): - await r.get("cheese") - - @pytest.mark.subprocess(ddtrace_run=True, env=dict(DD_REDIS_RESOURCE_ONLY_COMMAND="false")) @pytest.mark.snapshot def test_full_command_in_resource_env(): diff --git a/tests/contrib/asyncio/test_propagation.py b/tests/contrib/asyncio/test_propagation.py index fd962e544ea..fc976d59ea8 100644 --- a/tests/contrib/asyncio/test_propagation.py +++ b/tests/contrib/asyncio/test_propagation.py @@ -7,7 +7,6 @@ from ddtrace.contrib.internal.asyncio.patch import patch from ddtrace.contrib.internal.asyncio.patch import unpatch from ddtrace.trace import Context -from tests.opentracer.utils import init_tracer _orig_create_task = asyncio.BaseEventLoop.create_task @@ -115,59 +114,3 @@ async def test_propagation_with_new_context(tracer): span = traces[0][0] assert span.trace_id == 100 assert span.parent_id == 101 - - -@pytest.mark.asyncio -async def test_trace_multiple_coroutines_ot_outer(tracer): - """OpenTracing version of test_trace_multiple_coroutines.""" - - # if multiple coroutines have nested tracing, they must belong - # to the same trace - async def coro(): - # another traced coroutine - with tracer.trace("coroutine_2"): - return 42 - - ot_tracer = init_tracer("asyncio_svc", tracer) - with ot_tracer.start_active_span("coroutine_1"): - value = await coro() - - # the coroutine has been called correctly - assert 42 == value - # a single trace has been properly reported - traces = tracer.pop_traces() - assert 1 == len(traces) - assert 2 == len(traces[0]) - assert "coroutine_1" == traces[0][0].name - assert "coroutine_2" == traces[0][1].name - # the parenting is correct - assert traces[0][0] == traces[0][1]._parent - assert traces[0][0].trace_id == traces[0][1].trace_id - - -@pytest.mark.asyncio -async def test_trace_multiple_coroutines_ot_inner(tracer): - """OpenTracing version of test_trace_multiple_coroutines.""" - # if multiple coroutines have nested tracing, they must belong - # to the same trace - ot_tracer = init_tracer("asyncio_svc", tracer) - - async def coro(): - # another traced coroutine - with ot_tracer.start_active_span("coroutine_2"): - return 42 - - with tracer.trace("coroutine_1"): - value = await coro() - - # the coroutine has been called correctly - assert 42 == value - # a single trace has been properly reported - traces = tracer.pop_traces() - assert 1 == len(traces) - assert 2 == len(traces[0]) - assert "coroutine_1" == traces[0][0].name - assert "coroutine_2" == traces[0][1].name - # the parenting is correct - assert traces[0][0] == traces[0][1]._parent - assert traces[0][0].trace_id == traces[0][1].trace_id diff --git a/tests/contrib/boto/test.py b/tests/contrib/boto/test.py index 91c626e6cbc..76dd974692a 100644 --- a/tests/contrib/boto/test.py +++ b/tests/contrib/boto/test.py @@ -20,7 +20,6 @@ from ddtrace.contrib.internal.boto.patch import unpatch from ddtrace.ext import http from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME -from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_is_measured from tests.utils import assert_span_http_status_code @@ -759,56 +758,3 @@ def test_elasticache_client(self): self.assertEqual(span.get_tag("span.kind"), "client") self.assertEqual(span.service, "test-boto-tracing.elasticache") self.assertEqual(span.resource, "elasticache") - - @mock_ec2 - def test_ec2_client_ot(self): - """OpenTracing compatibility check of the test_ec2_client test.""" - ec2 = boto.ec2.connect_to_region("us-west-2") - ot_tracer = init_tracer("my_svc", self.tracer) - pin = Pin(service=self.TEST_SERVICE) - pin._tracer = self.tracer - pin.onto(ec2) - - with ot_tracer.start_active_span("ot_span"): - ec2.get_all_instances() - spans = self.pop_spans() - assert spans - self.assertEqual(len(spans), 2) - ot_span, dd_span = spans - - # confirm the parenting - self.assertIsNone(ot_span.parent_id) - self.assertEqual(dd_span.parent_id, ot_span.span_id) - - self.assertEqual(ot_span.resource, "ot_span") - self.assertEqual(dd_span.get_tag("aws.operation"), "DescribeInstances") - self.assertEqual(dd_span.get_tag("component"), "boto") - self.assertEqual(dd_span.get_tag("span.kind"), "client") - assert_span_http_status_code(dd_span, 200) - self.assertEqual(dd_span.get_tag(http.METHOD), "POST") - self.assertEqual(dd_span.get_tag("aws.region"), "us-west-2") - self.assertEqual(dd_span.get_tag("region"), "us-west-2") - self.assertEqual(dd_span.get_tag("aws.partition"), "aws") - - with ot_tracer.start_active_span("ot_span"): - ec2.run_instances(21) - spans = self.pop_spans() - assert spans - self.assertEqual(len(spans), 2) - ot_span, dd_span = spans - - # confirm the parenting - self.assertIsNone(ot_span.parent_id) - self.assertEqual(dd_span.parent_id, ot_span.span_id) - - self.assertEqual(dd_span.get_tag("aws.operation"), "RunInstances") - assert_span_http_status_code(dd_span, 200) - self.assertEqual(dd_span.get_tag(http.METHOD), "POST") - self.assertEqual(dd_span.get_tag("aws.region"), "us-west-2") - self.assertEqual(dd_span.get_tag("region"), "us-west-2") - self.assertEqual(dd_span.get_tag("aws.partition"), "aws") - self.assertEqual(dd_span.get_tag("component"), "boto") - self.assertEqual(dd_span.get_tag("span.kind"), "client") - self.assertEqual(dd_span.service, "test-boto-tracing.ec2") - self.assertEqual(dd_span.resource, "ec2.runinstances") - self.assertEqual(dd_span.name, "ec2.command") diff --git a/tests/contrib/botocore/test.py b/tests/contrib/botocore/test.py index 5270f69f021..1cfdb2306fd 100644 --- a/tests/contrib/botocore/test.py +++ b/tests/contrib/botocore/test.py @@ -47,7 +47,6 @@ from ddtrace.internal.utils.version import parse_version from ddtrace.propagation.http import HTTP_HEADER_PARENT_ID from ddtrace.propagation.http import HTTP_HEADER_TRACE_ID -from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_is_measured from tests.utils import assert_span_http_status_code @@ -2245,43 +2244,6 @@ def test_schematized_unspecified_service_kms_client_v1(self): assert span.service == DEFAULT_SPAN_SERVICE_NAME assert span.name == "aws.kms.request" - @mock_ec2 - def test_traced_client_ot(self): - """OpenTracing version of test_traced_client.""" - ot_tracer = init_tracer("ec2_svc", self.tracer) - - with ot_tracer.start_active_span("ec2_op"): - ec2 = self.session.create_client("ec2", region_name="us-west-2") - pin = Pin(service=self.TEST_SERVICE) - pin._tracer = self.tracer - pin.onto(ec2) - ec2.describe_instances() - - spans = self.get_spans() - assert spans - assert len(spans) == 2 - - ot_span, dd_span = spans - - # confirm the parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.name == "ec2_op" - assert ot_span.service == "ec2_svc" - - assert dd_span.get_tag("aws.agent") == "botocore" - assert dd_span.get_tag("aws.region") == "us-west-2" - assert dd_span.get_tag("region") == "us-west-2" - assert dd_span.get_tag("aws.operation") == "DescribeInstances" - assert dd_span.get_tag("component") == "botocore" - assert dd_span.get_tag("span.kind"), "client" - assert_span_http_status_code(dd_span, 200) - assert dd_span.get_metric("retry_attempts") == 0 - assert dd_span.service == "test-botocore-tracing.ec2" - assert dd_span.resource == "ec2.describeinstances" - assert dd_span.name == "ec2.command" - @unittest.skipIf(BOTOCORE_VERSION < (1, 9, 0), "Skipping for older versions of botocore without Stubber") def test_stubber_no_response_metadata(self): """When no ResponseMetadata key is provided in the response""" diff --git a/tests/contrib/bottle/test.py b/tests/contrib/bottle/test.py index 5a274802d85..d74ceb4935d 100644 --- a/tests/contrib/bottle/test.py +++ b/tests/contrib/bottle/test.py @@ -7,7 +7,6 @@ from ddtrace.contrib.internal.bottle.patch import TracePlugin from ddtrace.ext import http from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME -from tests.opentracer.utils import init_tracer from tests.tracer.utils_inferred_spans.test_helpers import assert_web_and_inferred_aws_api_gateway_span_data from tests.utils import TracerTestCase from tests.utils import assert_is_measured @@ -316,44 +315,6 @@ def home(): assert s.get_tag("span.kind") == "server" assert s.get_tag("http.route") == "/home/" - def test_200_ot(self): - ot_tracer = init_tracer("my_svc", self.tracer) - - # setup our test app - @self.app.route("/hi/") - def hi(name): - return "hi %s" % name - - self._trace_app(self.tracer) - - # make a request - with ot_tracer.start_active_span("ot_span"): - resp = self.app.get("/hi/dougie") - - assert resp.status_int == 200 - assert resp.body.decode("utf-8", errors="ignore") == "hi dougie" - # validate it's traced - spans = self.pop_spans() - assert len(spans) == 2 - ot_span, dd_span = spans - - # confirm the parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.resource == "ot_span" - - assert_is_measured(dd_span) - assert dd_span.name == "bottle.request" - assert dd_span.service == "bottle-app" - assert dd_span.resource == "GET /hi/" - assert_span_http_status_code(dd_span, 200) - assert dd_span.get_tag("http.method") == "GET" - assert dd_span.get_tag(http.URL) == "http://localhost:80/hi/dougie" - assert dd_span.get_tag("component") == "bottle" - assert dd_span.get_tag("span.kind") == "server" - assert dd_span.get_tag("http.route") == "/hi/" - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_SERVICE="mysvc")) def test_user_specified_service_default_schema(self): """ diff --git a/tests/contrib/cassandra/__init__.py b/tests/contrib/cassandra/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/tests/contrib/cassandra/test.py b/tests/contrib/cassandra/test.py deleted file mode 100644 index 708d599040a..00000000000 --- a/tests/contrib/cassandra/test.py +++ /dev/null @@ -1,546 +0,0 @@ -import contextlib -import logging -from threading import Event -import unittest - -from cassandra.cluster import Cluster -from cassandra.cluster import ResultSet -from cassandra.query import BatchStatement -from cassandra.query import SimpleStatement -import mock - -from ddtrace import config -from ddtrace._trace.pin import Pin -from ddtrace.constants import ERROR_MSG -from ddtrace.constants import ERROR_TYPE -from ddtrace.contrib.internal.cassandra.patch import patch -from ddtrace.contrib.internal.cassandra.patch import unpatch -from ddtrace.contrib.internal.cassandra.session import SERVICE -from ddtrace.ext import cassandra as cassx -from ddtrace.ext import net -from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME -from tests.contrib.config import CASSANDRA_CONFIG -from tests.opentracer.utils import init_tracer -from tests.utils import DummyTracer -from tests.utils import TracerTestCase -from tests.utils import assert_is_measured - - -# Oftentimes our tests fails because Cassandra connection timeouts during keyspace drop. Slowness in keyspace drop -# is known and is due to 'auto_snapshot' configuration. In our test env we should disable it, but the official cassandra -# image that we are using only allows us to configure a few configs: -# https://github.com/docker-library/cassandra/blob/4474c6c5cc2a81ee57c5615aae00555fca7e26a6/3.11/docker-entrypoint.sh#L51 -# So for now we just increase the timeout, if this is not enough we may want to extend the official image with our own -# custom image. -CONNECTION_TIMEOUT_SECS = 20 # override the default value of 5 - -logging.getLogger("cassandra").setLevel(logging.INFO) - - -def _setup(testObject): - self = testObject or mock.Mock() - - # skip all the modules if the Cluster is not available - if not Cluster: - raise unittest.SkipTest("cassandra.cluster.Cluster is not available.") - - # create the KEYSPACE for this test module - self.cluster = Cluster(port=CASSANDRA_CONFIG["port"], connect_timeout=CONNECTION_TIMEOUT_SECS) - self.session = self.cluster.connect() - self.session.execute("DROP KEYSPACE IF EXISTS test", timeout=10) - self.session.execute( - "CREATE KEYSPACE if not exists test WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor': 1};" # noqa:E501 - ) - self.session.execute("CREATE TABLE if not exists test.person (name text PRIMARY KEY, age int, description text)") - self.session.execute( - "CREATE TABLE if not exists test.person_write (name text PRIMARY KEY, age int, description text)" - ) - self.session.execute( - "INSERT INTO test.person (name, age, description) VALUES ('Cassandra', 100, 'A cruel mistress')" - ) - self.session.execute( - "INSERT INTO test.person (name, age, description) VALUES ('Athena', 100, 'Whose shield is thunder')" - ) - self.session.execute( - "INSERT INTO test.person (name, age, description) VALUES ('Calypso', 100, 'Softly-braided nymph')" - ) - - -def _teardown(testObject): - self = testObject or mock.Mock() - # destroy the KEYSPACE - self.session.execute("DROP TABLE IF EXISTS test.person") - self.session.execute("DROP TABLE IF EXISTS test.person_write") - self.session.execute("DROP KEYSPACE IF EXISTS test", timeout=10) - - -def setUpModule(): - _setup(None) - - -def tearDownModule(): - _teardown(None) - - -class CassandraBase(object): - """ - Needs a running Cassandra - """ - - TEST_QUERY = "SELECT * from test.person WHERE name = 'Cassandra'" - TEST_QUERY_PAGINATED = "SELECT * from test.person" - TEST_KEYSPACE = "test" - TEST_PORT = CASSANDRA_CONFIG["port"] - TEST_SERVICE = "test-cassandra" - - def setUp(self): - _setup(self) - - def tearDown(self): - _teardown(self) - - @contextlib.contextmanager - def override_config(self, integration, values): - """ - Temporarily override an integration configuration value - >>> with self.override_config('flask', dict(service_name='test-service')): - ... # Your test - """ - options = getattr(config, integration) - - original = dict((key, options.get(key)) for key in values.keys()) - - options.update(values) - try: - yield - finally: - options.update(original) - - def _assert_result_correct(self, result): - assert len(result.current_rows) == 1 - for r in result: - assert r.name == "Cassandra" - assert r.age == 100 - assert r.description == "A cruel mistress" - - def _test_query_base(self, execute_fn): - session, tracer = self._traced_session() - - result = execute_fn(session, self.TEST_QUERY) - self._assert_result_correct(result) - - spans = tracer.pop() - assert spans, spans - - # another for the actual query - assert len(spans) == 1 - - query = spans[0] - - assert_is_measured(query) - assert query.service == self.TEST_SERVICE - assert query.resource == self.TEST_QUERY - assert query.span_type == "cassandra" - - assert query.get_tag(cassx.KEYSPACE) == self.TEST_KEYSPACE - assert query.get_metric("db.row_count") == 1 - assert query.get_metric("network.destination.port") == self.TEST_PORT - assert query.get_tag(cassx.PAGE_NUMBER) is None - assert query.get_tag(cassx.PAGINATED) == "False" - assert query.get_tag(net.TARGET_HOST) == "127.0.0.1" - assert query.get_tag(net.SERVER_ADDRESS) == "127.0.0.1" - assert query.get_tag("component") == "cassandra" - assert query.get_tag("span.kind") == "client" - assert query.get_tag("db.system") == "cassandra" - - def test_query(self): - def execute_fn(session, query): - return session.execute(query) - - self._test_query_base(execute_fn) - - def test_query_ot(self): - """Ensure that cassandra works with the opentracer.""" - - def execute_fn(session, query): - return session.execute(query) - - session, tracer = self._traced_session() - ot_tracer = init_tracer("cass_svc", tracer) - - with ot_tracer.start_active_span("cass_op"): - result = execute_fn(session, self.TEST_QUERY) - self._assert_result_correct(result) - - spans = tracer.pop() - assert spans, spans - - # another for the actual query - assert len(spans) == 2 - ot_span, dd_span = spans - - # confirm parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.name == "cass_op" - assert ot_span.service == "cass_svc" - - assert dd_span.service == self.TEST_SERVICE - assert dd_span.resource == self.TEST_QUERY - assert dd_span.span_type == "cassandra" - - assert dd_span.get_tag(cassx.KEYSPACE) == self.TEST_KEYSPACE - assert dd_span.get_metric("db.row_count") == 1 - assert dd_span.get_metric("network.destination.port") == self.TEST_PORT - assert dd_span.get_tag(cassx.PAGE_NUMBER) is None - assert dd_span.get_tag(cassx.PAGINATED) == "False" - assert dd_span.get_tag(net.TARGET_HOST) == "127.0.0.1" - assert dd_span.get_tag(net.SERVER_ADDRESS) == "127.0.0.1" - assert dd_span.get_tag("component") == "cassandra" - assert dd_span.get_tag("span.kind") == "client" - assert dd_span.get_tag("db.system") == "cassandra" - - def test_query_async(self): - def execute_fn(session, query): - event = Event() - result = [] - future = session.execute_async(query) - - def callback(results): - result.append(ResultSet(future, results)) - event.set() - - future.add_callback(callback) - event.wait() - return result[0] - - self._test_query_base(execute_fn) - - def test_query_async_clearing_callbacks(self): - def execute_fn(session, query): - future = session.execute_async(query) - future.clear_callbacks() - return future.result() - - self._test_query_base(execute_fn) - - def test_span_is_removed_from_future(self): - session, tracer = self._traced_session() - future = session.execute_async(self.TEST_QUERY) - future.result() - span = getattr(future, "_ddtrace_current_span", None) - assert span is None - - def test_paginated_query(self): - session, tracer = self._traced_session() - - statement = SimpleStatement(self.TEST_QUERY_PAGINATED, fetch_size=1) - result = session.execute(statement) - # iterate over all pages - results = list(result) - assert len(results) == 3 - - spans = tracer.pop() - assert spans, spans - - # There are 4 spans for 3 results since the driver makes a request with - # no result to check that it has reached the last page - assert len(spans) == 4 - - for i in range(4): - query = spans[i] - assert query.service == self.TEST_SERVICE - assert query.resource == self.TEST_QUERY_PAGINATED - assert query.span_type == "cassandra" - - assert query.get_tag(cassx.KEYSPACE) == self.TEST_KEYSPACE - assert query.get_metric("network.destination.port") == self.TEST_PORT - if i == 3: - assert query.get_metric("db.row_count") == 0 - else: - assert query.get_metric("db.row_count") == 1 - assert query.get_tag(net.TARGET_HOST) == "127.0.0.1" - assert query.get_tag(net.SERVER_ADDRESS) == "127.0.0.1" - assert query.get_tag(cassx.PAGINATED) == "True" - assert query.get_metric(cassx.PAGE_NUMBER) == i + 1 - assert query.get_tag("db.system") == "cassandra" - - def test_trace_with_service(self): - session, tracer = self._traced_session() - - session.execute(self.TEST_QUERY) - spans = tracer.pop() - assert spans - assert len(spans) == 1 - query = spans[0] - assert query.service == self.TEST_SERVICE - - def test_trace_error(self): - session, tracer = self._traced_session() - - try: - session.execute("select * from test.i_dont_exist limit 1") - except Exception: - pass - else: - assert 0 - - spans = tracer.pop() - assert spans - query = spans[0] - assert query.error == 1 - for k in (ERROR_MSG, ERROR_TYPE): - assert query.get_tag(k) - - def test_bound_statement(self): - session, tracer = self._traced_session() - - query = "INSERT INTO test.person_write (name, age, description) VALUES (?, ?, ?)" - prepared = session.prepare(query) - session.execute(prepared, ("matt", 34, "can")) - - prepared = session.prepare(query) - bound_stmt = prepared.bind(("leo", 16, "fr")) - session.execute(bound_stmt) - - spans = tracer.pop() - assert len(spans) == 2 - for s in spans: - assert s.resource == query - - def test_batch_statement(self): - session, tracer = self._traced_session() - - batch = BatchStatement() - batch.add( - SimpleStatement("INSERT INTO test.person_write (name, age, description) VALUES (%s, %s, %s)"), - ("Joe", 1, "a"), - ) - batch.add( - SimpleStatement("INSERT INTO test.person_write (name, age, description) VALUES (%s, %s, %s)"), - ("Jane", 2, "b"), - ) - session.execute(batch) - - spans = tracer.pop() - assert len(spans) == 1 - s = spans[0] - assert s.resource == "BatchStatement" - assert s.get_metric("cassandra.batch_size") == 2 - assert "test.person" in s.get_tag("cassandra.query") - - def test_batched_bound_statement(self): - session, tracer = self._traced_session() - - batch = BatchStatement() - - prepared_statement = session.prepare("INSERT INTO test.person_write (name, age, description) VALUES (?, ?, ?)") - batch.add(prepared_statement.bind(("matt", 34, "can"))) - session.execute(batch) - - spans = tracer.pop() - assert len(spans) == 1 - s = spans[0] - assert s.resource == "BatchStatement" - assert s.get_tag("cassandra.query") == "" - - -class TestCassPatchDefault(unittest.TestCase, CassandraBase): - """Test Cassandra instrumentation with patching and default configuration""" - - TEST_SERVICE = SERVICE - - def tearDown(self): - unpatch() - - def setUp(self): - CassandraBase.setUp(self) - patch() - - def _traced_session(self): - tracer = DummyTracer() - Pin.get_from(self.cluster)._clone(tracer=tracer).onto(self.cluster) - return self.cluster.connect(self.TEST_KEYSPACE), tracer - - -class TestCassPatchAll(TestCassPatchDefault): - """Test Cassandra instrumentation with patching and custom service on all clusters""" - - TEST_SERVICE = "test-cassandra-patch-all" - - def tearDown(self): - unpatch() - - def setUp(self): - CassandraBase.setUp(self) - patch() - - def _traced_session(self): - tracer = DummyTracer() - # pin the global Cluster to test if they will conflict - pin = Pin(service=self.TEST_SERVICE) - pin._tracer = tracer - pin.onto(Cluster) - self.cluster = Cluster(port=CASSANDRA_CONFIG["port"]) - - return self.cluster.connect(self.TEST_KEYSPACE), tracer - - -class TestCassPatchOne(TestCassPatchDefault): - """Test Cassandra instrumentation with patching and custom service on one cluster""" - - TEST_SERVICE = "test-cassandra-patch-one" - - def tearDown(self): - unpatch() - - def setUp(self): - CassandraBase.setUp(self) - patch() - - def _traced_session(self): - tracer = DummyTracer() - # pin the global Cluster to test if they will conflict - Pin(service="not-%s" % self.TEST_SERVICE).onto(Cluster) - self.cluster = Cluster(port=CASSANDRA_CONFIG["port"]) - - pin = Pin(service=self.TEST_SERVICE) - pin._tracer = tracer - pin.onto(self.cluster) - return self.cluster.connect(self.TEST_KEYSPACE), tracer - - def test_patch_unpatch(self): - # Test patch idempotence - patch() - patch() - - tracer = DummyTracer() - Pin.get_from(Cluster)._clone(tracer=tracer).onto(Cluster) - - session = Cluster(port=CASSANDRA_CONFIG["port"]).connect(self.TEST_KEYSPACE) - session.execute(self.TEST_QUERY) - - spans = tracer.pop() - assert spans, spans - assert len(spans) == 1 - - # Test unpatch - unpatch() - - session = Cluster(port=CASSANDRA_CONFIG["port"]).connect(self.TEST_KEYSPACE) - session.execute(self.TEST_QUERY) - - spans = tracer.pop() - assert not spans, spans - - # Test patch again - patch() - Pin.get_from(Cluster)._clone(tracer=tracer).onto(Cluster) - - session = Cluster(port=CASSANDRA_CONFIG["port"]).connect(self.TEST_KEYSPACE) - session.execute(self.TEST_QUERY) - - spans = tracer.pop() - assert spans, spans - - -class TestCassandraConfig(TracerTestCase): - """ - Test various configurations of the Cassandra integration. - """ - - TEST_QUERY = "SELECT * from test.person WHERE name = 'Cassandra'" - TEST_KEYSPACE = "test" - - def setUp(self): - super(TestCassandraConfig, self).setUp() - patch() - self.tracer = DummyTracer() - self.cluster = Cluster(port=CASSANDRA_CONFIG["port"]) - Pin.get_from(self.cluster)._clone(tracer=self.tracer).onto(self.cluster) - self.session = self.cluster.connect(self.TEST_KEYSPACE) - - def tearDown(self): - unpatch() - super(TestCassandraConfig, self).tearDown() - - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_SERVICE="mysvc", DD_TRACE_SPAN_ATTRIBUTE_SCHEMA="v0")) - def test_user_specified_service_v0(self): - """ - v0: When a user specifies a service for the app - The cassandra integration should not use it. - """ - # Ensure that the service name was configured - from ddtrace import config - - assert config.service == "mysvc" - - self.session.execute(self.TEST_QUERY) - spans = self.pop_spans() - assert spans - assert len(spans) == 1 - query = spans[0] - assert query.service != "mysvc" - - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_SERVICE="mysvc", DD_TRACE_SPAN_ATTRIBUTE_SCHEMA="v1")) - def test_user_specified_service_v1(self): - """ - v1: When a user specifies a service for the app - The cassandra integration should use it. - """ - # Ensure that the service name was configured - from ddtrace import config - - assert config.service == "mysvc" - - self.session.execute(self.TEST_QUERY) - spans = self.pop_spans() - assert spans - assert len(spans) == 1 - query = spans[0] - assert query.service == "mysvc" - - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA="v1")) - def test_unspecified_service_v1(self): - """ - v1: When a user does not specify a service for the app - dd-trace-py should default to internal.schema.DEFAULT_SPAN_SERVICE_NAME - """ - # Ensure that the service name was configured - from ddtrace import config - - assert config.service == DEFAULT_SPAN_SERVICE_NAME - - self.session.execute(self.TEST_QUERY) - spans = self.pop_spans() - assert spans - assert len(spans) == 1 - query = spans[0] - assert query.service == DEFAULT_SPAN_SERVICE_NAME - - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA="v0")) - def test_span_name_v0_schema(self): - """ - When a user specifies a service for the app - The cassandra integration should not use it. - """ - self.session.execute(self.TEST_QUERY) - spans = self.pop_spans() - assert spans - assert len(spans) == 1 - query = spans[0] - assert query.name == "cassandra.query" - - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA="v1")) - def test_span_name_v1_schema(self): - """ - When a user specifies a service for the app - The cassandra integration should not use it. - """ - self.session.execute(self.TEST_QUERY) - spans = self.pop_spans() - assert spans - assert len(spans) == 1 - query = spans[0] - assert query.name == "cassandra.query" diff --git a/tests/contrib/cassandra/test_cassandra_patch.py b/tests/contrib/cassandra/test_cassandra_patch.py deleted file mode 100644 index 19a09daccf4..00000000000 --- a/tests/contrib/cassandra/test_cassandra_patch.py +++ /dev/null @@ -1,31 +0,0 @@ -# This test script was automatically generated by the contrib-patch-tests.py -# script. If you want to make changes to it, you should make sure that you have -# removed the ``_generated`` suffix from the file name, to prevent the content -# from being overwritten by future re-generations. - -from ddtrace.contrib.internal.cassandra.patch import patch -from ddtrace.contrib.internal.cassandra.session import get_version - - -try: - from ddtrace.contrib.internal.cassandra.patch import unpatch -except ImportError: - unpatch = None -from tests.contrib.patch import PatchTestCase - - -class TestCassandraPatch(PatchTestCase.Base): - __integration_name__ = "cassandra" - __module_name__ = "cassandra.cluster" - __patch_func__ = patch - __unpatch_func__ = unpatch - __get_version__ = get_version - - def assert_module_patched(self, cassandra_cluster): - pass - - def assert_not_module_patched(self, cassandra_cluster): - pass - - def assert_not_module_double_patched(self, cassandra_cluster): - pass diff --git a/tests/contrib/celery/test_integration.py b/tests/contrib/celery/test_integration.py index 9646c0aceda..8a831e2c709 100644 --- a/tests/contrib/celery/test_integration.py +++ b/tests/contrib/celery/test_integration.py @@ -15,7 +15,6 @@ import ddtrace.internal.forksafe as forksafe from ddtrace.propagation.http import HTTPPropagator from ddtrace.trace import Context -from tests.opentracer.utils import init_tracer from ...utils import override_global_config from .base import CeleryBaseTestCase @@ -599,55 +598,6 @@ def fn_task(): assert run_trace[1].name == "test" assert run_trace[1].parent_id == run_trace[0].span_id - def test_fn_task_apply_async_ot(self): - """OpenTracing version of test_fn_task_apply_async.""" - ot_tracer = init_tracer("celery_svc", self.tracer) - - # it should execute a traced async task that has parameters - @self.app.task - def fn_task_parameters(user, force_logout=False): - return (user, force_logout) - - with ot_tracer.start_active_span("celery_op"): - t = fn_task_parameters.apply_async(args=["user"], kwargs={"force_logout": True}) - assert tuple(t.get(timeout=self.ASYNC_GET_TIMEOUT)) == ("user", True) - - ot_span = self.find_span(name="celery_op") - assert ot_span.parent_id is None - assert ot_span.name == "celery_op" - assert ot_span.service == "celery_svc" - - if self.ASYNC_USE_CELERY_FIXTURES: - async_span = self.find_span(name="celery.apply") - self.assert_is_measured(async_span) - assert async_span.error == 0 - - # confirm the parenting - assert async_span.parent_id == ot_span.span_id - assert async_span.name == "celery.apply" - assert async_span.resource == "tests.contrib.celery.test_integration.fn_task_parameters" - assert async_span.service == "celery-producer" - assert async_span.get_tag("celery.id") == t.task_id - assert async_span.get_tag("celery.action") == "apply_async" - assert async_span.get_tag("celery.routing_key") == "celery" - assert async_span.get_tag("component") == "celery" - assert async_span.get_tag("span.kind") == "producer" - assert async_span.get_tag("out.host") == "memory://" - - run_span = self.find_span(name="celery.run") - assert run_span.name == "celery.run" - assert run_span.parent_id is None - assert run_span.resource == "tests.contrib.celery.test_integration.fn_task_parameters" - assert run_span.service == "celery-worker" - assert run_span.get_tag("celery.id") == t.task_id - assert run_span.get_tag("celery.action") == "run" - assert run_span.get_tag("component") == "celery" - assert run_span.get_tag("span.kind") == "consumer" - - traces = self.pop_traces() - assert len(traces) == 2 - assert len(traces[0]) + len(traces[1]) == 3 - @pytest.mark.no_getattr_patch # this mark is added to prevent patching of getattr necessary for integration registry update # see: https://github.com/DataDog/dd-trace-py/pull/13215 diff --git a/tests/contrib/django/test_django.py b/tests/contrib/django/test_django.py index 7b58471c1d7..a10478fb143 100644 --- a/tests/contrib/django/test_django.py +++ b/tests/contrib/django/test_django.py @@ -36,7 +36,6 @@ from ddtrace.propagation.http import HTTP_HEADER_SAMPLING_PRIORITY from ddtrace.propagation.http import HTTP_HEADER_TRACE_ID from tests.conftest import DEFAULT_DDTRACE_SUBPROCESS_TEST_SERVICE_NAME -from tests.opentracer.utils import init_tracer from tests.tracer.utils_inferred_spans.test_helpers import assert_web_and_inferred_aws_api_gateway_span_data from tests.utils import assert_dict_issuperset from tests.utils import override_config @@ -1952,38 +1951,6 @@ def test_template_name(test_spans): assert span.resource == "/my-template" -""" -OpenTracing tests -""" - - -@pytest.mark.django_db -def test_middleware_trace_request_ot(client, test_spans, tracer): - """OpenTracing version of test_middleware_trace_request.""" - ot_tracer = init_tracer("my_svc", tracer) - - # ensures that the internals are properly traced - with ot_tracer.start_active_span("ot_span"): - assert client.get("/users/").status_code == 200 - - # check for spans - spans = test_spans.get_spans() - ot_span = spans[0] - sp_request = spans[1] - - # confirm parenting - assert ot_span.parent_id is None - assert sp_request.parent_id == ot_span.span_id - - assert ot_span.resource == "ot_span" - assert ot_span.service == "my_svc" - - assert sp_request.get_tag("http.status_code") == "200" - assert sp_request.get_tag(http.URL) == "http://testserver/users/" - assert sp_request.get_tag("django.user.is_authenticated") == "False" - assert sp_request.get_tag("http.method") == "GET" - - def test_collecting_requests_handles_improperly_configured_error(client, test_spans): """ Since it's difficult to reproduce the ImproperlyConfigured error via django (server setup), will instead diff --git a/tests/contrib/falcon/test_suite.py b/tests/contrib/falcon/test_suite.py index 2cb912ee760..9771158e34d 100644 --- a/tests/contrib/falcon/test_suite.py +++ b/tests/contrib/falcon/test_suite.py @@ -3,7 +3,6 @@ from ddtrace.constants import USER_KEEP from ddtrace.contrib.internal.falcon.patch import FALCON_VERSION from ddtrace.ext import http as httpx -from tests.opentracer.utils import init_tracer from tests.tracer.utils_inferred_spans.test_helpers import assert_web_and_inferred_aws_api_gateway_span_data from tests.utils import assert_is_measured from tests.utils import assert_span_http_status_code @@ -225,37 +224,6 @@ def test_404_exception_no_stacktracer(self): assert span.get_tag("component") == "falcon" assert span.get_tag("span.kind") == "server" - def test_200_ot(self): - """OpenTracing version of test_200.""" - writer = self.tracer._span_aggregator.writer - ot_tracer = init_tracer("my_svc", self.tracer) - ot_tracer._dd_tracer._span_aggregator.writer = writer - ot_tracer._dd_tracer._recreate() - - with ot_tracer.start_active_span("ot_span"): - out = self.make_test_call("/200", expected_status_code=200) - assert out.content.decode("utf-8") == "Success" - - traces = self.tracer.pop_traces() - assert len(traces) == 1 - assert len(traces[0]) == 2 - ot_span, dd_span = traces[0] - - # confirm the parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.service == "my_svc" - assert ot_span.resource == "ot_span" - - assert_is_measured(dd_span) - assert dd_span.name == "falcon.request" - assert dd_span.service == self._service - assert dd_span.resource == "GET tests.contrib.falcon.app.resources.Resource200" - assert_span_http_status_code(dd_span, 200) - assert dd_span.get_tag(httpx.URL) == "http://falconframework.org/200" - assert dd_span.error == 0 - def test_falcon_request_hook(self): @config.falcon.hooks.on("request") def on_falcon_request(span, request, response): diff --git a/tests/contrib/flask_cache/test.py b/tests/contrib/flask_cache/test.py index 25ed861dbe2..6e23414eace 100644 --- a/tests/contrib/flask_cache/test.py +++ b/tests/contrib/flask_cache/test.py @@ -5,7 +5,6 @@ from ddtrace.contrib.internal.flask_cache.patch import get_traced_cache from ddtrace.ext import net from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME -from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_dict_issuperset from tests.utils import assert_is_measured @@ -317,44 +316,6 @@ def test_default_span_tags_memcached(self): self.assertEqual(span.get_tag(net.TARGET_HOST), "127.0.0.1") self.assertEqual(span.get_metric("network.destination.port"), self.TEST_MEMCACHED_PORT) - def test_simple_cache_get_ot(self): - """OpenTracing version of test_simple_cache_get.""" - ot_tracer = init_tracer("my_svc", self.tracer) - - # create the TracedCache instance for a Flask app - Cache = get_traced_cache(self.tracer, service=self.SERVICE) - app = Flask(__name__) - cache = Cache(app, config={"CACHE_TYPE": "simple"}) - - with ot_tracer.start_active_span("ot_span"): - cache.get("á_complex_operation") - - spans = self.get_spans() - self.assertEqual(len(spans), 2) - ot_span, dd_span = spans - - # confirm the parenting - self.assertIsNone(ot_span.parent_id) - self.assertEqual(dd_span.parent_id, ot_span.span_id) - - self.assertEqual(ot_span.resource, "ot_span") - self.assertEqual(ot_span.service, "my_svc") - - assert_is_measured(dd_span) - self.assertEqual(dd_span.service, self.SERVICE) - self.assertEqual(dd_span.resource, "get") - self.assertEqual(dd_span.name, "flask_cache.cmd") - self.assertEqual(dd_span.span_type, "cache") - self.assertEqual(dd_span.error, 0) - - expected_meta = { - "flask_cache.key": "á_complex_operation", - "flask_cache.backend": "simple", - "component": "flask_cache", - } - - assert_dict_issuperset(dd_span.get_tags(), expected_meta) - class TestFlaskCacheSchematization(TracerTestCase): TEST_REDIS_PORT = REDIS_CONFIG["port"] diff --git a/tests/contrib/freezegun/test_freezegun.py b/tests/contrib/freezegun/test_freezegun.py deleted file mode 100644 index aeb08c6edfb..00000000000 --- a/tests/contrib/freezegun/test_freezegun.py +++ /dev/null @@ -1,99 +0,0 @@ -import datetime -import os -import time - -import pytest - -from ddtrace.internal.utils.time import StopWatch -from ddtrace.trace import tracer as dd_tracer -from tests.contrib.pytest.test_pytest import PytestTestCaseBase - - -class TestFreezegunTestCase: - @pytest.fixture(autouse=True) - def _patch_freezegun(self): - from ddtrace.contrib.internal.freezegun.patch import patch - from ddtrace.contrib.internal.freezegun.patch import unpatch - - patch() - yield - unpatch() - - def test_freezegun_does_not_freeze_tracing(self): - import freezegun - - with freezegun.freeze_time("2020-01-01"): - with dd_tracer.trace("freezegun.test") as span: - time.sleep(1) - - assert span.duration >= 1 - - def test_freezegun_fast_forward_does_not_affect_tracing(self): - import freezegun - - with freezegun.freeze_time("2020-01-01") as frozen_time: - with dd_tracer.trace("freezegun.test") as span: - time.sleep(1) - frozen_time.tick(delta=datetime.timedelta(days=10)) - assert 1 <= span.duration <= 5 - - def test_freezegun_does_not_freeze_stopwatch(self): - import freezegun - - with freezegun.freeze_time("2020-01-01"): - with StopWatch() as sw: - time.sleep(1) - assert sw.elapsed() >= 1 - - def test_freezegun_configure_default_ignore_list_continues_to_ignore_ddtrace(self): - import freezegun - from freezegun.config import DEFAULT_IGNORE_LIST - - try: - freezegun.configure(default_ignore_list=[]) - - with freezegun.freeze_time("2020-01-01"): - with dd_tracer.trace("freezegun.test") as span: - time.sleep(1) - - assert span.duration >= 1 - finally: - # Reset the ignore list to its default value after the test - freezegun.configure(default_ignore_list=DEFAULT_IGNORE_LIST) - - -class PytestFreezegunTestCase(PytestTestCaseBase): - def test_freezegun_pytest_plugin(self): - """Tests that pytest's patching of freezegun in the v1 plugin version works""" - import sys - - from ddtrace.contrib.internal.freezegun.patch import unpatch - - unpatch() - if "freezegun" in sys.modules: - del sys.modules["freezegun"] - - py_file = self.testdir.makepyfile( - """ - import datetime - import time - - import freezegun - - from ddtrace.trace import tracer as dd_tracer - - def test_pytest_patched_freezegun(): - with freezegun.freeze_time("2020-01-01"): - with dd_tracer.trace("freezegun.test") as span: - time.sleep(1) - assert span.duration >= 1 - - """ - ) - file_name = os.path.basename(py_file.strpath) - self.inline_run("--ddtrace", "-s", file_name) - spans = self.pop_spans() - - assert len(spans) == 4 - for span in spans: - assert span.get_tag("test.status") == "pass" diff --git a/tests/contrib/futures/test_propagation.py b/tests/contrib/futures/test_propagation.py index 77a9e2f25a1..763052dda0c 100644 --- a/tests/contrib/futures/test_propagation.py +++ b/tests/contrib/futures/test_propagation.py @@ -6,7 +6,6 @@ from ddtrace.contrib.internal.futures.patch import patch from ddtrace.contrib.internal.futures.patch import unpatch -from tests.opentracer.utils import init_tracer from tests.utils import DummyTracer from tests.utils import TracerTestCase @@ -408,33 +407,6 @@ def fn(): assert spans[1].trace_id == spans[0].trace_id assert spans[1].parent_id == spans[0].span_id - def test_propagation_ot(self): - """OpenTracing version of test_propagation.""" - # it must propagate the tracing context if available - ot_tracer = init_tracer("my_svc", self.tracer) - - def fn(): - # an active context must be available - self.assertTrue(self.tracer.context_provider.active() is not None) - with self.tracer.trace("executor.thread"): - return 42 - - with self.override_global_tracer(): - with ot_tracer.start_active_span("main.thread"): - with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor: - future = executor.submit(fn) - result = future.result() - # assert the right result - self.assertEqual(result, 42) - - # the trace must be completed - self.assert_span_count(2) - spans = self.get_spans() - assert spans[0].name == "main.thread" - assert spans[1].name == "executor.thread" - assert spans[1].trace_id == spans[0].trace_id - assert spans[1].parent_id == spans[0].span_id - @pytest.mark.skipif(sys.version_info > (3, 12), reason="Fails on 3.13") @pytest.mark.subprocess(ddtrace_run=True, timeout=5) diff --git a/tests/contrib/gevent/test_tracer.py b/tests/contrib/gevent/test_tracer.py index dc72ccc08ca..a7505d56f7d 100644 --- a/tests/contrib/gevent/test_tracer.py +++ b/tests/contrib/gevent/test_tracer.py @@ -2,7 +2,6 @@ import gevent import gevent.pool -from opentracing.scope_managers.gevent import GeventScopeManager import ddtrace from ddtrace.constants import ERROR_MSG @@ -11,7 +10,6 @@ from ddtrace.trace import Context from ddtrace.contrib.internal.gevent.patch import patch from ddtrace.contrib.internal.gevent.patch import unpatch -from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from .utils import silence_errors @@ -356,34 +354,6 @@ def green_2(): spans = self.pop_spans() self._assert_spawn_multiple_greenlets(spans) - def test_trace_spawn_multiple_greenlets_multiple_traces_ot(self): - """OpenTracing version of the same test.""" - - ot_tracer = init_tracer("my_svc", self.tracer, scope_manager=GeventScopeManager()) - - def entrypoint(): - with ot_tracer.start_active_span("greenlet.main") as span: - span.resource = "base" - jobs = [gevent.spawn(green_1), gevent.spawn(green_2)] - gevent.joinall(jobs) - - def green_1(): - with self.tracer.trace("greenlet.worker1") as span: - span.set_tag("worker_id", "1") - gevent.sleep(0.01) - - # note that replacing the `tracer.trace` call here with the - # OpenTracing equivalent will cause the checks to fail - def green_2(): - with ot_tracer.start_active_span("greenlet.worker2") as scope: - scope.span.set_tag("worker_id", "2") - gevent.sleep(0.01) - - gevent.spawn(entrypoint).join() - - spans = self.pop_spans() - self._assert_spawn_multiple_greenlets(spans) - def test_ddtracerun(self): """ Regression test case for the following issue. diff --git a/tests/contrib/httplib/test_httplib.py b/tests/contrib/httplib/test_httplib.py index 7a2f4a07463..867afad7687 100644 --- a/tests/contrib/httplib/test_httplib.py +++ b/tests/contrib/httplib/test_httplib.py @@ -18,7 +18,6 @@ from ddtrace.ext import http from ddtrace.internal.constants import _HTTPLIB_NO_TRACE_REQUEST from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME -from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_span_http_status_code from tests.utils import override_global_tracer @@ -529,37 +528,6 @@ def test_urllib_request_opener(self): self.assertEqual(span.get_tag("span.kind"), "client") self.assertEqual(span.get_tag("out.host"), "localhost") - def test_httplib_request_get_request_ot(self): - """OpenTracing version of test with same name.""" - ot_tracer = init_tracer("my_svc", self.tracer) - - with ot_tracer.start_active_span("ot_span"): - conn = self.get_http_connection(SOCKET) - with contextlib.closing(conn): - conn.request("GET", "/status/200") - resp = conn.getresponse() - self.assertEqual(self.to_str(resp.read()), "") - self.assertEqual(resp.status, 200) - - spans = self.pop_spans() - self.assertEqual(len(spans), 2) - ot_span, dd_span = spans - - # confirm the parenting - self.assertEqual(ot_span.parent_id, None) - self.assertEqual(dd_span.parent_id, ot_span.span_id) - - self.assertEqual(ot_span.service, "my_svc") - self.assertEqual(ot_span.name, "ot_span") - - self.assert_is_not_measured(dd_span) - self.assertEqual(dd_span.span_type, "http") - self.assertEqual(dd_span.name, self.SPAN_NAME) - self.assertEqual(dd_span.error, 0) - assert dd_span.get_tag("http.method") == "GET" - assert_span_http_status_code(dd_span, 200) - assert dd_span.get_tag("http.url") == URL_200 - def test_httplib_bad_url(self): conn = self.get_http_connection("DNE", "80") with contextlib.closing(conn): diff --git a/tests/contrib/integration_registry/registry_update_helpers/integration_registry_manager.py b/tests/contrib/integration_registry/registry_update_helpers/integration_registry_manager.py index f5990c6c6c2..4e6659b6321 100644 --- a/tests/contrib/integration_registry/registry_update_helpers/integration_registry_manager.py +++ b/tests/contrib/integration_registry/registry_update_helpers/integration_registry_manager.py @@ -39,7 +39,7 @@ def _is_valid_patch_call(self, tb_string): """Checks if the patch call originated from ddtrace.contrib.internal/*/patch.py.""" # reverse the lines to check the most recent patch call first since some integrations call # other integrations patches: - # e.g. mongoengine calls pymongo's patch + # e.g. django calls postgres's patch return any( "ddtrace/contrib/internal" in line and "/patch.py" in line for line in reversed(tb_string.splitlines()) ) diff --git a/tests/contrib/mongoengine/__init__.py b/tests/contrib/mongoengine/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/tests/contrib/mongoengine/test.py b/tests/contrib/mongoengine/test.py deleted file mode 100644 index d47c5a397e6..00000000000 --- a/tests/contrib/mongoengine/test.py +++ /dev/null @@ -1,415 +0,0 @@ -import time - -import mongoengine -import pymongo - -from ddtrace._trace.pin import Pin -from ddtrace.contrib.internal.mongoengine.patch import patch -from ddtrace.contrib.internal.mongoengine.patch import unpatch -from ddtrace.ext import mongo as mongox -from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME -from tests.opentracer.utils import init_tracer -from tests.utils import DummyTracer -from tests.utils import TracerTestCase -from tests.utils import assert_is_measured - -from ..config import MONGO_CONFIG - - -class Artist(mongoengine.Document): - first_name = mongoengine.StringField(max_length=50) - last_name = mongoengine.StringField(max_length=50) - - -class MongoEngineCore(object): - # Define the service at the class level, so that each test suite can use a different service - # and therefore catch any sneaky badly-unpatched stuff. - TEST_SERVICE = "deadbeef" - - def get_tracer_and_connect(self): - # implement me - pass - - def test_insert_update_delete_query(self): - tracer = self.get_tracer_and_connect() - - start = time.time() - Artist.drop_collection() - end = time.time() - - # ensure we get a drop collection span - spans = tracer.pop() - assert len(spans) == 2 - span = spans[1] - assert span.name == "pymongo.cmd" - - assert_is_measured(span) - assert span.resource == "drop artist" - assert span.span_type == "mongodb" - assert span.service == self.TEST_SERVICE - _assert_timing(span, start, end) - - start = end - joni = Artist() - joni.first_name = "Joni" - joni.last_name = "Mitchell" - joni.save() - end = time.time() - - # ensure we get an insert span - spans = tracer.pop() - assert len(spans) == 2 - span = spans[1] - assert span.name == "pymongo.cmd" - assert_is_measured(span) - assert span.resource == "insert artist" - assert span.span_type == "mongodb" - assert span.service == self.TEST_SERVICE - _assert_timing(span, start, end) - - # ensure full scans work - start = time.time() - artists = [a for a in Artist.objects] - end = time.time() - assert len(artists) == 1 - assert artists[0].first_name == "Joni" - assert artists[0].last_name == "Mitchell" - - # query names should be used in pymongo>3.1 - name = "find" if pymongo.version_tuple >= (3, 1, 0) else "query" - - spans = tracer.pop() - assert len(spans) == 2 - span = spans[1] - assert span.name == "pymongo.cmd" - assert_is_measured(span) - assert span.resource == "{} artist".format(name) - assert span.span_type == "mongodb" - assert span.service == self.TEST_SERVICE - _assert_timing(span, start, end) - - # ensure filtered queries work - start = time.time() - artists = [a for a in Artist.objects(first_name="Joni")] - end = time.time() - assert len(artists) == 1 - joni = artists[0] - assert artists[0].first_name == "Joni" - assert artists[0].last_name == "Mitchell" - - spans = tracer.pop() - assert len(spans) == 2 - span = spans[1] - assert span.name == "pymongo.cmd" - assert_is_measured(span) - assert span.resource == '{} artist {{"first_name": "?"}}'.format(name) - assert span.span_type == "mongodb" - assert span.service == self.TEST_SERVICE - _assert_timing(span, start, end) - - # ensure updates work - start = time.time() - joni.last_name = "From Saskatoon" - joni.save() - end = time.time() - - spans = tracer.pop() - assert len(spans) == 2 - span = spans[1] - assert span.name == "pymongo.cmd" - assert_is_measured(span) - assert span.resource == 'update artist {"_id": "?"}' - assert span.span_type == "mongodb" - assert span.service == self.TEST_SERVICE - _assert_timing(span, start, end) - - # ensure deletes - start = time.time() - joni.delete() - end = time.time() - - spans = tracer.pop() - assert len(spans) == 2 - span = spans[1] - assert span.name == "pymongo.cmd" - assert_is_measured(span) - assert span.resource == 'delete artist {"_id": "?"}' - assert span.span_type == "mongodb" - assert span.service == self.TEST_SERVICE - assert span.get_tag("component") == "pymongo" - assert span.get_tag("span.kind") == "client" - assert span.get_tag("db.system") == "mongodb" - _assert_timing(span, start, end) - - def test_opentracing(self): - """Ensure the opentracer works with mongoengine.""" - tracer = self.get_tracer_and_connect() - ot_tracer = init_tracer("my_svc", tracer) - - with ot_tracer.start_active_span("ot_span"): - start = time.time() - Artist.drop_collection() - end = time.time() - - # ensure we get a drop collection span - spans = tracer.pop() - assert len(spans) == 3 - ot_span, dd_server_span, dd_cmd_span = spans - - # confirm the parenting - assert ot_span.parent_id is None - assert dd_server_span.parent_id == ot_span.span_id - - assert ot_span.name == "ot_span" - assert ot_span.service == "my_svc" - - assert_is_measured(dd_cmd_span) - assert dd_cmd_span.resource == "drop artist" - assert dd_cmd_span.span_type == "mongodb" - assert dd_cmd_span.service == self.TEST_SERVICE - _assert_timing(dd_cmd_span, start, end) - - -class TestMongoEnginePatchConnectDefault(TracerTestCase, MongoEngineCore): - """Test suite with a global Pin for the connect function with the default configuration""" - - TEST_SERVICE = mongox.SERVICE - - def setUp(self): - patch() - - def tearDown(self): - unpatch() - # Disconnect and remove the client - mongoengine.connection.disconnect() - - def get_tracer_and_connect(self): - tracer = DummyTracer() - client = mongoengine.connect(port=MONGO_CONFIG["port"]) - Pin.get_from(client)._clone(tracer=tracer).onto(client) - return tracer - - -class TestMongoEnginePatchConnectSchematization(TestMongoEnginePatchConnectDefault): - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_SERVICE="mysvc")) - def test_user_specified_service_default(self): - """ - : When a user specifies a service for the app - The mongoengine integration should not use it. - """ - from ddtrace import config - - assert config.service == "mysvc" - - tracer = self.get_tracer_and_connect() - Artist.drop_collection() - - spans = tracer.pop() - assert len(spans) == 2 - assert spans[1].name == "pymongo.cmd" - assert spans[1].service != "mysvc" - - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA="v0", DD_SERVICE="mysvc")) - def test_user_specified_service_v0(self): - """ - v0: When a user specifies a service for the app - The mongoengine integration should not use it. - """ - from ddtrace import config - - assert config.service == "mysvc" - - tracer = self.get_tracer_and_connect() - Artist.drop_collection() - - spans = tracer.pop() - assert len(spans) == 2 - assert spans[1].name == "pymongo.cmd" - assert spans[1].service != "mysvc" - - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA="v1", DD_SERVICE="mysvc")) - def test_user_specified_service_v1(self): - """ - In v1 of the span attribute schema, when a user specifies a service for the app - The mongoengine integration should use it as the default. - """ - from ddtrace import config - - assert config.service == "mysvc" - - tracer = self.get_tracer_and_connect() - Artist.drop_collection() - - spans = tracer.pop() - assert len(spans) == 2 - assert spans[1].name == "mongodb.query" - assert spans[1].service == "mysvc" - - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA="v0")) - def test_unspecified_service_v0(self): - """ - In v0 of the span attribute schema, when there is no specified DD_SERVICE - The mongoengine integration should use None as the default. - """ - from ddtrace import config - - assert config.service is DEFAULT_SPAN_SERVICE_NAME - - tracer = self.get_tracer_and_connect() - Artist.drop_collection() - - spans = tracer.pop() - assert len(spans) == 2 - assert spans[0].service == "mongodb" - - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA="v1")) - def test_unspecified_service_v1(self): - """ - In v1 of the span attribute schema, when there is no specified DD_SERVICE - The mongoengine integration should use DEFAULT_SPAN_SERVICE_NAME as the default. - """ - from ddtrace import config - - assert config.service == DEFAULT_SPAN_SERVICE_NAME - - tracer = self.get_tracer_and_connect() - Artist.drop_collection() - - spans = tracer.pop() - assert len(spans) == 2 - assert spans[0].service == DEFAULT_SPAN_SERVICE_NAME - - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA="v0")) - def test_span_name_v0_schema(self): - """ - When a user specifies a service for the app - The mongoengine integration should not use it. - """ - tracer = self.get_tracer_and_connect() - Artist.drop_collection() - - spans = tracer.pop() - assert len(spans) == 2 - assert spans[0].name == "pymongo.checkout" or spans[0].name == "pymongo.get_socket" - assert spans[1].name == "pymongo.cmd" - - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_TRACE_SPAN_ATTRIBUTE_SCHEMA="v1")) - def test_span_name_v1_schema(self): - """ - When a user specifies a service for the app - The mongoengine integration should not use it. - """ - tracer = self.get_tracer_and_connect() - Artist.drop_collection() - - spans = tracer.pop() - assert len(spans) == 2 - assert spans[0].name == "pymongo.checkout" or spans[0].name == "pymongo.get_socket" - assert spans[1].name == "mongodb.query" - - -class TestMongoEnginePatchConnect(TestMongoEnginePatchConnectDefault): - """Test suite with a global Pin for the connect function with custom service""" - - TEST_SERVICE = "test-mongo-patch-connect" - - def get_tracer_and_connect(self): - tracer = TestMongoEnginePatchConnectDefault.get_tracer_and_connect(self) - pin = Pin(service=self.TEST_SERVICE) - pin._tracer = tracer - pin.onto(mongoengine.connect) - mongoengine.connect(port=MONGO_CONFIG["port"]) - - return tracer - - -class TestMongoEnginePatchClientDefault(TracerTestCase, MongoEngineCore): - """Test suite with a Pin local to a specific client with default configuration""" - - TEST_SERVICE = mongox.SERVICE - - def setUp(self): - patch() - - def tearDown(self): - unpatch() - # Disconnect and remove the client - mongoengine.connection.disconnect() - - def get_tracer_and_connect(self): - tracer = DummyTracer() - client = mongoengine.connect(port=MONGO_CONFIG["port"]) - Pin.get_from(client)._clone(tracer=tracer).onto(client) - - return tracer - - -class TestMongoEnginePatchClient(TestMongoEnginePatchClientDefault): - """Test suite with a Pin local to a specific client with custom service""" - - TEST_SERVICE = "test-mongo-patch-client" - - def get_tracer_and_connect(self): - tracer = DummyTracer() - # Set a connect-level service, to check that we properly override it - Pin(service="not-%s" % self.TEST_SERVICE).onto(mongoengine.connect) - client = mongoengine.connect(port=MONGO_CONFIG["port"]) - pin = Pin(service=self.TEST_SERVICE) - pin._tracer = tracer - pin.onto(client) - - return tracer - - def test_patch_unpatch(self): - tracer = DummyTracer() - - # Test patch idempotence - patch() - patch() - - client = mongoengine.connect(port=MONGO_CONFIG["port"]) - Pin.get_from(client)._clone(tracer=tracer).onto(client) - - Artist.drop_collection() - spans = tracer.pop() - assert spans, spans - assert len(spans) == 2 - - mongoengine.connection.disconnect() - tracer.pop() - - # Test unpatch - unpatch() - - mongoengine.connect(port=MONGO_CONFIG["port"]) - - Artist.drop_collection() - spans = tracer.pop() - assert not spans, spans - - # Disconnect so a new pymongo client can be created, - # connections are patched on instantiation - mongoengine.connection.disconnect() - # Test patch again - patch() - client = mongoengine.connect(port=MONGO_CONFIG["port"]) - Pin.get_from(client)._clone(tracer=tracer).onto(client) - - Artist.drop_collection() - spans = tracer.pop() - assert spans, spans - assert len(spans) == 2 - - def test_multiple_connect_no_double_patching(self): - """Ensure we do not double patch client._topology - - Regression test for https://github.com/DataDog/dd-trace-py/issues/2474 - """ - client = mongoengine.connect(port=MONGO_CONFIG["port"]) - assert Pin.get_from(client) is Pin.get_from(client._topology) - client.close() - - -def _assert_timing(span, start, end): - assert start < span.start < end - assert span.duration < end - start diff --git a/tests/contrib/mongoengine/test_mongoengine_patch.py b/tests/contrib/mongoengine/test_mongoengine_patch.py deleted file mode 100644 index 6f219d1566e..00000000000 --- a/tests/contrib/mongoengine/test_mongoengine_patch.py +++ /dev/null @@ -1,31 +0,0 @@ -# This test script was automatically generated by the contrib-patch-tests.py -# script. If you want to make changes to it, you should make sure that you have -# removed the ``_generated`` suffix from the file name, to prevent the content -# from being overwritten by future re-generations. - -from ddtrace.contrib.internal.mongoengine.patch import get_version -from ddtrace.contrib.internal.mongoengine.patch import patch - - -try: - from ddtrace.contrib.internal.mongoengine.patch import unpatch -except ImportError: - unpatch = None -from tests.contrib.patch import PatchTestCase - - -class TestMongoenginePatch(PatchTestCase.Base): - __integration_name__ = "mongoengine" - __module_name__ = "mongoengine" - __patch_func__ = patch - __unpatch_func__ = unpatch - __get_version__ = get_version - - def assert_module_patched(self, mongoengine): - pass - - def assert_not_module_patched(self, mongoengine): - pass - - def assert_not_module_double_patched(self, mongoengine): - pass diff --git a/tests/contrib/mysql/test_mysql.py b/tests/contrib/mysql/test_mysql.py index a071731d470..edb7fed2076 100644 --- a/tests/contrib/mysql/test_mysql.py +++ b/tests/contrib/mysql/test_mysql.py @@ -6,7 +6,6 @@ from ddtrace.contrib.internal.mysql.patch import unpatch from tests.contrib import shared_tests from tests.contrib.config import MYSQL_CONFIG -from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_dict_issuperset from tests.utils import assert_is_measured @@ -253,93 +252,6 @@ def test_query_proc(self): ) assert span.get_tag("sql.query") is None - def test_simple_query_ot(self): - """OpenTracing version of test_simple_query.""" - conn, tracer = self._get_conn_tracer() - - ot_tracer = init_tracer("mysql_svc", tracer) - - with ot_tracer.start_active_span("mysql_op"): - cursor = conn.cursor() - cursor.execute("SELECT 1") - rows = cursor.fetchall() - assert len(rows) == 1 - - spans = tracer.pop() - assert len(spans) == 2 - - ot_span, dd_span = spans - - # confirm parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.service == "mysql_svc" - assert ot_span.name == "mysql_op" - - assert_is_measured(dd_span) - assert dd_span.service == "mysql" - assert dd_span.name == "mysql.query" - assert dd_span.span_type == "sql" - assert dd_span.error == 0 - assert dd_span.get_metric("network.destination.port") == 3306 - assert_dict_issuperset( - dd_span.get_tags(), - { - "out.host": "127.0.0.1", - "db.name": "test", - "db.system": "mysql", - "db.user": "test", - "component": "mysql", - "span.kind": "client", - }, - ) - - def test_simple_query_ot_fetchall(self): - """OpenTracing version of test_simple_query.""" - with self.override_config("mysql", dict(trace_fetch_methods=True)): - conn, tracer = self._get_conn_tracer() - - ot_tracer = init_tracer("mysql_svc", tracer) - - with ot_tracer.start_active_span("mysql_op"): - cursor = conn.cursor() - cursor.execute("SELECT 1") - rows = cursor.fetchall() - assert len(rows) == 1 - - spans = tracer.pop() - assert len(spans) == 3 - - ot_span, dd_span, fetch_span = spans - - # confirm parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.service == "mysql_svc" - assert ot_span.name == "mysql_op" - - assert_is_measured(dd_span) - assert dd_span.service == "mysql" - assert dd_span.name == "mysql.query" - assert dd_span.span_type == "sql" - assert dd_span.error == 0 - assert dd_span.get_metric("network.destination.port") == 3306 - assert_dict_issuperset( - dd_span.get_tags(), - { - "out.host": "127.0.0.1", - "db.name": "test", - "db.system": "mysql", - "db.user": "test", - "component": "mysql", - "span.kind": "client", - }, - ) - - assert fetch_span.name == "mysql.query.fetchall" - def test_commit(self): conn, tracer = self._get_conn_tracer() conn.commit() diff --git a/tests/contrib/mysqldb/test_mysqldb.py b/tests/contrib/mysqldb/test_mysqldb.py index 344e42c46ad..82c99afd968 100644 --- a/tests/contrib/mysqldb/test_mysqldb.py +++ b/tests/contrib/mysqldb/test_mysqldb.py @@ -7,7 +7,6 @@ from ddtrace.contrib.internal.mysqldb.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME from tests.contrib import shared_tests -from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_dict_issuperset from tests.utils import assert_is_measured @@ -323,89 +322,6 @@ def test_query_proc(self): ) assert span.get_tag("sql.query") is None - def test_simple_query_ot(self): - """OpenTracing version of test_simple_query.""" - conn, tracer = self._get_conn_tracer() - - ot_tracer = init_tracer("mysql_svc", tracer) - with ot_tracer.start_active_span("mysql_op"): - cursor = conn.cursor() - cursor.execute("SELECT 1") - rows = cursor.fetchall() - assert len(rows) == 1 - - spans = tracer.pop() - assert len(spans) == 2 - ot_span, dd_span = spans - - # confirm parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.service == "mysql_svc" - assert ot_span.name == "mysql_op" - - assert_is_measured(dd_span) - assert dd_span.service == "mysql" - assert dd_span.name == "mysql.query" - assert dd_span.span_type == "sql" - assert dd_span.error == 0 - assert dd_span.get_metric("network.destination.port") == 3306 - assert_dict_issuperset( - dd_span.get_tags(), - { - "out.host": "127.0.0.1", - "db.name": "test", - "db.system": "mysql", - "db.user": "test", - "component": "mysqldb", - "span.kind": "client", - }, - ) - - def test_simple_query_ot_fetchall(self): - """OpenTracing version of test_simple_query.""" - with self.override_config("mysqldb", dict(trace_fetch_methods=True)): - conn, tracer = self._get_conn_tracer() - - ot_tracer = init_tracer("mysql_svc", tracer) - with ot_tracer.start_active_span("mysql_op"): - cursor = conn.cursor() - cursor.execute("SELECT 1") - rows = cursor.fetchall() - assert len(rows) == 1 - - spans = tracer.pop() - assert len(spans) == 3 - ot_span, dd_span, fetch_span = spans - - # confirm parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.service == "mysql_svc" - assert ot_span.name == "mysql_op" - - assert_is_measured(dd_span) - assert dd_span.service == "mysql" - assert dd_span.name == "mysql.query" - assert dd_span.span_type == "sql" - assert dd_span.error == 0 - assert dd_span.get_metric("network.destination.port") == 3306 - assert_dict_issuperset( - dd_span.get_tags(), - { - "out.host": "127.0.0.1", - "db.name": "test", - "db.system": "mysql", - "db.user": "test", - "component": "mysqldb", - "span.kind": "client", - }, - ) - - assert fetch_span.name == "mysql.query.fetchall" - def test_commit(self): conn, tracer = self._get_conn_tracer() diff --git a/tests/contrib/psycopg/test_psycopg.py b/tests/contrib/psycopg/test_psycopg.py index 987890dbbd7..b433bcb68f3 100644 --- a/tests/contrib/psycopg/test_psycopg.py +++ b/tests/contrib/psycopg/test_psycopg.py @@ -14,7 +14,6 @@ from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME from ddtrace.internal.utils.version import parse_version from tests.contrib.config import POSTGRES_CONFIG -from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_is_measured from tests.utils import snapshot @@ -142,47 +141,6 @@ def test_psycopg3_connection_with_string(self): Pin.get_from(conn)._clone(service="postgres", tracer=self.tracer).onto(conn) self.assert_conn_is_traced(conn, "postgres") - def test_opentracing_propagation(self): - # ensure OpenTracing plays well with our integration - query = """SELECT 'tracing'""" - - db = self._get_conn() - ot_tracer = init_tracer("psycopg-svc", self.tracer) - - with ot_tracer.start_active_span("db.access"): - cursor = db.cursor() - cursor.execute(query) - rows = cursor.fetchall() - - self.assertEqual(rows, [("tracing",)]) - - self.assert_structure( - dict(name="db.access", service="psycopg-svc"), - (dict(name="postgres.query", resource=query, service="postgres", error=0, span_type="sql"),), - ) - assert_is_measured(self.get_spans()[1]) - self.reset() - - with self.override_config("psycopg", dict(trace_fetch_methods=True)): - db = self._get_conn() - ot_tracer = init_tracer("psycopg-svc", self.tracer) - - with ot_tracer.start_active_span("db.access"): - cursor = db.cursor() - cursor.execute(query) - rows = cursor.fetchall() - - self.assertEqual(rows, [("tracing",)]) - - self.assert_structure( - dict(name="db.access", service="psycopg-svc"), - ( - dict(name="postgres.query", resource=query, service="postgres", error=0, span_type="sql"), - dict(name="postgres.query.fetchall", resource=query, service="postgres", error=0, span_type="sql"), - ), - ) - assert_is_measured(self.get_spans()[1]) - def test_cursor_ctx_manager(self): # ensure cursors work with context managers # https://github.com/DataDog/dd-trace-py/issues/228 diff --git a/tests/contrib/psycopg/test_psycopg_async.py b/tests/contrib/psycopg/test_psycopg_async.py index b4778e0693a..a21dc2d794c 100644 --- a/tests/contrib/psycopg/test_psycopg_async.py +++ b/tests/contrib/psycopg/test_psycopg_async.py @@ -10,7 +10,6 @@ from ddtrace.contrib.internal.psycopg.patch import unpatch from tests.contrib.asyncio.utils import AsyncioTestCase from tests.contrib.config import POSTGRES_CONFIG -from tests.opentracer.utils import init_tracer from tests.utils import assert_is_measured @@ -127,47 +126,6 @@ async def assert_conn_is_traced_async(self, db, service): self.assertIsNone(root.get_tag("sql.query")) self.reset() - async def test_opentracing_propagation(self): - # ensure OpenTracing plays well with our integration - query = """SELECT 'tracing'""" - - db = await self._get_conn() - ot_tracer = init_tracer("psycopg-svc", self.tracer) - - with ot_tracer.start_active_span("db.access"): - cursor = db.cursor() - await cursor.execute(query) - rows = await cursor.fetchall() - - self.assertEqual(rows, [("tracing",)]) - - self.assert_structure( - dict(name="db.access", service="psycopg-svc"), - (dict(name="postgres.query", resource=query, service="postgres", error=0, span_type="sql"),), - ) - assert_is_measured(self.get_spans()[1]) - self.reset() - - with self.override_config("psycopg", dict(trace_fetch_methods=True)): - db = await self._get_conn() - ot_tracer = init_tracer("psycopg-svc", self.tracer) - - with ot_tracer.start_active_span("db.access"): - cursor = db.cursor() - await cursor.execute(query) - rows = await cursor.fetchall() - - self.assertEqual(rows, [("tracing",)]) - - self.assert_structure( - dict(name="db.access", service="psycopg-svc"), - ( - dict(name="postgres.query", resource=query, service="postgres", error=0, span_type="sql"), - dict(name="postgres.query.fetchall", resource=query, service="postgres", error=0, span_type="sql"), - ), - ) - assert_is_measured(self.get_spans()[1]) - async def test_cursor_ctx_manager(self): # ensure cursors work with context managers # https://github.com/DataDog/dd-trace-py/issues/228 diff --git a/tests/contrib/psycopg2/test_psycopg.py b/tests/contrib/psycopg2/test_psycopg.py index 209de02c880..10051da0cff 100644 --- a/tests/contrib/psycopg2/test_psycopg.py +++ b/tests/contrib/psycopg2/test_psycopg.py @@ -13,7 +13,6 @@ from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME from ddtrace.internal.utils.version import parse_version from tests.contrib.config import POSTGRES_CONFIG -from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_is_measured from tests.utils import snapshot @@ -148,47 +147,6 @@ def test_psycopg2_connection_with_string(self): Pin.get_from(conn)._clone(service="postgres", tracer=self.tracer).onto(conn) self.assert_conn_is_traced(conn, "postgres") - def test_opentracing_propagation(self): - # ensure OpenTracing plays well with our integration - query = """SELECT 'tracing'""" - - db = self._get_conn() - ot_tracer = init_tracer("psycopg-svc", self.tracer) - - with ot_tracer.start_active_span("db.access"): - cursor = db.cursor() - cursor.execute(query) - rows = cursor.fetchall() - - self.assertEqual(rows, [("tracing",)]) - - self.assert_structure( - dict(name="db.access", service="psycopg-svc"), - (dict(name="postgres.query", resource=query, service="postgres", error=0, span_type="sql"),), - ) - assert_is_measured(self.get_spans()[1]) - self.reset() - - with self.override_config("psycopg", dict(trace_fetch_methods=True)): - db = self._get_conn() - ot_tracer = init_tracer("psycopg-svc", self.tracer) - - with ot_tracer.start_active_span("db.access"): - cursor = db.cursor() - cursor.execute(query) - rows = cursor.fetchall() - - self.assertEqual(rows, [("tracing",)]) - - self.assert_structure( - dict(name="db.access", service="psycopg-svc"), - ( - dict(name="postgres.query", resource=query, service="postgres", error=0, span_type="sql"), - dict(name="postgres.query.fetchall", resource=query, service="postgres", error=0, span_type="sql"), - ), - ) - assert_is_measured(self.get_spans()[1]) - @skipIf(PSYCOPG2_VERSION < (2, 5), "context manager not available in psycopg2==2.4") def test_cursor_ctx_manager(self): # ensure cursors work with context managers diff --git a/tests/contrib/pylibmc/test.py b/tests/contrib/pylibmc/test.py index da5823fc6b3..91242bbe871 100644 --- a/tests/contrib/pylibmc/test.py +++ b/tests/contrib/pylibmc/test.py @@ -12,7 +12,6 @@ from ddtrace.contrib.internal.pylibmc.patch import unpatch from ddtrace.ext import memcached from tests.contrib.config import MEMCACHED_CONFIG as cfg -from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_is_measured @@ -78,33 +77,6 @@ def test_incr_decr(self): resources = sorted(s.resource for s in spans) assert expected_resources == resources - def test_incr_decr_ot(self): - """OpenTracing version of test_incr_decr.""" - client, tracer = self.get_client() - ot_tracer = init_tracer("memcached", tracer) - - start = time.time() - with ot_tracer.start_active_span("mc_ops"): - client.set("a", 1) - client.incr("a", 2) - client.decr("a", 1) - v = client.get("a") - assert v == 2 - end = time.time() - - # verify spans - spans = tracer.pop() - ot_span = spans[0] - - assert ot_span.name == "mc_ops" - - for s in spans[1:]: - assert s.parent_id == ot_span.span_id - self._verify_cache_span(s, start, end) - expected_resources = sorted(["get", "set", "incr", "decr"]) - resources = sorted(s.resource for s in spans[1:]) - assert expected_resources == resources - def test_clone(self): # ensure cloned connections are traced as well. client, tracer = self.get_client() diff --git a/tests/contrib/pymongo/test.py b/tests/contrib/pymongo/test.py index 236fa582910..ccabc218ce9 100644 --- a/tests/contrib/pymongo/test.py +++ b/tests/contrib/pymongo/test.py @@ -10,7 +10,6 @@ from ddtrace.contrib.internal.pymongo.patch import patch from ddtrace.contrib.internal.pymongo.patch import unpatch from ddtrace.ext import SpanTypes -from tests.opentracer.utils import init_tracer from tests.utils import DummyTracer from tests.utils import TracerTestCase from tests.utils import assert_is_measured @@ -298,67 +297,6 @@ def test_insert_find(self): assert spans[-1].resource == 'find teams {"name": "?"}' assert spans[-1].get_tag("mongodb.query") == '{"name": "?"}' - def test_update_ot(self): - """OpenTracing version of test_update.""" - tracer, client = self.get_tracer_and_client() - ot_tracer = init_tracer("mongo_svc", tracer) - - with ot_tracer.start_active_span("mongo_op"): - db = client["testdb"] - db.drop_collection("songs") - input_songs = [ - {"name": "Powderfinger", "artist": "Neil"}, - {"name": "Harvest", "artist": "Neil"}, - {"name": "Suzanne", "artist": "Leonard"}, - {"name": "Partisan", "artist": "Leonard"}, - ] - db.songs.insert_many(input_songs) - result = db.songs.update_many( - {"artist": "Neil"}, - {"$set": {"artist": "Shakey"}}, - ) - - assert result.matched_count == 2 - assert result.modified_count == 2 - - # ensure all is traced. - spans = tracer.pop() - assert spans, spans - assert len(spans) == 7 - - ot_span = spans[0] - assert ot_span.parent_id is None - assert ot_span.name == "mongo_op" - assert ot_span.service == "mongo_svc" - - # remove pymongo.get_socket and pymongo.checkout spans - spans = [s for s in spans if s.name == "pymongo.cmd"] - assert len(spans) == 3 - for span in spans: - # ensure all the of the common metadata is set - assert_is_measured(span) - assert span.service == "pymongo" - assert span.span_type == "mongodb" - assert span.get_tag("component") == "pymongo" - assert span.get_tag("span.kind") == "client" - assert span.get_tag("db.system") == "mongodb" - assert span.get_tag("mongodb.collection") == "songs" - assert span.get_tag("mongodb.db") == "testdb" - assert span.get_tag("out.host") - assert span.get_metric("network.destination.port") - - expected_resources = set( - [ - "drop songs", - 'update songs {"artist": "?"}', - "insert songs", - "pymongo.get_socket", - "pymongo.checkout", - ] - ) - - assert {s.resource for s in spans[1:]}.issubset(expected_resources) - def test_rowcount(self): tracer, client = self.get_tracer_and_client() db = client["testdb"] diff --git a/tests/contrib/pymysql/test_pymysql.py b/tests/contrib/pymysql/test_pymysql.py index 762f55bed08..8fb5ef78621 100644 --- a/tests/contrib/pymysql/test_pymysql.py +++ b/tests/contrib/pymysql/test_pymysql.py @@ -6,7 +6,6 @@ from ddtrace.contrib.internal.pymysql.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME from tests.contrib import shared_tests -from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_dict_issuperset from tests.utils import assert_is_measured @@ -249,73 +248,6 @@ def test_query_proc(self): meta.update(self.DB_INFO) assert_dict_issuperset(span.get_tags(), meta) - def test_simple_query_ot(self): - """OpenTracing version of test_simple_query.""" - conn, tracer = self._get_conn_tracer() - - ot_tracer = init_tracer("mysql_svc", tracer) - with ot_tracer.start_active_span("mysql_op"): - cursor = conn.cursor() - cursor.execute("SELECT 1") - rows = cursor.fetchall() - assert len(rows) == 1 - - spans = tracer.pop() - assert len(spans) == 2 - ot_span, dd_span = spans - - # confirm parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.service == "mysql_svc" - assert ot_span.name == "mysql_op" - - assert_is_measured(dd_span) - assert dd_span.service == "pymysql" - assert dd_span.name == "pymysql.query" - assert dd_span.span_type == "sql" - assert dd_span.error == 0 - assert dd_span.get_metric("network.destination.port") == MYSQL_CONFIG.get("port") - meta = {} - meta.update(self.DB_INFO) - assert_dict_issuperset(dd_span.get_tags(), meta) - - def test_simple_query_ot_fetchall(self): - """OpenTracing version of test_simple_query.""" - with self.override_config("pymysql", dict(trace_fetch_methods=True)): - conn, tracer = self._get_conn_tracer() - - ot_tracer = init_tracer("mysql_svc", tracer) - with ot_tracer.start_active_span("mysql_op"): - cursor = conn.cursor() - cursor.execute("SELECT 1") - rows = cursor.fetchall() - assert len(rows) == 1 - - spans = tracer.pop() - assert len(spans) == 3 - ot_span, dd_span, fetch_span = spans - - # confirm parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.service == "mysql_svc" - assert ot_span.name == "mysql_op" - - assert_is_measured(dd_span) - assert dd_span.service == "pymysql" - assert dd_span.name == "pymysql.query" - assert dd_span.span_type == "sql" - assert dd_span.error == 0 - assert dd_span.get_metric("network.destination.port") == MYSQL_CONFIG.get("port") - meta = {} - meta.update(self.DB_INFO) - assert_dict_issuperset(dd_span.get_tags(), meta) - - assert fetch_span.name == "pymysql.query.fetchall" - def test_commit(self): conn, tracer = self._get_conn_tracer() diff --git a/tests/contrib/pyramid/utils.py b/tests/contrib/pyramid/utils.py index 3dec370d500..2f663258ac5 100644 --- a/tests/contrib/pyramid/utils.py +++ b/tests/contrib/pyramid/utils.py @@ -11,7 +11,6 @@ from tests.utils import assert_is_measured from tests.utils import assert_span_http_status_code -from ...opentracer.utils import init_tracer from .app import create_app @@ -273,33 +272,3 @@ def test_include_conflicts(self): self.app.get("/404", status=404) spans = self.pop_spans() assert len(spans) == 1 - - def test_200_ot(self): - """OpenTracing version of test_200.""" - ot_tracer = init_tracer("pyramid_svc", self.tracer) - - with ot_tracer.start_active_span("pyramid_get"): - res = self.app.get("/", status=200) - assert b"idx" in res.body - - spans = self.pop_spans() - assert len(spans) == 2 - - ot_span, dd_span = spans - - # confirm the parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.name == "pyramid_get" - assert ot_span.service == "pyramid_svc" - - assert_is_measured(dd_span) - assert dd_span.service == "foobar" - assert dd_span.resource == "GET index" - assert dd_span.error == 0 - assert dd_span.span_type == "web" - assert dd_span.get_tag("http.method") == "GET" - assert_span_http_status_code(dd_span, 200) - assert dd_span.get_tag(http.URL) == "http://localhost/" - assert dd_span.get_tag("pyramid.route.name") == "index" diff --git a/tests/contrib/redis/test_redis.py b/tests/contrib/redis/test_redis.py index 31fe287fdf1..f2a42b83d19 100644 --- a/tests/contrib/redis/test_redis.py +++ b/tests/contrib/redis/test_redis.py @@ -4,12 +4,10 @@ import pytest import redis -import ddtrace from ddtrace._trace.pin import Pin from ddtrace.contrib.internal.redis.patch import patch from ddtrace.contrib.internal.redis.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME -from tests.opentracer.utils import init_tracer from tests.utils import DummyTracer from tests.utils import TracerTestCase from tests.utils import snapshot @@ -238,39 +236,6 @@ def test_patch_unpatch(self): assert spans, spans assert len(spans) == 1 - def test_opentracing(self): - """Ensure OpenTracing works with redis.""" - ot_tracer = init_tracer("redis_svc", self.tracer) - - with ot_tracer.start_active_span("redis_get"): - us = self.r.get("cheese") - assert us is None - - spans = self.get_spans() - assert len(spans) == 2 - ot_span, dd_span = spans - - # confirm the parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.name == "redis_get" - assert ot_span.service == "redis_svc" - - self.assert_is_measured(dd_span) - assert dd_span.service == "redis" - assert dd_span.name == "redis.command" - assert dd_span.span_type == "redis" - assert dd_span.error == 0 - assert dd_span.get_metric("out.redis_db") == 0 - assert dd_span.get_tag("out.host") == "localhost" - assert dd_span.get_tag("redis.raw_command") == "GET cheese" - assert dd_span.get_tag("component") == "redis" - assert dd_span.get_tag("span.kind") == "client" - assert dd_span.get_tag("db.system") == "redis" - assert dd_span.get_metric("redis.args_length") == 2 - assert dd_span.resource == "GET" - def test_redis_rowcount_all_keys_valid(self): self.r.set("key1", "value1") @@ -540,20 +505,6 @@ def test_patch_unpatch(self): assert spans, spans assert len(spans) == 1 - @snapshot() - def test_opentracing(self): - """Ensure OpenTracing works with redis.""" - writer = ddtrace.tracer._span_aggregator.writer - ot_tracer = init_tracer("redis_svc", ddtrace.tracer) - # FIXME: OpenTracing always overrides the hostname/port and creates a new - # writer so we have to reconfigure with the previous one - ddtrace.tracer._span_aggregator.writer = writer - ddtrace.tracer._recreate() - - with ot_tracer.start_active_span("redis_get"): - us = self.r.get("cheese") - assert us is None - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_SERVICE="mysvc")) @snapshot() def test_user_specified_service(self): diff --git a/tests/contrib/requests/test_requests.py b/tests/contrib/requests/test_requests.py index e1a8d2672d6..f7f7c24bc07 100644 --- a/tests/contrib/requests/test_requests.py +++ b/tests/contrib/requests/test_requests.py @@ -18,7 +18,6 @@ from ddtrace.contrib.internal.requests.patch import unpatch from ddtrace.ext import http from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME -from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_is_measured from tests.utils import assert_span_http_status_code @@ -580,35 +579,6 @@ def test_global_config_service(self): spans = self.pop_spans() assert spans[0].service == "override" - def test_200_ot(self): - """OpenTracing version of test_200.""" - - ot_tracer = init_tracer("requests_svc", self.tracer) - - with ot_tracer.start_active_span("requests_get"): - out = self.session.get(URL_200) - assert out.status_code == 200 - - # validation - spans = self.pop_spans() - assert len(spans) == 2 - - ot_span, dd_span = spans - - # confirm the parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.name == "requests_get" - assert ot_span.service == "requests_svc" - - assert_is_measured(dd_span) - assert dd_span.get_tag(http.METHOD) == "GET" - assert_span_http_status_code(dd_span, 200) - assert dd_span.error == 0 - assert dd_span.span_type == "http" - assert dd_span.resource == "GET /status/200" - def test_request_and_response_headers(self): # Disabled when not configured self.session.get(URL_200, headers={"my-header": "my_value"}) diff --git a/tests/contrib/snowflake/test_snowflake.py b/tests/contrib/snowflake/test_snowflake.py index f4995255b4c..67ce242b8e4 100644 --- a/tests/contrib/snowflake/test_snowflake.py +++ b/tests/contrib/snowflake/test_snowflake.py @@ -9,8 +9,6 @@ from ddtrace._trace.pin import Pin from ddtrace.contrib.internal.snowflake.patch import patch from ddtrace.contrib.internal.snowflake.patch import unpatch -from ddtrace.trace import tracer -from tests.opentracer.utils import init_tracer from tests.utils import override_config from tests.utils import snapshot @@ -93,13 +91,6 @@ def client(): yield ctx -@contextlib.contextmanager -def ot_trace(): - ot = init_tracer("snowflake_svc", tracer) - with ot.start_active_span("snowflake_op"): - yield - - @snapshot() @req_mock.activate def test_snowflake_fetchone(client): @@ -224,72 +215,6 @@ def test_snowflake_executemany_insert(client): assert res.rowcount == 2 -@snapshot() -@req_mock.activate -def test_snowflake_ot_fetchone(client): - add_snowflake_query_response( - rowtype=["TEXT"], - rows=[("4.30.2",)], - ) - with ot_trace(): - with client.cursor() as cur: - res = cur.execute("select current_version();") - assert res == cur - assert cur.fetchone() == ("4.30.2",) - - -@snapshot() -@req_mock.activate -def test_snowflake_ot_fetchall(client): - add_snowflake_query_response( - rowtype=["TEXT"], - rows=[("4.30.2",)], - ) - with ot_trace(): - with client.cursor() as cur: - res = cur.execute("select current_version();") - assert res == cur - assert cur.fetchall() == [("4.30.2",)] - - -@snapshot() -@req_mock.activate -def test_snowflake_ot_fetchall_multiple_rows(client): - add_snowflake_query_response( - rowtype=["TEXT", "TEXT"], - rows=[("1a", "1b"), ("2a", "2b")], - ) - with ot_trace(): - with client.cursor() as cur: - res = cur.execute("select a, b from t;") - assert res == cur - assert cur.fetchall() == [ - ("1a", "1b"), - ("2a", "2b"), - ] - - -@snapshot() -@req_mock.activate -def test_snowflake_ot_executemany_insert(client): - add_snowflake_query_response( - rowtype=[], - rows=[], - total=2, - ) - with ot_trace(): - with client.cursor() as cur: - res = cur.executemany( - "insert into t (a, b) values (%s, %s);", - [ - ("1a", "1b"), - ("2a", "2b"), - ], - ) - assert res == cur - assert res.rowcount == 2 - - @pytest.mark.snapshot() @pytest.mark.parametrize( "service_schema", diff --git a/tests/contrib/sqlalchemy/mixins.py b/tests/contrib/sqlalchemy/mixins.py index 18b180db2d3..031c9ca3aea 100644 --- a/tests/contrib/sqlalchemy/mixins.py +++ b/tests/contrib/sqlalchemy/mixins.py @@ -9,7 +9,6 @@ from sqlalchemy.orm import sessionmaker from ddtrace.contrib.internal.sqlalchemy.engine import trace_engine -from tests.opentracer.utils import init_tracer Base = declarative_base() @@ -166,36 +165,3 @@ def test_engine_connect_execute(self): assert span.span_type == "sql" assert span.error == 0 assert span.duration > 0 - - def test_opentracing(self): - """Ensure that sqlalchemy works with the opentracer.""" - ot_tracer = init_tracer("sqlalch_svc", self.tracer) - - with ot_tracer.start_active_span("sqlalch_op"): - with self.connection() as conn: - rows = conn.execute(text("SELECT * FROM players")).fetchall() - assert len(rows) == 0 - - traces = self.pop_traces() - # trace composition - assert len(traces) == 1 - assert len(traces[0]) == 2 - ot_span, dd_span = traces[0] - - # confirm the parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.name == "sqlalch_op" - assert ot_span.service == "sqlalch_svc" - - # span fields - assert dd_span.name == "{}.query".format(self.VENDOR) - assert dd_span.service == self.SERVICE - assert dd_span.resource == "SELECT * FROM players" - assert dd_span.get_tag("sql.db") == self.SQL_DB - assert dd_span.get_tag("component") == "sqlalchemy" - assert dd_span.get_tag("span.kind") == "client" - assert dd_span.span_type == "sql" - assert dd_span.error == 0 - assert dd_span.duration > 0 diff --git a/tests/contrib/sqlite3/test_sqlite3.py b/tests/contrib/sqlite3/test_sqlite3.py index e4b12d7b4e8..de2b18f72b4 100644 --- a/tests/contrib/sqlite3/test_sqlite3.py +++ b/tests/contrib/sqlite3/test_sqlite3.py @@ -21,7 +21,6 @@ from ddtrace.contrib.internal.sqlite3.patch import patch from ddtrace.contrib.internal.sqlite3.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME -from tests.opentracer.utils import init_tracer from tests.utils import TracerTestCase from tests.utils import assert_is_measured from tests.utils import assert_is_not_measured @@ -206,47 +205,6 @@ def test_sqlite_fetchmany_is_traced(self): self.assertIsNone(fetchmany_span.get_tag("sql.query")) self.assertEqual(fetchmany_span.get_tag("db.system"), "sqlite") - def test_sqlite_ot(self): - """Ensure sqlite works with the opentracer.""" - ot_tracer = init_tracer("sqlite_svc", self.tracer) - - # Ensure we can run a query and it's correctly traced - q = "select * from sqlite_master" - with ot_tracer.start_active_span("sqlite_op"): - db = sqlite3.connect(":memory:") - pin = Pin.get_from(db) - assert pin - pin._clone(tracer=self.tracer).onto(db) - cursor = db.execute(q) - rows = cursor.fetchall() - assert not rows - - self.assert_structure( - dict(name="sqlite_op", service="sqlite_svc"), - (dict(name="sqlite.query", service="sqlite", span_type="sql", resource=q, error=0),), - ) - assert_is_measured(self.get_spans()[1]) - self.reset() - - with self.override_config("sqlite", dict(trace_fetch_methods=True)): - with ot_tracer.start_active_span("sqlite_op"): - db = sqlite3.connect(":memory:") - pin = Pin.get_from(db) - assert pin - pin._clone(tracer=self.tracer).onto(db) - cursor = db.execute(q) - rows = cursor.fetchall() - assert not rows - - self.assert_structure( - dict(name="sqlite_op", service="sqlite_svc"), - ( - dict(name="sqlite.query", span_type="sql", resource=q, error=0), - dict(name="sqlite.query.fetchall", span_type="sql", resource=q, error=0), - ), - ) - assert_is_measured(self.get_spans()[1]) - def test_commit(self): connection = self._given_a_traced_connection(self.tracer) connection.commit() diff --git a/tests/contrib/suitespec.yml b/tests/contrib/suitespec.yml index 830cc5511b3..649bc840e8e 100644 --- a/tests/contrib/suitespec.yml +++ b/tests/contrib/suitespec.yml @@ -31,9 +31,6 @@ components: bottle: - ddtrace/contrib/bottle.py - ddtrace/contrib/internal/bottle/* - cassandra: - - ddtrace/contrib/internal/cassandra/* - - ddtrace/ext/cassandra.py celery: - ddtrace/contrib/celery.py - ddtrace/contrib/internal/celery/* @@ -89,8 +86,6 @@ components: - ddtrace/contrib/internal/flask/* - ddtrace/contrib/flask_cache.py - ddtrace/contrib/internal/flask_cache/* - freezegun: - - ddtrace/contrib/internal/freezegun/* futures: - ddtrace/contrib/internal/futures/* gevent: @@ -129,7 +124,6 @@ components: - ddtrace/contrib/internal/molten/* mongo: - ddtrace/contrib/internal/pymongo/* - - ddtrace/contrib/internal/mongoengine/* - ddtrace/ext/mongo.py mysql: - ddtrace/contrib/internal/mysql/* @@ -459,19 +453,6 @@ suites: - tests/contrib/bottle/* runner: riot snapshot: true - cassandra: - paths: - - '@bootstrap' - - '@core' - - '@contrib' - - '@tracing' - - '@cassandra' - - tests/contrib/cassandra/* - runner: riot - snapshot: true - parallelism: 2 - services: - - cassandra celery: env: DD_DISABLE_ERROR_RESPONSES: true @@ -694,16 +675,6 @@ suites: - memcached - redis snapshot: true - freezegun: - paths: - - '@bootstrap' - - '@core' - - '@contrib' - - '@tracing' - - '@freezegun' - - tests/contrib/freezegun/* - runner: riot - snapshot: true gevent: paths: - '@bootstrap' @@ -898,18 +869,6 @@ suites: - tests/contrib/molten/* runner: riot snapshot: true - mongoengine: - paths: - - '@bootstrap' - - '@core' - - '@contrib' - - '@tracing' - - '@mongo' - - tests/contrib/mongoengine/* - runner: riot - snapshot: true - services: - - mongo mysqlpython: paths: - '@bootstrap' @@ -937,15 +896,6 @@ suites: - tests/snapshots/tests.opentelemetry.* runner: riot snapshot: true - opentracer: - parallelism: 1 - paths: - - '@bootstrap' - - '@core' - - '@tracing' - - '@opentracer' - - tests/opentracer/* - runner: riot protobuf: parallelism: 1 paths: diff --git a/tests/contrib/tornado/test_tornado_web.py b/tests/contrib/tornado/test_tornado_web.py index 642246aa244..cbb4d2c7785 100644 --- a/tests/contrib/tornado/test_tornado_web.py +++ b/tests/contrib/tornado/test_tornado_web.py @@ -1,6 +1,3 @@ -import pytest -import tornado - from ddtrace import config from ddtrace.constants import _ORIGIN_KEY from ddtrace.constants import _SAMPLING_PRIORITY_KEY @@ -8,7 +5,6 @@ from ddtrace.constants import USER_KEEP from ddtrace.ext import http from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME -from tests.opentracer.utils import init_tracer from tests.tracer.utils_inferred_spans.test_helpers import assert_web_and_inferred_aws_api_gateway_span_data from tests.utils import assert_is_measured from tests.utils import assert_span_http_status_code @@ -385,46 +381,6 @@ def test_propagation(self): assert request_span.get_tag("component") == "tornado" assert request_span.get_tag("span.kind") == "server" - # Opentracing support depends on new AsyncioScopeManager - # See: https://github.com/opentracing/opentracing-python/pull/118 - @pytest.mark.skipif( - tornado.version_info >= (5, 0), reason="Opentracing ScopeManager not available for Tornado >= 5" - ) - def test_success_handler_ot(self): - """OpenTracing version of test_success_handler.""" - from opentracing.scope_managers.tornado import TornadoScopeManager - - ot_tracer = init_tracer("tornado_svc", self.tracer, scope_manager=TornadoScopeManager()) - - with ot_tracer.start_active_span("tornado_op"): - response = self.fetch("/success/") - assert 200 == response.code - - traces = self.pop_traces() - assert 1 == len(traces) - assert 2 == len(traces[0]) - # dd_span will start and stop before the ot_span finishes - ot_span, dd_span = traces[0] - - # confirm the parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.name == "tornado_op" - assert ot_span.service == "tornado_svc" - - assert_is_measured(dd_span) - assert "tornado-web" == dd_span.service - assert "tornado.request" == dd_span.name - assert "web" == dd_span.span_type - assert "tests.contrib.tornado.web.app.SuccessHandler" == dd_span.resource - assert "GET" == dd_span.get_tag("http.method") - assert_span_http_status_code(dd_span, 200) - assert self.get_url("/success/") == dd_span.get_tag(http.URL) - assert 0 == dd_span.error - assert dd_span.get_tag("component") == "tornado" - assert dd_span.get_tag("span.kind") == "server" - class TestNoPropagationTornadoWebViaSetting(TornadoTestCase): """ diff --git a/tests/contrib/urllib3/test_urllib3.py b/tests/contrib/urllib3/test_urllib3.py index 01d3b87893c..c1a6434c0bc 100644 --- a/tests/contrib/urllib3/test_urllib3.py +++ b/tests/contrib/urllib3/test_urllib3.py @@ -14,7 +14,6 @@ from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME 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 from tests.utils import snapshot @@ -399,34 +398,6 @@ def test_split_by_domain_includes_port(self): assert s.error == 1 assert s.service == "httpbin.org:8000" - def test_200_ot(self): - """OpenTracing version of test_200.""" - - ot_tracer = init_tracer("urllib3_svc", self.tracer) - - with ot_tracer.start_active_span("urllib3_get"): - out = self.http.request("GET", URL_200) - assert out.status == 200 - - spans = self.pop_spans() - assert len(spans) == 2 - - ot_span, dd_span = spans - - # confirm the parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.name == "urllib3_get" - assert ot_span.service == "urllib3_svc" - - assert dd_span.get_tag(http.METHOD) == "GET" - assert dd_span.get_tag(http.STATUS_CODE) == "200" - assert dd_span.get_tag("component") == "urllib3" - assert dd_span.get_tag("span.kind") == "client" - assert dd_span.error == 0 - assert dd_span.span_type == "http" - def test_request_and_response_headers(self): """Tests the headers are added as tag when the headers are whitelisted""" self.http.request("GET", URL_200, headers={"my-header": "my_value"}) diff --git a/tests/contrib/valkey/test_valkey.py b/tests/contrib/valkey/test_valkey.py index 867f435939e..447ae932771 100644 --- a/tests/contrib/valkey/test_valkey.py +++ b/tests/contrib/valkey/test_valkey.py @@ -4,12 +4,10 @@ import pytest import valkey -import ddtrace from ddtrace._trace.pin import Pin from ddtrace.contrib.internal.valkey.patch import patch from ddtrace.contrib.internal.valkey.patch import unpatch from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME -from tests.opentracer.utils import init_tracer from tests.utils import DummyTracer from tests.utils import TracerTestCase from tests.utils import snapshot @@ -238,39 +236,6 @@ def test_patch_unpatch(self): assert spans, spans assert len(spans) == 1 - def test_opentracing(self): - """Ensure OpenTracing works with valkey.""" - ot_tracer = init_tracer("valkey_svc", self.tracer) - - with ot_tracer.start_active_span("valkey_get"): - us = self.r.get("cheese") - assert us is None - - spans = self.get_spans() - assert len(spans) == 2 - ot_span, dd_span = spans - - # confirm the parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert ot_span.name == "valkey_get" - assert ot_span.service == "valkey_svc" - - self.assert_is_measured(dd_span) - assert dd_span.service == "valkey" - assert dd_span.name == "valkey.command" - assert dd_span.span_type == "valkey" - assert dd_span.error == 0 - assert dd_span.get_metric("out.valkey_db") == 0 - assert dd_span.get_tag("out.host") == "localhost" - assert dd_span.get_tag("valkey.raw_command") == "GET cheese" - assert dd_span.get_tag("component") == "valkey" - assert dd_span.get_tag("span.kind") == "client" - assert dd_span.get_tag("db.system") == "valkey" - assert dd_span.get_metric("valkey.args_length") == 2 - assert dd_span.resource == "GET" - def test_valkey_rowcount_all_keys_valid(self): self.r.set("key1", "value1") @@ -540,15 +505,6 @@ def test_patch_unpatch(self): assert spans, spans assert len(spans) == 1 - @snapshot() - def test_opentracing(self): - """Ensure OpenTracing works with valkey.""" - ot_tracer = init_tracer("valkey_svc", ddtrace.tracer) - - with ot_tracer.start_active_span("valkey_get"): - us = self.r.get("cheese") - assert us is None - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_SERVICE="mysvc")) @snapshot() def test_user_specified_service(self): diff --git a/tests/contrib/vertica/test_vertica.py b/tests/contrib/vertica/test_vertica.py index 1f3becdb8bf..223dce2982b 100644 --- a/tests/contrib/vertica/test_vertica.py +++ b/tests/contrib/vertica/test_vertica.py @@ -12,7 +12,6 @@ from ddtrace.internal.schema import DEFAULT_SPAN_SERVICE_NAME from ddtrace.settings._config import _deepmerge from tests.contrib.config import VERTICA_CONFIG -from tests.opentracer.utils import init_tracer from tests.utils import DummyTracer from tests.utils import TracerTestCase from tests.utils import assert_is_measured @@ -367,37 +366,6 @@ def test_copy(self): assert spans[1].name == "vertica.query" assert spans[1].resource == "COMMIT;" - def test_opentracing(self): - """Ensure OpenTracing works with vertica.""" - conn, cur = self.test_conn - - ot_tracer = init_tracer("vertica_svc", self.test_tracer) - - with ot_tracer.start_active_span("vertica_execute"): - cur.execute("INSERT INTO {} (a, b) VALUES (1, 'aa');".format(TEST_TABLE)) - conn.close() - - spans = self.test_tracer.pop() - assert len(spans) == 2 - ot_span, dd_span = spans - - # confirm the parenting - assert ot_span.parent_id is None - assert dd_span.parent_id == ot_span.span_id - - assert_is_measured(dd_span) - assert dd_span.service == "vertica" - assert dd_span.span_type == "sql" - assert dd_span.name == "vertica.query" - assert dd_span.get_metric("db.row_count") == -1 - query = "INSERT INTO test_table (a, b) VALUES (1, 'aa');" - assert dd_span.resource == query - assert dd_span.get_tag("out.host") == "127.0.0.1" - assert dd_span.get_tag("span.kind") == "client" - assert dd_span.get_metric("network.destination.port") == 5433 - assert dd_span.get_tag("db.system") == "vertica" - assert dd_span.get_tag("component") == "vertica" - @TracerTestCase.run_in_subprocess(env_overrides=dict(DD_SERVICE="mysvc"), use_pytest=True) @pytest.mark.usefixtures("test_tracer", "test_conn") def test_user_specified_service_default(self): diff --git a/tests/contrib/yaaredis/test_yaaredis.py b/tests/contrib/yaaredis/test_yaaredis.py index 472612f11ca..d3fa5743b70 100644 --- a/tests/contrib/yaaredis/test_yaaredis.py +++ b/tests/contrib/yaaredis/test_yaaredis.py @@ -9,7 +9,6 @@ from ddtrace.contrib.internal.yaaredis.patch import patch from ddtrace.contrib.internal.yaaredis.patch import unpatch from ddtrace.internal.compat import is_wrapted -from tests.opentracer.utils import init_tracer from tests.utils import override_config from ..config import REDIS_CONFIG @@ -149,18 +148,6 @@ async def test_service_name_config(tracer, test_spans, traced_yaaredis): assert test_spans.spans[0].service == service -@pytest.mark.asyncio -async def test_opentracing(tracer, snapshot_context, traced_yaaredis): - """Ensure OpenTracing works with redis.""" - - with snapshot_context(): - pin = Pin.get_from(traced_yaaredis) - ot_tracer = init_tracer("redis_svc", pin.tracer) - - with ot_tracer.start_active_span("redis_get"): - await traced_yaaredis.get("cheese") - - @pytest.mark.parametrize( "service_schema", [ diff --git a/tests/integration/test_integration.py b/tests/integration/test_integration.py index 94a8b95a77b..fa1b90ab9df 100644 --- a/tests/integration/test_integration.py +++ b/tests/integration/test_integration.py @@ -817,7 +817,7 @@ def test_logging_during_tracer_init_succeeds_when_debug_logging_and_logs_injecti ), "stderr should not contain any exception logs" -@pytest.mark.skipif(PYTHON_VERSION_INFO < (3, 9), reason="Python 3.8 throws a deprecation warning") +@pytest.mark.skipif(PYTHON_VERSION_INFO < (3, 10), reason="ddtrace under Python 3.9 is deprecated") def test_no_warnings_when_Wall(): env = os.environ.copy() # Have to disable sqlite3 as coverage uses it on process shutdown diff --git a/tests/internal/test_module.py b/tests/internal/test_module.py index 8ae177387bc..27de6444ef0 100644 --- a/tests/internal/test_module.py +++ b/tests/internal/test_module.py @@ -429,7 +429,7 @@ def ns_hook(module): ModuleWatchdog.uninstall() -@pytest.mark.skipif(PYTHON_VERSION_INFO < (3, 9), reason="Python 3.8 throws a deprecation warning") +@pytest.mark.skipif(PYTHON_VERSION_INFO < (3, 10), reason="ddtrace under Python 3.9 is deprecated") @pytest.mark.subprocess( ddtrace_run=True, env=dict( diff --git a/tests/lib_injection/conftest.py b/tests/lib_injection/conftest.py index 4a19953e736..0042f84aaf8 100644 --- a/tests/lib_injection/conftest.py +++ b/tests/lib_injection/conftest.py @@ -13,9 +13,10 @@ import pytest -from ddtrace._version import __version__ as host_ddtrace_version +from ddtrace.version import get_version +HOST_DDTRACE_VERSION = get_version() LIBS_INJECTION_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../lib-injection")) LIBS_INJECTION_SRC_DIR = os.path.join(LIBS_INJECTION_DIR, "sources") PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) @@ -100,7 +101,7 @@ def ddtrace_injection_artifact(): # 5. Write the ddtrace version file version_file_path = os.path.join(sources_dir_in_session_tmp, "version") with open(version_file_path, "w") as f: - f.write(host_ddtrace_version) + f.write(HOST_DDTRACE_VERSION) yield sources_dir_in_session_tmp diff --git a/tests/opentelemetry/test_span.py b/tests/opentelemetry/test_span.py index 3af064de795..61f9c6e0359 100644 --- a/tests/opentelemetry/test_span.py +++ b/tests/opentelemetry/test_span.py @@ -272,4 +272,3 @@ def test_otel_span_interoperability(oteltracer): otel_span_clone = Span(otel_span_og._ddspan) # Ensure all properties are consistent assert otel_span_clone.__dict__ == otel_span_og.__dict__ - assert otel_span_clone._ddspan._pprint() == otel_span_og._ddspan._pprint() diff --git a/tests/opentracer/__init__.py b/tests/opentracer/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/tests/opentracer/conftest.py b/tests/opentracer/conftest.py deleted file mode 100644 index 09a4dad886c..00000000000 --- a/tests/opentracer/conftest.py +++ /dev/null @@ -1,60 +0,0 @@ -""" -pytest local plugin used to automatically make the following fixtures -available for all tests in this directory - -https://docs.pytest.org/en/latest/writing_plugins.html#testing-plugins -""" -import pytest - -from ddtrace.opentracer import Tracer as OTTracer -from ddtrace.opentracer import set_global_tracer -from tests.utils import DummyTracer -from tests.utils import TracerSpanContainer - - -@pytest.fixture() -def ot_tracer_factory(): - """Fixture which returns an opentracer ready to use for testing.""" - - def make_ot_tracer(service_name="my_svc", config=None, scope_manager=None, context_provider=None): - config = config or {} - tracer = OTTracer(service_name=service_name, config=config, scope_manager=scope_manager) - - # similar to how we test the ddtracer, use a dummy tracer - dd_tracer = DummyTracer() - if context_provider: - dd_tracer.context_provider = context_provider - - # attach the dummy tracer to the opentracer - tracer._dd_tracer = dd_tracer - return tracer - - return make_ot_tracer - - -@pytest.fixture() -def ot_tracer(ot_tracer_factory): - """Fixture for a default opentracer.""" - return ot_tracer_factory() - - -@pytest.fixture -def test_spans(ot_tracer): - container = TracerSpanContainer(ot_tracer._dd_tracer) - yield container - container.reset() - - -@pytest.fixture() -def global_tracer(ot_tracer): - """A function similar to one OpenTracing users would write to initialize - their OpenTracing tracer. - """ - set_global_tracer(ot_tracer) - - return ot_tracer - - -@pytest.fixture() -def dd_tracer(ot_tracer): - return ot_tracer._dd_tracer diff --git a/tests/opentracer/core/__init__.py b/tests/opentracer/core/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/tests/opentracer/core/test_dd_compatibility.py b/tests/opentracer/core/test_dd_compatibility.py deleted file mode 100644 index c68b5ca6d6c..00000000000 --- a/tests/opentracer/core/test_dd_compatibility.py +++ /dev/null @@ -1,180 +0,0 @@ -import opentracing -from opentracing import Format - -import ddtrace -from ddtrace.opentracer.span_context import SpanContext - - -class TestTracerCompatibility(object): - """Ensure that our opentracer produces results in the underlying ddtracer.""" - - def test_ottracer_uses_global_ddtracer(self): - """Ensure that the opentracer will by default use the global ddtracer - as its underlying Datadog tracer. - """ - tracer = ddtrace.opentracer.Tracer() - assert tracer._dd_tracer is ddtrace.tracer - - def test_ot_dd_global_tracers(self, global_tracer): - """Ensure our test function opentracer_init() prep""" - ot_tracer = global_tracer - dd_tracer = global_tracer._dd_tracer - - # check all the global references - assert ot_tracer is opentracing.tracer - assert ot_tracer._dd_tracer is dd_tracer - assert dd_tracer is ddtrace.tracer - - def test_ot_dd_nested_trace(self, ot_tracer, dd_tracer, test_spans): - """Ensure intertwined usage of the opentracer and ddtracer.""" - - with ot_tracer.start_span("my_ot_span") as ot_span: - with dd_tracer.trace("my_dd_span") as dd_span: - pass - spans = test_spans.pop() - assert len(spans) == 2 - - # confirm the ordering - assert spans[1] is ot_span._dd_span - assert spans[0] is dd_span - - # check the parenting - assert spans[0].parent_id is None - assert spans[1].parent_id is None - - def test_dd_ot_nested_trace(self, ot_tracer, dd_tracer, test_spans): - """Ensure intertwined usage of the opentracer and ddtracer.""" - with dd_tracer.trace("my_dd_span") as dd_span: - with ot_tracer.start_span("my_ot_span") as ot_span: - pass - spans = test_spans.pop() - assert len(spans) == 2 - - # confirm the ordering - assert spans[0] is dd_span - assert spans[1] is ot_span._dd_span - - # check the parenting - assert spans[0].parent_id is None - assert spans[1].parent_id is spans[0].span_id - - def test_ot_dd_ot_dd_nested_trace(self, ot_tracer, dd_tracer, test_spans): - """Ensure intertwined usage of the opentracer and ddtracer.""" - with ot_tracer.start_active_span("ot_span") as ot_scope: - with dd_tracer.trace("dd_span") as dd_span: - with ot_tracer.start_active_span("ot_span2") as ot_scope2: - with dd_tracer.trace("dd_span2") as dd_span2: - pass - - spans = test_spans.pop() - assert len(spans) == 4 - - spans = {span.name: span for span in spans} - assert spans["ot_span"] == ot_scope.span._dd_span - assert spans["dd_span"] == dd_span - assert spans["ot_span2"] == ot_scope2.span._dd_span - assert spans["dd_span2"] == dd_span2 - - # check the parenting - assert spans["ot_span"].parent_id is None - assert spans["dd_span"].parent_id is spans["ot_span"].span_id - assert spans["ot_span2"].parent_id is spans["dd_span"].span_id - assert spans["dd_span2"].parent_id is spans["ot_span2"].span_id - - def test_ot_ot_dd_ot_dd_nested_trace_active(self, ot_tracer, dd_tracer, test_spans): - """Ensure intertwined usage of the opentracer and ddtracer.""" - with ot_tracer.start_active_span("my_ot_span") as ot_scope: - with ot_tracer.start_active_span("my_ot_span") as ot_scope2: - with dd_tracer.trace("my_dd_span") as dd_span: - with ot_tracer.start_active_span("my_ot_span") as ot_scope3: - with dd_tracer.trace("my_dd_span") as dd_span2: - pass - - spans = test_spans.pop() - assert len(spans) == 5 - - # confirm the ordering - assert spans[0] is ot_scope.span._dd_span - assert spans[1] is ot_scope2.span._dd_span - assert spans[2] is dd_span - assert spans[3] is ot_scope3.span._dd_span - assert spans[4] is dd_span2 - - # check the parenting - assert spans[0].parent_id is None - assert spans[1].parent_id == spans[0].span_id - assert spans[2].parent_id == spans[1].span_id - assert spans[3].parent_id == spans[2].span_id - assert spans[4].parent_id == spans[3].span_id - - def test_consecutive_trace(self, ot_tracer, dd_tracer, test_spans): - """Ensure consecutive usage of the opentracer and ddtracer.""" - with ot_tracer.start_active_span("my_ot_span") as ot_scope: - pass - - with dd_tracer.trace("my_dd_span") as dd_span: - pass - - with ot_tracer.start_active_span("my_ot_span") as ot_scope2: - pass - - with dd_tracer.trace("my_dd_span") as dd_span2: - pass - - spans = test_spans.pop() - assert len(spans) == 4 - - # confirm the ordering - assert spans[0] is ot_scope.span._dd_span - assert spans[1] is dd_span - assert spans[2] is ot_scope2.span._dd_span - assert spans[3] is dd_span2 - - # check the parenting - assert spans[0].parent_id is None - assert spans[1].parent_id is None - assert spans[2].parent_id is None - assert spans[3].parent_id is None - - def test_ddtrace_wrapped_fn(self, ot_tracer, dd_tracer, test_spans): - """Ensure ddtrace wrapped functions work with the opentracer""" - - @dd_tracer.wrap() - def fn(): - with ot_tracer.start_span("ot_span_inner"): - pass - - with ot_tracer.start_active_span("ot_span_outer"): - fn() - - spans = test_spans.pop() - assert len(spans) == 3 - - # confirm the ordering - assert spans[0].name == "ot_span_outer" - assert spans[1].name == "tests.opentracer.core.test_dd_compatibility.fn" - assert spans[2].name == "ot_span_inner" - - # check the parenting - assert spans[0].parent_id is None - assert spans[1].parent_id is spans[0].span_id - assert spans[2].parent_id is spans[1].span_id - - def test_distributed_trace_propagation(self, ot_tracer, dd_tracer, test_spans): - """Ensure that a propagated span context is properly activated.""" - span_ctx = SpanContext(trace_id=123, span_id=456) - carrier = {} - ot_tracer.inject(span_ctx, Format.HTTP_HEADERS, carrier) - - # extract should activate the span so that a subsequent start_span - # will inherit from the propagated span context - ot_tracer.extract(Format.HTTP_HEADERS, carrier) - - with dd_tracer.trace("test") as span: - pass - - assert span.parent_id == 456 - assert span.trace_id == 123 - - spans = test_spans.pop() - assert len(spans) == 1 diff --git a/tests/opentracer/core/test_span.py b/tests/opentracer/core/test_span.py deleted file mode 100644 index ea2fc3bbbc1..00000000000 --- a/tests/opentracer/core/test_span.py +++ /dev/null @@ -1,163 +0,0 @@ -import pytest - -from ddtrace.opentracer.span import Span -from tests.utils import DummyTracer - - -@pytest.fixture -def nop_tracer(): - from ddtrace.opentracer import Tracer - - tracer = Tracer(service_name="mysvc", config={}) - # use the same test tracer used by the primary tests - tracer._tracer = DummyTracer() - return tracer - - -@pytest.fixture -def nop_span_ctx(): - from ddtrace.constants import AUTO_KEEP - from ddtrace.opentracer.span_context import SpanContext - - return SpanContext(sampling_priority=AUTO_KEEP) - - -@pytest.fixture -def nop_span(nop_tracer, nop_span_ctx): - return Span(nop_tracer, nop_span_ctx, "my_op_name") - - -class TestSpan(object): - """Test the Datadog OpenTracing Span implementation.""" - - def test_init(self, nop_tracer, nop_span_ctx): - """Very basic test for skeleton code""" - span = Span(nop_tracer, nop_span_ctx, "my_op_name") - assert not span.finished - - def test_tags(self, nop_span): - """Set a tag and get it back.""" - r = nop_span.set_tag("test", 23) - assert nop_span._get_metric("test") == 23 - assert r is nop_span - - def test_set_baggage(self, nop_span): - """Test setting baggage.""" - r = nop_span.set_baggage_item("test", 23) - assert r is nop_span - - r = nop_span.set_baggage_item("1", 1).set_baggage_item("2", 2) - assert r is nop_span - - def test_get_baggage(self, nop_span): - """Test setting and getting baggage.""" - # test a single item - nop_span.set_baggage_item("test", 23) - assert int(nop_span.get_baggage_item("test")) == 23 - - # test multiple items - nop_span.set_baggage_item("1", "1").set_baggage_item("2", 2) - assert int(nop_span.get_baggage_item("test")) == 23 - assert nop_span.get_baggage_item("1") == "1" - assert int(nop_span.get_baggage_item("2")) == 2 - - def test_log_kv(self, nop_span): - """Ensure logging values doesn't break anything.""" - # just log a bunch of values - nop_span.log_kv({"myval": 2}) - nop_span.log_kv({"myval2": 3}) - nop_span.log_kv({"myval3": 5}) - nop_span.log_kv({"myval": 2}) - - def test_log_dd_kv(self, nop_span): - """Ensure keys that can be handled by our impl. are indeed handled.""" - import traceback - - from ddtrace.constants import ERROR_MSG - from ddtrace.constants import ERROR_STACK - from ddtrace.constants import ERROR_TYPE - - stack_trace = str(traceback.format_stack()) - nop_span.log_kv( - { - "event": "error", - "error": 3, - "message": "my error message", - "stack": stack_trace, - } - ) - - # Ensure error flag is set... - assert nop_span._dd_span.error - # ...and that error tags are set with the correct key - assert nop_span._get_tag(ERROR_STACK) == stack_trace - assert nop_span._get_tag(ERROR_MSG) == "my error message" - assert nop_span._get_metric(ERROR_TYPE) == 3 - - def test_operation_name(self, nop_span): - """Sanity check for setting the operation name.""" - # just try setting the operation name - r = nop_span.set_operation_name("new_op_name") - assert nop_span._dd_span.name == "new_op_name" - assert r is nop_span - - def test_context_manager(self, nop_span): - """Test the span context manager.""" - import time - - assert not nop_span.finished - # run the context manager but since the span has not been added - # to the span context, we will not get any traces - with nop_span: - time.sleep(0.005) - - # span should be finished when the context manager exits - assert nop_span.finished - - # there should be no traces (see above comment) - spans = nop_span.tracer._tracer.pop() - assert len(spans) == 0 - - def test_immutable_span_context(self, nop_span): - """Ensure span contexts are immutable.""" - before_ctx = nop_span._context - nop_span.set_baggage_item("key", "value") - after_ctx = nop_span._context - # should be different contexts - assert before_ctx is not after_ctx - - -class TestSpanCompatibility(object): - """Ensure our opentracer spans features correspond to datadog span features.""" - - def test_set_tag(self, nop_span): - nop_span.set_tag("test", 2) - assert nop_span._get_metric("test") == 2 - - def test_tag_resource_name(self, nop_span): - nop_span.set_tag("resource.name", "myresource") - assert nop_span._dd_span.resource == "myresource" - - def test_tag_span_type(self, nop_span): - nop_span.set_tag("span.type", "db") - assert nop_span._dd_span.span_type == "db" - - def test_tag_service_name(self, nop_span): - nop_span.set_tag("service.name", "mysvc234") - assert nop_span._dd_span.service == "mysvc234" - - def test_tag_db_statement(self, nop_span): - nop_span.set_tag("db.statement", "SELECT * FROM USERS") - assert nop_span._dd_span.resource == "SELECT * FROM USERS" - - def test_tag_peer_hostname(self, nop_span): - nop_span.set_tag("peer.hostname", "peername") - assert nop_span._dd_span.get_tag("out.host") == "peername" - - def test_tag_peer_port(self, nop_span): - nop_span.set_tag("peer.port", 55555) - assert nop_span._get_metric("network.destination.port") == 55555 - - def test_tag_sampling_priority(self, nop_span): - nop_span.set_tag("sampling.priority", "2") - assert nop_span._dd_span.context.sampling_priority == "2" diff --git a/tests/opentracer/core/test_span_context.py b/tests/opentracer/core/test_span_context.py deleted file mode 100644 index 2c7038fe327..00000000000 --- a/tests/opentracer/core/test_span_context.py +++ /dev/null @@ -1,38 +0,0 @@ -from ddtrace.opentracer.span_context import SpanContext - - -class TestSpanContext(object): - def test_init(self): - """Make sure span context creation is fine.""" - span_ctx = SpanContext() - assert span_ctx - - def test_baggage(self): - """Ensure baggage passed is the resulting baggage of the span context.""" - baggage = { - "some": "stuff", - } - - span_ctx = SpanContext(baggage=baggage) - - assert span_ctx.baggage == baggage - - def test_with_baggage_item(self): - """Should allow immutable extension of new span contexts.""" - baggage = { - "1": 1, - } - - first_ctx = SpanContext(baggage=baggage) - - second_ctx = first_ctx.with_baggage_item("2", 2) - - assert "2" not in first_ctx.baggage - assert second_ctx.baggage is not first_ctx.baggage - - def test_span_context_immutable_baggage(self): - """Ensure that two different span contexts do not share baggage.""" - ctx1 = SpanContext() - ctx1.set_baggage_item("test", 3) - ctx2 = SpanContext() - assert "test" not in ctx2._baggage diff --git a/tests/opentracer/core/test_tracer.py b/tests/opentracer/core/test_tracer.py deleted file mode 100644 index 5d9f11ab74f..00000000000 --- a/tests/opentracer/core/test_tracer.py +++ /dev/null @@ -1,585 +0,0 @@ -import time - -import mock -import opentracing -from opentracing import Format -from opentracing import InvalidCarrierException -from opentracing import UnsupportedFormatException -from opentracing import child_of -import pytest - -import ddtrace -from ddtrace.constants import AUTO_KEEP -from ddtrace.opentracer import Tracer -from ddtrace.opentracer import set_global_tracer -from ddtrace.opentracer.span_context import SpanContext -from ddtrace.propagation.http import HTTP_HEADER_TRACE_ID -from ddtrace.settings.exceptions import ConfigException - - -class TestTracerConfig(object): - def test_config(self): - """Test the configuration of the tracer""" - config = {"enabled": True} - tracer = Tracer(service_name="myservice", config=config) - - assert tracer._service_name == "myservice" - assert tracer._dd_tracer.enabled is True - - def test_no_service_name(self): - """A service_name should be generated if one is not provided.""" - tracer = Tracer() - assert tracer._service_name in {"pytest.py", "pytest", "__main__.py"} - - def test_multiple_tracer_configs(self): - """Ensure that a tracer config is a copy of the passed config.""" - config = {"enabled": True} - - tracer1 = Tracer(service_name="serv1", config=config) - assert tracer1._service_name == "serv1" - - config["enabled"] = False - tracer2 = Tracer(service_name="serv2", config=config) - - # Ensure tracer1's config was not mutated - assert tracer1._service_name == "serv1" - assert tracer2._service_name == "serv2" - - def test_invalid_config_key(self): - """A config with an invalid key should raise a ConfigException.""" - - config = {"enabeld": False} # codespell:ignore - - # No debug flag should not raise an error - tracer = Tracer(service_name="mysvc", config=config) - - # With debug flag should raise an error - config["debug"] = True - with pytest.raises(ConfigException) as ce_info: - tracer = Tracer(config=config) - assert "enabeld" in str(ce_info) # codespell:ignore - assert tracer is not None - - # Test with multiple incorrect keys - config["setttings"] = {} - with pytest.raises(ConfigException) as ce_info: - tracer = Tracer(service_name="mysvc", config=config) - assert ["enabeld", "setttings"] in str(ce_info) # codespell:ignore - assert tracer is not None - - def test_global_tags(self): - """Global tags should be passed from the opentracer to the tracer.""" - config = { - "global_tags": { - "tag1": "value1", - "tag2": 2, - }, - } - - tracer = Tracer(service_name="mysvc", config=config) - with tracer.start_span("myop") as span: - # global tags should be attached to generated all datadog spans - assert span._dd_span.get_tag("tag1") == "value1" - assert span._dd_span.get_metric("tag2") == 2 - - with tracer.start_span("myop2") as span2: - assert span2._dd_span.get_tag("tag1") == "value1" - assert span2._dd_span.get_metric("tag2") == 2 - - -class TestTracer(object): - def test_start_span(self, ot_tracer, test_spans): - """Start and finish a span.""" - with ot_tracer.start_span("myop") as span: - pass - - # span should be finished when the context manager exits - assert span.finished - - spans = test_spans.get_spans() - assert len(spans) == 1 - - def test_start_span_references(self, ot_tracer, test_spans): - """Start a span using references.""" - - with ot_tracer.start_span("one", references=[child_of()]): - pass - - spans = test_spans.pop() - assert spans[0].parent_id is None - - root = ot_tracer.start_active_span("root") - # create a child using a parent reference that is not the context parent - with ot_tracer.start_active_span("one"): - with ot_tracer.start_active_span("two", references=[child_of(root.span)]): - pass - root.close() - - spans = test_spans.pop() - assert spans[1].parent_id == spans[0].span_id - assert spans[2].parent_id == spans[0].span_id - - def test_start_span_custom_start_time(self, ot_tracer): - """Start a span with a custom start time.""" - t = 100 - with mock.patch("ddtrace._trace.span.Time.time_ns") as time: - time.return_value = 102 * 1e9 - with ot_tracer.start_span("myop", start_time=t) as span: - pass - - assert span._dd_span.start == t - assert span._dd_span.duration == 2 - - def test_start_span_with_spancontext(self, ot_tracer, test_spans): - """Start and finish a span using a span context as the child_of - reference. - """ - with ot_tracer.start_span("myop") as span: - with ot_tracer.start_span("myop", child_of=span.context) as span2: - pass - - # span should be finished when the context manager exits - assert span.finished - assert span2.finished - - spans = test_spans.pop() - assert len(spans) == 2 - - # ensure proper parenting - assert spans[1].parent_id is spans[0].span_id - - def test_start_span_with_tags(self, ot_tracer): - """Create a span with initial tags.""" - tags = {"key": "value", "key2": "value2"} - with ot_tracer.start_span("myop", tags=tags) as span: - pass - - assert span._dd_span.get_tag("key") == "value" - assert span._dd_span.get_tag("key2") == "value2" - - def test_start_span_with_resource_name_tag(self, ot_tracer): - """Create a span with the tag to set the resource name""" - tags = {"resource.name": "value", "key2": "value2"} - with ot_tracer.start_span("myop", tags=tags) as span: - pass - - # Span resource name should be set to tag value, and should not get set as - # a tag on the underlying span. - assert span._dd_span.resource == "value" - assert span._dd_span.get_tag("resource.name") is None - - # Other tags are set as normal - assert span._dd_span.get_tag("key2") == "value2" - - def test_start_active_span_multi_child(self, ot_tracer, test_spans): - """Start and finish multiple child spans. - This should ensure that child spans can be created 2 levels deep. - """ - with ot_tracer.start_active_span("myfirstop") as scope1: - time.sleep(0.009) - with ot_tracer.start_active_span("mysecondop") as scope2: - time.sleep(0.007) - with ot_tracer.start_active_span("mythirdop") as scope3: - time.sleep(0.005) - - # spans should be finished when the context manager exits - assert scope1.span.finished - assert scope2.span.finished - assert scope3.span.finished - - spans = test_spans.pop() - - # check spans are captured in the trace - assert scope1.span._dd_span is spans[0] - assert scope2.span._dd_span is spans[1] - assert scope3.span._dd_span is spans[2] - - # ensure proper parenting - assert spans[1].parent_id is spans[0].span_id - assert spans[2].parent_id is spans[1].span_id - - # sanity check a lower bound on the durations - assert spans[0].duration >= 0.009 + 0.007 + 0.005 - assert spans[1].duration >= 0.007 + 0.005 - assert spans[2].duration >= 0.005 - - def test_start_active_span_multi_child_siblings(self, ot_tracer, test_spans): - """Start and finish multiple span at the same level. - This should test to ensure a parent can have multiple child spans at the - same level. - """ - with ot_tracer.start_active_span("myfirstop") as scope1: - time.sleep(0.009) - with ot_tracer.start_active_span("mysecondop") as scope2: - time.sleep(0.007) - with ot_tracer.start_active_span("mythirdop") as scope3: - time.sleep(0.005) - - # spans should be finished when the context manager exits - assert scope1.span.finished - assert scope2.span.finished - assert scope3.span.finished - - spans = test_spans.pop() - - # check spans are captured in the trace - assert scope1.span._dd_span is spans[0] - assert scope2.span._dd_span is spans[1] - assert scope3.span._dd_span is spans[2] - - # ensure proper parenting - assert spans[1].parent_id is spans[0].span_id - assert spans[2].parent_id is spans[0].span_id - - # sanity check a lower bound on the durations - assert spans[0].duration >= 0.009 + 0.007 + 0.005 - assert spans[1].duration >= 0.007 - assert spans[2].duration >= 0.005 - - def test_start_span_manual_child_of(self, ot_tracer, test_spans): - """Start spans without using a scope manager. - Spans should be created without parents since there will be no call - for the active span. - """ - root = ot_tracer.start_span("zero") - - with ot_tracer.start_span("one", child_of=root): - with ot_tracer.start_span("two", child_of=root): - with ot_tracer.start_span("three", child_of=root): - pass - root.finish() - - spans = test_spans.pop() - - assert spans[0].parent_id is None - # ensure each child span is a child of root - assert spans[1].parent_id is root._dd_span.span_id - assert spans[2].parent_id is root._dd_span.span_id - assert spans[3].parent_id is root._dd_span.span_id - assert spans[0].trace_id == spans[1].trace_id and spans[1].trace_id == spans[2].trace_id - - def test_start_span_no_active_span(self, ot_tracer, test_spans): - """Start spans without using a scope manager. - Spans should be created without parents since there will be no call - for the active span. - """ - with ot_tracer.start_span("one", ignore_active_span=True): - with ot_tracer.start_span("two", ignore_active_span=True): - pass - with ot_tracer.start_span("three", ignore_active_span=True): - pass - - spans = test_spans.pop() - - # ensure each span does not have a parent - assert spans[0].parent_id is None - assert spans[1].parent_id is None - assert spans[2].parent_id is None - # and that each span is a new trace - assert ( - spans[0].trace_id != spans[1].trace_id - and spans[1].trace_id != spans[2].trace_id - and spans[0].trace_id != spans[2].trace_id - ) - - def test_start_active_span_child_finish_after_parent(self, ot_tracer, test_spans): - """Start a child span and finish it after its parent.""" - span1 = ot_tracer.start_active_span("one").span - span2 = ot_tracer.start_active_span("two").span - span1.finish() - time.sleep(0.005) - span2.finish() - - spans = test_spans.pop() - assert len(spans) == 2 - assert spans[0].parent_id is None - assert spans[1].parent_id is span1._dd_span.span_id - assert spans[1].duration > spans[0].duration - - def test_start_span_multi_intertwined(self, ot_tracer, test_spans): - """Start multiple spans at the top level intertwined. - Alternate calling between two traces. - """ - import threading - - # synchronize threads with a threading event object - event = threading.Event() - - def trace_one(): - _id = 11 - with ot_tracer.start_active_span(str(_id)): - _id += 1 - with ot_tracer.start_active_span(str(_id)): - _id += 1 - with ot_tracer.start_active_span(str(_id)): - pass - event.set() - - def trace_two(): - _id = 21 - event.wait() - with ot_tracer.start_active_span(str(_id)): - _id += 1 - with ot_tracer.start_active_span(str(_id)): - _id += 1 - with ot_tracer.start_active_span(str(_id)): - pass - - # the ordering should be - # t1.span1/t2.span1, t2.span2, t1.span2, t1.span3, t2.span3 - t1 = threading.Thread(target=trace_one) - t2 = threading.Thread(target=trace_two) - - t1.start() - t2.start() - # wait for threads to finish - t1.join() - t2.join() - - spans = test_spans.pop() - - # trace_one will finish before trace_two so its spans should be written - # before the spans from trace_two, let's confirm this - assert spans[0].name == "11" - assert spans[1].name == "12" - assert spans[2].name == "13" - assert spans[3].name == "21" - assert spans[4].name == "22" - assert spans[5].name == "23" - - # next let's ensure that each span has the correct parent: - # trace_one - assert spans[0].parent_id is None - assert spans[1].parent_id is spans[0].span_id - assert spans[2].parent_id is spans[1].span_id - # trace_two - assert spans[3].parent_id is None - assert spans[4].parent_id is spans[3].span_id - assert spans[5].parent_id is spans[3].span_id - - # finally we should ensure that the trace_ids are reasonable - # trace_one - assert spans[0].trace_id == spans[1].trace_id and spans[1].trace_id == spans[2].trace_id - # traces should be independent - assert spans[2].trace_id != spans[3].trace_id - # trace_two - assert spans[3].trace_id == spans[4].trace_id and spans[4].trace_id == spans[5].trace_id - - def test_start_active_span(self, ot_tracer, test_spans): - with ot_tracer.start_active_span("one") as scope: - pass - - assert scope.span._dd_span.name == "one" - assert scope.span.finished - spans = test_spans.pop() - assert spans - - def test_start_active_span_finish_on_close(self, ot_tracer, test_spans): - with ot_tracer.start_active_span("one", finish_on_close=False) as scope: - pass - - assert scope.span._dd_span.name == "one" - assert not scope.span.finished - spans = test_spans.pop() - assert not spans - scope.span.finish() - - def test_start_active_span_nested(self, ot_tracer): - """Test the active span of multiple nested calls of start_active_span.""" - with ot_tracer.start_active_span("one") as outer_scope: - assert ot_tracer.active_span == outer_scope.span - with ot_tracer.start_active_span("two") as inner_scope: - assert ot_tracer.active_span == inner_scope.span - with ot_tracer.start_active_span("three") as innest_scope: # why isn't it innest? innermost so verbose - assert ot_tracer.active_span == innest_scope.span - with ot_tracer.start_active_span("two") as inner_scope: - assert ot_tracer.active_span == inner_scope.span - assert ot_tracer.active_span == outer_scope.span - assert ot_tracer.active_span is None - - def test_start_active_span_trace(self, ot_tracer, test_spans): - """Test the active span of multiple nested calls of start_active_span.""" - with ot_tracer.start_active_span("one") as outer_scope: - outer_scope.span.set_tag("outer", 2) - with ot_tracer.start_active_span("two") as inner_scope: - inner_scope.span.set_tag("inner", 3) - with ot_tracer.start_active_span("two") as inner_scope: - inner_scope.span.set_tag("inner", 3) - with ot_tracer.start_active_span("three") as innest_scope: - innest_scope.span.set_tag("innerest", 4) - - spans = test_spans.pop() - - assert spans[0].parent_id is None - assert spans[1].parent_id is spans[0].span_id - assert spans[2].parent_id is spans[0].span_id - assert spans[3].parent_id is spans[2].span_id - - def test_interleave(self, dd_tracer, ot_tracer, test_spans): - with ot_tracer.start_active_span("ot_root_1", ignore_active_span=True): - with dd_tracer.trace("dd_child"): - with ot_tracer.start_active_span("ot_child_1"): - pass - with ot_tracer.start_active_span("ot_child_2"): - pass - - spans = test_spans.pop() - assert len(spans) == 4 - assert spans[0].name == "ot_root_1" and spans[0].parent_id is None - assert spans[1].name == "dd_child" and spans[1].parent_id == spans[0].span_id - assert spans[2].name == "ot_child_1" and spans[2].parent_id == spans[1].span_id - assert spans[3].name == "ot_child_2" and spans[3].parent_id == spans[0].span_id - - def test_active_span(self, ot_tracer, test_spans): - with ot_tracer._dd_tracer.trace("dd") as span: - assert ot_tracer.active_span is not None - assert ot_tracer.active_span._dd_span is span - - -@pytest.fixture -def nop_span_ctx(): - return SpanContext(sampling_priority=AUTO_KEEP) - - -class TestTracerSpanContextPropagation(object): - """Test the injection and extraction of a span context from a tracer.""" - - def test_invalid_format(self, ot_tracer, nop_span_ctx): - """An invalid format should raise an UnsupportedFormatException.""" - # test inject - with pytest.raises(UnsupportedFormatException): - ot_tracer.inject(nop_span_ctx, None, {}) - - # test extract - with pytest.raises(UnsupportedFormatException): - ot_tracer.extract(None, {}) - - def test_inject_invalid_carrier(self, ot_tracer, nop_span_ctx): - """Only dicts should be supported as a carrier.""" - with pytest.raises(InvalidCarrierException): - ot_tracer.inject(nop_span_ctx, Format.HTTP_HEADERS, None) - - def test_extract_invalid_carrier(self, ot_tracer): - """Only dicts should be supported as a carrier.""" - with pytest.raises(InvalidCarrierException): - ot_tracer.extract(Format.HTTP_HEADERS, None) - - def test_http_headers_base(self, ot_tracer): - """extract should undo inject for http headers.""" - - span_ctx = SpanContext(trace_id=123, span_id=456) - carrier = {} - - ot_tracer.inject(span_ctx, Format.HTTP_HEADERS, carrier) - assert len(carrier.keys()) > 0 - - ext_span_ctx = ot_tracer.extract(Format.HTTP_HEADERS, carrier) - assert ext_span_ctx._dd_context.trace_id == 123 - assert ext_span_ctx._dd_context.span_id == 456 - - def test_http_headers_baggage(self, ot_tracer): - """extract should undo inject for http headers.""" - span_ctx = SpanContext(trace_id=123, span_id=456, baggage={"test": 4, "test2": "string"}) - carrier = {} - - ot_tracer.inject(span_ctx, Format.HTTP_HEADERS, carrier) - assert len(carrier.keys()) > 0 - - ext_span_ctx = ot_tracer.extract(Format.HTTP_HEADERS, carrier) - assert ext_span_ctx._dd_context.trace_id == 123 - assert ext_span_ctx._dd_context.span_id == 456 - assert ext_span_ctx.baggage == span_ctx.baggage - - def test_empty_propagated_context(self, ot_tracer): - """An empty propagated context should not raise a - SpanContextCorruptedException when extracted. - """ - carrier = {} - ot_tracer.extract(Format.HTTP_HEADERS, carrier) - - def test_text(self, ot_tracer): - """extract should undo inject for http headers""" - span_ctx = SpanContext(trace_id=123, span_id=456, baggage={"test": 4, "test2": "string"}) - carrier = {} - - ot_tracer.inject(span_ctx, Format.TEXT_MAP, carrier) - assert len(carrier.keys()) > 0 - - ext_span_ctx = ot_tracer.extract(Format.TEXT_MAP, carrier) - assert ext_span_ctx._dd_context.trace_id == 123 - assert ext_span_ctx._dd_context.span_id == 456 - assert ext_span_ctx.baggage == span_ctx.baggage - - def test_corrupted_propagated_context(self, ot_tracer): - """Corrupted context should raise a SpanContextCorruptedException.""" - span_ctx = SpanContext(trace_id=123, span_id=456, baggage={"test": 4, "test2": "string"}) - carrier = {} - - ot_tracer.inject(span_ctx, Format.TEXT_MAP, carrier) - assert len(carrier.keys()) > 0 - - # manually alter a key in the carrier baggage - del carrier[HTTP_HEADER_TRACE_ID] - corrupted_key = HTTP_HEADER_TRACE_ID[2:] - carrier[corrupted_key] = 123 - - ot_tracer.extract(Format.TEXT_MAP, carrier) - - def test_immutable_span_context(self, ot_tracer): - """Span contexts should be immutable.""" - with ot_tracer.start_span("root") as root: - ctx_before = root.context - root.set_baggage_item("test", 2) - assert ctx_before is not root.context - with ot_tracer.start_span("child") as level1: - with ot_tracer.start_span("child") as level2: - pass - assert root.context is not level1.context - assert level2.context is not level1.context - assert level2.context is not root.context - - def test_inherited_baggage(self, ot_tracer): - """Baggage should be inherited by child spans.""" - with ot_tracer.start_active_span("root") as root: - # this should be passed down to the child - root.span.set_baggage_item("root", 1) - root.span.set_baggage_item("root2", 1) - with ot_tracer.start_active_span("child") as level1: - level1.span.set_baggage_item("level1", 1) - with ot_tracer.start_active_span("child") as level2: - level2.span.set_baggage_item("level2", 1) - # ensure immutability - assert level1.span.context is not root.span.context - assert level2.span.context is not level1.span.context - - # level1 should have inherited the baggage of root - assert level1.span.get_baggage_item("root") - assert level1.span.get_baggage_item("root2") - - # level2 should have inherited the baggage of both level1 and level2 - assert level2.span.get_baggage_item("root") - assert level2.span.get_baggage_item("root2") - assert level2.span.get_baggage_item("level1") - assert level2.span.get_baggage_item("level2") - - -class TestTracerCompatibility(object): - """Ensure that our opentracer produces results in the underlying datadog tracer.""" - - def test_required_dd_fields(self): - """Ensure required fields needed for successful tracing are possessed - by the underlying datadog tracer. - """ - # a service name is required - tracer = Tracer("service") - with tracer.start_span("my_span") as span: - assert span._dd_span.service - - -def test_set_global_tracer(): - """Sanity check for set_global_tracer""" - my_tracer = Tracer("service") - set_global_tracer(my_tracer) - - assert opentracing.tracer is my_tracer - assert ddtrace.tracer is my_tracer._dd_tracer diff --git a/tests/opentracer/core/test_utils.py b/tests/opentracer/core/test_utils.py deleted file mode 100644 index 37c9e9dd305..00000000000 --- a/tests/opentracer/core/test_utils.py +++ /dev/null @@ -1,17 +0,0 @@ -from opentracing.scope_managers import ThreadLocalScopeManager -from opentracing.scope_managers.asyncio import AsyncioScopeManager - -import ddtrace -from ddtrace.opentracer.utils import get_context_provider_for_scope_manager - - -class TestOpentracerUtils(object): - def test_get_context_provider_for_scope_manager_thread(self): - scope_manager = ThreadLocalScopeManager() - ctx_prov = get_context_provider_for_scope_manager(scope_manager) - assert isinstance(ctx_prov, ddtrace._trace.provider.DefaultContextProvider) - - def test_get_context_provider_for_asyncio_scope_manager(self): - scope_manager = AsyncioScopeManager() - ctx_prov = get_context_provider_for_scope_manager(scope_manager) - assert isinstance(ctx_prov, ddtrace._trace.provider.DefaultContextProvider) diff --git a/tests/opentracer/test_tracer_asyncio.py b/tests/opentracer/test_tracer_asyncio.py deleted file mode 100644 index 35ece48c126..00000000000 --- a/tests/opentracer/test_tracer_asyncio.py +++ /dev/null @@ -1,143 +0,0 @@ -import asyncio - -import pytest - -from ddtrace.constants import ERROR_MSG - - -@pytest.mark.asyncio -def test_trace_coroutine(test_spans): - # it should use the task context when invoked in a coroutine - with test_spans.tracer.start_span("coroutine"): - pass - - traces = test_spans.pop_traces() - - assert len(traces) == 1 - assert len(traces[0]) == 1 - assert traces[0][0].name == "coroutine" - - -@pytest.mark.asyncio -async def test_trace_multiple_coroutines(ot_tracer, test_spans): - # if multiple coroutines have nested tracing, they must belong - # to the same trace - - async def coro(): - # another traced coroutine - with ot_tracer.start_active_span("coroutine_2"): - return 42 - - with ot_tracer.start_active_span("coroutine_1"): - value = await coro() - - # the coroutine has been called correctly - assert value == 42 - # a single trace has been properly reported - traces = test_spans.pop_traces() - assert len(traces) == 1 - assert len(traces[0]) == 2 - assert traces[0][0].name == "coroutine_1" - assert traces[0][1].name == "coroutine_2" - # the parenting is correct - assert traces[0][0] == traces[0][1]._parent - assert traces[0][0].trace_id == traces[0][1].trace_id - - -@pytest.mark.asyncio -async def test_exception(ot_tracer, test_spans): - async def f1(): - with ot_tracer.start_span("f1"): - raise Exception("f1 error") - - with pytest.raises(Exception, match="f1 error"): - await f1() - - traces = test_spans.pop_traces() - assert len(traces) == 1 - spans = traces[0] - assert len(spans) == 1 - span = spans[0] - assert span.error == 1 - assert span.get_tag(ERROR_MSG) == "f1 error" - assert "Exception: f1 error" in span.get_tag("error.stack") - - -@pytest.mark.asyncio -async def test_trace_multiple_calls(ot_tracer, test_spans): - # create multiple futures so that we expect multiple - # traces instead of a single one (helper not used) - async def coro(): - # another traced coroutine - with ot_tracer.start_span("coroutine"): - await asyncio.sleep(0.01) - - futures = [asyncio.ensure_future(coro()) for x in range(10)] - for future in futures: - await future - - traces = test_spans.pop_traces() - - assert len(traces) == 10 - assert len(traces[0]) == 1 - assert traces[0][0].name == "coroutine" - - -@pytest.mark.asyncio -async def test_trace_multiple_coroutines_ot_dd(ot_tracer): - """ - Ensure we can trace from opentracer to ddtracer across asyncio - context switches. - """ - - # if multiple coroutines have nested tracing, they must belong - # to the same trace - async def coro(): - # another traced coroutine - with ot_tracer._dd_tracer.trace("coroutine_2"): - return 42 - - with ot_tracer.start_active_span("coroutine_1"): - value = await coro() - - # the coroutine has been called correctly - assert value == 42 - # a single trace has been properly reported - traces = ot_tracer._dd_tracer.pop_traces() - assert len(traces) == 1 - assert len(traces[0]) == 2 - assert traces[0][0].name == "coroutine_1" - assert traces[0][1].name == "coroutine_2" - # the parenting is correct - assert traces[0][0] == traces[0][1]._parent - assert traces[0][0].trace_id == traces[0][1].trace_id - - -@pytest.mark.asyncio -async def test_trace_multiple_coroutines_dd_ot(ot_tracer): - """ - Ensure we can trace from ddtracer to opentracer across asyncio - context switches. - """ - - # if multiple coroutines have nested tracing, they must belong - # to the same trace - async def coro(): - # another traced coroutine - with ot_tracer.start_span("coroutine_2"): - return 42 - - with ot_tracer._dd_tracer.trace("coroutine_1"): - value = await coro() - - # the coroutine has been called correctly - assert value == 42 - # a single trace has been properly reported - traces = ot_tracer._dd_tracer.pop_traces() - assert len(traces) == 1 - assert len(traces[0]) == 2 - assert traces[0][0].name == "coroutine_1" - assert traces[0][1].name == "coroutine_2" - # the parenting is correct - assert traces[0][0] == traces[0][1]._parent - assert traces[0][0].trace_id == traces[0][1].trace_id diff --git a/tests/opentracer/test_tracer_gevent.py b/tests/opentracer/test_tracer_gevent.py deleted file mode 100644 index 320b39ee997..00000000000 --- a/tests/opentracer/test_tracer_gevent.py +++ /dev/null @@ -1,193 +0,0 @@ -import gevent -from opentracing.scope_managers.gevent import GeventScopeManager -import pytest - -from ddtrace.contrib.internal.gevent.patch import patch -from ddtrace.contrib.internal.gevent.patch import unpatch - - -@pytest.fixture() -def ot_tracer(ot_tracer_factory): - """Fixture providing an opentracer configured for gevent usage.""" - # patch gevent - patch() - yield ot_tracer_factory("gevent_svc", {}, GeventScopeManager()) - # unpatch gevent - unpatch() - - -class TestTracerGevent(object): - """Converted Gevent tests for the regular tracer. - - Ensures that greenlets are properly traced when using - the opentracer. - """ - - def test_no_threading(self, ot_tracer): - with ot_tracer.start_span("span") as span: - span.set_tag("tag", "value") - - assert span.finished - - def test_greenlets(self, ot_tracer, test_spans): - def f(): - with ot_tracer.start_span("f") as span: - gevent.sleep(0.04) - span.set_tag("f", "yes") - - def g(): - with ot_tracer.start_span("g") as span: - gevent.sleep(0.03) - span.set_tag("g", "yes") - - with ot_tracer.start_active_span("root"): - gevent.joinall([gevent.spawn(f), gevent.spawn(g)]) - - traces = test_spans.pop_traces() - assert len(traces) == 1 - assert len(traces[0]) == 3 - - def test_trace_greenlet(self, ot_tracer, test_spans): - # a greenlet can be traced using the trace API - def greenlet(): - with ot_tracer.start_span("greenlet"): - pass - - gevent.spawn(greenlet).join() - traces = test_spans.pop_traces() - assert len(traces) == 1 - assert len(traces[0]) == 1 - assert traces[0][0].name == "greenlet" - - def test_trace_later_greenlet(self, ot_tracer, test_spans): - # a greenlet can be traced using the trace API - def greenlet(): - with ot_tracer.start_span("greenlet"): - pass - - gevent.spawn_later(0.01, greenlet).join() - traces = test_spans.pop_traces() - - assert len(traces) == 1 - assert len(traces[0]) == 1 - assert traces[0][0].name == "greenlet" - - def test_trace_concurrent_calls(self, ot_tracer, test_spans): - # create multiple futures so that we expect multiple - # traces instead of a single one - def greenlet(): - with ot_tracer.start_span("greenlet"): - gevent.sleep(0.01) - - jobs = [gevent.spawn(greenlet) for x in range(100)] - gevent.joinall(jobs) - - traces = test_spans.pop_traces() - - assert len(traces) == 100 - assert len(traces[0]) == 1 - assert traces[0][0].name == "greenlet" - - def test_trace_concurrent_spawn_later_calls(self, ot_tracer, test_spans): - # create multiple futures so that we expect multiple - # traces instead of a single one, even if greenlets - # are delayed - def greenlet(): - with ot_tracer.start_span("greenlet"): - gevent.sleep(0.01) - - jobs = [gevent.spawn_later(0.01, greenlet) for x in range(100)] - gevent.joinall(jobs) - - traces = test_spans.pop_traces() - assert len(traces) == 100 - assert len(traces[0]) == 1 - assert traces[0][0].name == "greenlet" - - -class TestTracerGeventCompatibility(object): - """Ensure the opentracer works in tandem with the ddtracer and gevent.""" - - def test_trace_spawn_multiple_greenlets_multiple_traces_ot_parent(self, ot_tracer, dd_tracer, test_spans): - """ - Copy of gevent test with the same name but testing with mixed usage of - the opentracer and datadog tracers. - - Uses an opentracer span as the parent span. - """ - - # multiple greenlets must be part of the same trace - def entrypoint(): - with ot_tracer.start_active_span("greenlet.main"): - jobs = [gevent.spawn(green_1), gevent.spawn(green_2)] - gevent.joinall(jobs) - - def green_1(): - with dd_tracer.trace("greenlet.worker") as span: - span.set_tag("worker_id", "1") - gevent.sleep(0.01) - - def green_2(): - with ot_tracer.start_span("greenlet.worker") as span: - span.set_tag("worker_id", "2") - gevent.sleep(0.01) - - gevent.spawn(entrypoint).join() - traces = test_spans.pop_traces() - assert len(traces) == 1 - assert len(traces[0]) == 3 - parent_span = traces[0][0] - worker_1 = traces[0][1] - worker_2 = traces[0][2] - # check spans data and hierarchy - assert parent_span.name == "greenlet.main" - assert worker_1.get_tag("worker_id") == "1" - assert worker_1.name == "greenlet.worker" - assert worker_1.resource == "greenlet.worker" - assert worker_1.parent_id == parent_span.span_id - assert worker_2.get_tag("worker_id") == "2" - assert worker_2.name == "greenlet.worker" - assert worker_2.resource == "greenlet.worker" - assert worker_2.parent_id == parent_span.span_id - - def test_trace_spawn_multiple_greenlets_multiple_traces_dd_parent(self, ot_tracer, dd_tracer, test_spans): - """ - Copy of gevent test with the same name but testing with mixed usage of - the opentracer and datadog tracers. - - Uses an opentracer span as the parent span. - """ - - # multiple greenlets must be part of the same trace - def entrypoint(): - with dd_tracer.trace("greenlet.main"): - jobs = [gevent.spawn(green_1), gevent.spawn(green_2)] - gevent.joinall(jobs) - - def green_1(): - with ot_tracer.start_span("greenlet.worker") as span: - span.set_tag("worker_id", "1") - gevent.sleep(0.01) - - def green_2(): - with dd_tracer.trace("greenlet.worker") as span: - span.set_tag("worker_id", "2") - gevent.sleep(0.01) - - gevent.spawn(entrypoint).join() - traces = test_spans.pop_traces() - assert len(traces) == 1 - assert len(traces[0]) == 3 - parent_span = traces[0][0] - worker_1 = traces[0][1] - worker_2 = traces[0][2] - # check spans data and hierarchy - assert parent_span.name == "greenlet.main" - assert worker_1.get_tag("worker_id") == "1" - assert worker_1.name == "greenlet.worker" - assert worker_1.resource == "greenlet.worker" - assert worker_1.parent_id == parent_span.span_id - assert worker_2.get_tag("worker_id") == "2" - assert worker_2.name == "greenlet.worker" - assert worker_2.resource == "greenlet.worker" - assert worker_2.parent_id == parent_span.span_id diff --git a/tests/opentracer/test_tracer_tornado.py b/tests/opentracer/test_tracer_tornado.py deleted file mode 100644 index d81541e0a52..00000000000 --- a/tests/opentracer/test_tracer_tornado.py +++ /dev/null @@ -1,30 +0,0 @@ -from opentracing.scope_managers.tornado import TornadoScopeManager -import pytest - - -@pytest.fixture() -def ot_tracer(ot_tracer_factory): - """Fixture providing an opentracer configured for tornado usage.""" - yield ot_tracer_factory("tornado_svc", {}, TornadoScopeManager()) - - -class TestTracerTornado(object): - """ - Since the ScopeManager is provided by OpenTracing we should simply test - whether it exists and works for a very simple use-case. - """ - - def test_sanity(self, ot_tracer, test_spans): - with ot_tracer.start_active_span("one"): - with ot_tracer.start_active_span("two"): - pass - - traces = test_spans.pop_traces() - assert len(traces) == 1 - assert len(traces[0]) == 2 - assert traces[0][0].name == "one" - assert traces[0][1].name == "two" - - # the parenting is correct - assert traces[0][0] == traces[0][1]._parent - assert traces[0][0].trace_id == traces[0][1].trace_id diff --git a/tests/opentracer/utils.py b/tests/opentracer/utils.py deleted file mode 100644 index 85b84865ad8..00000000000 --- a/tests/opentracer/utils.py +++ /dev/null @@ -1,11 +0,0 @@ -from ddtrace.opentracer import Tracer - - -def init_tracer(service_name, dd_tracer, scope_manager=None): - """A method that emulates what a user of OpenTracing would call to - initialize a Datadog opentracer. - - It accepts a Datadog tracer that should be the same one used for testing. - """ - ot_tracer = Tracer(service_name, scope_manager=scope_manager, _dd_tracer=dd_tracer) - return ot_tracer diff --git a/tests/profiling/suitespec.yml b/tests/profiling/suitespec.yml index 8c49696c48a..2cd2f4d051f 100644 --- a/tests/profiling/suitespec.yml +++ b/tests/profiling/suitespec.yml @@ -84,7 +84,7 @@ suites: env: DD_TRACE_AGENT_URL: '' # `riot list --hash-only profile$ | wc -1` = 19 - parallelism: 19 + parallelism: 16 paths: - '@bootstrap' - '@core' @@ -97,7 +97,7 @@ suites: env: DD_TRACE_AGENT_URL: '' # `riot list --hash-only profile-v2$ | wc -1` = 19 - parallelism: 19 + parallelism: 16 paths: - '@bootstrap' - '@core' diff --git a/tests/profiling_v2/test_profiler.py b/tests/profiling_v2/test_profiler.py index 85dd02c83c7..29743be6ef0 100644 --- a/tests/profiling_v2/test_profiler.py +++ b/tests/profiling_v2/test_profiler.py @@ -149,7 +149,7 @@ def test_profiler_serverless(monkeypatch): assert p.tags["functionname"] == "foobar" -@pytest.mark.skipif(PYTHON_VERSION_INFO < (3, 9), reason="Python 3.8 throws a deprecation warning") +@pytest.mark.skipif(PYTHON_VERSION_INFO < (3, 10), reason="ddtrace under Python 3.9 is deprecated") @pytest.mark.subprocess() def test_profiler_ddtrace_deprecation(): """ diff --git a/tests/suitespec.yml b/tests/suitespec.yml index 45ff7bfd95b..2dd30bc6740 100644 --- a/tests/suitespec.yml +++ b/tests/suitespec.yml @@ -77,6 +77,7 @@ components: - ddtrace/__init__.py - ddtrace/py.typed - ddtrace/version.py + - ddtrace/_version.py - ddtrace/settings/_config.py - src/native/* datastreams: @@ -94,8 +95,6 @@ components: opentelemetry: - ddtrace/opentelemetry/* - ddtrace/internal/opentelemetry/* - opentracer: - - ddtrace/opentracer/* profiling: - ddtrace/profiling/* - ddtrace/internal/datadog/profiling/* diff --git a/tests/telemetry/test_telemetry_metrics_e2e.py b/tests/telemetry/test_telemetry_metrics_e2e.py index 8eed0b55426..03bf27b9682 100644 --- a/tests/telemetry/test_telemetry_metrics_e2e.py +++ b/tests/telemetry/test_telemetry_metrics_e2e.py @@ -141,69 +141,3 @@ def test_span_creation_and_finished_metrics_otel(test_agent_session, ddtrace_run assert metrics_sf[0]["metric"] == "spans_finished" assert metrics_sf[0]["tags"] == ["integration_name:otel"] assert metrics_sf[0]["points"][0][1] == 9 - - -def test_span_creation_and_finished_metrics_opentracing(test_agent_session, ddtrace_run_python_code_in_subprocess): - code = """ -from ddtrace.opentracer import Tracer - -ot = Tracer() -for _ in range(2): - with ot.start_span('span'): - pass -""" - env = os.environ.copy() - env["DD_TRACE_OTEL_ENABLED"] = "true" - env["_DD_INSTRUMENTATION_TELEMETRY_TESTS_FORCE_APP_STARTED"] = "true" - _, stderr, status, _ = ddtrace_run_python_code_in_subprocess(code, env=env) - assert status == 0, stderr - - metrics_sc = test_agent_session.get_metrics("spans_created") - assert len(metrics_sc) == 1 - assert metrics_sc[0]["metric"] == "spans_created" - assert metrics_sc[0]["tags"] == ["integration_name:opentracing"] - assert metrics_sc[0]["points"][0][1] == 2 - - metrics_sf = test_agent_session.get_metrics("spans_finished") - assert len(metrics_sf) == 1 - assert metrics_sf[0]["metric"] == "spans_finished" - assert metrics_sf[0]["tags"] == ["integration_name:opentracing"] - assert metrics_sf[0]["points"][0][1] == 2 - - -def test_span_creation_no_finish(test_agent_session, ddtrace_run_python_code_in_subprocess): - code = """ -import ddtrace -import opentelemetry.trace -from ddtrace import opentracer - -ddtracer = ddtrace.tracer -otel = opentelemetry.trace.get_tracer(__name__) -ot = opentracer.Tracer() - -# we must finish at least one span to enable sending telemetry to the agent -ddtracer.trace("first_span").finish() - -for _ in range(4): - ot.start_span('ot_span') - otel.start_span('otel_span') - ddtracer.trace("ddspan") -""" - env = os.environ.copy() - env["DD_TRACE_OTEL_ENABLED"] = "true" - env["_DD_INSTRUMENTATION_TELEMETRY_TESTS_FORCE_APP_STARTED"] = "true" - _, stderr, status, _ = ddtrace_run_python_code_in_subprocess(code, env=env) - assert status == 0, stderr - - metrics = test_agent_session.get_metrics("spans_created") - assert len(metrics) == 3 - - assert metrics[0]["metric"] == "spans_created" - assert metrics[0]["tags"] == ["integration_name:datadog"] - assert metrics[0]["points"][0][1] == 5 - assert metrics[1]["metric"] == "spans_created" - assert metrics[1]["tags"] == ["integration_name:opentracing"] - assert metrics[1]["points"][0][1] == 4 - assert metrics[2]["metric"] == "spans_created" - assert metrics[2]["tags"] == ["integration_name:otel"] - assert metrics[2]["points"][0][1] == 4 diff --git a/tests/tracer/runtime/test_runtime_metrics.py b/tests/tracer/runtime/test_runtime_metrics.py index 984142380e1..118e85df126 100644 --- a/tests/tracer/runtime/test_runtime_metrics.py +++ b/tests/tracer/runtime/test_runtime_metrics.py @@ -20,8 +20,8 @@ @contextlib.contextmanager -def runtime_metrics_service(tracer=None, flush_interval=None): - RuntimeWorker.enable(tracer=tracer, flush_interval=flush_interval) +def runtime_metrics_service(tracer=None): + RuntimeWorker.enable(tracer=tracer) assert RuntimeWorker._instance is not None assert RuntimeWorker._instance.status == ServiceStatus.RUNNING @@ -151,9 +151,7 @@ def test_tracer_metrics(self): # Mock socket.socket to hijack the dogstatsd socket with mock.patch("socket.socket") as sock: sock.return_value.getsockopt.return_value = 0 - # configure tracer for runtime metrics - interval = 1.0 / 4 - with runtime_metrics_service(tracer=self.tracer, flush_interval=interval): + with runtime_metrics_service(tracer=self.tracer): self.tracer.set_tags({"env": "tests.dog"}) with self.override_global_tracer(self.tracer): @@ -167,7 +165,7 @@ def test_tracer_metrics(self): with self.start_span( "query", service="db", span_type=SpanTypes.SQL, child_of=child.context ): - time.sleep(interval * 4) + time.sleep(4) # Get the mocked socket for inspection later statsd_socket = RuntimeWorker._instance._dogstatsd_client.socket received = [s.args[0].decode("utf-8") for s in statsd_socket.send.mock_calls] diff --git a/tests/tracer/test_correlation_log_context.py b/tests/tracer/test_correlation_log_context.py index abd82ad91a7..fa5f8b045f6 100644 --- a/tests/tracer/test_correlation_log_context.py +++ b/tests/tracer/test_correlation_log_context.py @@ -58,27 +58,6 @@ def test_get_log_correlation_trace_context(): }, dd_log_record -@pytest.mark.subprocess( - ddtrace_run=True, env={"DD_VERSION": "test-version", "DD_ENV": "test-env", "DD_SERVICE": "test-service"} -) -def test_get_log_correlation_context_opentracer(): - """Ensure expected DDLogRecord generated via get_correlation_log_record with an opentracing Tracer.""" - from ddtrace.internal.utils.formats import format_trace_id - from ddtrace.opentracer.tracer import Tracer as OT_Tracer - - ot_tracer = OT_Tracer(service_name="test-service") - with ot_tracer.start_active_span("operation") as scope: - dd_span = scope._span._dd_span - dd_log_record = ot_tracer.get_log_correlation_context() - assert dd_log_record == { - "dd.span_id": str(dd_span.span_id), - "dd.trace_id": format_trace_id(dd_span.trace_id), - "dd.service": "test-service", - "dd.env": "test-env", - "dd.version": "test-version", - }, dd_log_record - - @pytest.mark.subprocess() def test_get_log_correlation_context_no_active_span(): """Ensure empty DDLogRecord generated if no active span.""" diff --git a/tests/tracer/test_propagation.py b/tests/tracer/test_propagation.py index 9232d4c2f20..eee54604355 100644 --- a/tests/tracer/test_propagation.py +++ b/tests/tracer/test_propagation.py @@ -3515,22 +3515,6 @@ def test_http_propagator_baggage_extract(headers): assert context._baggage == {"key1": "val1", "key2": "val2", "foo": "bar", "x": "y"} -@pytest.mark.subprocess( - env=dict(DD_TRACE_PROPAGATION_HTTP_BAGGAGE_ENABLED="True"), - parametrize=dict(DD_TRACE_PROPAGATION_EXTRACT_FIRST=["True", "False"]), -) -def test_opentracer_propagator_baggage_extract(): - from ddtrace.propagation.http import HTTPPropagator - - headers = { - "x-datadog-trace-id": "1234", - "x-datadog-parent-id": "5678", - "http_ot_baggage_key1": "value1", - } - context = HTTPPropagator.extract(headers) - assert context._baggage == {"key1": "value1"} - - def test_baggage_span_tags_default(): headers = {"baggage": "user.id=123,correlation_id=abc,region=us-east"} context = HTTPPropagator.extract(headers) diff --git a/tests/tracer/test_settings.py b/tests/tracer/test_settings.py index 1a241f46fd7..4bf8167764a 100644 --- a/tests/tracer/test_settings.py +++ b/tests/tracer/test_settings.py @@ -1,5 +1,3 @@ -import warnings - import pytest from ddtrace.internal.compat import PYTHON_VERSION_INFO @@ -178,47 +176,6 @@ def test_app_analytics_property(self): assert self.integration_config.get_analytics_sample_rate() == 1 - def test_app_analytics_deprecation(self): - warnings.simplefilter("always") - with warnings.catch_warnings(record=True) as warns: - IntegrationConfig(self.config, "test") - assert len(warns) == 0 - - with warnings.catch_warnings(record=True) as warns: - self.integration_config.analytics_enabled - assert ( - "analytics_enabled is deprecated and will be removed in version '4.0.0': Controlling ingestion via analytics is no longer supported. See https://docs.datadoghq.com/tracing/legacy_app_analytics/?code-lang=python#migrate-to-the-new-configuration-options" # noqa:E501 - in str(warns[0].message) - ) - - with warnings.catch_warnings(record=True) as warns: - self.integration_config.analytics_enabled = True - assert ( - "analytics_enabled is deprecated and will be removed in version '4.0.0': Controlling ingestion via analytics is no longer supported. See https://docs.datadoghq.com/tracing/legacy_app_analytics/?code-lang=python#migrate-to-the-new-configuration-options" # noqa:E501 - in str(warns[0].message) - ) - - with warnings.catch_warnings(record=True) as warns: - self.integration_config.analytics_sample_rate - assert ( - "analytics_sample_rate is deprecated and will be removed in version '4.0.0': Controlling ingestion via analytics is no longer supported. See https://docs.datadoghq.com/tracing/legacy_app_analytics/?code-lang=python#migrate-to-the-new-configuration-options" # noqa:E501 - in str(warns[0].message) - ) - - with warnings.catch_warnings(record=True) as warns: - self.integration_config.analytics_sample_rate = 0.5 - assert ( - "analytics_sample_rate is deprecated and will be removed in version '4.0.0': Controlling ingestion via analytics is no longer supported. See https://docs.datadoghq.com/tracing/legacy_app_analytics/?code-lang=python#migrate-to-the-new-configuration-options" # noqa:E501 - in str(warns[0].message) - ) - - with warnings.catch_warnings(record=True) as warns: - self.integration_config.get_analytics_sample_rate() - assert ( - "get_analytics_sample_rate is deprecated and will be removed in version '4.0.0': Controlling ingestion via analytics is no longer supported. See https://docs.datadoghq.com/tracing/legacy_app_analytics/?code-lang=python#migrate-to-the-new-configuration-options" # noqa:E501 - in str(warns[0].message) - ) - def test_environment_header_tags(): with override_env(dict(DD_TRACE_HEADER_TAGS="Host:http.host,User-agent:http.user_agent")): @@ -246,7 +203,7 @@ def test_x_datadog_tags(env, expected): assert expected == (_._x_datadog_tags_max_length, _._x_datadog_tags_enabled) -@pytest.mark.skipif(PYTHON_VERSION_INFO < (3, 9), reason="Additional deprecation warning under Python 3.8") +@pytest.mark.skipif(PYTHON_VERSION_INFO < (3, 10), reason="ddtrace under Python 3.9 is deprecated") @pytest.mark.subprocess() def test_config_exception_deprecation(): import warnings @@ -264,7 +221,7 @@ def test_config_exception_deprecation(): assert "4.0.0" in str(warn.message) # TODO: update the version -@pytest.mark.skipif(PYTHON_VERSION_INFO < (3, 9), reason="Additional deprecation warning under Python 3.8") +@pytest.mark.skipif(PYTHON_VERSION_INFO < (3, 10), reason="ddtrace under Python 3.9 is deprecated") @pytest.mark.subprocess() def test_http_config_deprecation(): import warnings @@ -281,7 +238,7 @@ def test_http_config_deprecation(): assert "4.0.0" in str(warn.message) # TODO: update the version -@pytest.mark.skipif(PYTHON_VERSION_INFO < (3, 9), reason="Additional deprecation warning under Python 3.8") +@pytest.mark.skipif(PYTHON_VERSION_INFO < (3, 10), reason="ddtrace under Python 3.9 is deprecated") @pytest.mark.subprocess() def test_hooks_deprecation(): import warnings @@ -298,7 +255,7 @@ def test_hooks_deprecation(): assert "4.0.0" in str(warn.message) # TODO: update the version -@pytest.mark.skipif(PYTHON_VERSION_INFO < (3, 9), reason="Additional deprecation warning under Python 3.8") +@pytest.mark.skipif(PYTHON_VERSION_INFO < (3, 10), reason="ddtrace under Python 3.9 is deprecated") @pytest.mark.subprocess() def test_integration_config_deprecation(): import warnings diff --git a/tests/tracer/test_span.py b/tests/tracer/test_span.py index a47391ef3da..fcfd753255f 100644 --- a/tests/tracer/test_span.py +++ b/tests/tracer/test_span.py @@ -10,7 +10,6 @@ from ddtrace._trace._span_link import SpanLink from ddtrace._trace._span_pointer import _SpanPointerDirection -from ddtrace._trace.context import Context from ddtrace.constants import _SPAN_MEASURED_KEY from ddtrace.constants import ENV_KEY from ddtrace.constants import ERROR_MSG @@ -866,52 +865,6 @@ def test_span_preconditions(arg): Span("test", **{arg: "foo"}) -def test_span_pprint(): - root = Span("test.span", service="s", resource="r", span_type=SpanTypes.WEB, context=Context(trace_id=1, span_id=2)) - root.set_tag("t", "v") - root.set_metric("m", 1.0) - root._add_event("message", {"importance": 10}, 16789898242) - root.set_link(trace_id=99, span_id=10, attributes={"link.name": "s1_to_s2", "link.kind": "scheduled_by"}) - root._add_span_pointer("test_kind", _SpanPointerDirection.DOWNSTREAM, "test_hash_123", {"extra": "attr"}) - - root.finish() - actual = root._pprint() - assert "name='test.span'" in actual - assert "service='s'" in actual - assert "resource='r'" in actual - assert "type='web'" in actual - assert "error=0" in actual - assert "tags={'t': 'v'}" in actual - assert "metrics={'m': 1.0}" in actual - assert "events=[SpanEvent(name='message', time=16789898242, attributes={'importance': 10})]" in actual - assert ( - "SpanLink(trace_id=99, span_id=10, attributes={'link.name': 's1_to_s2', 'link.kind': 'scheduled_by'}, " - "tracestate=None, flags=None, dropped_attributes=0)" - ) in actual - assert "SpanPointer(trace_id=0, span_id=0, kind=span-pointer" in actual - assert "direction=d, hash=test_hash_123" in actual - assert ( - f"context=Context(trace_id={root.trace_id}, span_id={root.span_id}, _meta={{}}, " - "_metrics={}, _span_links=[], _baggage={}, _is_remote=False)" - ) in actual - assert f"span_id={root.span_id}" in actual - assert f"trace_id={root.trace_id}" in actual - assert f"parent_id={root.parent_id}" in actual - assert f"start={root.start_ns}" in actual - assert f"duration={root.duration_ns}" in actual - assert f"end={root.start_ns + root.duration_ns}" in actual - - root = Span("test.span", service="s", resource="r", span_type=SpanTypes.WEB) - root.error = 1 - kv = {f"😌{i}": "😌" for i in range(100)} - root.set_tags(kv) - actual = root._pprint() - assert "duration=None" in actual - assert "end=None" in actual - assert "error=1" in actual - assert f"tags={kv}" in actual - - def test_manual_context_usage(): span1 = Span("span1") span2 = Span("span2", context=span1.context)