diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 84e6c873642..b1162da2348 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -166,12 +166,14 @@ ddtrace/internal/remoteconfig @DataDog/remote-config @DataDog/apm-core-pyt tests/internal/remoteconfig @DataDog/remote-config @DataDog/apm-core-python # API SDK +ddtrace/trace/ @DataDog/apm-sdk-api-python ddtrace/_trace/ @DataDog/apm-sdk-api-python ddtrace/opentelemetry/ @DataDog/apm-sdk-api-python ddtrace/internal/opentelemetry @DataDog/apm-sdk-api-python ddtrace/opentracer/ @DataDog/apm-sdk-api-python ddtrace/propagation/ @DataDog/apm-sdk-api-python ddtrace/filters.py @DataDog/apm-sdk-api-python +ddtrace/provider.py @DataDog/apm-sdk-api-python ddtrace/pin.py @DataDog/apm-sdk-api-python ddtrace/sampler.py @DataDog/apm-sdk-api-python ddtrace/sampling_rule.py @DataDog/apm-sdk-api-python diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000000..c272b36b581 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,15 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "monthly" + groups: + gh-actions-packages: + patterns: + - "*" diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml index 3dc596bb2f9..ac3fc0c8702 100644 --- a/.github/workflows/backport.yml +++ b/.github/workflows/backport.yml @@ -24,7 +24,7 @@ jobs: ) ) steps: - - uses: tibdex/backport@v2 + - uses: tibdex/backport@9565281eda0731b1d20c4025c43339fb0a23812e # v2.0.4 with: github_token: ${{ secrets.GITHUB_TOKEN }} body_template: "Backport <%= mergeCommitSha %> from #<%= number %> to <%= base %>.\n\n<%= body %>" diff --git a/.github/workflows/build-and-publish-image.yml b/.github/workflows/build-and-publish-image.yml index 55647245109..da0bd86f550 100644 --- a/.github/workflows/build-and-publish-image.yml +++ b/.github/workflows/build-and-publish-image.yml @@ -30,21 +30,21 @@ jobs: contents: read packages: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # v2.2.0 - name: Set up Docker Buildx id: buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@885d1462b80bc1c1c7f0b00334ad271f09369c55 # v2.10.0 with: # Images after this version (>=v0.10) are incompatible with gcr and aws. version: v0.9.1 # https://github.com/docker/buildx/issues/1533 - name: Login to Docker run: docker login -u publisher -p ${{ secrets.token }} ghcr.io - name: Docker Build - uses: docker/build-push-action@v4 + uses: docker/build-push-action@0a97817b6ade9f46837855d676c4cca3a2471fc9 # v4.2.1 with: push: true tags: ${{ inputs.tags }} diff --git a/.github/workflows/build_deploy.yml b/.github/workflows/build_deploy.yml index bc6a8b0b3d2..179ed367141 100644 --- a/.github/workflows/build_deploy.yml +++ b/.github/workflows/build_deploy.yml @@ -11,6 +11,8 @@ on: - build_deploy* - 'upgrade-latest-*' - 'mq-working-branch**' + # TODO: Remove this after 3.x work is done + - 3.x-staging pull_request: release: types: @@ -31,13 +33,13 @@ jobs: name: Build source distribution runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # Include all history and tags with: persist-credentials: false fetch-depth: 0 - - uses: actions-rust-lang/setup-rust-toolchain@v1 - - uses: actions/setup-python@v5 + - uses: actions-rust-lang/setup-rust-toolchain@11df97af8e8102fd60b60a77dfbf58d40cd843b8 # v1.10.1 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 name: Install Python with: python-version: '3.12' @@ -45,7 +47,7 @@ jobs: run: | pip install "setuptools_scm[toml]>=4" "cython" "cmake>=3.24.2,<3.28" "setuptools-rust" python setup.py sdist - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: source-dist path: dist/*.tar.gz @@ -58,10 +60,10 @@ jobs: container: image: python:3.9-alpine steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: source-dist path: dist diff --git a/.github/workflows/build_python_3.yml b/.github/workflows/build_python_3.yml index a3d6066dc0c..663eb8b5077 100644 --- a/.github/workflows/build_python_3.yml +++ b/.github/workflows/build_python_3.yml @@ -19,10 +19,10 @@ jobs: outputs: include: ${{steps.set-matrix.outputs.include}} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: '3.8' - run: pip install cibuildwheel==2.22.0 @@ -35,7 +35,8 @@ jobs: cibuildwheel --print-build-identifiers --platform linux --arch x86_64,i686 | jq -cR '{only: ., os: "ubuntu-latest"}' \ && cibuildwheel --print-build-identifiers --platform linux --arch aarch64 | jq -cR '{only: ., os: "arm-4core-linux"}' \ && cibuildwheel --print-build-identifiers --platform windows --arch AMD64,x86 | grep -v 313 | jq -cR '{only: ., os: "windows-latest"}' \ - && cibuildwheel --print-build-identifiers --platform macos --arch x86_64,universal2 | jq -cR '{only: ., os: "macos-13"}' + && cibuildwheel --print-build-identifiers --platform macos --arch x86_64 | jq -cR '{only: ., os: "macos-13"}' \ + && cibuildwheel --print-build-identifiers --platform macos --arch arm64 | jq -cR '{only: ., os: "macos-latest"}' } | jq -sc ) echo $MATRIX_INCLUDE @@ -46,17 +47,18 @@ jobs: runs-on: ${{ matrix.os }} name: Build ${{ matrix.only }} strategy: + fail-fast: false matrix: include: ${{ fromJson(needs.build-wheels-matrix.outputs.include) }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # Include all history and tags with: persist-credentials: false fetch-depth: 0 - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 if: matrix.os != 'arm-4core-linux' name: Install Python with: @@ -77,7 +79,7 @@ jobs: - name: Set up QEMU if: runner.os == 'Linux' && matrix.os != 'arm-4core-linux' - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # v2.2.0 with: platforms: all @@ -112,12 +114,13 @@ jobs: choco install -y 7zip && 7z d -r "{wheel}" *.c *.cpp *.cc *.h *.hpp *.pyx && move "{wheel}" "{dest_dir}" + CIBW_TEST_COMMAND: "python {project}/tests/smoke_test.py" # DEV: Uncomment to debug MacOS # CIBW_BUILD_VERBOSITY_MACOS: 3 - name: Build wheels if: always() && matrix.os != 'arm-4core-linux' - uses: pypa/cibuildwheel@v2.22.0 + uses: pypa/cibuildwheel@ee63bf16da6cddfb925f542f2c7b59ad50e93969 # v2.22.0 with: only: ${{ matrix.only }} env: @@ -152,6 +155,7 @@ jobs: choco install -y 7zip && 7z d -r "{wheel}" *.c *.cpp *.cc *.h *.hpp *.pyx && move "{wheel}" "{dest_dir}" + CIBW_TEST_COMMAND: "python {project}/tests/smoke_test.py" # DEV: Uncomment to debug MacOS # CIBW_BUILD_VERBOSITY_MACOS: 3 @@ -162,7 +166,7 @@ jobs: run: | chcp 65001 #set code page to utf-8 echo "ARTIFACT_NAME=${{ matrix.only }}" >> $env:GITHUB_ENV - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: wheels-${{ env.ARTIFACT_NAME }} path: ./wheelhouse/*.whl diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml index aa705d8a02f..b3a4e8107a3 100644 --- a/.github/workflows/changelog.yml +++ b/.github/workflows/changelog.yml @@ -12,7 +12,7 @@ jobs: name: Validate changelog runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # Include all history and tags with: persist-credentials: false @@ -26,7 +26,7 @@ jobs: if: github.event_name == 'pull_request' run: scripts/check-releasenotes - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 name: Install Python with: python-version: '3.8' @@ -43,7 +43,7 @@ jobs: rst2html.py CHANGELOG.rst CHANGELOG.html - name: Upload CHANGELOG.rst - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: changelog path: | diff --git a/.github/workflows/check_old_target_branch.yml b/.github/workflows/check_old_target_branch.yml index 73925f75290..a2308ae9e89 100644 --- a/.github/workflows/check_old_target_branch.yml +++ b/.github/workflows/check_old_target_branch.yml @@ -26,7 +26,7 @@ jobs: - name: Old branch warning on PR if: env.old_branch == 'true' - uses: thollander/actions-comment-pull-request@v2 + uses: thollander/actions-comment-pull-request@fabd468d3a1a0b97feee5f6b9e499eab0dd903f6 # v2.5.0 with: message: | 🚫 **This target branch is too old or unsupported. Please update the target branch to continue.** diff --git a/.github/workflows/codeowners.yml b/.github/workflows/codeowners.yml index 3a0b5993058..03335a44eea 100644 --- a/.github/workflows/codeowners.yml +++ b/.github/workflows/codeowners.yml @@ -10,15 +10,15 @@ jobs: permissions: pull-requests: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false fetch-depth: 0 - name: Get changed files id: changed-files - uses: tj-actions/changed-files@v44 + uses: tj-actions/changed-files@c65cd883420fd2eb864698a825fc4162dd94482c # v44.5.7 - name: Setup go - uses: actions/setup-go@v5 + uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 - name: Install codeowners run: go install github.com/hmarr/codeowners/cmd/codeowners@latest - name: List owners of all changed files @@ -29,7 +29,7 @@ jobs: echo "$(codeowners ${{ steps.changed-files.outputs.all_changed_files }})" >> "$GITHUB_OUTPUT" echo "EOF" >> "$GITHUB_OUTPUT" - name: Comment PR - uses: thollander/actions-comment-pull-request@v2 + uses: thollander/actions-comment-pull-request@fabd468d3a1a0b97feee5f6b9e499eab0dd903f6 # v2.5.0 with: filePath: resolved.txt comment_tag: codeowners_resolved diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 5af69a81073..07db9ebcf6d 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -26,13 +26,13 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@b8d3b6e8af63cde30bdc382c0bc28114f4346c88 # v2.28.1 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -42,7 +42,7 @@ jobs: config-file: .github/codeql-config.yml - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@b8d3b6e8af63cde30bdc382c0bc28114f4346c88 # v2.28.1 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@b8d3b6e8af63cde30bdc382c0bc28114f4346c88 # v2.28.1 diff --git a/.github/workflows/django-overhead-profile.yml b/.github/workflows/django-overhead-profile.yml index 8fb697daa14..bb0933c237b 100644 --- a/.github/workflows/django-overhead-profile.yml +++ b/.github/workflows/django-overhead-profile.yml @@ -31,12 +31,12 @@ jobs: run: working-directory: ddtrace steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false path: ddtrace - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.10" @@ -48,7 +48,7 @@ jobs: run: | bash scripts/profiles/django-simple/run.sh ${PREFIX} - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: django-overhead-profile${{ matrix.suffix }} path: ${{ github.workspace }}/prefix/artifacts diff --git a/.github/workflows/encoders-profile.yml b/.github/workflows/encoders-profile.yml index ed77daa6d5a..9c0cb8f7321 100644 --- a/.github/workflows/encoders-profile.yml +++ b/.github/workflows/encoders-profile.yml @@ -19,12 +19,12 @@ jobs: run: working-directory: ddtrace steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false path: ddtrace - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.10" @@ -40,7 +40,7 @@ jobs: sed -i 's|${{ github.workspace }}/ddtrace/||g' ${PREFIX}/artifacts/$a done - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: encoders-profile path: ${{ github.workspace }}/prefix/artifacts diff --git a/.github/workflows/flask-overhead-profile.yml b/.github/workflows/flask-overhead-profile.yml index 8f4dce9e5c7..43ae7a24262 100644 --- a/.github/workflows/flask-overhead-profile.yml +++ b/.github/workflows/flask-overhead-profile.yml @@ -19,12 +19,12 @@ jobs: run: working-directory: ddtrace steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false path: ddtrace - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.10" @@ -36,7 +36,7 @@ jobs: run: | bash scripts/profiles/flask-simple/run.sh ${PREFIX} - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: flask-overhead-profile path: ${{ github.workspace }}/prefix/artifacts diff --git a/.github/workflows/generate-package-versions.yml b/.github/workflows/generate-package-versions.yml index b8729e882c9..1a32c072352 100644 --- a/.github/workflows/generate-package-versions.yml +++ b/.github/workflows/generate-package-versions.yml @@ -15,50 +15,45 @@ jobs: pull-requests: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - - name: Setup Python 3.7 - uses: actions/setup-python@v5 - with: - python-version: "3.7" - - name: Setup Python 3.8 - uses: actions/setup-python@v5 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.8" - name: Setup Python 3.9 - uses: actions/setup-python@v5 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.9" - name: Setup Python 3.10 - uses: actions/setup-python@v5 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.10" - name: Setup Python 3.11 - uses: actions/setup-python@v5 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.11" - name: Setup Python 3.12 - uses: actions/setup-python@v5 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.12" - name: Setup Python 3.13 - uses: actions/setup-python@v5 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.13" - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # v2.2.0 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0 - name: Install Docker Compose run: | @@ -75,7 +70,7 @@ jobs: sudo apt-get install -y libmariadb-dev - name: Install hatch - uses: pypa/hatch@install + uses: pypa/hatch@257e27e51a6a5616ed08a39a408a21c35c9931bc # install with: version: "1.12.0" @@ -97,7 +92,7 @@ jobs: - name: Create Pull Request id: pr - uses: peter-evans/create-pull-request@v6 + uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0 with: token: ${{ secrets.GITHUB_TOKEN }} branch: "upgrade-latest-${{ env.VENV_NAME }}-version" diff --git a/.github/workflows/generate-supported-versions.yml b/.github/workflows/generate-supported-versions.yml index c802e91bcf3..f2f54348516 100644 --- a/.github/workflows/generate-supported-versions.yml +++ b/.github/workflows/generate-supported-versions.yml @@ -13,50 +13,45 @@ jobs: pull-requests: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - - name: Setup Python 3.7 - uses: actions/setup-python@v5 - with: - python-version: "3.7" - - name: Setup Python 3.8 - uses: actions/setup-python@v5 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.8" - name: Setup Python 3.9 - uses: actions/setup-python@v5 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.9" - name: Setup Python 3.10 - uses: actions/setup-python@v5 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.10" - name: Setup Python 3.11 - uses: actions/setup-python@v5 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.11" - name: Setup Python 3.12 - uses: actions/setup-python@v5 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.12" - + - name: Setup Python 3.13 - uses: actions/setup-python@v5 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.13" - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # v2.2.0 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0 - name: Install system dependencies run: | @@ -70,21 +65,21 @@ jobs: pip install requests pip install riot==0.20.1 pip install wrapt==1.16.0 - + - name: Install ddtrace run: | pip install -e . - run: python scripts/freshvenvs.py generate - + - name: Generate table run: python scripts/generate_table.py - run: git diff - + - name: Create Pull Request id: pr - uses: peter-evans/create-pull-request@v6 + uses: peter-evans/create-pull-request@c5a7806660adbe173f04e3e038b0ccdcd758773c # v6.1.0 with: token: ${{ secrets.GITHUB_TOKEN }} branch: "update-supported-versions" @@ -96,7 +91,7 @@ jobs: body: | Generates / updates the supported versions table for integrations. This should be tied to releases, or triggered manually. - Workflow runs: [Generate Supported Integration Versions](https://github.com/DataDog/dd-trace-py/actions/workflows/generate-supported-versions.yml) + Workflow runs: [Generate Supported Integration Versions](https://github.com/DataDog/dd-trace-py/actions/workflows/generate-supported-versions.yml) ## Checklist - [x] PR author has checked that all the criteria below are met diff --git a/.github/workflows/pr-name.yml b/.github/workflows/pr-name.yml index a66c9f506e8..bbeb199f615 100644 --- a/.github/workflows/pr-name.yml +++ b/.github/workflows/pr-name.yml @@ -9,11 +9,11 @@ jobs: pr_name_lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false fetch-depth: 0 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0 name: Install Node.js with: node-version: 16 @@ -21,7 +21,7 @@ jobs: run: | npm install @commitlint/lint@18.6.1 @commitlint/load@18.6.1 @commitlint/config-conventional@18.6.2 @actions/core - name: Lint PR name - uses: actions/github-script@v6.4.1 + uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 with: script: | const load = require('@commitlint/load').default; diff --git a/.github/workflows/profiling-native.yml b/.github/workflows/profiling-native.yml index 280d586d36e..668e8070e41 100644 --- a/.github/workflows/profiling-native.yml +++ b/.github/workflows/profiling-native.yml @@ -14,7 +14,7 @@ on: jobs: test: runs-on: ${{ matrix.os }} - timeout-minutes: 5 + timeout-minutes: 7 strategy: fail-fast: false matrix: @@ -23,12 +23,12 @@ jobs: sanitizer: ["safety", "thread", "valgrind"] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false fetch-depth: 1 - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: ${{ matrix.python-version }} diff --git a/.github/workflows/prune_workflow.yml b/.github/workflows/prune_workflow.yml index 1c8a8479a8c..0f1ae92098d 100644 --- a/.github/workflows/prune_workflow.yml +++ b/.github/workflows/prune_workflow.yml @@ -50,7 +50,7 @@ jobs: actions: write steps: - name: Delete workflow runs - uses: Mattraks/delete-workflow-runs@v2 + uses: Mattraks/delete-workflow-runs@4c9f24749b7996562658e3d6e10662489e22caca # v2.0.0 with: token: ${{ github.token }} repository: ${{ github.repository }} diff --git a/.github/workflows/pytorch_gpu_tests.yml b/.github/workflows/pytorch_gpu_tests.yml index 1db504ae61d..0f522819ff1 100644 --- a/.github/workflows/pytorch_gpu_tests.yml +++ b/.github/workflows/pytorch_gpu_tests.yml @@ -16,23 +16,23 @@ jobs: unit-tests: runs-on: APM-4-CORE-GPU-LINUX steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # Include all history and tags with: persist-credentials: false fetch-depth: 0 - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 name: Install Python with: python-version: '3.12' - - uses: actions-rust-lang/setup-rust-toolchain@v1 + - uses: actions-rust-lang/setup-rust-toolchain@11df97af8e8102fd60b60a77dfbf58d40cd843b8 # v1.10.1 - name: Install latest stable toolchain and rustfmt run: rustup update stable && rustup default stable && rustup component add rustfmt clippy - name: Install hatch - uses: pypa/hatch@install + uses: pypa/hatch@257e27e51a6a5616ed08a39a408a21c35c9931bc # install with: version: "1.12.0" diff --git a/.github/workflows/require-checklist.yaml b/.github/workflows/require-checklist.yaml index 521e28573bb..8d30dfa53f8 100644 --- a/.github/workflows/require-checklist.yaml +++ b/.github/workflows/require-checklist.yaml @@ -6,7 +6,7 @@ jobs: require-checklist: runs-on: ubuntu-latest steps: - - uses: mheap/require-checklist-action@v2 + - uses: mheap/require-checklist-action@efef3b1b39d03d12be5ce427c15064f287ba5843 # v2.4.0 with: # require a checklist to be present in the PR description requireChecklist: true diff --git a/.github/workflows/requirements-locks.yml b/.github/workflows/requirements-locks.yml index 23a1c05a517..bde6467f926 100644 --- a/.github/workflows/requirements-locks.yml +++ b/.github/workflows/requirements-locks.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest container: ghcr.io/datadog/dd-trace-py/testrunner:0a50e839f4b1600f02157518b8d016451b346578@sha256:5dae9bc7872f69b31b612690f0748c7ad71ab90ef28a754b2ae93d0ba505837b steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false fetch-depth: 0 @@ -23,7 +23,7 @@ jobs: run: git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: Set python interpreters - run: pyenv global 3.10 3.7 3.8 3.9 3.11 3.12 3.13 + run: pyenv global 3.10 3.8 3.9 3.11 3.12 3.13 - name: Install Dependencies run: pip install --upgrade pip && pip install riot==0.20.1 diff --git a/.github/workflows/rust-ci.yml b/.github/workflows/rust-ci.yml index 3241a0b763e..cb79f7eda4a 100644 --- a/.github/workflows/rust-ci.yml +++ b/.github/workflows/rust-ci.yml @@ -13,7 +13,7 @@ jobs: matrix: extension: ["src/native"] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - name: Install latest stable toolchain and rustfmt diff --git a/.github/workflows/set-target-milestone.yml b/.github/workflows/set-target-milestone.yml index 31dcb1a9938..ce6f775ceb7 100644 --- a/.github/workflows/set-target-milestone.yml +++ b/.github/workflows/set-target-milestone.yml @@ -12,12 +12,12 @@ jobs: name: Add milestone to merged pull requests runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # Include all history and tags with: persist-credentials: false fetch-depth: 0 - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 name: Install Python with: python-version: '3.8' @@ -29,7 +29,7 @@ jobs: scripts/get-target-milestone.py - name: Update Pull Request if: steps.milestones.outputs.milestone != null - uses: actions/github-script@v6.4.1 + uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1 with: github-token: ${{secrets.GITHUB_TOKEN}} script: | diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 63a045d498b..608f5b331c9 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -12,7 +12,7 @@ jobs: stale: runs-on: ubuntu-latest steps: - - uses: actions/stale@v8 + - uses: actions/stale@1160a2240286f5da8ec72b1c0816ce2481aabf84 # v8.0.0 with: # DEV: GitHub Actions have an API rate limit of 1000 operations per hour per repository # This limit is shared across all actions diff --git a/.github/workflows/system-tests.yml b/.github/workflows/system-tests.yml index 3f9d9308c83..443be12b62d 100644 --- a/.github/workflows/system-tests.yml +++ b/.github/workflows/system-tests.yml @@ -16,7 +16,7 @@ jobs: steps: - name: Checkout system tests - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false repository: 'DataDog/system-tests' @@ -29,7 +29,7 @@ jobs: run: | docker image save system_tests/agent:latest | gzip > agent_${{ github.sha }}.tar.gz - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: agent_${{ github.sha }} path: | @@ -62,13 +62,13 @@ jobs: steps: - name: Checkout system tests - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false repository: 'DataDog/system-tests' - name: Checkout dd-trace-py - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false path: 'binaries/dd-trace-py' @@ -85,7 +85,7 @@ jobs: run: | docker image save system_tests/weblog:latest | gzip > ${{ matrix.weblog-variant}}_weblog_${{ github.sha }}.tar.gz - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: ${{ matrix.weblog-variant }}_${{ github.sha }} path: | @@ -114,7 +114,7 @@ jobs: steps: - name: Checkout system tests - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false repository: 'DataDog/system-tests' @@ -122,12 +122,12 @@ jobs: - name: Build runner uses: ./.github/actions/install_runner - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: ${{ matrix.weblog-variant }}_${{ github.sha }} path: images_artifacts/ - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: agent_${{ github.sha }} path: images_artifacts/ @@ -273,7 +273,7 @@ jobs: run: tar -czvf artifact.tar.gz $(ls | grep logs) - name: Upload artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 if: always() && steps.docker_load.outcome == 'success' with: name: logs_${{ matrix.weblog-variant }}_${{ matrix.scenario }} @@ -287,12 +287,12 @@ jobs: TEST_LIBRARY: python steps: - name: Checkout system tests - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false repository: 'DataDog/system-tests' - name: Checkout dd-trace-py - uses: actions/checkout@v4 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false path: 'binaries/dd-trace-py' @@ -312,7 +312,7 @@ jobs: run: tar -czvf artifact.tar.gz $(ls | grep logs) - name: Upload artifact - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 if: always() && steps.build_runner.outcome == 'success' with: name: logs_parametric diff --git a/.github/workflows/test_frameworks.yml b/.github/workflows/test_frameworks.yml index 2e1502b4d3d..378806e11ba 100644 --- a/.github/workflows/test_frameworks.yml +++ b/.github/workflows/test_frameworks.yml @@ -25,7 +25,7 @@ jobs: outputs: outcome: ${{ steps.run_needed.outcome }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - id: run_needed @@ -71,16 +71,16 @@ jobs: run: working-directory: bottle steps: - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 if: needs.needs-run.outputs.outcome == 'success' with: python-version: '3.9' - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: path: ddtrace persist-credentials: false - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false @@ -170,19 +170,19 @@ jobs: run: working-directory: django steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false path: ddtrace - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false repository: django/django ref: 5.0.7 path: django - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 if: needs.needs-run.outputs.outcome == 'success' with: python-version: "3.11" @@ -268,12 +268,12 @@ jobs: run: working-directory: graphene steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false path: ddtrace - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false @@ -282,7 +282,7 @@ jobs: # Unreleased CI fix: https://github.com/graphql-python/graphene/pull/1412 ref: 03277a55123fd2f8a8465c5fa671f7fb0d004c26 path: graphene - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 if: needs.needs-run.outputs.outcome == 'success' with: python-version: "3.9" @@ -338,23 +338,23 @@ jobs: run: working-directory: fastapi steps: - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 if: needs.needs-run.outputs.outcome == 'success' with: python-version: '3.9' - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false path: ddtrace - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false repository: tiangolo/fastapi ref: 0.92.0 path: fastapi - - uses: actions/cache@v4.1.2 + - uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 if: needs.needs-run.outputs.outcome == 'success' id: cache with: @@ -409,19 +409,19 @@ jobs: run: working-directory: flask steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false path: ddtrace - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false repository: pallets/flask ref: 3.0.3 path: flask - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 if: needs.needs-run.outputs.outcome == 'success' with: python-version: '3.12' @@ -461,19 +461,19 @@ jobs: run: working-directory: httpx steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false path: ddtrace - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false repository: encode/httpx ref: 0.22.0 path: httpx - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 if: needs.needs-run.outputs.outcome == 'success' with: python-version: '3.9' @@ -535,19 +535,19 @@ jobs: run: working-directory: mako steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false path: ddtrace - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false repository: sqlalchemy/mako ref: rel_1_3_5 path: mako - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 if: needs.needs-run.outputs.outcome == 'success' with: python-version: '3.12' @@ -603,16 +603,16 @@ jobs: run: working-directory: starlette steps: - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 if: needs.needs-run.outputs.outcome == 'success' with: python-version: '3.9' - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false path: ddtrace - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false @@ -670,16 +670,16 @@ jobs: run: working-directory: requests steps: - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 if: needs.needs-run.outputs.outcome == 'success' with: python-version: '3.9' - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false path: ddtrace - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false @@ -739,16 +739,16 @@ jobs: run: working-directory: asyncpg steps: - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 if: needs.needs-run.outputs.outcome == 'success' with: python-version: '3.9' - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false path: ddtrace - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false @@ -796,16 +796,16 @@ jobs: run: working-directory: gunicorn steps: - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 if: needs.needs-run.outputs.outcome == 'success' with: python-version: '3.9' - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false path: ddtrace - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false @@ -855,16 +855,16 @@ jobs: run: working-directory: uwsgi steps: - - uses: actions/setup-python@v5 + - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 if: needs.needs-run.outputs.outcome == 'success' with: python-version: '3.9' - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false path: ddtrace - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 if: needs.needs-run.outputs.outcome == 'success' with: persist-credentials: false diff --git a/.github/workflows/test_lib_injection.yml b/.github/workflows/test_lib_injection.yml index c30988db6d1..9e7ebbe0935 100644 --- a/.github/workflows/test_lib_injection.yml +++ b/.github/workflows/test_lib_injection.yml @@ -31,7 +31,7 @@ jobs: - "3.12" - "3.13" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - name: Install pyenv diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 3de25fa22b0..4f9f7e1a4a1 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -16,21 +16,21 @@ jobs: matrix: os: [ubuntu-latest, windows-latest, macos-latest] # Keep this in sync with hatch.toml - python-version: ["3.7", "3.10", "3.12"] + python-version: ["3.10", "3.12"] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 # Include all history and tags with: persist-credentials: false fetch-depth: 0 - - uses: actions-rust-lang/setup-rust-toolchain@v1 + - uses: actions-rust-lang/setup-rust-toolchain@11df97af8e8102fd60b60a77dfbf58d40cd843b8 # v1.10.1 - name: Install latest stable toolchain and rustfmt run: rustup update stable && rustup default stable && rustup component add rustfmt clippy - name: Install hatch - uses: pypa/hatch@install + uses: pypa/hatch@257e27e51a6a5616ed08a39a408a21c35c9931bc # install with: version: "1.12.0" diff --git a/.github/workflows/upstream-issues.yml b/.github/workflows/upstream-issues.yml index 5c838bc894c..d0862034cb2 100644 --- a/.github/workflows/upstream-issues.yml +++ b/.github/workflows/upstream-issues.yml @@ -7,10 +7,10 @@ jobs: upstream-issues: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - - uses: Kyle-Verhoog/upstream-issue-notifier@v0.1.3 + - uses: Kyle-Verhoog/upstream-issue-notifier@673cde7836a29e5549146261217982ce0cf91858 # v0.1.3 env: GITHUB_TOKEN: ${{ github.token }} IGNORE_DIRS: ddtrace/vendor diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b29f243c474..47d2baf065c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,6 +6,7 @@ stages: - shared-pipeline - benchmarks - macrobenchmarks + - benchmarks-report - release variables: diff --git a/.gitlab/benchmarks.yml b/.gitlab/benchmarks.yml index 6c7b48aea3a..692a61ea93f 100644 --- a/.gitlab/benchmarks.yml +++ b/.gitlab/benchmarks.yml @@ -59,8 +59,7 @@ microbenchmarks: benchmarks-pr-comment: image: $MICROBENCHMARKS_CI_IMAGE tags: ["arch:amd64"] - stage: benchmarks - needs: [ "microbenchmarks" ] + stage: benchmarks-report when: always script: - export REPORTS_DIR="$(pwd)/reports/" && (mkdir "${REPORTS_DIR}" || :) @@ -78,8 +77,7 @@ benchmarks-pr-comment: KUBERNETES_SERVICE_ACCOUNT_OVERWRITE: dd-trace-py check-big-regressions: - stage: benchmarks - needs: [ microbenchmarks, benchmark-serverless ] + stage: benchmarks-report when: always tags: ["arch:amd64"] image: $MICROBENCHMARKS_CI_IMAGE @@ -98,6 +96,7 @@ benchmark-serverless: tags: ["arch:amd64"] when: on_success needs: [ "benchmark-serverless-trigger" ] + allow_failure: true script: - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.ddbuild.io/DataDog/serverless-tools.git ./serverless-tools && cd ./serverless-tools - ./ci/check_trigger_status.sh diff --git a/.gitlab/package.yml b/.gitlab/package.yml index 973e2d55d3f..9ae49253205 100644 --- a/.gitlab/package.yml +++ b/.gitlab/package.yml @@ -19,8 +19,6 @@ download_dependency_wheels: needs: [ download_ddtrace_artifacts ] parallel: matrix: # The image tags that are mirrored are in: https://github.com/DataDog/images/blob/master/mirror.yaml - - PYTHON_IMAGE_TAG: "3.7" - PYTHON_VERSION: "3.7" - PYTHON_IMAGE_TAG: "3.8" PYTHON_VERSION: "3.8" - PYTHON_IMAGE_TAG: "3.9.13" diff --git a/.gitlab/services.yml b/.gitlab/services.yml index 51e28c38cc5..0282dd9e9d0 100644 --- a/.gitlab/services.yml +++ b/.gitlab/services.yml @@ -77,3 +77,11 @@ rabbitmq: name: registry.ddbuild.io/images/mirror/rabbitmq:3.12.7-management-alpine alias: rabbitmq + mysql: + name: registry.ddbuild.io/images/mirror/mysql:5.7 + alias: mysql + variables: + MYSQL_ROOT_PASSWORD: admin + MYSQL_PASSWORD: test + MYSQL_USER: test + MYSQL_DATABASE: test diff --git a/.gitlab/testrunner.yml b/.gitlab/testrunner.yml index fe9fb34bec6..e0013db22ac 100644 --- a/.gitlab/testrunner.yml +++ b/.gitlab/testrunner.yml @@ -5,5 +5,5 @@ timeout: 20m before_script: - ulimit -c unlimited - - pyenv global 3.12 3.7 3.8 3.9 3.10 3.11 3.13 + - pyenv global 3.12 3.8 3.9 3.10 3.11 3.13 - export _CI_DD_AGENT_URL=http://${HOST_IP}:8126/ diff --git a/.gitlab/tests.yml b/.gitlab/tests.yml index b8c9a3d9897..3092532ac22 100644 --- a/.gitlab/tests.yml +++ b/.gitlab/tests.yml @@ -6,7 +6,6 @@ stages: variables: RIOT_RUN_CMD: riot -P -v run --exitfirst --pass-env -s REPO_LANG: python # "python" is used everywhere rather than "py" - DD_PYTEST_USE_NEW_PLUGIN_BETA: "true" PYTEST_ADDOPTS: "-s" # CI_DEBUG_SERVICES: "true" @@ -57,7 +56,7 @@ build_base_venvs: stage: riot parallel: matrix: - - PYTHON_VERSION: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] + - PYTHON_VERSION: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] variables: CMAKE_BUILD_PARALLEL_LEVEL: 12 PIP_VERBOSE: 1 diff --git a/.riot/requirements/1001365.txt b/.riot/requirements/1001365.txt deleted file mode 100644 index 4c93e023297..00000000000 --- a/.riot/requirements/1001365.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1001365.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -jinja2==2.10.3 -markupsafe==1.1.1 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/100cc0e.txt b/.riot/requirements/100cc0e.txt deleted file mode 100644 index 04ddd7f13ac..00000000000 --- a/.riot/requirements/100cc0e.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/100cc0e.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -elasticsearch6==6.8.2 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/1012b6a.txt b/.riot/requirements/1012b6a.txt deleted file mode 100644 index 19fcc2baf77..00000000000 --- a/.riot/requirements/1012b6a.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1012b6a.in -# -attrs==23.2.0 -certifi==2024.2.2 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -requests-mock==1.11.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.18 -zipp==3.15.0 diff --git a/.riot/requirements/1026e4e.txt b/.riot/requirements/1026e4e.txt deleted file mode 100644 index 60de6cc0939..00000000000 --- a/.riot/requirements/1026e4e.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1026e4e.in -# -aiohttp==3.8.6 -aiohttp-jinja2==1.5.1 -aiosignal==1.3.1 -async-timeout==4.0.3 -asynctest==0.13.0 -attrs==23.2.0 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.1 -frozenlist==1.3.3 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.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.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/105d554.txt b/.riot/requirements/105d554.txt deleted file mode 100644 index 3305a94f703..00000000000 --- a/.riot/requirements/105d554.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/105d554.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -logbook==1.6.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/106990f.txt b/.riot/requirements/106990f.txt new file mode 100644 index 00000000000..56ab09719e7 --- /dev/null +++ b/.riot/requirements/106990f.txt @@ -0,0 +1,40 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/106990f.in +# +astunparse==1.6.3 +attrs==24.3.0 +certifi==2024.12.14 +cffi==1.17.1 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +cryptography==44.0.0 +googleapis-common-protos==1.66.0 +greenlet==3.1.1 +grpcio==1.70.0 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.0.0 +mock==5.1.0 +mysqlclient==2.1.1 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +protobuf==5.29.3 +psycopg2-binary==2.9.10 +pycparser==2.22 +pycryptodome==3.21.0 +pymysql==1.1.1 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +requests==2.32.3 +simplejson==3.19.3 +six==1.17.0 +sortedcontainers==2.4.0 +sqlalchemy==2.0.22 +typing-extensions==4.12.2 +urllib3==2.3.0 +wheel==0.45.1 diff --git a/.riot/requirements/10733d8.txt b/.riot/requirements/10733d8.txt deleted file mode 100644 index 5c956f3c9fe..00000000000 --- a/.riot/requirements/10733d8.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/10733d8.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -decorator==5.1.1 -dogpile-cache==0.9.2 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/107d8f2.txt b/.riot/requirements/107d8f2.txt new file mode 100644 index 00000000000..7bed129ddaf --- /dev/null +++ b/.riot/requirements/107d8f2.txt @@ -0,0 +1,54 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate --resolver=backtracking .riot/requirements/107d8f2.in +# +annotated-types==0.7.0 +anyio==4.8.0 +attrs==24.3.0 +certifi==2024.12.14 +coverage[toml]==7.6.10 +distro==1.9.0 +exceptiongroup==1.2.2 +h11==0.14.0 +httpcore==1.0.7 +httpx==0.27.2 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.6.1 +iniconfig==2.0.0 +mock==5.1.0 +multidict==6.1.0 +numpy==2.0.2 +openai[datalib,embeddings]==1.30.1 +opentracing==2.4.0 +packaging==24.2 +pandas==2.2.3 +pandas-stubs==2.2.2.240807 +pillow==9.5.0 +pluggy==1.5.0 +propcache==0.2.1 +pydantic==2.10.5 +pydantic-core==2.27.2 +pytest==8.3.4 +pytest-asyncio==0.21.1 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +python-dateutil==2.9.0.post0 +pytz==2024.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.12.2 +tzdata==2025.1 +urllib3==1.26.20 +vcrpy==4.2.1 +wrapt==1.17.2 +yarl==1.18.3 +zipp==3.21.0 diff --git a/.riot/requirements/10a626b.txt b/.riot/requirements/10a626b.txt deleted file mode 100644 index 93dab7894b6..00000000000 --- a/.riot/requirements/10a626b.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/10a626b.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.2.7 -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==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -rfc3986[idna2008]==1.5.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/10aef09.txt b/.riot/requirements/10aef09.txt deleted file mode 100644 index ba661b56b54..00000000000 --- a/.riot/requirements/10aef09.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/10aef09.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mariadb==1.1.6 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/10bb9be.txt b/.riot/requirements/10bb9be.txt deleted file mode 100644 index 9d9274b19c9..00000000000 --- a/.riot/requirements/10bb9be.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/10bb9be.in -# -asn1crypto==1.5.1 -attrs==23.1.0 -certifi==2023.11.17 -cffi==1.15.1 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -cryptography==38.0.4 -exceptiongroup==1.2.0 -filelock==3.12.2 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -oscrypto==1.3.0 -packaging==23.2 -pluggy==1.2.0 -pycparser==2.21 -pycryptodomex==3.19.0 -pyjwt==2.8.0 -pyopenssl==23.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -pytz==2023.3.post1 -requests==2.31.0 -responses==0.16.0 -six==1.16.0 -snowflake-connector-python==3.0.4 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.18 -zipp==3.15.0 diff --git a/.riot/requirements/10d168b.txt b/.riot/requirements/10d168b.txt deleted file mode 100644 index 993b66ceb44..00000000000 --- a/.riot/requirements/10d168b.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/10d168b.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -future==0.18.3 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.8.2 -pytz==2023.3.post1 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -vertica-python==0.6.14 -zipp==3.15.0 diff --git a/.riot/requirements/10d33c9.txt b/.riot/requirements/10d33c9.txt deleted file mode 100644 index ee52b275764..00000000000 --- a/.riot/requirements/10d33c9.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/10d33c9.in -# -aniso8601==9.0.1 -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -graphene==3.0 -graphql-core==3.1.7 -graphql-relay==3.1.5 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/10ebb4e.txt b/.riot/requirements/10ebb4e.txt deleted file mode 100644 index 055e112214f..00000000000 --- a/.riot/requirements/10ebb4e.txt +++ /dev/null @@ -1,43 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/10ebb4e.in -# -aiobotocore==1.4.2 -aiohttp==3.8.6 -aioitertools==0.11.0 -aiosignal==1.3.1 -async-generator==1.10 -async-timeout==4.0.3 -asynctest==0.13.0 -attrs==24.2.0 -botocore==1.20.106 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -frozenlist==1.3.3 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -jmespath==0.10.0 -mock==5.1.0 -multidict==6.0.5 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.9.0.post0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.19 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/1140d28.txt b/.riot/requirements/1140d28.txt new file mode 100644 index 00000000000..c88bf934c45 --- /dev/null +++ b/.riot/requirements/1140d28.txt @@ -0,0 +1,42 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1140d28.in +# +astunparse==1.6.3 +attrs==24.3.0 +certifi==2024.12.14 +cffi==1.17.1 +charset-normalizer==3.4.1 +coverage[toml]==7.6.1 +cryptography==44.0.0 +exceptiongroup==1.2.2 +googleapis-common-protos==1.66.0 +greenlet==3.1.1 +grpcio==1.70.0 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.0.0 +mock==5.1.0 +mysqlclient==2.1.1 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +protobuf==5.29.3 +psycopg2-binary==2.9.10 +pycparser==2.22 +pycryptodome==3.21.0 +pymysql==1.1.1 +pytest==8.3.4 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +requests==2.32.3 +simplejson==3.19.3 +six==1.17.0 +sortedcontainers==2.4.0 +sqlalchemy==2.0.22 +tomli==2.2.1 +typing-extensions==4.12.2 +urllib3==2.2.3 +wheel==0.45.1 diff --git a/.riot/requirements/115aba5.txt b/.riot/requirements/115aba5.txt deleted file mode 100644 index 0d4bef52edd..00000000000 --- a/.riot/requirements/115aba5.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/115aba5.in -# -async-timeout==4.0.3 -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -redis==4.6.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/116b0a1.txt b/.riot/requirements/116b0a1.txt new file mode 100644 index 00000000000..3584ec0a943 --- /dev/null +++ b/.riot/requirements/116b0a1.txt @@ -0,0 +1,40 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/116b0a1.in +# +annotated-types==0.7.0 +attrs==25.1.0 +blinker==1.9.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +click==8.1.8 +coverage[toml]==7.6.10 +exceptiongroup==1.2.2 +flask==2.3.3 +flask-openapi3==4.0.3 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.6.1 +iniconfig==2.0.0 +itsdangerous==2.2.0 +jinja2==3.1.5 +markupsafe==3.0.2 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pydantic==2.10.6 +pydantic-core==2.27.2 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +requests==2.32.3 +sortedcontainers==2.4.0 +tomli==2.2.1 +typing-extensions==4.12.2 +urllib3==1.26.20 +werkzeug==3.1.3 +zipp==3.21.0 diff --git a/.riot/requirements/1181282.txt b/.riot/requirements/1181282.txt deleted file mode 100644 index 0dc9a376d68..00000000000 --- a/.riot/requirements/1181282.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1181282.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.2.7 -elasticsearch7==7.17.9 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.18 -zipp==3.15.0 diff --git a/.riot/requirements/11bda89.txt b/.riot/requirements/11bda89.txt deleted file mode 100644 index d33a99885ff..00000000000 --- a/.riot/requirements/11bda89.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/11bda89.in -# -anyio==3.7.1 -attrs==23.2.0 -certifi==2024.2.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -more-itertools==8.10.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==2.12.0 -pytest-mock==2.0.0 -pytest-randomly==3.12.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/11c18f0.txt b/.riot/requirements/11c18f0.txt deleted file mode 100644 index 4a0bff48db9..00000000000 --- a/.riot/requirements/11c18f0.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/11c18f0.in -# -aniso8601==9.0.1 -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -graphene==3.3 -graphql-core==3.2.3 -graphql-relay==3.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/11dc3f9.txt b/.riot/requirements/11dc3f9.txt deleted file mode 100644 index 278eef7947a..00000000000 --- a/.riot/requirements/11dc3f9.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/11dc3f9.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -elasticsearch5==5.5.6 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/11dd5c1.txt b/.riot/requirements/11dd5c1.txt deleted file mode 100644 index a6bb6719a08..00000000000 --- a/.riot/requirements/11dd5c1.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/11dd5c1.in -# -amqp==5.2.0 -attrs==23.2.0 -billiard==3.6.4.0 -cached-property==1.5.2 -celery==5.1.2 -click==7.1.2 -click-didyoumean==0.3.1 -click-plugins==1.1.1 -click-repl==0.3.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==4.13.0 -iniconfig==2.0.0 -kombu==5.2.4 -mock==5.1.0 -more-itertools==8.10.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -prompt-toolkit==3.0.47 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -pytz==2024.1 -redis==3.5.3 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -vine==5.1.0 -wcwidth==0.2.13 -zipp==3.15.0 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/1239a3c.txt b/.riot/requirements/1239a3c.txt index 90f3db623c8..1d7ec8b0a38 100644 --- a/.riot/requirements/1239a3c.txt +++ b/.riot/requirements/1239a3c.txt @@ -2,11 +2,11 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1239a3c.in +# pip-compile --no-annotate .riot/requirements/1239a3c.in # asgiref==3.8.1 -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==25.1.0 +coverage[toml]==7.6.10 django==3.2.25 django-configurations==2.5.1 django-hosts==4.0 @@ -15,19 +15,19 @@ hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-django[testing]==3.10.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -pytz==2024.1 -six==1.16.0 +pytest-randomly==3.16.0 +pytz==2024.2 +six==1.17.0 sortedcontainers==2.4.0 -sqlparse==0.5.1 -tomli==2.0.1 +sqlparse==0.5.3 +tomli==2.2.1 typing-extensions==4.12.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +# setuptools diff --git a/.riot/requirements/1250d61.txt b/.riot/requirements/1250d61.txt deleted file mode 100644 index 90fc52cde99..00000000000 --- a/.riot/requirements/1250d61.txt +++ /dev/null @@ -1,41 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1250d61.in -# -aiofiles==23.2.1 -aiosqlite==0.19.0 -anyio==3.7.1 -attrs==24.2.0 -certifi==2024.8.30 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -databases==0.8.0 -exceptiongroup==1.2.2 -greenlet==3.0.3 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -sqlalchemy==1.4.54 -starlette==0.20.4 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/1250eb4.txt b/.riot/requirements/1250eb4.txt deleted file mode 100644 index 6d6a7b41914..00000000000 --- a/.riot/requirements/1250eb4.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1250eb4.in -# -aiopg==1.4.0 -async-timeout==4.0.3 -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -greenlet==3.0.3 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -psycopg2-binary==2.9.9 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.28 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/129b75c.txt b/.riot/requirements/129b75c.txt deleted file mode 100644 index 49626725a75..00000000000 --- a/.riot/requirements/129b75c.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/129b75c.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.2.7 -elastic-transport==8.11.0 -elasticsearch8==8.0.1 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/130158f.txt b/.riot/requirements/130158f.txt new file mode 100644 index 00000000000..037c7010f33 --- /dev/null +++ b/.riot/requirements/130158f.txt @@ -0,0 +1,48 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/130158f.in +# +annotated-types==0.7.0 +anyio==4.8.0 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +distro==1.9.0 +h11==0.14.0 +httpcore==1.0.7 +httpx==0.28.1 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.0.0 +jiter==0.8.2 +mock==5.1.0 +multidict==6.1.0 +openai==1.60.0 +opentracing==2.4.0 +packaging==24.2 +pillow==11.1.0 +pluggy==1.5.0 +propcache==0.2.1 +pydantic==2.10.5 +pydantic-core==2.27.2 +pytest==8.3.4 +pytest-asyncio==0.21.1 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +pyyaml==6.0.2 +regex==2024.11.6 +requests==2.32.3 +six==1.17.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tiktoken==0.8.0 +tqdm==4.67.1 +typing-extensions==4.12.2 +urllib3==1.26.20 +vcrpy==4.2.1 +wrapt==1.17.2 +yarl==1.18.3 diff --git a/.riot/requirements/130c755.txt b/.riot/requirements/130c755.txt deleted file mode 100644 index 4ff3f89fa5e..00000000000 --- a/.riot/requirements/130c755.txt +++ /dev/null @@ -1,74 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/130c755.in -# -annotated-types==0.5.0 -attrs==24.2.0 -aws-sam-translator==1.82.0 -aws-xray-sdk==2.14.0 -boto==2.49.0 -boto3==1.33.13 -botocore==1.33.13 -certifi==2024.8.30 -cffi==1.15.1 -cfn-lint==0.53.1 -charset-normalizer==3.4.0 -coverage[toml]==7.2.7 -cryptography==43.0.3 -docker==6.1.3 -ecdsa==0.14.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -idna==2.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -jinja2==2.10.3 -jmespath==1.0.1 -jsondiff==2.0.0 -jsonpatch==1.33 -jsonpointer==3.0.0 -jsonschema==3.2.0 -junit-xml==1.9 -markupsafe==1.1.1 -mock==5.1.0 -more-itertools==9.1.0 -moto==1.3.16 -networkx==2.6.3 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.5.3 -pydantic-core==2.14.6 -pynamodb==5.5.1 -pyrsistent==0.19.3 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.9.0.post0 -python-jose[cryptography]==3.3.0 -pytz==2024.2 -pyyaml==6.0.1 -requests==2.31.0 -responses==0.23.3 -rsa==4.9 -s3transfer==0.8.2 -six==1.16.0 -sortedcontainers==2.4.0 -sshpubkeys==3.3.1 -tomli==2.0.1 -types-pyyaml==6.0.12.12 -typing-extensions==4.7.1 -urllib3==1.26.20 -websocket-client==1.6.1 -werkzeug==2.1.2 -wrapt==1.16.0 -xmltodict==0.14.2 -zipp==3.15.0 - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/.riot/requirements/135c565.txt b/.riot/requirements/135c565.txt deleted file mode 100644 index caf60f987cf..00000000000 --- a/.riot/requirements/135c565.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/135c565.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -py-cpuinfo==9.0.0 -pytest==7.4.4 -pytest-benchmark==4.0.0 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/136fbd2.txt b/.riot/requirements/136fbd2.txt deleted file mode 100644 index a2a894e5902..00000000000 --- a/.riot/requirements/136fbd2.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/136fbd2.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/137098c.txt b/.riot/requirements/137098c.txt deleted file mode 100644 index 24a61c00a85..00000000000 --- a/.riot/requirements/137098c.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/137098c.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -gevent==22.10.2 -greenlet==3.1.1 -httpretty==1.1.4 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pyfakefs==5.7.3 -pytest==7.4.4 -pytest-asyncio==0.21.2 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-json-logger==2.0.7 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 -zope-event==5.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/137d3ed.txt b/.riot/requirements/137d3ed.txt deleted file mode 100644 index 72b5cba9c65..00000000000 --- a/.riot/requirements/137d3ed.txt +++ /dev/null @@ -1,40 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/137d3ed.in -# -aiofiles==23.2.1 -anyio==3.7.1 -attrs==24.2.0 -certifi==2024.12.14 -charset-normalizer==3.4.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -fastapi==0.64.0 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pydantic==1.10.19 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-multipart==0.0.8 -requests==2.31.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.13.6 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/13804af.txt b/.riot/requirements/13804af.txt deleted file mode 100644 index 7035a764386..00000000000 --- a/.riot/requirements/13804af.txt +++ /dev/null @@ -1,57 +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/13804af.in -# -annotated-types==0.7.0 -anyio==4.4.0 -attrs==24.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.1 -distro==1.9.0 -exceptiongroup==1.2.2 -h11==0.14.0 -httpcore==1.0.5 -httpx==0.27.0 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==8.4.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.5 -numpy==1.24.4 -openai[datalib]==1.30.1 -opentracing==2.4.0 -packaging==24.1 -pandas==2.0.3 -pandas-stubs==2.0.3.230814 -pillow==10.1.0 -pluggy==1.5.0 -pydantic==2.8.2 -pydantic-core==2.20.1 -pytest==8.3.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -pytz==2024.1 -pyyaml==6.0.2 -regex==2024.7.24 -requests==2.32.3 -six==1.16.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tiktoken==0.7.0 -tomli==2.0.1 -tqdm==4.66.5 -types-pytz==2024.1.0.20240417 -typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==1.26.19 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.20.1 diff --git a/.riot/requirements/1389734.txt b/.riot/requirements/1389734.txt deleted file mode 100644 index 2b10749d53e..00000000000 --- a/.riot/requirements/1389734.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1389734.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.2.7 -elastic-transport==8.11.0 -elasticsearch==8.11.1 -elasticsearch7==7.17.9 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.18 -zipp==3.15.0 diff --git a/.riot/requirements/139b6d7.txt b/.riot/requirements/139b6d7.txt deleted file mode 100644 index bf73de0c382..00000000000 --- a/.riot/requirements/139b6d7.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/139b6d7.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -logbook==1.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/13cc5fa.txt b/.riot/requirements/13cc5fa.txt deleted file mode 100644 index a9ffcea28bc..00000000000 --- a/.riot/requirements/13cc5fa.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/13cc5fa.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -decorator==5.1.1 -dogpile-cache==1.2.2 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pbr==6.0.0 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -stevedore==3.5.2 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1425e39.txt b/.riot/requirements/1425e39.txt deleted file mode 100644 index b47a37009e5..00000000000 --- a/.riot/requirements/1425e39.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1425e39.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -django==2.2.28 -django-configurations==2.3.2 -djangorestframework==3.12.4 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -pytz==2024.1 -six==1.16.0 -sortedcontainers==2.4.0 -sqlparse==0.4.4 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/145f3f5.txt b/.riot/requirements/145f3f5.txt deleted file mode 100644 index 79300a5a18b..00000000000 --- a/.riot/requirements/145f3f5.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/145f3f5.in -# -attrs==23.2.0 -autocommand==2.2.2 -cheroot==10.0.1 -cherrypy==18.10.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -importlib-resources==5.12.0 -inflect==6.0.5 -iniconfig==2.0.0 -jaraco-collections==4.2.0 -jaraco-context==4.3.0 -jaraco-functools==3.7.0 -jaraco-text==3.11.1 -mock==5.1.0 -more-itertools==8.10.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -portend==3.1.0 -pydantic==1.10.17 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -pytz==2024.1 -sortedcontainers==2.4.0 -tempora==5.3.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zc-lockfile==3.0.post1 -zipp==3.15.0 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/1460efe.txt b/.riot/requirements/1460efe.txt new file mode 100644 index 00000000000..88d3edb3c68 --- /dev/null +++ b/.riot/requirements/1460efe.txt @@ -0,0 +1,47 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1460efe.in +# +attrs==25.1.0 +boto3==1.36.10 +botocore==1.36.10 +bytecode==0.16.1 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +datadog==0.51.0 +datadog-lambda==6.105.0 +ddtrace==2.20.0 +deprecated==1.2.18 +envier==0.5.2 +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.29.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==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.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==2.3.0 +wrapt==1.17.2 +xmltodict==0.14.2 +zipp==3.21.0 diff --git a/.riot/requirements/14b37e6.txt b/.riot/requirements/14b37e6.txt deleted file mode 100644 index 2a4e0451f06..00000000000 --- a/.riot/requirements/14b37e6.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/14b37e6.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pymongo==3.9.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/14b883c.txt b/.riot/requirements/14b883c.txt deleted file mode 100644 index fc5fce6885f..00000000000 --- a/.riot/requirements/14b883c.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/14b883c.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -falcon==3.1.3 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/14ccd31.txt b/.riot/requirements/14ccd31.txt deleted file mode 100644 index 78e13efd61f..00000000000 --- a/.riot/requirements/14ccd31.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/14ccd31.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/14f9d89.txt b/.riot/requirements/14f9d89.txt deleted file mode 100644 index 2e418a835de..00000000000 --- a/.riot/requirements/14f9d89.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/14f9d89.in -# -async-timeout==4.0.3 -attrs==23.1.0 -click==7.1.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -redis==5.0.1 -rq==1.10.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1532dd6.txt b/.riot/requirements/1532dd6.txt deleted file mode 100644 index bb2d4670425..00000000000 --- a/.riot/requirements/1532dd6.txt +++ /dev/null @@ -1,77 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/1532dd6.in -# -arrow==1.2.3 -asgiref==3.7.2 -attrs==24.2.0 -autobahn==23.1.2 -automat==22.10.0 -bcrypt==4.2.1 -blessed==1.20.0 -cached-property==1.5.2 -certifi==2024.12.14 -cffi==1.15.1 -channels==3.0.5 -charset-normalizer==3.4.0 -constantly==15.1.0 -coverage[toml]==7.2.7 -cryptography==44.0.0 -daphne==3.0.2 -django==3.2.25 -django-configurations==2.4.2 -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==6.7.0 -incremental==22.10.0 -iniconfig==2.0.0 -isodate==0.7.2 -lxml==5.3.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -platformdirs==4.0.0 -pluggy==1.2.0 -psycopg2-binary==2.9.9 -pyasn1==0.5.1 -pyasn1-modules==0.3.0 -pycparser==2.21 -pylibmc==1.6.3 -pyopenssl==24.3.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.9.0.post0 -python-memcached==1.62 -pytz==2024.2 -redis==2.10.6 -requests==2.31.0 -requests-file==2.1.0 -requests-toolbelt==1.0.0 -service-identity==21.1.0 -six==1.17.0 -sortedcontainers==2.4.0 -spyne==2.14.0 -sqlparse==0.4.4 -tomli==2.0.1 -twisted[tls]==23.8.0 -txaio==23.1.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -wcwidth==0.2.13 -zeep==4.2.1 -zipp==3.15.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/1538581.txt b/.riot/requirements/1538581.txt deleted file mode 100644 index 17a287f4cec..00000000000 --- a/.riot/requirements/1538581.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1538581.in -# -aiofiles==23.2.1 -anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.16.3 -httptools==0.6.0 -httpx==0.23.3 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.4 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.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.7.1 -ujson==5.7.0 -urllib3==2.0.7 -uvloop==0.18.0 -websockets==10.4 -zipp==3.15.0 diff --git a/.riot/requirements/1568a2f.txt b/.riot/requirements/1568a2f.txt new file mode 100644 index 00000000000..03419e15f7c --- /dev/null +++ b/.riot/requirements/1568a2f.txt @@ -0,0 +1,42 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1568a2f.in +# +astunparse==1.6.3 +attrs==24.3.0 +certifi==2024.12.14 +cffi==1.17.1 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +cryptography==44.0.0 +exceptiongroup==1.2.2 +googleapis-common-protos==1.66.0 +greenlet==3.1.1 +grpcio==1.70.0 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.0.0 +mock==5.1.0 +mysqlclient==2.1.1 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +protobuf==5.29.3 +psycopg2-binary==2.9.10 +pycparser==2.22 +pycryptodome==3.21.0 +pymysql==1.1.1 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +requests==2.32.3 +simplejson==3.19.3 +six==1.17.0 +sortedcontainers==2.4.0 +sqlalchemy==2.0.22 +tomli==2.2.1 +typing-extensions==4.12.2 +urllib3==2.3.0 +wheel==0.45.1 diff --git a/.riot/requirements/15bf3e3.txt b/.riot/requirements/15bf3e3.txt deleted file mode 100644 index 9b69550f0e2..00000000000 --- a/.riot/requirements/15bf3e3.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/15bf3e3.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pymemcache==4.0.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1600ae2.txt b/.riot/requirements/1600ae2.txt deleted file mode 100644 index 8510d225c91..00000000000 --- a/.riot/requirements/1600ae2.txt +++ /dev/null @@ -1,39 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1600ae2.in -# -attrs==24.2.0 -colorama==0.4.6 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -gevent==22.10.2 -greenlet==3.1.1 -gunicorn[gevent]==23.0.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -lz4==4.3.2 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -py-cpuinfo==8.0.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==4.1.0 -pytest-cpp==2.5.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -uwsgi==2.0.28 -zipp==3.15.0 -zope-event==5.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/1605571.txt b/.riot/requirements/1605571.txt deleted file mode 100644 index 3a2c7bb0af4..00000000000 --- a/.riot/requirements/1605571.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1605571.in -# -attrs==23.2.0 -backports-zoneinfo==0.2.1 -coverage[toml]==7.2.7 -exceptiongroup==1.2.1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -psycopg==3.1.20 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/160ef98.txt b/.riot/requirements/160ef98.txt deleted file mode 100644 index daea0acc6d0..00000000000 --- a/.riot/requirements/160ef98.txt +++ /dev/null @@ -1,37 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/160ef98.in -# -atomicwrites==1.4.1 -attrs==24.2.0 -blinker==1.6.3 -click==8.1.7 -coverage[toml]==7.2.7 -flask==0.12.5 -flask-cache==0.13.1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -itsdangerous==1.1.0 -jinja2==2.10.3 -markupsafe==1.1.1 -mock==5.1.0 -more-itertools==8.10.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==0.13.1 -py==1.11.0 -pytest==4.6.11 -pytest-cov==3.0.0 -pytest-mock==2.0.0 -pytest-randomly==3.12.0 -python-memcached==1.62 -redis==2.10.6 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -wcwidth==0.2.13 -werkzeug==0.16.1 -zipp==3.15.0 diff --git a/.riot/requirements/1619693.txt b/.riot/requirements/1619693.txt deleted file mode 100644 index 1069309457b..00000000000 --- a/.riot/requirements/1619693.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1619693.in -# -aiohttp==3.8.6 -aiohttp-jinja2==1.5.1 -aiosignal==1.3.1 -async-timeout==4.0.3 -asynctest==0.13.0 -attrs==23.2.0 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.1 -frozenlist==1.3.3 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.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.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/16562eb.txt b/.riot/requirements/16562eb.txt deleted file mode 100644 index e2aac88c146..00000000000 --- a/.riot/requirements/16562eb.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/16562eb.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.5 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pyyaml==6.0.1 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.20 -vcrpy==4.4.0 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/165b374.txt b/.riot/requirements/165b374.txt deleted file mode 100644 index 19d5a6ef952..00000000000 --- a/.riot/requirements/165b374.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/165b374.in -# -aiohttp==3.8.6 -aiosignal==1.3.1 -async-timeout==4.0.3 -asynctest==0.13.0 -attrs==24.2.0 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -frozenlist==1.3.3 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.5 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/166f9ef.txt b/.riot/requirements/166f9ef.txt deleted file mode 100644 index 34dccc44a2c..00000000000 --- a/.riot/requirements/166f9ef.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/166f9ef.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -decorator==5.1.1 -dogpile-cache==1.2.2 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pbr==6.0.0 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -stevedore==3.5.2 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1683324.txt b/.riot/requirements/1683324.txt deleted file mode 100644 index ffd915a20db..00000000000 --- a/.riot/requirements/1683324.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1683324.in -# -async-timeout==4.0.3 -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -redis==5.0.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1690be2.txt b/.riot/requirements/1690be2.txt deleted file mode 100644 index 5bc80ccc1ca..00000000000 --- a/.riot/requirements/1690be2.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1690be2.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -tornado==6.2 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/16a770c.txt b/.riot/requirements/16a770c.txt new file mode 100644 index 00000000000..629c4bd5c39 --- /dev/null +++ b/.riot/requirements/16a770c.txt @@ -0,0 +1,40 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/16a770c.in +# +astunparse==1.6.3 +attrs==24.3.0 +certifi==2024.12.14 +cffi==1.17.1 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +cryptography==44.0.0 +googleapis-common-protos==1.66.0 +greenlet==3.1.1 +grpcio==1.70.0 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.0.0 +mock==5.1.0 +mysqlclient==2.1.1 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +protobuf==5.29.3 +psycopg2-binary==2.9.10 +pycparser==2.22 +pycryptodome==3.21.0 +pymysql==1.1.1 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +requests==2.32.3 +simplejson==3.19.3 +six==1.17.0 +sortedcontainers==2.4.0 +sqlalchemy==2.0.22 +typing-extensions==4.12.2 +urllib3==2.3.0 +wheel==0.45.1 diff --git a/.riot/requirements/16a9524.txt b/.riot/requirements/16a9524.txt deleted file mode 100644 index 988d6162a98..00000000000 --- a/.riot/requirements/16a9524.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/16a9524.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/16af7e0.txt b/.riot/requirements/16af7e0.txt index df479a84c64..8ade9c10320 100644 --- a/.riot/requirements/16af7e0.txt +++ b/.riot/requirements/16af7e0.txt @@ -12,10 +12,10 @@ cattrs==23.2.3 certifi==2024.7.4 charset-normalizer==3.3.2 coverage[toml]==7.5.4 -datadog==0.49.1 -datadog-lambda==6.96.0 +datadog==0.51.0 +datadog-lambda==6.105.0 ddsketch==3.0.1 -ddtrace==2.9.2 +ddtrace==2.20.0 deprecated==1.2.14 envier==0.5.2 exceptiongroup==1.2.1 diff --git a/.riot/requirements/16bfda8.txt b/.riot/requirements/16bfda8.txt deleted file mode 100644 index c72c2c40985..00000000000 --- a/.riot/requirements/16bfda8.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/16bfda8.in -# -attrs==23.1.0 -cassandra-driver==3.24.0 -click==8.1.7 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -geomet==0.2.1.post1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/16c3b9f.txt b/.riot/requirements/16c3b9f.txt deleted file mode 100644 index ac3ccd42fa3..00000000000 --- a/.riot/requirements/16c3b9f.txt +++ /dev/null @@ -1,84 +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/16c3b9f.in -# -ai21==3.0.1 -ai21-tokenizer==0.12.0 -aiohappyeyeballs==2.4.4 -aiohttp==3.11.10 -aiosignal==1.3.1 -anyio==4.7.0 -async-timeout==4.0.3 -attrs==24.2.0 -backoff==2.2.1 -certifi==2024.8.30 -charset-normalizer==3.4.0 -cohere==4.57 -coverage[toml]==7.6.9 -dataclasses-json==0.5.14 -dnspython==2.7.0 -exceptiongroup==1.2.2 -fastavro==1.9.7 -filelock==3.16.1 -frozenlist==1.5.0 -fsspec==2024.10.0 -greenlet==3.0.3 -h11==0.14.0 -httpcore==1.0.7 -httpx==0.27.2 -huggingface-hub==0.26.5 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.11.0 -iniconfig==2.0.0 -jsonpatch==1.33 -jsonpointer==3.0.0 -langchain==0.0.192 -langchain-community==0.0.14 -langchain-core==0.1.23 -langchainplus-sdk==0.0.4 -langsmith==0.0.87 -loguru==0.7.3 -marshmallow==3.23.1 -mock==5.1.0 -multidict==6.1.0 -mypy-extensions==1.0.0 -numexpr==2.8.5 -numpy==1.26.4 -openai==0.27.8 -openapi-schema-pydantic==1.2.4 -opentracing==2.4.0 -packaging==23.2 -pinecone-client==2.2.4 -pluggy==1.5.0 -propcache==0.2.1 -psutil==6.1.0 -pydantic==1.10.19 -pytest==8.3.4 -pytest-asyncio==0.23.7 -pytest-cov==6.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.10.1 -python-dateutil==2.9.0.post0 -pyyaml==6.0.2 -regex==2024.11.6 -requests==2.32.3 -sentencepiece==0.2.0 -six==1.17.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -sqlalchemy==2.0.36 -tenacity==8.5.0 -tiktoken==0.8.0 -tokenizers==0.21.0 -tomli==2.2.1 -tqdm==4.67.1 -typing-extensions==4.12.2 -typing-inspect==0.9.0 -urllib3==2.2.3 -vcrpy==6.0.1 -wrapt==1.17.0 -yarl==1.18.3 -zipp==3.21.0 diff --git a/.riot/requirements/16cae33.txt b/.riot/requirements/16cae33.txt deleted file mode 100644 index 0df83f49b08..00000000000 --- a/.riot/requirements/16cae33.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/16cae33.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -dnspython==2.3.0 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pymongo==4.7.3 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1727339.txt b/.riot/requirements/1727339.txt deleted file mode 100644 index 4934c8cbc73..00000000000 --- a/.riot/requirements/1727339.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1727339.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -glob2==0.7 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mako==1.2.4 -markupsafe==2.1.5 -mock==5.1.0 -more-itertools==8.10.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==23.2 -parse==1.20.1 -parse-type==0.6.2 -pluggy==1.2.0 -py==1.11.0 -pytest==7.4.4 -pytest-bdd==6.0.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/173b99c.txt b/.riot/requirements/173b99c.txt deleted file mode 100644 index 80d3f10ffb8..00000000000 --- a/.riot/requirements/173b99c.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/173b99c.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pymysql==1.1.1 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/175a85c.txt b/.riot/requirements/175a85c.txt deleted file mode 100644 index 30ac0574719..00000000000 --- a/.riot/requirements/175a85c.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/175a85c.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/176250f.txt b/.riot/requirements/176250f.txt deleted file mode 100644 index 9d62cfd2bed..00000000000 --- a/.riot/requirements/176250f.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/176250f.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.2.7 -elasticsearch==7.17.9 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.18 -zipp==3.15.0 diff --git a/.riot/requirements/178099a.txt b/.riot/requirements/178099a.txt deleted file mode 100644 index 5cf0e55f6f4..00000000000 --- a/.riot/requirements/178099a.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/178099a.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/179337c.txt b/.riot/requirements/179337c.txt deleted file mode 100644 index f4b44745053..00000000000 --- a/.riot/requirements/179337c.txt +++ /dev/null @@ -1,40 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/179337c.in -# -annotated-types==0.7.0 -attrs==23.2.0 -blinker==1.8.2 -certifi==2024.6.2 -charset-normalizer==3.3.2 -click==8.1.7 -coverage[toml]==7.5.4 -exceptiongroup==1.2.1 -flask==2.3.3 -flask-openapi3==3.1.3 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 -iniconfig==2.0.0 -itsdangerous==2.2.0 -jinja2==3.1.4 -markupsafe==2.1.5 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pydantic==2.8.0 -pydantic-core==2.20.0 -pytest==8.2.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -requests==2.32.3 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.12.2 -urllib3==1.26.19 -werkzeug==2.3.8 -zipp==3.19.2 diff --git a/.riot/requirements/17a138f.txt b/.riot/requirements/17a138f.txt deleted file mode 100644 index d1cb51e0887..00000000000 --- a/.riot/requirements/17a138f.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/17a138f.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pymysql==1.1.1 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/17a7ba8.txt b/.riot/requirements/17a7ba8.txt deleted file mode 100644 index 7984fff1ed6..00000000000 --- a/.riot/requirements/17a7ba8.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/17a7ba8.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -falcon==3.1.3 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/17f0015.txt b/.riot/requirements/17f0015.txt deleted file mode 100644 index 9bfec9c3f80..00000000000 --- a/.riot/requirements/17f0015.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/17f0015.in -# -aiofiles==23.2.1 -anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.16.3 -httptools==0.6.0 -httpx==0.23.3 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==5.2.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.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.7.1 -ujson==5.7.0 -urllib3==2.0.7 -uvloop==0.18.0 -websockets==10.4 -zipp==3.15.0 diff --git a/.riot/requirements/1800709.txt b/.riot/requirements/1800709.txt deleted file mode 100644 index 9b8c05328b7..00000000000 --- a/.riot/requirements/1800709.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1800709.in -# -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opensearch-py[requests]==2.4.2 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.8.2 -requests==2.31.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/181216c.txt b/.riot/requirements/181216c.txt deleted file mode 100644 index ac739930363..00000000000 --- a/.riot/requirements/181216c.txt +++ /dev/null @@ -1,52 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/181216c.in -# -annotated-types==0.5.0 -anyio==3.7.1 -attrs==24.2.0 -cached-property==1.5.2 -certifi==2024.7.4 -coverage[toml]==7.2.7 -distro==1.9.0 -exceptiongroup==1.2.2 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.5 -numpy==1.21.6 -openai[datalib,embeddings]==1.30.1 -opentracing==2.4.0 -packaging==24.0 -pandas==1.3.5 -pandas-stubs==1.2.0.62 -pillow==9.5.0 -pluggy==1.2.0 -pydantic==2.5.3 -pydantic-core==2.14.6 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.9.0.post0 -pytz==2024.1 -pyyaml==6.0.1 -six==1.16.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -tqdm==4.66.5 -typing-extensions==4.7.1 -urllib3==1.26.19 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/1825740.txt b/.riot/requirements/1825740.txt deleted file mode 100644 index b4660fad985..00000000000 --- a/.riot/requirements/1825740.txt +++ /dev/null @@ -1,49 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1825740.in -# -aiohttp==3.8.6 -aiosignal==1.3.1 -async-timeout==4.0.3 -asynctest==0.13.0 -attrs==24.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -frozenlist==1.3.3 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -joblib==1.3.2 -mock==5.1.0 -multidict==6.0.5 -numpy==1.21.6 -openai==0.26.5 -opentracing==2.4.0 -packaging==24.0 -pillow==9.5.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -pyyaml==6.0.1 -requests==2.31.0 -scikit-learn==1.0.2 -scipy==1.7.3 -six==1.16.0 -sortedcontainers==2.4.0 -threadpoolctl==3.1.0 -tomli==2.0.1 -tqdm==4.66.5 -typing-extensions==4.7.1 -urllib3==1.26.19 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/1832584.txt b/.riot/requirements/1832584.txt deleted file mode 100644 index 7547f789297..00000000000 --- a/.riot/requirements/1832584.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1832584.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.2.7 -elastic-transport==8.11.0 -elasticsearch8==8.11.1 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/18695ab.txt b/.riot/requirements/18695ab.txt deleted file mode 100644 index 85d64016cdd..00000000000 --- a/.riot/requirements/18695ab.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/18695ab.in -# -astunparse==1.6.3 -attrs==23.2.0 -certifi==2024.6.2 -cffi==1.15.1 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -cryptography==42.0.7 -exceptiongroup==1.2.1 -googleapis-common-protos==1.63.1 -greenlet==3.0.3 -grpcio==1.62.2 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -protobuf==4.24.4 -psycopg2-binary==2.9.9 -pycparser==2.21 -pycryptodome==3.20.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -requests==2.31.0 -simplejson==3.19.2 -six==1.16.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.22 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -wheel==0.42.0 -zipp==3.15.0 diff --git a/.riot/requirements/186ece2.txt b/.riot/requirements/186ece2.txt deleted file mode 100644 index 79af56e0359..00000000000 --- a/.riot/requirements/186ece2.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/186ece2.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -redis==3.5.3 -redis-py-cluster==2.1.3 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1894fac.txt b/.riot/requirements/1894fac.txt deleted file mode 100644 index 7565d0dd040..00000000000 --- a/.riot/requirements/1894fac.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1894fac.in -# -anyio==3.7.1 -attrs==23.2.0 -certifi==2024.6.2 -coverage[toml]==7.2.7 -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==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -rfc3986[idna2008]==1.5.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/189753f.txt b/.riot/requirements/189753f.txt deleted file mode 100644 index 883bb29ec16..00000000000 --- a/.riot/requirements/189753f.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/189753f.in -# -attrs==23.1.0 -confluent-kafka==2.3.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/189a9da.txt b/.riot/requirements/189a9da.txt deleted file mode 100644 index 2d4ab01b347..00000000000 --- a/.riot/requirements/189a9da.txt +++ /dev/null @@ -1,54 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/189a9da.in -# -aiobotocore==2.3.1 -aiohttp==3.8.6 -aioitertools==0.11.0 -aiosignal==1.3.1 -async-timeout==4.0.3 -asynctest==0.13.0 -attrs==24.2.0 -botocore==1.24.21 -certifi==2024.12.14 -charset-normalizer==3.4.1 -coverage[toml]==7.2.7 -elastic-transport==8.13.1 -elasticsearch==8.14.0 -exceptiongroup==1.2.2 -frozenlist==1.3.3 -gevent==20.12.1 -greenlet==1.0.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -jmespath==1.0.1 -mock==5.1.0 -multidict==6.0.5 -opensearch-py==2.5.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pynamodb==5.5.1 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.9.0.post0 -requests==2.31.0 -six==1.17.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.20 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.15.0 -zope-event==5.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/18a9ce6.txt b/.riot/requirements/18a9ce6.txt deleted file mode 100644 index ead422ea6e6..00000000000 --- a/.riot/requirements/18a9ce6.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/18a9ce6.in -# -amqp==5.2.0 -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==4.13.0 -iniconfig==2.0.0 -kombu==5.0.2 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -vine==5.1.0 -zipp==3.15.0 diff --git a/.riot/requirements/18b1b66.txt b/.riot/requirements/18b1b66.txt deleted file mode 100644 index 606ca2c57c8..00000000000 --- a/.riot/requirements/18b1b66.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/18b1b66.in -# -attrs==24.2.0 -beautifulsoup4==4.12.3 -bottle==0.12.25 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -soupsieve==2.4.1 -tomli==2.0.1 -typing-extensions==4.7.1 -waitress==2.1.2 -webob==1.8.9 -webtest==3.0.1 -zipp==3.15.0 diff --git a/.riot/requirements/18b992e.txt b/.riot/requirements/18b992e.txt deleted file mode 100644 index b174912a77e..00000000000 --- a/.riot/requirements/18b992e.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/18b992e.in -# -attrs==23.2.0 -blinker==1.6.3 -click==7.1.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -flask==1.1.4 -flask-caching==1.10.1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -itsdangerous==1.1.0 -jinja2==2.11.3 -markupsafe==1.1.1 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-memcached==1.62 -redis==2.10.6 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -werkzeug==1.0.1 -zipp==3.15.0 diff --git a/.riot/requirements/18c939b.txt b/.riot/requirements/18c939b.txt deleted file mode 100644 index c25e6b38593..00000000000 --- a/.riot/requirements/18c939b.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/18c939b.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.0.5 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/18de44f.txt b/.riot/requirements/18de44f.txt new file mode 100644 index 00000000000..702b980c641 --- /dev/null +++ b/.riot/requirements/18de44f.txt @@ -0,0 +1,52 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --no-annotate --resolver=backtracking .riot/requirements/18de44f.in +# +annotated-types==0.7.0 +anyio==4.5.2 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.1 +distro==1.9.0 +exceptiongroup==1.2.2 +h11==0.14.0 +httpcore==1.0.7 +httpx==0.28.1 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.5.0 +iniconfig==2.0.0 +jiter==0.8.2 +mock==5.1.0 +multidict==6.1.0 +openai==1.60.0 +opentracing==2.4.0 +packaging==24.2 +pillow==10.4.0 +pluggy==1.5.0 +propcache==0.2.0 +pydantic==2.10.5 +pydantic-core==2.27.2 +pytest==8.3.4 +pytest-asyncio==0.21.1 +pytest-cov==5.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.15.0 +pyyaml==6.0.2 +regex==2024.11.6 +requests==2.32.3 +six==1.17.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tiktoken==0.7.0 +tomli==2.2.1 +tqdm==4.67.1 +typing-extensions==4.12.2 +urllib3==1.26.20 +vcrpy==4.2.1 +wrapt==1.17.2 +yarl==1.15.2 +zipp==3.20.2 diff --git a/.riot/requirements/19065a8.txt b/.riot/requirements/19065a8.txt deleted file mode 100644 index c029f9be123..00000000000 --- a/.riot/requirements/19065a8.txt +++ /dev/null @@ -1,50 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/19065a8.in -# -annotated-types==0.5.0 -anyio==3.7.1 -attrs==24.2.0 -boto3==1.33.13 -botocore==1.33.13 -certifi==2024.8.30 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -fastapi==0.103.2 -h11==0.14.0 -httpcore==0.17.3 -httpretty==1.1.4 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -jmespath==1.0.1 -mock==5.1.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pydantic==2.5.3 -pydantic-core==2.14.6 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.9.0.post0 -s3transfer==0.8.2 -six==1.16.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.27.0 -structlog==23.1.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.20 -wheel==0.42.0 -zipp==3.15.0 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/192924c.txt b/.riot/requirements/192924c.txt deleted file mode 100644 index 9e1acf283a2..00000000000 --- a/.riot/requirements/192924c.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/192924c.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -gunicorn==22.0.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -protobuf==3.8.0 -py-cpuinfo==8.0.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -uwsgi==2.0.26 -zipp==3.15.0 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/1965d6b.txt b/.riot/requirements/1965d6b.txt new file mode 100644 index 00000000000..71a4f91d8cf --- /dev/null +++ b/.riot/requirements/1965d6b.txt @@ -0,0 +1,45 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1965d6b.in +# +attrs==25.1.0 +boto3==1.36.10 +botocore==1.36.10 +bytecode==0.16.1 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +datadog==0.51.0 +datadog-lambda==6.105.0 +ddtrace==2.20.0 +deprecated==1.2.18 +envier==0.5.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.29.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==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +python-dateutil==2.9.0.post0 +requests==2.32.3 +s3transfer==0.11.2 +six==1.17.0 +sortedcontainers==2.4.0 +typing-extensions==4.12.2 +ujson==5.10.0 +urllib3==2.3.0 +wrapt==1.17.2 +xmltodict==0.14.2 +zipp==3.21.0 diff --git a/.riot/requirements/19b9cf0.txt b/.riot/requirements/19b9cf0.txt deleted file mode 100644 index 032dea00937..00000000000 --- a/.riot/requirements/19b9cf0.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/19b9cf0.in -# -aiofiles==23.2.1 -anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.16.3 -httptools==0.6.0 -httpx==0.23.3 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==5.2.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.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.7.1 -ujson==5.7.0 -urllib3==2.0.7 -uvloop==0.18.0 -websockets==10.4 -zipp==3.15.0 diff --git a/.riot/requirements/19cce5d.txt b/.riot/requirements/19cce5d.txt deleted file mode 100644 index b0b031c57b4..00000000000 --- a/.riot/requirements/19cce5d.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/19cce5d.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -tornado==4.5.3 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/19e4a89.txt b/.riot/requirements/19e4a89.txt deleted file mode 100644 index a43fb84b853..00000000000 --- a/.riot/requirements/19e4a89.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/19e4a89.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -greenlet==3.0.3 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.0.33 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -protobuf==3.20.3 -psycopg2-binary==2.9.9 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -sqlalchemy==1.3.24 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/19e9356.txt b/.riot/requirements/19e9356.txt deleted file mode 100644 index 1893291ee15..00000000000 --- a/.riot/requirements/19e9356.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/19e9356.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -mysqlclient==2.1.1 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1a06ac7.txt b/.riot/requirements/1a06ac7.txt deleted file mode 100644 index 010713c7820..00000000000 --- a/.riot/requirements/1a06ac7.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1a06ac7.in -# -algoliasearch==2.6.3 -attrs==24.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.19 -zipp==3.15.0 diff --git a/.riot/requirements/1a3be97.txt b/.riot/requirements/1a3be97.txt deleted file mode 100644 index 548a87dcdfc..00000000000 --- a/.riot/requirements/1a3be97.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1a3be97.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.2.7 -elasticsearch==7.13.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.18 -zipp==3.15.0 diff --git a/.riot/requirements/1a45d73.txt b/.riot/requirements/1a45d73.txt deleted file mode 100644 index f4a421190c0..00000000000 --- a/.riot/requirements/1a45d73.txt +++ /dev/null @@ -1,37 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1a45d73.in -# -attrs==23.2.0 -cheroot==10.0.1 -cherrypy==17.4.2 -contextlib2==21.6.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -jaraco-functools==3.7.0 -mock==5.1.0 -more-itertools==8.10.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -portend==3.1.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -pytz==2024.1 -six==1.16.0 -sortedcontainers==2.4.0 -tempora==5.3.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zc-lockfile==3.0.post1 -zipp==3.15.0 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/1a48ea2.txt b/.riot/requirements/1a48ea2.txt deleted file mode 100644 index 8b34722dea6..00000000000 --- a/.riot/requirements/1a48ea2.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1a48ea2.in -# -asgiref==3.7.2 -attrs==23.2.0 -coverage[toml]==7.2.7 -django==3.2.25 -django-configurations==2.4.2 -djangorestframework==3.11.2 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -pytz==2024.1 -six==1.16.0 -sortedcontainers==2.4.0 -sqlparse==0.4.4 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1a4f181.txt b/.riot/requirements/1a4f181.txt deleted file mode 100644 index f01b5c2b169..00000000000 --- a/.riot/requirements/1a4f181.txt +++ /dev/null @@ -1,51 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1a4f181.in -# -annotated-types==0.5.0 -anyio==3.7.1 -attrs==22.1.0 -boto3==1.33.13 -botocore==1.33.13 -cattrs==23.1.2 -certifi==2024.8.30 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -fastapi==0.103.2 -h11==0.14.0 -httpcore==0.17.3 -httpretty==1.1.4 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -jmespath==1.0.1 -mock==5.1.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pydantic==2.5.3 -pydantic-core==2.14.6 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.9.0.post0 -s3transfer==0.8.2 -six==1.16.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.27.0 -structlog==23.1.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.20 -wheel==0.42.0 -zipp==3.15.0 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/1a508dc.txt b/.riot/requirements/1a508dc.txt index 6e2dfecef5e..3011d06795c 100644 --- a/.riot/requirements/1a508dc.txt +++ b/.riot/requirements/1a508dc.txt @@ -2,11 +2,11 @@ # This file is autogenerated by pip-compile with Python 3.13 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1a508dc.in +# pip-compile --no-annotate .riot/requirements/1a508dc.in # asgiref==3.8.1 -attrs==24.2.0 -coverage[toml]==7.6.1 +attrs==25.1.0 +coverage[toml]==7.6.10 django==3.2.25 django-configurations==2.5.1 django-hosts==4.0 @@ -14,17 +14,17 @@ hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.3 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-django[testing]==3.10.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 pytz==2024.2 -six==1.16.0 +six==1.17.0 sortedcontainers==2.4.0 -sqlparse==0.5.1 +sqlparse==0.5.3 # The following packages are considered to be unsafe in a requirements file: -setuptools==75.1.0 +setuptools diff --git a/.riot/requirements/1aa3fad.txt b/.riot/requirements/1aa3fad.txt deleted file mode 100644 index f23d1c43824..00000000000 --- a/.riot/requirements/1aa3fad.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1aa3fad.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -tornado==6.2 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1aa41b2.txt b/.riot/requirements/1aa41b2.txt deleted file mode 100644 index 79322e51fe1..00000000000 --- a/.riot/requirements/1aa41b2.txt +++ /dev/null @@ -1,77 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/1aa41b2.in -# -arrow==1.2.3 -asgiref==3.7.2 -attrs==24.2.0 -autobahn==23.1.2 -automat==22.10.0 -bcrypt==4.2.1 -blessed==1.20.0 -cached-property==1.5.2 -certifi==2024.12.14 -cffi==1.15.1 -channels==4.0.0 -charset-normalizer==3.4.0 -constantly==15.1.0 -coverage[toml]==7.2.7 -cryptography==44.0.0 -daphne==4.0.0 -django==3.2.25 -django-configurations==2.4.2 -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==6.7.0 -incremental==22.10.0 -iniconfig==2.0.0 -isodate==0.7.2 -lxml==5.3.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -platformdirs==4.0.0 -pluggy==1.2.0 -psycopg2-binary==2.9.9 -pyasn1==0.5.1 -pyasn1-modules==0.3.0 -pycparser==2.21 -pylibmc==1.6.3 -pyopenssl==24.3.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.9.0.post0 -python-memcached==1.62 -pytz==2024.2 -redis==2.10.6 -requests==2.31.0 -requests-file==2.1.0 -requests-toolbelt==1.0.0 -service-identity==21.1.0 -six==1.17.0 -sortedcontainers==2.4.0 -spyne==2.14.0 -sqlparse==0.4.4 -tomli==2.0.1 -twisted[tls]==23.8.0 -txaio==23.1.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -wcwidth==0.2.13 -zeep==4.2.1 -zipp==3.15.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/1aaf6f6.txt b/.riot/requirements/1aaf6f6.txt deleted file mode 100644 index 5c36c6f9871..00000000000 --- a/.riot/requirements/1aaf6f6.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/1aaf6f6.in -# -attrs==23.2.0 -boto3==1.34.139 -botocore==1.34.139 -bytecode==0.15.1 -cattrs==23.2.3 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.5.4 -datadog==0.49.1 -datadog-lambda==6.96.0 -ddsketch==3.0.1 -ddtrace==2.9.2 -deprecated==1.2.14 -envier==0.5.2 -exceptiongroup==1.2.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==7.1.0 -iniconfig==2.0.0 -jmespath==1.0.1 -mock==5.1.0 -opentelemetry-api==1.26.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -protobuf==5.27.2 -pytest==8.2.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -requests==2.32.3 -s3transfer==0.10.2 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.12.2 -ujson==5.10.0 -urllib3==1.26.19 -wrapt==1.16.0 -xmltodict==0.13.0 -zipp==3.19.2 diff --git a/.riot/requirements/1ac6ae8.txt b/.riot/requirements/1ac6ae8.txt deleted file mode 100644 index ec835d3a574..00000000000 --- a/.riot/requirements/1ac6ae8.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1ac6ae8.in -# -attrs==23.1.0 -cattrs==22.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -molten==1.0.2 -mypy-extensions==1.0.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==3.10.0.2 -typing-inspect==0.6.0 -zipp==3.15.0 diff --git a/.riot/requirements/1ad408c.txt b/.riot/requirements/1ad408c.txt deleted file mode 100644 index 363772cbdb7..00000000000 --- a/.riot/requirements/1ad408c.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1ad408c.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1ad89c5.txt b/.riot/requirements/1ad89c5.txt new file mode 100644 index 00000000000..b10206e12d9 --- /dev/null +++ b/.riot/requirements/1ad89c5.txt @@ -0,0 +1,50 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/1ad89c5.in +# +annotated-types==0.7.0 +anyio==4.8.0 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +distro==1.9.0 +exceptiongroup==1.2.2 +h11==0.14.0 +httpcore==1.0.7 +httpx==0.28.1 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.0.0 +jiter==0.8.2 +mock==5.1.0 +multidict==6.1.0 +openai==1.60.0 +opentracing==2.4.0 +packaging==24.2 +pillow==11.1.0 +pluggy==1.5.0 +propcache==0.2.1 +pydantic==2.10.5 +pydantic-core==2.27.2 +pytest==8.3.4 +pytest-asyncio==0.21.1 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +pyyaml==6.0.2 +regex==2024.11.6 +requests==2.32.3 +six==1.17.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tiktoken==0.8.0 +tomli==2.2.1 +tqdm==4.67.1 +typing-extensions==4.12.2 +urllib3==1.26.20 +vcrpy==4.2.1 +wrapt==1.17.2 +yarl==1.18.3 diff --git a/.riot/requirements/1aec773.txt b/.riot/requirements/1aec773.txt new file mode 100644 index 00000000000..813b6aa028c --- /dev/null +++ b/.riot/requirements/1aec773.txt @@ -0,0 +1,45 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1aec773.in +# +attrs==25.1.0 +boto3==1.36.10 +botocore==1.36.10 +bytecode==0.16.1 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +datadog==0.51.0 +datadog-lambda==6.105.0 +ddtrace==2.20.0 +deprecated==1.2.18 +envier==0.5.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.29.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==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +python-dateutil==2.9.0.post0 +requests==2.32.3 +s3transfer==0.11.2 +six==1.17.0 +sortedcontainers==2.4.0 +typing-extensions==4.12.2 +ujson==5.10.0 +urllib3==2.3.0 +wrapt==1.17.2 +xmltodict==0.14.2 +zipp==3.21.0 diff --git a/.riot/requirements/1aedbda.txt b/.riot/requirements/1aedbda.txt deleted file mode 100644 index 22280dbbcf1..00000000000 --- a/.riot/requirements/1aedbda.txt +++ /dev/null @@ -1,40 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1aedbda.in -# -astunparse==1.6.3 -attrs==23.2.0 -certifi==2024.6.2 -cffi==1.16.0 -charset-normalizer==3.3.2 -coverage[toml]==7.5.3 -cryptography==42.0.7 -exceptiongroup==1.2.1 -googleapis-common-protos==1.63.1 -greenlet==3.0.3 -grpcio==1.64.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.5.0 -protobuf==5.27.0 -psycopg2-binary==2.9.9 -pycparser==2.22 -pycryptodome==3.20.0 -pytest==8.2.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -requests==2.32.3 -simplejson==3.19.2 -six==1.16.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.22 -tomli==2.0.1 -typing-extensions==4.12.1 -urllib3==2.2.1 -wheel==0.43.0 diff --git a/.riot/requirements/1b086a5.txt b/.riot/requirements/1b086a5.txt deleted file mode 100644 index ff9e9fd4b4a..00000000000 --- a/.riot/requirements/1b086a5.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1b086a5.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1b18826.txt b/.riot/requirements/1b18826.txt deleted file mode 100644 index 22a65cb550c..00000000000 --- a/.riot/requirements/1b18826.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1b18826.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.18 -zipp==3.15.0 diff --git a/.riot/requirements/1b2734d.txt b/.riot/requirements/1b2734d.txt deleted file mode 100644 index 8f15374e0f6..00000000000 --- a/.riot/requirements/1b2734d.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1b2734d.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1b73c58.txt b/.riot/requirements/1b73c58.txt deleted file mode 100644 index 19a201fee30..00000000000 --- a/.riot/requirements/1b73c58.txt +++ /dev/null @@ -1,37 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1b73c58.in -# -attrs==24.2.0 -certifi==2024.12.14 -charset-normalizer==3.4.1 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -gevent==22.10.2 -greenlet==3.1.1 -gunicorn==20.0.4 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 -zope-event==5.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/1b84c4a.txt b/.riot/requirements/1b84c4a.txt deleted file mode 100644 index 3e9d0bf584e..00000000000 --- a/.riot/requirements/1b84c4a.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1b84c4a.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1b99e47.txt b/.riot/requirements/1b99e47.txt deleted file mode 100644 index db56e0823c3..00000000000 --- a/.riot/requirements/1b99e47.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1b99e47.in -# -amqp==2.6.1 -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==4.13.0 -iniconfig==2.0.0 -kombu==4.6.11 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -vine==1.3.0 -zipp==3.15.0 diff --git a/.riot/requirements/1ba8c21.txt b/.riot/requirements/1ba8c21.txt deleted file mode 100644 index e1c95dcb703..00000000000 --- a/.riot/requirements/1ba8c21.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1ba8c21.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -dnspython==2.3.0 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pymongo==4.7.3 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1bb4e1c.txt b/.riot/requirements/1bb4e1c.txt deleted file mode 100644 index d9dd443d6f2..00000000000 --- a/.riot/requirements/1bb4e1c.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1bb4e1c.in -# -attrs==23.2.0 -certifi==2024.2.2 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -docker==6.1.3 -exceptiongroup==1.2.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -requests==2.31.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -websocket-client==1.6.1 -zipp==3.15.0 diff --git a/.riot/requirements/1bb88c9.txt b/.riot/requirements/1bb88c9.txt deleted file mode 100644 index 589c1ce6c25..00000000000 --- a/.riot/requirements/1bb88c9.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1bb88c9.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -tornado==5.1.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1bbc5e0.txt b/.riot/requirements/1bbc5e0.txt deleted file mode 100644 index 117147b24ac..00000000000 --- a/.riot/requirements/1bbc5e0.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1bbc5e0.in -# -attrs==23.2.0 -blinker==1.6.3 -cachelib==0.9.0 -click==8.1.7 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -flask==2.2.5 -flask-caching==2.1.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -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.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-memcached==1.62 -redis==2.10.6 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -werkzeug==2.2.3 -zipp==3.15.0 diff --git a/.riot/requirements/1bcefe4.txt b/.riot/requirements/1bcefe4.txt deleted file mode 100644 index 360df91aa5e..00000000000 --- a/.riot/requirements/1bcefe4.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/1bcefe4.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -googleapis-common-protos==1.65.0 -grpcio==1.59.5 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -protobuf==4.24.4 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1be3cb3.txt b/.riot/requirements/1be3cb3.txt deleted file mode 100644 index de6a7df8ae4..00000000000 --- a/.riot/requirements/1be3cb3.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1be3cb3.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -structlog==20.2.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/cd2e4ea.txt b/.riot/requirements/1c1f9ea.txt similarity index 51% rename from .riot/requirements/cd2e4ea.txt rename to .riot/requirements/1c1f9ea.txt index 24353dafa0c..69974431395 100644 --- a/.riot/requirements/cd2e4ea.txt +++ b/.riot/requirements/1c1f9ea.txt @@ -2,52 +2,53 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/cd2e4ea.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1c1f9ea.in # annotated-types==0.7.0 anyio==3.7.1 -attrs==24.2.0 -certifi==2024.7.4 -coverage[toml]==7.6.1 +attrs==25.1.0 +certifi==2024.12.14 +coverage[toml]==7.6.10 distro==1.9.0 exceptiongroup==1.2.2 h11==0.14.0 -httpcore==1.0.5 -httpx==0.27.0 +httpcore==1.0.7 +httpx==0.27.2 hypothesis==6.45.0 -idna==3.8 -importlib-metadata==8.4.0 +idna==3.10 +importlib-metadata==8.6.1 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.5 -numpy==2.0.1 -openai[datalib,embeddings]==1.1.1 +multidict==6.1.0 +numpy==2.0.2 +openai[datalib,embeddings]==1.0.0 opentracing==2.4.0 -packaging==24.1 -pandas==2.2.2 +packaging==24.2 +pandas==2.2.3 pandas-stubs==2.2.2.240807 pillow==9.5.0 pluggy==1.5.0 -pydantic==2.8.2 -pydantic-core==2.20.1 -pytest==8.3.2 +propcache==0.2.1 +pydantic==2.10.6 +pydantic-core==2.27.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 python-dateutil==2.9.0.post0 -pytz==2024.1 +pytz==2024.2 pyyaml==6.0.2 -six==1.16.0 +six==1.17.0 sniffio==1.3.1 sortedcontainers==2.4.0 -tomli==2.0.1 -tqdm==4.66.5 -types-pytz==2024.1.0.20240417 +tomli==2.2.1 +tqdm==4.67.1 +types-pytz==2024.2.0.20241221 typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==1.26.19 +tzdata==2025.1 +urllib3==1.26.20 vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.20.1 +wrapt==1.17.2 +yarl==1.18.3 +zipp==3.21.0 diff --git a/.riot/requirements/1c277a3.txt b/.riot/requirements/1c277a3.txt deleted file mode 100644 index ca17e4016f3..00000000000 --- a/.riot/requirements/1c277a3.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1c277a3.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -mysqlclient==2.1.1 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1c36982.txt b/.riot/requirements/1c36982.txt deleted file mode 100644 index ab91743352a..00000000000 --- a/.riot/requirements/1c36982.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1c36982.in -# -amqp==5.2.0 -attrs==24.2.0 -cached-property==1.5.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==4.13.0 -iniconfig==2.0.0 -kombu==5.2.4 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -vine==5.1.0 -zipp==3.15.0 diff --git a/.riot/requirements/1c489e9.txt b/.riot/requirements/1c489e9.txt deleted file mode 100644 index 92254158db9..00000000000 --- a/.riot/requirements/1c489e9.txt +++ /dev/null @@ -1,41 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1c489e9.in -# -aiofiles==23.2.1 -aiosqlite==0.19.0 -anyio==3.7.1 -attrs==24.2.0 -certifi==2024.8.30 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -databases==0.8.0 -exceptiongroup==1.2.2 -greenlet==3.0.3 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -sqlalchemy==1.4.54 -starlette==0.29.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/1c5df59.txt b/.riot/requirements/1c5df59.txt deleted file mode 100644 index e913f737172..00000000000 --- a/.riot/requirements/1c5df59.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1c5df59.in -# -aiohttp==3.8.6 -aiosignal==1.3.1 -async-timeout==4.0.3 -asynctest==0.13.0 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -elastic-transport==8.11.0 -elasticsearch[async]==8.11.1 -elasticsearch7[async]==7.17.9 -exceptiongroup==1.2.0 -frozenlist==1.3.3 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.4 -opensearch-py[async]==2.4.2 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.8.2 -requests==2.31.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.18 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/1c6f756.txt b/.riot/requirements/1c6f756.txt deleted file mode 100644 index a7d6f97293a..00000000000 --- a/.riot/requirements/1c6f756.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1c6f756.in -# -attrs==23.1.0 -cattrs==22.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -molten==1.0.2 -mypy-extensions==1.0.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==3.10.0.2 -typing-inspect==0.6.0 -zipp==3.15.0 diff --git a/.riot/requirements/1cb9194.txt b/.riot/requirements/1cb9194.txt deleted file mode 100644 index 8a5e9be047f..00000000000 --- a/.riot/requirements/1cb9194.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1cb9194.in -# -amqp==2.6.1 -atomicwrites==1.4.1 -attrs==23.2.0 -billiard==3.6.4.0 -celery==4.4.7 -coverage[toml]==7.2.7 -exceptiongroup==1.2.1 -hypothesis==6.45.0 -importlib-metadata==4.13.0 -kombu==4.6.11 -mock==5.1.0 -more-itertools==8.10.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==0.13.1 -py==1.11.0 -pytest==4.6.11 -pytest-cov==3.0.0 -pytest-mock==2.0.0 -pytest-randomly==3.12.0 -pytz==2024.1 -redis==3.5.3 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -vine==1.3.0 -wcwidth==0.2.13 -zipp==3.15.0 diff --git a/.riot/requirements/1ccd2df.txt b/.riot/requirements/1ccd2df.txt deleted file mode 100644 index 978f386e4c6..00000000000 --- a/.riot/requirements/1ccd2df.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1ccd2df.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -psycopg2-binary==2.9.9 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1cd8f95.txt b/.riot/requirements/1cd8f95.txt deleted file mode 100644 index fbad1d4f0ec..00000000000 --- a/.riot/requirements/1cd8f95.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1cd8f95.in -# -aiopg==1.4.0 -async-timeout==4.0.3 -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -greenlet==3.0.3 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -psycopg2-binary==2.9.9 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.29 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1d6a1a5.txt b/.riot/requirements/1d6a1a5.txt deleted file mode 100644 index 8c33bbe9819..00000000000 --- a/.riot/requirements/1d6a1a5.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1d6a1a5.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -gevent==22.10.2 -greenlet==3.1.1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 -zope-event==5.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/1d73048.txt b/.riot/requirements/1d73048.txt deleted file mode 100644 index 0d8a063b5d1..00000000000 --- a/.riot/requirements/1d73048.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1d73048.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1db4b5f.txt b/.riot/requirements/1db4b5f.txt deleted file mode 100644 index fdb88ccbd84..00000000000 --- a/.riot/requirements/1db4b5f.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1db4b5f.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1dcd050.txt b/.riot/requirements/1dcd050.txt deleted file mode 100644 index 97f73b4f139..00000000000 --- a/.riot/requirements/1dcd050.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1dcd050.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -yaaredis==2.0.4 -zipp==3.15.0 diff --git a/.riot/requirements/1df4767.txt b/.riot/requirements/1df4767.txt deleted file mode 100644 index f9cab2ccfd7..00000000000 --- a/.riot/requirements/1df4767.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1df4767.in -# -anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1e2fbcd.txt b/.riot/requirements/1e2fbcd.txt deleted file mode 100644 index feaa8e3a345..00000000000 --- a/.riot/requirements/1e2fbcd.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1e2fbcd.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mariadb==1.0.11 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1e37fde.txt b/.riot/requirements/1e37fde.txt deleted file mode 100644 index a739864c0a5..00000000000 --- a/.riot/requirements/1e37fde.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1e37fde.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1db5311.txt b/.riot/requirements/1e6bd37.txt similarity index 55% rename from .riot/requirements/1db5311.txt rename to .riot/requirements/1e6bd37.txt index c29bc9bdb8f..11bb5871c14 100644 --- a/.riot/requirements/1db5311.txt +++ b/.riot/requirements/1e6bd37.txt @@ -2,52 +2,53 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1db5311.in +# pip-compile --no-annotate --resolver=backtracking .riot/requirements/1e6bd37.in # annotated-types==0.7.0 -anyio==4.4.0 -attrs==24.2.0 -certifi==2024.7.4 +anyio==4.5.2 +attrs==24.3.0 +certifi==2024.12.14 coverage[toml]==7.6.1 distro==1.9.0 exceptiongroup==1.2.2 h11==0.14.0 -httpcore==1.0.5 -httpx==0.27.0 +httpcore==1.0.7 +httpx==0.27.2 hypothesis==6.45.0 -idna==3.8 -importlib-metadata==8.4.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.5 +multidict==6.1.0 numpy==1.24.4 openai[datalib,embeddings]==1.30.1 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pandas==2.0.3 pandas-stubs==2.0.3.230814 pillow==9.5.0 pluggy==1.5.0 -pydantic==2.8.2 -pydantic-core==2.20.1 -pytest==8.3.2 +propcache==0.2.0 +pydantic==2.10.5 +pydantic-core==2.27.2 +pytest==8.3.4 pytest-asyncio==0.21.1 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 python-dateutil==2.9.0.post0 -pytz==2024.1 +pytz==2024.2 pyyaml==6.0.2 -six==1.16.0 +six==1.17.0 sniffio==1.3.1 sortedcontainers==2.4.0 -tomli==2.0.1 -tqdm==4.66.5 -types-pytz==2024.1.0.20240417 +tomli==2.2.1 +tqdm==4.67.1 +types-pytz==2024.2.0.20241221 typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==1.26.19 +tzdata==2025.1 +urllib3==1.26.20 vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.20.1 +wrapt==1.17.2 +yarl==1.15.2 +zipp==3.20.2 diff --git a/.riot/requirements/1e7c940.txt b/.riot/requirements/1e7c940.txt deleted file mode 100644 index 282fc6dfa04..00000000000 --- a/.riot/requirements/1e7c940.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1e7c940.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.25 -zipp==3.15.0 diff --git a/.riot/requirements/1e93f9f.txt b/.riot/requirements/1e93f9f.txt deleted file mode 100644 index 8924a260c22..00000000000 --- a/.riot/requirements/1e93f9f.txt +++ /dev/null @@ -1,40 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.8 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/1e93f9f.in -# -annotated-types==0.7.0 -attrs==23.2.0 -blinker==1.8.2 -certifi==2024.6.2 -charset-normalizer==3.3.2 -click==8.1.7 -coverage[toml]==7.5.4 -exceptiongroup==1.2.1 -flask==2.3.3 -flask-openapi3==3.1.3 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 -iniconfig==2.0.0 -itsdangerous==2.2.0 -jinja2==3.1.4 -markupsafe==2.1.5 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pydantic==2.8.0 -pydantic-core==2.20.0 -pytest==8.2.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -requests==2.32.3 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.12.2 -urllib3==1.26.19 -werkzeug==2.3.8 -zipp==3.19.2 diff --git a/.riot/requirements/1e9b9b9.txt b/.riot/requirements/1e9b9b9.txt deleted file mode 100644 index 7f71692a48c..00000000000 --- a/.riot/requirements/1e9b9b9.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1e9b9b9.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.2.7 -elastic-transport==8.11.0 -elasticsearch==8.0.1 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/1ec15f5.txt b/.riot/requirements/1ec15f5.txt deleted file mode 100644 index b4479a2fb39..00000000000 --- a/.riot/requirements/1ec15f5.txt +++ /dev/null @@ -1,57 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/1ec15f5.in -# -annotated-types==0.7.0 -anyio==4.4.0 -attrs==24.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.1 -distro==1.9.0 -exceptiongroup==1.2.2 -h11==0.14.0 -httpcore==1.0.5 -httpx==0.27.0 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==8.4.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.5 -numpy==2.0.1 -openai[datalib]==1.30.1 -opentracing==2.4.0 -packaging==24.1 -pandas==2.2.2 -pandas-stubs==2.2.2.240807 -pillow==10.1.0 -pluggy==1.5.0 -pydantic==2.8.2 -pydantic-core==2.20.1 -pytest==8.3.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -pytz==2024.1 -pyyaml==6.0.2 -regex==2024.7.24 -requests==2.32.3 -six==1.16.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tiktoken==0.7.0 -tomli==2.0.1 -tqdm==4.66.5 -types-pytz==2024.1.0.20240417 -typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==1.26.19 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.20.1 diff --git a/.riot/requirements/1ecfbd7.txt b/.riot/requirements/1ecfbd7.txt new file mode 100644 index 00000000000..165bdc2dde6 --- /dev/null +++ b/.riot/requirements/1ecfbd7.txt @@ -0,0 +1,46 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/1ecfbd7.in +# +attrs==25.1.0 +boto3==1.36.10 +botocore==1.36.10 +bytecode==0.16.1 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +datadog==0.51.0 +datadog-lambda==6.105.0 +ddtrace==2.20.0 +deprecated==1.2.18 +envier==0.5.2 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.5.0 +iniconfig==2.0.0 +jmespath==1.0.1 +legacy-cgi==2.6.2 +mock==5.1.0 +opentelemetry-api==1.29.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==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +python-dateutil==2.9.0.post0 +requests==2.32.3 +s3transfer==0.11.2 +six==1.17.0 +sortedcontainers==2.4.0 +typing-extensions==4.12.2 +ujson==5.10.0 +urllib3==2.3.0 +wrapt==1.17.2 +xmltodict==0.14.2 +zipp==3.21.0 diff --git a/.riot/requirements/1ed6ce0.txt b/.riot/requirements/1ed6ce0.txt deleted file mode 100644 index a51ab00415d..00000000000 --- a/.riot/requirements/1ed6ce0.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/1ed6ce0.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -dnspython==2.3.0 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pymongo==4.7.3 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1ee49b9.txt b/.riot/requirements/1ee49b9.txt deleted file mode 100644 index f170e2885c4..00000000000 --- a/.riot/requirements/1ee49b9.txt +++ /dev/null @@ -1,53 +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/1ee49b9.in -# -annotated-types==0.7.0 -anyio==4.4.0 -attrs==24.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.1 -distro==1.9.0 -h11==0.14.0 -httpcore==1.0.5 -httpx==0.27.0 -hypothesis==6.45.0 -idna==3.8 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.5 -numpy==2.1.0 -openai[datalib]==1.30.1 -opentracing==2.4.0 -packaging==24.1 -pandas==2.2.2 -pandas-stubs==2.2.2.240807 -pillow==10.1.0 -pluggy==1.5.0 -pydantic==2.8.2 -pydantic-core==2.20.1 -pytest==8.3.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -pytz==2024.1 -pyyaml==6.0.2 -regex==2024.7.24 -requests==2.32.3 -six==1.16.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tiktoken==0.7.0 -tqdm==4.66.5 -types-pytz==2024.1.0.20240417 -typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==1.26.19 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 diff --git a/.riot/requirements/1f11fb6.txt b/.riot/requirements/1f11fb6.txt deleted file mode 100644 index 3dd008ccf49..00000000000 --- a/.riot/requirements/1f11fb6.txt +++ /dev/null @@ -1,40 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1f11fb6.in -# -aiofiles==23.2.1 -anyio==3.7.1 -attrs==24.2.0 -certifi==2024.12.14 -charset-normalizer==3.4.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -fastapi==0.90.1 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pydantic==1.10.19 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-multipart==0.0.8 -requests==2.31.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.23.1 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/1f30147.txt b/.riot/requirements/1f30147.txt deleted file mode 100644 index ad1d53dbfb0..00000000000 --- a/.riot/requirements/1f30147.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1f30147.in -# -asn1crypto==1.5.1 -attrs==23.2.0 -certifi==2024.7.4 -cffi==1.15.1 -charset-normalizer==2.1.1 -coverage[toml]==7.2.7 -cryptography==38.0.4 -exceptiongroup==1.2.2 -filelock==3.12.2 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -oscrypto==1.3.0 -packaging==24.0 -pluggy==1.2.0 -pycparser==2.21 -pycryptodomex==3.20.0 -pyjwt==2.8.0 -pyopenssl==22.1.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -pytz==2024.1 -requests==2.31.0 -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.7.1 -urllib3==1.26.19 -zipp==3.15.0 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/1f66fe3.txt b/.riot/requirements/1f66fe3.txt deleted file mode 100644 index 2c77a9f587a..00000000000 --- a/.riot/requirements/1f66fe3.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1f66fe3.in -# -attrs==23.2.0 -blinker==1.6.3 -cachelib==0.9.0 -click==7.1.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -flask==1.1.4 -flask-caching==2.1.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -itsdangerous==1.1.0 -jinja2==2.11.3 -markupsafe==1.1.1 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-memcached==1.62 -redis==2.10.6 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -werkzeug==1.0.1 -zipp==3.15.0 diff --git a/.riot/requirements/1fa807e.txt b/.riot/requirements/1fa807e.txt index ca1c67d95b6..445f66032c8 100644 --- a/.riot/requirements/1fa807e.txt +++ b/.riot/requirements/1fa807e.txt @@ -12,10 +12,10 @@ cattrs==23.2.3 certifi==2024.7.4 charset-normalizer==3.3.2 coverage[toml]==7.5.4 -datadog==0.49.1 -datadog-lambda==6.96.0 +datadog==0.51.0 +datadog-lambda==6.105.0 ddsketch==3.0.1 -ddtrace==2.9.2 +ddtrace==2.20.0 deprecated==1.2.14 envier==0.5.2 exceptiongroup==1.2.1 diff --git a/.riot/requirements/1faec17.txt b/.riot/requirements/1faec17.txt deleted file mode 100644 index 3140244a57e..00000000000 --- a/.riot/requirements/1faec17.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1faec17.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -yaaredis==3.0.0 -zipp==3.15.0 diff --git a/.riot/requirements/1fb546b.txt b/.riot/requirements/1fb546b.txt deleted file mode 100644 index db8cfaa698a..00000000000 --- a/.riot/requirements/1fb546b.txt +++ /dev/null @@ -1,47 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1fb546b.in -# -attrs==23.2.0 -beautifulsoup4==4.12.3 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hupper==1.12.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pastedeploy==3.1.0 -plaster==1.1.2 -plaster-pastedeploy==1.0.1 -pluggy==1.2.0 -pserve-test-app @ file:///root/project/tests/contrib/pyramid/pserve_app -pyramid==2.0.2 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sortedcontainers==2.4.0 -soupsieve==2.4.1 -tomli==2.0.1 -translationstring==1.4 -typing-extensions==4.7.1 -urllib3==2.0.7 -venusian==3.1.0 -waitress==2.1.2 -webob==1.8.7 -webtest==3.0.0 -zipp==3.15.0 -zope-deprecation==5.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/1fb6c68.txt b/.riot/requirements/1fb6c68.txt deleted file mode 100644 index 30a4b347ca3..00000000000 --- a/.riot/requirements/1fb6c68.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1fb6c68.in -# -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opensearch-py[requests]==2.0.1 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.18 -zipp==3.15.0 diff --git a/.riot/requirements/1fcbf26.txt b/.riot/requirements/1fcbf26.txt deleted file mode 100644 index 8ea4f8525ab..00000000000 --- a/.riot/requirements/1fcbf26.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/1fcbf26.in -# -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-consul==1.1.0 -requests==2.31.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/1fe5227.txt b/.riot/requirements/1fe5227.txt deleted file mode 100644 index bbed5f3cb5c..00000000000 --- a/.riot/requirements/1fe5227.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate --resolver=backtracking .riot/requirements/1fe5227.in -# -attrs==24.2.0 -avro==1.12.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/1feb806.txt b/.riot/requirements/1feb806.txt deleted file mode 100644 index 05db104bca1..00000000000 --- a/.riot/requirements/1feb806.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/1feb806.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -googleapis-common-protos==1.65.0 -grpcio==1.62.3 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -protobuf==4.24.4 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/20387f9.txt b/.riot/requirements/20387f9.txt deleted file mode 100644 index 91945b36420..00000000000 --- a/.riot/requirements/20387f9.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/20387f9.in -# -attrs==23.2.0 -certifi==2024.2.2 -chardet==3.0.4 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -idna==2.7 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.20.1 -requests-mock==1.11.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.24.3 -zipp==3.15.0 diff --git a/.riot/requirements/210a985.txt b/.riot/requirements/210a985.txt deleted file mode 100644 index 6b6c21301b4..00000000000 --- a/.riot/requirements/210a985.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/210a985.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -psycopg2-binary==2.9.9 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/220bd92.txt b/.riot/requirements/220bd92.txt deleted file mode 100644 index 37424083092..00000000000 --- a/.riot/requirements/220bd92.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/220bd92.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -mysqlclient==2.1.1 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/84ec59a.txt b/.riot/requirements/222519c.txt similarity index 60% rename from .riot/requirements/84ec59a.txt rename to .riot/requirements/222519c.txt index 9b079cf3a38..4bf34296b39 100644 --- a/.riot/requirements/84ec59a.txt +++ b/.riot/requirements/222519c.txt @@ -2,52 +2,53 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/84ec59a.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/222519c.in # annotated-types==0.7.0 anyio==3.7.1 -attrs==24.2.0 -certifi==2024.7.4 +attrs==25.1.0 +certifi==2024.12.14 coverage[toml]==7.6.1 distro==1.9.0 exceptiongroup==1.2.2 h11==0.14.0 -httpcore==1.0.5 -httpx==0.27.0 +httpcore==1.0.7 +httpx==0.27.2 hypothesis==6.45.0 -idna==3.8 -importlib-metadata==8.4.0 +idna==3.10 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.5 +multidict==6.1.0 numpy==1.24.4 -openai[datalib,embeddings]==1.1.1 +openai[datalib,embeddings]==1.0.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pandas==2.0.3 pandas-stubs==2.0.3.230814 pillow==9.5.0 pluggy==1.5.0 -pydantic==2.8.2 -pydantic-core==2.20.1 -pytest==8.3.2 +propcache==0.2.0 +pydantic==2.10.6 +pydantic-core==2.27.2 +pytest==8.3.4 pytest-asyncio==0.21.1 pytest-cov==5.0.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 python-dateutil==2.9.0.post0 -pytz==2024.1 +pytz==2024.2 pyyaml==6.0.2 -six==1.16.0 +six==1.17.0 sniffio==1.3.1 sortedcontainers==2.4.0 -tomli==2.0.1 -tqdm==4.66.5 -types-pytz==2024.1.0.20240417 +tomli==2.2.1 +tqdm==4.67.1 +types-pytz==2024.2.0.20241221 typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==1.26.19 +tzdata==2025.1 +urllib3==1.26.20 vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.20.1 +wrapt==1.17.2 +yarl==1.15.2 +zipp==3.20.2 diff --git a/.riot/requirements/25c58ca.txt b/.riot/requirements/25c58ca.txt deleted file mode 100644 index 01b80cc6b13..00000000000 --- a/.riot/requirements/25c58ca.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/25c58ca.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/2634bf7.txt b/.riot/requirements/2634bf7.txt new file mode 100644 index 00000000000..0000f6e28ff --- /dev/null +++ b/.riot/requirements/2634bf7.txt @@ -0,0 +1,48 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --no-annotate --resolver=backtracking .riot/requirements/2634bf7.in +# +annotated-types==0.7.0 +anyio==4.8.0 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +distro==1.9.0 +h11==0.14.0 +httpcore==1.0.7 +httpx==0.28.1 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.0.0 +jiter==0.8.2 +mock==5.1.0 +multidict==6.1.0 +openai==1.60.0 +opentracing==2.4.0 +packaging==24.2 +pillow==11.1.0 +pluggy==1.5.0 +propcache==0.2.1 +pydantic==2.10.5 +pydantic-core==2.27.2 +pytest==8.3.4 +pytest-asyncio==0.21.1 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +pyyaml==6.0.2 +regex==2024.11.6 +requests==2.32.3 +six==1.17.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tiktoken==0.8.0 +tqdm==4.67.1 +typing-extensions==4.12.2 +urllib3==1.26.20 +vcrpy==4.2.1 +wrapt==1.17.2 +yarl==1.18.3 diff --git a/.riot/requirements/f1c37b1.txt b/.riot/requirements/26381f8.txt similarity index 50% rename from .riot/requirements/f1c37b1.txt rename to .riot/requirements/26381f8.txt index 4da5078a988..7e7511ac652 100644 --- a/.riot/requirements/f1c37b1.txt +++ b/.riot/requirements/26381f8.txt @@ -2,50 +2,51 @@ # This file is autogenerated by pip-compile with Python 3.10 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/f1c37b1.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/26381f8.in # annotated-types==0.7.0 anyio==3.7.1 -attrs==24.2.0 -certifi==2024.7.4 -coverage[toml]==7.6.1 +attrs==25.1.0 +certifi==2024.12.14 +coverage[toml]==7.6.10 distro==1.9.0 exceptiongroup==1.2.2 h11==0.14.0 -httpcore==1.0.5 -httpx==0.27.0 +httpcore==1.0.7 +httpx==0.27.2 hypothesis==6.45.0 -idna==3.8 +idna==3.10 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.5 -numpy==2.1.0 -openai[datalib,embeddings]==1.1.1 +multidict==6.1.0 +numpy==2.2.2 +openai[datalib,embeddings]==1.0.0 opentracing==2.4.0 -packaging==24.1 -pandas==2.2.2 -pandas-stubs==2.2.2.240807 +packaging==24.2 +pandas==2.2.3 +pandas-stubs==2.2.3.241126 pillow==9.5.0 pluggy==1.5.0 -pydantic==2.8.2 -pydantic-core==2.20.1 -pytest==8.3.2 +propcache==0.2.1 +pydantic==2.10.6 +pydantic-core==2.27.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 python-dateutil==2.9.0.post0 -pytz==2024.1 +pytz==2024.2 pyyaml==6.0.2 -six==1.16.0 +six==1.17.0 sniffio==1.3.1 sortedcontainers==2.4.0 -tomli==2.0.1 -tqdm==4.66.5 -types-pytz==2024.1.0.20240417 +tomli==2.2.1 +tqdm==4.67.1 +types-pytz==2024.2.0.20241221 typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==1.26.19 +tzdata==2025.1 +urllib3==1.26.20 vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 +wrapt==1.17.2 +yarl==1.18.3 diff --git a/.riot/requirements/2933921.txt b/.riot/requirements/2933921.txt deleted file mode 100644 index 9dad744881f..00000000000 --- a/.riot/requirements/2933921.txt +++ /dev/null @@ -1,24 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/2933921.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/2b426ba.txt b/.riot/requirements/2b426ba.txt new file mode 100644 index 00000000000..73fef57104e --- /dev/null +++ b/.riot/requirements/2b426ba.txt @@ -0,0 +1,38 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/2b426ba.in +# +annotated-types==0.7.0 +attrs==25.1.0 +blinker==1.9.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +click==8.1.8 +coverage[toml]==7.6.10 +flask==2.3.3 +flask-openapi3==4.0.3 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.6.1 +iniconfig==2.0.0 +itsdangerous==2.2.0 +jinja2==3.1.5 +markupsafe==3.0.2 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pydantic==2.10.6 +pydantic-core==2.27.2 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +requests==2.32.3 +sortedcontainers==2.4.0 +typing-extensions==4.12.2 +urllib3==1.26.20 +werkzeug==3.1.3 +zipp==3.21.0 diff --git a/.riot/requirements/2be57d3.txt b/.riot/requirements/2be57d3.txt deleted file mode 100644 index e8d0e987d00..00000000000 --- a/.riot/requirements/2be57d3.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/2be57d3.in -# -annotated-types==0.7.0 -attrs==23.2.0 -blinker==1.8.2 -certifi==2024.6.2 -charset-normalizer==3.3.2 -click==8.1.7 -coverage[toml]==7.5.4 -flask==2.3.3 -flask-openapi3==3.1.3 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 -iniconfig==2.0.0 -itsdangerous==2.2.0 -jinja2==3.1.4 -markupsafe==2.1.5 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pydantic==2.8.0 -pydantic-core==2.20.0 -pytest==8.2.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -requests==2.32.3 -sortedcontainers==2.4.0 -typing-extensions==4.12.2 -urllib3==1.26.19 -werkzeug==2.3.8 -zipp==3.19.2 diff --git a/.riot/requirements/2cc3d48.txt b/.riot/requirements/2cc3d48.txt deleted file mode 100644 index a64f5d6ced3..00000000000 --- a/.riot/requirements/2cc3d48.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/2cc3d48.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -psycopg2-binary==2.8.6 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/30829b6.txt b/.riot/requirements/30829b6.txt deleted file mode 100644 index 47d5c0c9577..00000000000 --- a/.riot/requirements/30829b6.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/30829b6.in -# -attrs==23.1.0 -cassandra-driver==3.28.0 -click==8.1.7 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -geomet==0.2.1.post1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/3343686.txt b/.riot/requirements/3343686.txt deleted file mode 100644 index d0a566655e6..00000000000 --- a/.riot/requirements/3343686.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/3343686.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pymongo==3.8.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/3390a6b.txt b/.riot/requirements/3390a6b.txt deleted file mode 100644 index d617d22b8bd..00000000000 --- a/.riot/requirements/3390a6b.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/3390a6b.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -dnspython==2.3.0 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pymongo==4.7.3 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/3482d15.txt b/.riot/requirements/3482d15.txt deleted file mode 100644 index 433195d1962..00000000000 --- a/.riot/requirements/3482d15.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/3482d15.in -# -anyio==3.7.1 -asgiref==3.7.2 -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/3506e01.txt b/.riot/requirements/3506e01.txt deleted file mode 100644 index 0a8af6a2555..00000000000 --- a/.riot/requirements/3506e01.txt +++ /dev/null @@ -1,43 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/3506e01.in -# -aiobotocore==2.6.0 -aiohttp==3.8.6 -aioitertools==0.11.0 -aiosignal==1.3.1 -async-generator==1.10 -async-timeout==4.0.3 -asynctest==0.13.0 -attrs==24.2.0 -botocore==1.31.17 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -frozenlist==1.3.3 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -jmespath==1.0.1 -mock==5.1.0 -multidict==6.0.5 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.9.0.post0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.19 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/35ce786.txt b/.riot/requirements/35ce786.txt deleted file mode 100644 index 3489155be91..00000000000 --- a/.riot/requirements/35ce786.txt +++ /dev/null @@ -1,55 +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/35ce786.in -# -annotated-types==0.7.0 -anyio==4.4.0 -attrs==24.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.6.1 -distro==1.9.0 -exceptiongroup==1.2.2 -h11==0.14.0 -httpcore==1.0.5 -httpx==0.27.0 -hypothesis==6.45.0 -idna==3.8 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.5 -numpy==2.1.0 -openai[datalib]==1.30.1 -opentracing==2.4.0 -packaging==24.1 -pandas==2.2.2 -pandas-stubs==2.2.2.240807 -pillow==10.1.0 -pluggy==1.5.0 -pydantic==2.8.2 -pydantic-core==2.20.1 -pytest==8.3.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -pytz==2024.1 -pyyaml==6.0.2 -regex==2024.7.24 -requests==2.32.3 -six==1.16.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tiktoken==0.7.0 -tomli==2.0.1 -tqdm==4.66.5 -types-pytz==2024.1.0.20240417 -typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==1.26.19 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 diff --git a/.riot/requirements/36a2b9a.txt b/.riot/requirements/36a2b9a.txt deleted file mode 100644 index 66e1b6b8a53..00000000000 --- a/.riot/requirements/36a2b9a.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/36a2b9a.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mako==1.1.6 -markupsafe==2.1.5 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/3c8d9c0.txt b/.riot/requirements/3c8d9c0.txt deleted file mode 100644 index c26d5cc37aa..00000000000 --- a/.riot/requirements/3c8d9c0.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/3c8d9c0.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -structlog==23.1.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/3e3e299.txt b/.riot/requirements/3e3e299.txt index a1142c27258..caa71a23f45 100644 --- a/.riot/requirements/3e3e299.txt +++ b/.riot/requirements/3e3e299.txt @@ -2,11 +2,11 @@ # This file is autogenerated by pip-compile with Python 3.12 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/3e3e299.in +# pip-compile --no-annotate .riot/requirements/3e3e299.in # asgiref==3.8.1 -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==25.1.0 +coverage[toml]==7.6.10 django==3.2.25 django-configurations==2.5.1 django-hosts==4.0 @@ -14,17 +14,17 @@ hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-django[testing]==3.10.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -pytz==2024.1 -six==1.16.0 +pytest-randomly==3.16.0 +pytz==2024.2 +six==1.17.0 sortedcontainers==2.4.0 -sqlparse==0.5.1 +sqlparse==0.5.3 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +setuptools diff --git a/.riot/requirements/3e8a9d6.txt b/.riot/requirements/3e8a9d6.txt deleted file mode 100644 index 36ab8c0bdfe..00000000000 --- a/.riot/requirements/3e8a9d6.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/3e8a9d6.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pylibmc==1.6.3 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/11f2bd0.txt b/.riot/requirements/3f2ebdc.txt similarity index 54% rename from .riot/requirements/11f2bd0.txt rename to .riot/requirements/3f2ebdc.txt index fdab5d63d33..f87639be124 100644 --- a/.riot/requirements/11f2bd0.txt +++ b/.riot/requirements/3f2ebdc.txt @@ -1,38 +1,40 @@ # -# This file is autogenerated by pip-compile with Python 3.13 +# This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/11f2bd0.in +# pip-compile --no-annotate .riot/requirements/3f2ebdc.in # annotated-types==0.7.0 -attrs==24.2.0 +attrs==25.1.0 blinker==1.8.2 -certifi==2024.8.30 -charset-normalizer==3.3.2 -click==8.1.7 +certifi==2024.12.14 +charset-normalizer==3.4.1 +click==8.1.8 coverage[toml]==7.6.1 +exceptiongroup==1.2.2 flask==2.3.3 -flask-openapi3==4.0.1 +flask-openapi3==4.0.3 hypothesis==6.45.0 idna==3.10 importlib-metadata==8.5.0 iniconfig==2.0.0 itsdangerous==2.2.0 -jinja2==3.1.4 +jinja2==3.1.5 markupsafe==2.1.5 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pydantic==2.9.2 -pydantic-core==2.23.4 -pytest==8.3.3 +pydantic==2.10.6 +pydantic-core==2.27.2 +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==2.3.8 +werkzeug==3.0.6 zipp==3.20.2 diff --git a/.riot/requirements/40b1a4f.txt b/.riot/requirements/40b1a4f.txt deleted file mode 100644 index 24cdaee0a5c..00000000000 --- a/.riot/requirements/40b1a4f.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/40b1a4f.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -future==0.18.3 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.8.2 -pytz==2023.3.post1 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -vertica-python==0.7.4 -zipp==3.15.0 diff --git a/.riot/requirements/427c22a.txt b/.riot/requirements/427c22a.txt deleted file mode 100644 index bd9057bd849..00000000000 --- a/.riot/requirements/427c22a.txt +++ /dev/null @@ -1,37 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/427c22a.in -# -attrs==23.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -click==7.1.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -flask==1.1.4 -gunicorn==22.0.0 -httpretty==1.0.5 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -itsdangerous==1.1.0 -jinja2==2.11.3 -markupsafe==1.1.1 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -werkzeug==1.0.1 -zipp==3.15.0 diff --git a/.riot/requirements/429d258.txt b/.riot/requirements/429d258.txt deleted file mode 100644 index 232f6791850..00000000000 --- a/.riot/requirements/429d258.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/429d258.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -glob2==0.7 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mako==1.2.4 -markupsafe==2.1.5 -mock==5.1.0 -more-itertools==8.10.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==23.2 -parse==1.20.1 -parse-type==0.6.2 -pluggy==1.2.0 -py==1.11.0 -pytest==7.4.4 -pytest-bdd==4.1.0 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/4628049.txt b/.riot/requirements/4628049.txt deleted file mode 100644 index 2871068f57e..00000000000 --- a/.riot/requirements/4628049.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/4628049.in -# -astunparse==1.6.3 -attrs==23.2.0 -certifi==2024.6.2 -cffi==1.16.0 -charset-normalizer==3.3.2 -coverage[toml]==7.5.3 -cryptography==42.0.7 -googleapis-common-protos==1.63.1 -greenlet==3.0.3 -grpcio==1.64.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.5.0 -protobuf==5.27.0 -psycopg2-binary==2.9.9 -pycparser==2.22 -pycryptodome==3.20.0 -pytest==8.2.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -requests==2.32.3 -simplejson==3.19.2 -six==1.16.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.22 -typing-extensions==4.12.1 -urllib3==2.2.1 -wheel==0.43.0 diff --git a/.riot/requirements/48462b1.txt b/.riot/requirements/48462b1.txt deleted file mode 100644 index f200fc89650..00000000000 --- a/.riot/requirements/48462b1.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/48462b1.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mariadb==1.1.6 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/4a3b7fa.txt b/.riot/requirements/4a3b7fa.txt deleted file mode 100644 index 67d89e6b4f9..00000000000 --- a/.riot/requirements/4a3b7fa.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/4a3b7fa.in -# -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opensearch-py[requests]==1.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.18 -zipp==3.15.0 diff --git a/.riot/requirements/4a85f6d.txt b/.riot/requirements/4a85f6d.txt new file mode 100644 index 00000000000..41953c69178 --- /dev/null +++ b/.riot/requirements/4a85f6d.txt @@ -0,0 +1,50 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --no-annotate --resolver=backtracking .riot/requirements/4a85f6d.in +# +annotated-types==0.7.0 +anyio==4.8.0 +attrs==24.3.0 +certifi==2024.12.14 +coverage[toml]==7.6.10 +distro==1.9.0 +h11==0.14.0 +httpcore==1.0.7 +httpx==0.27.2 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.0.0 +mock==5.1.0 +multidict==6.1.0 +numpy==2.2.2 +openai[datalib,embeddings]==1.30.1 +opentracing==2.4.0 +packaging==24.2 +pandas==2.2.3 +pandas-stubs==2.2.3.241126 +pillow==9.5.0 +pluggy==1.5.0 +propcache==0.2.1 +pydantic==2.10.5 +pydantic-core==2.27.2 +pytest==8.3.4 +pytest-asyncio==0.21.1 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +python-dateutil==2.9.0.post0 +pytz==2024.2 +pyyaml==6.0.2 +six==1.17.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tqdm==4.67.1 +types-pytz==2024.2.0.20241221 +typing-extensions==4.12.2 +tzdata==2025.1 +urllib3==1.26.20 +vcrpy==4.2.1 +wrapt==1.17.2 +yarl==1.18.3 diff --git a/.riot/requirements/4ad11b1.txt b/.riot/requirements/4ad11b1.txt deleted file mode 100644 index ee4502f597b..00000000000 --- a/.riot/requirements/4ad11b1.txt +++ /dev/null @@ -1,74 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/4ad11b1.in -# -annotated-types==0.5.0 -attrs==24.2.0 -aws-sam-translator==1.82.0 -aws-xray-sdk==2.14.0 -boto==2.49.0 -boto3==1.33.13 -botocore==1.33.13 -certifi==2024.8.30 -cffi==1.15.1 -cfn-lint==0.53.1 -charset-normalizer==3.4.0 -coverage[toml]==7.2.7 -cryptography==43.0.3 -docker==6.1.3 -ecdsa==0.14.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -idna==2.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -jinja2==2.10.3 -jmespath==1.0.1 -jsondiff==2.0.0 -jsonpatch==1.33 -jsonpointer==3.0.0 -jsonschema==3.2.0 -junit-xml==1.9 -markupsafe==1.1.1 -mock==5.1.0 -more-itertools==9.1.0 -moto==1.3.16 -networkx==2.6.3 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.5.3 -pydantic-core==2.14.6 -pynamodb==5.5.1 -pyrsistent==0.19.3 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.9.0.post0 -python-jose[cryptography]==3.3.0 -pytz==2024.2 -pyyaml==6.0.1 -requests==2.31.0 -responses==0.23.3 -rsa==4.9 -s3transfer==0.8.2 -six==1.16.0 -sortedcontainers==2.4.0 -sshpubkeys==3.3.1 -tomli==2.0.1 -types-pyyaml==6.0.12.12 -typing-extensions==4.7.1 -urllib3==1.26.20 -websocket-client==1.6.1 -werkzeug==2.1.2 -wrapt==1.16.0 -xmltodict==0.14.2 -zipp==3.15.0 - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/.riot/requirements/4d27459.txt b/.riot/requirements/4d27459.txt new file mode 100644 index 00000000000..630c81558f3 --- /dev/null +++ b/.riot/requirements/4d27459.txt @@ -0,0 +1,48 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/4d27459.in +# +annotated-types==0.7.0 +anyio==4.8.0 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +distro==1.9.0 +h11==0.14.0 +httpcore==1.0.7 +httpx==0.28.1 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.0.0 +jiter==0.8.2 +mock==5.1.0 +multidict==6.1.0 +openai==1.60.0 +opentracing==2.4.0 +packaging==24.2 +pillow==11.1.0 +pluggy==1.5.0 +propcache==0.2.1 +pydantic==2.10.5 +pydantic-core==2.27.2 +pytest==8.3.4 +pytest-asyncio==0.21.1 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +pyyaml==6.0.2 +regex==2024.11.6 +requests==2.32.3 +six==1.17.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tiktoken==0.8.0 +tqdm==4.67.1 +typing-extensions==4.12.2 +urllib3==1.26.20 +vcrpy==4.2.1 +wrapt==1.17.2 +yarl==1.18.3 diff --git a/.riot/requirements/4f8a3a1.txt b/.riot/requirements/4f8a3a1.txt deleted file mode 100644 index 95ec5b6f2c7..00000000000 --- a/.riot/requirements/4f8a3a1.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/4f8a3a1.in -# -aiohttp==3.8.6 -aiohttp-jinja2==1.5.1 -aiosignal==1.3.1 -async-timeout==4.0.3 -asynctest==0.13.0 -attrs==23.2.0 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.1 -frozenlist==1.3.3 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.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.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/5000f7f.txt b/.riot/requirements/5000f7f.txt deleted file mode 100644 index 6f3fff875f1..00000000000 --- a/.riot/requirements/5000f7f.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/5000f7f.in -# -attrs==23.1.0 -confluent-kafka==1.9.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/530c983.txt b/.riot/requirements/530c983.txt new file mode 100644 index 00000000000..c07f9a6b918 --- /dev/null +++ b/.riot/requirements/530c983.txt @@ -0,0 +1,52 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate --resolver=backtracking .riot/requirements/530c983.in +# +annotated-types==0.7.0 +anyio==4.8.0 +attrs==24.3.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +distro==1.9.0 +exceptiongroup==1.2.2 +h11==0.14.0 +httpcore==1.0.7 +httpx==0.28.1 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.6.1 +iniconfig==2.0.0 +jiter==0.8.2 +mock==5.1.0 +multidict==6.1.0 +openai==1.60.0 +opentracing==2.4.0 +packaging==24.2 +pillow==11.1.0 +pluggy==1.5.0 +propcache==0.2.1 +pydantic==2.10.5 +pydantic-core==2.27.2 +pytest==8.3.4 +pytest-asyncio==0.21.1 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +pyyaml==6.0.2 +regex==2024.11.6 +requests==2.32.3 +six==1.17.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +tiktoken==0.8.0 +tomli==2.2.1 +tqdm==4.67.1 +typing-extensions==4.12.2 +urllib3==1.26.20 +vcrpy==4.2.1 +wrapt==1.17.2 +yarl==1.18.3 +zipp==3.21.0 diff --git a/.riot/requirements/53e5eed.txt b/.riot/requirements/53e5eed.txt deleted file mode 100644 index 7f485650abe..00000000000 --- a/.riot/requirements/53e5eed.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/53e5eed.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -gunicorn==21.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -protobuf==4.24.4 -py-cpuinfo==8.0.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -uwsgi==2.0.23 -zipp==3.15.0 diff --git a/.riot/requirements/54a9b03.txt b/.riot/requirements/54a9b03.txt deleted file mode 100644 index 835628ea31e..00000000000 --- a/.riot/requirements/54a9b03.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/54a9b03.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pylibmc==1.6.3 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/55a0f54.txt b/.riot/requirements/55a0f54.txt deleted file mode 100644 index b120d771ee9..00000000000 --- a/.riot/requirements/55a0f54.txt +++ /dev/null @@ -1,56 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/55a0f54.in -# -anyio==3.7.1 -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.33.13 -botocore==1.33.13 -certifi==2020.12.5 -cffi==1.15.1 -chardet==3.0.4 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -cryptography==3.4.8 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -idna==2.10 -importlib-metadata==6.7.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.2.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.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.8.2 -pytz==2020.5 -requests==2.31.0 -responses==0.16.0 -s3transfer==0.8.2 -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.7.1 -urllib3==1.26.18 -zipp==3.15.0 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/585e779.txt b/.riot/requirements/585e779.txt deleted file mode 100644 index 3e328720bd3..00000000000 --- a/.riot/requirements/585e779.txt +++ /dev/null @@ -1,82 +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/585e779.in -# -ai21==3.0.1 -ai21-tokenizer==0.12.0 -aiohappyeyeballs==2.4.4 -aiohttp==3.11.10 -aiosignal==1.3.1 -anyio==4.7.0 -attrs==24.2.0 -backoff==2.2.1 -certifi==2024.8.30 -charset-normalizer==3.4.0 -cohere==4.57 -coverage[toml]==7.6.9 -dataclasses-json==0.5.14 -dnspython==2.7.0 -exceptiongroup==1.2.2 -fastavro==1.9.7 -filelock==3.16.1 -frozenlist==1.5.0 -fsspec==2024.10.0 -greenlet==3.0.3 -h11==0.14.0 -httpcore==1.0.7 -httpx==0.27.2 -huggingface-hub==0.26.5 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.11.0 -iniconfig==2.0.0 -jsonpatch==1.33 -jsonpointer==3.0.0 -langchain==0.0.192 -langchain-community==0.0.14 -langchain-core==0.1.23 -langchainplus-sdk==0.0.4 -langsmith==0.0.87 -loguru==0.7.3 -marshmallow==3.23.1 -mock==5.1.0 -multidict==6.1.0 -mypy-extensions==1.0.0 -numexpr==2.8.5 -numpy==1.26.4 -openai==0.27.8 -openapi-schema-pydantic==1.2.4 -opentracing==2.4.0 -packaging==23.2 -pinecone-client==2.2.4 -pluggy==1.5.0 -propcache==0.2.1 -psutil==6.1.0 -pydantic==1.10.19 -pytest==8.3.4 -pytest-asyncio==0.23.7 -pytest-cov==6.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.10.1 -python-dateutil==2.9.0.post0 -pyyaml==6.0.2 -regex==2024.11.6 -requests==2.32.3 -sentencepiece==0.2.0 -six==1.17.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -sqlalchemy==2.0.36 -tenacity==8.5.0 -tiktoken==0.8.0 -tokenizers==0.21.0 -tqdm==4.67.1 -typing-extensions==4.12.2 -typing-inspect==0.9.0 -urllib3==2.2.3 -vcrpy==6.0.1 -wrapt==1.17.0 -yarl==1.18.3 -zipp==3.21.0 diff --git a/.riot/requirements/58881b9.txt b/.riot/requirements/58881b9.txt deleted file mode 100644 index 18d9931d5f0..00000000000 --- a/.riot/requirements/58881b9.txt +++ /dev/null @@ -1,40 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/58881b9.in -# -astunparse==1.6.3 -attrs==23.2.0 -certifi==2024.6.2 -cffi==1.16.0 -charset-normalizer==3.3.2 -coverage[toml]==7.5.3 -cryptography==42.0.7 -exceptiongroup==1.2.1 -googleapis-common-protos==1.63.1 -greenlet==3.0.3 -grpcio==1.64.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.5.0 -protobuf==5.27.0 -psycopg2-binary==2.9.9 -pycparser==2.22 -pycryptodome==3.20.0 -pytest==8.2.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -requests==2.32.3 -simplejson==3.19.2 -six==1.16.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.22 -tomli==2.0.1 -typing-extensions==4.12.1 -urllib3==2.2.1 -wheel==0.43.0 diff --git a/.riot/requirements/5a0532b.txt b/.riot/requirements/5a0532b.txt deleted file mode 100644 index a8fd5c99bbf..00000000000 --- a/.riot/requirements/5a0532b.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/5a0532b.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -googleapis-common-protos==1.65.0 -grpcio==1.34.1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -protobuf==4.24.4 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/5da4fd8.txt b/.riot/requirements/5da4fd8.txt deleted file mode 100644 index a700b91bf81..00000000000 --- a/.riot/requirements/5da4fd8.txt +++ /dev/null @@ -1,49 +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/5da4fd8.in -# -annotated-types==0.7.0 -anyio==4.4.0 -attrs==24.2.0 -certifi==2024.7.4 -coverage[toml]==7.6.1 -distro==1.9.0 -h11==0.14.0 -httpcore==1.0.5 -httpx==0.27.0 -hypothesis==6.45.0 -idna==3.8 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.5 -numpy==2.1.0 -openai[datalib,embeddings]==1.30.1 -opentracing==2.4.0 -packaging==24.1 -pandas==2.2.2 -pandas-stubs==2.2.2.240807 -pillow==9.5.0 -pluggy==1.5.0 -pydantic==2.8.2 -pydantic-core==2.20.1 -pytest==8.3.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -pytz==2024.1 -pyyaml==6.0.2 -six==1.16.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tqdm==4.66.5 -types-pytz==2024.1.0.20240417 -typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==1.26.19 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 diff --git a/.riot/requirements/5e2238a.txt b/.riot/requirements/5e2238a.txt deleted file mode 100644 index 23fb04f1eeb..00000000000 --- a/.riot/requirements/5e2238a.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/5e2238a.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -elasticsearch1==1.10.0 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.18 -zipp==3.15.0 diff --git a/.riot/requirements/5eed329.txt b/.riot/requirements/5eed329.txt deleted file mode 100644 index 5b5ebb9bd52..00000000000 --- a/.riot/requirements/5eed329.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/5eed329.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/620a309.txt b/.riot/requirements/620a309.txt deleted file mode 100644 index b0ada3ca20b..00000000000 --- a/.riot/requirements/620a309.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/620a309.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -gevent==22.10.2 -greenlet==3.1.1 -gunicorn[gevent]==23.0.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -py-cpuinfo==8.0.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -uwsgi==2.0.28 -zipp==3.15.0 -zope-event==5.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/63b44e2.txt b/.riot/requirements/63b44e2.txt deleted file mode 100644 index 25063f7fdc2..00000000000 --- a/.riot/requirements/63b44e2.txt +++ /dev/null @@ -1,40 +0,0 @@ -# -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/63b44e2.in -# -astunparse==1.6.3 -attrs==23.2.0 -certifi==2024.6.2 -cffi==1.16.0 -charset-normalizer==3.3.2 -coverage[toml]==7.5.3 -cryptography==42.0.7 -exceptiongroup==1.2.1 -googleapis-common-protos==1.63.1 -greenlet==3.0.3 -grpcio==1.64.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.5.0 -protobuf==5.27.0 -psycopg2-binary==2.9.9 -pycparser==2.22 -pycryptodome==3.20.0 -pytest==8.2.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -requests==2.32.3 -simplejson==3.19.2 -six==1.16.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.22 -tomli==2.0.1 -typing-extensions==4.12.1 -urllib3==2.2.1 -wheel==0.43.0 diff --git a/.riot/requirements/640588f.txt b/.riot/requirements/640588f.txt deleted file mode 100644 index 35f92dd0b21..00000000000 --- a/.riot/requirements/640588f.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/640588f.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -graphql-core==3.2.3 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/64dcf93.txt b/.riot/requirements/64dcf93.txt deleted file mode 100644 index cb51fe8aef5..00000000000 --- a/.riot/requirements/64dcf93.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/64dcf93.in -# -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-consul==1.1.0 -requests==2.31.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/681161c.txt b/.riot/requirements/681161c.txt deleted file mode 100644 index d03be0fa511..00000000000 --- a/.riot/requirements/681161c.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/681161c.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/6824c99.txt b/.riot/requirements/6824c99.txt new file mode 100644 index 00000000000..d4bb270d8d0 --- /dev/null +++ b/.riot/requirements/6824c99.txt @@ -0,0 +1,47 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/6824c99.in +# +attrs==25.1.0 +boto3==1.36.10 +botocore==1.36.10 +bytecode==0.16.1 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.1 +datadog==0.51.0 +datadog-lambda==6.105.0 +ddtrace==2.20.0 +deprecated==1.2.18 +envier==0.5.2 +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.29.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/68d8bc6.txt b/.riot/requirements/68d8bc6.txt deleted file mode 100644 index 81e0457d686..00000000000 --- a/.riot/requirements/68d8bc6.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/68d8bc6.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/6dbf615.txt b/.riot/requirements/6dbf615.txt new file mode 100644 index 00000000000..09c2ba59e61 --- /dev/null +++ b/.riot/requirements/6dbf615.txt @@ -0,0 +1,40 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/6dbf615.in +# +annotated-types==0.7.0 +attrs==25.1.0 +blinker==1.9.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +click==8.1.8 +coverage[toml]==7.6.10 +exceptiongroup==1.2.2 +flask==2.3.3 +flask-openapi3==4.0.3 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.6.1 +iniconfig==2.0.0 +itsdangerous==2.2.0 +jinja2==3.1.5 +markupsafe==3.0.2 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pydantic==2.10.6 +pydantic-core==2.27.2 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +requests==2.32.3 +sortedcontainers==2.4.0 +tomli==2.2.1 +typing-extensions==4.12.2 +urllib3==1.26.20 +werkzeug==3.1.3 +zipp==3.21.0 diff --git a/.riot/requirements/6dd3b2a.txt b/.riot/requirements/6dd3b2a.txt deleted file mode 100644 index fc68edb2a24..00000000000 --- a/.riot/requirements/6dd3b2a.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/6dd3b2a.in -# -aiomysql==0.1.1 -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pymysql==1.1.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/6fe81be.txt b/.riot/requirements/6fe81be.txt deleted file mode 100644 index f49865ef3bd..00000000000 --- a/.riot/requirements/6fe81be.txt +++ /dev/null @@ -1,37 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/6fe81be.in -# -attrs==24.2.0 -colorama==0.4.6 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -gunicorn==23.0.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -lz4==4.3.2 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -protobuf==3.8.0 -py-cpuinfo==8.0.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==4.1.0 -pytest-cpp==2.5.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -uwsgi==2.0.27 -zipp==3.15.0 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/7046fe8.txt b/.riot/requirements/7046fe8.txt deleted file mode 100644 index 312cad44e13..00000000000 --- a/.riot/requirements/7046fe8.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/7046fe8.in -# -aredis==1.1.8 -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/73109d5.txt b/.riot/requirements/73109d5.txt deleted file mode 100644 index 42b5dd0e30c..00000000000 --- a/.riot/requirements/73109d5.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/73109d5.in -# -attrs==24.2.0 -azure-functions==1.21.3 -certifi==2024.8.30 -charset-normalizer==3.4.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -requests==2.31.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/745db14.txt b/.riot/requirements/745db14.txt deleted file mode 100644 index bb64273409d..00000000000 --- a/.riot/requirements/745db14.txt +++ /dev/null @@ -1,50 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/745db14.in -# -aiofiles==23.2.1 -aiohttp==3.8.6 -aiosignal==1.3.1 -async-generator==1.10 -async-timeout==4.0.3 -asynctest==0.13.0 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -frozenlist==1.3.3 -h11==0.9.0 -httpcore==0.11.1 -httptools==0.6.0 -httpx==0.15.4 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==5.2.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.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 -typing-extensions==4.7.1 -ujson==5.7.0 -urllib3==2.0.7 -uvloop==0.18.0 -websockets==9.1 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/760d56e.txt b/.riot/requirements/760d56e.txt deleted file mode 100644 index 7daa0bd0e98..00000000000 --- a/.riot/requirements/760d56e.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/760d56e.in -# -attrs==24.2.0 -beautifulsoup4==4.12.3 -bottle==0.13.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -soupsieve==2.4.1 -tomli==2.0.1 -typing-extensions==4.7.1 -waitress==2.1.2 -webob==1.8.9 -webtest==3.0.1 -zipp==3.15.0 diff --git a/.riot/requirements/7800b91.txt b/.riot/requirements/7800b91.txt deleted file mode 100644 index b64794723bc..00000000000 --- a/.riot/requirements/7800b91.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/7800b91.in -# -anyio==3.7.1 -attrs==23.2.0 -certifi==2024.2.2 -coverage==7.2.7 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -more-itertools==8.10.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -py==1.11.0 -pytest==6.2.5 -pytest-cov==2.9.0 -pytest-mock==2.0.0 -pytest-randomly==3.12.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -toml==0.10.2 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/7abacd9.txt b/.riot/requirements/7abacd9.txt deleted file mode 100644 index 34cda00d06b..00000000000 --- a/.riot/requirements/7abacd9.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/7abacd9.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.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.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/7cf5b29.txt b/.riot/requirements/7cf5b29.txt new file mode 100644 index 00000000000..071c7d7fd7e --- /dev/null +++ b/.riot/requirements/7cf5b29.txt @@ -0,0 +1,47 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/7cf5b29.in +# +attrs==25.1.0 +boto3==1.36.10 +botocore==1.36.10 +bytecode==0.16.1 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +datadog==0.51.0 +datadog-lambda==6.105.0 +ddtrace==2.20.0 +deprecated==1.2.18 +envier==0.5.2 +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.29.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==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.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==2.3.0 +wrapt==1.17.2 +xmltodict==0.14.2 +zipp==3.21.0 diff --git a/.riot/requirements/7f56123.txt b/.riot/requirements/7f56123.txt index 887c9742746..d2809141f6b 100644 --- a/.riot/requirements/7f56123.txt +++ b/.riot/requirements/7f56123.txt @@ -4,17 +4,17 @@ # # pip-compile --no-annotate .riot/requirements/7f56123.in # -attrs==23.1.0 -coverage[toml]==7.3.4 +attrs==25.1.0 +coverage[toml]==7.6.10 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 diff --git a/.riot/requirements/7fa00cf.txt b/.riot/requirements/7fa00cf.txt index de6d1dffe04..8fbfefc927a 100644 --- a/.riot/requirements/7fa00cf.txt +++ b/.riot/requirements/7fa00cf.txt @@ -4,21 +4,21 @@ # # pip-compile --no-annotate .riot/requirements/7fa00cf.in # -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==25.1.0 +coverage[toml]==7.6.10 +exceptiongroup==1.2.2 hypothesis==6.45.0 -importlib-metadata==7.0.0 +importlib-metadata==8.6.1 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 +tomli==2.2.1 +zipp==3.21.0 diff --git a/.riot/requirements/840eb63.txt b/.riot/requirements/840eb63.txt deleted file mode 100644 index 431128fcb61..00000000000 --- a/.riot/requirements/840eb63.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/840eb63.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -greenlet==3.0.3 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.0.33 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -protobuf==3.20.3 -psycopg2-binary==2.9.9 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.36 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/85c8e30.txt b/.riot/requirements/85c8e30.txt deleted file mode 100644 index 4d03cfcf992..00000000000 --- a/.riot/requirements/85c8e30.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/85c8e30.in -# -asyncpg==0.28.0 -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.2 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/87a1fff.txt b/.riot/requirements/87a1fff.txt deleted file mode 100644 index b85e76cdd56..00000000000 --- a/.riot/requirements/87a1fff.txt +++ /dev/null @@ -1,53 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/87a1fff.in -# -annotated-types==0.7.0 -anyio==4.4.0 -attrs==24.2.0 -certifi==2024.7.4 -coverage[toml]==7.6.1 -distro==1.9.0 -exceptiongroup==1.2.2 -h11==0.14.0 -httpcore==1.0.5 -httpx==0.27.0 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==8.4.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.5 -numpy==2.0.1 -openai[datalib,embeddings]==1.30.1 -opentracing==2.4.0 -packaging==24.1 -pandas==2.2.2 -pandas-stubs==2.2.2.240807 -pillow==9.5.0 -pluggy==1.5.0 -pydantic==2.8.2 -pydantic-core==2.20.1 -pytest==8.3.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -pytz==2024.1 -pyyaml==6.0.2 -six==1.16.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -tqdm==4.66.5 -types-pytz==2024.1.0.20240417 -typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==1.26.19 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.20.1 diff --git a/.riot/requirements/880a8ad.txt b/.riot/requirements/880a8ad.txt deleted file mode 100644 index 150ee660de8..00000000000 --- a/.riot/requirements/880a8ad.txt +++ /dev/null @@ -1,28 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/880a8ad.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.2.7 -elastic-transport==8.11.0 -elasticsearch==8.11.1 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/8854702.txt b/.riot/requirements/8854702.txt deleted file mode 100644 index dfbd9884664..00000000000 --- a/.riot/requirements/8854702.txt +++ /dev/null @@ -1,74 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/8854702.in -# -annotated-types==0.5.0 -attrs==24.2.0 -aws-sam-translator==1.82.0 -aws-xray-sdk==2.14.0 -boto==2.49.0 -boto3==1.33.13 -botocore==1.33.13 -certifi==2024.8.30 -cffi==1.15.1 -cfn-lint==0.53.1 -charset-normalizer==3.4.0 -coverage[toml]==7.2.7 -cryptography==43.0.3 -docker==6.1.3 -ecdsa==0.14.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -idna==2.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -jinja2==2.10.3 -jmespath==1.0.1 -jsondiff==2.0.0 -jsonpatch==1.33 -jsonpointer==3.0.0 -jsonschema==3.2.0 -junit-xml==1.9 -markupsafe==1.1.1 -mock==5.1.0 -more-itertools==9.1.0 -moto==1.3.16 -networkx==2.6.3 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pyasn1==0.5.1 -pycparser==2.21 -pydantic==2.5.3 -pydantic-core==2.14.6 -pynamodb==5.5.1 -pyrsistent==0.19.3 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.9.0.post0 -python-jose[cryptography]==3.3.0 -pytz==2024.2 -pyyaml==6.0.1 -requests==2.31.0 -responses==0.23.3 -rsa==4.9 -s3transfer==0.8.2 -six==1.16.0 -sortedcontainers==2.4.0 -sshpubkeys==3.3.1 -tomli==2.0.1 -types-pyyaml==6.0.12.12 -typing-extensions==4.7.1 -urllib3==1.26.20 -websocket-client==1.6.1 -werkzeug==2.1.2 -wrapt==1.16.0 -xmltodict==0.14.2 -zipp==3.15.0 - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/.riot/requirements/89d7a5f.txt b/.riot/requirements/89d7a5f.txt deleted file mode 100644 index 6e2134e4a17..00000000000 --- a/.riot/requirements/89d7a5f.txt +++ /dev/null @@ -1,40 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/89d7a5f.in -# -annotated-types==0.7.0 -attrs==23.2.0 -blinker==1.8.2 -certifi==2024.6.2 -charset-normalizer==3.3.2 -click==8.1.7 -coverage[toml]==7.5.4 -exceptiongroup==1.2.1 -flask==2.3.3 -flask-openapi3==3.1.3 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 -iniconfig==2.0.0 -itsdangerous==2.2.0 -jinja2==3.1.4 -markupsafe==2.1.5 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pydantic==2.8.0 -pydantic-core==2.20.0 -pytest==8.2.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -requests==2.32.3 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.12.2 -urllib3==1.26.19 -werkzeug==2.3.8 -zipp==3.19.2 diff --git a/.riot/requirements/8ef50f6.txt b/.riot/requirements/8ef50f6.txt deleted file mode 100644 index f3a48228267..00000000000 --- a/.riot/requirements/8ef50f6.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/8ef50f6.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -falcon==3.0.1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/8fd54b8.txt b/.riot/requirements/8fd54b8.txt new file mode 100644 index 00000000000..bab8538fb66 --- /dev/null +++ b/.riot/requirements/8fd54b8.txt @@ -0,0 +1,42 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/8fd54b8.in +# +astunparse==1.6.3 +attrs==24.3.0 +certifi==2024.12.14 +cffi==1.17.1 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +cryptography==44.0.0 +exceptiongroup==1.2.2 +googleapis-common-protos==1.66.0 +greenlet==3.1.1 +grpcio==1.70.0 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.0.0 +mock==5.1.0 +mysqlclient==2.1.1 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +protobuf==5.29.3 +psycopg2-binary==2.9.10 +pycparser==2.22 +pycryptodome==3.21.0 +pymysql==1.1.1 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +requests==2.32.3 +simplejson==3.19.3 +six==1.17.0 +sortedcontainers==2.4.0 +sqlalchemy==2.0.22 +tomli==2.2.1 +typing-extensions==4.12.2 +urllib3==2.3.0 +wheel==0.45.1 diff --git a/.riot/requirements/9050f7e.txt b/.riot/requirements/9050f7e.txt deleted file mode 100644 index 35b5c11a05d..00000000000 --- a/.riot/requirements/9050f7e.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/9050f7e.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -redis==3.0.1 -redis-py-cluster==2.0.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/9091897.txt b/.riot/requirements/9091897.txt deleted file mode 100644 index 9817bc80f0d..00000000000 --- a/.riot/requirements/9091897.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/9091897.in -# -asgiref==3.7.2 -attrs==23.2.0 -coverage[toml]==7.2.7 -django==3.2.25 -django-configurations==2.4.2 -django-hosts==4.0 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -pytz==2024.1 -six==1.16.0 -sortedcontainers==2.4.0 -sqlparse==0.4.4 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/91a3315.txt b/.riot/requirements/91a3315.txt deleted file mode 100644 index 59c24169550..00000000000 --- a/.riot/requirements/91a3315.txt +++ /dev/null @@ -1,41 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/91a3315.in -# -aiofiles==23.2.1 -aiosqlite==0.19.0 -anyio==3.7.1 -attrs==24.2.0 -certifi==2024.8.30 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -databases==0.8.0 -exceptiongroup==1.2.2 -greenlet==3.0.3 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -sqlalchemy==1.4.54 -starlette==0.14.2 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/93bc4fa.txt b/.riot/requirements/93bc4fa.txt deleted file mode 100644 index ca1e410d4ab..00000000000 --- a/.riot/requirements/93bc4fa.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/93bc4fa.in -# -attrs==23.2.0 -coverage[toml]==7.2.7 -django==2.2.28 -django-configurations==2.3.2 -djangorestframework==3.13.1 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-django[testing]==3.10.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -pytz==2024.1 -six==1.16.0 -sortedcontainers==2.4.0 -sqlparse==0.4.4 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/957161b.txt b/.riot/requirements/957161b.txt deleted file mode 100644 index 8c10e88a72b..00000000000 --- a/.riot/requirements/957161b.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/957161b.in -# -anyio==3.7.1 -asgiref==3.7.2 -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/976376a.txt b/.riot/requirements/976376a.txt deleted file mode 100644 index 0d3b8e160f6..00000000000 --- a/.riot/requirements/976376a.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/976376a.in -# -attrs==23.2.0 -blinker==1.6.3 -certifi==2024.6.2 -charset-normalizer==3.3.2 -click==8.1.7 -coverage[toml]==7.2.7 -exceptiongroup==1.2.1 -flask==2.2.5 -flask-openapi3==2.5.5 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -itsdangerous==2.1.2 -jinja2==3.1.4 -markupsafe==2.1.5 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pydantic==1.10.17 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.19 -werkzeug==2.2.3 -zipp==3.15.0 diff --git a/.riot/requirements/9ba9bfd.txt b/.riot/requirements/9ba9bfd.txt deleted file mode 100644 index ab635eb0366..00000000000 --- a/.riot/requirements/9ba9bfd.txt +++ /dev/null @@ -1,47 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/9ba9bfd.in -# -attrs==23.2.0 -beautifulsoup4==4.12.3 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hupper==1.12.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pastedeploy==3.1.0 -plaster==1.1.2 -plaster-pastedeploy==1.0.1 -pluggy==1.2.0 -pserve-test-app @ file:///root/project/tests/contrib/pyramid/pserve_app -pyramid==2.0.2 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sortedcontainers==2.4.0 -soupsieve==2.4.1 -tomli==2.0.1 -translationstring==1.4 -typing-extensions==4.7.1 -urllib3==2.0.7 -venusian==3.1.0 -waitress==2.1.2 -webob==1.8.7 -webtest==3.0.0 -zipp==3.15.0 -zope-deprecation==5.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/9bc08b4.txt b/.riot/requirements/9bc08b4.txt deleted file mode 100644 index 36c8b082f91..00000000000 --- a/.riot/requirements/9bc08b4.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/9bc08b4.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -loguru==0.7.2 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/9e36105.txt b/.riot/requirements/9e36105.txt deleted file mode 100644 index 9849b908049..00000000000 --- a/.riot/requirements/9e36105.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/9e36105.in -# -async-timeout==4.0.3 -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -redis==4.6.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/a009c45.txt b/.riot/requirements/a009c45.txt deleted file mode 100644 index f76d7d5ab36..00000000000 --- a/.riot/requirements/a009c45.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/a009c45.in -# -async-timeout==4.0.3 -attrs==23.1.0 -click==7.1.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -redis==5.0.1 -rq==1.8.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/a0aa271.txt b/.riot/requirements/a0aa271.txt deleted file mode 100644 index c88c04d4be7..00000000000 --- a/.riot/requirements/a0aa271.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/a0aa271.in -# -anyio==3.7.1 -attrs==23.2.0 -certifi==2024.2.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -more-itertools==8.10.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==2.12.0 -pytest-mock==2.0.0 -pytest-randomly==3.12.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/a5efead.txt b/.riot/requirements/a5efead.txt deleted file mode 100644 index 109810d43b5..00000000000 --- a/.riot/requirements/a5efead.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/a5efead.in -# -async-timeout==4.0.3 -attrs==23.1.0 -click==7.1.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -redis==5.0.1 -rq==1.15.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/a9dcb3f.txt b/.riot/requirements/a9dcb3f.txt deleted file mode 100644 index 2f9faacb296..00000000000 --- a/.riot/requirements/a9dcb3f.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/a9dcb3f.in -# -async-timeout==4.0.3 -attrs==24.2.0 -coverage[toml]==7.2.7 -dramatiq==1.16.0 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -prometheus-client==0.17.1 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -redis==5.0.8 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/aba89a0.txt b/.riot/requirements/aba89a0.txt deleted file mode 100644 index de15004bcf0..00000000000 --- a/.riot/requirements/aba89a0.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/aba89a0.in -# -astunparse==1.6.3 -attrs==23.2.0 -certifi==2024.6.2 -cffi==1.16.0 -charset-normalizer==3.3.2 -coverage[toml]==7.5.3 -cryptography==42.0.7 -googleapis-common-protos==1.63.1 -greenlet==3.0.3 -grpcio==1.64.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.5.0 -protobuf==5.27.0 -psycopg2-binary==2.9.9 -pycparser==2.22 -pycryptodome==3.20.0 -pytest==8.2.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -requests==2.32.3 -simplejson==3.19.2 -six==1.16.0 -sortedcontainers==2.4.0 -sqlalchemy==2.0.22 -typing-extensions==4.12.1 -urllib3==2.2.1 -wheel==0.43.0 diff --git a/.riot/requirements/aca97c1.txt b/.riot/requirements/aca97c1.txt deleted file mode 100644 index 140b732f018..00000000000 --- a/.riot/requirements/aca97c1.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/aca97c1.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pymemcache==3.5.2 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/af3567d.txt b/.riot/requirements/af3567d.txt deleted file mode 100644 index e6c2256704a..00000000000 --- a/.riot/requirements/af3567d.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/af3567d.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.1.3 -httpretty==1.1.4 -hypothesis==6.45.0 -importlib-metadata==6.7.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 -zipp==3.15.0 diff --git a/.riot/requirements/b0a5cc3.txt b/.riot/requirements/b0a5cc3.txt deleted file mode 100644 index ddc22947308..00000000000 --- a/.riot/requirements/b0a5cc3.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/b0a5cc3.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -mongoengine==0.29.1 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pymongo==3.13.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/b0f80c7.txt b/.riot/requirements/b0f80c7.txt new file mode 100644 index 00000000000..6e1f4faa53d --- /dev/null +++ b/.riot/requirements/b0f80c7.txt @@ -0,0 +1,45 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/b0f80c7.in +# +attrs==25.1.0 +boto3==1.36.10 +botocore==1.36.10 +bytecode==0.16.1 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +datadog==0.51.0 +datadog-lambda==6.105.0 +ddtrace==2.20.0 +deprecated==1.2.18 +envier==0.5.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.29.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==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +python-dateutil==2.9.0.post0 +requests==2.32.3 +s3transfer==0.11.2 +six==1.17.0 +sortedcontainers==2.4.0 +typing-extensions==4.12.2 +ujson==5.10.0 +urllib3==2.3.0 +wrapt==1.17.2 +xmltodict==0.14.2 +zipp==3.21.0 diff --git a/.riot/requirements/b1df5a4.txt b/.riot/requirements/b1df5a4.txt deleted file mode 100644 index 3d202e5eeba..00000000000 --- a/.riot/requirements/b1df5a4.txt +++ /dev/null @@ -1,37 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/b1df5a4.in -# -attrs==24.2.0 -certifi==2024.12.14 -charset-normalizer==3.4.1 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -gevent==22.10.2 -greenlet==3.1.1 -gunicorn==23.0.0 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 -zope-event==5.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/b35a160.txt b/.riot/requirements/b35a160.txt new file mode 100644 index 00000000000..d0202d9b774 --- /dev/null +++ b/.riot/requirements/b35a160.txt @@ -0,0 +1,51 @@ +# +# This file is autogenerated by pip-compile with Python 3.8 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/b35a160.in +# +annotated-types==0.7.0 +anyio==4.5.2 +attrs==22.1.0 +boto3==1.36.9 +botocore==1.36.9 +cattrs==23.1.2 +certifi==2024.12.14 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 +fastapi==0.115.8 +h11==0.14.0 +httpcore==1.0.7 +httpretty==1.1.4 +httpx==0.28.1 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.5.0 +iniconfig==2.0.0 +jmespath==1.0.1 +mock==5.1.0 +msgpack==1.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pydantic==2.10.6 +pydantic-core==2.27.2 +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 +s3transfer==0.11.2 +six==1.17.0 +sniffio==1.3.1 +sortedcontainers==2.4.0 +starlette==0.44.0 +structlog==25.1.0 +tomli==2.2.1 +typing-extensions==4.12.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 diff --git a/.riot/requirements/b5d5a35.txt b/.riot/requirements/b5d5a35.txt new file mode 100644 index 00000000000..7838b7abd2c --- /dev/null +++ b/.riot/requirements/b5d5a35.txt @@ -0,0 +1,52 @@ +# +# This file is autogenerated by pip-compile with Python 3.10 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/b5d5a35.in +# +annotated-types==0.7.0 +anyio==4.8.0 +attrs==24.3.0 +certifi==2024.12.14 +coverage[toml]==7.6.10 +distro==1.9.0 +exceptiongroup==1.2.2 +h11==0.14.0 +httpcore==1.0.7 +httpx==0.27.2 +hypothesis==6.45.0 +idna==3.10 +iniconfig==2.0.0 +mock==5.1.0 +multidict==6.1.0 +numpy==2.2.2 +openai[datalib,embeddings]==1.30.1 +opentracing==2.4.0 +packaging==24.2 +pandas==2.2.3 +pandas-stubs==2.2.3.241126 +pillow==9.5.0 +pluggy==1.5.0 +propcache==0.2.1 +pydantic==2.10.5 +pydantic-core==2.27.2 +pytest==8.3.4 +pytest-asyncio==0.21.1 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +python-dateutil==2.9.0.post0 +pytz==2024.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.12.2 +tzdata==2025.1 +urllib3==1.26.20 +vcrpy==4.2.1 +wrapt==1.17.2 +yarl==1.18.3 diff --git a/.riot/requirements/b7a530f.txt b/.riot/requirements/b7a530f.txt index 95de3cea117..802d6e0593e 100644 --- a/.riot/requirements/b7a530f.txt +++ b/.riot/requirements/b7a530f.txt @@ -4,21 +4,21 @@ # # pip-compile --no-annotate .riot/requirements/b7a530f.in # -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==25.1.0 +coverage[toml]==7.6.1 +exceptiongroup==1.2.2 hypothesis==6.45.0 -importlib-metadata==7.0.0 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 +pytest-cov==5.0.0 +pytest-mock==3.14.0 pytest-randomly==3.15.0 sortedcontainers==2.4.0 -tomli==2.0.1 -zipp==3.17.0 +tomli==2.2.1 +zipp==3.20.2 diff --git a/.riot/requirements/bc071f4.txt b/.riot/requirements/bc071f4.txt new file mode 100644 index 00000000000..5292c276c7e --- /dev/null +++ b/.riot/requirements/bc071f4.txt @@ -0,0 +1,47 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/bc071f4.in +# +attrs==25.1.0 +boto3==1.36.10 +botocore==1.36.10 +bytecode==0.16.1 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +datadog==0.51.0 +datadog-lambda==6.105.0 +ddtrace==2.20.0 +deprecated==1.2.18 +envier==0.5.2 +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.29.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==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.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.21.0 diff --git a/.riot/requirements/bc1efaa.txt b/.riot/requirements/bc1efaa.txt deleted file mode 100644 index 9149eb8b0f4..00000000000 --- a/.riot/requirements/bc1efaa.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/bc1efaa.in -# -attrs==23.2.0 -blinker==1.6.3 -click==8.1.7 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -flask==2.2.5 -flask-caching==1.10.1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -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.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-memcached==1.62 -redis==2.10.6 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -werkzeug==2.2.3 -zipp==3.15.0 diff --git a/.riot/requirements/bceb0bd.txt b/.riot/requirements/bceb0bd.txt deleted file mode 100644 index c732753dcc3..00000000000 --- a/.riot/requirements/bceb0bd.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/bceb0bd.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/bdefe70.txt b/.riot/requirements/bdefe70.txt deleted file mode 100644 index 6161c33b64e..00000000000 --- a/.riot/requirements/bdefe70.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/bdefe70.in -# -attrs==23.1.0 -beautifulsoup4==4.12.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -soupsieve==2.4.1 -tomli==2.0.1 -typing-extensions==4.7.1 -waitress==2.1.2 -webob==1.8.7 -webtest==3.0.0 -zipp==3.15.0 diff --git a/.riot/requirements/be3147f.txt b/.riot/requirements/be3147f.txt index a3f06e8e867..8fd91002bf4 100644 --- a/.riot/requirements/be3147f.txt +++ b/.riot/requirements/be3147f.txt @@ -4,19 +4,19 @@ # # pip-compile --no-annotate .riot/requirements/be3147f.in # -attrs==23.1.0 -coverage[toml]==7.3.4 -exceptiongroup==1.2.0 +attrs==25.1.0 +coverage[toml]==7.6.10 +exceptiongroup==1.2.2 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 -tomli==2.0.1 +tomli==2.2.1 diff --git a/.riot/requirements/beea277.txt b/.riot/requirements/beea277.txt deleted file mode 100644 index f9fe9a0405a..00000000000 --- a/.riot/requirements/beea277.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/beea277.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -msgpack==1.0.5 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/c2a85a5.txt b/.riot/requirements/c2a85a5.txt deleted file mode 100644 index bc7cbcea847..00000000000 --- a/.riot/requirements/c2a85a5.txt +++ /dev/null @@ -1,45 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/c2a85a5.in -# -aiofiles==23.2.1 -anyio==3.7.1 -attrs==23.1.0 -certifi==2023.11.17 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.16.3 -httptools==0.6.0 -httpx==0.23.3 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.4 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.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.7.1 -ujson==5.7.0 -urllib3==2.0.7 -uvloop==0.18.0 -websockets==10.4 -zipp==3.15.0 diff --git a/.riot/requirements/c384590.txt b/.riot/requirements/c384590.txt deleted file mode 100644 index c32b2e04262..00000000000 --- a/.riot/requirements/c384590.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile --no-annotate .riot/requirements/c384590.in -# -annotated-types==0.7.0 -attrs==23.2.0 -blinker==1.8.2 -certifi==2024.6.2 -charset-normalizer==3.3.2 -click==8.1.7 -coverage[toml]==7.5.4 -flask==2.3.3 -flask-openapi3==3.1.3 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==8.0.0 -iniconfig==2.0.0 -itsdangerous==2.2.0 -jinja2==3.1.4 -markupsafe==2.1.5 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -pydantic==2.8.0 -pydantic-core==2.20.0 -pytest==8.2.2 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -requests==2.32.3 -sortedcontainers==2.4.0 -typing-extensions==4.12.2 -urllib3==1.26.19 -werkzeug==2.3.8 -zipp==3.19.2 diff --git a/.riot/requirements/c4d4455.txt b/.riot/requirements/c4d4455.txt index 1a8b9f970ef..f6d50daf086 100644 --- a/.riot/requirements/c4d4455.txt +++ b/.riot/requirements/c4d4455.txt @@ -2,19 +2,19 @@ # This file is autogenerated by pip-compile with Python 3.13 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/c4d4455.in +# pip-compile --no-annotate .riot/requirements/c4d4455.in # -attrs==24.2.0 -coverage[toml]==7.6.1 +attrs==25.1.0 +coverage[toml]==7.6.10 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.3 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 diff --git a/.riot/requirements/c74f6e0.txt b/.riot/requirements/c74f6e0.txt deleted file mode 100644 index 63345853661..00000000000 --- a/.riot/requirements/c74f6e0.txt +++ /dev/null @@ -1,51 +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/c74f6e0.in -# -annotated-types==0.7.0 -anyio==4.4.0 -attrs==24.2.0 -certifi==2024.7.4 -coverage[toml]==7.6.1 -distro==1.9.0 -exceptiongroup==1.2.2 -h11==0.14.0 -httpcore==1.0.5 -httpx==0.27.0 -hypothesis==6.45.0 -idna==3.8 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.5 -numpy==2.1.0 -openai[datalib,embeddings]==1.30.1 -opentracing==2.4.0 -packaging==24.1 -pandas==2.2.2 -pandas-stubs==2.2.2.240807 -pillow==9.5.0 -pluggy==1.5.0 -pydantic==2.8.2 -pydantic-core==2.20.1 -pytest==8.3.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -pytz==2024.1 -pyyaml==6.0.2 -six==1.16.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -tqdm==4.66.5 -types-pytz==2024.1.0.20240417 -typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==1.26.19 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 diff --git a/.riot/requirements/cc03823.txt b/.riot/requirements/cc03823.txt deleted file mode 100644 index f9d025443cc..00000000000 --- a/.riot/requirements/cc03823.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/cc03823.in -# -asynctest==0.13.0 -attrs==23.1.0 -coverage[toml]==7.2.7 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -py==1.11.0 -pytest==6.2.5 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -toml==0.10.2 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/ce0b0e6.txt b/.riot/requirements/ce0b0e6.txt new file mode 100644 index 00000000000..02c1978a081 --- /dev/null +++ b/.riot/requirements/ce0b0e6.txt @@ -0,0 +1,45 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/ce0b0e6.in +# +attrs==25.1.0 +boto3==1.36.10 +botocore==1.36.10 +bytecode==0.16.1 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +datadog==0.51.0 +datadog-lambda==6.105.0 +ddtrace==2.20.0 +deprecated==1.2.18 +envier==0.5.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.29.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==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +python-dateutil==2.9.0.post0 +requests==2.32.3 +s3transfer==0.11.2 +six==1.17.0 +sortedcontainers==2.4.0 +typing-extensions==4.12.2 +ujson==5.10.0 +urllib3==2.3.0 +wrapt==1.17.2 +xmltodict==0.14.2 +zipp==3.21.0 diff --git a/.riot/requirements/cf88166.txt b/.riot/requirements/cf88166.txt deleted file mode 100644 index fb1db2b1da0..00000000000 --- a/.riot/requirements/cf88166.txt +++ /dev/null @@ -1,47 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/cf88166.in -# -attrs==23.2.0 -beautifulsoup4==4.12.3 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hupper==1.12.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pastedeploy==3.1.0 -plaster==1.1.2 -plaster-pastedeploy==1.0.1 -pluggy==1.2.0 -pserve-test-app @ file:///root/project/tests/contrib/pyramid/pserve_app -pyramid==1.10.8 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sortedcontainers==2.4.0 -soupsieve==2.4.1 -tomli==2.0.1 -translationstring==1.4 -typing-extensions==4.7.1 -urllib3==2.0.7 -venusian==3.1.0 -waitress==2.1.2 -webob==1.8.7 -webtest==3.0.0 -zipp==3.15.0 -zope-deprecation==5.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/d0355c2.txt b/.riot/requirements/d0355c2.txt deleted file mode 100644 index 087e858b6e1..00000000000 --- a/.riot/requirements/d0355c2.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/d0355c2.in -# -async-timeout==4.0.3 -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -gevent==22.10.2 -greenlet==3.1.1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -redis==5.0.8 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 -zope-event==5.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/d1dd9c4.txt b/.riot/requirements/d1dd9c4.txt deleted file mode 100644 index 5fc6fc374c7..00000000000 --- a/.riot/requirements/d1dd9c4.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/d1dd9c4.in -# -attrs==23.2.0 -blinker==1.6.3 -certifi==2024.6.2 -charset-normalizer==3.3.2 -click==7.1.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.1 -flask==1.1.4 -flask-openapi3==1.1.5 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -itsdangerous==1.1.0 -jinja2==2.11.3 -markupsafe==1.1.1 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pydantic==1.10.17 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.19 -werkzeug==1.0.1 -zipp==3.15.0 diff --git a/.riot/requirements/d2b6740.txt b/.riot/requirements/d2b6740.txt deleted file mode 100644 index 83fed7d33d5..00000000000 --- a/.riot/requirements/d2b6740.txt +++ /dev/null @@ -1,33 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/d2b6740.in -# -attrs==24.2.0 -colorama==0.4.6 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -gunicorn==23.0.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -lz4==4.3.2 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -protobuf==4.24.4 -py-cpuinfo==8.0.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-benchmark==4.0.0 -pytest-cov==4.1.0 -pytest-cpp==2.5.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -uwsgi==2.0.27 -zipp==3.15.0 diff --git a/.riot/requirements/d2ca94b.txt b/.riot/requirements/d2ca94b.txt index 2de1205f47a..2e7e08f8ccd 100644 --- a/.riot/requirements/d2ca94b.txt +++ b/.riot/requirements/d2ca94b.txt @@ -2,34 +2,34 @@ # This file is autogenerated by pip-compile with Python 3.8 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/d2ca94b.in +# pip-compile --no-annotate .riot/requirements/d2ca94b.in # asgiref==3.8.1 -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==25.1.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.2.0 +importlib-metadata==8.5.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 +pytest==8.3.4 pytest-cov==5.0.0 pytest-django[testing]==3.10.0 pytest-mock==3.14.0 pytest-randomly==3.15.0 -pytz==2024.1 -six==1.16.0 +pytz==2024.2 +six==1.17.0 sortedcontainers==2.4.0 -sqlparse==0.5.1 -tomli==2.0.1 +sqlparse==0.5.3 +tomli==2.2.1 typing-extensions==4.12.2 -zipp==3.19.2 +zipp==3.20.2 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +# setuptools diff --git a/.riot/requirements/d3868d9.txt b/.riot/requirements/d3868d9.txt new file mode 100644 index 00000000000..d369ff90575 --- /dev/null +++ b/.riot/requirements/d3868d9.txt @@ -0,0 +1,46 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --allow-unsafe --no-annotate .riot/requirements/d3868d9.in +# +attrs==25.1.0 +boto3==1.36.10 +botocore==1.36.10 +bytecode==0.16.1 +certifi==2024.12.14 +charset-normalizer==3.4.1 +coverage[toml]==7.6.10 +datadog==0.51.0 +datadog-lambda==6.105.0 +ddtrace==2.20.0 +deprecated==1.2.18 +envier==0.5.2 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.5.0 +iniconfig==2.0.0 +jmespath==1.0.1 +legacy-cgi==2.6.2 +mock==5.1.0 +opentelemetry-api==1.29.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==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +python-dateutil==2.9.0.post0 +requests==2.32.3 +s3transfer==0.11.2 +six==1.17.0 +sortedcontainers==2.4.0 +typing-extensions==4.12.2 +ujson==5.10.0 +urllib3==2.3.0 +wrapt==1.17.2 +xmltodict==0.14.2 +zipp==3.21.0 diff --git a/.riot/requirements/d39d3de.txt b/.riot/requirements/d39d3de.txt deleted file mode 100644 index 53ccfd3b257..00000000000 --- a/.riot/requirements/d39d3de.txt +++ /dev/null @@ -1,84 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# pip-compile --allow-unsafe --no-annotate .riot/requirements/d39d3de.in -# -ai21==3.0.1 -ai21-tokenizer==0.12.0 -aiohappyeyeballs==2.4.4 -aiohttp==3.11.10 -aiosignal==1.3.1 -anyio==4.7.0 -async-timeout==4.0.3 -attrs==24.2.0 -backoff==2.2.1 -certifi==2024.8.30 -charset-normalizer==3.4.0 -cohere==4.57 -coverage[toml]==7.6.9 -dataclasses-json==0.5.14 -dnspython==2.7.0 -exceptiongroup==1.2.2 -fastavro==1.9.7 -filelock==3.16.1 -frozenlist==1.5.0 -fsspec==2024.10.0 -greenlet==3.0.3 -h11==0.14.0 -httpcore==1.0.7 -httpx==0.27.2 -huggingface-hub==0.26.5 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.11.0 -iniconfig==2.0.0 -jsonpatch==1.33 -jsonpointer==3.0.0 -langchain==0.0.192 -langchain-community==0.0.14 -langchain-core==0.1.23 -langchainplus-sdk==0.0.4 -langsmith==0.0.87 -loguru==0.7.3 -marshmallow==3.23.1 -mock==5.1.0 -multidict==6.1.0 -mypy-extensions==1.0.0 -numexpr==2.8.5 -numpy==1.26.4 -openai==0.27.8 -openapi-schema-pydantic==1.2.4 -opentracing==2.4.0 -packaging==23.2 -pinecone-client==2.2.4 -pluggy==1.5.0 -propcache==0.2.1 -psutil==6.1.0 -pydantic==1.10.19 -pytest==8.3.4 -pytest-asyncio==0.23.7 -pytest-cov==6.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.10.1 -python-dateutil==2.9.0.post0 -pyyaml==6.0.2 -regex==2024.11.6 -requests==2.32.3 -sentencepiece==0.2.0 -six==1.17.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -sqlalchemy==2.0.36 -tenacity==8.5.0 -tiktoken==0.8.0 -tokenizers==0.21.0 -tomli==2.2.1 -tqdm==4.67.1 -typing-extensions==4.12.2 -typing-inspect==0.9.0 -urllib3==1.26.20 -vcrpy==6.0.1 -wrapt==1.17.0 -yarl==1.18.3 -zipp==3.21.0 diff --git a/.riot/requirements/d5d6e2c.txt b/.riot/requirements/d5d6e2c.txt deleted file mode 100644 index a4f7024b452..00000000000 --- a/.riot/requirements/d5d6e2c.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/d5d6e2c.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -loguru==0.4.1 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/d68f919.txt b/.riot/requirements/d68f919.txt deleted file mode 100644 index 709c607ad19..00000000000 --- a/.riot/requirements/d68f919.txt +++ /dev/null @@ -1,29 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/d68f919.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -googleapis-common-protos==1.65.0 -grpcio==1.34.1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -protobuf==4.24.4 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/d751a10.txt b/.riot/requirements/d751a10.txt deleted file mode 100644 index 3169a9ed793..00000000000 --- a/.riot/requirements/d751a10.txt +++ /dev/null @@ -1,43 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/d751a10.in -# -aiobotocore==2.0.1 -aiohttp==3.8.6 -aioitertools==0.11.0 -aiosignal==1.3.1 -async-generator==1.10 -async-timeout==4.0.3 -asynctest==0.13.0 -attrs==24.2.0 -botocore==1.22.8 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -frozenlist==1.3.3 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -jmespath==0.10.0 -mock==5.1.0 -multidict==6.0.5 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.9.0.post0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.19 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/dae821a.txt b/.riot/requirements/dae821a.txt index a61fc983f3f..0bb3a53e1d9 100644 --- a/.riot/requirements/dae821a.txt +++ b/.riot/requirements/dae821a.txt @@ -2,34 +2,34 @@ # This file is autogenerated by pip-compile with Python 3.9 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/dae821a.in +# pip-compile --no-annotate .riot/requirements/dae821a.in # asgiref==3.8.1 -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==25.1.0 +coverage[toml]==7.6.10 django==3.2.25 django-configurations==2.5.1 django-hosts==4.0 exceptiongroup==1.2.2 hypothesis==6.45.0 -importlib-metadata==8.2.0 +importlib-metadata==8.6.1 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-django[testing]==3.10.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -pytz==2024.1 -six==1.16.0 +pytest-randomly==3.16.0 +pytz==2024.2 +six==1.17.0 sortedcontainers==2.4.0 -sqlparse==0.5.1 -tomli==2.0.1 +sqlparse==0.5.3 +tomli==2.2.1 typing-extensions==4.12.2 -zipp==3.19.2 +zipp==3.21.0 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +# setuptools diff --git a/.riot/requirements/dd525d9.txt b/.riot/requirements/dd525d9.txt deleted file mode 100644 index 03c376f19df..00000000000 --- a/.riot/requirements/dd525d9.txt +++ /dev/null @@ -1,49 +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/dd525d9.in -# -attrs==23.2.0 -boto3==1.34.139 -botocore==1.34.139 -bytecode==0.15.1 -cattrs==23.2.3 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.5.4 -datadog==0.49.1 -datadog-lambda==6.96.0 -ddsketch==3.0.1 -ddtrace==2.9.2 -deprecated==1.2.14 -envier==0.5.2 -exceptiongroup==1.2.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==7.1.0 -iniconfig==2.0.0 -jmespath==1.0.1 -mock==5.1.0 -opentelemetry-api==1.26.0 -opentracing==2.4.0 -packaging==24.1 -pluggy==1.5.0 -protobuf==5.27.2 -pytest==8.2.2 -pytest-asyncio==0.21.1 -pytest-cov==5.0.0 -pytest-mock==3.14.0 -pytest-randomly==3.15.0 -python-dateutil==2.9.0.post0 -requests==2.32.3 -s3transfer==0.10.2 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.12.2 -ujson==5.10.0 -urllib3==1.26.19 -wrapt==1.16.0 -xmltodict==0.13.0 -zipp==3.19.2 diff --git a/.riot/requirements/de95112.txt b/.riot/requirements/de95112.txt deleted file mode 100644 index 127a4b50d75..00000000000 --- a/.riot/requirements/de95112.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/de95112.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -gevent==22.10.2 -greenlet==3.1.1 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 -zope-event==5.0 -zope-interface==6.4.post2 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/df69ea1.txt b/.riot/requirements/df69ea1.txt deleted file mode 100644 index 88f73eb6976..00000000000 --- a/.riot/requirements/df69ea1.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/df69ea1.in -# -attrs==23.2.0 -blinker==1.6.3 -certifi==2024.6.2 -charset-normalizer==3.3.2 -click==7.1.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.1 -flask==1.1.4 -flask-openapi3==1.1.5 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -itsdangerous==1.1.0 -jinja2==2.11.3 -markupsafe==1.1.1 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pydantic==1.10.17 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.19 -werkzeug==1.0.1 -zipp==3.15.0 diff --git a/.riot/requirements/e0b9dc9.txt b/.riot/requirements/e0b9dc9.txt deleted file mode 100644 index a6f10680dbb..00000000000 --- a/.riot/requirements/e0b9dc9.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/e0b9dc9.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -graphql-core==3.2.3 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/e2ae847.txt b/.riot/requirements/e2ae847.txt index e5dd6404195..ff8159cab4d 100644 --- a/.riot/requirements/e2ae847.txt +++ b/.riot/requirements/e2ae847.txt @@ -4,17 +4,17 @@ # # pip-compile --no-annotate .riot/requirements/e2ae847.in # -attrs==23.1.0 -coverage[toml]==7.3.4 +attrs==25.1.0 +coverage[toml]==7.6.10 hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==23.2 -pluggy==1.3.0 -pytest==7.4.3 +packaging==24.2 +pluggy==1.5.0 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.12.0 -pytest-randomly==3.15.0 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 sortedcontainers==2.4.0 diff --git a/.riot/requirements/e2e33be.txt b/.riot/requirements/e2e33be.txt deleted file mode 100644 index a69d0bbfdd7..00000000000 --- a/.riot/requirements/e2e33be.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/e2e33be.in -# -aiomysql==0.2.0 -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pymysql==1.1.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/e312e0d.txt b/.riot/requirements/e312e0d.txt deleted file mode 100644 index 08cba09f0c4..00000000000 --- a/.riot/requirements/e312e0d.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/e312e0d.in -# -aiofiles==23.2.1 -annotated-types==0.5.0 -anyio==3.7.1 -attrs==24.2.0 -certifi==2024.12.14 -charset-normalizer==3.4.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -fastapi==0.103.2 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.10 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pydantic==2.5.3 -pydantic-core==2.14.6 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-multipart==0.0.8 -requests==2.31.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -starlette==0.27.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==2.0.7 -zipp==3.15.0 diff --git a/.riot/requirements/e39f833.txt b/.riot/requirements/e39f833.txt deleted file mode 100644 index e71709e9da3..00000000000 --- a/.riot/requirements/e39f833.txt +++ /dev/null @@ -1,48 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/e39f833.in -# -attrs==23.2.0 -boto3==1.33.13 -botocore==1.33.13 -bytecode==0.13.0 -cattrs==23.1.2 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -datadog==0.49.1 -datadog-lambda==5.85.0 -ddsketch==3.0.1 -ddtrace==2.9.2 -deprecated==1.2.14 -envier==0.5.2 -exceptiongroup==1.2.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.5.0 -iniconfig==2.0.0 -jmespath==1.0.1 -mock==5.1.0 -opentelemetry-api==1.22.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -protobuf==4.24.4 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.9.0.post0 -requests==2.31.0 -s3transfer==0.8.2 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.19 -wrapt==1.16.0 -xmltodict==0.13.0 -zipp==3.15.0 diff --git a/.riot/requirements/e3a9589.txt b/.riot/requirements/e3a9589.txt deleted file mode 100644 index 25dd12efa84..00000000000 --- a/.riot/requirements/e3a9589.txt +++ /dev/null @@ -1,27 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/e3a9589.in -# -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.2.7 -elasticsearch7==7.13.4 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.18 -zipp==3.15.0 diff --git a/.riot/requirements/13fec34.txt b/.riot/requirements/e648105.txt similarity index 50% rename from .riot/requirements/13fec34.txt rename to .riot/requirements/e648105.txt index 8858506f793..c7802cb3b38 100644 --- a/.riot/requirements/13fec34.txt +++ b/.riot/requirements/e648105.txt @@ -2,48 +2,49 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/13fec34.in +# pip-compile --allow-unsafe --no-annotate .riot/requirements/e648105.in # annotated-types==0.7.0 anyio==3.7.1 -attrs==24.2.0 -certifi==2024.7.4 -coverage[toml]==7.6.1 +attrs==25.1.0 +certifi==2024.12.14 +coverage[toml]==7.6.10 distro==1.9.0 h11==0.14.0 -httpcore==1.0.5 -httpx==0.27.0 +httpcore==1.0.7 +httpx==0.27.2 hypothesis==6.45.0 -idna==3.8 +idna==3.10 iniconfig==2.0.0 mock==5.1.0 -multidict==6.0.5 -numpy==2.1.0 -openai[datalib,embeddings]==1.1.1 +multidict==6.1.0 +numpy==2.2.2 +openai[datalib,embeddings]==1.0.0 opentracing==2.4.0 -packaging==24.1 -pandas==2.2.2 -pandas-stubs==2.2.2.240807 +packaging==24.2 +pandas==2.2.3 +pandas-stubs==2.2.3.241126 pillow==9.5.0 pluggy==1.5.0 -pydantic==2.8.2 -pydantic-core==2.20.1 -pytest==8.3.2 +propcache==0.2.1 +pydantic==2.10.6 +pydantic-core==2.27.2 +pytest==8.3.4 pytest-asyncio==0.21.1 -pytest-cov==5.0.0 +pytest-cov==6.0.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 +pytest-randomly==3.16.0 python-dateutil==2.9.0.post0 -pytz==2024.1 +pytz==2024.2 pyyaml==6.0.2 -six==1.16.0 +six==1.17.0 sniffio==1.3.1 sortedcontainers==2.4.0 -tqdm==4.66.5 -types-pytz==2024.1.0.20240417 +tqdm==4.67.1 +types-pytz==2024.2.0.20241221 typing-extensions==4.12.2 -tzdata==2024.1 -urllib3==1.26.19 +tzdata==2025.1 +urllib3==1.26.20 vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 +wrapt==1.17.2 +yarl==1.18.3 diff --git a/.riot/requirements/e6619c9.txt b/.riot/requirements/e6619c9.txt deleted file mode 100644 index d6eb30c32e2..00000000000 --- a/.riot/requirements/e6619c9.txt +++ /dev/null @@ -1,38 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/e6619c9.in -# -aiohttp==3.8.6 -aiohttp-jinja2==1.5.1 -aiosignal==1.3.1 -async-timeout==4.0.3 -asynctest==0.13.0 -attrs==23.2.0 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.1 -frozenlist==1.3.3 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.7.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.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/e6872f6.txt b/.riot/requirements/e6872f6.txt new file mode 100644 index 00000000000..0f8cf265bf0 --- /dev/null +++ b/.riot/requirements/e6872f6.txt @@ -0,0 +1,38 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/e6872f6.in +# +annotated-types==0.7.0 +attrs==25.1.0 +blinker==1.9.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +click==8.1.8 +coverage[toml]==7.6.10 +flask==2.3.3 +flask-openapi3==4.0.3 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.6.1 +iniconfig==2.0.0 +itsdangerous==2.2.0 +jinja2==3.1.5 +markupsafe==3.0.2 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pydantic==2.10.6 +pydantic-core==2.27.2 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +requests==2.32.3 +sortedcontainers==2.4.0 +typing-extensions==4.12.2 +urllib3==1.26.20 +werkzeug==3.1.3 +zipp==3.21.0 diff --git a/.riot/requirements/e771330.txt b/.riot/requirements/e771330.txt deleted file mode 100644 index 5179cf22d9d..00000000000 --- a/.riot/requirements/e771330.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/e771330.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mako==1.2.4 -markupsafe==2.1.5 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/e79a8f5.txt b/.riot/requirements/e79a8f5.txt deleted file mode 100644 index 153563f68c4..00000000000 --- a/.riot/requirements/e79a8f5.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/e79a8f5.in -# -attrs==23.2.0 -autocommand==2.2.2 -cheroot==10.0.1 -cherrypy==18.10.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -importlib-resources==5.12.0 -inflect==6.0.5 -iniconfig==2.0.0 -jaraco-collections==4.2.0 -jaraco-context==4.3.0 -jaraco-functools==3.7.0 -jaraco-text==3.11.1 -mock==5.1.0 -more-itertools==8.10.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -portend==3.1.0 -pydantic==1.10.17 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -pytz==2024.1 -sortedcontainers==2.4.0 -tempora==5.3.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zc-lockfile==3.0.post1 -zipp==3.15.0 - -# The following packages are considered to be unsafe in a requirements file: -setuptools==68.0.0 diff --git a/.riot/requirements/ebbfffb.txt b/.riot/requirements/ebbfffb.txt deleted file mode 100644 index 355fb28a70c..00000000000 --- a/.riot/requirements/ebbfffb.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/ebbfffb.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.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.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/edb39c1.txt b/.riot/requirements/edb39c1.txt deleted file mode 100644 index 667e74f25cd..00000000000 --- a/.riot/requirements/edb39c1.txt +++ /dev/null @@ -1,48 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --no-annotate --resolver=backtracking .riot/requirements/edb39c1.in -# -attrs==23.2.0 -boto3==1.33.13 -botocore==1.33.13 -bytecode==0.13.0 -cattrs==23.1.2 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -datadog==0.49.1 -datadog-lambda==5.85.0 -ddsketch==3.0.1 -ddtrace==2.9.2 -deprecated==1.2.14 -envier==0.5.2 -exceptiongroup==1.2.1 -hypothesis==6.45.0 -idna==3.7 -importlib-metadata==6.5.0 -iniconfig==2.0.0 -jmespath==1.0.1 -mock==5.1.0 -opentelemetry-api==1.22.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -protobuf==4.24.4 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.9.0.post0 -requests==2.31.0 -s3transfer==0.8.2 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.19 -wrapt==1.16.0 -xmltodict==0.13.0 -zipp==3.15.0 diff --git a/.riot/requirements/ee63ae9.txt b/.riot/requirements/ee63ae9.txt deleted file mode 100644 index 42fb587d525..00000000000 --- a/.riot/requirements/ee63ae9.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/ee63ae9.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pyodbc==4.0.39 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/f201f06.txt b/.riot/requirements/f201f06.txt deleted file mode 100644 index 3a85f181c39..00000000000 --- a/.riot/requirements/f201f06.txt +++ /dev/null @@ -1,34 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/f201f06.in -# -anyio==3.7.1 -asgiref==3.0.0 -async-timeout==3.0.1 -attrs==23.1.0 -certifi==2023.11.17 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.6 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sniffio==1.3.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/f24db70.txt b/.riot/requirements/f24db70.txt index 03855cc49b1..51c04922304 100644 --- a/.riot/requirements/f24db70.txt +++ b/.riot/requirements/f24db70.txt @@ -2,11 +2,11 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --allow-unsafe --no-annotate .riot/requirements/f24db70.in +# pip-compile --no-annotate .riot/requirements/f24db70.in # asgiref==3.8.1 -attrs==23.2.0 -coverage[toml]==7.6.0 +attrs==25.1.0 +coverage[toml]==7.6.10 django==3.2.25 django-configurations==2.5.1 django-hosts==4.0 @@ -14,17 +14,17 @@ hypothesis==6.45.0 iniconfig==2.0.0 mock==5.1.0 opentracing==2.4.0 -packaging==24.1 +packaging==24.2 pluggy==1.5.0 -pytest==8.3.1 -pytest-cov==5.0.0 +pytest==8.3.4 +pytest-cov==6.0.0 pytest-django[testing]==3.10.0 pytest-mock==3.14.0 -pytest-randomly==3.15.0 -pytz==2024.1 -six==1.16.0 +pytest-randomly==3.16.0 +pytz==2024.2 +six==1.17.0 sortedcontainers==2.4.0 -sqlparse==0.5.1 +sqlparse==0.5.3 # The following packages are considered to be unsafe in a requirements file: -setuptools==71.1.0 +# setuptools diff --git a/.riot/requirements/f395edd.txt b/.riot/requirements/f395edd.txt deleted file mode 100644 index e91021253c9..00000000000 --- a/.riot/requirements/f395edd.txt +++ /dev/null @@ -1,39 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/f395edd.in -# -amqp==5.2.0 -attrs==23.1.0 -billiard==3.6.4.0 -cached-property==1.5.2 -celery==5.2.7 -click==8.1.7 -click-didyoumean==0.3.0 -click-plugins==1.1.1 -click-repl==0.3.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==4.13.0 -iniconfig==2.0.0 -kombu==5.2.4 -mock==5.1.0 -more-itertools==8.10.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -prompt-toolkit==3.0.43 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -pytz==2023.3.post1 -redis==3.5.3 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -vine==5.1.0 -wcwidth==0.2.12 -zipp==3.15.0 diff --git a/.riot/requirements/f630df9.txt b/.riot/requirements/f630df9.txt deleted file mode 100644 index f35660b5c27..00000000000 --- a/.riot/requirements/f630df9.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/f630df9.in -# -aiohttp==3.8.6 -aiosignal==1.3.1 -async-timeout==4.0.3 -asynctest==0.13.0 -attrs==24.2.0 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -frozenlist==1.3.3 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.5 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-aiohttp==1.0.5 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/f7c30a0.txt b/.riot/requirements/f7c30a0.txt deleted file mode 100644 index 3e4716aede1..00000000000 --- a/.riot/requirements/f7c30a0.txt +++ /dev/null @@ -1,51 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/f7c30a0.in -# -annotated-types==0.5.0 -anyio==3.7.1 -attrs==24.2.0 -certifi==2024.7.4 -coverage[toml]==7.2.7 -distro==1.9.0 -exceptiongroup==1.2.2 -h11==0.14.0 -httpcore==0.17.3 -httpx==0.24.1 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -multidict==6.0.5 -numpy==1.21.6 -openai[datalib,embeddings]==1.1.1 -opentracing==2.4.0 -packaging==24.0 -pandas==1.3.5 -pandas-stubs==1.2.0.62 -pillow==9.5.0 -pluggy==1.2.0 -pydantic==2.5.3 -pydantic-core==2.14.6 -pytest==7.4.4 -pytest-asyncio==0.21.1 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -python-dateutil==2.9.0.post0 -pytz==2024.1 -pyyaml==6.0.1 -six==1.16.0 -sniffio==1.3.1 -sortedcontainers==2.4.0 -tomli==2.0.1 -tqdm==4.66.5 -typing-extensions==4.7.1 -urllib3==1.26.19 -vcrpy==4.2.1 -wrapt==1.16.0 -yarl==1.9.4 -zipp==3.15.0 diff --git a/.riot/requirements/f7ca81b.txt b/.riot/requirements/f7ca81b.txt deleted file mode 100644 index 14de8077cae..00000000000 --- a/.riot/requirements/f7ca81b.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/f7ca81b.in -# -asyncpg==0.28.0 -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-asyncio==0.21.2 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/f850b22.txt b/.riot/requirements/f850b22.txt new file mode 100644 index 00000000000..3bbb8a93c6c --- /dev/null +++ b/.riot/requirements/f850b22.txt @@ -0,0 +1,38 @@ +# +# This file is autogenerated by pip-compile with Python 3.13 +# by the following command: +# +# pip-compile --no-annotate .riot/requirements/f850b22.in +# +annotated-types==0.7.0 +attrs==25.1.0 +blinker==1.9.0 +certifi==2024.12.14 +charset-normalizer==3.4.1 +click==8.1.8 +coverage[toml]==7.6.10 +flask==2.3.3 +flask-openapi3==4.0.3 +hypothesis==6.45.0 +idna==3.10 +importlib-metadata==8.6.1 +iniconfig==2.0.0 +itsdangerous==2.2.0 +jinja2==3.1.5 +markupsafe==3.0.2 +mock==5.1.0 +opentracing==2.4.0 +packaging==24.2 +pluggy==1.5.0 +pydantic==2.10.6 +pydantic-core==2.27.2 +pytest==8.3.4 +pytest-cov==6.0.0 +pytest-mock==3.14.0 +pytest-randomly==3.16.0 +requests==2.32.3 +sortedcontainers==2.4.0 +typing-extensions==4.12.2 +urllib3==1.26.20 +werkzeug==3.1.3 +zipp==3.21.0 diff --git a/.riot/requirements/f8e49a4.txt b/.riot/requirements/f8e49a4.txt deleted file mode 100644 index cd20aeddda5..00000000000 --- a/.riot/requirements/f8e49a4.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/f8e49a4.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -elasticsearch2==2.5.1 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.18 -zipp==3.15.0 diff --git a/.riot/requirements/faa0584.txt b/.riot/requirements/faa0584.txt deleted file mode 100644 index 196bbb033cd..00000000000 --- a/.riot/requirements/faa0584.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/faa0584.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -mysql-connector-python==8.0.33 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -protobuf==3.20.3 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/fcebf38.txt b/.riot/requirements/fcebf38.txt deleted file mode 100644 index bb073b98e07..00000000000 --- a/.riot/requirements/fcebf38.txt +++ /dev/null @@ -1,25 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/fcebf38.in -# -attrs==24.2.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pyodbc==4.0.39 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/fded0fa.txt b/.riot/requirements/fded0fa.txt deleted file mode 100644 index d39a64d30af..00000000000 --- a/.riot/requirements/fded0fa.txt +++ /dev/null @@ -1,26 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/fded0fa.in -# -attrs==23.1.0 -coverage[toml]==7.2.7 -exceptiongroup==1.2.0 -hypothesis==6.45.0 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==23.2 -pluggy==1.2.0 -pymemcache==3.4.4 -pytest==7.4.3 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -six==1.16.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -zipp==3.15.0 diff --git a/.riot/requirements/feaf737.txt b/.riot/requirements/feaf737.txt deleted file mode 100644 index 9aaa6e5ca6d..00000000000 --- a/.riot/requirements/feaf737.txt +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.7 -# by the following command: -# -# pip-compile --allow-unsafe --config=pyproject.toml --no-annotate --resolver=backtracking .riot/requirements/feaf737.in -# -algoliasearch==2.6.3 -attrs==24.2.0 -certifi==2024.7.4 -charset-normalizer==3.3.2 -coverage[toml]==7.2.7 -exceptiongroup==1.2.2 -hypothesis==6.45.0 -idna==3.8 -importlib-metadata==6.7.0 -iniconfig==2.0.0 -mock==5.1.0 -opentracing==2.4.0 -packaging==24.0 -pluggy==1.2.0 -pytest==7.4.4 -pytest-cov==4.1.0 -pytest-mock==3.11.1 -pytest-randomly==3.12.0 -requests==2.31.0 -sortedcontainers==2.4.0 -tomli==2.0.1 -typing-extensions==4.7.1 -urllib3==1.26.19 -zipp==3.15.0 diff --git a/CHANGELOG.md b/CHANGELOG.md index a29299f8987..6c72665472f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,21 @@ Changelogs for versions not listed here can be found at https://github.com/DataD --- +## 2.19.2 +### Bug Fixes + +- Tracing + - celery: Fixes an issue where `celery.apply` spans from Celery prerun got closed too soon leading to span tags being missing. + - openai: Fixes a patching issue where asynchronous moderation endpoint calls resulted in coroutine scheduling errors. + - openai: Ensures the OpenAI integration is compatible with Python versions 3.12 and 3.13. + - vertexai: Resolves an issue with `chat.send_message()` where the content keyword argument was not parsed correctly. +- LLM Observability + - This fix resolves an issue where annotating a span with non latin-1 (but valid utf-8) input/output values resulted in encoding errors. +- Lib-Injection + - Fixes incorrect telemetry data payload format. + +--- + ## 2.19.1 ### Bug Fixes diff --git a/benchmarks/ddtrace_run/scenario.py b/benchmarks/ddtrace_run/scenario.py index 72173b4773f..3318158c194 100644 --- a/benchmarks/ddtrace_run/scenario.py +++ b/benchmarks/ddtrace_run/scenario.py @@ -32,7 +32,7 @@ def run(self): env["DD_TRACE_API_VERSION"] = "v0.4" code += """ import httpretty -from ddtrace import tracer +from ddtrace.trace import tracer from ddtrace.internal.telemetry import telemetry_writer httpretty.enable(allow_net_connect=False) diff --git a/benchmarks/otel_span/scenario.py b/benchmarks/otel_span/scenario.py index 8d0c9171cc1..7f1b544ee64 100644 --- a/benchmarks/otel_span/scenario.py +++ b/benchmarks/otel_span/scenario.py @@ -6,8 +6,8 @@ from opentelemetry.trace import set_tracer_provider from ddtrace import config -from ddtrace import tracer from ddtrace.opentelemetry import TracerProvider # Requires ``ddtrace>=1.11`` +from ddtrace.trace import tracer set_tracer_provider(TracerProvider()) diff --git a/benchmarks/span/scenario.py b/benchmarks/span/scenario.py index 8b0c18dd612..c0e02de7ad6 100644 --- a/benchmarks/span/scenario.py +++ b/benchmarks/span/scenario.py @@ -2,7 +2,7 @@ import bm.utils as utils from ddtrace import config -from ddtrace import tracer +from ddtrace.trace import tracer class Span(Scenario): diff --git a/benchmarks/threading/scenario.py b/benchmarks/threading/scenario.py index 8b66cf21127..0b4adfead07 100644 --- a/benchmarks/threading/scenario.py +++ b/benchmarks/threading/scenario.py @@ -39,7 +39,7 @@ def create_trace(self, tracer: Tracer) -> None: random.random() def run(self) -> Generator[Callable[[int], None], None, None]: - from ddtrace import tracer + from ddtrace.trace import tracer # configure global tracer to drop traces rather tracer.configure(writer=NoopWriter()) diff --git a/benchmarks/tracer/scenario.py b/benchmarks/tracer/scenario.py index ea1ae093637..704f08ba9b7 100644 --- a/benchmarks/tracer/scenario.py +++ b/benchmarks/tracer/scenario.py @@ -8,7 +8,7 @@ class Tracer(bm.Scenario): def run(self): # configure global tracer to drop traces rather than encoded and sent to # an agent - from ddtrace import tracer + from ddtrace.trace import tracer utils.drop_traces(tracer) utils.drop_telemetry_events() diff --git a/ddtrace/__init__.py b/ddtrace/__init__.py index b555d1117ca..e480851926f 100644 --- a/ddtrace/__init__.py +++ b/ddtrace/__init__.py @@ -17,7 +17,7 @@ # configure ddtrace logger before other modules log configure_ddtrace_logger() # noqa: E402 -from .settings import _config as config +from .settings import _global_config as config # Enable telemetry writer and excepthook as early as possible to ensure we capture any exceptions from initialization diff --git a/ddtrace/_monkey.py b/ddtrace/_monkey.py index 75c70114ef2..fad8c8f4d2b 100644 --- a/ddtrace/_monkey.py +++ b/ddtrace/_monkey.py @@ -7,12 +7,12 @@ from ddtrace.appsec import load_common_appsec_modules from ddtrace.internal.telemetry.constants import TELEMETRY_NAMESPACE +from ddtrace.settings.asm import config as asm_config -from .appsec._iast._utils import _is_iast_enabled from .internal import telemetry from .internal.logger import get_logger from .internal.utils import formats -from .settings import _config as config +from .settings import _global_config as config if TYPE_CHECKING: # pragma: no cover @@ -157,9 +157,6 @@ } -DEFAULT_MODULES_PREFIX = "ddtrace.contrib" - - class PatchException(Exception): """Wraps regular `Exception` class when patching modules""" @@ -170,19 +167,14 @@ class ModuleNotFoundException(PatchException): pass -def _on_import_factory(module, prefix="ddtrace.contrib", raise_errors=True, patch_indicator=True): +def _on_import_factory(module, path_f, raise_errors=True, patch_indicator=True): # type: (str, str, bool, Union[bool, List[str]]) -> Callable[[Any], None] """Factory to create an import hook for the provided module name""" def on_import(hook): # Import and patch module try: - try: - imported_module = importlib.import_module("%s.internal.%s.patch" % (prefix, module)) - except ImportError: - # Some integrations do not have an internal patch module, so we use the public one - # FIXME: This is a temporary solution until we refactor the patching logic. - imported_module = importlib.import_module("%s.%s" % (prefix, module)) + imported_module = importlib.import_module(path_f % (module,)) imported_module.patch() if hasattr(imported_module, "patch_submodules"): imported_module.patch_submodules(patch_indicator) @@ -209,7 +201,7 @@ def on_import(hook): name, True, PATCH_MODULES.get(module) is True, "", version=v ) elif hasattr(imported_module, "get_version"): - # TODO: Ensure every integration defines either get_version or get_versions in their patch.py module + # Some integrations/iast patchers do not define get_version version = imported_module.get_version() telemetry.telemetry_writer.add_integration( module, True, PATCH_MODULES.get(module) is True, "", version=version @@ -248,7 +240,7 @@ def patch_all(**patch_modules): modules.update(patch_modules) patch(raise_errors=False, **modules) - if _is_iast_enabled(): + if asm_config._iast_enabled: from ddtrace.appsec._iast._patch_modules import patch_iast from ddtrace.appsec.iast import enable_iast_propagation @@ -258,8 +250,8 @@ def patch_all(**patch_modules): load_common_appsec_modules() -def patch(raise_errors=True, patch_modules_prefix=DEFAULT_MODULES_PREFIX, **patch_modules): - # type: (bool, str, Union[List[str], bool]) -> None +def patch(raise_errors=True, **patch_modules): + # type: (bool, Union[List[str], bool]) -> None """Patch only a set of given modules. :param bool raise_errors: Raise error if one patch fail. @@ -270,17 +262,22 @@ def patch(raise_errors=True, patch_modules_prefix=DEFAULT_MODULES_PREFIX, **patc contribs = {c: patch_indicator for c, patch_indicator in patch_modules.items() if patch_indicator} for contrib, patch_indicator in contribs.items(): # Check if we have the requested contrib. - if not os.path.isfile(os.path.join(os.path.dirname(__file__), "contrib", contrib, "__init__.py")): + if not os.path.isfile(os.path.join(os.path.dirname(__file__), "contrib", "internal", contrib, "patch.py")): if raise_errors: raise ModuleNotFoundException( - "integration module ddtrace.contrib.%s does not exist, " - "module will not have tracing available" % contrib + "integration module ddtrace.contrib.internal.%s.patch does not exist, " + "automatic instrumentation is disabled for this library" % contrib ) modules_to_patch = _MODULES_FOR_CONTRIB.get(contrib, (contrib,)) for module in modules_to_patch: # Use factory to create handler to close over `module` and `raise_errors` values from this loop when_imported(module)( - _on_import_factory(contrib, raise_errors=raise_errors, patch_indicator=patch_indicator) + _on_import_factory( + contrib, + "ddtrace.contrib.internal.%s.patch", + raise_errors=raise_errors, + patch_indicator=patch_indicator, + ) ) # manually add module to patched modules diff --git a/ddtrace/_trace/_span_link.py b/ddtrace/_trace/_span_link.py index f635af38207..83087ec56c3 100644 --- a/ddtrace/_trace/_span_link.py +++ b/ddtrace/_trace/_span_link.py @@ -15,7 +15,7 @@ SpanLinks can be set using :meth:`ddtrace.Span.link_span(...)` Ex:: - from ddtrace import tracer + from ddtrace.trace import tracer s1 = tracer.trace("s1") s2 = tracer.trace("s2") diff --git a/ddtrace/_trace/pin.py b/ddtrace/_trace/pin.py index 7dd83474749..dd41a1040a1 100644 --- a/ddtrace/_trace/pin.py +++ b/ddtrace/_trace/pin.py @@ -44,7 +44,7 @@ def __init__( # type: (...) -> None if tracer is not None and tracer is not ddtrace.tracer: deprecate( - "Initializing ddtrace.Pin with `tracer` argument is deprecated", + "Initializing ddtrace.trace.Pin with `tracer` argument is deprecated", message="All Pin instances should use the global tracer instance", removal_version="3.0.0", ) @@ -79,15 +79,15 @@ def __repr__(self): def _find(*objs): # type: (Any) -> Optional[Pin] """ - Return the first :class:`ddtrace.pin.Pin` found on any of the provided objects or `None` if none were found + Return the first :class:`ddtrace.trace.Pin` found on any of the provided objects or `None` if none were found >>> pin = Pin._find(wrapper, instance, conn) - :param objs: The objects to search for a :class:`ddtrace.pin.Pin` on + :param objs: The objects to search for a :class:`ddtrace.trace.Pin` on :type objs: List of objects - :rtype: :class:`ddtrace.pin.Pin`, None - :returns: The first found :class:`ddtrace.pin.Pin` or `None` is none was found + :rtype: :class:`ddtrace.trace.Pin`, None + :returns: The first found :class:`ddtrace.trace.Pin` or `None` is none was found """ for obj in objs: pin = Pin.get_from(obj) @@ -105,10 +105,10 @@ def get_from(obj): >>> pin = Pin.get_from(conn) - :param obj: The object to look for a :class:`ddtrace.pin.Pin` on + :param obj: The object to look for a :class:`ddtrace.trace.Pin` on :type obj: object - :rtype: :class:`ddtrace.pin.Pin`, None - :returns: :class:`ddtrace.pin.Pin` associated with the object, or None if none was found + :rtype: :class:`ddtrace.trace.Pin`, None + :returns: :class:`ddtrace.trace.Pin` associated with the object, or None if none was found """ if hasattr(obj, "__getddpin__"): return obj.__getddpin__() @@ -141,7 +141,7 @@ def override( """ if tracer is not None: deprecate( - "Calling ddtrace.Pin.override(...) with the `tracer` argument is deprecated", + "Calling ddtrace.trace.Pin.override(...) with the `tracer` argument is deprecated", message="All Pin instances should use the global tracer instance", removal_version="3.0.0", ) @@ -208,7 +208,7 @@ def clone( if tracer is not None: deprecate( - "Initializing ddtrace.Pin with `tracer` argument is deprecated", + "Initializing ddtrace.trace.Pin with `tracer` argument is deprecated", message="All Pin instances should use the global tracer instance", removal_version="3.0.0", ) diff --git a/ddtrace/_trace/sampler.py b/ddtrace/_trace/sampler.py index 961526e3f26..4bf3d1891c1 100644 --- a/ddtrace/_trace/sampler.py +++ b/ddtrace/_trace/sampler.py @@ -22,7 +22,7 @@ from ..internal.rate_limiter import RateLimiter from ..internal.sampling import _get_highest_precedence_rule_matching from ..internal.sampling import _set_sampling_tags -from ..settings import _config as ddconfig +from ..settings import _global_config as ddconfig from .sampling_rule import SamplingRule @@ -261,7 +261,9 @@ def __init__( if isinstance(rule, SamplingRule): self.rules.append(rule) elif config._raise: - raise TypeError("Rule {!r} must be a sub-class of type ddtrace.sampler.SamplingRules".format(rule)) + raise TypeError( + "Rule {!r} must be a sub-class of type ddtrace._trace.sampler.SamplingRules".format(rule) + ) # DEV: sampling rule must come last if effective_sample_rate is not None: diff --git a/ddtrace/_trace/trace_handlers.py b/ddtrace/_trace/trace_handlers.py index dab3f743146..e0d99c0d020 100644 --- a/ddtrace/_trace/trace_handlers.py +++ b/ddtrace/_trace/trace_handlers.py @@ -39,7 +39,7 @@ if TYPE_CHECKING: - from ddtrace import Span + from ddtrace._trace.span import Span log = get_logger(__name__) @@ -109,11 +109,14 @@ def _get_parameters_for_new_span_directly_from_context(ctx: core.ExecutionContex def _start_span(ctx: core.ExecutionContext, call_trace: bool = True, **kwargs) -> "Span": span_kwargs = _get_parameters_for_new_span_directly_from_context(ctx) call_trace = ctx.get_item("call_trace", call_trace) - tracer = (ctx.get_item("middleware") or ctx["pin"]).tracer + tracer = ctx.get_item("tracer") or (ctx.get_item("middleware") or ctx["pin"]).tracer distributed_headers_config = ctx.get_item("distributed_headers_config") if distributed_headers_config: trace_utils.activate_distributed_headers( - tracer, int_config=distributed_headers_config, request_headers=ctx["distributed_headers"] + tracer, + int_config=distributed_headers_config, + request_headers=ctx["distributed_headers"], + override=ctx.get_item("distributed_headers_config_override"), ) distributed_context = ctx.get_item("distributed_context") if distributed_context and not call_trace: @@ -126,6 +129,42 @@ def _start_span(ctx: core.ExecutionContext, call_trace: bool = True, **kwargs) - return span +def _set_web_frameworks_tags(ctx, span, int_config): + span.set_tag_str(COMPONENT, int_config.integration_name) + span.set_tag_str(SPAN_KIND, SpanKind.SERVER) + span.set_tag(_SPAN_MEASURED_KEY) + + analytics_enabled = ctx.get_item("analytics_enabled") + analytics_sample_rate = ctx.get_item("analytics_sample_rate", True) + + # Configure trace search sample rate + if (config._analytics_enabled and analytics_enabled is not False) or analytics_enabled is True: + span.set_tag(_ANALYTICS_SAMPLE_RATE_KEY, analytics_sample_rate) + + +def _on_web_framework_start_request(ctx, int_config): + request_span = ctx.get_item("req_span") + _set_web_frameworks_tags(ctx, request_span, int_config) + + +def _on_web_framework_finish_request( + span, int_config, method, url, status_code, query, req_headers, res_headers, route, finish +): + trace_utils.set_http_meta( + span=span, + integration_config=int_config, + method=method, + url=url, + status_code=status_code, + query=query, + request_headers=req_headers, + response_headers=res_headers, + route=route, + ) + if finish: + span.finish() + + def _on_traced_request_context_started_flask(ctx): current_span = ctx["pin"].tracer.current_span() if not ctx["pin"].enabled or not current_span: @@ -761,6 +800,10 @@ def listen(): core.on("azure.functions.request_call_modifier", _on_azure_functions_request_span_modifier) core.on("azure.functions.start_response", _on_azure_functions_start_response) + # web frameworks general handlers + core.on("web.request.start", _on_web_framework_start_request) + core.on("web.request.finish", _on_web_framework_finish_request) + core.on("test_visibility.enable", _on_test_visibility_enable) core.on("test_visibility.disable", _on_test_visibility_disable) core.on("test_visibility.is_enabled", _on_test_visibility_is_enabled, "is_enabled") @@ -769,6 +812,14 @@ def listen(): core.on("rq.queue.enqueue_job", _propagate_context) for context_name in ( + # web frameworks + "aiohttp.request", + "bottle.request", + "cherrypy.request", + "falcon.request", + "molten.request", + "pyramid.request", + "sanic.request", "flask.call", "flask.jsonify", "flask.render_template", @@ -779,6 +830,7 @@ def listen(): "django.template.render", "django.process_exception", "django.func.wrapped", + # non web frameworks "botocore.instrumented_api_call", "botocore.instrumented_lib_function", "botocore.patched_kinesis_api_call", diff --git a/ddtrace/_trace/tracer.py b/ddtrace/_trace/tracer.py index 6e595bbe7c1..87f312bb18c 100644 --- a/ddtrace/_trace/tracer.py +++ b/ddtrace/_trace/tracer.py @@ -189,7 +189,7 @@ class Tracer(object): If you're running an application that will serve a single trace per thread, you can use the global tracer instance:: - from ddtrace import tracer + from ddtrace.trace import tracer trace = tracer.trace('app.request', 'web-server').finish() """ diff --git a/ddtrace/_trace/utils_botocore/aws_payload_tagging.py b/ddtrace/_trace/utils_botocore/aws_payload_tagging.py index dadb6749a12..6886b66db73 100644 --- a/ddtrace/_trace/utils_botocore/aws_payload_tagging.py +++ b/ddtrace/_trace/utils_botocore/aws_payload_tagging.py @@ -5,8 +5,8 @@ from typing import Dict from typing import Optional -from ddtrace import Span from ddtrace import config +from ddtrace._trace.span import Span from ddtrace.vendor.jsonpath_ng import parse diff --git a/ddtrace/_trace/utils_botocore/span_tags.py b/ddtrace/_trace/utils_botocore/span_tags.py index f90cbd60a51..fb69b147b95 100644 --- a/ddtrace/_trace/utils_botocore/span_tags.py +++ b/ddtrace/_trace/utils_botocore/span_tags.py @@ -3,8 +3,8 @@ from typing import Dict from typing import Optional -from ddtrace import Span from ddtrace import config +from ddtrace._trace.span import Span from ddtrace._trace.utils_botocore.aws_payload_tagging import AWSPayloadTagging from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY from ddtrace.constants import _SPAN_MEASURED_KEY diff --git a/ddtrace/appsec/_asm_request_context.py b/ddtrace/appsec/_asm_request_context.py index ff398d56b14..d8f258d43a7 100644 --- a/ddtrace/appsec/_asm_request_context.py +++ b/ddtrace/appsec/_asm_request_context.py @@ -12,14 +12,12 @@ from typing import Union from urllib import parse -from ddtrace._trace.span import Span from ddtrace.appsec._constants import APPSEC from ddtrace.appsec._constants import EXPLOIT_PREVENTION from ddtrace.appsec._constants import SPAN_DATA_NAMES from ddtrace.appsec._iast._iast_request_context import is_iast_request_enabled from ddtrace.appsec._iast._taint_tracking import OriginType from ddtrace.appsec._iast._taint_tracking._taint_objects import taint_pyobject -from ddtrace.appsec._iast._utils import _is_iast_enabled from ddtrace.appsec._utils import add_context_log from ddtrace.appsec._utils import get_triggers from ddtrace.internal import core @@ -27,6 +25,7 @@ from ddtrace.internal.constants import REQUEST_PATH_PARAMS from ddtrace.internal.logger import get_logger from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Span if TYPE_CHECKING: @@ -63,7 +62,7 @@ class ASM_Environment: """ def __init__(self, span: Optional[Span] = None): - from ddtrace import tracer + from ddtrace.trace import tracer self.root = not in_asm_context() if self.root: @@ -178,7 +177,7 @@ def update_span_metrics(span: Span, name: str, value: Union[float, int]) -> None def flush_waf_triggers(env: ASM_Environment) -> None: # Make sure we find a root span to attach the triggers to if env.span is None: - from ddtrace import tracer + from ddtrace.trace import tracer current_span = tracer.current_span() if current_span is None: @@ -493,7 +492,7 @@ def _on_wrapped_view(kwargs): # If IAST is enabled, taint the Flask function kwargs (path parameters) - if _is_iast_enabled() and kwargs: + if asm_config._iast_enabled and kwargs: if not is_iast_request_enabled(): return return_value diff --git a/ddtrace/appsec/_capabilities.py b/ddtrace/appsec/_capabilities.py index c999b61cb97..a080d739dfb 100644 --- a/ddtrace/appsec/_capabilities.py +++ b/ddtrace/appsec/_capabilities.py @@ -59,7 +59,7 @@ def _asm_feature_is_required() -> bool: return (_FEATURE_REQUIRED & flags) != 0 -def _rc_capabilities(test_tracer: Optional[ddtrace.Tracer] = None) -> Flags: +def _rc_capabilities(test_tracer: Optional[ddtrace.trace.Tracer] = None) -> Flags: tracer = ddtrace.tracer if test_tracer is None else test_tracer value = Flags(0) if ddtrace.config._remote_config_enabled: @@ -74,7 +74,7 @@ def _rc_capabilities(test_tracer: Optional[ddtrace.Tracer] = None) -> Flags: return value -def _appsec_rc_capabilities(test_tracer: Optional[ddtrace.Tracer] = None) -> str: +def _appsec_rc_capabilities(test_tracer: Optional[ddtrace.trace.Tracer] = None) -> str: r"""return the bit representation of the composed capabilities in base64 bit 0: Reserved bit 1: ASM 1-click Activation diff --git a/ddtrace/appsec/_common_module_patches.py b/ddtrace/appsec/_common_module_patches.py index 0b455dbba6b..8c834b80e6f 100644 --- a/ddtrace/appsec/_common_module_patches.py +++ b/ddtrace/appsec/_common_module_patches.py @@ -1,5 +1,4 @@ -# This module must not import other modules inconditionnaly that -# require iast, ddwaf or any native optional module. +# This module must not import other modules unconditionally that require iast import ctypes import os @@ -17,9 +16,6 @@ from ddtrace.appsec._asm_request_context import get_blocked from ddtrace.appsec._constants import EXPLOIT_PREVENTION from ddtrace.appsec._constants import WAF_ACTIONS -from ddtrace.appsec._iast._iast_request_context import is_iast_request_enabled -from ddtrace.appsec._iast._metrics import _set_metric_iast_instrumented_sink -from ddtrace.appsec._iast.constants import VULN_PATH_TRAVERSAL import ddtrace.contrib.internal.subprocess.patch as subprocess_patch from ddtrace.internal import core from ddtrace.internal._exceptions import BlockingException @@ -29,6 +25,14 @@ from ddtrace.settings.asm import config as asm_config +if asm_config._iast_enabled: + from ddtrace.appsec._iast._iast_request_context import is_iast_request_enabled +else: + + def is_iast_request_enabled() -> bool: + return False + + log = get_logger(__name__) _DD_ORIGINAL_ATTRIBUTES: Dict[Any, Any] = {} @@ -42,6 +46,16 @@ def patch_common_modules(): global _is_patched if _is_patched: return + # for testing purposes, we need to update is_iast_request_enabled + if asm_config._iast_enabled: + global is_iast_request_enabled + from ddtrace.appsec._iast._iast_request_context import is_iast_request_enabled + else: + global is_iast_request_enabled + + def is_iast_request_enabled() -> bool: + return False + try_wrap_function_wrapper("builtins", "open", wrapped_open_CFDDB7ABBA9081B6) try_wrap_function_wrapper("urllib.request", "OpenerDirector.open", wrapped_open_ED4CF71136E15EBF) try_wrap_function_wrapper("_io", "BytesIO.read", wrapped_read_F3E51D71B4EC16EF) @@ -52,6 +66,9 @@ def patch_common_modules(): subprocess_patch.add_lst_callback(_RASP_POPEN, popen_FD233052260D8B4D) core.on("asm.block.dbapi.execute", execute_4C9BAC8E228EB347) if asm_config._iast_enabled: + from ddtrace.appsec._iast._metrics import _set_metric_iast_instrumented_sink + from ddtrace.appsec._iast.constants import VULN_PATH_TRAVERSAL + _set_metric_iast_instrumented_sink(VULN_PATH_TRAVERSAL) _is_patched = True diff --git a/ddtrace/appsec/_constants.py b/ddtrace/appsec/_constants.py index 92b9e239900..2172548205b 100644 --- a/ddtrace/appsec/_constants.py +++ b/ddtrace/appsec/_constants.py @@ -90,11 +90,9 @@ class APPSEC(metaclass=Constant_Class): AUTO_LOGIN_EVENTS_FAILURE_MODE: Literal[ "_dd.appsec.events.users.login.failure.auto.mode" ] = "_dd.appsec.events.users.login.failure.auto.mode" + AUTO_LOGIN_EVENTS_COLLECTION_MODE: Literal["_dd.appsec.user.collection_mode"] = "_dd.appsec.user.collection_mode" BLOCKED: Literal["appsec.blocked"] = "appsec.blocked" EVENT: Literal["appsec.event"] = "appsec.event" - AUTOMATIC_USER_EVENTS_TRACKING: Literal[ - "DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING" - ] = "DD_APPSEC_AUTOMATED_USER_EVENTS_TRACKING" AUTO_USER_INSTRUMENTATION_MODE: Literal[ "DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE" ] = "DD_APPSEC_AUTO_USER_INSTRUMENTATION_MODE" diff --git a/ddtrace/appsec/_ddwaf/ddwaf_types.py b/ddtrace/appsec/_ddwaf/ddwaf_types.py index e998b6048f6..5942a2fa184 100644 --- a/ddtrace/appsec/_ddwaf/ddwaf_types.py +++ b/ddtrace/appsec/_ddwaf/ddwaf_types.py @@ -22,9 +22,12 @@ if system() == "Linux": try: + asm_config._bypass_instrumentation_for_waf = True ctypes.CDLL(ctypes.util.find_library("rt"), mode=ctypes.RTLD_GLOBAL) except Exception: # nosec pass + finally: + asm_config._bypass_instrumentation_for_waf = False ARCHI = machine().lower() diff --git a/ddtrace/appsec/_exploit_prevention/stack_traces.py b/ddtrace/appsec/_exploit_prevention/stack_traces.py index 6c8db41f578..776ccad7f01 100644 --- a/ddtrace/appsec/_exploit_prevention/stack_traces.py +++ b/ddtrace/appsec/_exploit_prevention/stack_traces.py @@ -5,9 +5,9 @@ from typing import Iterable from typing import Optional -from ddtrace._trace.span import Span from ddtrace.appsec._constants import STACK_TRACE from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Span def report_stack( @@ -33,7 +33,7 @@ def report_stack( return False if span is None: - from ddtrace import tracer + from ddtrace.trace import tracer span = tracer.current_span() diff --git a/ddtrace/appsec/_iast/__init__.py b/ddtrace/appsec/_iast/__init__.py index 724819b17df..f609fe0da7a 100644 --- a/ddtrace/appsec/_iast/__init__.py +++ b/ddtrace/appsec/_iast/__init__.py @@ -38,7 +38,6 @@ def wrapped_function(wrapped, instance, args, kwargs): from ddtrace.settings.asm import config as asm_config from ._overhead_control_engine import OverheadControl -from ._utils import _is_iast_enabled log = get_logger(__name__) @@ -54,7 +53,7 @@ def ddtrace_iast_flask_patch(): and must be before the `app.run()` call. It also requires `DD_IAST_ENABLED` to be activated. """ - if not _is_iast_enabled(): + if not asm_config._iast_enabled: return from ._ast.ast_patching import astpatch_module diff --git a/ddtrace/appsec/_iast/_ast/ast_patching.py b/ddtrace/appsec/_iast/_ast/ast_patching.py index 44bef969bff..748ae297e27 100644 --- a/ddtrace/appsec/_iast/_ast/ast_patching.py +++ b/ddtrace/appsec/_iast/_ast/ast_patching.py @@ -4,7 +4,6 @@ import codecs import os from sys import builtin_module_names -from sys import version_info import textwrap from types import ModuleType from typing import Iterable @@ -17,6 +16,7 @@ from ddtrace.appsec._python_info.stdlib import _stdlib_for_python_version from ddtrace.internal.logger import get_logger from ddtrace.internal.module import origin +from ddtrace.internal.packages import get_package_distributions from ddtrace.internal.utils.formats import asbool from .visitor import AstVisitor @@ -462,8 +462,6 @@ def _is_first_party(module_name: str): return False if not _IMPORTLIB_PACKAGES: - from ddtrace.internal.packages import get_package_distributions - _IMPORTLIB_PACKAGES = set(get_package_distributions()) return module_name.split(".")[0] not in _IMPORTLIB_PACKAGES @@ -594,9 +592,8 @@ def astpatch_module(module: ModuleType) -> Tuple[str, Optional[ast.Module]]: log.debug("empty file: %s", module_path) return "", None - if not asbool(os.environ.get(IAST.ENV_NO_DIR_PATCH, "false")) and version_info > (3, 7): + if not asbool(os.environ.get(IAST.ENV_NO_DIR_PATCH, "false")): # Add the dir filter so __ddtrace stuff is not returned by dir(module) - # does not work in 3.7 because it enters into infinite recursion source_text += _DIR_WRAPPER new_ast = visit_ast( diff --git a/ddtrace/appsec/_iast/_evidence_redaction/_sensitive_handler.py b/ddtrace/appsec/_iast/_evidence_redaction/_sensitive_handler.py index 545f578d878..a10455dee42 100644 --- a/ddtrace/appsec/_iast/_evidence_redaction/_sensitive_handler.py +++ b/ddtrace/appsec/_iast/_evidence_redaction/_sensitive_handler.py @@ -6,10 +6,12 @@ from .._utils import _get_source_index from ..constants import VULN_CMDI +from ..constants import VULN_CODE_INJECTION from ..constants import VULN_HEADER_INJECTION from ..constants import VULN_SQL_INJECTION from ..constants import VULN_SSRF from .command_injection_sensitive_analyzer import command_injection_sensitive_analyzer +from .default_sensitive_analyzer import default_sensitive_analyzer from .header_injection_sensitive_analyzer import header_injection_sensitive_analyzer from .sql_sensitive_analyzer import sql_sensitive_analyzer from .url_sensitive_analyzer import url_sensitive_analyzer @@ -19,6 +21,7 @@ REDACTED_SOURCE_BUFFER = string.ascii_letters + string.digits LEN_SOURCE_BUFFER = len(REDACTED_SOURCE_BUFFER) +VALUE_MAX_LENGHT = 45 def get_redacted_source(length): @@ -42,6 +45,7 @@ def __init__(self): VULN_SQL_INJECTION: sql_sensitive_analyzer, VULN_SSRF: url_sensitive_analyzer, VULN_HEADER_INJECTION: header_injection_sensitive_analyzer, + VULN_CODE_INJECTION: default_sensitive_analyzer, } @staticmethod @@ -288,7 +292,7 @@ def to_redacted_json(self, evidence_value, sensitive, tainted_ranges, sources): return {"redacted_value_parts": value_parts, "redacted_sources": redacted_sources} def redact_source(self, sources, redacted_sources, redacted_sources_context, source_index, start, end): - if source_index is not None: + if source_index is not None and source_index < len(sources): if not sources[source_index].redacted: redacted_sources.append(source_index) sources[source_index].pattern = get_redacted_source(len(sources[source_index].value)) @@ -303,8 +307,10 @@ def write_value_part(self, value_parts, value, source_index=None): if value: if source_index is not None: value_parts.append({"value": value, "source": source_index}) - else: + elif len(value) < VALUE_MAX_LENGHT: value_parts.append({"value": value}) + else: + value_parts.append({"redacted": True}) def write_redacted_value_part( self, diff --git a/ddtrace/appsec/_iast/_evidence_redaction/default_sensitive_analyzer.py b/ddtrace/appsec/_iast/_evidence_redaction/default_sensitive_analyzer.py new file mode 100644 index 00000000000..d2e29484528 --- /dev/null +++ b/ddtrace/appsec/_iast/_evidence_redaction/default_sensitive_analyzer.py @@ -0,0 +1,11 @@ +from ddtrace.internal.logger import get_logger + + +log = get_logger(__name__) + + +def default_sensitive_analyzer(evidence, name_pattern, value_pattern): + if name_pattern.search(evidence.value) or value_pattern.search(evidence.value): + return [{"start": 0, "end": len(evidence.value)}] + + return [] diff --git a/ddtrace/appsec/_iast/_evidence_redaction/sql_sensitive_analyzer.py b/ddtrace/appsec/_iast/_evidence_redaction/sql_sensitive_analyzer.py index 7410ec46b4a..24223f59e4c 100644 --- a/ddtrace/appsec/_iast/_evidence_redaction/sql_sensitive_analyzer.py +++ b/ddtrace/appsec/_iast/_evidence_redaction/sql_sensitive_analyzer.py @@ -2,7 +2,9 @@ from ddtrace.appsec._iast.constants import DBAPI_MARIADB from ddtrace.appsec._iast.constants import DBAPI_MYSQL +from ddtrace.appsec._iast.constants import DBAPI_MYSQLDB from ddtrace.appsec._iast.constants import DBAPI_PSYCOPG +from ddtrace.appsec._iast.constants import DBAPI_PYMYSQL from ddtrace.appsec._iast.constants import DBAPI_SQLITE from ddtrace.internal.logger import get_logger @@ -35,6 +37,8 @@ } patterns[DBAPI_SQLITE] = patterns[DBAPI_MYSQL] patterns[DBAPI_MARIADB] = patterns[DBAPI_MYSQL] +patterns[DBAPI_PYMYSQL] = patterns[DBAPI_MYSQL] +patterns[DBAPI_MYSQLDB] = patterns[DBAPI_MYSQL] def sql_sensitive_analyzer(evidence, name_pattern, value_pattern): diff --git a/ddtrace/appsec/_iast/_handlers.py b/ddtrace/appsec/_iast/_handlers.py index 4d4628d910e..cf60fc610be 100644 --- a/ddtrace/appsec/_iast/_handlers.py +++ b/ddtrace/appsec/_iast/_handlers.py @@ -4,7 +4,6 @@ from wrapt import when_imported from wrapt import wrap_function_wrapper as _w -from ddtrace.appsec._iast import _is_iast_enabled from ddtrace.appsec._iast._iast_request_context import get_iast_stacktrace_reported from ddtrace.appsec._iast._iast_request_context import set_iast_stacktrace_reported from ddtrace.appsec._iast._metrics import _set_metric_iast_instrumented_source @@ -18,6 +17,7 @@ from ddtrace.appsec._iast._taint_tracking._taint_objects import is_pyobject_tainted from ddtrace.appsec._iast._taint_utils import taint_structure from ddtrace.internal.logger import get_logger +from ddtrace.settings.asm import config as asm_config from ._iast_request_context import is_iast_request_enabled from ._taint_tracking._taint_objects import taint_pyobject @@ -48,7 +48,7 @@ def _on_set_http_meta_iast( response_headers, response_cookies, ): - if _is_iast_enabled(): + if asm_config._iast_enabled: from ddtrace.appsec._iast.taint_sinks.insecure_cookie import asm_check_cookies if response_cookies: @@ -57,7 +57,7 @@ def _on_set_http_meta_iast( def _on_request_init(wrapped, instance, args, kwargs): wrapped(*args, **kwargs) - if _is_iast_enabled() and is_iast_request_enabled(): + if asm_config._iast_enabled and is_iast_request_enabled(): try: instance.query_string = taint_pyobject( pyobject=instance.query_string, @@ -76,7 +76,7 @@ def _on_request_init(wrapped, instance, args, kwargs): def _on_flask_patch(flask_version): - if _is_iast_enabled(): + if asm_config._iast_enabled: try_wrap_function_wrapper( "werkzeug.datastructures", "Headers.items", @@ -137,14 +137,14 @@ def _on_flask_patch(flask_version): def _on_wsgi_environ(wrapped, _instance, args, kwargs): - if _is_iast_enabled() and args and is_iast_request_enabled(): + if asm_config._iast_enabled and args and is_iast_request_enabled(): return wrapped(*((taint_structure(args[0], OriginType.HEADER_NAME, OriginType.HEADER),) + args[1:]), **kwargs) return wrapped(*args, **kwargs) def _on_django_patch(): - if _is_iast_enabled(): + if asm_config._iast_enabled: try: when_imported("django.http.request")( lambda m: try_wrap_function_wrapper( @@ -153,6 +153,7 @@ def _on_django_patch(): functools.partial(if_iast_taint_returned_object_for, OriginType.PARAMETER), ) ) + # we instrument those sources on _on_django_func_wrapped _set_metric_iast_instrumented_source(OriginType.HEADER_NAME) _set_metric_iast_instrumented_source(OriginType.HEADER) @@ -171,7 +172,7 @@ def _on_django_patch(): def _on_django_func_wrapped(fn_args, fn_kwargs, first_arg_expected_type, *_): # If IAST is enabled, and we're wrapping a Django view call, taint the kwargs (view's # path parameters) - if _is_iast_enabled() and fn_args and isinstance(fn_args[0], first_arg_expected_type): + if asm_config._iast_enabled and fn_args and isinstance(fn_args[0], first_arg_expected_type): if not is_iast_request_enabled(): return @@ -279,13 +280,13 @@ def _patch_protobuf_class(cls): def _on_grpc_response(message): - if _is_iast_enabled(): + if asm_config._iast_enabled: msg_cls = type(message) _patch_protobuf_class(msg_cls) def if_iast_taint_yield_tuple_for(origins, wrapped, instance, args, kwargs): - if _is_iast_enabled() and is_iast_request_enabled(): + if asm_config._iast_enabled and is_iast_request_enabled(): try: for key, value in wrapped(*args, **kwargs): new_key = taint_pyobject(pyobject=key, source_name=key, source_value=key, source_origin=origins[0]) @@ -302,7 +303,7 @@ def if_iast_taint_yield_tuple_for(origins, wrapped, instance, args, kwargs): def if_iast_taint_returned_object_for(origin, wrapped, instance, args, kwargs): value = wrapped(*args, **kwargs) - if _is_iast_enabled() and is_iast_request_enabled(): + if asm_config._iast_enabled and is_iast_request_enabled(): try: if not is_pyobject_tainted(value): name = str(args[0]) if len(args) else "http.request.body" @@ -316,7 +317,7 @@ def if_iast_taint_returned_object_for(origin, wrapped, instance, args, kwargs): def if_iast_taint_starlette_datastructures(origin, wrapped, instance, args, kwargs): value = wrapped(*args, **kwargs) - if _is_iast_enabled() and is_iast_request_enabled(): + if asm_config._iast_enabled and is_iast_request_enabled(): try: res = [] for element in value: @@ -422,7 +423,7 @@ def _on_pre_tracedrequest_iast(ctx): def _on_set_request_tags_iast(request, span, flask_config): - if _is_iast_enabled() and is_iast_request_enabled(): + if asm_config._iast_enabled and is_iast_request_enabled(): request.cookies = taint_structure( request.cookies, OriginType.COOKIE_NAME, @@ -446,7 +447,7 @@ def _on_set_request_tags_iast(request, span, flask_config): def _on_django_finalize_response_pre(ctx, after_request_tags, request, response): - if not response or not _is_iast_enabled() or not is_iast_request_enabled() or get_iast_stacktrace_reported(): + if not response or not asm_config._iast_enabled or not is_iast_request_enabled() or get_iast_stacktrace_reported(): return try: @@ -459,7 +460,7 @@ def _on_django_finalize_response_pre(ctx, after_request_tags, request, response) def _on_django_technical_500_response(request, response, exc_type, exc_value, tb): - if not exc_value or not _is_iast_enabled() or not is_iast_request_enabled(): + if not exc_value or not asm_config._iast_enabled or not is_iast_request_enabled(): return try: @@ -473,7 +474,7 @@ def _on_django_technical_500_response(request, response, exc_type, exc_value, tb def _on_flask_finalize_request_post(response, _): - if not response or not _is_iast_enabled() or not is_iast_request_enabled() or get_iast_stacktrace_reported(): + if not response or not asm_config._iast_enabled or not is_iast_request_enabled() or get_iast_stacktrace_reported(): return try: @@ -486,7 +487,7 @@ def _on_flask_finalize_request_post(response, _): def _on_asgi_finalize_response(body, _): - if not body or not _is_iast_enabled() or not is_iast_request_enabled(): + if not body or not asm_config._iast_enabled or not is_iast_request_enabled(): return try: @@ -499,7 +500,7 @@ def _on_asgi_finalize_response(body, _): def _on_werkzeug_render_debugger_html(html): - if not html or not _is_iast_enabled() or not is_iast_request_enabled(): + if not html or not asm_config._iast_enabled or not is_iast_request_enabled(): return try: diff --git a/ddtrace/appsec/_iast/_iast_request_context.py b/ddtrace/appsec/_iast/_iast_request_context.py index e9c985d0b3d..ce3417d9594 100644 --- a/ddtrace/appsec/_iast/_iast_request_context.py +++ b/ddtrace/appsec/_iast/_iast_request_context.py @@ -3,10 +3,8 @@ from typing import Dict from typing import Optional -from ddtrace._trace.span import Span from ddtrace.appsec._constants import APPSEC from ddtrace.appsec._constants import IAST -from ddtrace.appsec._iast import _is_iast_enabled from ddtrace.appsec._iast import oce from ddtrace.appsec._iast._metrics import _set_metric_iast_request_tainted from ddtrace.appsec._iast._metrics import _set_span_tag_iast_executed_sink @@ -18,6 +16,8 @@ from ddtrace.internal import core from ddtrace.internal.logger import get_logger from ddtrace.internal.utils.formats import asbool +from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Span log = get_logger(__name__) @@ -58,7 +58,7 @@ def in_iast_context() -> bool: def start_iast_context(): - if _is_iast_enabled(): + if asm_config._iast_enabled: create_propagation_context() core.set_item(_IAST_CONTEXT, IASTEnvironment()) @@ -118,7 +118,7 @@ def set_iast_request_enabled(request_enabled) -> None: log.debug("[IAST] Trying to set IAST reporter but no context is present") -def is_iast_request_enabled(): +def is_iast_request_enabled() -> bool: env = _get_iast_context() if env: return env.request_enabled @@ -164,7 +164,7 @@ def _iast_end_request(ctx=None, span=None, *args, **kwargs): else: req_span = ctx.get_item("req_span") - if _is_iast_enabled(): + if asm_config._iast_enabled: existing_data = req_span.get_tag(IAST.JSON) if existing_data is None: if req_span.get_metric(IAST.ENABLED) is None: @@ -187,7 +187,7 @@ def _iast_end_request(ctx=None, span=None, *args, **kwargs): def _iast_start_request(span=None, *args, **kwargs): try: - if _is_iast_enabled(): + if asm_config._iast_enabled: start_iast_context() request_iast_enabled = False if oce.acquire_request(span): diff --git a/ddtrace/appsec/_iast/_loader.py b/ddtrace/appsec/_iast/_loader.py index 382060e3b7f..7621b5f3449 100644 --- a/ddtrace/appsec/_iast/_loader.py +++ b/ddtrace/appsec/_iast/_loader.py @@ -1,14 +1,14 @@ #!/usr/bin/env python3 from ddtrace.internal.logger import get_logger +from ddtrace.settings.asm import config as asm_config from ._ast.ast_patching import astpatch_module -from ._utils import _is_iast_enabled log = get_logger(__name__) -IS_IAST_ENABLED = _is_iast_enabled() +IS_IAST_ENABLED = asm_config._iast_enabled def _exec_iast_patched_module(module_watchdog, module): diff --git a/ddtrace/appsec/_iast/_patch_modules.py b/ddtrace/appsec/_iast/_patch_modules.py index 7ae1b0986fb..e91438ebd49 100644 --- a/ddtrace/appsec/_iast/_patch_modules.py +++ b/ddtrace/appsec/_iast/_patch_modules.py @@ -19,10 +19,6 @@ def patch_iast(patch_modules=IAST_PATCH): from ddtrace._monkey import _on_import_factory for module in (m for m, e in patch_modules.items() if e): - when_imported("hashlib")( - _on_import_factory(module, prefix="ddtrace.appsec._iast.taint_sinks", raise_errors=False) - ) + when_imported("hashlib")(_on_import_factory(module, "ddtrace.appsec._iast.taint_sinks.%s", raise_errors=False)) - when_imported("json")( - _on_import_factory("json_tainting", prefix="ddtrace.appsec._iast._patches", raise_errors=False) - ) + when_imported("json")(_on_import_factory("json_tainting", "ddtrace.appsec._iast._patches.%s", raise_errors=False)) diff --git a/ddtrace/appsec/_iast/_pytest_plugin.py b/ddtrace/appsec/_iast/_pytest_plugin.py index 82c23c53174..28a5b9e0e08 100644 --- a/ddtrace/appsec/_iast/_pytest_plugin.py +++ b/ddtrace/appsec/_iast/_pytest_plugin.py @@ -4,9 +4,9 @@ from typing import List from ddtrace.appsec._constants import IAST -from ddtrace.appsec._iast._utils import _is_iast_enabled from ddtrace.appsec._iast.reporter import Vulnerability from ddtrace.internal.logger import get_logger +from ddtrace.settings.asm import config as asm_config log = get_logger(__name__) @@ -20,7 +20,7 @@ class VulnerabilityFoundInTest(Vulnerability): try: import pytest - @pytest.fixture(autouse=_is_iast_enabled()) + @pytest.fixture(autouse=asm_config._iast_enabled) def ddtrace_iast(request, ddspan): """ Extract the vulnerabilities discovered in tests. @@ -72,7 +72,7 @@ def extract_code_snippet(filepath, line_number, context=3): def print_iast_report(terminalreporter): - if not _is_iast_enabled(): + if not asm_config._iast_enabled: return if not vuln_data: diff --git a/ddtrace/appsec/_iast/_utils.py b/ddtrace/appsec/_iast/_utils.py index fda05a8b8e5..e2c2dbec836 100644 --- a/ddtrace/appsec/_iast/_utils.py +++ b/ddtrace/appsec/_iast/_utils.py @@ -1,29 +1,8 @@ -from functools import lru_cache -import sys from typing import List -from ddtrace.internal.logger import get_logger from ddtrace.settings.asm import config as asm_config -@lru_cache(maxsize=1) -def _is_python_version_supported() -> bool: - # IAST supports Python versions 3.6 to 3.13 - return (3, 6, 0) <= sys.version_info < (3, 14, 0) - - -def _is_iast_enabled(): - if not asm_config._iast_enabled: - return False - - if not _is_python_version_supported(): - log = get_logger(__name__) - log.info("IAST is not compatible with the current Python version") - return False - - return True - - def _get_source_index(sources: List, source) -> int: i = 0 for source_ in sources: diff --git a/ddtrace/appsec/_iast/constants.py b/ddtrace/appsec/_iast/constants.py index 83284094dcf..9ac6edb0ab1 100644 --- a/ddtrace/appsec/_iast/constants.py +++ b/ddtrace/appsec/_iast/constants.py @@ -92,5 +92,7 @@ DBAPI_SQLITE = "sqlite" DBAPI_PSYCOPG = "psycopg" DBAPI_MYSQL = "mysql" +DBAPI_MYSQLDB = "mysqldb" +DBAPI_PYMYSQL = "pymysql" DBAPI_MARIADB = "mariadb" -DBAPI_INTEGRATIONS = (DBAPI_SQLITE, DBAPI_PSYCOPG, DBAPI_MYSQL, DBAPI_MARIADB) +DBAPI_INTEGRATIONS = (DBAPI_SQLITE, DBAPI_PSYCOPG, DBAPI_MYSQL, DBAPI_MYSQLDB, DBAPI_MARIADB, DBAPI_PYMYSQL) diff --git a/ddtrace/appsec/_iast/processor.py b/ddtrace/appsec/_iast/processor.py index 9a5e906faae..a3bf70b031e 100644 --- a/ddtrace/appsec/_iast/processor.py +++ b/ddtrace/appsec/_iast/processor.py @@ -1,9 +1,9 @@ from dataclasses import dataclass from ddtrace._trace.processor import SpanProcessor -from ddtrace._trace.span import Span from ddtrace.ext import SpanTypes from ddtrace.internal.logger import get_logger +from ddtrace.trace import Span from ._iast_request_context import _iast_end_request from ._iast_request_context import _iast_start_request diff --git a/ddtrace/appsec/_iast/taint_sinks/_base.py b/ddtrace/appsec/_iast/taint_sinks/_base.py index a934c8c5788..93c5fdfc371 100644 --- a/ddtrace/appsec/_iast/taint_sinks/_base.py +++ b/ddtrace/appsec/_iast/taint_sinks/_base.py @@ -4,11 +4,11 @@ from typing import Optional from typing import Text -from ddtrace import tracer from ddtrace.appsec._deduplications import deduplication from ddtrace.appsec._trace_utils import _asm_manual_keep from ddtrace.internal.logger import get_logger from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import tracer from .._iast_request_context import get_iast_reporter from .._iast_request_context import is_iast_request_enabled diff --git a/ddtrace/appsec/_iast/taint_sinks/insecure_cookie.py b/ddtrace/appsec/_iast/taint_sinks/insecure_cookie.py index 3e9c05c451c..8f369e85b9a 100644 --- a/ddtrace/appsec/_iast/taint_sinks/insecure_cookie.py +++ b/ddtrace/appsec/_iast/taint_sinks/insecure_cookie.py @@ -1,8 +1,9 @@ from typing import Dict from typing import Optional +from ddtrace.settings.asm import config as asm_config + from ..._constants import IAST_SPAN_TAGS -from .. import _is_iast_enabled from .. import oce from .._iast_request_context import is_iast_request_enabled from .._metrics import _set_metric_iast_executed_sink @@ -36,7 +37,7 @@ class NoSameSite(VulnerabilityBase): def asm_check_cookies(cookies: Optional[Dict[str, str]]) -> None: if not cookies: return - if _is_iast_enabled() and is_iast_request_enabled(): + if asm_config._iast_enabled and is_iast_request_enabled(): try: for cookie_key, cookie_value in cookies.items(): lvalue = cookie_value.lower().replace(" ", "") diff --git a/ddtrace/appsec/_metrics.py b/ddtrace/appsec/_metrics.py index 75c329b50e1..ccab9d9455a 100644 --- a/ddtrace/appsec/_metrics.py +++ b/ddtrace/appsec/_metrics.py @@ -1,7 +1,7 @@ from ddtrace.appsec import _asm_request_context from ddtrace.appsec import _constants +import ddtrace.appsec._ddwaf as ddwaf from ddtrace.appsec._deduplications import deduplication -from ddtrace.appsec._processor import ddwaf from ddtrace.internal import telemetry from ddtrace.internal.logger import get_logger from ddtrace.internal.telemetry.constants import TELEMETRY_LOG_LEVEL diff --git a/ddtrace/appsec/_processor.py b/ddtrace/appsec/_processor.py index 6102ba1ded2..a49af4e10a1 100644 --- a/ddtrace/appsec/_processor.py +++ b/ddtrace/appsec/_processor.py @@ -4,6 +4,7 @@ from json.decoder import JSONDecodeError import os import os.path +from typing import TYPE_CHECKING from typing import Any from typing import Dict from typing import List @@ -11,10 +12,14 @@ from typing import Set from typing import Tuple from typing import Union + + +if TYPE_CHECKING: + import ddtrace.appsec._ddwaf as ddwaf + import weakref from ddtrace._trace.processor import SpanProcessor -from ddtrace._trace.span import Span from ddtrace.appsec import _asm_request_context from ddtrace.appsec._constants import APPSEC from ddtrace.appsec._constants import DEFAULT @@ -35,6 +40,7 @@ from ddtrace.internal.logger import get_logger from ddtrace.internal.rate_limiter import RateLimiter from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Span log = get_logger(__name__) @@ -167,14 +173,17 @@ def __post_init__(self) -> None: def delayed_init(self) -> None: try: if self._rules is not None and not hasattr(self, "_ddwaf"): - self._ddwaf = ddwaf.DDWaf( + from ddtrace.appsec._ddwaf import DDWaf # noqa: E402 + import ddtrace.appsec._metrics as metrics # noqa: E402 + + self.metrics = metrics + self._ddwaf = DDWaf( self._rules, self.obfuscation_parameter_key_regexp, self.obfuscation_parameter_value_regexp ) - _set_waf_init_metric(self._ddwaf.info) + self.metrics._set_waf_init_metric(self._ddwaf.info) except Exception: # Partial of DDAS-0005-00 log.warning("[DDAS-0005-00] WAF initialization failed") - raise self._update_required() def _update_required(self): @@ -193,7 +202,7 @@ def _update_rules(self, new_rules: Dict[str, Any]) -> bool: if asm_config._asm_static_rule_file is not None: return result result = self._ddwaf.update_rules(new_rules) - _set_waf_updates_metric(self._ddwaf.info) + self.metrics._set_waf_updates_metric(self._ddwaf.info) self._update_required() return result @@ -241,7 +250,7 @@ def waf_callable(custom_data=None, **kwargs): return self._waf_action(span._local_root or span, ctx, custom_data, **kwargs) _asm_request_context.set_waf_callback(waf_callable) - _asm_request_context.add_context_callback(_set_waf_request_metrics) + _asm_request_context.add_context_callback(self.metrics._set_waf_request_metrics) if headers is not None: _asm_request_context.set_waf_address(SPAN_DATA_NAMES.REQUEST_HEADERS_NO_COOKIES, headers) _asm_request_context.set_waf_address( @@ -436,10 +445,3 @@ def on_span_finish(self, span: Span) -> None: del self._span_to_waf_ctx[s] except Exception: # nosec B110 pass - - -# load waf at the end only to avoid possible circular imports with gevent -import ddtrace.appsec._ddwaf as ddwaf # noqa: E402 -from ddtrace.appsec._metrics import _set_waf_init_metric # noqa: E402 -from ddtrace.appsec._metrics import _set_waf_request_metrics # noqa: E402 -from ddtrace.appsec._metrics import _set_waf_updates_metric # noqa: E402 diff --git a/ddtrace/appsec/_remoteconfiguration.py b/ddtrace/appsec/_remoteconfiguration.py index 723710d7cc3..7f70f0aee33 100644 --- a/ddtrace/appsec/_remoteconfiguration.py +++ b/ddtrace/appsec/_remoteconfiguration.py @@ -5,7 +5,6 @@ from typing import Mapping from typing import Optional -from ddtrace import Tracer from ddtrace.appsec._capabilities import _asm_feature_is_required from ddtrace.appsec._constants import PRODUCTS from ddtrace.internal.logger import get_logger @@ -17,6 +16,7 @@ from ddtrace.internal.telemetry import telemetry_writer from ddtrace.internal.telemetry.constants import TELEMETRY_APM_PRODUCT from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Tracer log = get_logger(__name__) @@ -109,7 +109,7 @@ def _appsec_rules_data(features: Mapping[str, Any], test_tracer: Optional[Tracer # Tracer is a parameter for testing propose # Import tracer here to avoid a circular import if test_tracer is None: - from ddtrace import tracer + from ddtrace.trace import tracer else: tracer = test_tracer @@ -198,7 +198,7 @@ def _appsec_1click_activation(features: Mapping[str, Any], test_tracer: Optional # Tracer is a parameter for testing propose # Import tracer here to avoid a circular import if test_tracer is None: - from ddtrace import tracer + from ddtrace.trace import tracer else: tracer = test_tracer diff --git a/ddtrace/appsec/_trace_utils.py b/ddtrace/appsec/_trace_utils.py index 56f34d81f99..53cc8d9b9b2 100644 --- a/ddtrace/appsec/_trace_utils.py +++ b/ddtrace/appsec/_trace_utils.py @@ -1,8 +1,6 @@ from typing import Optional -from ddtrace import Tracer from ddtrace import constants -from ddtrace._trace.span import Span from ddtrace.appsec import _asm_request_context from ddtrace.appsec._asm_request_context import call_waf_callback from ddtrace.appsec._asm_request_context import get_blocked @@ -18,6 +16,8 @@ from ddtrace.internal._exceptions import BlockingException from ddtrace.internal.logger import get_logger from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Span +from ddtrace.trace import Tracer log = get_logger(__name__) @@ -133,10 +133,10 @@ def track_user_login_success_event( return if real_mode == LOGIN_EVENTS_MODE.ANON and isinstance(user_id, str): user_id = _hash_user_id(user_id) - + span.set_tag_str(APPSEC.AUTO_LOGIN_EVENTS_COLLECTION_MODE, real_mode) if login_events_mode != LOGIN_EVENTS_MODE.SDK: span.set_tag_str(APPSEC.USER_LOGIN_USERID, str(user_id)) - set_user(tracer, user_id, name, email, scope, role, session_id, propagate, span) + set_user(tracer, user_id, name, email, scope, role, session_id, propagate, span, may_block=False) if in_asm_context(): res = call_waf_callback( custom_data={ @@ -185,6 +185,7 @@ def track_user_login_failure_event( if login_events_mode != LOGIN_EVENTS_MODE.SDK: span.set_tag_str(APPSEC.USER_LOGIN_USERID, str(user_id)) span.set_tag_str("%s.failure.%s" % (APPSEC.USER_LOGIN_EVENT_PREFIX_PUBLIC, user.ID), str(user_id)) + span.set_tag_str(APPSEC.AUTO_LOGIN_EVENTS_COLLECTION_MODE, real_mode) # if called from the SDK, set the login, email and name if login_events_mode in (LOGIN_EVENTS_MODE.SDK, LOGIN_EVENTS_MODE.AUTO): if login: @@ -376,5 +377,57 @@ def _on_django_auth(result_user, mode, kwargs, pin, info_retriever, django_confi return False, None +def _on_django_process(result_user, mode, kwargs, pin, info_retriever, django_config): + if (not asm_config._asm_enabled) or mode == LOGIN_EVENTS_MODE.DISABLED: + return + userid_list = info_retriever.possible_user_id_fields + info_retriever.possible_login_fields + + for possible_key in userid_list: + if possible_key in kwargs: + user_id = kwargs[possible_key] + break + else: + user_id = None + + user_id_found, user_extra = info_retriever.get_user_info( + login=django_config.include_user_login, + email=django_config.include_user_email, + name=django_config.include_user_realname, + ) + if user_extra.get("login") is None: + user_extra["login"] = user_id + user_id = user_id_found or user_id + if result_user and result_user.is_authenticated: + span = pin.tracer.current_root_span() + if mode == LOGIN_EVENTS_MODE.ANON and isinstance(user_id, str): + hash_id = _hash_user_id(user_id) + span.set_tag_str(APPSEC.USER_LOGIN_USERID, hash_id) + span.set_tag_str(APPSEC.AUTO_LOGIN_EVENTS_COLLECTION_MODE, mode) + set_user(pin.tracer, hash_id, propagate=True, may_block=False, span=span) + elif mode == LOGIN_EVENTS_MODE.IDENT: + span.set_tag_str(APPSEC.USER_LOGIN_USERID, str(user_id)) + span.set_tag_str(APPSEC.AUTO_LOGIN_EVENTS_COLLECTION_MODE, mode) + set_user( + pin.tracer, + str(user_id), + propagate=True, + email=user_extra.get("email"), + name=user_extra.get("name"), + may_block=False, + span=span, + ) + if in_asm_context(): + real_mode = mode if mode != LOGIN_EVENTS_MODE.AUTO else asm_config._user_event_mode + custom_data = { + "REQUEST_USER_ID": str(user_id) if user_id else None, + "REQUEST_USERNAME": user_extra.get("login"), + "LOGIN_SUCCESS": real_mode, + } + res = call_waf_callback(custom_data=custom_data, force_sent=True) + if res and any(action in [WAF_ACTIONS.BLOCK_ACTION, WAF_ACTIONS.REDIRECT_ACTION] for action in res.actions): + raise BlockingException(get_blocked()) + + core.on("django.login", _on_django_login) core.on("django.auth", _on_django_auth, "user") +core.on("django.process_request", _on_django_process) diff --git a/ddtrace/appsec/trace_utils/__init__.py b/ddtrace/appsec/trace_utils/__init__.py index 25559d7f0e9..749480429c1 100644 --- a/ddtrace/appsec/trace_utils/__init__.py +++ b/ddtrace/appsec/trace_utils/__init__.py @@ -1,3 +1,5 @@ +"""Public API for User events""" + from ddtrace.appsec._trace_utils import block_request # noqa: F401 from ddtrace.appsec._trace_utils import block_request_if_user_blocked # noqa: F401 from ddtrace.appsec._trace_utils import should_block_user # noqa: F401 diff --git a/ddtrace/bootstrap/preload.py b/ddtrace/bootstrap/preload.py index 95dc8f4cd55..7980b9bf746 100644 --- a/ddtrace/bootstrap/preload.py +++ b/ddtrace/bootstrap/preload.py @@ -15,7 +15,7 @@ from ddtrace.internal.utils.formats import asbool # noqa:F401 from ddtrace.internal.utils.formats import parse_tags_str # noqa:F401 from ddtrace.settings.crashtracker import config as crashtracker_config -from ddtrace import tracer +from ddtrace.trace import tracer import typing as t diff --git a/ddtrace/context.py b/ddtrace/context.py index 72640327d92..843ef510c38 100644 --- a/ddtrace/context.py +++ b/ddtrace/context.py @@ -1,5 +1,5 @@ -from ddtrace._trace.context import Context # noqa: F401 from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning +from ddtrace.trace import Context # noqa: F401 from ddtrace.vendor.debtcollector import deprecate diff --git a/ddtrace/contrib/__init__.py b/ddtrace/contrib/__init__.py index cb5b2c1de09..668b87214c6 100644 --- a/ddtrace/contrib/__init__.py +++ b/ddtrace/contrib/__init__.py @@ -1,73 +1,3 @@ -from ddtrace._trace import trace_handlers # noqa:F401 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.internal.utils.importlib import func_name # noqa:F401 -from ddtrace.internal.utils.importlib import module_name # noqa:F401 -from ddtrace.internal.utils.importlib import require_modules # noqa:F401 -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - if name in ( - "aiohttp", - "asgi", - "bottle", - "celery", - "cherrypy", - "falcon", - "flask_cache", - "pylibmc", - "pyramid", - "requests", - "sqlalchemy", - "wsgi", - "trace_utils", - "internal", - ): - # following packages/modules are not deprecated and will not be removed in 3.0 - pass - elif name in ("trace_handlers", "func_name", "module_name", "require_modules"): - # the following attributes are exposed in ddtrace.contrib.__init__ and should be - # removed in v3.0 - deprecate( - ("ddtrace.contrib.%s is deprecated" % name), - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - elif name in ("aiobotocore", "httplib", "kombu", "snowflake", "sqlalchemy", "tornado", "urllib3"): - # following integrations are not enabled by default and require a unique deprecation message - deprecate( - f"ddtrace.contrib.{name} is deprecated", - message="Avoid using this package directly. " - f"Set DD_TRACE_{name.upper()}_ENABLED=true and use ``ddtrace.auto`` or the " - "``ddtrace-run`` command to enable and configure this integration.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - elif name in ("redis_utils", "trace_utils_redis", "trace_utils_async"): - deprecate( - f"The ddtrace.contrib.{name} module is deprecated", - message="Import from ``ddtrace.contrib.trace_utils`` instead.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - elif name == "flask_login": - deprecate( - """The flask_login integration is deprecated and will be deleted. - We recommend customers to switch to manual instrumentation. - https://docs.datadoghq.com/security/application_security/threats/add-user-info/?tab=loginsuccess&code-lang=python#adding-business-logic-information-login-success-login-failure-any-business-logic-to-traces - """, - message="", - category=DDTraceDeprecationWarning, - ) - else: - deprecate( - f"ddtrace.contrib.{name} is deprecated", - message="Avoid using this package directly. " - f"Use ``import ddtrace.auto`` or the ``ddtrace-run`` command to enable and configure {name}.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) +# Importing trace handlers has the side effect of registering integration level +# handlers. This is necessary to use the Core API in integrations. +from ddtrace._trace import trace_handlers as _ # noqa: F401 diff --git a/ddtrace/contrib/aiobotocore/__init__.py b/ddtrace/contrib/_aiobotocore.py similarity index 64% rename from ddtrace/contrib/aiobotocore/__init__.py rename to ddtrace/contrib/_aiobotocore.py index 5c4527d11f3..7439a24e443 100644 --- a/ddtrace/contrib/aiobotocore/__init__.py +++ b/ddtrace/contrib/_aiobotocore.py @@ -25,16 +25,3 @@ Default: ``False`` """ - - -# Required to allow users to import from `ddtrace.contrib.aiobotocore.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.aiobotocore.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.aiobotocore.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/_aiohttp_jinja2.py b/ddtrace/contrib/_aiohttp_jinja2.py new file mode 100644 index 00000000000..6d6db50674e --- /dev/null +++ b/ddtrace/contrib/_aiohttp_jinja2.py @@ -0,0 +1,15 @@ +""" +The ``aiohttp_jinja2`` integration adds tracing of template rendering. + + +Enabling +~~~~~~~~ + +The integration is enabled automatically when using +:ref:`ddtrace-run` or :ref:`import ddtrace.auto`. + +Or use :func:`patch()` to manually enable the integration:: + + from ddtrace import patch + patch(aiohttp_jinja2=True) +""" diff --git a/ddtrace/contrib/aiomysql/__init__.py b/ddtrace/contrib/_aiomysql.py similarity index 68% rename from ddtrace/contrib/aiomysql/__init__.py rename to ddtrace/contrib/_aiomysql.py index 49926545da7..5b060571309 100644 --- a/ddtrace/contrib/aiomysql/__init__.py +++ b/ddtrace/contrib/_aiomysql.py @@ -35,16 +35,3 @@ cur = await conn.cursor() await cur.execute("SELECT 6*7 AS the_answer;") """ - - -# Required to allow users to import from `ddtrace.contrib.aiohttp.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - -from ddtrace.contrib.internal.aiomysql.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.aiomysql.patch import patch # noqa: F401 -from ddtrace.contrib.internal.aiomysql.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/aiopg/__init__.py b/ddtrace/contrib/_aiopg.py similarity index 59% rename from ddtrace/contrib/aiopg/__init__.py rename to ddtrace/contrib/_aiopg.py index de5dcf490e2..a419df5dbbf 100644 --- a/ddtrace/contrib/aiopg/__init__.py +++ b/ddtrace/contrib/_aiopg.py @@ -16,15 +16,3 @@ # Use a pin to specify metadata related to this connection Pin.override(db, service='postgres-users') """ - - -# Required to allow users to import from `ddtrace.contrib.aiohttp.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - -from ddtrace.contrib.internal.aiopg.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.aiopg.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/aioredis/__init__.py b/ddtrace/contrib/_aioredis.py similarity index 76% rename from ddtrace/contrib/aioredis/__init__.py rename to ddtrace/contrib/_aioredis.py index 3dd70747723..7abbd826a3c 100644 --- a/ddtrace/contrib/aioredis/__init__.py +++ b/ddtrace/contrib/_aioredis.py @@ -60,14 +60,3 @@ myaioredis = aioredis.Aioredis() Pin.override(myaioredis, service="myaioredis") """ -import warnings as _w # noqa: E402 - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - # Required to allow users to import from `ddtrace.contrib.aioredis.patch` directly - from . import patch as _ # noqa: I001,F401 - -from ddtrace.contrib.internal.aioredis.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.aioredis.patch import patch # noqa: F401 -from ddtrace.contrib.internal.aioredis.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/algoliasearch/__init__.py b/ddtrace/contrib/_algoliasearch.py similarity index 55% rename from ddtrace/contrib/algoliasearch/__init__.py rename to ddtrace/contrib/_algoliasearch.py index 8c1034951e8..ebb95a7e504 100644 --- a/ddtrace/contrib/algoliasearch/__init__.py +++ b/ddtrace/contrib/_algoliasearch.py @@ -21,16 +21,3 @@ .. __: https://www.algolia.com """ - - -# Required to allow users to import from `ddtrace.contrib.algoliasearch.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - -from ddtrace.contrib.internal.algoliasearch.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.algoliasearch.patch import patch # noqa: F401 -from ddtrace.contrib.internal.algoliasearch.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/anthropic/__init__.py b/ddtrace/contrib/_anthropic.py similarity index 85% rename from ddtrace/contrib/anthropic/__init__.py rename to ddtrace/contrib/_anthropic.py index 333123c2ac8..81e62a6083b 100644 --- a/ddtrace/contrib/anthropic/__init__.py +++ b/ddtrace/contrib/_anthropic.py @@ -81,16 +81,3 @@ Pin.override(anthropic, service="my-anthropic-service") """ # noqa: E501 - - -# Required to allow users to import from `ddtrace.contrib.anthropic.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - -from ddtrace.contrib.internal.anthropic.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.anthropic.patch import patch # noqa: F401 -from ddtrace.contrib.internal.anthropic.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/aredis/__init__.py b/ddtrace/contrib/_aredis.py similarity index 82% rename from ddtrace/contrib/aredis/__init__.py rename to ddtrace/contrib/_aredis.py index 460734a13f9..1ffac72fa36 100644 --- a/ddtrace/contrib/aredis/__init__.py +++ b/ddtrace/contrib/_aredis.py @@ -65,15 +65,3 @@ async def example(): await client.get("my-key") """ - - -# Required to allow users to import from `ddtrace.contrib.aredis.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - -from ddtrace.contrib.internal.aredis.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.aredis.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/_asyncio.py b/ddtrace/contrib/_asyncio.py new file mode 100644 index 00000000000..ae2b608dc67 --- /dev/null +++ b/ddtrace/contrib/_asyncio.py @@ -0,0 +1,4 @@ +""" +This integration provides context management for tracing the execution flow +of concurrent execution of ``asyncio.Task``. +""" diff --git a/ddtrace/contrib/asyncpg/__init__.py b/ddtrace/contrib/_asyncpg.py similarity index 68% rename from ddtrace/contrib/asyncpg/__init__.py rename to ddtrace/contrib/_asyncpg.py index 9cd624678e8..233cde9f51c 100644 --- a/ddtrace/contrib/asyncpg/__init__.py +++ b/ddtrace/contrib/_asyncpg.py @@ -43,16 +43,3 @@ conn = asyncpg.connect("postgres://localhost:5432") Pin.override(conn, service="custom-service") """ - - -# Required to allow users to import from `ddtrace.contrib.asyncpg.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - -from ddtrace.contrib.internal.asyncpg.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.asyncpg.patch import patch # noqa: F401 -from ddtrace.contrib.internal.asyncpg.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/avro/__init__.py b/ddtrace/contrib/_avro.py similarity index 75% rename from ddtrace/contrib/avro/__init__.py rename to ddtrace/contrib/_avro.py index 5e84b184f77..6c4927e8aaf 100644 --- a/ddtrace/contrib/avro/__init__.py +++ b/ddtrace/contrib/_avro.py @@ -15,6 +15,3 @@ ~~~~~~~~~~~~~ """ - -from ..internal.avro.patch import get_version # noqa: F401 -from ..internal.avro.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/aws_lambda/__init__.py b/ddtrace/contrib/_aws_lambda.py similarity index 84% rename from ddtrace/contrib/aws_lambda/__init__.py rename to ddtrace/contrib/_aws_lambda.py index 6cd9b97da39..76ade43c1a9 100644 --- a/ddtrace/contrib/aws_lambda/__init__.py +++ b/ddtrace/contrib/_aws_lambda.py @@ -38,7 +38,3 @@ For additional configuration refer to `Instrumenting Python Serverless Applications by Datadog `_. """ - -from ddtrace.contrib.internal.aws_lambda.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.aws_lambda.patch import patch # noqa: F401 -from ddtrace.contrib.internal.aws_lambda.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/_azure_functions.py b/ddtrace/contrib/_azure_functions.py new file mode 100644 index 00000000000..8a8e5df796e --- /dev/null +++ b/ddtrace/contrib/_azure_functions.py @@ -0,0 +1,25 @@ +""" +The azure_functions integration traces all http requests to your Azure Function app. + +Enabling +~~~~~~~~ + +Use :func:`patch()` to manually enable the integration:: + + from ddtrace import patch + patch(azure_functions=True) + + +Global Configuration +~~~~~~~~~~~~~~~~~~~~ + +.. py:data:: ddtrace.config.azure_functions["service"] + + The service name reported by default for azure_functions instances. + + This option can also be set with the ``DD_SERVICE`` environment + variable. + + Default: ``"azure_functions"`` + +""" diff --git a/ddtrace/contrib/boto/__init__.py b/ddtrace/contrib/_boto.py similarity index 65% rename from ddtrace/contrib/boto/__init__.py rename to ddtrace/contrib/_boto.py index 955c1bd0f2a..21965c2e161 100644 --- a/ddtrace/contrib/boto/__init__.py +++ b/ddtrace/contrib/_boto.py @@ -27,15 +27,3 @@ Default: ``False`` """ - - -# Required to allow users to import from `ddtrace.contrib.boto.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - -from ddtrace.contrib.internal.boto.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.boto.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/botocore/__init__.py b/ddtrace/contrib/_botocore.py similarity index 91% rename from ddtrace/contrib/botocore/__init__.py rename to ddtrace/contrib/_botocore.py index 6662b43e599..2c1afc2c47a 100644 --- a/ddtrace/contrib/botocore/__init__.py +++ b/ddtrace/contrib/_botocore.py @@ -151,16 +151,3 @@ Default: ``True`` """ - - -# Required to allow users to import from `ddtrace.contrib.botocore.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - -from ddtrace.contrib.internal.botocore.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.botocore.patch import patch # noqa: F401 -from ddtrace.contrib.internal.botocore.patch import patch_submodules # noqa: F401 diff --git a/ddtrace/contrib/cassandra/__init__.py b/ddtrace/contrib/_cassandra.py similarity index 69% rename from ddtrace/contrib/cassandra/__init__.py rename to ddtrace/contrib/_cassandra.py index 5b2247156d6..d0de07f8f16 100644 --- a/ddtrace/contrib/cassandra/__init__.py +++ b/ddtrace/contrib/_cassandra.py @@ -22,16 +22,3 @@ session = cluster.connect("my_keyspace") session.execute("select id from my_table limit 10;") """ - - -# Required to allow users to import from `ddtrace.contrib.cassandra.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.cassandra.patch import patch # noqa: F401 -from ddtrace.contrib.internal.cassandra.session import get_version # noqa: F401 diff --git a/ddtrace/contrib/consul/__init__.py b/ddtrace/contrib/_consul.py similarity index 56% rename from ddtrace/contrib/consul/__init__.py rename to ddtrace/contrib/_consul.py index d0a6a064683..fa159309411 100644 --- a/ddtrace/contrib/consul/__init__.py +++ b/ddtrace/contrib/_consul.py @@ -19,17 +19,3 @@ # Use a pin to specify metadata related to this client Pin.override(client, service='consul-kv') """ - - -# Required to allow users to import from `ddtrace.contrib.consul.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.consul.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.consul.patch import patch # noqa: F401 -from ddtrace.contrib.internal.consul.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/_coverage.py b/ddtrace/contrib/_coverage.py new file mode 100644 index 00000000000..c597acab1da --- /dev/null +++ b/ddtrace/contrib/_coverage.py @@ -0,0 +1,17 @@ +""" +The Coverage.py integration traces test code coverage when using `pytest` or `unittest`. + + +Enabling +~~~~~~~~ + +The Coverage.py integration is enabled automatically when using +:ref:`ddtrace-run` or :ref:`import ddtrace.auto`. + +Alternately, use :func:`patch()` to manually enable the integration:: + + from ddtrace import patch + patch(coverage=True) + +Note: Coverage.py instrumentation is only enabled if `pytest` or `unittest` instrumentation is enabled. +""" diff --git a/ddtrace/contrib/django/__init__.py b/ddtrace/contrib/_django.py similarity index 91% rename from ddtrace/contrib/django/__init__.py rename to ddtrace/contrib/_django.py index c1ab65d494d..afde135c47c 100644 --- a/ddtrace/contrib/django/__init__.py +++ b/ddtrace/contrib/_django.py @@ -200,18 +200,3 @@ .. __: https://www.djangoproject.com/ """ # noqa: E501 - - -# Required to allow users to import from `ddtrace.contrib.django.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.django.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.django.patch import patch # noqa: F401 -from ddtrace.contrib.internal.django.patch import patch as _patch # noqa: F401 -from ddtrace.contrib.internal.django.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/dogpile_cache/__init__.py b/ddtrace/contrib/_dogpile_cache.py similarity index 73% rename from ddtrace/contrib/dogpile_cache/__init__.py rename to ddtrace/contrib/_dogpile_cache.py index c1b4f1b58ed..166a00a4aef 100644 --- a/ddtrace/contrib/dogpile_cache/__init__.py +++ b/ddtrace/contrib/_dogpile_cache.py @@ -36,17 +36,3 @@ def hello(name): .. __: https://dogpilecache.sqlalchemy.org/ """ - - -# Required to allow users to import from `ddtrace.contrib.dogpile_cache.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.dogpile_cache.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.dogpile_cache.patch import patch # noqa: F401 -from ddtrace.contrib.internal.dogpile_cache.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/dramatiq/__init__.py b/ddtrace/contrib/_dramatiq.py similarity index 61% rename from ddtrace/contrib/dramatiq/__init__.py rename to ddtrace/contrib/_dramatiq.py index 2d135ba2966..e6a0f82e5b3 100644 --- a/ddtrace/contrib/dramatiq/__init__.py +++ b/ddtrace/contrib/_dramatiq.py @@ -28,17 +28,3 @@ def my_other_task(content): ddtrace-run python app.py """ - - -# Required to allow users to import from `ddtrace.contrib.dramatiq.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.dramatiq.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.dramatiq.patch import patch # noqa: F401 -from ddtrace.contrib.internal.dramatiq.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/elasticsearch/__init__.py b/ddtrace/contrib/_elasticsearch.py similarity index 85% rename from ddtrace/contrib/elasticsearch/__init__.py rename to ddtrace/contrib/_elasticsearch.py index b0be91a11da..8462195af81 100644 --- a/ddtrace/contrib/elasticsearch/__init__.py +++ b/ddtrace/contrib/_elasticsearch.py @@ -49,6 +49,3 @@ # Override service name config.elasticsearch['service'] = 'custom-service-name' """ -from ddtrace.contrib.internal.elasticsearch.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.elasticsearch.patch import get_versions # noqa: F401 -from ddtrace.contrib.internal.elasticsearch.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/fastapi/__init__.py b/ddtrace/contrib/_fastapi.py similarity index 74% rename from ddtrace/contrib/fastapi/__init__.py rename to ddtrace/contrib/_fastapi.py index 726a308f14d..4af18192044 100644 --- a/ddtrace/contrib/fastapi/__init__.py +++ b/ddtrace/contrib/_fastapi.py @@ -50,17 +50,3 @@ config.fastapi['request_span_name'] = 'custom-request-span-name' """ - - -# Required to allow users to import from `ddtrace.contrib.fastapi.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.fastapi.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.fastapi.patch import patch # noqa: F401 -from ddtrace.contrib.internal.fastapi.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/flask/__init__.py b/ddtrace/contrib/_flask.py similarity index 80% rename from ddtrace/contrib/flask/__init__.py rename to ddtrace/contrib/_flask.py index 0562240d090..85233fbba08 100644 --- a/ddtrace/contrib/flask/__init__.py +++ b/ddtrace/contrib/_flask.py @@ -87,23 +87,8 @@ def index(): # Override service name config.flask['service_name'] = 'custom-service-name' - # Report 401, and 403 responses as errors - config.http_server.error_statuses = '401,403' - .. __: http://flask.pocoo.org/ :ref:`All HTTP tags ` are supported for this integration. """ - - -# DEV: We do this so we can `@mock.patch('ddtrace.contrib.flask._patch.')` in tests -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 -from ddtrace.contrib.internal.flask.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.flask.patch import patch # noqa: F401 -from ddtrace.contrib.internal.flask.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/freezegun/__init__.py b/ddtrace/contrib/_freezegun.py similarity index 69% rename from ddtrace/contrib/freezegun/__init__.py rename to ddtrace/contrib/_freezegun.py index 2b643662c1d..d9f48ded072 100644 --- a/ddtrace/contrib/freezegun/__init__.py +++ b/ddtrace/contrib/_freezegun.py @@ -12,8 +12,3 @@ ~~~~~~~~~~~~~ The freezegun integration is not configurable, but may be disabled using DD_PATCH_MODULES=freezegun:false . """ - - -from ..internal.freezegun.patch import get_version # noqa: F401 -from ..internal.freezegun.patch import patch # noqa: F401 -from ..internal.freezegun.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/futures/__init__.py b/ddtrace/contrib/_futures.py similarity index 56% rename from ddtrace/contrib/futures/__init__.py rename to ddtrace/contrib/_futures.py index 3ac420b2263..1005423acad 100644 --- a/ddtrace/contrib/futures/__init__.py +++ b/ddtrace/contrib/_futures.py @@ -16,17 +16,3 @@ from ddtrace import patch patch(futures=True) """ - - -# Required to allow users to import from `ddtrace.contrib.futures.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.futures.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.futures.patch import patch # noqa: F401 -from ddtrace.contrib.internal.futures.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/gevent/__init__.py b/ddtrace/contrib/_gevent.py similarity index 64% rename from ddtrace/contrib/gevent/__init__.py rename to ddtrace/contrib/_gevent.py index 5ee22f591b4..9fa3ed4add1 100644 --- a/ddtrace/contrib/gevent/__init__.py +++ b/ddtrace/contrib/_gevent.py @@ -36,24 +36,3 @@ def worker_function(): with tracer.trace("greenlet.child_call") as child: ... """ - -# Required to allow users to import from `ddtrace.contrib.gevent.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.gevent.patch import get_version #noqa: F401 -from ddtrace.contrib.internal.gevent.patch import patch #noqa: F401 -from ddtrace.contrib.internal.gevent.patch import unpatch #noqa: F401 - -from ...provider import DefaultContextProvider as _DefaultContextProvider - - -context_provider = _DefaultContextProvider() - - - diff --git a/ddtrace/contrib/google_generativeai/__init__.py b/ddtrace/contrib/_google_generativeai.py similarity index 92% rename from ddtrace/contrib/google_generativeai/__init__.py rename to ddtrace/contrib/_google_generativeai.py index 45333c58173..963b80e7494 100644 --- a/ddtrace/contrib/google_generativeai/__init__.py +++ b/ddtrace/contrib/_google_generativeai.py @@ -78,7 +78,3 @@ Pin.override(genai, service="my-gemini-service") """ # noqa: E501 - -from ..internal.google_generativeai.patch import get_version # noqa: F401 -from ..internal.google_generativeai.patch import patch # noqa: F401 -from ..internal.google_generativeai.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/graphql/__init__.py b/ddtrace/contrib/_graphql.py similarity index 71% rename from ddtrace/contrib/graphql/__init__.py rename to ddtrace/contrib/_graphql.py index f12880efda1..d4d8d769d61 100644 --- a/ddtrace/contrib/graphql/__init__.py +++ b/ddtrace/contrib/_graphql.py @@ -44,17 +44,3 @@ Pin.override(graphql, service="mygraphql") """ - - -# Required to allow users to import from `ddtrace.contrib.graphql.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.graphql.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.graphql.patch import patch # noqa: F401 -from ddtrace.contrib.internal.graphql.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/grpc/__init__.py b/ddtrace/contrib/_grpc.py similarity index 80% rename from ddtrace/contrib/grpc/__init__.py rename to ddtrace/contrib/_grpc.py index ea2db0b4ac3..5713b6779ad 100644 --- a/ddtrace/contrib/grpc/__init__.py +++ b/ddtrace/contrib/_grpc.py @@ -74,17 +74,3 @@ add_MyServicer_to_server(MyServicer(), server) server.start() """ - - -# Required to allow users to import from `ddtrace.contrib.grpc.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.grpc.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.grpc.patch import patch # noqa: F401 -from ddtrace.contrib.internal.grpc.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/gunicorn/__init__.py b/ddtrace/contrib/_gunicorn.py similarity index 74% rename from ddtrace/contrib/gunicorn/__init__.py rename to ddtrace/contrib/_gunicorn.py index d098a3fe1bc..7fd31fd296f 100644 --- a/ddtrace/contrib/gunicorn/__init__.py +++ b/ddtrace/contrib/_gunicorn.py @@ -7,16 +7,3 @@ possible in your application's lifecycle. Do not use ``ddtrace-run`` with ``import ddtrace.auto``. """ - - -def get_version(): - # type: () -> str - return "" - - -def patch(): - pass - - -def unpatch(): - pass diff --git a/ddtrace/contrib/httplib/__init__.py b/ddtrace/contrib/_httplib.py similarity index 65% rename from ddtrace/contrib/httplib/__init__.py rename to ddtrace/contrib/_httplib.py index ae85051517e..30b170000e2 100644 --- a/ddtrace/contrib/httplib/__init__.py +++ b/ddtrace/contrib/_httplib.py @@ -42,31 +42,7 @@ # Disable distributed tracing globally. config.httplib['distributed_tracing'] = False - - # Change the service distributed tracing option only for this HTTP - # connection. - - # Python 2 - connection = urllib.HTTPConnection('www.datadog.com') - - # Python 3 connection = http.client.HTTPConnection('www.datadog.com') - cfg = config.get_from(connection) - cfg['distributed_tracing'] = True - - :ref:`Headers tracing ` is supported for this integration. """ - - -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: I001,F401 - -from ddtrace.contrib.internal.httplib.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.httplib.patch import patch # noqa: F401 -from ddtrace.contrib.internal.httplib.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/httpx/__init__.py b/ddtrace/contrib/_httpx.py similarity index 83% rename from ddtrace/contrib/httpx/__init__.py rename to ddtrace/contrib/_httpx.py index 39b191ad139..3d8087fbba1 100644 --- a/ddtrace/contrib/httpx/__init__.py +++ b/ddtrace/contrib/_httpx.py @@ -77,17 +77,3 @@ .. __: https://www.python-httpx.org/ """ - - -# Required to allow users to import from `ddtrace.contrib.httpx.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.httpx.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.httpx.patch import patch # noqa: F401 -from ddtrace.contrib.internal.httpx.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/jinja2/__init__.py b/ddtrace/contrib/_jinja2.py similarity index 62% rename from ddtrace/contrib/jinja2/__init__.py rename to ddtrace/contrib/_jinja2.py index cc8c6786b02..94683ebe5c3 100644 --- a/ddtrace/contrib/jinja2/__init__.py +++ b/ddtrace/contrib/_jinja2.py @@ -16,27 +16,14 @@ The library can be configured globally and per instance, using the Configuration API:: from ddtrace import config + from ddtrace.trace import Pin # Change service name globally config.jinja2['service_name'] = 'jinja-templates' # change the service name only for this environment - cfg = config.get_from(env) - cfg['service_name'] = 'jinja-templates' + Pin.override(env, service='jinja-templates') By default, the service name is set to None, so it is inherited from the parent span. If there is no parent span and the service name is not overridden the agent will drop the traces. """ - -# Required to allow users to import from `ddtrace.contrib.jinja2.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.jinja2.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.jinja2.patch import patch # noqa: F401 -from ddtrace.contrib.internal.jinja2.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/kafka/__init__.py b/ddtrace/contrib/_kafka.py similarity index 69% rename from ddtrace/contrib/kafka/__init__.py rename to ddtrace/contrib/_kafka.py index de857bcb040..fa7d280ea6c 100644 --- a/ddtrace/contrib/kafka/__init__.py +++ b/ddtrace/contrib/_kafka.py @@ -41,17 +41,3 @@ Pin.override(confluent_kafka, service="custom-service-name") """ - - -# Required to allow users to import from `ddtrace.contrib.kafka.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.kafka.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.kafka.patch import patch # noqa: F401 -from ddtrace.contrib.internal.kafka.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/kombu/__init__.py b/ddtrace/contrib/_kombu.py similarity index 68% rename from ddtrace/contrib/kombu/__init__.py rename to ddtrace/contrib/_kombu.py index 1c853adbd3f..85afbe827e4 100644 --- a/ddtrace/contrib/kombu/__init__.py +++ b/ddtrace/contrib/_kombu.py @@ -32,19 +32,3 @@ # Use a pin to specify metadata related to this client Pin.override(producer, service='kombu-consumer') """ -from ddtrace.internal.utils.importlib import require_modules - - -required_modules = ["kombu", "kombu.messaging"] - -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.kombu.patch` directly - import warnings as _w - - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - from ddtrace.contrib.internal.kombu.patch import get_version # noqa: F401 - from ddtrace.contrib.internal.kombu.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/langchain/__init__.py b/ddtrace/contrib/_langchain.py similarity index 93% rename from ddtrace/contrib/langchain/__init__.py rename to ddtrace/contrib/_langchain.py index 1aa04d7a516..d36cd76f3f1 100644 --- a/ddtrace/contrib/langchain/__init__.py +++ b/ddtrace/contrib/_langchain.py @@ -206,16 +206,3 @@ Default: ``0.1`` """ # noqa: E501 - -# Required to allow users to import from `ddtrace.contrib.langchain.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.langchain.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.langchain.patch import patch # noqa: F401 -from ddtrace.contrib.internal.langchain.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/_langgraph.py b/ddtrace/contrib/_langgraph.py new file mode 100644 index 00000000000..d5e62d952ce --- /dev/null +++ b/ddtrace/contrib/_langgraph.py @@ -0,0 +1,4 @@ +""" +The LangGraph integration instruments the LangGraph Python library to emit metrics, +traces, and logs. +""" diff --git a/ddtrace/contrib/logbook/__init__.py b/ddtrace/contrib/_logbook.py similarity index 83% rename from ddtrace/contrib/logbook/__init__.py rename to ddtrace/contrib/_logbook.py index e2a8f244820..dafe8873372 100644 --- a/ddtrace/contrib/logbook/__init__.py +++ b/ddtrace/contrib/_logbook.py @@ -47,17 +47,3 @@ For more information, please see the attached guide for the Datadog Logging Product: https://docs.datadoghq.com/logs/log_collection/python/ """ - - -# Required to allow users to import from `ddtrace.contrib.logbook.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.logbook.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.logbook.patch import patch # noqa: F401 -from ddtrace.contrib.internal.logbook.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/logging/__init__.py b/ddtrace/contrib/_logging.py similarity index 78% rename from ddtrace/contrib/logging/__init__.py rename to ddtrace/contrib/_logging.py index 75454ce7c55..f2997f362f7 100644 --- a/ddtrace/contrib/logging/__init__.py +++ b/ddtrace/contrib/_logging.py @@ -33,7 +33,7 @@ Make sure that your log format exactly matches the following:: import logging - from ddtrace import tracer + from ddtrace.trace import tracer FORMAT = ('%(asctime)s %(levelname)s [%(name)s] [%(filename)s:%(lineno)d] ' '[dd.service=%(dd.service)s dd.env=%(dd.env)s ' @@ -60,17 +60,3 @@ def hello(): For more information, please see the attached guide on common timestamp issues: https://docs.datadoghq.com/logs/guide/logs-not-showing-expected-timestamp/ """ - - -# Required to allow users to import from `ddtrace.contrib.logging.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.logging.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.logging.patch import patch # noqa: F401 -from ddtrace.contrib.internal.logging.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/loguru/__init__.py b/ddtrace/contrib/_loguru.py similarity index 83% rename from ddtrace/contrib/loguru/__init__.py rename to ddtrace/contrib/_loguru.py index 9501fadd703..f0ad96f77fc 100644 --- a/ddtrace/contrib/loguru/__init__.py +++ b/ddtrace/contrib/_loguru.py @@ -62,17 +62,3 @@ def log_format(record): For more information, please see the attached guide for the Datadog Logging Product: https://docs.datadoghq.com/logs/log_collection/python/ """ - - -# Required to allow users to import from `ddtrace.contrib.loguru.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.loguru.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.loguru.patch import patch # noqa: F401 -from ddtrace.contrib.internal.loguru.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/mako/__init__.py b/ddtrace/contrib/_mako.py similarity index 53% rename from ddtrace/contrib/mako/__init__.py rename to ddtrace/contrib/_mako.py index 5de3f87f6c5..d16b74c4d66 100644 --- a/ddtrace/contrib/mako/__init__.py +++ b/ddtrace/contrib/_mako.py @@ -9,12 +9,3 @@ t = Template(filename="index.html") """ - - -# Required to allow users to import from `ddtrace.contrib.mako.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 diff --git a/ddtrace/contrib/mariadb/__init__.py b/ddtrace/contrib/_mariadb.py similarity index 75% rename from ddtrace/contrib/mariadb/__init__.py rename to ddtrace/contrib/_mariadb.py index 8329fca2b63..1ef08422a00 100644 --- a/ddtrace/contrib/mariadb/__init__.py +++ b/ddtrace/contrib/_mariadb.py @@ -52,17 +52,3 @@ cursor.execute("SELECT 6*7 AS the_answer;") """ - - -# Required to allow users to import from `ddtrace.contrib.mariadb.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.mariadb.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.mariadb.patch import patch # noqa: F401 -from ddtrace.contrib.internal.mariadb.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/molten/__init__.py b/ddtrace/contrib/_molten.py similarity index 66% rename from ddtrace/contrib/molten/__init__.py rename to ddtrace/contrib/_molten.py index 44ef08de9bb..67a616142b8 100644 --- a/ddtrace/contrib/molten/__init__.py +++ b/ddtrace/contrib/_molten.py @@ -34,17 +34,3 @@ def hello(name: str, age: int) -> str: :ref:`All HTTP tags ` are supported for this integration. """ - - -# Required to allow users to import from `ddtrace.contrib.molten.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.molten.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.molten.patch import patch # noqa: F401 -from ddtrace.contrib.internal.molten.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/mongoengine/__init__.py b/ddtrace/contrib/_mongoengine.py similarity index 61% rename from ddtrace/contrib/mongoengine/__init__.py rename to ddtrace/contrib/_mongoengine.py index 793d9cf4322..a72c861f4b7 100644 --- a/ddtrace/contrib/mongoengine/__init__.py +++ b/ddtrace/contrib/_mongoengine.py @@ -17,16 +17,3 @@ client = mongoengine.connect('db', alias='master') Pin.override(client, service="mongo-master") """ - - -# Required to allow users to import from `ddtrace.contrib.mongoengine.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.mongoengine.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.mongoengine.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/mysql/__init__.py b/ddtrace/contrib/_mysql.py similarity index 80% rename from ddtrace/contrib/mysql/__init__.py rename to ddtrace/contrib/_mysql.py index 60a4d638f78..3336839bcf5 100644 --- a/ddtrace/contrib/mysql/__init__.py +++ b/ddtrace/contrib/_mysql.py @@ -62,19 +62,3 @@ Help on mysql.connector can be found on: https://dev.mysql.com/doc/connector-python/en/ """ - - -# check `mysql-connector` availability - - -# Required to allow users to import from `ddtrace.contrib.mysql.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.mysql.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.mysql.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/mysqldb/__init__.py b/ddtrace/contrib/_mysqldb.py similarity index 84% rename from ddtrace/contrib/mysqldb/__init__.py rename to ddtrace/contrib/_mysqldb.py index 7649807e623..46a5e27de7b 100644 --- a/ddtrace/contrib/mysqldb/__init__.py +++ b/ddtrace/contrib/_mysqldb.py @@ -75,15 +75,3 @@ https://mysqlclient.readthedocs.io/ """ - - -# Required to allow users to import from `ddtrace.contrib.mysqldb.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - -from ddtrace.contrib.internal.mysqldb.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.mysqldb.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/openai/__init__.py b/ddtrace/contrib/_openai.py similarity index 94% rename from ddtrace/contrib/openai/__init__.py rename to ddtrace/contrib/_openai.py index 88090b5f85a..8e2eb87aeb5 100644 --- a/ddtrace/contrib/openai/__init__.py +++ b/ddtrace/contrib/_openai.py @@ -247,17 +247,3 @@ Pin.override(openai, service="my-openai-service") """ # noqa: E501 - - -# Required to allow users to import from `ddtrace.contrib.openai.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.openai.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.openai.patch import patch # noqa: F401 -from ddtrace.contrib.internal.openai.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/protobuf/__init__.py b/ddtrace/contrib/_protobuf.py similarity index 67% rename from ddtrace/contrib/protobuf/__init__.py rename to ddtrace/contrib/_protobuf.py index 41f0c76d101..8dfe99461d2 100644 --- a/ddtrace/contrib/protobuf/__init__.py +++ b/ddtrace/contrib/_protobuf.py @@ -15,6 +15,3 @@ ~~~~~~~~~~~~~ """ -from ..internal.protobuf.patch import get_version # noqa: F401 -from ..internal.protobuf.patch import patch # noqa: F401 -from ..internal.protobuf.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/psycopg/__init__.py b/ddtrace/contrib/_psycopg.py similarity index 79% rename from ddtrace/contrib/psycopg/__init__.py rename to ddtrace/contrib/_psycopg.py index 22baf6ef522..0c1e134bb15 100644 --- a/ddtrace/contrib/psycopg/__init__.py +++ b/ddtrace/contrib/_psycopg.py @@ -60,14 +60,3 @@ cursor = db.cursor() cursor.execute("select * from users where id = 1") """ -# Required to allow users to import from `ddtrace.contrib.psycopg.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.psycopg.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.psycopg.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/pymemcache/__init__.py b/ddtrace/contrib/_pymemcache.py similarity index 70% rename from ddtrace/contrib/pymemcache/__init__.py rename to ddtrace/contrib/_pymemcache.py index ef2e7b3ee82..066bb5653e6 100644 --- a/ddtrace/contrib/pymemcache/__init__.py +++ b/ddtrace/contrib/_pymemcache.py @@ -31,16 +31,3 @@ Pymemcache ``HashClient`` will also be indirectly patched as it uses ``Client`` under the hood. """ - - -# Required to allow users to import from `ddtrace.contrib.pymemcache.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - -from ddtrace.contrib.internal.pymemcache.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.pymemcache.patch import patch # noqa: F401 -from ddtrace.contrib.internal.pymemcache.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/pymongo/__init__.py b/ddtrace/contrib/_pymongo.py similarity index 76% rename from ddtrace/contrib/pymongo/__init__.py rename to ddtrace/contrib/_pymongo.py index 9f030de942b..f1210f0047d 100644 --- a/ddtrace/contrib/pymongo/__init__.py +++ b/ddtrace/contrib/_pymongo.py @@ -36,16 +36,3 @@ Default: ``"pymongo"`` """ - - -# Required to allow users to import from `ddtrace.contrib.pymongo.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.pymongo.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.pymongo.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/pymysql/__init__.py b/ddtrace/contrib/_pymysql.py similarity index 78% rename from ddtrace/contrib/pymysql/__init__.py rename to ddtrace/contrib/_pymysql.py index b999934f285..d219e46eccd 100644 --- a/ddtrace/contrib/pymysql/__init__.py +++ b/ddtrace/contrib/_pymysql.py @@ -54,16 +54,3 @@ cursor = conn.cursor() cursor.execute("SELECT 6*7 AS the_answer;") """ - - -# Required to allow users to import from `ddtrace.contrib.pymysql.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.pymysql.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.pymysql.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/pynamodb/__init__.py b/ddtrace/contrib/_pynamodb.py similarity index 64% rename from ddtrace/contrib/pynamodb/__init__.py rename to ddtrace/contrib/_pynamodb.py index 1362429219f..9ac94a291b6 100644 --- a/ddtrace/contrib/pynamodb/__init__.py +++ b/ddtrace/contrib/_pynamodb.py @@ -27,16 +27,3 @@ Default: ``"pynamodb"`` """ - - -# Required to allow users to import from `ddtrace.contrib.pynamodb.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.pynamodb.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.pynamodb.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/pyodbc/__init__.py b/ddtrace/contrib/_pyodbc.py similarity index 77% rename from ddtrace/contrib/pyodbc/__init__.py rename to ddtrace/contrib/_pyodbc.py index 0a9bfa60fab..0a2d46d5e70 100644 --- a/ddtrace/contrib/pyodbc/__init__.py +++ b/ddtrace/contrib/_pyodbc.py @@ -53,16 +53,3 @@ cursor = db.cursor() cursor.execute("select * from users where id = 1") """ - - -# Required to allow users to import from `ddtrace.contrib.pyodbc.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.pyodbc.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.pyodbc.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/pytest/__init__.py b/ddtrace/contrib/_pytest.py similarity index 95% rename from ddtrace/contrib/pytest/__init__.py rename to ddtrace/contrib/_pytest.py index 31533b05e2b..322685b0a6e 100644 --- a/ddtrace/contrib/pytest/__init__.py +++ b/ddtrace/contrib/_pytest.py @@ -60,4 +60,3 @@ Default: ``"pytest.test"`` """ -from ddtrace.contrib.internal.pytest.patch import get_version # noqa: F401 diff --git a/ddtrace/contrib/pytest_bdd/__init__.py b/ddtrace/contrib/_pytest_bdd.py similarity index 89% rename from ddtrace/contrib/pytest_bdd/__init__.py rename to ddtrace/contrib/_pytest_bdd.py index 62846aea395..5c1ff0be9ae 100644 --- a/ddtrace/contrib/pytest_bdd/__init__.py +++ b/ddtrace/contrib/_pytest_bdd.py @@ -21,4 +21,3 @@ for more details. """ -from ddtrace.contrib.internal.pytest_bdd.patch import get_version # noqa: F401 diff --git a/ddtrace/contrib/_pytest_benchmark.py b/ddtrace/contrib/_pytest_benchmark.py new file mode 100644 index 00000000000..6f7df090942 --- /dev/null +++ b/ddtrace/contrib/_pytest_benchmark.py @@ -0,0 +1,3 @@ +""" +The pytest-benchmark integration traces executions of pytest benchmarks. +""" diff --git a/ddtrace/contrib/redis/__init__.py b/ddtrace/contrib/_redis.py similarity index 81% rename from ddtrace/contrib/redis/__init__.py rename to ddtrace/contrib/_redis.py index 28280510b0c..3204fade8df 100644 --- a/ddtrace/contrib/redis/__init__.py +++ b/ddtrace/contrib/_redis.py @@ -66,16 +66,3 @@ # as the service name. client.get("my-key") """ - - -# Required to allow users to import from `ddtrace.contrib.redis.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.redis.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.redis.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/rediscluster/__init__.py b/ddtrace/contrib/_rediscluster.py similarity index 79% rename from ddtrace/contrib/rediscluster/__init__.py rename to ddtrace/contrib/_rediscluster.py index d7b0e320fac..05975277291 100644 --- a/ddtrace/contrib/rediscluster/__init__.py +++ b/ddtrace/contrib/_rediscluster.py @@ -48,16 +48,3 @@ Default: ``True`` """ - - -# Required to allow users to import from `ddtrace.contrib.rediscluster.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.rediscluster.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.rediscluster.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/rq/__init__.py b/ddtrace/contrib/_rq.py similarity index 96% rename from ddtrace/contrib/rq/__init__.py rename to ddtrace/contrib/_rq.py index 0a4d83983eb..596c0c420f6 100644 --- a/ddtrace/contrib/rq/__init__.py +++ b/ddtrace/contrib/_rq.py @@ -76,4 +76,3 @@ .. __: https://python-rq.org/ """ -from ddtrace.contrib.internal.rq.patch import * # noqa: F403 diff --git a/ddtrace/contrib/sanic/__init__.py b/ddtrace/contrib/_sanic.py similarity index 72% rename from ddtrace/contrib/sanic/__init__.py rename to ddtrace/contrib/_sanic.py index 7fab620b8fd..ad97e5af6f3 100644 --- a/ddtrace/contrib/sanic/__init__.py +++ b/ddtrace/contrib/_sanic.py @@ -55,17 +55,3 @@ def index(request): .. __: https://sanic.readthedocs.io/en/latest/ """ - - -# Required to allow users to import from `ddtrace.contrib.sanic.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.sanic.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.sanic.patch import patch # noqa: F401 -from ddtrace.contrib.internal.sanic.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/selenium/__init__.py b/ddtrace/contrib/_selenium.py similarity index 78% rename from ddtrace/contrib/selenium/__init__.py rename to ddtrace/contrib/_selenium.py index 411fd47f7ee..83252ef39fa 100644 --- a/ddtrace/contrib/selenium/__init__.py +++ b/ddtrace/contrib/_selenium.py @@ -22,7 +22,3 @@ DD_CIVISIBILITY_RUM_FLUSH_WAIT_MILLIS: The time in milliseconds to wait after flushing the RUM session. """ - -from ..internal.selenium.patch import get_version # noqa: F401 -from ..internal.selenium.patch import patch # noqa: F401 -from ..internal.selenium.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/snowflake/__init__.py b/ddtrace/contrib/_snowflake.py similarity index 78% rename from ddtrace/contrib/snowflake/__init__.py rename to ddtrace/contrib/_snowflake.py index 3bf4e42d5a5..ea582b9208f 100644 --- a/ddtrace/contrib/snowflake/__init__.py +++ b/ddtrace/contrib/_snowflake.py @@ -64,17 +64,3 @@ cursor = conn.cursor() cursor.execute("SELECT current_version()") """ - - -# Required to allow users to import from `ddtrace.contrib.snowflake.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.snowflake.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.snowflake.patch import patch # noqa: F401 -from ddtrace.contrib.internal.snowflake.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/sqlite3/__init__.py b/ddtrace/contrib/_sqlite3.py similarity index 77% rename from ddtrace/contrib/sqlite3/__init__.py rename to ddtrace/contrib/_sqlite3.py index 3be49e96642..351d639b182 100644 --- a/ddtrace/contrib/sqlite3/__init__.py +++ b/ddtrace/contrib/_sqlite3.py @@ -53,16 +53,3 @@ cursor = db.cursor() cursor.execute("select * from users where id = 1") """ - - -# Required to allow users to import from `ddtrace.contrib.sqlite3.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.sqlite3.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.sqlite3.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/starlette/__init__.py b/ddtrace/contrib/_starlette.py similarity index 75% rename from ddtrace/contrib/starlette/__init__.py rename to ddtrace/contrib/_starlette.py index 2fe121ef976..a99997698e7 100644 --- a/ddtrace/contrib/starlette/__init__.py +++ b/ddtrace/contrib/_starlette.py @@ -57,17 +57,3 @@ config.starlette['request_span_name'] = 'custom-request-span-name' """ - - -# Required to allow users to import from `ddtrace.contrib.starlette.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.starlette.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.starlette.patch import patch # noqa: F401 -from ddtrace.contrib.internal.starlette.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/structlog/__init__.py b/ddtrace/contrib/_structlog.py similarity index 74% rename from ddtrace/contrib/structlog/__init__.py rename to ddtrace/contrib/_structlog.py index 77770bb3da5..362052eae3f 100644 --- a/ddtrace/contrib/structlog/__init__.py +++ b/ddtrace/contrib/_structlog.py @@ -37,17 +37,3 @@ For more information, please see the attached guide for the Datadog Logging Product: https://docs.datadoghq.com/logs/log_collection/python/ """ - - -# Required to allow users to import from `ddtrace.contrib.structlog.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.structlog.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.structlog.patch import patch # noqa: F401 -from ddtrace.contrib.internal.structlog.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/subprocess/__init__.py b/ddtrace/contrib/_subprocess.py similarity index 58% rename from ddtrace/contrib/subprocess/__init__.py rename to ddtrace/contrib/_subprocess.py index 8e95b25b646..b73c72167bf 100644 --- a/ddtrace/contrib/subprocess/__init__.py +++ b/ddtrace/contrib/_subprocess.py @@ -18,17 +18,3 @@ enabled in this integration that you can check on ```ddtrace.contrib.subprocess.constants.SENSITIVE_WORDS_WILDCARDS```. """ - - -# Required to allow users to import from `ddtrace.contrib.subprocess.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.subprocess.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.subprocess.patch import patch # noqa: F401 -from ddtrace.contrib.internal.subprocess.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/unittest/__init__.py b/ddtrace/contrib/_unittest.py similarity index 83% rename from ddtrace/contrib/unittest/__init__.py rename to ddtrace/contrib/_unittest.py index 173d22cac50..67afb7d5166 100644 --- a/ddtrace/contrib/unittest/__init__.py +++ b/ddtrace/contrib/_unittest.py @@ -34,6 +34,3 @@ Default: ``True`` """ -from ..internal.unittest.patch import get_version # noqa: F401 -from ..internal.unittest.patch import patch # noqa: F401 -from ..internal.unittest.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/_urllib.py b/ddtrace/contrib/_urllib.py new file mode 100644 index 00000000000..76fd2662d80 --- /dev/null +++ b/ddtrace/contrib/_urllib.py @@ -0,0 +1,6 @@ +""" +Trace the standard library ``urllib.request`` library to trace +HTTP requests and detect SSRF vulnerabilities. It is enabled by default +if ``DD_IAST_ENABLED`` is set to ``True`` (for detecting sink points) and/or +``DD_ASM_ENABLED`` is set to ``True`` (for exploit prevention). +""" diff --git a/ddtrace/contrib/urllib3/__init__.py b/ddtrace/contrib/_urllib3.py similarity index 73% rename from ddtrace/contrib/urllib3/__init__.py rename to ddtrace/contrib/_urllib3.py index e0cec320abd..6813ccde8ce 100644 --- a/ddtrace/contrib/urllib3/__init__.py +++ b/ddtrace/contrib/_urllib3.py @@ -50,17 +50,3 @@ Default: ``False`` """ - - -# Required to allow users to import from `ddtrace.contrib.urllib3.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.urllib3.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.urllib3.patch import patch # noqa: F401 -from ddtrace.contrib.internal.urllib3.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/vertexai/__init__.py b/ddtrace/contrib/_vertexai.py similarity index 92% rename from ddtrace/contrib/vertexai/__init__.py rename to ddtrace/contrib/_vertexai.py index 5a372a9bd52..25e5fdc081b 100644 --- a/ddtrace/contrib/vertexai/__init__.py +++ b/ddtrace/contrib/_vertexai.py @@ -82,8 +82,3 @@ Pin.override(vertexai, service="my-vertexai-service") """ # noqa: E501 - - -from ddtrace.contrib.internal.vertexai.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.vertexai.patch import patch # noqa: F401 -from ddtrace.contrib.internal.vertexai.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/vertica/__init__.py b/ddtrace/contrib/_vertica.py similarity index 69% rename from ddtrace/contrib/vertica/__init__.py rename to ddtrace/contrib/_vertica.py index 2bcc2c3d987..df997f5946b 100644 --- a/ddtrace/contrib/vertica/__init__.py +++ b/ddtrace/contrib/_vertica.py @@ -38,17 +38,3 @@ # override the service Pin.override(conn, service='myverticaservice') """ - - -# Required to allow users to import from `ddtrace.contrib.vertica.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.vertica.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.vertica.patch import patch # noqa: F401 -from ddtrace.contrib.internal.vertica.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/_webbrowser.py b/ddtrace/contrib/_webbrowser.py new file mode 100644 index 00000000000..107d0bd7179 --- /dev/null +++ b/ddtrace/contrib/_webbrowser.py @@ -0,0 +1,6 @@ +""" +Trace the standard library ``webbrowser`` library to trace +HTTP requests and detect SSRF vulnerabilities. It is enabled by default +if ``DD_IAST_ENABLED`` is set to ``True`` (for detecting sink points) and/or +``DD_ASM_ENABLED`` is set to ``True`` (for exploit prevention). +""" diff --git a/ddtrace/contrib/yaaredis/__init__.py b/ddtrace/contrib/_yaaredis.py similarity index 81% rename from ddtrace/contrib/yaaredis/__init__.py rename to ddtrace/contrib/_yaaredis.py index 66aa7cc5e6e..65917b03c29 100644 --- a/ddtrace/contrib/yaaredis/__init__.py +++ b/ddtrace/contrib/_yaaredis.py @@ -65,16 +65,3 @@ async def example(): await client.get("my-key") """ - - -# Required to allow users to import from `ddtrace.contrib.yaaredis.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.yaaredis.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.yaaredis.patch import patch # noqa: F401 diff --git a/ddtrace/contrib/aiobotocore/patch.py b/ddtrace/contrib/aiobotocore/patch.py deleted file mode 100644 index 720b5b837de..00000000000 --- a/ddtrace/contrib/aiobotocore/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.aiobotocore.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/aiohttp/__init__.py b/ddtrace/contrib/aiohttp.py similarity index 73% rename from ddtrace/contrib/aiohttp/__init__.py rename to ddtrace/contrib/aiohttp.py index 3fdaca2fad5..d001139dde8 100644 --- a/ddtrace/contrib/aiohttp/__init__.py +++ b/ddtrace/contrib/aiohttp.py @@ -54,7 +54,7 @@ the provided ``trace_app`` function must be used:: from aiohttp import web - from ddtrace import tracer, patch + from ddtrace.trace import tracer, patch from ddtrace.contrib.aiohttp import trace_app # create your application @@ -91,35 +91,7 @@ async def home_handler(request): :ref:`All HTTP tags ` are supported for this integration. """ - - -# Required to allow users to import from `ddtrace.contrib.aiohttp.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 from ddtrace.contrib.internal.aiohttp.middlewares import trace_app -from ddtrace.contrib.internal.aiohttp.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.aiohttp.patch import patch # noqa: F401 -from ddtrace.contrib.internal.aiohttp.patch import unpatch # noqa: F401 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - if name in ("patch", "get_version", "unpatch"): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - message="Use ``import ddtrace.auto`` or the ``ddtrace-run`` command to configure this integration.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) __all__ = ["trace_app"] diff --git a/ddtrace/contrib/aiohttp/middlewares.py b/ddtrace/contrib/aiohttp/middlewares.py deleted file mode 100644 index 0a9dfcc746a..00000000000 --- a/ddtrace/contrib/aiohttp/middlewares.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.aiohttp.middlewares import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/aiohttp/patch.py b/ddtrace/contrib/aiohttp/patch.py deleted file mode 100644 index 39550fbea4a..00000000000 --- a/ddtrace/contrib/aiohttp/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.aiohttp.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/aiohttp_jinja2/__init__.py b/ddtrace/contrib/aiohttp_jinja2/__init__.py deleted file mode 100644 index 90833b19484..00000000000 --- a/ddtrace/contrib/aiohttp_jinja2/__init__.py +++ /dev/null @@ -1,28 +0,0 @@ -""" -The ``aiohttp_jinja2`` integration adds tracing of template rendering. - - -Enabling -~~~~~~~~ - -The integration is enabled automatically when using -:ref:`ddtrace-run` or :ref:`import ddtrace.auto`. - -Or use :func:`patch()` to manually enable the integration:: - - from ddtrace import patch - patch(aiohttp_jinja2=True) -""" - - -# Required to allow users to import from `ddtrace.contrib.aiohttp.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - -from ddtrace.contrib.internal.aiohttp_jinja2.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.aiohttp_jinja2.patch import patch # noqa: F401 -from ddtrace.contrib.internal.aiohttp_jinja2.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/aiohttp_jinja2/patch.py b/ddtrace/contrib/aiohttp_jinja2/patch.py deleted file mode 100644 index a70a181f778..00000000000 --- a/ddtrace/contrib/aiohttp_jinja2/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.aiohttp_jinja2.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/aiomysql/patch.py b/ddtrace/contrib/aiomysql/patch.py deleted file mode 100644 index e6c44c89591..00000000000 --- a/ddtrace/contrib/aiomysql/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.aiomysql.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/aiopg/connection.py b/ddtrace/contrib/aiopg/connection.py deleted file mode 100644 index f6dac65ab66..00000000000 --- a/ddtrace/contrib/aiopg/connection.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.aiopg.connection import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/aiopg/patch.py b/ddtrace/contrib/aiopg/patch.py deleted file mode 100644 index 2f5be810c1b..00000000000 --- a/ddtrace/contrib/aiopg/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.aiopg.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/aioredis/patch.py b/ddtrace/contrib/aioredis/patch.py deleted file mode 100644 index 7cc8e527a28..00000000000 --- a/ddtrace/contrib/aioredis/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.aioredis.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/algoliasearch/patch.py b/ddtrace/contrib/algoliasearch/patch.py deleted file mode 100644 index 03f6abd7174..00000000000 --- a/ddtrace/contrib/algoliasearch/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.algoliasearch.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/anthropic/_streaming.py b/ddtrace/contrib/anthropic/_streaming.py deleted file mode 100644 index 80b695cefb3..00000000000 --- a/ddtrace/contrib/anthropic/_streaming.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.anthropic._streaming import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/anthropic/patch.py b/ddtrace/contrib/anthropic/patch.py deleted file mode 100644 index c672f12f6a0..00000000000 --- a/ddtrace/contrib/anthropic/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.anthropic.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/anthropic/utils.py b/ddtrace/contrib/anthropic/utils.py deleted file mode 100644 index a4c68c038f1..00000000000 --- a/ddtrace/contrib/anthropic/utils.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.anthropic.utils import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/aredis/patch.py b/ddtrace/contrib/aredis/patch.py deleted file mode 100644 index 87bb5f21386..00000000000 --- a/ddtrace/contrib/aredis/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.aredis.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/asgi/__init__.py b/ddtrace/contrib/asgi.py similarity index 70% rename from ddtrace/contrib/asgi/__init__.py rename to ddtrace/contrib/asgi.py index 36c67f1f4d0..6635e0f1b18 100644 --- a/ddtrace/contrib/asgi/__init__.py +++ b/ddtrace/contrib/asgi.py @@ -57,24 +57,7 @@ def handle_request(scope, send): from ddtrace.contrib.internal.asgi.middleware import TraceMiddleware -from ddtrace.contrib.internal.asgi.middleware import get_version # noqa: F401 from ddtrace.contrib.internal.asgi.middleware import span_from_scope -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - if name in ("get_version",): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - message="Use ``import ddtrace.auto`` or the ``ddtrace-run`` command to configure this integration.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) __all__ = ["TraceMiddleware", "span_from_scope"] diff --git a/ddtrace/contrib/asgi/middleware.py b/ddtrace/contrib/asgi/middleware.py deleted file mode 100644 index 33ef2c6a363..00000000000 --- a/ddtrace/contrib/asgi/middleware.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.asgi.middleware import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/asgi/utils.py b/ddtrace/contrib/asgi/utils.py deleted file mode 100644 index 26853a14c93..00000000000 --- a/ddtrace/contrib/asgi/utils.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.asgi.utils import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/asyncio/__init__.py b/ddtrace/contrib/asyncio/__init__.py deleted file mode 100644 index a52166389c7..00000000000 --- a/ddtrace/contrib/asyncio/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -""" -This integration provides context management for tracing the execution flow -of concurrent execution of ``asyncio.Task``. -""" -# Required to allow users to import from `ddtrace.contrib.asyncio.patch` directly - -import warnings as _w # noqa:E402 - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 -from ddtrace._trace.provider import DefaultContextProvider -from ddtrace.contrib.internal.asyncio.helpers import ensure_future # noqa: F401 -from ddtrace.contrib.internal.asyncio.helpers import run_in_executor # noqa: F401 -from ddtrace.contrib.internal.asyncio.helpers import set_call_context # noqa: F401 -from ddtrace.contrib.internal.asyncio.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.asyncio.patch import patch # noqa: F401 -from ddtrace.contrib.internal.asyncio.patch import unpatch # noqa: F401 - - -context_provider = DefaultContextProvider() diff --git a/ddtrace/contrib/asyncio/compat.py b/ddtrace/contrib/asyncio/compat.py deleted file mode 100644 index 90c38a995fa..00000000000 --- a/ddtrace/contrib/asyncio/compat.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.asyncio.compat import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/asyncio/helpers.py b/ddtrace/contrib/asyncio/helpers.py deleted file mode 100644 index c6c4396fe63..00000000000 --- a/ddtrace/contrib/asyncio/helpers.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.asyncio.helpers import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/asyncio/patch.py b/ddtrace/contrib/asyncio/patch.py deleted file mode 100644 index 25fef661cf3..00000000000 --- a/ddtrace/contrib/asyncio/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.asyncio.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/asyncio/provider.py b/ddtrace/contrib/asyncio/provider.py deleted file mode 100644 index b6dcf71a553..00000000000 --- a/ddtrace/contrib/asyncio/provider.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.asyncio.provider import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/asyncio/wrappers.py b/ddtrace/contrib/asyncio/wrappers.py deleted file mode 100644 index d61be8a4fbb..00000000000 --- a/ddtrace/contrib/asyncio/wrappers.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.asyncio.wrappers import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/asyncpg/patch.py b/ddtrace/contrib/asyncpg/patch.py deleted file mode 100644 index 4044b5168cc..00000000000 --- a/ddtrace/contrib/asyncpg/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.asyncpg.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/aws_lambda/_cold_start.py b/ddtrace/contrib/aws_lambda/_cold_start.py deleted file mode 100644 index 5a96e2cc861..00000000000 --- a/ddtrace/contrib/aws_lambda/_cold_start.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.aws_lambda._cold_start import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/aws_lambda/patch.py b/ddtrace/contrib/aws_lambda/patch.py deleted file mode 100644 index be2e9fb97a7..00000000000 --- a/ddtrace/contrib/aws_lambda/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.aws_lambda.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/azure_functions/__init__.py b/ddtrace/contrib/azure_functions/__init__.py deleted file mode 100644 index 9fb5a7a27b4..00000000000 --- a/ddtrace/contrib/azure_functions/__init__.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -The azure_functions integration traces all http requests to your Azure Function app. - -Enabling -~~~~~~~~ - -Use :func:`patch()` to manually enable the integration:: - - from ddtrace import patch - patch(azure_functions=True) - - -Global Configuration -~~~~~~~~~~~~~~~~~~~~ - -.. py:data:: ddtrace.config.azure_functions["service"] - - The service name reported by default for azure_functions instances. - - This option can also be set with the ``DD_SERVICE`` environment - variable. - - Default: ``"azure_functions"`` - -""" -from ddtrace.internal.utils.importlib import require_modules - - -required_modules = ["azure.functions"] - -with require_modules(required_modules) as missing_modules: - if not missing_modules: - # Required to allow users to import from `ddtrace.contrib.azure_functions.patch` directly - import warnings as _w - - with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - from ddtrace.contrib.internal.azure_functions.patch import get_version # noqa: F401 - from ddtrace.contrib.internal.azure_functions.patch import patch # noqa: F401 - from ddtrace.contrib.internal.azure_functions.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/azure_functions/patch.py b/ddtrace/contrib/azure_functions/patch.py deleted file mode 100644 index 1a23613972d..00000000000 --- a/ddtrace/contrib/azure_functions/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.azure_functions.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/boto/patch.py b/ddtrace/contrib/boto/patch.py deleted file mode 100644 index b82fbc2beb1..00000000000 --- a/ddtrace/contrib/boto/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.boto.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/botocore/patch.py b/ddtrace/contrib/botocore/patch.py deleted file mode 100644 index b514ebe22fa..00000000000 --- a/ddtrace/contrib/botocore/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.botocore.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/botocore/services/__init__.py b/ddtrace/contrib/botocore/services/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/ddtrace/contrib/botocore/services/bedrock.py b/ddtrace/contrib/botocore/services/bedrock.py deleted file mode 100644 index 54f01451bd0..00000000000 --- a/ddtrace/contrib/botocore/services/bedrock.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.botocore.services.bedrock import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/botocore/services/kinesis.py b/ddtrace/contrib/botocore/services/kinesis.py deleted file mode 100644 index 71e574042b7..00000000000 --- a/ddtrace/contrib/botocore/services/kinesis.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.botocore.services.kinesis import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/botocore/services/sqs.py b/ddtrace/contrib/botocore/services/sqs.py deleted file mode 100644 index 0cc9e2b3f63..00000000000 --- a/ddtrace/contrib/botocore/services/sqs.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.botocore.services.sqs import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/botocore/services/stepfunctions.py b/ddtrace/contrib/botocore/services/stepfunctions.py deleted file mode 100644 index bb7b3e65e3f..00000000000 --- a/ddtrace/contrib/botocore/services/stepfunctions.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.botocore.services.stepfunctions import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/botocore/utils.py b/ddtrace/contrib/botocore/utils.py deleted file mode 100644 index 916ba6e733a..00000000000 --- a/ddtrace/contrib/botocore/utils.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.botocore.utils import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/bottle.py b/ddtrace/contrib/bottle.py new file mode 100644 index 00000000000..84f7c3a7d7d --- /dev/null +++ b/ddtrace/contrib/bottle.py @@ -0,0 +1,38 @@ +""" +The bottle integration traces the Bottle web framework. Add the following +plugin to your app:: + + import bottle + from ddtrace import tracer + from ddtrace.contrib.bottle import TracePlugin + + app = bottle.Bottle() + plugin = TracePlugin(service="my-web-app") + app.install(plugin) + +:ref:`All HTTP tags ` are supported for this integration. + +Configuration +~~~~~~~~~~~~~ + +.. py:data:: ddtrace.config.bottle['distributed_tracing'] + + Whether to parse distributed tracing headers from requests received by your bottle app. + + Can also be enabled with the ``DD_BOTTLE_DISTRIBUTED_TRACING`` environment variable. + + Default: ``True`` + + +Example:: + + from ddtrace import config + + # Enable distributed tracing + config.bottle['distributed_tracing'] = True + +""" +from ddtrace.contrib.internal.bottle.trace import TracePlugin + + +__all__ = ["TracePlugin"] diff --git a/ddtrace/contrib/bottle/__init__.py b/ddtrace/contrib/bottle/__init__.py deleted file mode 100644 index 12d046d8128..00000000000 --- a/ddtrace/contrib/bottle/__init__.py +++ /dev/null @@ -1,66 +0,0 @@ -""" -The bottle integration traces the Bottle web framework. Add the following -plugin to your app:: - - import bottle - from ddtrace import tracer - from ddtrace.contrib.bottle import TracePlugin - - app = bottle.Bottle() - plugin = TracePlugin(service="my-web-app") - app.install(plugin) - -:ref:`All HTTP tags ` are supported for this integration. - -Configuration -~~~~~~~~~~~~~ - -.. py:data:: ddtrace.config.bottle['distributed_tracing'] - - Whether to parse distributed tracing headers from requests received by your bottle app. - - Can also be enabled with the ``DD_BOTTLE_DISTRIBUTED_TRACING`` environment variable. - - Default: ``True`` - - -Example:: - - from ddtrace import config - - # Enable distributed tracing - config.bottle['distributed_tracing'] = True - -""" - - -# Required to allow users to import from `ddtrace.contrib.bottle.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - -from ddtrace.contrib.internal.bottle.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.bottle.patch import patch # noqa: F401 -from ddtrace.contrib.internal.bottle.trace import TracePlugin -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - if name in ("get_version", "patch"): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - message="Use ``import ddtrace.auto`` or the ``ddtrace-run`` command to configure this integration.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) - - -__all__ = ["TracePlugin"] diff --git a/ddtrace/contrib/bottle/patch.py b/ddtrace/contrib/bottle/patch.py deleted file mode 100644 index 7c12c12e7f8..00000000000 --- a/ddtrace/contrib/bottle/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.bottle.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/bottle/trace.py b/ddtrace/contrib/bottle/trace.py deleted file mode 100644 index 3602e3d6a9a..00000000000 --- a/ddtrace/contrib/bottle/trace.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.bottle.trace import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/cassandra/patch.py b/ddtrace/contrib/cassandra/patch.py deleted file mode 100644 index afcce0abf2e..00000000000 --- a/ddtrace/contrib/cassandra/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.cassandra.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/cassandra/session.py b/ddtrace/contrib/cassandra/session.py deleted file mode 100644 index 52721dbf7c2..00000000000 --- a/ddtrace/contrib/cassandra/session.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.cassandra.session import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/celery/__init__.py b/ddtrace/contrib/celery.py similarity index 62% rename from ddtrace/contrib/celery/__init__.py rename to ddtrace/contrib/celery.py index 514d0100388..f727e53c0e3 100644 --- a/ddtrace/contrib/celery/__init__.py +++ b/ddtrace/contrib/celery.py @@ -51,38 +51,8 @@ def run(self): Default: ``'celery-worker'`` """ - - -# Required to allow users to import from `ddtrace.contrib.celery.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - from ddtrace.contrib.internal.celery.app import patch_app from ddtrace.contrib.internal.celery.app import unpatch_app -from ddtrace.contrib.internal.celery.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.celery.patch import patch # noqa: F401 -from ddtrace.contrib.internal.celery.patch import unpatch # noqa: F401 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - if name in ("patch", "unpatch", "get_version"): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - message="Use ``import ddtrace.auto`` or the ``ddtrace-run`` command to configure this integration.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) __all__ = ["patch_app", "unpatch_app"] diff --git a/ddtrace/contrib/celery/app.py b/ddtrace/contrib/celery/app.py deleted file mode 100644 index 968580efc2f..00000000000 --- a/ddtrace/contrib/celery/app.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.celery.app import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/celery/constants.py b/ddtrace/contrib/celery/constants.py deleted file mode 100644 index c344daf4150..00000000000 --- a/ddtrace/contrib/celery/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.celery.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/celery/patch.py b/ddtrace/contrib/celery/patch.py deleted file mode 100644 index 2f0b9f8fa89..00000000000 --- a/ddtrace/contrib/celery/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.celery.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/celery/signals.py b/ddtrace/contrib/celery/signals.py deleted file mode 100644 index 8a7aa2ecec0..00000000000 --- a/ddtrace/contrib/celery/signals.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.celery.signals import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/celery/utils.py b/ddtrace/contrib/celery/utils.py deleted file mode 100644 index cd642ce01da..00000000000 --- a/ddtrace/contrib/celery/utils.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.celery.utils import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/cherrypy/__init__.py b/ddtrace/contrib/cherrypy.py similarity index 61% rename from ddtrace/contrib/cherrypy/__init__.py rename to ddtrace/contrib/cherrypy.py index b8fbd426e00..b217d16b440 100644 --- a/ddtrace/contrib/cherrypy/__init__.py +++ b/ddtrace/contrib/cherrypy.py @@ -7,7 +7,7 @@ ~~~~~ To install the middleware, add:: - from ddtrace import tracer + from ddtrace.trace import tracer from ddtrace.contrib.cherrypy import TraceMiddleware and create a `TraceMiddleware` object:: @@ -40,7 +40,7 @@ import cherrypy - from ddtrace import tracer, Pin + from ddtrace.trace import tracer, Pin from ddtrace.contrib.cherrypy import TraceMiddleware TraceMiddleware(cherrypy, tracer, service="my-cherrypy-app") @@ -52,26 +52,7 @@ def index(self): cherrypy.quickstart(HelloWorld()) """ - - -from ddtrace.contrib.internal.cherrypy.middleware import TraceMiddleware -from ddtrace.contrib.internal.cherrypy.middleware import get_version # noqa: F401 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - if name in ("get_version",): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - message="Use ``import ddtrace.auto`` or the ``ddtrace-run`` command to configure this integration.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) +from ddtrace.contrib.internal.cherrypy.patch import TraceMiddleware __all__ = ["TraceMiddleware"] diff --git a/ddtrace/contrib/cherrypy/middleware.py b/ddtrace/contrib/cherrypy/middleware.py deleted file mode 100644 index 25101947c50..00000000000 --- a/ddtrace/contrib/cherrypy/middleware.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.cherrypy.middleware import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/consul/patch.py b/ddtrace/contrib/consul/patch.py deleted file mode 100644 index 1936124c21e..00000000000 --- a/ddtrace/contrib/consul/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.consul.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/coverage/__init__.py b/ddtrace/contrib/coverage/__init__.py deleted file mode 100644 index 9932f73acfe..00000000000 --- a/ddtrace/contrib/coverage/__init__.py +++ /dev/null @@ -1,33 +0,0 @@ -""" -The Coverage.py integration traces test code coverage when using `pytest` or `unittest`. - - -Enabling -~~~~~~~~ - -The Coverage.py integration is enabled automatically when using -:ref:`ddtrace-run` or :ref:`import ddtrace.auto`. - -Alternately, use :func:`patch()` to manually enable the integration:: - - from ddtrace import patch - patch(coverage=True) - -Note: Coverage.py instrumentation is only enabled if `pytest` or `unittest` instrumentation is enabled. -""" -# Required to allow users to import from `ddtrace.contrib.internal.coverage.patch` directly -import warnings as _w # noqa:E402 - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.coverage.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.coverage.patch import patch # noqa: F401 -from ddtrace.contrib.internal.coverage.patch import unpatch # noqa: F401 -from ddtrace.internal.logger import get_logger - - -log = get_logger(__name__) diff --git a/ddtrace/contrib/coverage/constants.py b/ddtrace/contrib/coverage/constants.py deleted file mode 100644 index 0ab516c8dad..00000000000 --- a/ddtrace/contrib/coverage/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.coverage.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/coverage/data.py b/ddtrace/contrib/coverage/data.py deleted file mode 100644 index 13ed64a3d4b..00000000000 --- a/ddtrace/contrib/coverage/data.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.coverage.data import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/coverage/patch.py b/ddtrace/contrib/coverage/patch.py deleted file mode 100644 index a1e35a16412..00000000000 --- a/ddtrace/contrib/coverage/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.coverage.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/coverage/utils.py b/ddtrace/contrib/coverage/utils.py deleted file mode 100644 index edfa8b1772e..00000000000 --- a/ddtrace/contrib/coverage/utils.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.coverage.utils import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/dbapi/__init__.py b/ddtrace/contrib/dbapi.py similarity index 96% rename from ddtrace/contrib/dbapi/__init__.py rename to ddtrace/contrib/dbapi.py index fa733c19a63..d9a46da5033 100644 --- a/ddtrace/contrib/dbapi/__init__.py +++ b/ddtrace/contrib/dbapi.py @@ -4,25 +4,24 @@ import wrapt from ddtrace import config -from ddtrace.appsec._iast._utils import _is_iast_enabled +from ddtrace.appsec._constants import IAST_SPAN_TAGS from ddtrace.internal import core from ddtrace.internal.constants import COMPONENT from ddtrace.internal.logger import get_logger from ddtrace.internal.utils import ArgumentError from ddtrace.internal.utils import get_argument_value +from ddtrace.settings.asm import config as asm_config -from ...appsec._constants import IAST_SPAN_TAGS -from ...appsec._iast._metrics import increment_iast_span_metric -from ...constants import _ANALYTICS_SAMPLE_RATE_KEY -from ...constants import _SPAN_MEASURED_KEY -from ...constants import SPAN_KIND -from ...ext import SpanKind -from ...ext import SpanTypes -from ...ext import db -from ...ext import sql -from ...trace import Pin -from ..internal.trace_utils import ext_service -from ..internal.trace_utils import iswrapped +from ..constants import _ANALYTICS_SAMPLE_RATE_KEY +from ..constants import _SPAN_MEASURED_KEY +from ..constants import SPAN_KIND +from ..ext import SpanKind +from ..ext import SpanTypes +from ..ext import db +from ..ext import sql +from ..trace import Pin +from .internal.trace_utils import ext_service +from .internal.trace_utils import iswrapped log = get_logger(__name__) @@ -103,9 +102,10 @@ def _trace_method(self, method, name, resource, extra_tags, dbm_propagator, *arg # set span.kind to the type of request being performed s.set_tag_str(SPAN_KIND, SpanKind.CLIENT) - if _is_iast_enabled(): + if asm_config._iast_enabled: try: from ddtrace.appsec._iast._metrics import _set_metric_iast_executed_sink + from ddtrace.appsec._iast._metrics import increment_iast_span_metric from ddtrace.appsec._iast._taint_utils import check_tainted_dbapi_args from ddtrace.appsec._iast.taint_sinks.sql_injection import SqlInjection diff --git a/ddtrace/contrib/dbapi_async/__init__.py b/ddtrace/contrib/dbapi_async.py similarity index 94% rename from ddtrace/contrib/dbapi_async/__init__.py rename to ddtrace/contrib/dbapi_async.py index a6ae676f4bd..ae84972aaf6 100644 --- a/ddtrace/contrib/dbapi_async/__init__.py +++ b/ddtrace/contrib/dbapi_async.py @@ -1,23 +1,22 @@ from ddtrace import config -from ddtrace.appsec._iast._utils import _is_iast_enabled +from ddtrace.appsec._constants import IAST_SPAN_TAGS from ddtrace.internal import core from ddtrace.internal.constants import COMPONENT from ddtrace.internal.logger import get_logger from ddtrace.internal.utils import ArgumentError from ddtrace.internal.utils import get_argument_value +from ddtrace.settings.asm import config as asm_config -from ...appsec._constants import IAST_SPAN_TAGS -from ...appsec._iast._metrics import increment_iast_span_metric -from ...constants import _ANALYTICS_SAMPLE_RATE_KEY -from ...constants import _SPAN_MEASURED_KEY -from ...constants import SPAN_KIND -from ...ext import SpanKind -from ...ext import SpanTypes -from ...trace import Pin -from ..dbapi import TracedConnection -from ..dbapi import TracedCursor -from ..internal.trace_utils import ext_service -from ..internal.trace_utils import iswrapped +from ..constants import _ANALYTICS_SAMPLE_RATE_KEY +from ..constants import _SPAN_MEASURED_KEY +from ..constants import SPAN_KIND +from ..ext import SpanKind +from ..ext import SpanTypes +from ..trace import Pin +from .dbapi import TracedConnection +from .dbapi import TracedCursor +from .internal.trace_utils import ext_service +from .internal.trace_utils import iswrapped log = get_logger(__name__) @@ -78,8 +77,9 @@ async def _trace_method(self, method, name, resource, extra_tags, dbm_propagator # set span.kind to the type of request being performed s.set_tag_str(SPAN_KIND, SpanKind.CLIENT) - if _is_iast_enabled(): + if asm_config._iast_enabled: from ddtrace.appsec._iast._metrics import _set_metric_iast_executed_sink + from ddtrace.appsec._iast._metrics import increment_iast_span_metric from ddtrace.appsec._iast._taint_utils import check_tainted_dbapi_args from ddtrace.appsec._iast.taint_sinks.sql_injection import SqlInjection diff --git a/ddtrace/contrib/django/_asgi.py b/ddtrace/contrib/django/_asgi.py deleted file mode 100644 index 74a6e1e0f2b..00000000000 --- a/ddtrace/contrib/django/_asgi.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.django._asgi import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/django/compat.py b/ddtrace/contrib/django/compat.py deleted file mode 100644 index f5d00fe18a9..00000000000 --- a/ddtrace/contrib/django/compat.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.django.compat import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/django/patch.py b/ddtrace/contrib/django/patch.py deleted file mode 100644 index 06013f436f2..00000000000 --- a/ddtrace/contrib/django/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.django.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/django/restframework.py b/ddtrace/contrib/django/restframework.py deleted file mode 100644 index bd6cdc68031..00000000000 --- a/ddtrace/contrib/django/restframework.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.django.restframework import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/django/utils.py b/ddtrace/contrib/django/utils.py deleted file mode 100644 index e95da9ccc65..00000000000 --- a/ddtrace/contrib/django/utils.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.django.utils import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/dogpile_cache/lock.py b/ddtrace/contrib/dogpile_cache/lock.py deleted file mode 100644 index cff1db81eae..00000000000 --- a/ddtrace/contrib/dogpile_cache/lock.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.dogpile_cache.lock import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/dogpile_cache/patch.py b/ddtrace/contrib/dogpile_cache/patch.py deleted file mode 100644 index f2c26af5c7e..00000000000 --- a/ddtrace/contrib/dogpile_cache/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.dogpile_cache.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/dogpile_cache/region.py b/ddtrace/contrib/dogpile_cache/region.py deleted file mode 100644 index ef24b094065..00000000000 --- a/ddtrace/contrib/dogpile_cache/region.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.dogpile_cache.region import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/dramatiq/patch.py b/ddtrace/contrib/dramatiq/patch.py deleted file mode 100644 index e2ba0a37bf5..00000000000 --- a/ddtrace/contrib/dramatiq/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.dramatiq.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/elasticsearch/patch.py b/ddtrace/contrib/elasticsearch/patch.py deleted file mode 100644 index 71239650944..00000000000 --- a/ddtrace/contrib/elasticsearch/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.elasticsearch.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/elasticsearch/quantize.py b/ddtrace/contrib/elasticsearch/quantize.py deleted file mode 100644 index f2011326f02..00000000000 --- a/ddtrace/contrib/elasticsearch/quantize.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.elasticsearch.quantize import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/falcon/__init__.py b/ddtrace/contrib/falcon.py similarity index 53% rename from ddtrace/contrib/falcon/__init__.py rename to ddtrace/contrib/falcon.py index a521689273b..a80d298d09b 100644 --- a/ddtrace/contrib/falcon/__init__.py +++ b/ddtrace/contrib/falcon.py @@ -2,7 +2,7 @@ To trace the falcon web framework, install the trace middleware:: import falcon - from ddtrace import tracer + from ddtrace.trace import tracer from ddtrace.contrib.falcon import TraceMiddleware mw = TraceMiddleware(tracer, 'my-falcon-app') @@ -11,7 +11,7 @@ You can also use the autopatching functionality:: import falcon - from ddtrace import tracer, patch + from ddtrace.trace import tracer, patch patch(falcon=True) @@ -44,34 +44,7 @@ def on_falcon_request(span, request, response): :ref:`Headers tracing ` is supported for this integration. """ - - -# Required to allow users to import from `ddtrace.contrib.falcon.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 from ddtrace.contrib.internal.falcon.middleware import TraceMiddleware -from ddtrace.contrib.internal.falcon.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.falcon.patch import patch # noqa: F401 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - if name in ("patch", "get_version"): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - message="Use ``import ddtrace.auto`` or the ``ddtrace-run`` command to configure this integration.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) __all__ = ["TraceMiddleware"] diff --git a/ddtrace/contrib/falcon/middleware.py b/ddtrace/contrib/falcon/middleware.py deleted file mode 100644 index 4650449cc89..00000000000 --- a/ddtrace/contrib/falcon/middleware.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.falcon.middleware import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/falcon/patch.py b/ddtrace/contrib/falcon/patch.py deleted file mode 100644 index 3b272cb9032..00000000000 --- a/ddtrace/contrib/falcon/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.falcon.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/fastapi/patch.py b/ddtrace/contrib/fastapi/patch.py deleted file mode 100644 index 5d8d072e147..00000000000 --- a/ddtrace/contrib/fastapi/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.fastapi.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/flask/patch.py b/ddtrace/contrib/flask/patch.py deleted file mode 100644 index 3b3c7e16639..00000000000 --- a/ddtrace/contrib/flask/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.flask.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/flask/wrappers.py b/ddtrace/contrib/flask/wrappers.py deleted file mode 100644 index dee0355abc4..00000000000 --- a/ddtrace/contrib/flask/wrappers.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.flask.wrappers import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/flask_cache/__init__.py b/ddtrace/contrib/flask_cache.py similarity index 56% rename from ddtrace/contrib/flask_cache/__init__.py rename to ddtrace/contrib/flask_cache.py index ae6fcf003db..35cae2fb164 100644 --- a/ddtrace/contrib/flask_cache/__init__.py +++ b/ddtrace/contrib/flask_cache.py @@ -5,9 +5,9 @@ The tracer supports both `Flask-Cache `_ and `Flask-Caching `_. -To install the tracer, ``from ddtrace import tracer`` needs to be added:: +To install the tracer, ``from ddtrace.trace import tracer`` needs to be added:: - from ddtrace import tracer + from ddtrace.trace import tracer from ddtrace.contrib.flask_cache import get_traced_cache and the tracer needs to be initialized:: @@ -18,7 +18,7 @@ from flask import Flask - from ddtrace import tracer + from ddtrace.trace import tracer from ddtrace.contrib.flask_cache import get_traced_cache app = Flask(__name__) @@ -35,7 +35,7 @@ def counter(): Use a specific ``Cache`` implementation with:: - from ddtrace import tracer + from ddtrace.trace import tracer from ddtrace.contrib.flask_cache import get_traced_cache from flask_caching import Cache @@ -43,26 +43,7 @@ def counter(): Cache = get_traced_cache(tracer, service='my-flask-cache-app', cache_cls=Cache) """ - - -from ddtrace.contrib.internal.flask_cache.tracers import get_traced_cache -from ddtrace.contrib.internal.flask_cache.tracers import get_version # noqa: F401 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - if name in ("get_version",): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - message="Use ``import ddtrace.auto`` or the ``ddtrace-run`` command to configure this integration.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) +from ddtrace.contrib.internal.flask_cache.patch import get_traced_cache __all__ = ["get_traced_cache"] diff --git a/ddtrace/contrib/flask_cache/tracers.py b/ddtrace/contrib/flask_cache/tracers.py deleted file mode 100644 index 06e2ce66f8b..00000000000 --- a/ddtrace/contrib/flask_cache/tracers.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.flask_cache.tracers import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/flask_cache/utils.py b/ddtrace/contrib/flask_cache/utils.py deleted file mode 100644 index 18aabdde802..00000000000 --- a/ddtrace/contrib/flask_cache/utils.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.flask_cache.utils import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/flask_login/__init__.py b/ddtrace/contrib/flask_login/__init__.py deleted file mode 100644 index 311eee7fa10..00000000000 --- a/ddtrace/contrib/flask_login/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -def get_version() -> str: - return "" - - -def patch(): - pass - - -def unpatch(): - pass diff --git a/ddtrace/contrib/futures/patch.py b/ddtrace/contrib/futures/patch.py deleted file mode 100644 index 3b8575d23df..00000000000 --- a/ddtrace/contrib/futures/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.futures.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/futures/threading.py b/ddtrace/contrib/futures/threading.py deleted file mode 100644 index d2e2f525869..00000000000 --- a/ddtrace/contrib/futures/threading.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.futures.threading import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/gevent/greenlet.py b/ddtrace/contrib/gevent/greenlet.py deleted file mode 100644 index 7eb6f357aff..00000000000 --- a/ddtrace/contrib/gevent/greenlet.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.gevent.greenlet import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/gevent/patch.py b/ddtrace/contrib/gevent/patch.py deleted file mode 100644 index 255f309a75e..00000000000 --- a/ddtrace/contrib/gevent/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.gevent.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/gevent/provider.py b/ddtrace/contrib/gevent/provider.py deleted file mode 100644 index f75fcf5ba5c..00000000000 --- a/ddtrace/contrib/gevent/provider.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.gevent.provider import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/graphql/patch.py b/ddtrace/contrib/graphql/patch.py deleted file mode 100644 index 642d5d5fbc1..00000000000 --- a/ddtrace/contrib/graphql/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.graphql.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/grpc/aio_client_interceptor.py b/ddtrace/contrib/grpc/aio_client_interceptor.py deleted file mode 100644 index 90e33ad393c..00000000000 --- a/ddtrace/contrib/grpc/aio_client_interceptor.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.grpc.aio_client_interceptor import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/grpc/aio_server_interceptor.py b/ddtrace/contrib/grpc/aio_server_interceptor.py deleted file mode 100644 index 16330f099e7..00000000000 --- a/ddtrace/contrib/grpc/aio_server_interceptor.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.grpc.aio_server_interceptor import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/grpc/client_interceptor.py b/ddtrace/contrib/grpc/client_interceptor.py deleted file mode 100644 index 43f2eb2a964..00000000000 --- a/ddtrace/contrib/grpc/client_interceptor.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.grpc.client_interceptor import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/grpc/constants.py b/ddtrace/contrib/grpc/constants.py deleted file mode 100644 index 05181842bb9..00000000000 --- a/ddtrace/contrib/grpc/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.grpc.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/grpc/patch.py b/ddtrace/contrib/grpc/patch.py deleted file mode 100644 index c903c7641c8..00000000000 --- a/ddtrace/contrib/grpc/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.grpc.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/grpc/server_interceptor.py b/ddtrace/contrib/grpc/server_interceptor.py deleted file mode 100644 index 2fb9882dcbd..00000000000 --- a/ddtrace/contrib/grpc/server_interceptor.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.grpc.server_interceptor import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/grpc/utils.py b/ddtrace/contrib/grpc/utils.py deleted file mode 100644 index 808d4219273..00000000000 --- a/ddtrace/contrib/grpc/utils.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.grpc.utils import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/httplib/patch.py b/ddtrace/contrib/httplib/patch.py deleted file mode 100644 index b74cc8965f5..00000000000 --- a/ddtrace/contrib/httplib/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.httplib.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/httpx/patch.py b/ddtrace/contrib/httpx/patch.py deleted file mode 100644 index 991317c8239..00000000000 --- a/ddtrace/contrib/httpx/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.httpx.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/internal/aiohttp/middlewares.py b/ddtrace/contrib/internal/aiohttp/middlewares.py index b019bd25013..11edbdd71e1 100644 --- a/ddtrace/contrib/internal/aiohttp/middlewares.py +++ b/ddtrace/contrib/internal/aiohttp/middlewares.py @@ -2,15 +2,9 @@ from aiohttp.web_urldispatcher import SystemRoute from ddtrace import config -from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY -from ddtrace.constants import _SPAN_MEASURED_KEY -from ddtrace.constants import SPAN_KIND -from ddtrace.contrib import trace_utils -from ddtrace.contrib.asyncio import context_provider -from ddtrace.ext import SpanKind from ddtrace.ext import SpanTypes from ddtrace.ext import http -from ddtrace.internal.constants import COMPONENT +from ddtrace.internal import core from ddtrace.internal.schema import schematize_url_operation from ddtrace.internal.schema.span_attribute_schema import SpanDirection @@ -35,48 +29,43 @@ async def attach_context(request): # application configs tracer = app[CONFIG_KEY]["tracer"] service = app[CONFIG_KEY]["service"] - distributed_tracing = app[CONFIG_KEY]["distributed_tracing_enabled"] - # Create a new context based on the propagated information. - trace_utils.activate_distributed_headers( - tracer, - int_config=config.aiohttp, - request_headers=request.headers, - override=distributed_tracing, - ) - - # trace the handler - request_span = tracer.trace( - schematize_url_operation("aiohttp.request", protocol="http", direction=SpanDirection.INBOUND), - service=service, - span_type=SpanTypes.WEB, - ) - request_span.set_tag(_SPAN_MEASURED_KEY) - - request_span.set_tag_str(COMPONENT, config.aiohttp.integration_name) - - # set span.kind tag equal to type of request - request_span.set_tag_str(SPAN_KIND, SpanKind.SERVER) - - # Configure trace search sample rate # DEV: aiohttp is special case maintains separate configuration from config api analytics_enabled = app[CONFIG_KEY]["analytics_enabled"] - if (config._analytics_enabled and analytics_enabled is not False) or analytics_enabled is True: - request_span.set_tag(_ANALYTICS_SAMPLE_RATE_KEY, app[CONFIG_KEY].get("analytics_sample_rate", True)) - - # attach the context and the root span to the request; the Context - # may be freely used by the application code - request[REQUEST_CONTEXT_KEY] = request_span.context - request[REQUEST_SPAN_KEY] = request_span - request[REQUEST_CONFIG_KEY] = app[CONFIG_KEY] - try: - response = await handler(request) - if not config.aiohttp["disable_stream_timing_for_mem_leak"]: - if isinstance(response, web.StreamResponse): - request.task.add_done_callback(lambda _: finish_request_span(request, response)) - return response - except Exception: - request_span.set_traceback() - raise + # Create a new context based on the propagated information. + + with core.context_with_data( + "aiohttp.request", + span_name=schematize_url_operation("aiohttp.request", protocol="http", direction=SpanDirection.INBOUND), + span_type=SpanTypes.WEB, + service=service, + tags={}, + tracer=tracer, + distributed_headers=request.headers, + distributed_headers_config=config.aiohttp, + distributed_headers_config_override=app[CONFIG_KEY]["distributed_tracing_enabled"], + headers_case_sensitive=True, + analytics_enabled=analytics_enabled, + analytics_sample_rate=app[CONFIG_KEY].get("analytics_sample_rate", True), + ) as ctx: + req_span = ctx.span + + ctx.set_item("req_span", req_span) + core.dispatch("web.request.start", (ctx, config.aiohttp)) + + # attach the context and the root span to the request; the Context + # may be freely used by the application code + request[REQUEST_CONTEXT_KEY] = request_span.context + request[REQUEST_SPAN_KEY] = request_span + request[REQUEST_CONFIG_KEY] = app[CONFIG_KEY] + try: + response = await handler(request) + if not config.aiohttp["disable_stream_timing_for_mem_leak"]: + if isinstance(response, web.StreamResponse): + request.task.add_done_callback(lambda _: finish_request_span(request, response)) + return response + except Exception: + request_span.set_traceback() + raise return attach_context @@ -109,7 +98,7 @@ def finish_request_span(request, response): # DEV: aiohttp is special case maintains separate configuration from config api trace_query_string = request[REQUEST_CONFIG_KEY].get("trace_query_string") if trace_query_string is None: - trace_query_string = config.http.trace_query_string + trace_query_string = config._http.trace_query_string if trace_query_string: request_span.set_tag_str(http.QUERY_STRING, request.query_string) @@ -123,19 +112,22 @@ def finish_request_span(request, response): # SystemRoute objects exist to throw HTTP errors and have no path route = aiohttp_route.resource.canonical - trace_utils.set_http_meta( - request_span, - config.aiohttp, - method=request.method, - url=str(request.url), # DEV: request.url is a yarl's URL object - status_code=response.status, - request_headers=request.headers, - response_headers=response.headers, - route=route, + core.dispatch( + "web.request.finish", + ( + request_span, + config.aiohttp, + request.method, + str(request.url), # DEV: request.url is a yarl's URL object + response.status, + None, # query arg = None + request.headers, + response.headers, + route, + True, + ), ) - request_span.finish() - async def on_prepare(request, response): """ @@ -177,9 +169,6 @@ def trace_app(app, tracer, service="aiohttp-web"): "analytics_sample_rate": 1.0, } - # the tracer must work with asynchronous Context propagation - tracer._configure(context_provider=context_provider) - # add the async tracer middleware as a first middleware # and be sure that the on_prepare signal is the last one app.middlewares.insert(0, trace_middleware) diff --git a/ddtrace/contrib/internal/aioredis/patch.py b/ddtrace/contrib/internal/aioredis/patch.py index 62b8ec9f80c..78342aa162a 100644 --- a/ddtrace/contrib/internal/aioredis/patch.py +++ b/ddtrace/contrib/internal/aioredis/patch.py @@ -12,9 +12,9 @@ from ddtrace.constants import _SPAN_MEASURED_KEY from ddtrace.constants import SPAN_KIND from ddtrace.contrib import trace_utils +from ddtrace.contrib.internal.redis_utils import ROW_RETURNING_COMMANDS from ddtrace.contrib.internal.redis_utils import _run_redis_command_async -from ddtrace.contrib.redis_utils import ROW_RETURNING_COMMANDS -from ddtrace.contrib.redis_utils import determine_row_count +from ddtrace.contrib.internal.redis_utils import determine_row_count from ddtrace.ext import SpanKind from ddtrace.ext import SpanTypes from ddtrace.ext import db diff --git a/ddtrace/contrib/internal/asgi/middleware.py b/ddtrace/contrib/internal/asgi/middleware.py index 2b3e23eb78b..7da2b11b929 100644 --- a/ddtrace/contrib/internal/asgi/middleware.py +++ b/ddtrace/contrib/internal/asgi/middleware.py @@ -7,7 +7,6 @@ import ddtrace from ddtrace import config -from ddtrace._trace.span import Span from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY from ddtrace.constants import SPAN_KIND from ddtrace.contrib import trace_utils @@ -24,6 +23,7 @@ from ddtrace.internal.schema.span_attribute_schema import SpanDirection from ddtrace.internal.utils import get_blocked from ddtrace.internal.utils import set_blocked +from ddtrace.trace import Span log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/asyncio/provider.py b/ddtrace/contrib/internal/asyncio/provider.py index 6c16a178cd0..fac41470740 100644 --- a/ddtrace/contrib/internal/asyncio/provider.py +++ b/ddtrace/contrib/internal/asyncio/provider.py @@ -2,7 +2,7 @@ from ddtrace._trace.provider import BaseContextProvider from ddtrace._trace.provider import DatadogContextMixin -from ddtrace._trace.span import Span +from ddtrace.trace import Span from ddtrace.vendor.debtcollector import deprecate diff --git a/ddtrace/contrib/internal/avro/schema_iterator.py b/ddtrace/contrib/internal/avro/schema_iterator.py index a4339d05420..3bd9ef3492e 100644 --- a/ddtrace/contrib/internal/avro/schema_iterator.py +++ b/ddtrace/contrib/internal/avro/schema_iterator.py @@ -1,11 +1,11 @@ import avro from avro.schema import Schema as AvroSchema -from ddtrace._trace.span import Span from ddtrace.ext import schema as SCHEMA_TAGS from ddtrace.internal.datastreams import data_streams_processor from ddtrace.internal.datastreams.schemas.schema_builder import SchemaBuilder from ddtrace.internal.datastreams.schemas.schema_iterator import SchemaIterator +from ddtrace.trace import Span class SchemaExtractor(SchemaIterator): diff --git a/ddtrace/contrib/internal/aws_lambda/patch.py b/ddtrace/contrib/internal/aws_lambda/patch.py index e331cf8ead4..49ef1e5dd60 100644 --- a/ddtrace/contrib/internal/aws_lambda/patch.py +++ b/ddtrace/contrib/internal/aws_lambda/patch.py @@ -2,7 +2,6 @@ import os import signal -from ddtrace import tracer from ddtrace.constants import ERROR_MSG from ddtrace.constants import ERROR_TYPE from ddtrace.contrib.internal.aws_lambda._cold_start import is_cold_start @@ -12,6 +11,7 @@ from ddtrace.internal.utils import get_argument_value from ddtrace.internal.wrapping import unwrap from ddtrace.internal.wrapping import wrap +from ddtrace.trace import tracer def get_version(): diff --git a/ddtrace/contrib/internal/botocore/patch.py b/ddtrace/contrib/internal/botocore/patch.py index 734c429d798..61353e7b34e 100644 --- a/ddtrace/contrib/internal/botocore/patch.py +++ b/ddtrace/contrib/internal/botocore/patch.py @@ -33,7 +33,7 @@ from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.formats import deep_getattr from ddtrace.llmobs._integrations import BedrockIntegration -from ddtrace.settings.config import Config +from ddtrace.settings._config import Config from ddtrace.trace import Pin from .services.bedrock import patched_bedrock_api_call diff --git a/ddtrace/contrib/internal/bottle/trace.py b/ddtrace/contrib/internal/bottle/trace.py index 3aabb4ccc81..58778a36ee1 100644 --- a/ddtrace/contrib/internal/bottle/trace.py +++ b/ddtrace/contrib/internal/bottle/trace.py @@ -5,13 +5,8 @@ import ddtrace from ddtrace import config -from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY -from ddtrace.constants import _SPAN_MEASURED_KEY -from ddtrace.constants import SPAN_KIND -from ddtrace.contrib import trace_utils -from ddtrace.ext import SpanKind from ddtrace.ext import SpanTypes -from ddtrace.internal.constants import COMPONENT +from ddtrace.internal import core from ddtrace.internal.schema import schematize_url_operation from ddtrace.internal.schema.span_attribute_schema import SpanDirection from ddtrace.internal.utils.formats import asbool @@ -42,24 +37,21 @@ def wrapped(*args, **kwargs): resource = "{} {}".format(request.method, route.rule) - trace_utils.activate_distributed_headers( - self.tracer, int_config=config.bottle, request_headers=request.headers - ) - - with self.tracer.trace( - schematize_url_operation("bottle.request", protocol="http", direction=SpanDirection.INBOUND), + with core.context_with_data( + "bottle.request", + span_name=schematize_url_operation("bottle.request", protocol="http", direction=SpanDirection.INBOUND), + span_type=SpanTypes.WEB, service=self.service, resource=resource, - span_type=SpanTypes.WEB, - ) as s: - s.set_tag_str(COMPONENT, config.bottle.integration_name) - - # set span.kind to the type of request being performed - s.set_tag_str(SPAN_KIND, SpanKind.SERVER) - - s.set_tag(_SPAN_MEASURED_KEY) - # set analytics sample rate with global config enabled - s.set_tag(_ANALYTICS_SAMPLE_RATE_KEY, config.bottle.get_analytics_sample_rate(use_global_config=True)) + tags={}, + tracer=self.tracer, + distributed_headers=request.headers, + distributed_headers_config=config.bottle, + headers_case_sensitive=True, + analytics_sample_rate=config.bottle.get_analytics_sample_rate(use_global_config=True), + ) as ctx, ctx.span as req_span: + ctx.set_item("req_span", req_span) + core.dispatch("web.request.start", (ctx, config.bottle)) code = None result = None @@ -91,16 +83,21 @@ def wrapped(*args, **kwargs): method = request.method url = request.urlparts._replace(query="").geturl() full_route = "/".join([request.script_name.rstrip("/"), route.rule.lstrip("/")]) - trace_utils.set_http_meta( - s, - config.bottle, - method=method, - url=url, - status_code=response_code, - query=request.query_string, - request_headers=request.headers, - response_headers=response.headers, - route=full_route, + + core.dispatch( + "web.request.finish", + ( + req_span, + config.bottle, + method, + url, + response_code, + request.query_string, + request.headers, + response.headers, + full_route, + False, + ), ) return wrapped diff --git a/ddtrace/contrib/internal/cassandra/patch.py b/ddtrace/contrib/internal/cassandra/patch.py index ad375683633..3632e6943b1 100644 --- a/ddtrace/contrib/internal/cassandra/patch.py +++ b/ddtrace/contrib/internal/cassandra/patch.py @@ -1,14 +1,2 @@ -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - from .session import patch # noqa: F401 from .session import unpatch # noqa: F401 - - -deprecate( - ("%s is deprecated" % (__name__)), - message="Avoid using this package directly. " - "Use ``import ddtrace.auto`` or the ``ddtrace-run`` command to enable and configure this integration.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", -) diff --git a/ddtrace/contrib/internal/cassandra/session.py b/ddtrace/contrib/internal/cassandra/session.py index 3ccd44bb616..2cab838e2f2 100644 --- a/ddtrace/contrib/internal/cassandra/session.py +++ b/ddtrace/contrib/internal/cassandra/session.py @@ -20,7 +20,6 @@ from cassandra.query import SimpleStatement import wrapt -from ddtrace import Span from ddtrace import config from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY from ddtrace.constants import _SPAN_MEASURED_KEY @@ -40,6 +39,7 @@ from ddtrace.internal.utils import get_argument_value from ddtrace.internal.utils.formats import deep_getattr from ddtrace.trace import Pin +from ddtrace.trace import Span log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/celery/utils.py b/ddtrace/contrib/internal/celery/utils.py index 5c7a4c077e8..1bf2f56af93 100644 --- a/ddtrace/contrib/internal/celery/utils.py +++ b/ddtrace/contrib/internal/celery/utils.py @@ -2,9 +2,9 @@ from typing import Dict from weakref import WeakValueDictionary -from ddtrace._trace.span import Span from ddtrace.contrib.internal.trace_utils import set_flattened_tags from ddtrace.propagation.http import HTTPPropagator +from ddtrace.trace import Span from .constants import CTX_KEY from .constants import SPAN_KEY diff --git a/ddtrace/contrib/internal/cherrypy/middleware.py b/ddtrace/contrib/internal/cherrypy/patch.py similarity index 83% rename from ddtrace/contrib/internal/cherrypy/middleware.py rename to ddtrace/contrib/internal/cherrypy/patch.py index 909a043175f..70f43059905 100644 --- a/ddtrace/contrib/internal/cherrypy/middleware.py +++ b/ddtrace/contrib/internal/cherrypy/patch.py @@ -11,12 +11,10 @@ from ddtrace.constants import ERROR_MSG from ddtrace.constants import ERROR_STACK from ddtrace.constants import ERROR_TYPE -from ddtrace.constants import SPAN_KIND from ddtrace.contrib import trace_utils -from ddtrace.ext import SpanKind from ddtrace.ext import SpanTypes from ddtrace.internal import compat -from ddtrace.internal.constants import COMPONENT +from ddtrace.internal import core from ddtrace.internal.schema import SpanDirection from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.schema import schematize_url_operation @@ -77,20 +75,23 @@ def _setup(self): cherrypy.request.hooks.attach("after_error_response", self._after_error_response, priority=5) def _on_start_resource(self): - trace_utils.activate_distributed_headers( - self._tracer, int_config=config.cherrypy, request_headers=cherrypy.request.headers - ) - - cherrypy.request._datadog_span = self._tracer.trace( - SPAN_NAME, - service=trace_utils.int_service(None, config.cherrypy, default="cherrypy"), + with core.context_with_data( + "cherrypy.request", + span_name=SPAN_NAME, span_type=SpanTypes.WEB, - ) + service=trace_utils.int_service(None, config.cherrypy, default="cherrypy"), + tags={}, + tracer=self._tracer, + distributed_headers=cherrypy.request.headers, + distributed_headers_config=config.cherrypy, + headers_case_sensitive=True, + ) as ctx: + req_span = ctx.span - cherrypy.request._datadog_span.set_tag_str(COMPONENT, config.cherrypy.integration_name) + ctx.set_item("req_span", req_span) + core.dispatch("web.request.start", (ctx, config.cherrypy)) - # set span.kind to the type of request being performed - cherrypy.request._datadog_span.set_tag_str(SPAN_KIND, SpanKind.SERVER) + cherrypy.request._datadog_span = req_span def _after_error_response(self): span = getattr(cherrypy.request, "_datadog_span", None) @@ -135,18 +136,22 @@ def _close_span(self, span): url = compat.to_unicode(cherrypy.request.base + cherrypy.request.path_info) status_code, _, _ = valid_status(cherrypy.response.status) - trace_utils.set_http_meta( - span, - config.cherrypy, - method=cherrypy.request.method, - url=url, - status_code=status_code, - request_headers=cherrypy.request.headers, - response_headers=cherrypy.response.headers, + core.dispatch( + "web.request.finish", + ( + span, + config.cherrypy, + cherrypy.request.method, + url, + status_code, + None, + cherrypy.request.headers, + cherrypy.response.headers, + None, + True, + ), ) - span.finish() - # Clear our span just in case. cherrypy.request._datadog_span = None diff --git a/ddtrace/contrib/internal/django/patch.py b/ddtrace/contrib/internal/django/patch.py index c51c789aab7..ba96675fef3 100644 --- a/ddtrace/contrib/internal/django/patch.py +++ b/ddtrace/contrib/internal/django/patch.py @@ -832,6 +832,53 @@ def traced_authenticate(django, pin, func, instance, args, kwargs): return result_user +@trace_utils.with_traced_module +def traced_process_request(django, pin, func, instance, args, kwargs): + tags = {COMPONENT: config.django.integration_name} + with core.context_with_data( + "django.func.wrapped", + span_name="django.middleware", + resource="django.contrib.auth.middleware.AuthenticationMiddleware.process_request", + tags=tags, + pin=pin, + ) as ctx, ctx.span: + core.dispatch( + "django.func.wrapped", + ( + args, + kwargs, + django.core.handlers.wsgi.WSGIRequest if hasattr(django.core.handlers, "wsgi") else object, + ctx, + None, + ), + ) + func(*args, **kwargs) + mode = asm_config._user_event_mode + if mode == "disabled": + return + try: + request = get_argument_value(args, kwargs, 0, "request") + if request: + if hasattr(request, "user") and hasattr(request.user, "_setup"): + request.user._setup() + request_user = request.user._wrapped + else: + request_user = request.user + core.dispatch( + "django.process_request", + ( + request_user, + mode, + kwargs, + pin, + _DjangoUserInfoRetriever(request_user, credentials=kwargs), + config.django, + ), + ) + except Exception: + log.debug("Error while trying to trace Django AuthenticationMiddleware process_request", exc_info=True) + + def unwrap_views(func, instance, args, kwargs): """ Django channels uses path() and re_path() to route asgi applications. This broke our initial @@ -884,6 +931,10 @@ def _(m): trace_utils.wrap(m, "login", traced_login(django)) trace_utils.wrap(m, "authenticate", traced_authenticate(django)) + @when_imported("django.contrib.auth.middleware") + def _(m): + trace_utils.wrap(m, "AuthenticationMiddleware.process_request", traced_process_request(django)) + # Only wrap get_asgi_application if get_response_async exists. Otherwise we will effectively double-patch # because get_response and get_asgi_application will be used. We must rely on the version instead of coalescing # with the previous patching hook because of circular imports within `django.core.asgi`. diff --git a/ddtrace/contrib/internal/django/utils.py b/ddtrace/contrib/internal/django/utils.py index a8d4c469e66..999d1530326 100644 --- a/ddtrace/contrib/internal/django/utils.py +++ b/ddtrace/contrib/internal/django/utils.py @@ -13,7 +13,6 @@ import xmltodict from ddtrace import config -from ddtrace._trace.span import Span from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY from ddtrace.constants import _SPAN_MEASURED_KEY from ddtrace.contrib import trace_utils @@ -29,6 +28,7 @@ from ddtrace.internal.utils.http import parse_form_params from ddtrace.internal.utils.importlib import func_name from ddtrace.propagation._utils import from_wsgi_header +from ddtrace.trace import Span try: diff --git a/ddtrace/contrib/internal/dramatiq/patch.py b/ddtrace/contrib/internal/dramatiq/patch.py index 08daad9d93c..c55d20a63a3 100644 --- a/ddtrace/contrib/internal/dramatiq/patch.py +++ b/ddtrace/contrib/internal/dramatiq/patch.py @@ -6,12 +6,12 @@ import dramatiq from ddtrace import config -from ddtrace import tracer from ddtrace.constants import SPAN_KIND from ddtrace.contrib import trace_utils from ddtrace.ext import SpanKind from ddtrace.ext import SpanTypes -from ddtrace.settings.config import Config +from ddtrace.settings._config import Config +from ddtrace.trace import tracer def get_version() -> str: diff --git a/ddtrace/contrib/internal/falcon/middleware.py b/ddtrace/contrib/internal/falcon/middleware.py index b4ec5434777..513ce6cce39 100644 --- a/ddtrace/contrib/internal/falcon/middleware.py +++ b/ddtrace/contrib/internal/falcon/middleware.py @@ -1,14 +1,8 @@ import sys from ddtrace import config -from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY -from ddtrace.constants import _SPAN_MEASURED_KEY -from ddtrace.constants import SPAN_KIND -from ddtrace.contrib import trace_utils -from ddtrace.ext import SpanKind from ddtrace.ext import SpanTypes -from ddtrace.ext import http as httpx -from ddtrace.internal.constants import COMPONENT +from ddtrace.internal import core from ddtrace.internal.schema import SpanDirection from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.schema import schematize_url_operation @@ -27,26 +21,27 @@ def __init__(self, tracer, service=None, distributed_tracing=None): def process_request(self, req, resp): # Falcon uppercases all header names. headers = dict((k.lower(), v) for k, v in req.headers.items()) - trace_utils.activate_distributed_headers(self.tracer, int_config=config.falcon, request_headers=headers) - span = self.tracer.trace( - schematize_url_operation("falcon.request", protocol="http", direction=SpanDirection.INBOUND), - service=self.service, + with core.context_with_data( + "falcon.request", + span_name=schematize_url_operation("falcon.request", protocol="http", direction=SpanDirection.INBOUND), span_type=SpanTypes.WEB, - ) - span.set_tag_str(COMPONENT, config.falcon.integration_name) - - # set span.kind to the type of operation being performed - span.set_tag_str(SPAN_KIND, SpanKind.SERVER) - - span.set_tag(_SPAN_MEASURED_KEY) - - # set analytics sample rate with global config enabled - span.set_tag(_ANALYTICS_SAMPLE_RATE_KEY, config.falcon.get_analytics_sample_rate(use_global_config=True)) - - trace_utils.set_http_meta( - span, config.falcon, method=req.method, url=req.url, query=req.query_string, request_headers=req.headers - ) + service=self.service, + tags={}, + tracer=self.tracer, + distributed_headers=headers, + distributed_headers_config=config.falcon, + headers_case_sensitive=True, + analytics_sample_rate=config.falcon.get_analytics_sample_rate(use_global_config=True), + ) as ctx: + req_span = ctx.span + ctx.set_item("req_span", req_span) + core.dispatch("web.request.start", (ctx, config.falcon)) + + core.dispatch( + "web.request.finish", + (req_span, config.falcon, req.method, req.url, None, req.query_string, req.headers, None, None, False), + ) def process_resource(self, req, resp, resource, params): span = self.tracer.current_span() @@ -69,8 +64,7 @@ def process_response(self, req, resp, resource, req_succeeded=None): if resource is None: status = "404" span.resource = "%s 404" % req.method - span.set_tag(httpx.STATUS_CODE, status) - span.finish() + core.dispatch("web.request.finish", (span, config.falcon, None, None, status, None, None, None, None, True)) return err_type = sys.exc_info()[0] @@ -87,20 +81,13 @@ def process_response(self, req, resp, resource, req_succeeded=None): route = req.root_path or "" + req.uri_template - trace_utils.set_http_meta( - span, - config.falcon, - status_code=status, - response_headers=resp._headers, - route=route, - ) - # Emit span hook for this response # DEV: Emit before closing so they can overwrite `span.resource` if they want config.falcon.hooks.emit("request", span, req, resp) - # Close the span - span.finish() + core.dispatch( + "web.request.finish", (span, config.falcon, None, None, status, None, None, resp._headers, route, True) + ) def _is_404(err_type): diff --git a/ddtrace/contrib/internal/falcon/patch.py b/ddtrace/contrib/internal/falcon/patch.py index 6cf6e47e7c7..568eb025312 100644 --- a/ddtrace/contrib/internal/falcon/patch.py +++ b/ddtrace/contrib/internal/falcon/patch.py @@ -4,9 +4,9 @@ import wrapt from ddtrace import config -from ddtrace import tracer from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.version import parse_version +from ddtrace.trace import tracer from .middleware import TraceMiddleware diff --git a/ddtrace/contrib/internal/fastapi/patch.py b/ddtrace/contrib/internal/fastapi/patch.py index 485c0424a5f..41473728f03 100644 --- a/ddtrace/contrib/internal/fastapi/patch.py +++ b/ddtrace/contrib/internal/fastapi/patch.py @@ -6,14 +6,14 @@ from wrapt import wrap_function_wrapper as _w from ddtrace import config -from ddtrace.appsec._iast._utils import _is_iast_enabled from ddtrace.contrib.internal.asgi.middleware import TraceMiddleware from ddtrace.contrib.internal.starlette.patch import _trace_background_tasks from ddtrace.contrib.internal.starlette.patch import traced_handler -from ddtrace.contrib.starlette.patch import traced_route_init +from ddtrace.contrib.internal.starlette.patch import traced_route_init from ddtrace.internal.logger import get_logger from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.wrappers import unwrap as _u +from ddtrace.settings.asm import config as asm_config from ddtrace.trace import Pin @@ -86,7 +86,7 @@ def patch(): if not isinstance(fastapi.routing.Mount.handle, ObjectProxy): _w("starlette.routing", "Mount.handle", traced_handler) - if _is_iast_enabled(): + if asm_config._iast_enabled: from ddtrace.appsec._iast._handlers import _on_iast_fastapi_patch _on_iast_fastapi_patch() diff --git a/ddtrace/contrib/internal/flask_cache/tracers.py b/ddtrace/contrib/internal/flask_cache/patch.py similarity index 99% rename from ddtrace/contrib/internal/flask_cache/tracers.py rename to ddtrace/contrib/internal/flask_cache/patch.py index 9170bd4bd45..8ce907b21ff 100644 --- a/ddtrace/contrib/internal/flask_cache/tracers.py +++ b/ddtrace/contrib/internal/flask_cache/patch.py @@ -20,7 +20,7 @@ if typing.TYPE_CHECKING: # pragma: no cover - from ddtrace import Span # noqa:F401 + from ddtrace.trace import Span # noqa:F401 log = logging.Logger(__name__) diff --git a/ddtrace/contrib/internal/futures/threading.py b/ddtrace/contrib/internal/futures/threading.py index deea68e2c17..6e96a263a9a 100644 --- a/ddtrace/contrib/internal/futures/threading.py +++ b/ddtrace/contrib/internal/futures/threading.py @@ -1,7 +1,7 @@ from typing import Optional import ddtrace -from ddtrace._trace.context import Context +from ddtrace.trace import Context def _wrap_submit(func, args, kwargs): diff --git a/ddtrace/contrib/internal/gevent/provider.py b/ddtrace/contrib/internal/gevent/provider.py index be18498b8a4..c07b0512d6d 100644 --- a/ddtrace/contrib/internal/gevent/provider.py +++ b/ddtrace/contrib/internal/gevent/provider.py @@ -2,7 +2,7 @@ from ddtrace._trace.provider import BaseContextProvider from ddtrace._trace.provider import DatadogContextMixin -from ddtrace._trace.span import Span +from ddtrace.trace import Span from ddtrace.vendor.debtcollector import deprecate diff --git a/ddtrace/contrib/internal/graphql/patch.py b/ddtrace/contrib/internal/graphql/patch.py index 589bef80d4b..fe538303a52 100644 --- a/ddtrace/contrib/internal/graphql/patch.py +++ b/ddtrace/contrib/internal/graphql/patch.py @@ -4,8 +4,8 @@ from typing import TYPE_CHECKING from typing import List -from ddtrace._trace.span import Span from ddtrace.internal.schema.span_attribute_schema import SpanDirection +from ddtrace.trace import Span if TYPE_CHECKING: # pragma: no cover diff --git a/ddtrace/contrib/internal/grpc/aio_client_interceptor.py b/ddtrace/contrib/internal/grpc/aio_client_interceptor.py index 76455b1627f..dec03c203f4 100644 --- a/ddtrace/contrib/internal/grpc/aio_client_interceptor.py +++ b/ddtrace/contrib/internal/grpc/aio_client_interceptor.py @@ -11,7 +11,6 @@ from grpc.aio._typing import ResponseIterableType from grpc.aio._typing import ResponseType -from ddtrace import Span from ddtrace import config from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY from ddtrace.constants import _SPAN_MEASURED_KEY @@ -30,6 +29,7 @@ from ddtrace.internal.schema.span_attribute_schema import SpanDirection from ddtrace.propagation.http import HTTPPropagator from ddtrace.trace import Pin +from ddtrace.trace import Span log = get_logger(__name__) diff --git a/ddtrace/contrib/internal/grpc/aio_server_interceptor.py b/ddtrace/contrib/internal/grpc/aio_server_interceptor.py index d2e7efb0e00..54030a90e6d 100644 --- a/ddtrace/contrib/internal/grpc/aio_server_interceptor.py +++ b/ddtrace/contrib/internal/grpc/aio_server_interceptor.py @@ -13,7 +13,6 @@ from grpc.aio._typing import ResponseType import wrapt -from ddtrace import Span # noqa:F401 from ddtrace import config from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY from ddtrace.constants import _SPAN_MEASURED_KEY @@ -30,6 +29,7 @@ from ddtrace.internal.schema import schematize_url_operation from ddtrace.internal.schema.span_attribute_schema import SpanDirection from ddtrace.trace import Pin # noqa:F401 +from ddtrace.trace import Span # noqa:F401 Continuation = Callable[[grpc.HandlerCallDetails], Awaitable[grpc.RpcMethodHandler]] diff --git a/ddtrace/contrib/internal/httplib/patch.py b/ddtrace/contrib/internal/httplib/patch.py index a1e367af3a1..79a8ea2816f 100644 --- a/ddtrace/contrib/internal/httplib/patch.py +++ b/ddtrace/contrib/internal/httplib/patch.py @@ -91,7 +91,7 @@ def _wrap_request(func, instance, args, kwargs): if should_skip_request(pin, instance): return func_to_call(*args, **kwargs) - cfg = config.get_from(instance) + cfg = config._get_from(instance) try: # Create a new span and attach to this instance (so we can retrieve/update/close later on the response) diff --git a/ddtrace/contrib/internal/langchain/patch.py b/ddtrace/contrib/internal/langchain/patch.py index 430700e2782..9badbf22d87 100644 --- a/ddtrace/contrib/internal/langchain/patch.py +++ b/ddtrace/contrib/internal/langchain/patch.py @@ -26,7 +26,7 @@ except ImportError: langchain_pinecone = None -from ddtrace.appsec._iast import _is_iast_enabled +from ddtrace.settings.asm import config as asm_config try: @@ -39,7 +39,6 @@ import wrapt -from ddtrace import Span from ddtrace import config from ddtrace.contrib.internal.langchain.constants import API_KEY from ddtrace.contrib.internal.langchain.constants import COMPLETION_TOKENS @@ -63,6 +62,7 @@ from ddtrace.llmobs._integrations import LangChainIntegration from ddtrace.llmobs._utils import safe_json from ddtrace.trace import Pin +from ddtrace.trace import Span log = get_logger(__name__) @@ -73,12 +73,6 @@ def get_version(): return getattr(langchain, "__version__", "") -# After 0.1.0, implementation split into langchain, langchain_community, and langchain_core. -# We need to check the version to determine which module to wrap, to avoid deprecation warnings -# ref: https://github.com/DataDog/dd-trace-py/issues/8212 -PATCH_LANGCHAIN_V0 = parse_version(get_version()) < (0, 1, 0) - - config._add( "langchain", { @@ -160,11 +154,11 @@ def _is_openai_llm_instance(instance): langchain_community does not automatically import submodules which may result in AttributeErrors. """ try: - if not PATCH_LANGCHAIN_V0 and langchain_openai: + if langchain_openai: return isinstance(instance, langchain_openai.OpenAI) - if not PATCH_LANGCHAIN_V0 and langchain_community: + if langchain_community: return isinstance(instance, langchain_community.llms.OpenAI) - return isinstance(instance, langchain.llms.OpenAI) + return False except (AttributeError, ModuleNotFoundError, ImportError): return False @@ -174,11 +168,11 @@ def _is_openai_chat_instance(instance): langchain_community does not automatically import submodules which may result in AttributeErrors. """ try: - if not PATCH_LANGCHAIN_V0 and langchain_openai: + if langchain_openai: return isinstance(instance, langchain_openai.ChatOpenAI) - if not PATCH_LANGCHAIN_V0 and langchain_community: + if langchain_community: return isinstance(instance, langchain_community.chat_models.ChatOpenAI) - return isinstance(instance, langchain.chat_models.ChatOpenAI) + return False except (AttributeError, ModuleNotFoundError, ImportError): return False @@ -188,11 +182,11 @@ def _is_pinecone_vectorstore_instance(instance): langchain_community does not automatically import submodules which may result in AttributeErrors. """ try: - if not PATCH_LANGCHAIN_V0 and langchain_pinecone: + if langchain_pinecone: return isinstance(instance, langchain_pinecone.PineconeVectorStore) - if not PATCH_LANGCHAIN_V0 and langchain_community: + if langchain_community: return isinstance(instance, langchain_community.vectorstores.Pinecone) - return isinstance(instance, langchain.vectorstores.Pinecone) + return False except (AttributeError, ModuleNotFoundError, ImportError): return False @@ -649,120 +643,6 @@ def traced_embedding(langchain, pin, func, instance, args, kwargs): return embeddings -@with_traced_module -def traced_chain_call(langchain, pin, func, instance, args, kwargs): - integration = langchain._datadog_integration - span = integration.trace( - pin, - "{}.{}".format(instance.__module__, instance.__class__.__name__), - submit_to_llmobs=True, - interface_type="chain", - ) - inputs = None - final_outputs = {} - try: - if PATCH_LANGCHAIN_V0: - inputs = get_argument_value(args, kwargs, 0, "inputs") - else: - inputs = get_argument_value(args, kwargs, 0, "input") - if not isinstance(inputs, dict): - inputs = {instance.input_keys[0]: inputs} - if integration.is_pc_sampled_span(span): - for k, v in inputs.items(): - span.set_tag_str("langchain.request.inputs.%s" % k, integration.trunc(str(v))) - template = deep_getattr(instance, "prompt.template", default="") - if template: - span.set_tag_str("langchain.request.prompt", integration.trunc(str(template))) - final_outputs = func(*args, **kwargs) - if integration.is_pc_sampled_span(span): - for k, v in final_outputs.items(): - span.set_tag_str("langchain.response.outputs.%s" % k, integration.trunc(str(v))) - if _is_iast_enabled(): - taint_outputs(instance, inputs, final_outputs) - except Exception: - span.set_exc_info(*sys.exc_info()) - integration.metric(span, "incr", "request.error", 1) - raise - finally: - integration.llmobs_set_tags(span, args=[], kwargs=inputs, response=final_outputs, operation="chain") - span.finish() - integration.metric(span, "dist", "request.duration", span.duration_ns) - if integration.is_pc_sampled_log(span): - log_inputs = {} - log_outputs = {} - for k, v in inputs.items(): - log_inputs[k] = str(v) - for k, v in final_outputs.items(): - log_outputs[k] = str(v) - integration.log( - span, - "info" if span.error == 0 else "error", - "sampled %s.%s" % (instance.__module__, instance.__class__.__name__), - attrs={ - "inputs": log_inputs, - "prompt": str(deep_getattr(instance, "prompt.template", default="")), - "outputs": log_outputs, - }, - ) - return final_outputs - - -@with_traced_module -async def traced_chain_acall(langchain, pin, func, instance, args, kwargs): - integration = langchain._datadog_integration - span = integration.trace( - pin, - "{}.{}".format(instance.__module__, instance.__class__.__name__), - submit_to_llmobs=True, - interface_type="chain", - ) - inputs = None - final_outputs = {} - try: - if PATCH_LANGCHAIN_V0: - inputs = get_argument_value(args, kwargs, 0, "inputs") - else: - inputs = get_argument_value(args, kwargs, 0, "input") - if not isinstance(inputs, dict): - inputs = {instance.input_keys[0]: inputs} - if integration.is_pc_sampled_span(span): - for k, v in inputs.items(): - span.set_tag_str("langchain.request.inputs.%s" % k, integration.trunc(str(v))) - template = deep_getattr(instance, "prompt.template", default="") - if template: - span.set_tag_str("langchain.request.prompt", integration.trunc(str(template))) - final_outputs = await func(*args, **kwargs) - if integration.is_pc_sampled_span(span): - for k, v in final_outputs.items(): - span.set_tag_str("langchain.response.outputs.%s" % k, integration.trunc(str(v))) - except Exception: - span.set_exc_info(*sys.exc_info()) - integration.metric(span, "incr", "request.error", 1) - raise - finally: - integration.llmobs_set_tags(span, args=[], kwargs=inputs, response=final_outputs, operation="chain") - span.finish() - integration.metric(span, "dist", "request.duration", span.duration_ns) - if integration.is_pc_sampled_log(span): - log_inputs = {} - log_outputs = {} - for k, v in inputs.items(): - log_inputs[k] = str(v) - for k, v in final_outputs.items(): - log_outputs[k] = str(v) - integration.log( - span, - "info" if span.error == 0 else "error", - "sampled %s.%s" % (instance.__module__, instance.__class__.__name__), - attrs={ - "inputs": log_inputs, - "prompt": str(deep_getattr(instance, "prompt.template", default="")), - "outputs": log_outputs, - }, - ) - return final_outputs - - @with_traced_module def traced_lcel_runnable_sequence(langchain, pin, func, instance, args, kwargs): """ @@ -1197,44 +1077,42 @@ def _patch_embeddings_and_vectorstores(): Text embedding models override two abstract base methods instead of super calls, so we need to wrap each langchain-provided text embedding and vectorstore model. """ - base_langchain_module = langchain - if not PATCH_LANGCHAIN_V0 and langchain_community: - from langchain_community import embeddings # noqa:F401 - from langchain_community import vectorstores # noqa:F401 - - base_langchain_module = langchain_community - if not PATCH_LANGCHAIN_V0 and langchain_community is None: + if langchain_community is None: return + + from langchain_community import embeddings # noqa:F401 + from langchain_community import vectorstores # noqa:F401 + for text_embedding_model in text_embedding_models: - if hasattr(base_langchain_module.embeddings, text_embedding_model): + if hasattr(langchain_community.embeddings, text_embedding_model): # Ensure not double patched, as some Embeddings interfaces are pointers to other Embeddings. if not isinstance( - deep_getattr(base_langchain_module.embeddings, "%s.embed_query" % text_embedding_model), + deep_getattr(langchain_community.embeddings, "%s.embed_query" % text_embedding_model), wrapt.ObjectProxy, ): wrap( - base_langchain_module.__name__, + langchain_community.__name__, "embeddings.%s.embed_query" % text_embedding_model, traced_embedding(langchain), ) if not isinstance( - deep_getattr(base_langchain_module.embeddings, "%s.embed_documents" % text_embedding_model), + deep_getattr(langchain_community.embeddings, "%s.embed_documents" % text_embedding_model), wrapt.ObjectProxy, ): wrap( - base_langchain_module.__name__, + langchain_community.__name__, "embeddings.%s.embed_documents" % text_embedding_model, traced_embedding(langchain), ) for vectorstore in vectorstore_classes: - if hasattr(base_langchain_module.vectorstores, vectorstore): + if hasattr(langchain_community.vectorstores, vectorstore): # Ensure not double patched, as some Embeddings interfaces are pointers to other Embeddings. if not isinstance( - deep_getattr(base_langchain_module.vectorstores, "%s.similarity_search" % vectorstore), + deep_getattr(langchain_community.vectorstores, "%s.similarity_search" % vectorstore), wrapt.ObjectProxy, ): wrap( - base_langchain_module.__name__, + langchain_community.__name__, "vectorstores.%s.similarity_search" % vectorstore, traced_similarity_search(langchain), ) @@ -1245,34 +1123,39 @@ def _unpatch_embeddings_and_vectorstores(): Text embedding models override two abstract base methods instead of super calls, so we need to unwrap each langchain-provided text embedding and vectorstore model. """ - base_langchain_module = langchain if PATCH_LANGCHAIN_V0 else langchain_community - if not PATCH_LANGCHAIN_V0 and langchain_community is None: + if langchain_community is None: return + for text_embedding_model in text_embedding_models: - if hasattr(base_langchain_module.embeddings, text_embedding_model): + if hasattr(langchain_community.embeddings, text_embedding_model): if isinstance( - deep_getattr(base_langchain_module.embeddings, "%s.embed_query" % text_embedding_model), + deep_getattr(langchain_community.embeddings, "%s.embed_query" % text_embedding_model), wrapt.ObjectProxy, ): - unwrap(getattr(base_langchain_module.embeddings, text_embedding_model), "embed_query") + unwrap(getattr(langchain_community.embeddings, text_embedding_model), "embed_query") if isinstance( - deep_getattr(base_langchain_module.embeddings, "%s.embed_documents" % text_embedding_model), + deep_getattr(langchain_community.embeddings, "%s.embed_documents" % text_embedding_model), wrapt.ObjectProxy, ): - unwrap(getattr(base_langchain_module.embeddings, text_embedding_model), "embed_documents") + unwrap(getattr(langchain_community.embeddings, text_embedding_model), "embed_documents") for vectorstore in vectorstore_classes: - if hasattr(base_langchain_module.vectorstores, vectorstore): + if hasattr(langchain_community.vectorstores, vectorstore): if isinstance( - deep_getattr(base_langchain_module.vectorstores, "%s.similarity_search" % vectorstore), + deep_getattr(langchain_community.vectorstores, "%s.similarity_search" % vectorstore), wrapt.ObjectProxy, ): - unwrap(getattr(base_langchain_module.vectorstores, vectorstore), "similarity_search") + unwrap(getattr(langchain_community.vectorstores, vectorstore), "similarity_search") def patch(): if getattr(langchain, "_datadog_patch", False): return + version = parse_version(get_version()) + if parse_version(get_version()) < (0, 1, 0): + log.warning("langchain version %s is not supported, please upgrade to langchain version 0.1 or later", version) + return + langchain._datadog_patch = True Pin().onto(langchain) @@ -1281,71 +1164,51 @@ def patch(): # Langchain doesn't allow wrapping directly from root, so we have to import the base classes first before wrapping. # ref: https://github.com/DataDog/dd-trace-py/issues/7123 - if PATCH_LANGCHAIN_V0: - from langchain import embeddings # noqa:F401 - from langchain import vectorstores # noqa:F401 - from langchain.chains.base import Chain # noqa:F401 - from langchain.chat_models.base import BaseChatModel # noqa:F401 - from langchain.llms.base import BaseLLM # noqa:F401 - - wrap("langchain", "llms.base.BaseLLM.generate", traced_llm_generate(langchain)) - wrap("langchain", "llms.base.BaseLLM.agenerate", traced_llm_agenerate(langchain)) - wrap("langchain", "chat_models.base.BaseChatModel.generate", traced_chat_model_generate(langchain)) - wrap("langchain", "chat_models.base.BaseChatModel.agenerate", traced_chat_model_agenerate(langchain)) - wrap("langchain", "chains.base.Chain.__call__", traced_chain_call(langchain)) - wrap("langchain", "chains.base.Chain.acall", traced_chain_acall(langchain)) - wrap("langchain", "embeddings.OpenAIEmbeddings.embed_query", traced_embedding(langchain)) - wrap("langchain", "embeddings.OpenAIEmbeddings.embed_documents", traced_embedding(langchain)) - else: - from langchain.chains.base import Chain # noqa:F401 - from langchain_core.tools import BaseTool # noqa:F401 - - wrap("langchain_core", "language_models.llms.BaseLLM.generate", traced_llm_generate(langchain)) - wrap("langchain_core", "language_models.llms.BaseLLM.agenerate", traced_llm_agenerate(langchain)) - wrap( - "langchain_core", - "language_models.chat_models.BaseChatModel.generate", - traced_chat_model_generate(langchain), - ) - wrap( - "langchain_core", - "language_models.chat_models.BaseChatModel.agenerate", - traced_chat_model_agenerate(langchain), - ) - wrap("langchain", "chains.base.Chain.invoke", traced_chain_call(langchain)) - wrap("langchain", "chains.base.Chain.ainvoke", traced_chain_acall(langchain)) - wrap("langchain_core", "runnables.base.RunnableSequence.invoke", traced_lcel_runnable_sequence(langchain)) - wrap( - "langchain_core", "runnables.base.RunnableSequence.ainvoke", traced_lcel_runnable_sequence_async(langchain) - ) - wrap("langchain_core", "runnables.base.RunnableSequence.batch", traced_lcel_runnable_sequence(langchain)) - wrap("langchain_core", "runnables.base.RunnableSequence.abatch", traced_lcel_runnable_sequence_async(langchain)) - wrap("langchain_core", "runnables.base.RunnableSequence.stream", traced_chain_stream(langchain)) - wrap("langchain_core", "runnables.base.RunnableSequence.astream", traced_chain_stream(langchain)) - wrap( - "langchain_core", - "language_models.chat_models.BaseChatModel.stream", - traced_chat_stream(langchain), - ) - wrap( - "langchain_core", - "language_models.chat_models.BaseChatModel.astream", - traced_chat_stream(langchain), - ) - wrap("langchain_core", "language_models.llms.BaseLLM.stream", traced_llm_stream(langchain)) - wrap("langchain_core", "language_models.llms.BaseLLM.astream", traced_llm_stream(langchain)) - - wrap("langchain_core", "tools.BaseTool.invoke", traced_base_tool_invoke(langchain)) - wrap("langchain_core", "tools.BaseTool.ainvoke", traced_base_tool_ainvoke(langchain)) - if langchain_openai: - wrap("langchain_openai", "OpenAIEmbeddings.embed_documents", traced_embedding(langchain)) - if langchain_pinecone: - wrap("langchain_pinecone", "PineconeVectorStore.similarity_search", traced_similarity_search(langchain)) + from langchain.chains.base import Chain # noqa:F401 + from langchain_core.tools import BaseTool # noqa:F401 + + wrap("langchain_core", "language_models.llms.BaseLLM.generate", traced_llm_generate(langchain)) + wrap("langchain_core", "language_models.llms.BaseLLM.agenerate", traced_llm_agenerate(langchain)) + wrap( + "langchain_core", + "language_models.chat_models.BaseChatModel.generate", + traced_chat_model_generate(langchain), + ) + wrap( + "langchain_core", + "language_models.chat_models.BaseChatModel.agenerate", + traced_chat_model_agenerate(langchain), + ) + wrap("langchain_core", "runnables.base.RunnableSequence.invoke", traced_lcel_runnable_sequence(langchain)) + wrap("langchain_core", "runnables.base.RunnableSequence.ainvoke", traced_lcel_runnable_sequence_async(langchain)) + wrap("langchain_core", "runnables.base.RunnableSequence.batch", traced_lcel_runnable_sequence(langchain)) + wrap("langchain_core", "runnables.base.RunnableSequence.abatch", traced_lcel_runnable_sequence_async(langchain)) + wrap("langchain_core", "runnables.base.RunnableSequence.stream", traced_chain_stream(langchain)) + wrap("langchain_core", "runnables.base.RunnableSequence.astream", traced_chain_stream(langchain)) + wrap( + "langchain_core", + "language_models.chat_models.BaseChatModel.stream", + traced_chat_stream(langchain), + ) + wrap( + "langchain_core", + "language_models.chat_models.BaseChatModel.astream", + traced_chat_stream(langchain), + ) + wrap("langchain_core", "language_models.llms.BaseLLM.stream", traced_llm_stream(langchain)) + wrap("langchain_core", "language_models.llms.BaseLLM.astream", traced_llm_stream(langchain)) + + wrap("langchain_core", "tools.BaseTool.invoke", traced_base_tool_invoke(langchain)) + wrap("langchain_core", "tools.BaseTool.ainvoke", traced_base_tool_ainvoke(langchain)) + if langchain_openai: + wrap("langchain_openai", "OpenAIEmbeddings.embed_documents", traced_embedding(langchain)) + if langchain_pinecone: + wrap("langchain_pinecone", "PineconeVectorStore.similarity_search", traced_similarity_search(langchain)) - if PATCH_LANGCHAIN_V0 or langchain_community: + if langchain_community: _patch_embeddings_and_vectorstores() - if _is_iast_enabled(): + if asm_config._iast_enabled: from ddtrace.appsec._iast._metrics import _set_iast_error_metric def wrap_output_parser(module, parser): @@ -1365,40 +1228,28 @@ def unpatch(): langchain._datadog_patch = False - if PATCH_LANGCHAIN_V0: - unwrap(langchain.llms.base.BaseLLM, "generate") - unwrap(langchain.llms.base.BaseLLM, "agenerate") - unwrap(langchain.chat_models.base.BaseChatModel, "generate") - unwrap(langchain.chat_models.base.BaseChatModel, "agenerate") - unwrap(langchain.chains.base.Chain, "__call__") - unwrap(langchain.chains.base.Chain, "acall") - unwrap(langchain.embeddings.OpenAIEmbeddings, "embed_query") - unwrap(langchain.embeddings.OpenAIEmbeddings, "embed_documents") - else: - unwrap(langchain_core.language_models.llms.BaseLLM, "generate") - unwrap(langchain_core.language_models.llms.BaseLLM, "agenerate") - unwrap(langchain_core.language_models.chat_models.BaseChatModel, "generate") - unwrap(langchain_core.language_models.chat_models.BaseChatModel, "agenerate") - unwrap(langchain.chains.base.Chain, "invoke") - unwrap(langchain.chains.base.Chain, "ainvoke") - unwrap(langchain_core.runnables.base.RunnableSequence, "invoke") - unwrap(langchain_core.runnables.base.RunnableSequence, "ainvoke") - unwrap(langchain_core.runnables.base.RunnableSequence, "batch") - unwrap(langchain_core.runnables.base.RunnableSequence, "abatch") - unwrap(langchain_core.runnables.base.RunnableSequence, "stream") - unwrap(langchain_core.runnables.base.RunnableSequence, "astream") - unwrap(langchain_core.language_models.chat_models.BaseChatModel, "stream") - unwrap(langchain_core.language_models.chat_models.BaseChatModel, "astream") - unwrap(langchain_core.language_models.llms.BaseLLM, "stream") - unwrap(langchain_core.language_models.llms.BaseLLM, "astream") - unwrap(langchain_core.tools.BaseTool, "invoke") - unwrap(langchain_core.tools.BaseTool, "ainvoke") - if langchain_openai: - unwrap(langchain_openai.OpenAIEmbeddings, "embed_documents") - if langchain_pinecone: - unwrap(langchain_pinecone.PineconeVectorStore, "similarity_search") - - if PATCH_LANGCHAIN_V0 or langchain_community: + unwrap(langchain_core.language_models.llms.BaseLLM, "generate") + unwrap(langchain_core.language_models.llms.BaseLLM, "agenerate") + unwrap(langchain_core.language_models.chat_models.BaseChatModel, "generate") + unwrap(langchain_core.language_models.chat_models.BaseChatModel, "agenerate") + unwrap(langchain_core.runnables.base.RunnableSequence, "invoke") + unwrap(langchain_core.runnables.base.RunnableSequence, "ainvoke") + unwrap(langchain_core.runnables.base.RunnableSequence, "batch") + unwrap(langchain_core.runnables.base.RunnableSequence, "abatch") + unwrap(langchain_core.runnables.base.RunnableSequence, "stream") + unwrap(langchain_core.runnables.base.RunnableSequence, "astream") + unwrap(langchain_core.language_models.chat_models.BaseChatModel, "stream") + unwrap(langchain_core.language_models.chat_models.BaseChatModel, "astream") + unwrap(langchain_core.language_models.llms.BaseLLM, "stream") + unwrap(langchain_core.language_models.llms.BaseLLM, "astream") + unwrap(langchain_core.tools.BaseTool, "invoke") + unwrap(langchain_core.tools.BaseTool, "ainvoke") + if langchain_openai: + unwrap(langchain_openai.OpenAIEmbeddings, "embed_documents") + if langchain_pinecone: + unwrap(langchain_pinecone.PineconeVectorStore, "similarity_search") + + if langchain_community: _unpatch_embeddings_and_vectorstores() delattr(langchain, "_datadog_integration") diff --git a/ddtrace/contrib/internal/langgraph/patch.py b/ddtrace/contrib/internal/langgraph/patch.py index 1da216be9a3..2df7159161a 100644 --- a/ddtrace/contrib/internal/langgraph/patch.py +++ b/ddtrace/contrib/internal/langgraph/patch.py @@ -9,7 +9,7 @@ from ddtrace.contrib.trace_utils import wrap from ddtrace.internal.utils import get_argument_value from ddtrace.llmobs._integrations.langgraph import LangGraphIntegration -from ddtrace.pin import Pin +from ddtrace.trace import Pin def get_version(): diff --git a/ddtrace/contrib/internal/logging/patch.py b/ddtrace/contrib/internal/logging/patch.py index 11edd5d938f..fd356597bc0 100644 --- a/ddtrace/contrib/internal/logging/patch.py +++ b/ddtrace/contrib/internal/logging/patch.py @@ -80,7 +80,7 @@ def _w_makeRecord(func, instance, args, kwargs): # logs from internal logger may explicitly pass the current span to # avoid deadlocks in getting the current span while already in locked code. span_from_log = getattr(record, _LOG_SPAN_KEY, None) - if isinstance(span_from_log, ddtrace.Span): + if isinstance(span_from_log, ddtrace.trace.Span): span = span_from_log if tracer: diff --git a/ddtrace/contrib/internal/molten/patch.py b/ddtrace/contrib/internal/molten/patch.py index 38fa949243c..dfec47eb17d 100644 --- a/ddtrace/contrib/internal/molten/patch.py +++ b/ddtrace/contrib/internal/molten/patch.py @@ -5,15 +5,11 @@ from wrapt import wrap_function_wrapper as _w from ddtrace import config -from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY -from ddtrace.constants import _SPAN_MEASURED_KEY -from ddtrace.constants import SPAN_KIND from ddtrace.contrib import trace_utils from ddtrace.contrib.internal.trace_utils import unwrap as _u -from ddtrace.ext import SpanKind from ddtrace.ext import SpanTypes +from ddtrace.internal import core from ddtrace.internal.compat import urlencode -from ddtrace.internal.constants import COMPONENT from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.schema import schematize_url_operation from ddtrace.internal.schema.span_attribute_schema import SpanDirection @@ -89,25 +85,21 @@ def patch_app_call(wrapped, instance, args, kwargs): request = molten.http.Request.from_environ(environ) resource = func_name(wrapped) - # request.headers is type Iterable[Tuple[str, str]] - trace_utils.activate_distributed_headers( - pin.tracer, int_config=config.molten, request_headers=dict(request.headers) - ) - - with pin.tracer.trace( - schematize_url_operation("molten.request", protocol="http", direction=SpanDirection.INBOUND), + with core.context_with_data( + "molten.request", + span_name=schematize_url_operation("molten.request", protocol="http", direction=SpanDirection.INBOUND), + span_type=SpanTypes.WEB, service=trace_utils.int_service(pin, config.molten), resource=resource, - span_type=SpanTypes.WEB, - ) as span: - span.set_tag_str(COMPONENT, config.molten.integration_name) - - # set span.kind tag equal to type of operation being performed - span.set_tag_str(SPAN_KIND, SpanKind.SERVER) - - span.set_tag(_SPAN_MEASURED_KEY) - # set analytics sample rate with global config enabled - span.set_tag(_ANALYTICS_SAMPLE_RATE_KEY, config.molten.get_analytics_sample_rate(use_global_config=True)) + tags={}, + tracer=pin.tracer, + distributed_headers=dict(request.headers), # request.headers is type Iterable[Tuple[str, str]] + distributed_headers_config=config.molten, + headers_case_sensitive=True, + analytics_sample_rate=config.molten.get_analytics_sample_rate(use_global_config=True), + ) as ctx, ctx.span as req_span: + ctx.set_item("req_span", req_span) + core.dispatch("web.request.start", (ctx, config.molten)) @wrapt.function_wrapper def _w_start_response(wrapped, instance, args, kwargs): @@ -125,11 +117,13 @@ def _w_start_response(wrapped, instance, args, kwargs): except ValueError: pass - if not span.get_tag(MOLTEN_ROUTE): + if not req_span.get_tag(MOLTEN_ROUTE): # if route never resolve, update root resource - span.resource = "{} {}".format(request.method, code) + req_span.resource = "{} {}".format(request.method, code) - trace_utils.set_http_meta(span, config.molten, status_code=code) + core.dispatch( + "web.request.finish", (req_span, config.molten, None, None, code, None, None, None, None, False) + ) return wrapped(*args, **kwargs) @@ -143,11 +137,13 @@ def _w_start_response(wrapped, instance, args, kwargs): request.path, ) query = urlencode(dict(request.params)) - trace_utils.set_http_meta( - span, config.molten, method=request.method, url=url, query=query, request_headers=request.headers + + core.dispatch( + "web.request.finish", + (req_span, config.molten, request.method, url, None, query, request.headers, None, None, False), ) - span.set_tag_str("molten.version", molten.__version__) + req_span.set_tag_str("molten.version", molten.__version__) return wrapped(environ, start_response, **kwargs) diff --git a/ddtrace/contrib/internal/mongoengine/trace.py b/ddtrace/contrib/internal/mongoengine/trace.py index 93868e096ce..5539cf1d2e4 100644 --- a/ddtrace/contrib/internal/mongoengine/trace.py +++ b/ddtrace/contrib/internal/mongoengine/trace.py @@ -29,7 +29,7 @@ def __call__(self, *args, **kwargs): client = self.__wrapped__(*args, **kwargs) pin = ddtrace.trace.Pin.get_from(self) if pin: - # Calling ddtrace.pin.Pin(...) with the `tracer` argument generates a deprecation warning. + # Calling ddtrace.trace.Pin(...) with the `tracer` argument generates a deprecation warning. # Remove this if statement when the `tracer` argument is removed if pin.tracer is ddtrace.tracer: ddtrace.trace.Pin(service=pin.service).onto(client) diff --git a/ddtrace/contrib/internal/openai/_endpoint_hooks.py b/ddtrace/contrib/internal/openai/_endpoint_hooks.py index 979e1774a8a..00ee44aef4b 100644 --- a/ddtrace/contrib/internal/openai/_endpoint_hooks.py +++ b/ddtrace/contrib/internal/openai/_endpoint_hooks.py @@ -37,7 +37,7 @@ class _EndpointHook: OPERATION_ID = "" # Each endpoint hook must provide an operationID as specified in the OpenAI API specs: # https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml - def _record_request(self, pin, integration, span, args, kwargs): + def _record_request(self, pin, integration, instance, span, args, kwargs): """ Set base-level openai tags, as well as request params from args and kwargs. All inherited EndpointHook classes should include a super call to this method before performing @@ -45,12 +45,12 @@ def _record_request(self, pin, integration, span, args, kwargs): """ endpoint = self.ENDPOINT_NAME if endpoint is None: - endpoint = "%s" % args[0].OBJECT_NAME + endpoint = "%s" % getattr(instance, "OBJECT_NAME", "") span.set_tag_str("openai.request.endpoint", "/%s/%s" % (API_VERSION, endpoint)) span.set_tag_str("openai.request.method", self.HTTP_METHOD_TYPE) if self._request_arg_params and len(self._request_arg_params) > 1: - for idx, arg in enumerate(self._request_arg_params, 1): + for idx, arg in enumerate(self._request_arg_params): if idx >= len(args): break if arg is None or args[idx] is None: @@ -74,8 +74,8 @@ def _record_request(self, pin, integration, span, args, kwargs): else: span.set_tag_str("openai.request.%s" % kw_attr, str(kwargs[kw_attr])) - def handle_request(self, pin, integration, span, args, kwargs): - self._record_request(pin, integration, span, args, kwargs) + def handle_request(self, pin, integration, instance, span, args, kwargs): + self._record_request(pin, integration, instance, span, args, kwargs) resp, error = yield if hasattr(resp, "parse"): # Users can request the raw response, in which case we need to process on the parsed response @@ -186,8 +186,8 @@ class _CompletionHook(_BaseCompletionHook): HTTP_METHOD_TYPE = "POST" OPERATION_ID = "createCompletion" - def _record_request(self, pin, integration, span, args, kwargs): - super()._record_request(pin, integration, span, args, kwargs) + def _record_request(self, pin, integration, instance, span, args, kwargs): + super()._record_request(pin, integration, instance, span, args, kwargs) if integration.is_pc_sampled_span(span): prompt = kwargs.get("prompt", "") if isinstance(prompt, str): @@ -241,8 +241,8 @@ class _ChatCompletionHook(_BaseCompletionHook): HTTP_METHOD_TYPE = "POST" OPERATION_ID = "createChatCompletion" - def _record_request(self, pin, integration, span, args, kwargs): - super()._record_request(pin, integration, span, args, kwargs) + def _record_request(self, pin, integration, instance, span, args, kwargs): + super()._record_request(pin, integration, instance, span, args, kwargs) for idx, m in enumerate(kwargs.get("messages", [])): role = getattr(m, "role", "") name = getattr(m, "name", "") @@ -305,12 +305,12 @@ class _EmbeddingHook(_EndpointHook): HTTP_METHOD_TYPE = "POST" OPERATION_ID = "createEmbedding" - def _record_request(self, pin, integration, span, args, kwargs): + def _record_request(self, pin, integration, instance, span, args, kwargs): """ Embedding endpoint allows multiple inputs, each of which we specify a request tag for, so have to manually set them in _pre_response(). """ - super()._record_request(pin, integration, span, args, kwargs) + super()._record_request(pin, integration, instance, span, args, kwargs) embedding_input = kwargs.get("input", "") if integration.is_pc_sampled_span(span): if isinstance(embedding_input, str) or isinstance(embedding_input[0], int): @@ -340,8 +340,8 @@ class _ListHook(_EndpointHook): HTTP_METHOD_TYPE = "GET" OPERATION_ID = "list" - def _record_request(self, pin, integration, span, args, kwargs): - super()._record_request(pin, integration, span, args, kwargs) + def _record_request(self, pin, integration, instance, span, args, kwargs): + super()._record_request(pin, integration, instance, span, args, kwargs) endpoint = span.get_tag("openai.request.endpoint") if endpoint.endswith("/models"): span.resource = "listModels" @@ -399,15 +399,21 @@ class _RetrieveHook(_EndpointHook): HTTP_METHOD_TYPE = "GET" OPERATION_ID = "retrieve" - def _record_request(self, pin, integration, span, args, kwargs): - super()._record_request(pin, integration, span, args, kwargs) + def _record_request(self, pin, integration, instance, span, args, kwargs): + super()._record_request(pin, integration, instance, span, args, kwargs) endpoint = span.get_tag("openai.request.endpoint") if endpoint.endswith("/models"): span.resource = "retrieveModel" - span.set_tag_str("openai.request.model", args[1] if len(args) >= 2 else kwargs.get("model", "")) + if len(args) >= 1: + span.set_tag_str("openai.request.model", args[0]) + else: + span.set_tag_str("openai.request.model", kwargs.get("model", kwargs.get("id", ""))) elif endpoint.endswith("/files"): span.resource = "retrieveFile" - span.set_tag_str("openai.request.file_id", args[1] if len(args) >= 2 else kwargs.get("file_id", "")) + if len(args) >= 1: + span.set_tag_str("openai.request.file_id", args[0]) + else: + span.set_tag_str("openai.request.file_id", kwargs.get("file_id", kwargs.get("id", ""))) span.set_tag_str("openai.request.endpoint", "%s/*" % endpoint) def _record_response(self, pin, integration, span, args, kwargs, resp, error): @@ -434,10 +440,6 @@ class _ModelRetrieveHook(_RetrieveHook): ENDPOINT_NAME = "models" OPERATION_ID = "retrieveModel" - def _record_request(self, pin, integration, span, args, kwargs): - super()._record_request(pin, integration, span, args, kwargs) - span.set_tag_str("openai.request.model", args[1] if len(args) >= 2 else kwargs.get("model", "")) - class _FileRetrieveHook(_RetrieveHook): """ @@ -447,10 +449,6 @@ class _FileRetrieveHook(_RetrieveHook): ENDPOINT_NAME = "files" OPERATION_ID = "retrieveFile" - def _record_request(self, pin, integration, span, args, kwargs): - super()._record_request(pin, integration, span, args, kwargs) - span.set_tag_str("openai.request.file_id", args[1] if len(args) >= 2 else kwargs.get("file_id", "")) - class _DeleteHook(_EndpointHook): """Hook for openai.DeletableAPIResource, which is used by File.delete, and Model.delete.""" @@ -461,15 +459,21 @@ class _DeleteHook(_EndpointHook): HTTP_METHOD_TYPE = "DELETE" OPERATION_ID = "delete" - def _record_request(self, pin, integration, span, args, kwargs): - super()._record_request(pin, integration, span, args, kwargs) + def _record_request(self, pin, integration, instance, span, args, kwargs): + super()._record_request(pin, integration, instance, span, args, kwargs) endpoint = span.get_tag("openai.request.endpoint") if endpoint.endswith("/models"): span.resource = "deleteModel" - span.set_tag_str("openai.request.model", args[1] if len(args) >= 2 else kwargs.get("model", "")) + if len(args) >= 1: + span.set_tag_str("openai.request.model", args[0]) + else: + span.set_tag_str("openai.request.model", kwargs.get("model", kwargs.get("sid", ""))) elif endpoint.endswith("/files"): span.resource = "deleteFile" - span.set_tag_str("openai.request.file_id", args[1] if len(args) >= 2 else kwargs.get("file_id", "")) + if len(args) >= 1: + span.set_tag_str("openai.request.file_id", args[0]) + else: + span.set_tag_str("openai.request.file_id", kwargs.get("file_id", kwargs.get("sid", ""))) span.set_tag_str("openai.request.endpoint", "%s/*" % endpoint) def _record_response(self, pin, integration, span, args, kwargs, resp, error): @@ -508,8 +512,8 @@ class _ImageHook(_EndpointHook): ENDPOINT_NAME = "images" HTTP_METHOD_TYPE = "POST" - def _record_request(self, pin, integration, span, args, kwargs): - super()._record_request(pin, integration, span, args, kwargs) + def _record_request(self, pin, integration, instance, span, args, kwargs): + super()._record_request(pin, integration, instance, span, args, kwargs) span.set_tag_str("openai.request.model", "dall-e") def _record_response(self, pin, integration, span, args, kwargs, resp, error): @@ -526,10 +530,10 @@ def _record_response(self, pin, integration, span, args, kwargs, resp, error): if "prompt" in self._request_kwarg_params: attrs_dict.update({"prompt": kwargs.get("prompt", "")}) if "image" in self._request_kwarg_params: - image = args[1] if len(args) >= 2 else kwargs.get("image", "") + image = args[0] if len(args) >= 1 else kwargs.get("image", "") attrs_dict.update({"image": image.name.split("/")[-1]}) if "mask" in self._request_kwarg_params: - mask = args[2] if len(args) >= 3 else kwargs.get("mask", "") + mask = args[1] if len(args) >= 2 else kwargs.get("mask", "") attrs_dict.update({"mask": mask.name.split("/")[-1]}) integration.log( span, "info" if error is None else "error", "sampled %s" % self.OPERATION_ID, attrs=attrs_dict @@ -560,12 +564,12 @@ class _ImageEditHook(_ImageHook): ENDPOINT_NAME = "images/edits" OPERATION_ID = "createImageEdit" - def _record_request(self, pin, integration, span, args, kwargs): - super()._record_request(pin, integration, span, args, kwargs) + def _record_request(self, pin, integration, instance, span, args, kwargs): + super()._record_request(pin, integration, instance, span, args, kwargs) if not integration.is_pc_sampled_span: return - image = args[1] if len(args) >= 2 else kwargs.get("image", "") - mask = args[2] if len(args) >= 3 else kwargs.get("mask", "") + image = args[0] if len(args) >= 1 else kwargs.get("image", "") + mask = args[1] if len(args) >= 2 else kwargs.get("mask", "") if image: if hasattr(image, "name"): span.set_tag_str("openai.request.image", integration.trunc(image.name.split("/")[-1])) @@ -584,11 +588,11 @@ class _ImageVariationHook(_ImageHook): ENDPOINT_NAME = "images/variations" OPERATION_ID = "createImageVariation" - def _record_request(self, pin, integration, span, args, kwargs): - super()._record_request(pin, integration, span, args, kwargs) + def _record_request(self, pin, integration, instance, span, args, kwargs): + super()._record_request(pin, integration, instance, span, args, kwargs) if not integration.is_pc_sampled_span: return - image = args[1] if len(args) >= 2 else kwargs.get("image", "") + image = args[0] if len(args) >= 1 else kwargs.get("image", "") if image: if hasattr(image, "name"): span.set_tag_str("openai.request.image", integration.trunc(image.name.split("/")[-1])) @@ -602,11 +606,11 @@ class _BaseAudioHook(_EndpointHook): ENDPOINT_NAME = "audio" HTTP_METHOD_TYPE = "POST" - def _record_request(self, pin, integration, span, args, kwargs): - super()._record_request(pin, integration, span, args, kwargs) + def _record_request(self, pin, integration, instance, span, args, kwargs): + super()._record_request(pin, integration, instance, span, args, kwargs) if not integration.is_pc_sampled_span: return - audio_file = args[2] if len(args) >= 3 else kwargs.get("file", "") + audio_file = args[1] if len(args) >= 2 else kwargs.get("file", "") if audio_file and hasattr(audio_file, "name"): span.set_tag_str("openai.request.filename", integration.trunc(audio_file.name.split("/")[-1])) else: @@ -626,7 +630,7 @@ def _record_response(self, pin, integration, span, args, kwargs, resp, error): if integration.is_pc_sampled_span(span): span.set_tag_str("openai.response.text", integration.trunc(text)) if integration.is_pc_sampled_log(span): - file_input = args[2] if len(args) >= 3 else kwargs.get("file", "") + file_input = args[1] if len(args) >= 2 else kwargs.get("file", "") integration.log( span, "info" if error is None else "error", @@ -685,8 +689,8 @@ class _ModerationHook(_EndpointHook): HTTP_METHOD_TYPE = "POST" OPERATION_ID = "createModeration" - def _record_request(self, pin, integration, span, args, kwargs): - super()._record_request(pin, integration, span, args, kwargs) + def _record_request(self, pin, integration, instance, span, args, kwargs): + super()._record_request(pin, integration, instance, span, args, kwargs) def _record_response(self, pin, integration, span, args, kwargs, resp, error): resp = super()._record_response(pin, integration, span, args, kwargs, resp, error) @@ -718,14 +722,14 @@ class _FileCreateHook(_BaseFileHook): "organization", "user_provided_filename", ) - _request_kwarg_params = ("purpose",) + _request_kwarg_params = ("purpose", "user_provided_filename") _response_attrs = ("id", "bytes", "created_at", "filename", "purpose", "status", "status_details") HTTP_METHOD_TYPE = "POST" OPERATION_ID = "createFile" - def _record_request(self, pin, integration, span, args, kwargs): - super()._record_request(pin, integration, span, args, kwargs) - fp = args[1] if len(args) >= 2 else kwargs.get("file", "") + def _record_request(self, pin, integration, instance, span, args, kwargs): + super()._record_request(pin, integration, instance, span, args, kwargs) + fp = args[0] if len(args) >= 1 else kwargs.get("file", "") if fp and hasattr(fp, "name"): span.set_tag_str("openai.request.filename", fp.name.split("/")[-1]) else: @@ -742,9 +746,9 @@ class _FileDownloadHook(_BaseFileHook): OPERATION_ID = "downloadFile" ENDPOINT_NAME = "files/*/content" - def _record_request(self, pin, integration, span, args, kwargs): - super()._record_request(pin, integration, span, args, kwargs) - span.set_tag_str("openai.request.file_id", args[1] if len(args) >= 2 else kwargs.get("file_id", "")) + def _record_request(self, pin, integration, instance, span, args, kwargs): + super()._record_request(pin, integration, instance, span, args, kwargs) + span.set_tag_str("openai.request.file_id", args[0] if len(args) >= 1 else kwargs.get("file_id", "")) def _record_response(self, pin, integration, span, args, kwargs, resp, error): resp = super()._record_response(pin, integration, span, args, kwargs, resp, error) diff --git a/ddtrace/contrib/internal/openai/patch.py b/ddtrace/contrib/internal/openai/patch.py index d87b06b3aba..3696314acc4 100644 --- a/ddtrace/contrib/internal/openai/patch.py +++ b/ddtrace/contrib/internal/openai/patch.py @@ -6,12 +6,13 @@ from ddtrace import config from ddtrace.contrib.internal.openai import _endpoint_hooks from ddtrace.contrib.internal.openai.utils import _format_openai_api_key +from ddtrace.contrib.trace_utils import unwrap +from ddtrace.contrib.trace_utils import with_traced_module +from ddtrace.contrib.trace_utils import wrap from ddtrace.internal.logger import get_logger -from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.formats import deep_getattr from ddtrace.internal.utils.version import parse_version -from ddtrace.internal.wrapping import wrap from ddtrace.llmobs._integrations import OpenAIIntegration from ddtrace.trace import Pin @@ -39,83 +40,43 @@ def get_version(): OPENAI_VERSION = parse_version(get_version()) -if OPENAI_VERSION >= (1, 0, 0): - _RESOURCES = { - "models.Models": { - "list": _endpoint_hooks._ModelListHook, - "retrieve": _endpoint_hooks._ModelRetrieveHook, - "delete": _endpoint_hooks._ModelDeleteHook, - }, - "completions.Completions": { - "create": _endpoint_hooks._CompletionHook, - }, - "chat.Completions": { - "create": _endpoint_hooks._ChatCompletionHook, - }, - "images.Images": { - "generate": _endpoint_hooks._ImageCreateHook, - "edit": _endpoint_hooks._ImageEditHook, - "create_variation": _endpoint_hooks._ImageVariationHook, - }, - "audio.Transcriptions": { - "create": _endpoint_hooks._AudioTranscriptionHook, - }, - "audio.Translations": { - "create": _endpoint_hooks._AudioTranslationHook, - }, - "embeddings.Embeddings": { - "create": _endpoint_hooks._EmbeddingHook, - }, - "moderations.Moderations": { - "create": _endpoint_hooks._ModerationHook, - }, - "files.Files": { - "create": _endpoint_hooks._FileCreateHook, - "retrieve": _endpoint_hooks._FileRetrieveHook, - "list": _endpoint_hooks._FileListHook, - "delete": _endpoint_hooks._FileDeleteHook, - "retrieve_content": _endpoint_hooks._FileDownloadHook, - }, - } -else: - _RESOURCES = { - "model.Model": { - "list": _endpoint_hooks._ListHook, - "retrieve": _endpoint_hooks._RetrieveHook, - }, - "completion.Completion": { - "create": _endpoint_hooks._CompletionHook, - }, - "chat_completion.ChatCompletion": { - "create": _endpoint_hooks._ChatCompletionHook, - }, - "image.Image": { - "create": _endpoint_hooks._ImageCreateHook, - "create_edit": _endpoint_hooks._ImageEditHook, - "create_variation": _endpoint_hooks._ImageVariationHook, - }, - "audio.Audio": { - "transcribe": _endpoint_hooks._AudioTranscriptionHook, - "translate": _endpoint_hooks._AudioTranslationHook, - }, - "embedding.Embedding": { - "create": _endpoint_hooks._EmbeddingHook, - }, - "moderation.Moderation": { - "create": _endpoint_hooks._ModerationHook, - }, - "file.File": { - # File.list() and File.retrieve() share the same underlying method as Model.list() and Model.retrieve() - # which means they are already wrapped - "create": _endpoint_hooks._FileCreateHook, - "delete": _endpoint_hooks._DeleteHook, - "download": _endpoint_hooks._FileDownloadHook, - }, - } - - -def _wrap_classmethod(obj, wrapper): - wrap(obj.__func__, wrapper) +_RESOURCES = { + "models.Models": { + "list": _endpoint_hooks._ModelListHook, + "retrieve": _endpoint_hooks._ModelRetrieveHook, + "delete": _endpoint_hooks._ModelDeleteHook, + }, + "completions.Completions": { + "create": _endpoint_hooks._CompletionHook, + }, + "chat.Completions": { + "create": _endpoint_hooks._ChatCompletionHook, + }, + "images.Images": { + "generate": _endpoint_hooks._ImageCreateHook, + "edit": _endpoint_hooks._ImageEditHook, + "create_variation": _endpoint_hooks._ImageVariationHook, + }, + "audio.Transcriptions": { + "create": _endpoint_hooks._AudioTranscriptionHook, + }, + "audio.Translations": { + "create": _endpoint_hooks._AudioTranslationHook, + }, + "embeddings.Embeddings": { + "create": _endpoint_hooks._EmbeddingHook, + }, + "moderations.Moderations": { + "create": _endpoint_hooks._ModerationHook, + }, + "files.Files": { + "create": _endpoint_hooks._FileCreateHook, + "retrieve": _endpoint_hooks._FileRetrieveHook, + "list": _endpoint_hooks._FileListHook, + "delete": _endpoint_hooks._FileDeleteHook, + "retrieve_content": _endpoint_hooks._FileDownloadHook, + }, +} def patch(): @@ -125,87 +86,87 @@ def patch(): if getattr(openai, "__datadog_patch", False): return + if OPENAI_VERSION < (1, 0, 0): + log.warning("openai version %s is not supported, please upgrade to openai version 1.0 or later", OPENAI_VERSION) + return + Pin().onto(openai) integration = OpenAIIntegration(integration_config=config.openai, openai=openai) + openai._datadog_integration = integration - if OPENAI_VERSION >= (1, 0, 0): - if OPENAI_VERSION >= (1, 8, 0): - wrap(openai._base_client.SyncAPIClient._process_response, _patched_convert(openai, integration)) - wrap(openai._base_client.AsyncAPIClient._process_response, _patched_convert(openai, integration)) - else: - wrap(openai._base_client.BaseClient._process_response, _patched_convert(openai, integration)) - wrap(openai.OpenAI.__init__, _patched_client_init(openai, integration)) - wrap(openai.AsyncOpenAI.__init__, _patched_client_init(openai, integration)) - wrap(openai.AzureOpenAI.__init__, _patched_client_init(openai, integration)) - wrap(openai.AsyncAzureOpenAI.__init__, _patched_client_init(openai, integration)) - - for resource, method_hook_dict in _RESOURCES.items(): - if deep_getattr(openai.resources, resource) is None: - continue - for method_name, endpoint_hook in method_hook_dict.items(): - sync_method = deep_getattr(openai.resources, "%s.%s" % (resource, method_name)) - async_method = deep_getattr( - openai.resources, "%s.%s" % (".Async".join(resource.split(".")), method_name) - ) - wrap(sync_method, _patched_endpoint(openai, integration, endpoint_hook)) - wrap(async_method, _patched_endpoint_async(openai, integration, endpoint_hook)) + if OPENAI_VERSION >= (1, 8, 0): + wrap(openai, "_base_client.SyncAPIClient._process_response", patched_convert(openai)) + wrap(openai, "_base_client.AsyncAPIClient._process_response", patched_convert(openai)) else: - import openai.api_requestor - - wrap(openai.api_requestor._make_session, _patched_make_session) - wrap(openai.util.convert_to_openai_object, _patched_convert(openai, integration)) - - for resource, method_hook_dict in _RESOURCES.items(): - if deep_getattr(openai.api_resources, resource) is None: - continue - for method_name, endpoint_hook in method_hook_dict.items(): - sync_method = deep_getattr(openai.api_resources, "%s.%s" % (resource, method_name)) - async_method = deep_getattr(openai.api_resources, "%s.a%s" % (resource, method_name)) - _wrap_classmethod(sync_method, _patched_endpoint(openai, integration, endpoint_hook)) - _wrap_classmethod(async_method, _patched_endpoint_async(openai, integration, endpoint_hook)) + wrap(openai, "_base_client.BaseClient._process_response", patched_convert(openai)) + wrap(openai, "OpenAI.__init__", patched_client_init(openai)) + wrap(openai, "AsyncOpenAI.__init__", patched_client_init(openai)) + wrap(openai, "AzureOpenAI.__init__", patched_client_init(openai)) + wrap(openai, "AsyncAzureOpenAI.__init__", patched_client_init(openai)) + + for resource, method_hook_dict in _RESOURCES.items(): + if deep_getattr(openai.resources, resource) is None: + continue + for method_name, endpoint_hook in method_hook_dict.items(): + sync_method = "resources.{}.{}".format(resource, method_name) + async_method = "resources.{}.{}".format(".Async".join(resource.split(".")), method_name) + wrap(openai, sync_method, _patched_endpoint(openai, endpoint_hook)) + wrap(openai, async_method, _patched_endpoint_async(openai, endpoint_hook)) openai.__datadog_patch = True def unpatch(): - # FIXME: add unpatching. The current wrapping.unwrap method requires - # the wrapper function to be provided which we don't keep a reference to. - pass - - -def _patched_client_init(openai, integration): - """ - Patch for `openai.OpenAI/AsyncOpenAI` client init methods to add the client object to the OpenAIIntegration object. - """ + import openai - def patched_client_init(func, args, kwargs): - func(*args, **kwargs) - client = args[0] - integration._client = client - api_key = kwargs.get("api_key") - if api_key is None: - api_key = client.api_key - if api_key is not None: - integration.user_api_key = api_key + if not getattr(openai, "__datadog_patch", False): return - return patched_client_init - + if OPENAI_VERSION < (1, 0, 0): + log.warning("openai version %s is not supported, please upgrade to openai version 1.0 or later", OPENAI_VERSION) + return -def _patched_make_session(func, args, kwargs): - """Patch for `openai.api_requestor._make_session` which sets the service name on the - requests session so that spans from the requests integration will use the service name openai. - This is done so that the service break down will include OpenAI time spent querying the OpenAI backend. + openai.__datadog_patch = False - This should technically be a ``peer.service`` but this concept doesn't exist yet. + if OPENAI_VERSION >= (1, 8, 0): + unwrap(openai._base_client.SyncAPIClient, "_process_response") + unwrap(openai._base_client.AsyncAPIClient, "_process_response") + else: + unwrap(openai._base_client.BaseClient, "_process_response") + unwrap(openai.OpenAI, "__init__") + unwrap(openai.AsyncOpenAI, "__init__") + unwrap(openai.AzureOpenAI, "__init__") + unwrap(openai.AsyncAzureOpenAI, "__init__") + + for resource, method_hook_dict in _RESOURCES.items(): + if deep_getattr(openai.resources, resource) is None: + continue + for method_name, _ in method_hook_dict.items(): + sync_resource = deep_getattr(openai.resources, resource) + async_resource = deep_getattr(openai.resources, ".Async".join(resource.split("."))) + unwrap(sync_resource, method_name) + unwrap(async_resource, method_name) + + delattr(openai, "_datadog_integration") + + +@with_traced_module +def patched_client_init(openai, pin, func, instance, args, kwargs): """ - session = func(*args, **kwargs) - service = schematize_service_name("openai") - Pin.override(session, service=service) - return session - - -def _traced_endpoint(endpoint_hook, integration, pin, args, kwargs): + Patch for `openai.OpenAI/AsyncOpenAI` client init methods to add the client object to the OpenAIIntegration object. + """ + func(*args, **kwargs) + integration = openai._datadog_integration + integration._client = instance + api_key = kwargs.get("api_key") + if api_key is None: + api_key = instance.api_key + if api_key is not None: + integration.user_api_key = api_key + return + + +def _traced_endpoint(endpoint_hook, integration, instance, pin, args, kwargs): span = integration.trace(pin, endpoint_hook.OPERATION_ID) openai_api_key = _format_openai_api_key(kwargs.get("api_key")) err = None @@ -214,7 +175,7 @@ def _traced_endpoint(endpoint_hook, integration, pin, args, kwargs): span.set_tag_str("openai.user.api_key", openai_api_key) try: # Start the hook - hook = endpoint_hook().handle_request(pin, integration, span, args, kwargs) + hook = endpoint_hook().handle_request(pin, integration, instance, span, args, kwargs) hook.send(None) resp, err = yield @@ -238,19 +199,11 @@ def _traced_endpoint(endpoint_hook, integration, pin, args, kwargs): integration.metric(span, "dist", "request.duration", span.duration_ns) -def _patched_endpoint(openai, integration, patch_hook): - def patched_endpoint(func, args, kwargs): - # FIXME: this is a temporary workaround for the fact that our bytecode wrapping seems to modify - # a function keyword argument into a cell when it shouldn't. This is only an issue on - # Python 3.11+. - if sys.version_info >= (3, 11) and kwargs.get("encoding_format", None): - kwargs["encoding_format"] = kwargs["encoding_format"].cell_contents - - pin = Pin._find(openai, args[0]) - if not pin or not pin.enabled(): - return func(*args, **kwargs) - - g = _traced_endpoint(patch_hook, integration, pin, args, kwargs) +def _patched_endpoint(openai, patch_hook): + @with_traced_module + def patched_endpoint(openai, pin, func, instance, args, kwargs): + integration = openai._datadog_integration + g = _traced_endpoint(patch_hook, integration, instance, pin, args, kwargs) g.send(None) resp, err = None, None try: @@ -267,22 +220,15 @@ def patched_endpoint(func, args, kwargs): # This return takes priority over `return resp` return e.value # noqa: B012 - return patched_endpoint + return patched_endpoint(openai) -def _patched_endpoint_async(openai, integration, patch_hook): +def _patched_endpoint_async(openai, patch_hook): # Same as _patched_endpoint but async - async def patched_endpoint(func, args, kwargs): - # FIXME: this is a temporary workaround for the fact that our bytecode wrapping seems to modify - # a function keyword argument into a cell when it shouldn't. This is only an issue on - # Python 3.11+. - if sys.version_info >= (3, 11) and kwargs.get("encoding_format", None): - kwargs["encoding_format"] = kwargs["encoding_format"].cell_contents - - pin = Pin._find(openai, args[0]) - if not pin or not pin.enabled(): - return await func(*args, **kwargs) - g = _traced_endpoint(patch_hook, integration, pin, args, kwargs) + @with_traced_module + async def patched_endpoint(openai, pin, func, instance, args, kwargs): + integration = openai._datadog_integration + g = _traced_endpoint(patch_hook, integration, instance, pin, args, kwargs) g.send(None) resp, err = None, None try: @@ -304,59 +250,54 @@ async def patched_endpoint(func, args, kwargs): # This return takes priority over `return resp` return e.value # noqa: B012 - return patched_endpoint + return patched_endpoint(openai) -def _patched_convert(openai, integration): - def patched_convert(func, args, kwargs): - """Patch convert captures header information in the openai response""" - pin = Pin.get_from(openai) - if not pin or not pin.enabled(): - return func(*args, **kwargs) - - span = pin.tracer.current_span() - if not span: - return func(*args, **kwargs) +@with_traced_module +def patched_convert(openai, pin, func, instance, args, kwargs): + """Patch convert captures header information in the openai response""" + integration = openai._datadog_integration + span = pin.tracer.current_span() + if not span: + return func(*args, **kwargs) - if OPENAI_VERSION < (1, 0, 0): - resp = args[0] - if not isinstance(resp, openai.openai_response.OpenAIResponse): - return func(*args, **kwargs) - headers = resp._headers - else: - resp = kwargs.get("response", {}) - headers = resp.headers - # This function is called for each chunk in the stream. - # To prevent needlessly setting the same tags for each chunk, short-circuit here. - if span.get_tag("openai.organization.name") is not None: + if OPENAI_VERSION < (1, 0, 0): + resp = args[0] + if not isinstance(resp, openai.openai_response.OpenAIResponse): return func(*args, **kwargs) - if headers.get("openai-organization"): - org_name = headers.get("openai-organization") - span.set_tag_str("openai.organization.name", org_name) - - # Gauge total rate limit - if headers.get("x-ratelimit-limit-requests"): - v = headers.get("x-ratelimit-limit-requests") - if v is not None: - integration.metric(span, "gauge", "ratelimit.requests", int(v)) - span.set_metric("openai.organization.ratelimit.requests.limit", int(v)) - if headers.get("x-ratelimit-limit-tokens"): - v = headers.get("x-ratelimit-limit-tokens") - if v is not None: - integration.metric(span, "gauge", "ratelimit.tokens", int(v)) - span.set_metric("openai.organization.ratelimit.tokens.limit", int(v)) - # Gauge and set span info for remaining requests and tokens - if headers.get("x-ratelimit-remaining-requests"): - v = headers.get("x-ratelimit-remaining-requests") - if v is not None: - integration.metric(span, "gauge", "ratelimit.remaining.requests", int(v)) - span.set_metric("openai.organization.ratelimit.requests.remaining", int(v)) - if headers.get("x-ratelimit-remaining-tokens"): - v = headers.get("x-ratelimit-remaining-tokens") - if v is not None: - integration.metric(span, "gauge", "ratelimit.remaining.tokens", int(v)) - span.set_metric("openai.organization.ratelimit.tokens.remaining", int(v)) - + headers = resp._headers + else: + resp = kwargs.get("response", {}) + headers = resp.headers + # This function is called for each chunk in the stream. + # To prevent needlessly setting the same tags for each chunk, short-circuit here. + if span.get_tag("openai.organization.name") is not None: return func(*args, **kwargs) - - return patched_convert + if headers.get("openai-organization"): + org_name = headers.get("openai-organization") + span.set_tag_str("openai.organization.name", org_name) + + # Gauge total rate limit + if headers.get("x-ratelimit-limit-requests"): + v = headers.get("x-ratelimit-limit-requests") + if v is not None: + integration.metric(span, "gauge", "ratelimit.requests", int(v)) + span.set_metric("openai.organization.ratelimit.requests.limit", int(v)) + if headers.get("x-ratelimit-limit-tokens"): + v = headers.get("x-ratelimit-limit-tokens") + if v is not None: + integration.metric(span, "gauge", "ratelimit.tokens", int(v)) + span.set_metric("openai.organization.ratelimit.tokens.limit", int(v)) + # Gauge and set span info for remaining requests and tokens + if headers.get("x-ratelimit-remaining-requests"): + v = headers.get("x-ratelimit-remaining-requests") + if v is not None: + integration.metric(span, "gauge", "ratelimit.remaining.requests", int(v)) + span.set_metric("openai.organization.ratelimit.requests.remaining", int(v)) + if headers.get("x-ratelimit-remaining-tokens"): + v = headers.get("x-ratelimit-remaining-tokens") + if v is not None: + integration.metric(span, "gauge", "ratelimit.remaining.tokens", int(v)) + span.set_metric("openai.organization.ratelimit.tokens.remaining", int(v)) + + return func(*args, **kwargs) diff --git a/ddtrace/contrib/internal/openai/utils.py b/ddtrace/contrib/internal/openai/utils.py index f5dfc10efef..0217b1e61d2 100644 --- a/ddtrace/contrib/internal/openai/utils.py +++ b/ddtrace/contrib/internal/openai/utils.py @@ -89,7 +89,10 @@ def _extract_token_chunk(self, chunk): """Attempt to extract the token chunk (last chunk in the stream) from the streamed response.""" if not self._dd_span._get_ctx_item("_dd.auto_extract_token_chunk"): return - choice = getattr(chunk, "choices", [None])[0] + choices = getattr(chunk, "choices") + if not choices: + return + choice = choices[0] if not getattr(choice, "finish_reason", None): # Only the second-last chunk in the stream with token usage enabled will have finish_reason set return @@ -152,7 +155,10 @@ async def _extract_token_chunk(self, chunk): """Attempt to extract the token chunk (last chunk in the stream) from the streamed response.""" if not self._dd_span._get_ctx_item("_dd.auto_extract_token_chunk"): return - choice = getattr(chunk, "choices", [None])[0] + choices = getattr(chunk, "choices") + if not choices: + return + choice = choices[0] if not getattr(choice, "finish_reason", None): return try: diff --git a/ddtrace/contrib/internal/protobuf/schema_iterator.py b/ddtrace/contrib/internal/protobuf/schema_iterator.py index c783be51312..3c9d2bd4664 100644 --- a/ddtrace/contrib/internal/protobuf/schema_iterator.py +++ b/ddtrace/contrib/internal/protobuf/schema_iterator.py @@ -1,12 +1,13 @@ from google.protobuf.descriptor import FieldDescriptor -# from google._upb._message import Descriptor -from ddtrace._trace.span import Span from ddtrace.ext import schema as SCHEMA_TAGS from ddtrace.internal.datastreams import data_streams_processor from ddtrace.internal.datastreams.schemas.schema_builder import SchemaBuilder from ddtrace.internal.datastreams.schemas.schema_iterator import SchemaIterator +# from google._upb._message import Descriptor +from ddtrace.trace import Span + class SchemaExtractor(SchemaIterator): SERIALIZATION = "serialization" diff --git a/ddtrace/contrib/internal/psycopg/patch.py b/ddtrace/contrib/internal/psycopg/patch.py index 9e24cee6696..b827a697ea2 100644 --- a/ddtrace/contrib/internal/psycopg/patch.py +++ b/ddtrace/contrib/internal/psycopg/patch.py @@ -3,20 +3,13 @@ import os from typing import List # noqa:F401 -from ddtrace import config -from ddtrace.contrib import dbapi -from ddtrace.trace import Pin - - -try: - from ddtrace.contrib.internal.psycopg.async_connection import patched_connect_async_factory - from ddtrace.contrib.internal.psycopg.async_cursor import Psycopg3FetchTracedAsyncCursor - from ddtrace.contrib.internal.psycopg.async_cursor import Psycopg3TracedAsyncCursor -# catch async function syntax errors when using Python<3.7 with no async support -except SyntaxError: - pass from wrapt import wrap_function_wrapper as _w +from ddtrace import config +from ddtrace.contrib import dbapi +from ddtrace.contrib.internal.psycopg.async_connection import patched_connect_async_factory +from ddtrace.contrib.internal.psycopg.async_cursor import Psycopg3FetchTracedAsyncCursor +from ddtrace.contrib.internal.psycopg.async_cursor import Psycopg3TracedAsyncCursor from ddtrace.contrib.internal.psycopg.connection import patched_connect_factory from ddtrace.contrib.internal.psycopg.cursor import Psycopg3FetchTracedCursor from ddtrace.contrib.internal.psycopg.cursor import Psycopg3TracedCursor @@ -29,6 +22,7 @@ from ddtrace.internal.utils.wrappers import unwrap as _u from ddtrace.propagation._database_monitoring import _DBM_Propagator from ddtrace.propagation._database_monitoring import default_sql_injector as _default_sql_injector +from ddtrace.trace import Pin try: diff --git a/ddtrace/contrib/internal/pylibmc/client.py b/ddtrace/contrib/internal/pylibmc/client.py index 5321b533293..5c48e8465f8 100644 --- a/ddtrace/contrib/internal/pylibmc/client.py +++ b/ddtrace/contrib/internal/pylibmc/client.py @@ -51,7 +51,7 @@ def __init__(self, client=None, service=memcached.SERVICE, tracer=None, *args, * super(TracedClient, self).__init__(client) schematized_service = schematize_service_name(service) - # Calling ddtrace.pin.Pin(...) with the `tracer` argument generates a deprecation warning. + # Calling ddtrace.trace.Pin(...) with the `tracer` argument generates a deprecation warning. # Remove this if statement when the `tracer` argument is removed if tracer is ddtrace.tracer: pin = ddtrace.trace.Pin(service=schematized_service) diff --git a/ddtrace/contrib/internal/pymemcache/patch.py b/ddtrace/contrib/internal/pymemcache/patch.py index dd3687cd248..0a8521836e9 100644 --- a/ddtrace/contrib/internal/pymemcache/patch.py +++ b/ddtrace/contrib/internal/pymemcache/patch.py @@ -3,9 +3,9 @@ from ddtrace._trace.pin import _DD_PIN_NAME from ddtrace._trace.pin import _DD_PIN_PROXY_NAME -from ddtrace._trace.pin import Pin from ddtrace.ext import memcached as memcachedx from ddtrace.internal.schema import schematize_service_name +from ddtrace.trace import Pin from .client import WrappedClient from .client import WrappedHashClient diff --git a/ddtrace/contrib/internal/pyramid/trace.py b/ddtrace/contrib/internal/pyramid/trace.py index 9942c673d4e..9b221bd3f09 100644 --- a/ddtrace/contrib/internal/pyramid/trace.py +++ b/ddtrace/contrib/internal/pyramid/trace.py @@ -6,12 +6,8 @@ # project import ddtrace from ddtrace import config -from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY -from ddtrace.constants import _SPAN_MEASURED_KEY -from ddtrace.constants import SPAN_KIND -from ddtrace.contrib import trace_utils -from ddtrace.ext import SpanKind from ddtrace.ext import SpanTypes +from ddtrace.internal import core from ddtrace.internal.constants import COMPONENT from ddtrace.internal.logger import get_logger from ddtrace.internal.schema import schematize_service_name @@ -67,29 +63,30 @@ def trace_tween_factory(handler, registry): service = settings.get(SETTINGS_SERVICE) or schematize_service_name("pyramid") tracer = settings.get(SETTINGS_TRACER) or ddtrace.tracer enabled = asbool(settings.get(SETTINGS_TRACE_ENABLED, tracer.enabled)) - distributed_tracing = asbool(settings.get(SETTINGS_DISTRIBUTED_TRACING, True)) + + # ensure distributed tracing within pyramid settings matches config + config.pyramid.distributed_tracing_enabled = asbool(settings.get(SETTINGS_DISTRIBUTED_TRACING, True)) if enabled: # make a request tracing function def trace_tween(request): - trace_utils.activate_distributed_headers( - tracer, int_config=config.pyramid, request_headers=request.headers, override=distributed_tracing - ) - - span_name = schematize_url_operation("pyramid.request", protocol="http", direction=SpanDirection.INBOUND) - with tracer.trace(span_name, service=service, resource="404", span_type=SpanTypes.WEB) as span: - span.set_tag_str(COMPONENT, config.pyramid.integration_name) - - # set span.kind to the type of operation being performed - span.set_tag_str(SPAN_KIND, SpanKind.SERVER) - - span.set_tag(_SPAN_MEASURED_KEY) - # Configure trace search sample rate + with core.context_with_data( + "pyramid.request", + span_name=schematize_url_operation("pyramid.request", protocol="http", direction=SpanDirection.INBOUND), + span_type=SpanTypes.WEB, + service=service, + resource="404", + tags={}, + tracer=tracer, + distributed_headers=request.headers, + distributed_headers_config=config.pyramid, + headers_case_sensitive=True, # DEV: pyramid is special case maintains separate configuration from config api - analytics_enabled = settings.get(SETTINGS_ANALYTICS_ENABLED) - - if (config._analytics_enabled and analytics_enabled is not False) or analytics_enabled is True: - span.set_tag(_ANALYTICS_SAMPLE_RATE_KEY, settings.get(SETTINGS_ANALYTICS_SAMPLE_RATE, True)) + analytics_enabled=settings.get(SETTINGS_ANALYTICS_ENABLED), + analytics_sample_rate=settings.get(SETTINGS_ANALYTICS_SAMPLE_RATE, True), + ) as ctx, ctx.span as req_span: + ctx.set_item("req_span", req_span) + core.dispatch("web.request.start", (ctx, config.pyramid)) setattr(request, DD_TRACER, tracer) # used to find the tracer in templates response = None @@ -110,8 +107,8 @@ def trace_tween(request): finally: # set request tags if request.matched_route: - span.resource = "{} {}".format(request.method, request.matched_route.name) - span.set_tag_str("pyramid.route.name", request.matched_route.name) + req_span.resource = "{} {}".format(request.method, request.matched_route.name) + req_span.set_tag_str("pyramid.route.name", request.matched_route.name) # set response tags if response: status = response.status_code @@ -119,17 +116,22 @@ def trace_tween(request): else: response_headers = None - trace_utils.set_http_meta( - span, - config.pyramid, - method=request.method, - url=request.path_url, - status_code=status, - query=request.query_string, - request_headers=request.headers, - response_headers=response_headers, - route=request.matched_route.pattern if request.matched_route else None, + core.dispatch( + "web.request.finish", + ( + req_span, + config.pyramid, + request.method, + request.path_url, + status, + request.query_string, + request.headers, + response_headers, + request.matched_route.pattern if request.matched_route else None, + False, + ), ) + return response return trace_tween diff --git a/ddtrace/contrib/internal/pytest/_plugin_v1.py b/ddtrace/contrib/internal/pytest/_plugin_v1.py index fc4982bdc67..d45a925f773 100644 --- a/ddtrace/contrib/internal/pytest/_plugin_v1.py +++ b/ddtrace/contrib/internal/pytest/_plugin_v1.py @@ -452,9 +452,8 @@ def pytest_load_initial_conftests(early_config, parser, args): def pytest_configure(config): deprecate( - "this version of the pytest ddtrace plugin is slated for deprecation", - message="set DD_PYTEST_USE_NEW_PLUGIN_BETA=true in your environment to preview the next version of the plugin.", - removal_version="3.0.0", + "this version of the pytest ddtrace plugin is deprecated", + message="remove _DD_PYTEST_USE_LEGACY_PLUGIN from your environment to use the currently supported version.", category=DDTraceDeprecationWarning, ) unpatch_unittest() diff --git a/ddtrace/contrib/internal/pytest/_plugin_v2.py b/ddtrace/contrib/internal/pytest/_plugin_v2.py index ece2098e05e..79435f94576 100644 --- a/ddtrace/contrib/internal/pytest/_plugin_v2.py +++ b/ddtrace/contrib/internal/pytest/_plugin_v2.py @@ -1,3 +1,4 @@ +import os from pathlib import Path import re import typing as t @@ -7,9 +8,9 @@ from ddtrace import DDTraceDeprecationWarning from ddtrace import config as dd_config from ddtrace._monkey import patch -from ddtrace.contrib.coverage import patch as patch_coverage from ddtrace.contrib.internal.coverage.constants import PCT_COVERED_KEY from ddtrace.contrib.internal.coverage.data import _coverage_data +from ddtrace.contrib.internal.coverage.patch import patch as patch_coverage from ddtrace.contrib.internal.coverage.patch import run_coverage_report from ddtrace.contrib.internal.coverage.utils import _is_coverage_invoked_by_coverage_run from ddtrace.contrib.internal.coverage.utils import _is_coverage_patched @@ -182,7 +183,6 @@ def pytest_load_initial_conftests(early_config, parser, args): try: take_over_logger_stream_handler() - log.warning("This version of the ddtrace pytest plugin is currently in beta.") # Freezegun is proactively patched to avoid it interfering with internal timing patch(freezegun=True) dd_config.test_visibility.itr_skipping_level = ITR_SKIPPING_LEVEL.SUITE @@ -199,14 +199,14 @@ def pytest_load_initial_conftests(early_config, parser, args): def pytest_configure(config: pytest_Config) -> None: - # The only way we end up in pytest_configure is if the environment variable is being used, and logging the warning - # now ensures it shows up in output regardless of the use of the -s flag - deprecate( - "the DD_PYTEST_USE_NEW_PLUGIN_BETA environment variable is deprecated", - message="this preview version of the pytest ddtrace plugin will become the only version.", - removal_version="3.0.0", - category=DDTraceDeprecationWarning, - ) + if os.getenv("DD_PYTEST_USE_NEW_PLUGIN_BETA"): + # Logging the warning at this point ensures it shows up in output regardless of the use of the -s flag. + deprecate( + "the DD_PYTEST_USE_NEW_PLUGIN_BETA environment variable is deprecated", + message="the new pytest plugin is now the default version. No additional configurations are required.", + removal_version="3.0.0", + category=DDTraceDeprecationWarning, + ) try: if is_enabled(config): diff --git a/ddtrace/contrib/internal/pytest/_utils.py b/ddtrace/contrib/internal/pytest/_utils.py index 7e8b2bc2714..f2af0bd47bd 100644 --- a/ddtrace/contrib/internal/pytest/_utils.py +++ b/ddtrace/contrib/internal/pytest/_utils.py @@ -30,7 +30,7 @@ _NODEID_REGEX = re.compile("^(((?P.*)/)?(?P[^/]*?))::(?P.*?)$") -_USE_PLUGIN_V2 = asbool(os.environ.get("DD_PYTEST_USE_NEW_PLUGIN_BETA", "false")) +_USE_PLUGIN_V2 = not asbool(os.environ.get("_DD_PYTEST_USE_LEGACY_PLUGIN", "false")) class _PYTEST_STATUS: diff --git a/ddtrace/contrib/internal/pytest/plugin.py b/ddtrace/contrib/internal/pytest/plugin.py index 52cf54a6f9c..23bf58d7dcb 100644 --- a/ddtrace/contrib/internal/pytest/plugin.py +++ b/ddtrace/contrib/internal/pytest/plugin.py @@ -18,10 +18,10 @@ from ddtrace import config from ddtrace.appsec._iast._pytest_plugin import ddtrace_iast # noqa:F401 -from ddtrace.appsec._iast._utils import _is_iast_enabled from ddtrace.contrib.internal.pytest._utils import _USE_PLUGIN_V2 from ddtrace.contrib.internal.pytest._utils import _extract_span from ddtrace.contrib.internal.pytest._utils import _pytest_version_supports_itr +from ddtrace.settings.asm import config as asm_config # pytest default settings @@ -93,7 +93,7 @@ def pytest_addoption(parser): parser.addini("no-ddtrace", DDTRACE_HELP_MSG, type="bool") parser.addini("ddtrace-patch-all", PATCH_ALL_HELP_MSG, type="bool") parser.addini("ddtrace-include-class-name", DDTRACE_INCLUDE_CLASS_HELP_MSG, type="bool") - if _is_iast_enabled(): + if asm_config._iast_enabled: from ddtrace.appsec._iast import _iast_pytest_activation _iast_pytest_activation() @@ -145,7 +145,7 @@ def pytest_addhooks(pluginmanager): @pytest.fixture(scope="function") def ddspan(request): - """Return the :class:`ddtrace._trace.span.Span` instance associated with the + """Return the :class:`ddtrace.trace.Span` instance associated with the current test when Datadog CI Visibility is enabled. """ from ddtrace.internal.ci_visibility import CIVisibility as _CIVisibility diff --git a/ddtrace/contrib/internal/redis/patch.py b/ddtrace/contrib/internal/redis/patch.py index 28beeb4d979..78d0ceaf22a 100644 --- a/ddtrace/contrib/internal/redis/patch.py +++ b/ddtrace/contrib/internal/redis/patch.py @@ -6,9 +6,9 @@ from ddtrace import config from ddtrace._trace.utils_redis import _instrument_redis_cmd from ddtrace._trace.utils_redis import _instrument_redis_execute_pipeline +from ddtrace.contrib.internal.redis_utils import ROW_RETURNING_COMMANDS +from ddtrace.contrib.internal.redis_utils import determine_row_count from ddtrace.contrib.internal.trace_utils import unwrap -from ddtrace.contrib.redis_utils import ROW_RETURNING_COMMANDS -from ddtrace.contrib.redis_utils import determine_row_count from ddtrace.internal import core from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.utils.formats import CMD_MAX_LEN diff --git a/ddtrace/contrib/internal/requests/connection.py b/ddtrace/contrib/internal/requests/connection.py index c6d7706ef54..0b58f8b6dc5 100644 --- a/ddtrace/contrib/internal/requests/connection.py +++ b/ddtrace/contrib/internal/requests/connection.py @@ -75,7 +75,7 @@ def _wrap_send(func, instance, args, kwargs): hostname, path = _extract_hostname_and_path(url) host_without_port = hostname.split(":")[0] if hostname is not None else None - cfg = config.get_from(instance) + cfg = config._get_from(instance) service = None if cfg["split_by_domain"] and hostname: service = hostname @@ -97,7 +97,7 @@ def _wrap_send(func, instance, args, kwargs): # Configure trace search sample rate # DEV: analytics enabled on per-session basis - cfg = config.get_from(instance) + cfg = config._get_from(instance) analytics_enabled = cfg.get("analytics_enabled") if analytics_enabled: span.set_tag(_ANALYTICS_SAMPLE_RATE_KEY, cfg.get("analytics_sample_rate", True)) diff --git a/ddtrace/contrib/internal/requests/patch.py b/ddtrace/contrib/internal/requests/patch.py index 6485bb7aed8..eab51c2c0a4 100644 --- a/ddtrace/contrib/internal/requests/patch.py +++ b/ddtrace/contrib/internal/requests/patch.py @@ -14,6 +14,7 @@ from ddtrace.trace import Pin from .connection import _wrap_send +from .session import TracedSession # requests default settings @@ -27,6 +28,10 @@ }, ) +# always patch our `TracedSession` when imported +_w(TracedSession, "send", _wrap_send) +Pin(_config=config.requests).onto(TracedSession) + def get_version(): # type: () -> str diff --git a/ddtrace/contrib/internal/requests/session.py b/ddtrace/contrib/internal/requests/session.py index 783dda4ff7a..eaa9c9e1be3 100644 --- a/ddtrace/contrib/internal/requests/session.py +++ b/ddtrace/contrib/internal/requests/session.py @@ -1,10 +1,4 @@ import requests -from wrapt import wrap_function_wrapper as _w - -from ddtrace import config -from ddtrace.trace import Pin - -from .connection import _wrap_send class TracedSession(requests.Session): @@ -14,8 +8,3 @@ class TracedSession(requests.Session): """ pass - - -# always patch our `TracedSession` when imported -_w(TracedSession, "send", _wrap_send) -Pin(_config=config.requests).onto(TracedSession) diff --git a/ddtrace/contrib/internal/sanic/patch.py b/ddtrace/contrib/internal/sanic/patch.py index 5d105cf2f32..1babf7d44a0 100644 --- a/ddtrace/contrib/internal/sanic/patch.py +++ b/ddtrace/contrib/internal/sanic/patch.py @@ -4,14 +4,10 @@ import wrapt from wrapt import wrap_function_wrapper as _w -import ddtrace from ddtrace import config -from ddtrace.constants import _ANALYTICS_SAMPLE_RATE_KEY -from ddtrace.constants import SPAN_KIND from ddtrace.contrib import trace_utils -from ddtrace.ext import SpanKind from ddtrace.ext import SpanTypes -from ddtrace.internal.constants import COMPONENT +from ddtrace.internal import core from ddtrace.internal.logger import get_logger from ddtrace.internal.schema import schematize_service_name from ddtrace.internal.schema import schematize_url_operation @@ -47,7 +43,10 @@ def update_span(span, response): # and so use 500 status_code = getattr(response, "status", 500) response_headers = getattr(response, "headers", None) - trace_utils.set_http_meta(span, config.sanic, status_code=status_code, response_headers=response_headers) + + core.dispatch( + "web.request.finish", (span, config.sanic, None, None, status_code, None, None, response_headers, None, False) + ) def _wrap_response_callback(span, callback): @@ -200,31 +199,35 @@ def _create_sanic_request_span(request): headers = request.headers.copy() - trace_utils.activate_distributed_headers(ddtrace.tracer, int_config=config.sanic, request_headers=headers) - - span = pin.tracer.trace( - schematize_url_operation("sanic.request", protocol="http", direction=SpanDirection.INBOUND), + with core.context_with_data( + "sanic.request", + span_name=schematize_url_operation("sanic.request", protocol="http", direction=SpanDirection.INBOUND), + span_type=SpanTypes.WEB, service=trace_utils.int_service(None, config.sanic), resource=resource, - span_type=SpanTypes.WEB, - ) - span.set_tag_str(COMPONENT, config.sanic.integration_name) + tags={}, + pin=pin, + distributed_headers=headers, + distributed_headers_config=config.sanic, + headers_case_sensitive=True, + analytics_sample_rate=config.sanic.get_analytics_sample_rate(use_global_config=True), + ) as ctx: + req_span = ctx.span - # set span.kind to the type of operation being performed - span.set_tag_str(SPAN_KIND, SpanKind.SERVER) + ctx.set_item("req_span", req_span) + core.dispatch("web.request.start", (ctx, config.sanic)) - sample_rate = config.sanic.get_analytics_sample_rate(use_global_config=True) - if sample_rate is not None: - span.set_tag(_ANALYTICS_SAMPLE_RATE_KEY, sample_rate) + method = request.method + url = "{scheme}://{host}{path}".format(scheme=request.scheme, host=request.host, path=request.path) + query_string = request.query_string + if isinstance(query_string, bytes): + query_string = query_string.decode() - method = request.method - url = "{scheme}://{host}{path}".format(scheme=request.scheme, host=request.host, path=request.path) - query_string = request.query_string - if isinstance(query_string, bytes): - query_string = query_string.decode() - trace_utils.set_http_meta(span, config.sanic, method=method, url=url, query=query_string, request_headers=headers) + core.dispatch( + "web.request.finish", (req_span, config.sanic, method, url, None, query_string, headers, None, None, False) + ) - return span + return req_span async def sanic_http_lifecycle_handle(request): @@ -273,7 +276,7 @@ async def sanic_http_lifecycle_exception(request, exception): # Do not attach exception for exceptions not considered as errors # ex: Http 400s # DEV: We still need to set `__dd_span_call_finish` below - if not hasattr(exception, "status_code") or config.http_server.is_error_code(exception.status_code): + if not hasattr(exception, "status_code") or config._http_server.is_error_code(exception.status_code): ex_type = type(exception) ex_tb = getattr(exception, "__traceback__", None) span.set_exc_info(ex_type, exception, ex_tb) diff --git a/ddtrace/contrib/internal/selenium/patch.py b/ddtrace/contrib/internal/selenium/patch.py index 5e8d2ed87bc..fc229011fd2 100644 --- a/ddtrace/contrib/internal/selenium/patch.py +++ b/ddtrace/contrib/internal/selenium/patch.py @@ -7,7 +7,7 @@ from ddtrace import config from ddtrace.internal.logger import get_logger from ddtrace.internal.wrapping.context import WrappingContext -import ddtrace.tracer +from ddtrace.trace import tracer if t.TYPE_CHECKING: @@ -87,7 +87,7 @@ def __return__(self, value: T) -> T: class SeleniumGetWrappingContext(SeleniumWrappingContextBase): def _handle_return(self) -> None: - root_span = ddtrace.tracer.current_root_span() + root_span = tracer.current_root_span() test_trace_id = root_span.trace_id if root_span is None or root_span.get_tag("type") != "test": @@ -127,7 +127,7 @@ def _handle_return(self) -> None: class SeleniumQuitWrappingContext(SeleniumWrappingContextBase): def _handle_enter(self) -> None: - root_span = ddtrace.tracer.current_root_span() + root_span = tracer.current_root_span() if root_span is None or root_span.get_tag("type") != "test": return diff --git a/ddtrace/contrib/internal/sqlalchemy/engine.py b/ddtrace/contrib/internal/sqlalchemy/engine.py index 6e123c97db8..a3dcb324700 100644 --- a/ddtrace/contrib/internal/sqlalchemy/engine.py +++ b/ddtrace/contrib/internal/sqlalchemy/engine.py @@ -2,7 +2,7 @@ To trace sqlalchemy queries, add instrumentation to the engine class or instance you are using:: - from ddtrace import tracer + from ddtrace.trace import tracer from ddtrace.contrib.sqlalchemy import trace_engine from sqlalchemy import create_engine @@ -37,7 +37,7 @@ def trace_engine(engine, tracer=None, service=None): Add tracing instrumentation to the given sqlalchemy engine or instance. :param sqlalchemy.Engine engine: a SQLAlchemy engine class or instance - :param ddtrace.Tracer tracer: a tracer instance. will default to the global + :param ddtrace.trace.Tracer tracer: a tracer instance. will default to the global :param str service: the name of the service to trace. """ tracer = tracer or ddtrace.tracer # by default use global @@ -67,7 +67,7 @@ def __init__(self, tracer, service, engine): self.name = schematize_database_operation("%s.query" % self.vendor, database_provider=self.vendor) # attach the PIN - # Calling ddtrace.pin.Pin(...) with the `tracer` argument generates a deprecation warning. + # Calling ddtrace.trace.Pin(...) with the `tracer` argument generates a deprecation warning. # Remove this if statement when the `tracer` argument is removed if self.tracer is ddtrace.tracer: Pin(service=self.service).onto(engine) diff --git a/ddtrace/contrib/internal/sqlite3/patch.py b/ddtrace/contrib/internal/sqlite3/patch.py index f47906146bc..03c79789661 100644 --- a/ddtrace/contrib/internal/sqlite3/patch.py +++ b/ddtrace/contrib/internal/sqlite3/patch.py @@ -1,7 +1,6 @@ import os import sqlite3 import sqlite3.dbapi2 -import sys import wrapt @@ -97,12 +96,9 @@ def execute(self, *args, **kwargs): # sqlite has a few extra sugar functions return self.cursor().execute(*args, **kwargs) - # backup was added in Python 3.7 - if sys.version_info >= (3, 7, 0): - - def backup(self, target, *args, **kwargs): - # sqlite3 checks the type of `target`, it cannot be a wrapped connection - # https://github.com/python/cpython/blob/4652093e1b816b78e9a585d671a807ce66427417/Modules/_sqlite/connection.c#L1897-L1899 - if isinstance(target, TracedConnection): - target = target.__wrapped__ - return self.__wrapped__.backup(target, *args, **kwargs) + def backup(self, target, *args, **kwargs): + # sqlite3 checks the type of `target`, it cannot be a wrapped connection + # https://github.com/python/cpython/blob/4652093e1b816b78e9a585d671a807ce66427417/Modules/_sqlite/connection.c#L1897-L1899 + if isinstance(target, TracedConnection): + target = target.__wrapped__ + return self.__wrapped__.backup(target, *args, **kwargs) diff --git a/ddtrace/contrib/internal/starlette/patch.py b/ddtrace/contrib/internal/starlette/patch.py index e2ea8f9f4dc..a48e11cd534 100644 --- a/ddtrace/contrib/internal/starlette/patch.py +++ b/ddtrace/contrib/internal/starlette/patch.py @@ -13,8 +13,6 @@ from wrapt import wrap_function_wrapper as _w from ddtrace import config -from ddtrace._trace.span import Span # noqa:F401 -from ddtrace.appsec._iast import _is_iast_enabled from ddtrace.contrib import trace_utils from ddtrace.contrib.asgi import TraceMiddleware from ddtrace.contrib.internal.trace_utils import with_traced_module @@ -27,7 +25,9 @@ from ddtrace.internal.utils import get_blocked from ddtrace.internal.utils import set_argument_value from ddtrace.internal.utils.wrappers import unwrap as _u +from ddtrace.settings.asm import config as asm_config from ddtrace.trace import Pin +from ddtrace.trace import Span # noqa:F401 from ddtrace.vendor.packaging.version import parse as parse_version @@ -168,7 +168,7 @@ def traced_handler(wrapped, instance, args, kwargs): break if request_spans: - if _is_iast_enabled(): + if asm_config._iast_enabled: from ddtrace.appsec._iast._patch import _iast_instrument_starlette_scope _iast_instrument_starlette_scope(scope) diff --git a/ddtrace/contrib/internal/subprocess/patch.py b/ddtrace/contrib/internal/subprocess/patch.py index 80d05b107bb..2d66edd4737 100644 --- a/ddtrace/contrib/internal/subprocess/patch.py +++ b/ddtrace/contrib/internal/subprocess/patch.py @@ -327,6 +327,8 @@ def unpatch() -> None: @trace_utils.with_traced_module def _traced_ossystem(module, pin, wrapped, instance, args, kwargs): try: + if asm_config._bypass_instrumentation_for_waf: + return wrapped(*args, **kwargs) if isinstance(args[0], str): for callback in _STR_CALLBACKS.values(): callback(args[0]) @@ -393,6 +395,8 @@ def _traced_osspawn(module, pin, wrapped, instance, args, kwargs): @trace_utils.with_traced_module def _traced_subprocess_init(module, pin, wrapped, instance, args, kwargs): try: + if asm_config._bypass_instrumentation_for_waf: + return wrapped(*args, **kwargs) cmd_args = args[0] if len(args) else kwargs["args"] if isinstance(cmd_args, (list, tuple, str)): if kwargs.get("shell", False): @@ -425,6 +429,8 @@ def _traced_subprocess_init(module, pin, wrapped, instance, args, kwargs): @trace_utils.with_traced_module def _traced_subprocess_wait(module, pin, wrapped, instance, args, kwargs): try: + if asm_config._bypass_instrumentation_for_waf: + return wrapped(*args, **kwargs) binary = core.get_item("subprocess_popen_binary") with pin.tracer.trace(COMMANDS.SPAN_NAME, resource=binary, span_type=SpanTypes.SYSTEM) as span: diff --git a/ddtrace/contrib/internal/tornado/application.py b/ddtrace/contrib/internal/tornado/application.py index 993a6d27c46..f36857b81b1 100644 --- a/ddtrace/contrib/internal/tornado/application.py +++ b/ddtrace/contrib/internal/tornado/application.py @@ -56,7 +56,7 @@ def tracer_config(__init__, app, args, kwargs): # configure the PIN object for template rendering # Required for backwards compatibility. Remove the else clause when - # the `ddtrace.Pin` object no longer accepts the Pin argument. + # the `ddtrace.trace.Pin` object no longer accepts the Pin argument. if tracer is ddtrace.tracer: ddtrace.trace.Pin(service=service).onto(template) else: diff --git a/ddtrace/contrib/internal/tornado/handlers.py b/ddtrace/contrib/internal/tornado/handlers.py index 3c4a046bfb9..f858e33ee29 100644 --- a/ddtrace/contrib/internal/tornado/handlers.py +++ b/ddtrace/contrib/internal/tornado/handlers.py @@ -140,7 +140,7 @@ def log_exception(func, handler, args, kwargs): # is not a 2xx. In this case we want to check the status code to be sure that # only 5xx are traced as errors, while any other HTTPError exception is handled as # usual. - if config.http_server.is_error_code(value.status_code): + if config._http_server.is_error_code(value.status_code): current_span.set_exc_info(*args) else: # any other uncaught exception should be reported as error diff --git a/ddtrace/contrib/internal/tornado/stack_context.py b/ddtrace/contrib/internal/tornado/stack_context.py index 7f0910eedeb..a6978c7f25c 100644 --- a/ddtrace/contrib/internal/tornado/stack_context.py +++ b/ddtrace/contrib/internal/tornado/stack_context.py @@ -3,7 +3,7 @@ from ddtrace._trace.provider import BaseContextProvider from ddtrace._trace.provider import DefaultContextProvider -from ddtrace.span import Span +from ddtrace.trace import Span # tornado.stack_context deprecated in Tornado 5 removed in Tornado 6 diff --git a/ddtrace/contrib/internal/trace_utils.py b/ddtrace/contrib/internal/trace_utils.py index 56901934e83..90cf4e44ae0 100644 --- a/ddtrace/contrib/internal/trace_utils.py +++ b/ddtrace/contrib/internal/trace_utils.py @@ -40,9 +40,9 @@ if TYPE_CHECKING: # pragma: no cover - from ddtrace import Span # noqa:F401 - from ddtrace import Tracer # noqa:F401 from ddtrace.settings import IntegrationConfig # noqa:F401 + from ddtrace.trace import Span # noqa:F401 + from ddtrace.trace import Tracer # noqa:F401 log = get_logger(__name__) @@ -130,7 +130,7 @@ def _store_headers(headers, span, integration_config, request_or_response): :param headers: A dict of http headers to be stored in the span :type headers: dict or list :param span: The Span instance where tags will be stored - :type span: ddtrace._trace.span.Span + :type span: ddtrace.trace.Span :param integration_config: An integration specific config object. :type integration_config: ddtrace.settings.IntegrationConfig """ @@ -257,7 +257,7 @@ def _store_request_headers(headers, span, integration_config): :param headers: All the request's http headers, will be filtered through the whitelist :type headers: dict or list :param span: The Span instance where tags will be stored - :type span: ddtrace.Span + :type span: ddtrace.trace.Span :param integration_config: An integration specific config object. :type integration_config: ddtrace.settings.IntegrationConfig """ @@ -271,7 +271,7 @@ def _store_response_headers(headers, span, integration_config): :param headers: All the response's http headers, will be filtered through the whitelist :type headers: dict or list :param span: The Span instance where tags will be stored - :type span: ddtrace.Span + :type span: ddtrace.trace.Span :param integration_config: An integration specific config object. :type integration_config: ddtrace.settings.IntegrationConfig """ @@ -485,7 +485,7 @@ def set_http_meta( log.debug("failed to convert http status code %r to int", status_code) else: span.set_tag_str(http.STATUS_CODE, str(status_code)) - if config.http_server.is_error_code(int_status_code): + if config._http_server.is_error_code(int_status_code): span.error = 1 if status_msg is not None: @@ -639,6 +639,7 @@ def set_user( session_id=None, # type: Optional[str] propagate=False, # type bool span=None, # type: Optional[Span] + may_block=True, # type: bool ): # type: (...) -> None """Set user tags. @@ -666,7 +667,7 @@ def set_user( if session_id: span.set_tag_str(user.SESSION_ID, session_id) - if asm_config._asm_enabled: + if may_block and asm_config._asm_enabled: exc = core.dispatch_with_results("set_user_for_asm", [tracer, user_id]).block_user.exception if exc: raise exc diff --git a/ddtrace/contrib/internal/unittest/patch.py b/ddtrace/contrib/internal/unittest/patch.py index 74ce8d1d6a0..3f808090f55 100644 --- a/ddtrace/contrib/internal/unittest/patch.py +++ b/ddtrace/contrib/internal/unittest/patch.py @@ -129,7 +129,7 @@ def _is_marked_as_unskippable(test_object) -> bool: ) -def _update_skipped_elements_and_set_tags(test_module_span: ddtrace.Span, test_session_span: ddtrace.Span): +def _update_skipped_elements_and_set_tags(test_module_span: ddtrace.trace.Span, test_session_span: ddtrace.trace.Span): global _global_skipped_elements _global_skipped_elements += 1 @@ -141,7 +141,7 @@ def _update_skipped_elements_and_set_tags(test_module_span: ddtrace.Span, test_s test_session_span.set_tag_str(test.ITR_DD_CI_ITR_TESTS_SKIPPED, "true") -def _store_test_span(item, span: ddtrace.Span): +def _store_test_span(item, span: ddtrace.trace.Span): """Store datadog span at `unittest` test instance.""" item._datadog_span = span @@ -172,7 +172,7 @@ def _is_test(item) -> bool: return True -def _extract_span(item) -> Union[ddtrace.Span, None]: +def _extract_span(item) -> Union[ddtrace.trace.Span, None]: return getattr(item, "_datadog_span", None) @@ -187,23 +187,23 @@ def _extract_test_method_name(test_object) -> str: return getattr(test_object, "_testMethodName", "") -def _extract_session_span() -> Union[ddtrace.Span, None]: +def _extract_session_span() -> Union[ddtrace.trace.Span, None]: return getattr(_CIVisibility, "_datadog_session_span", None) -def _extract_module_span(module_identifier: str) -> Union[ddtrace.Span, None]: +def _extract_module_span(module_identifier: str) -> Union[ddtrace.trace.Span, None]: if hasattr(_CIVisibility, "_unittest_data") and module_identifier in _CIVisibility._unittest_data["modules"]: return _CIVisibility._unittest_data["modules"][module_identifier].get("module_span") return None -def _extract_suite_span(suite_identifier: str) -> Union[ddtrace.Span, None]: +def _extract_suite_span(suite_identifier: str) -> Union[ddtrace.trace.Span, None]: if hasattr(_CIVisibility, "_unittest_data") and suite_identifier in _CIVisibility._unittest_data["suites"]: return _CIVisibility._unittest_data["suites"][suite_identifier].get("suite_span") return None -def _update_status_item(item: ddtrace.Span, status: str): +def _update_status_item(item: ddtrace.trace.Span, status: str): """ Sets the status for each Span implementing the test FAIL logic override. """ @@ -266,7 +266,7 @@ def _generate_session_resource(test_command: str) -> str: return "{}".format(test_command) -def _set_test_skipping_tags_to_span(span: ddtrace.Span): +def _set_test_skipping_tags_to_span(span: ddtrace.trace.Span): span.set_tag_str(test.ITR_TEST_SKIPPING_ENABLED, "true") span.set_tag_str(test.ITR_TEST_SKIPPING_TYPE, TEST) span.set_tag_str(test.ITR_TEST_SKIPPING_TESTS_SKIPPED, "false") @@ -368,7 +368,10 @@ def _finish_remaining_suites_and_modules(seen_suites: dict, seen_modules: dict): def _update_remaining_suites_and_modules( - test_module_suite_path: str, test_module_path: str, test_module_span: ddtrace.Span, test_suite_span: ddtrace.Span + test_module_suite_path: str, + test_module_path: str, + test_module_span: ddtrace.trace.Span, + test_suite_span: ddtrace.trace.Span, ): """ Updates the remaining test suite and test counter and finishes spans when these have finished their execution. @@ -384,7 +387,7 @@ def _update_remaining_suites_and_modules( _finish_span(test_module_span) -def _update_test_skipping_count_span(span: ddtrace.Span): +def _update_test_skipping_count_span(span: ddtrace.trace.Span): if _CIVisibility.test_skipping_enabled(): span.set_metric(test.ITR_TEST_SKIPPING_COUNT, _global_skipped_elements) @@ -622,7 +625,7 @@ def collect_text_test_runner_session(func, instance: unittest.TestSuite, args: t return result -def _start_test_session_span(instance) -> ddtrace.Span: +def _start_test_session_span(instance) -> ddtrace.trace.Span: """ Starts a test session span and sets the required tags for a `unittest` session instance. """ @@ -663,7 +666,7 @@ def _start_test_session_span(instance) -> ddtrace.Span: return test_session_span -def _start_test_module_span(instance) -> ddtrace.Span: +def _start_test_module_span(instance) -> ddtrace.trace.Span: """ Starts a test module span and sets the required tags for a `unittest` module instance. """ @@ -706,7 +709,7 @@ def _start_test_module_span(instance) -> ddtrace.Span: return test_module_span -def _start_test_suite_span(instance) -> ddtrace.Span: +def _start_test_suite_span(instance) -> ddtrace.trace.Span: """ Starts a test suite span and sets the required tags for a `unittest` suite instance. """ @@ -742,7 +745,7 @@ def _start_test_suite_span(instance) -> ddtrace.Span: return test_suite_span -def _start_test_span(instance, test_suite_span: ddtrace.Span) -> ddtrace.Span: +def _start_test_span(instance, test_suite_span: ddtrace.trace.Span) -> ddtrace.trace.Span: """ Starts a test span and sets the required tags for a `unittest` test instance. """ @@ -787,7 +790,7 @@ def _start_test_span(instance, test_suite_span: ddtrace.Span) -> ddtrace.Span: return span -def _finish_span(current_span: ddtrace.Span): +def _finish_span(current_span: ddtrace.trace.Span): """ Finishes active span and populates span status upwards """ diff --git a/ddtrace/contrib/internal/wsgi/wsgi.py b/ddtrace/contrib/internal/wsgi/wsgi.py index 44e1646f5f9..f5558792061 100644 --- a/ddtrace/contrib/internal/wsgi/wsgi.py +++ b/ddtrace/contrib/internal/wsgi/wsgi.py @@ -11,10 +11,10 @@ from typing import Mapping # noqa:F401 from typing import Optional # noqa:F401 - from ddtrace import Span # noqa:F401 - from ddtrace import Tracer # noqa:F401 from ddtrace.settings import Config # noqa:F401 from ddtrace.trace import Pin # noqa:F401 + from ddtrace.trace import Span # noqa:F401 + from ddtrace.trace import Tracer # noqa:F401 from urllib.parse import quote diff --git a/ddtrace/contrib/jinja2/constants.py b/ddtrace/contrib/jinja2/constants.py deleted file mode 100644 index 95f62db4948..00000000000 --- a/ddtrace/contrib/jinja2/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.jinja2.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/jinja2/patch.py b/ddtrace/contrib/jinja2/patch.py deleted file mode 100644 index 0571ce76584..00000000000 --- a/ddtrace/contrib/jinja2/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.jinja2.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/kafka/patch.py b/ddtrace/contrib/kafka/patch.py deleted file mode 100644 index 4d8f147b136..00000000000 --- a/ddtrace/contrib/kafka/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.kafka.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/kombu/constants.py b/ddtrace/contrib/kombu/constants.py deleted file mode 100644 index ee90cc3280e..00000000000 --- a/ddtrace/contrib/kombu/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.kombu.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/kombu/patch.py b/ddtrace/contrib/kombu/patch.py deleted file mode 100644 index f071da4a099..00000000000 --- a/ddtrace/contrib/kombu/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.kombu.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/kombu/utils.py b/ddtrace/contrib/kombu/utils.py deleted file mode 100644 index 3a36504d113..00000000000 --- a/ddtrace/contrib/kombu/utils.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.kombu.utils import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/langchain/constants.py b/ddtrace/contrib/langchain/constants.py deleted file mode 100644 index 278aec37d09..00000000000 --- a/ddtrace/contrib/langchain/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.langchain.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/langchain/patch.py b/ddtrace/contrib/langchain/patch.py deleted file mode 100644 index 8e5dea45caa..00000000000 --- a/ddtrace/contrib/langchain/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.langchain.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/langgraph/__init__.py b/ddtrace/contrib/langgraph/__init__.py deleted file mode 100644 index 4b3696ad803..00000000000 --- a/ddtrace/contrib/langgraph/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -from ddtrace.internal.utils.importlib import require_modules - - -required_modules = ["langgraph"] - -with require_modules(required_modules) as missing_modules: - if not missing_modules: - from ddtrace.contrib.internal.langgraph.patch import get_version - from ddtrace.contrib.internal.langgraph.patch import patch - from ddtrace.contrib.internal.langgraph.patch import unpatch - - __all__ = ["patch", "unpatch", "get_version"] diff --git a/ddtrace/contrib/logbook/patch.py b/ddtrace/contrib/logbook/patch.py deleted file mode 100644 index 1974fe67c3d..00000000000 --- a/ddtrace/contrib/logbook/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.logbook.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/logging/constants.py b/ddtrace/contrib/logging/constants.py deleted file mode 100644 index 7a05621eacc..00000000000 --- a/ddtrace/contrib/logging/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.logging.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/logging/patch.py b/ddtrace/contrib/logging/patch.py deleted file mode 100644 index 9615ee75ecb..00000000000 --- a/ddtrace/contrib/logging/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.logging.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/loguru/patch.py b/ddtrace/contrib/loguru/patch.py deleted file mode 100644 index 55e9d26c596..00000000000 --- a/ddtrace/contrib/loguru/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.loguru.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/mako/constants.py b/ddtrace/contrib/mako/constants.py deleted file mode 100644 index 6ad269ab24e..00000000000 --- a/ddtrace/contrib/mako/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.mako.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/mako/patch.py b/ddtrace/contrib/mako/patch.py deleted file mode 100644 index 4bc20f9599b..00000000000 --- a/ddtrace/contrib/mako/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.mako.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/mariadb/patch.py b/ddtrace/contrib/mariadb/patch.py deleted file mode 100644 index 5ba40f90428..00000000000 --- a/ddtrace/contrib/mariadb/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.mariadb.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/molten/patch.py b/ddtrace/contrib/molten/patch.py deleted file mode 100644 index f629af73de9..00000000000 --- a/ddtrace/contrib/molten/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.molten.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/molten/wrappers.py b/ddtrace/contrib/molten/wrappers.py deleted file mode 100644 index e2b406b12e7..00000000000 --- a/ddtrace/contrib/molten/wrappers.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.molten.wrappers import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/mongoengine/patch.py b/ddtrace/contrib/mongoengine/patch.py deleted file mode 100644 index 13366feaf22..00000000000 --- a/ddtrace/contrib/mongoengine/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.mongoengine.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/mongoengine/trace.py b/ddtrace/contrib/mongoengine/trace.py deleted file mode 100644 index ad4da294cb3..00000000000 --- a/ddtrace/contrib/mongoengine/trace.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.mongoengine.trace import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/mysql/patch.py b/ddtrace/contrib/mysql/patch.py deleted file mode 100644 index cb347d404ec..00000000000 --- a/ddtrace/contrib/mysql/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.mysql.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/mysqldb/patch.py b/ddtrace/contrib/mysqldb/patch.py deleted file mode 100644 index 2c1c69ab8c2..00000000000 --- a/ddtrace/contrib/mysqldb/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.mysqldb.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/openai/_endpoint_hooks.py b/ddtrace/contrib/openai/_endpoint_hooks.py deleted file mode 100644 index daf356a9c7a..00000000000 --- a/ddtrace/contrib/openai/_endpoint_hooks.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.openai._endpoint_hooks import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/openai/patch.py b/ddtrace/contrib/openai/patch.py deleted file mode 100644 index 049313de0d0..00000000000 --- a/ddtrace/contrib/openai/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.openai.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/openai/utils.py b/ddtrace/contrib/openai/utils.py deleted file mode 100644 index 0e7e5f4ba87..00000000000 --- a/ddtrace/contrib/openai/utils.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.openai.utils import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/psycopg/async_connection.py b/ddtrace/contrib/psycopg/async_connection.py deleted file mode 100644 index a9524778749..00000000000 --- a/ddtrace/contrib/psycopg/async_connection.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.psycopg.async_connection import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/psycopg/async_cursor.py b/ddtrace/contrib/psycopg/async_cursor.py deleted file mode 100644 index 937eac7c586..00000000000 --- a/ddtrace/contrib/psycopg/async_cursor.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.psycopg.async_cursor import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/psycopg/connection.py b/ddtrace/contrib/psycopg/connection.py deleted file mode 100644 index 5662cf5d854..00000000000 --- a/ddtrace/contrib/psycopg/connection.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.psycopg.connection import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/psycopg/cursor.py b/ddtrace/contrib/psycopg/cursor.py deleted file mode 100644 index f9140697015..00000000000 --- a/ddtrace/contrib/psycopg/cursor.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.psycopg.cursor import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/psycopg/extensions.py b/ddtrace/contrib/psycopg/extensions.py deleted file mode 100644 index b70af814b24..00000000000 --- a/ddtrace/contrib/psycopg/extensions.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.psycopg.extensions import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/psycopg/patch.py b/ddtrace/contrib/psycopg/patch.py deleted file mode 100644 index 0b37107fa50..00000000000 --- a/ddtrace/contrib/psycopg/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.psycopg.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pylibmc.py b/ddtrace/contrib/pylibmc.py new file mode 100644 index 00000000000..c894b1fa5e2 --- /dev/null +++ b/ddtrace/contrib/pylibmc.py @@ -0,0 +1,26 @@ +"""Instrument pylibmc to report Memcached queries. + +``import ddtrace.auto`` will automatically patch your pylibmc client to make it work. +:: + + # Be sure to import pylibmc and not pylibmc.Client directly, + # otherwise you won't have access to the patched version + from ddtrace import patch + from ddtrace.trace import Pin + import pylibmc + + # If not patched yet, you can patch pylibmc specifically + patch(pylibmc=True) + + # One client instrumented with default configuration + client = pylibmc.Client(["localhost:11211"] + client.set("key1", "value1") + + # Use a pin to specify metadata related to this client + Pin.override(client, service="memcached-sessions") +""" + +from ddtrace.contrib.internal.pylibmc.client import TracedClient + + +__all__ = ["TracedClient"] diff --git a/ddtrace/contrib/pylibmc/__init__.py b/ddtrace/contrib/pylibmc/__init__.py deleted file mode 100644 index 6c21eab770e..00000000000 --- a/ddtrace/contrib/pylibmc/__init__.py +++ /dev/null @@ -1,53 +0,0 @@ -"""Instrument pylibmc to report Memcached queries. - -``import ddtrace.auto`` will automatically patch your pylibmc client to make it work. -:: - - # Be sure to import pylibmc and not pylibmc.Client directly, - # otherwise you won't have access to the patched version - from ddtrace import patch - from ddtrace.trace import Pin - import pylibmc - - # If not patched yet, you can patch pylibmc specifically - patch(pylibmc=True) - - # One client instrumented with default configuration - client = pylibmc.Client(["localhost:11211"] - client.set("key1", "value1") - - # Use a pin to specify metadata related to this client - Pin.override(client, service="memcached-sessions") -""" - - -# Required to allow users to import from `ddtrace.contrib.pylibmc.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - -from ddtrace.contrib.internal.pylibmc.client import TracedClient -from ddtrace.contrib.internal.pylibmc.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.pylibmc.patch import patch # noqa: F401 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - if name in ("patch", "get_version"): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - message="Use ``import ddtrace.auto`` or the ``ddtrace-run`` command to configure this integration.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) - - -__all__ = ["TracedClient"] diff --git a/ddtrace/contrib/pylibmc/addrs.py b/ddtrace/contrib/pylibmc/addrs.py deleted file mode 100644 index cec17ea0032..00000000000 --- a/ddtrace/contrib/pylibmc/addrs.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pylibmc.addrs import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pylibmc/client.py b/ddtrace/contrib/pylibmc/client.py deleted file mode 100644 index a29cf27f2fc..00000000000 --- a/ddtrace/contrib/pylibmc/client.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pylibmc.client import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pylibmc/patch.py b/ddtrace/contrib/pylibmc/patch.py deleted file mode 100644 index b0f74bd2222..00000000000 --- a/ddtrace/contrib/pylibmc/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pylibmc.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pymemcache/client.py b/ddtrace/contrib/pymemcache/client.py deleted file mode 100644 index afe650a2295..00000000000 --- a/ddtrace/contrib/pymemcache/client.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pymemcache.client import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pymemcache/patch.py b/ddtrace/contrib/pymemcache/patch.py deleted file mode 100644 index 1242a1ae15a..00000000000 --- a/ddtrace/contrib/pymemcache/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pymemcache.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pymongo/client.py b/ddtrace/contrib/pymongo/client.py deleted file mode 100644 index 40b3738baaa..00000000000 --- a/ddtrace/contrib/pymongo/client.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pymongo.client import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pymongo/parse.py b/ddtrace/contrib/pymongo/parse.py deleted file mode 100644 index bba810a9eba..00000000000 --- a/ddtrace/contrib/pymongo/parse.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pymongo.parse import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pymongo/patch.py b/ddtrace/contrib/pymongo/patch.py deleted file mode 100644 index 004c33d96b7..00000000000 --- a/ddtrace/contrib/pymongo/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pymongo.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pymysql/patch.py b/ddtrace/contrib/pymysql/patch.py deleted file mode 100644 index 2c2ac5358ca..00000000000 --- a/ddtrace/contrib/pymysql/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pymysql.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pynamodb/patch.py b/ddtrace/contrib/pynamodb/patch.py deleted file mode 100644 index d31d5b39bbb..00000000000 --- a/ddtrace/contrib/pynamodb/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pynamodb.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pyodbc/patch.py b/ddtrace/contrib/pyodbc/patch.py deleted file mode 100644 index 8609aeb12c9..00000000000 --- a/ddtrace/contrib/pyodbc/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pyodbc.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pyramid/__init__.py b/ddtrace/contrib/pyramid.py similarity index 60% rename from ddtrace/contrib/pyramid/__init__.py rename to ddtrace/contrib/pyramid.py index 87aab191815..d608a83fc3e 100644 --- a/ddtrace/contrib/pyramid/__init__.py +++ b/ddtrace/contrib/pyramid.py @@ -39,38 +39,9 @@ :ref:`All HTTP tags ` are supported for this integration. """ - - -# Required to allow users to import from `ddtrace.contrib.pyramid.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.pyramid.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.pyramid.patch import patch # noqa: F401 from ddtrace.contrib.internal.pyramid.trace import includeme from ddtrace.contrib.internal.pyramid.trace import trace_pyramid from ddtrace.contrib.internal.pyramid.trace import trace_tween_factory -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - if name in ("patch", "get_version"): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - message="Use ``import ddtrace.auto`` or the ``ddtrace-run`` command to configure this integration.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) __all__ = ["trace_pyramid", "trace_tween_factory", "includeme"] diff --git a/ddtrace/contrib/pyramid/constants.py b/ddtrace/contrib/pyramid/constants.py deleted file mode 100644 index f1ec8ea0480..00000000000 --- a/ddtrace/contrib/pyramid/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pyramid.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pyramid/patch.py b/ddtrace/contrib/pyramid/patch.py deleted file mode 100644 index 993facea9a9..00000000000 --- a/ddtrace/contrib/pyramid/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pyramid.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pyramid/trace.py b/ddtrace/contrib/pyramid/trace.py deleted file mode 100644 index c58b572b0ee..00000000000 --- a/ddtrace/contrib/pyramid/trace.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pyramid.trace import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pytest/constants.py b/ddtrace/contrib/pytest/constants.py deleted file mode 100644 index 695c48e5b95..00000000000 --- a/ddtrace/contrib/pytest/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pytest.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pytest/newhooks.py b/ddtrace/contrib/pytest/newhooks.py deleted file mode 100644 index b54e146fde9..00000000000 --- a/ddtrace/contrib/pytest/newhooks.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pytest.newhooks import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pytest/plugin.py b/ddtrace/contrib/pytest/plugin.py deleted file mode 100644 index 05002fc74d4..00000000000 --- a/ddtrace/contrib/pytest/plugin.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pytest.plugin import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pytest_bdd/constants.py b/ddtrace/contrib/pytest_bdd/constants.py deleted file mode 100644 index 9c2e907debd..00000000000 --- a/ddtrace/contrib/pytest_bdd/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pytest_bdd.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pytest_bdd/plugin.py b/ddtrace/contrib/pytest_bdd/plugin.py deleted file mode 100644 index 88645368d38..00000000000 --- a/ddtrace/contrib/pytest_bdd/plugin.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pytest_bdd.plugin import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pytest_benchmark/__init__.py b/ddtrace/contrib/pytest_benchmark/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/ddtrace/contrib/pytest_benchmark/constants.py b/ddtrace/contrib/pytest_benchmark/constants.py deleted file mode 100644 index 522f664d4b8..00000000000 --- a/ddtrace/contrib/pytest_benchmark/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pytest_benchmark.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/pytest_benchmark/plugin.py b/ddtrace/contrib/pytest_benchmark/plugin.py deleted file mode 100644 index 7a33bbf838d..00000000000 --- a/ddtrace/contrib/pytest_benchmark/plugin.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.pytest_benchmark.plugin import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/redis/asyncio_patch.py b/ddtrace/contrib/redis/asyncio_patch.py deleted file mode 100644 index f46f432e205..00000000000 --- a/ddtrace/contrib/redis/asyncio_patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.redis.asyncio_patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/redis/patch.py b/ddtrace/contrib/redis/patch.py deleted file mode 100644 index 972c1a4320d..00000000000 --- a/ddtrace/contrib/redis/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.redis.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/redis_utils.py b/ddtrace/contrib/redis_utils.py deleted file mode 100644 index 08012fb2c65..00000000000 --- a/ddtrace/contrib/redis_utils.py +++ /dev/null @@ -1 +0,0 @@ -from ddtrace.contrib.internal.redis_utils import * # noqa: F403 diff --git a/ddtrace/contrib/rediscluster/patch.py b/ddtrace/contrib/rediscluster/patch.py deleted file mode 100644 index 88a20183ebd..00000000000 --- a/ddtrace/contrib/rediscluster/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.rediscluster.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/requests/__init__.py b/ddtrace/contrib/requests.py similarity index 59% rename from ddtrace/contrib/requests/__init__.py rename to ddtrace/contrib/requests.py index efcb20f1219..2f289a467e8 100644 --- a/ddtrace/contrib/requests/__init__.py +++ b/ddtrace/contrib/requests.py @@ -65,44 +65,13 @@ use the config API:: from ddtrace import config + from ddtrace.trace import Pin from requests import Session session = Session() - cfg = config.get_from(session) - cfg['service_name'] = 'auth-api' - cfg['distributed_tracing'] = False + Pin.override(session, service='auth-api') """ - - -# Required to allow users to import from `ddtrace.contrib.requests.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.requests.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.requests.patch import patch # noqa: F401 -from ddtrace.contrib.internal.requests.patch import unpatch # noqa: F401 -from ddtrace.contrib.internal.requests.session import TracedSession -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - if name in ("patch", "unpatch", "get_version"): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - message="Use ``import ddtrace.auto`` or the ``ddtrace-run`` command to configure this integration.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) +from ddtrace.contrib.internal.requests.patch import TracedSession __all__ = ["TracedSession"] diff --git a/ddtrace/contrib/requests/connection.py b/ddtrace/contrib/requests/connection.py deleted file mode 100644 index f1bbc7e1a84..00000000000 --- a/ddtrace/contrib/requests/connection.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.requests.connection import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/requests/constants.py b/ddtrace/contrib/requests/constants.py deleted file mode 100644 index ef871029e45..00000000000 --- a/ddtrace/contrib/requests/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.requests.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/requests/patch.py b/ddtrace/contrib/requests/patch.py deleted file mode 100644 index f16bf99900d..00000000000 --- a/ddtrace/contrib/requests/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.requests.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/requests/session.py b/ddtrace/contrib/requests/session.py deleted file mode 100644 index 866662a6c34..00000000000 --- a/ddtrace/contrib/requests/session.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.requests.session import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/sanic/patch.py b/ddtrace/contrib/sanic/patch.py deleted file mode 100644 index b6a2468f0d1..00000000000 --- a/ddtrace/contrib/sanic/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.sanic.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/snowflake/patch.py b/ddtrace/contrib/snowflake/patch.py deleted file mode 100644 index b18dc288250..00000000000 --- a/ddtrace/contrib/snowflake/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.snowflake.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/sqlalchemy.py b/ddtrace/contrib/sqlalchemy.py new file mode 100644 index 00000000000..04bffa87b85 --- /dev/null +++ b/ddtrace/contrib/sqlalchemy.py @@ -0,0 +1,26 @@ +""" +Enabling the SQLAlchemy integration is only necessary if there is no +instrumentation available or enabled for the underlying database engine (e.g. +pymysql, psycopg, mysql-connector, etc.). + +To trace sqlalchemy queries, add instrumentation to the engine class +using the patch method that **must be called before** importing sqlalchemy:: + + # patch before importing `create_engine` + from ddtrace import patch + from ddtrace.trace import Pin + patch(sqlalchemy=True) + + # use SQLAlchemy as usual + from sqlalchemy import create_engine + + engine = create_engine('sqlite:///:memory:') + engine.connect().execute("SELECT COUNT(*) FROM users") + + # Use a PIN to specify metadata related to this engine + Pin.override(engine, service='replica-db') +""" +from ddtrace.contrib.internal.sqlalchemy.engine import trace_engine + + +__all__ = ["trace_engine"] diff --git a/ddtrace/contrib/sqlalchemy/__init__.py b/ddtrace/contrib/sqlalchemy/__init__.py deleted file mode 100644 index c9b0f47715b..00000000000 --- a/ddtrace/contrib/sqlalchemy/__init__.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -Enabling the SQLAlchemy integration is only necessary if there is no -instrumentation available or enabled for the underlying database engine (e.g. -pymysql, psycopg, mysql-connector, etc.). - -To trace sqlalchemy queries, add instrumentation to the engine class -using the patch method that **must be called before** importing sqlalchemy:: - - # patch before importing `create_engine` - from ddtrace import patch - from ddtrace.trace import Pin - patch(sqlalchemy=True) - - # use SQLAlchemy as usual - from sqlalchemy import create_engine - - engine = create_engine('sqlite:///:memory:') - engine.connect().execute("SELECT COUNT(*) FROM users") - - # Use a PIN to specify metadata related to this engine - Pin.override(engine, service='replica-db') -""" - - -# Required to allow users to import from `ddtrace.contrib.sqlalchemy.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.sqlalchemy.engine import trace_engine -from ddtrace.contrib.internal.sqlalchemy.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.sqlalchemy.patch import patch # noqa: F401 -from ddtrace.contrib.internal.sqlalchemy.patch import unpatch # noqa: F401 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - if name in ("patch", "unpatch", "get_version"): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - message="Avoid using this package directly. " - "Set DD_TRACE_SQLALCHEMY_ENABLED=true and use ``import ddtrace.auto`` or the " - "``ddtrace-run`` command to enable and configure this integration.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) - - -__all__ = ["trace_engine"] diff --git a/ddtrace/contrib/sqlalchemy/engine.py b/ddtrace/contrib/sqlalchemy/engine.py deleted file mode 100644 index 4496b74b479..00000000000 --- a/ddtrace/contrib/sqlalchemy/engine.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.sqlalchemy.engine import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/sqlalchemy/patch.py b/ddtrace/contrib/sqlalchemy/patch.py deleted file mode 100644 index 511637534e2..00000000000 --- a/ddtrace/contrib/sqlalchemy/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.sqlalchemy.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/sqlite3/patch.py b/ddtrace/contrib/sqlite3/patch.py deleted file mode 100644 index 1d1d3daf726..00000000000 --- a/ddtrace/contrib/sqlite3/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.sqlite3.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/starlette/patch.py b/ddtrace/contrib/starlette/patch.py deleted file mode 100644 index 0c85c3ff44a..00000000000 --- a/ddtrace/contrib/starlette/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.starlette.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/structlog/patch.py b/ddtrace/contrib/structlog/patch.py deleted file mode 100644 index 2f346e88f18..00000000000 --- a/ddtrace/contrib/structlog/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.structlog.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/subprocess/constants.py b/ddtrace/contrib/subprocess/constants.py deleted file mode 100644 index 29562e61200..00000000000 --- a/ddtrace/contrib/subprocess/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.subprocess.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/subprocess/patch.py b/ddtrace/contrib/subprocess/patch.py deleted file mode 100644 index 99510d5761c..00000000000 --- a/ddtrace/contrib/subprocess/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.subprocess.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/tornado/__init__.py b/ddtrace/contrib/tornado.py similarity index 87% rename from ddtrace/contrib/tornado/__init__.py rename to ddtrace/contrib/tornado.py index 403739448be..dc231fce60d 100644 --- a/ddtrace/contrib/tornado/__init__.py +++ b/ddtrace/contrib/tornado.py @@ -3,12 +3,10 @@ Auto instrumentation is available using the ``patch`` function that **must be called before** importing the tornado library. -**Note:** This integration requires Python 3.7 and above for Tornado 5 and 6. - The following is an example:: # patch before importing tornado and concurrent.futures - from ddtrace import tracer, patch + from ddtrace.trace import tracer, patch patch(tornado=True) import tornado.web @@ -99,20 +97,6 @@ def log_exception(self, typ, value, tb): * ``agent_port`` (default: `8126`): define the port of the APM agent. * ``settings`` (default: ``{}``): Tracer extra settings used to change, for instance, the filtering behavior. """ - - -# Required to allow users to import from `ddtrace.contrib.tornado.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.tornado.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.tornado.patch import patch # noqa: F401 -from ddtrace.contrib.internal.tornado.patch import unpatch # noqa: F401 from ddtrace.contrib.internal.tornado.stack_context import TracerStackContext from ddtrace.contrib.internal.tornado.stack_context import context_provider from ddtrace.contrib.internal.tornado.stack_context import run_with_trace_context diff --git a/ddtrace/contrib/tornado/application.py b/ddtrace/contrib/tornado/application.py deleted file mode 100644 index 4faf81a95cc..00000000000 --- a/ddtrace/contrib/tornado/application.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.tornado.application import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/tornado/constants.py b/ddtrace/contrib/tornado/constants.py deleted file mode 100644 index 861f9dd5b29..00000000000 --- a/ddtrace/contrib/tornado/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.tornado.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/tornado/decorators.py b/ddtrace/contrib/tornado/decorators.py deleted file mode 100644 index 4f3811ebfc8..00000000000 --- a/ddtrace/contrib/tornado/decorators.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.tornado.decorators import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/tornado/handlers.py b/ddtrace/contrib/tornado/handlers.py deleted file mode 100644 index 0256c401a7a..00000000000 --- a/ddtrace/contrib/tornado/handlers.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.tornado.handlers import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/tornado/patch.py b/ddtrace/contrib/tornado/patch.py deleted file mode 100644 index ff967a982d4..00000000000 --- a/ddtrace/contrib/tornado/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.tornado.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/tornado/stack_context.py b/ddtrace/contrib/tornado/stack_context.py deleted file mode 100644 index 9a1245b3afc..00000000000 --- a/ddtrace/contrib/tornado/stack_context.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.tornado.stack_context import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/tornado/template.py b/ddtrace/contrib/tornado/template.py deleted file mode 100644 index a4cdabd27b0..00000000000 --- a/ddtrace/contrib/tornado/template.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.tornado.template import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/trace_utils_async.py b/ddtrace/contrib/trace_utils_async.py deleted file mode 100644 index 46d4e8762a3..00000000000 --- a/ddtrace/contrib/trace_utils_async.py +++ /dev/null @@ -1 +0,0 @@ -from ddtrace.contrib.internal.trace_utils_async import * # noqa: F403 diff --git a/ddtrace/contrib/trace_utils_redis.py b/ddtrace/contrib/trace_utils_redis.py deleted file mode 100644 index b8aff5eef23..00000000000 --- a/ddtrace/contrib/trace_utils_redis.py +++ /dev/null @@ -1,9 +0,0 @@ -from ddtrace.contrib.internal.redis_utils import determine_row_count -from ddtrace.contrib.internal.redis_utils import stringify_cache_args - - -format_command_args = stringify_cache_args - - -def determine_row_count(redis_command, span, result): # noqa: F811 - determine_row_count(redis_command=redis_command, result=result) diff --git a/ddtrace/contrib/unittest/constants.py b/ddtrace/contrib/unittest/constants.py deleted file mode 100644 index fc8643d5e06..00000000000 --- a/ddtrace/contrib/unittest/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.unittest.constants import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/unittest/patch.py b/ddtrace/contrib/unittest/patch.py deleted file mode 100644 index 277b3b421c6..00000000000 --- a/ddtrace/contrib/unittest/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.unittest.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/urllib/__init__.py b/ddtrace/contrib/urllib/__init__.py deleted file mode 100644 index bc9fae37949..00000000000 --- a/ddtrace/contrib/urllib/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -""" -Trace the standard library ``urllib.request`` library to trace -HTTP requests and detect SSRF vulnerabilities. It is enabled by default -if ``DD_IAST_ENABLED`` is set to ``True`` (for detecting sink points) and/or -``DD_ASM_ENABLED`` is set to ``True`` (for exploit prevention). -""" - - -# Required to allow users to import from `ddtrace.contrib.urllib.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.urllib.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.urllib.patch import patch # noqa: F401 -from ddtrace.contrib.internal.urllib.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/urllib/patch.py b/ddtrace/contrib/urllib/patch.py deleted file mode 100644 index 033916e6e46..00000000000 --- a/ddtrace/contrib/urllib/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.urllib.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/urllib3/patch.py b/ddtrace/contrib/urllib3/patch.py deleted file mode 100644 index 01d775de390..00000000000 --- a/ddtrace/contrib/urllib3/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.urllib3.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/vertica/patch.py b/ddtrace/contrib/vertica/patch.py deleted file mode 100644 index 0cdbe6cd956..00000000000 --- a/ddtrace/contrib/vertica/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.vertica.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/webbrowser/__init__.py b/ddtrace/contrib/webbrowser/__init__.py deleted file mode 100644 index 74160b052e3..00000000000 --- a/ddtrace/contrib/webbrowser/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -""" -Trace the standard library ``webbrowser`` library to trace -HTTP requests and detect SSRF vulnerabilities. It is enabled by default -if ``DD_IAST_ENABLED`` is set to ``True`` (for detecting sink points) and/or -``DD_ASM_ENABLED`` is set to ``True`` (for exploit prevention). -""" - - -# Required to allow users to import from `ddtrace.contrib.webbrowser.patch` directly -import warnings as _w - - -with _w.catch_warnings(): - _w.simplefilter("ignore", DeprecationWarning) - from . import patch as _ # noqa: F401, I001 - - -from ddtrace.contrib.internal.webbrowser.patch import get_version # noqa: F401 -from ddtrace.contrib.internal.webbrowser.patch import patch # noqa: F401 -from ddtrace.contrib.internal.webbrowser.patch import unpatch # noqa: F401 diff --git a/ddtrace/contrib/webbrowser/patch.py b/ddtrace/contrib/webbrowser/patch.py deleted file mode 100644 index 03dfb3b14cf..00000000000 --- a/ddtrace/contrib/webbrowser/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.webbrowser.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/wsgi/__init__.py b/ddtrace/contrib/wsgi.py similarity index 56% rename from ddtrace/contrib/wsgi/__init__.py rename to ddtrace/contrib/wsgi.py index 9e674993be3..94f44fbb9df 100644 --- a/ddtrace/contrib/wsgi/__init__.py +++ b/ddtrace/contrib/wsgi.py @@ -37,23 +37,6 @@ """ from ddtrace.contrib.internal.wsgi.wsgi import DDWSGIMiddleware -from ddtrace.contrib.internal.wsgi.wsgi import get_version # noqa: F401 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - if name in ("get_version",): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - message="Use ``import ddtrace.auto`` or the ``ddtrace-run`` command to configure this integration.", - category=DDTraceDeprecationWarning, - removal_version="3.0.0", - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) __all__ = ["DDWSGIMiddleware"] diff --git a/ddtrace/contrib/wsgi/wsgi.py b/ddtrace/contrib/wsgi/wsgi.py deleted file mode 100644 index e2f1f6bcea4..00000000000 --- a/ddtrace/contrib/wsgi/wsgi.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.wsgi.wsgi import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/contrib/yaaredis/patch.py b/ddtrace/contrib/yaaredis/patch.py deleted file mode 100644 index 83b8fe0a468..00000000000 --- a/ddtrace/contrib/yaaredis/patch.py +++ /dev/null @@ -1,14 +0,0 @@ -from ddtrace.contrib.internal.yaaredis.patch import * # noqa: F403 -from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning -from ddtrace.vendor.debtcollector import deprecate - - -def __getattr__(name): - deprecate( - ("%s.%s is deprecated" % (__name__, name)), - category=DDTraceDeprecationWarning, - ) - - if name in globals(): - return globals()[name] - raise AttributeError("%s has no attribute %s", __name__, name) diff --git a/ddtrace/debugging/_debugger.py b/ddtrace/debugging/_debugger.py index c36bb94fdfb..bbfa19ac2c2 100644 --- a/ddtrace/debugging/_debugger.py +++ b/ddtrace/debugging/_debugger.py @@ -23,7 +23,6 @@ import ddtrace from ddtrace import config as ddconfig -from ddtrace._trace.tracer import Tracer from ddtrace.debugging._config import di_config from ddtrace.debugging._function.discovery import FunctionDiscovery from ddtrace.debugging._function.store import FullyNamedContextWrappedFunction @@ -55,6 +54,7 @@ from ddtrace.internal.remoteconfig.worker import remoteconfig_poller from ddtrace.internal.service import Service from ddtrace.internal.wrapping.context import WrappingContext +from ddtrace.trace import Tracer log = get_logger(__name__) diff --git a/ddtrace/debugging/_exception/replay.py b/ddtrace/debugging/_exception/replay.py index c9da69bb5b2..424bdcbd147 100644 --- a/ddtrace/debugging/_exception/replay.py +++ b/ddtrace/debugging/_exception/replay.py @@ -8,7 +8,6 @@ import typing as t import uuid -from ddtrace._trace.span import Span from ddtrace.debugging._probe.model import LiteralTemplateSegment from ddtrace.debugging._probe.model import LogLineProbe from ddtrace.debugging._signal.snapshot import DEFAULT_CAPTURE_LIMITS @@ -22,6 +21,7 @@ from ddtrace.internal.rate_limiter import RateLimitExceeded from ddtrace.internal.utils.time import HourGlass from ddtrace.settings.exception_replay import config +from ddtrace.trace import Span log = get_logger(__name__) diff --git a/ddtrace/debugging/_origin/span.py b/ddtrace/debugging/_origin/span.py index e7831c38ffb..9044797d252 100644 --- a/ddtrace/debugging/_origin/span.py +++ b/ddtrace/debugging/_origin/span.py @@ -31,7 +31,7 @@ from ddtrace.internal.utils.inspection import functions_for_code from ddtrace.internal.wrapping.context import WrappingContext from ddtrace.settings.code_origin import config as co_config -from ddtrace.span import Span +from ddtrace.trace import Span def frame_stack(frame: FrameType) -> t.Iterator[FrameType]: diff --git a/ddtrace/debugging/_signal/model.py b/ddtrace/debugging/_signal/model.py index 9c9448677c0..5d41c64f2ff 100644 --- a/ddtrace/debugging/_signal/model.py +++ b/ddtrace/debugging/_signal/model.py @@ -18,8 +18,6 @@ from typing import cast from uuid import uuid4 -from ddtrace._trace.context import Context -from ddtrace._trace.span import Span from ddtrace.debugging._expressions import DDExpressionEvaluationError from ddtrace.debugging._probe.model import Probe from ddtrace.debugging._probe.model import ProbeConditionMixin @@ -31,6 +29,8 @@ from ddtrace.internal.metrics import Metrics from ddtrace.internal.rate_limiter import BudgetRateLimiterWithJitter as RateLimiter from ddtrace.internal.rate_limiter import RateLimitExceeded +from ddtrace.trace import Context +from ddtrace.trace import Span @dataclass diff --git a/ddtrace/debugging/_signal/tracing.py b/ddtrace/debugging/_signal/tracing.py index d509e336d52..37d90c918c1 100644 --- a/ddtrace/debugging/_signal/tracing.py +++ b/ddtrace/debugging/_signal/tracing.py @@ -3,7 +3,6 @@ import typing as t import ddtrace -from ddtrace._trace.span import Span from ddtrace.constants import _ORIGIN_KEY from ddtrace.debugging._expressions import DDExpressionEvaluationError from ddtrace.debugging._probe.model import Probe @@ -20,6 +19,7 @@ from ddtrace.internal.compat import ExcInfoType from ddtrace.internal.logger import get_logger from ddtrace.internal.safety import _isinstance +from ddtrace.trace import Span log = get_logger(__name__) diff --git a/ddtrace/ext/aws.py b/ddtrace/ext/aws.py index 4c4bc8c0dea..acc0a6425e9 100644 --- a/ddtrace/ext/aws.py +++ b/ddtrace/ext/aws.py @@ -4,7 +4,7 @@ if TYPE_CHECKING: # pragma: no cover - from ddtrace._trace.span import Span # noqa:F401 + from ddtrace.trace import Span # noqa:F401 def truncate_arg_value(value, max_len=1024): diff --git a/ddtrace/ext/test_visibility/api.py b/ddtrace/ext/test_visibility/api.py index cdcbb7a672c..c6e96406e88 100644 --- a/ddtrace/ext/test_visibility/api.py +++ b/ddtrace/ext/test_visibility/api.py @@ -40,11 +40,13 @@ from ddtrace.ext.test_visibility._utils import _set_item_tags from ddtrace.internal import core from ddtrace.internal.logger import get_logger as _get_logger -import ddtrace.tracing # noqa: F401 -- this triggers the registration of trace handlers log = _get_logger(__name__) +# this triggers the registration of trace handlers after civis startup +import ddtrace._trace.trace_handlers # noqa: F401, E402 + class TestStatus(Enum): __test__ = False diff --git a/ddtrace/internal/ci_visibility/api/_base.py b/ddtrace/internal/ci_visibility/api/_base.py index 1e56d6b00b6..d31c79faffe 100644 --- a/ddtrace/internal/ci_visibility/api/_base.py +++ b/ddtrace/internal/ci_visibility/api/_base.py @@ -13,8 +13,6 @@ from typing import TypeVar from typing import Union -from ddtrace import Span -from ddtrace import Tracer from ddtrace.constants import SPAN_KIND from ddtrace.ext import SpanTypes from ddtrace.ext import test @@ -40,6 +38,8 @@ from ddtrace.internal.logger import get_logger from ddtrace.internal.test_visibility._atr_mixins import AutoTestRetriesSettings from ddtrace.internal.test_visibility.coverage_lines import CoverageLines +from ddtrace.trace import Span +from ddtrace.trace import Tracer if typing.TYPE_CHECKING: @@ -76,7 +76,7 @@ class TestVisibilitySessionSettings: def __post_init__(self): if not isinstance(self.tracer, Tracer): - raise TypeError("tracer must be a ddtrace.Tracer") + raise TypeError("tracer must be a ddtrace.trace.Tracer") if not isinstance(self.workspace_path, Path): raise TypeError("root_dir must be a pathlib.Path") if not self.workspace_path.is_absolute(): diff --git a/ddtrace/internal/ci_visibility/api/_coverage_data.py b/ddtrace/internal/ci_visibility/api/_coverage_data.py index 9c7a5411521..5ccb6a19830 100644 --- a/ddtrace/internal/ci_visibility/api/_coverage_data.py +++ b/ddtrace/internal/ci_visibility/api/_coverage_data.py @@ -2,17 +2,11 @@ from pathlib import Path from typing import Dict from typing import List +from typing import TypedDict # noqa:F401 from ddtrace.internal.test_visibility.coverage_lines import CoverageLines -try: - from typing import TypedDict # noqa:F401 -except ImportError: - # Compatibility with Python 3.7 - from typing_extensions import TypedDict - - class CoverageFilePayload(TypedDict): filename: str bitmap: bytes diff --git a/ddtrace/internal/ci_visibility/coverage.py b/ddtrace/internal/ci_visibility/coverage.py index 3d561a4f7ae..7dde0d3b009 100644 --- a/ddtrace/internal/ci_visibility/coverage.py +++ b/ddtrace/internal/ci_visibility/coverage.py @@ -131,7 +131,7 @@ def _switch_coverage_context( def _report_coverage_to_span( - coverage_data: Coverage, span: ddtrace.Span, root_dir: str, framework: Optional[TEST_FRAMEWORKS] = None + coverage_data: Coverage, span: ddtrace.trace.Span, root_dir: str, framework: Optional[TEST_FRAMEWORKS] = None ): # Experimental feature to use internal coverage collection if USE_DD_COVERAGE: diff --git a/ddtrace/internal/ci_visibility/filters.py b/ddtrace/internal/ci_visibility/filters.py index f1b22d97e13..a1a95c2cb27 100644 --- a/ddtrace/internal/ci_visibility/filters.py +++ b/ddtrace/internal/ci_visibility/filters.py @@ -12,7 +12,7 @@ if TYPE_CHECKING: - from ddtrace import Span # noqa:F401 + from ddtrace.trace import Span # noqa:F401 class TraceCiVisibilityFilter(TraceFilter): diff --git a/ddtrace/internal/ci_visibility/git_client.py b/ddtrace/internal/ci_visibility/git_client.py index 6152fa12679..469268f5171 100644 --- a/ddtrace/internal/ci_visibility/git_client.py +++ b/ddtrace/internal/ci_visibility/git_client.py @@ -11,7 +11,6 @@ from typing import Tuple # noqa:F401 from urllib.parse import urljoin -from ddtrace import Tracer # noqa: F401 from ddtrace.ext import ci from ddtrace.ext.git import _build_git_packfiles_with_details from ddtrace.ext.git import _extract_clone_defaultremotename_with_details @@ -29,6 +28,7 @@ from ddtrace.internal.compat import JSONDecodeError from ddtrace.internal.logger import get_logger from ddtrace.internal.utils.retry import fibonacci_backoff_with_jitter +from ddtrace.trace import Tracer # noqa: F401 from .. import compat from .. import telemetry diff --git a/ddtrace/internal/ci_visibility/recorder.py b/ddtrace/internal/ci_visibility/recorder.py index 34cc543f11d..a8474ca0fd9 100644 --- a/ddtrace/internal/ci_visibility/recorder.py +++ b/ddtrace/internal/ci_visibility/recorder.py @@ -12,7 +12,6 @@ from typing import Union # noqa:F401 import ddtrace -from ddtrace import Tracer from ddtrace import config as ddconfig from ddtrace.contrib import trace_utils from ddtrace.ext import ci @@ -85,6 +84,7 @@ from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.http import verify_url from ddtrace.internal.writer.writer import Response +from ddtrace.trace import Tracer if TYPE_CHECKING: # pragma: no cover diff --git a/ddtrace/internal/ci_visibility/utils.py b/ddtrace/internal/ci_visibility/utils.py index d111305e317..770c574e98d 100644 --- a/ddtrace/internal/ci_visibility/utils.py +++ b/ddtrace/internal/ci_visibility/utils.py @@ -50,7 +50,7 @@ def get_source_lines_for_test_method( def _add_start_end_source_file_path_data_to_span( - span: ddtrace.Span, test_method_object, test_name: str, repo_directory: str + span: ddtrace.trace.Span, test_method_object, test_name: str, repo_directory: str ): if not test_method_object: log.debug( @@ -75,7 +75,7 @@ def _add_start_end_source_file_path_data_to_span( span.set_tag(test.SOURCE_END, end_line) -def _add_pct_covered_to_span(coverage_data: dict, span: ddtrace.Span): +def _add_pct_covered_to_span(coverage_data: dict, span: ddtrace.trace.Span): if not coverage_data or PCT_COVERED_KEY not in coverage_data: log.warning("Tried to add total covered percentage to session span but no data was found") return diff --git a/ddtrace/internal/core/__init__.py b/ddtrace/internal/core/__init__.py index 3c2169d4cb1..0235925dcde 100644 --- a/ddtrace/internal/core/__init__.py +++ b/ddtrace/internal/core/__init__.py @@ -276,7 +276,7 @@ def span(self) -> "Span": if self._inner_span is None: log.warning("No span found in ExecutionContext %s", self.identifier) # failsafe - from ddtrace import tracer + from ddtrace.trace import tracer self._inner_span = tracer.current_span() or tracer.trace("default") return self._inner_span diff --git a/ddtrace/internal/coverage/instrumentation.py b/ddtrace/internal/coverage/instrumentation.py index 19bc61238ff..3e24f66239d 100644 --- a/ddtrace/internal/coverage/instrumentation.py +++ b/ddtrace/internal/coverage/instrumentation.py @@ -10,8 +10,6 @@ from ddtrace.internal.coverage.instrumentation_py3_11 import instrument_all_lines # noqa elif sys.version_info >= (3, 10): from ddtrace.internal.coverage.instrumentation_py3_10 import instrument_all_lines # noqa -elif sys.version_info >= (3, 8): +else: # Python 3.8 and 3.9 use the same instrumentation from ddtrace.internal.coverage.instrumentation_py3_8 import instrument_all_lines # noqa -else: - from ddtrace.internal.coverage.instrumentation_py3_7 import instrument_all_lines # noqa diff --git a/ddtrace/internal/coverage/instrumentation_py3_7.py b/ddtrace/internal/coverage/instrumentation_py3_7.py deleted file mode 100644 index ecb49c54ed7..00000000000 --- a/ddtrace/internal/coverage/instrumentation_py3_7.py +++ /dev/null @@ -1,400 +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.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 -assert sys.version_info >= (3, 7) and sys.version_info < (3, 8) # 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 ( - CodeType( - code.co_argcount, - code.co_kwonlyargcount, - code.co_nlocals, - code.co_stacksize + 4, - code.co_flags, - bytes(new_code), - tuple(new_consts), - code.co_names, - code.co_varnames, - code.co_filename, - code.co_name, - code.co_firstlineno, - update_location_data(code, traps, ext_arg_offsets), - code.co_freevars, - code.co_cellvars, - ), - seen_lines, - ) diff --git a/ddtrace/internal/coverage/report.py b/ddtrace/internal/coverage/report.py index 9198b0fde97..cb1ce3170aa 100644 --- a/ddtrace/internal/coverage/report.py +++ b/ddtrace/internal/coverage/report.py @@ -45,7 +45,6 @@ def find_statement_for_line(node, line): if found_node is not None: return found_node - # TODO: support nocover in Python 3.7 if not hasattr(node, "end_lineno"): return None diff --git a/ddtrace/internal/datadog/profiling/cmake/AnalysisFunc.cmake b/ddtrace/internal/datadog/profiling/cmake/AnalysisFunc.cmake index 2495a84ed29..567ba15208f 100644 --- a/ddtrace/internal/datadog/profiling/cmake/AnalysisFunc.cmake +++ b/ddtrace/internal/datadog/profiling/cmake/AnalysisFunc.cmake @@ -32,6 +32,7 @@ function(add_ddup_config target) if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") # macOS-specific linker options target_link_options(${target} PRIVATE "$<$:-Wl,-dead_strip>") + target_link_options(${target} PRIVATE -ldl -undefined dynamic_lookup) else() # Linux/ELF-based linker options target_link_options( diff --git a/ddtrace/internal/datadog/profiling/crashtracker/CMakeLists.txt b/ddtrace/internal/datadog/profiling/crashtracker/CMakeLists.txt index 8165613c07d..5bf8ee6ad80 100644 --- a/ddtrace/internal/datadog/profiling/crashtracker/CMakeLists.txt +++ b/ddtrace/internal/datadog/profiling/crashtracker/CMakeLists.txt @@ -58,16 +58,15 @@ set_target_properties(${EXTENSION_NAME} PROPERTIES SUFFIX "") # RPATH is needed for sofile discovery at runtime, since Python packages are not installed in the system path. This is # typical. -set_target_properties(${EXTENSION_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN/..") +if(APPLE) + set_target_properties(${EXTENSION_NAME} PROPERTIES INSTALL_RPATH "@loader_path/..") +elseif(UNIX) + set_target_properties(${EXTENSION_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN/..") +endif() target_include_directories(${EXTENSION_NAME} PRIVATE ../dd_wrapper/include ${Datadog_INCLUDE_DIRS} ${Python3_INCLUDE_DIRS}) -if(Python3_LIBRARIES) - target_link_libraries(${EXTENSION_NAME} PRIVATE dd_wrapper ${Python3_LIBRARIES}) -else() - # for manylinux builds - target_link_libraries(${EXTENSION_NAME} PRIVATE dd_wrapper) -endif() +target_link_libraries(${EXTENSION_NAME} PRIVATE dd_wrapper) # Set the output directory for the built library if(LIB_INSTALL_DIR) @@ -87,19 +86,19 @@ if(NOT CRASHTRACKER_EXE_TARGET_NAME) message(FATAL_ERROR "CRASHTRACKER_EXE_TARGET_NAME not set") endif() -set_target_properties(crashtracker_exe PROPERTIES INSTALL_RPATH "$ORIGIN/.." OUTPUT_NAME - ${CRASHTRACKER_EXE_TARGET_NAME}) +if(APPLE) + set_target_properties(crashtracker_exe PROPERTIES INSTALL_RPATH "@loader_path/.." OUTPUT_NAME + ${CRASHTRACKER_EXE_TARGET_NAME}) +elseif(UNIX) + set_target_properties(crashtracker_exe PROPERTIES INSTALL_RPATH "$ORIGIN/.." OUTPUT_NAME + ${CRASHTRACKER_EXE_TARGET_NAME}) -# To let crashtracker find Python library at runtime -set_target_properties(crashtracker_exe PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) - -if(Python3_LIBRARIES) - target_link_libraries(crashtracker_exe PRIVATE dd_wrapper ${Python3_LIBRARIES}) -else() - # for manylinux builds - target_link_libraries(crashtracker_exe PRIVATE dd_wrapper) + # To let crashtracker find Python library at runtime + set_target_properties(crashtracker_exe PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) endif() +target_link_libraries(crashtracker_exe PRIVATE dd_wrapper) + # See the dd_wrapper CMakeLists.txt for a more detailed explanation of why we do what we do. if(INPLACE_LIB_INSTALL_DIR) set(LIB_INSTALL_DIR "${INPLACE_LIB_INSTALL_DIR}") diff --git a/ddtrace/internal/datadog/profiling/ddup/CMakeLists.txt b/ddtrace/internal/datadog/profiling/ddup/CMakeLists.txt index 12ceab6fcb6..d4faa8704bb 100644 --- a/ddtrace/internal/datadog/profiling/ddup/CMakeLists.txt +++ b/ddtrace/internal/datadog/profiling/ddup/CMakeLists.txt @@ -61,15 +61,15 @@ set_target_properties(${EXTENSION_NAME} PROPERTIES SUFFIX "") # RPATH is needed for sofile discovery at runtime, since Python packages are not installed in the system path. This is # typical. -set_target_properties(${EXTENSION_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN/..") +if(APPLE) + set_target_properties(${EXTENSION_NAME} PROPERTIES INSTALL_RPATH "@loader_path/..") +elseif(UNIX) + set_target_properties(${EXTENSION_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN/..") +endif() target_include_directories(${EXTENSION_NAME} PRIVATE ../dd_wrapper/include ${Datadog_INCLUDE_DIRS} ${Python3_INCLUDE_DIRS}) -if(Python3_LIBRARIES) - target_link_libraries(${EXTENSION_NAME} PRIVATE dd_wrapper ${Python3_LIBRARIES}) -else() - target_link_libraries(${EXTENSION_NAME} PRIVATE dd_wrapper) -endif() +target_link_libraries(${EXTENSION_NAME} PRIVATE dd_wrapper) # Set the output directory for the built library if(LIB_INSTALL_DIR) diff --git a/ddtrace/internal/datadog/profiling/stack_v2/CMakeLists.txt b/ddtrace/internal/datadog/profiling/stack_v2/CMakeLists.txt index 77952e09d41..39bbdc42648 100644 --- a/ddtrace/internal/datadog/profiling/stack_v2/CMakeLists.txt +++ b/ddtrace/internal/datadog/profiling/stack_v2/CMakeLists.txt @@ -95,14 +95,14 @@ set_target_properties(${EXTENSION_NAME} PROPERTIES SUFFIX "") # RPATH is needed for sofile discovery at runtime, since Python packages are not installed in the system path. This is # typical. -set_target_properties(${EXTENSION_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN/..") +if(APPLE) + set_target_properties(${EXTENSION_NAME} PROPERTIES INSTALL_RPATH "@loader_path/..") +elseif(UNIX) + set_target_properties(${EXTENSION_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN/..") +endif() target_link_libraries(${EXTENSION_NAME} PRIVATE dd_wrapper Threads::Threads) -if(Python3_LIBRARIES) - target_link_libraries(${EXTENSION_NAME} PRIVATE ${Python3_LIBRARIES}) -endif() - # Set the output directory for the built library if(LIB_INSTALL_DIR) install( diff --git a/ddtrace/internal/datadog/profiling/stack_v2/test/CMakeLists.txt b/ddtrace/internal/datadog/profiling/stack_v2/test/CMakeLists.txt index 423f927d8f1..6cf4b2fe7a4 100644 --- a/ddtrace/internal/datadog/profiling/stack_v2/test/CMakeLists.txt +++ b/ddtrace/internal/datadog/profiling/stack_v2/test/CMakeLists.txt @@ -35,6 +35,11 @@ function(dd_wrapper_add_test name) target_include_directories(${name} PRIVATE ../include) # this has to refer to the stack_v2 extension name to properly link against target_link_libraries(${name} PRIVATE gmock gtest_main ${EXTENSION_NAME}) + + if(Python3_LIBRARIES) + target_link_libraries(${name} PRIVATE ${Python3_LIBRARIES}) + endif() + set_target_properties(${name} PROPERTIES INSTALL_RPATH "$ORIGIN/../stack_v2") add_ddup_config(${name}) diff --git a/ddtrace/internal/debug.py b/ddtrace/internal/debug.py index ec4048b59d0..2a285423e4c 100644 --- a/ddtrace/internal/debug.py +++ b/ddtrace/internal/debug.py @@ -22,7 +22,7 @@ if TYPE_CHECKING: # pragma: no cover - from ddtrace import Tracer # noqa:F401 + from ddtrace.trace import Tracer # noqa:F401 logger = get_logger(__name__) diff --git a/ddtrace/internal/iast/product.py b/ddtrace/internal/iast/product.py index ccbc61b2f5a..68ef24ce00e 100644 --- a/ddtrace/internal/iast/product.py +++ b/ddtrace/internal/iast/product.py @@ -3,7 +3,7 @@ too but patch_all depends of DD_TRACE_ENABLED environment variable. This is the reason why we need to call it here and it's not a duplicate call due to `enable_iast_propagation` has a global variable to avoid multiple calls. """ -from ddtrace.appsec._iast._utils import _is_iast_enabled +from ddtrace.settings.asm import config as asm_config def post_preload(): @@ -11,7 +11,7 @@ def post_preload(): def start(): - if _is_iast_enabled(): + if asm_config._iast_enabled: from ddtrace.appsec._iast import enable_iast_propagation enable_iast_propagation() diff --git a/ddtrace/internal/opentelemetry/context.py b/ddtrace/internal/opentelemetry/context.py index d0f7294eed5..63aacdc1c3b 100644 --- a/ddtrace/internal/opentelemetry/context.py +++ b/ddtrace/internal/opentelemetry/context.py @@ -1,9 +1,9 @@ -from ddtrace import tracer as ddtracer from ddtrace._trace.context import Context as DDContext from ddtrace._trace.provider import BaseContextProvider as DDBaseContextProvider # noqa:F401 from ddtrace._trace.span import Span as DDSpan from ddtrace.internal.logger import get_logger from ddtrace.propagation.http import _TraceContext +from ddtrace.trace import tracer as ddtracer log = get_logger(__name__) diff --git a/ddtrace/internal/opentelemetry/span.py b/ddtrace/internal/opentelemetry/span.py index acb5e066311..321368d0d81 100644 --- a/ddtrace/internal/opentelemetry/span.py +++ b/ddtrace/internal/opentelemetry/span.py @@ -11,7 +11,6 @@ from opentelemetry.trace.span import TraceState from ddtrace import config -from ddtrace import tracer as ddtracer from ddtrace.constants import ERROR_MSG from ddtrace.constants import ERROR_STACK from ddtrace.constants import ERROR_TYPE @@ -20,6 +19,7 @@ from ddtrace.internal.utils.formats import flatten_key_value from ddtrace.internal.utils.formats import is_sequence from ddtrace.internal.utils.http import w3c_tracestate_add_p +from ddtrace.trace import tracer as ddtracer if TYPE_CHECKING: diff --git a/ddtrace/internal/opentelemetry/trace.py b/ddtrace/internal/opentelemetry/trace.py index 21d9be57266..20a9e86f6e0 100644 --- a/ddtrace/internal/opentelemetry/trace.py +++ b/ddtrace/internal/opentelemetry/trace.py @@ -30,8 +30,8 @@ from opentelemetry.trace import Link as OtelLink # noqa:F401 from opentelemetry.util.types import AttributeValue as OtelAttributeValue # noqa:F401 - from ddtrace import Tracer as DDTracer # noqa:F401 from ddtrace._trace.span import _MetaDictType # noqa:F401 + from ddtrace.trace import Tracer as DDTracer # noqa:F401 log = get_logger(__name__) @@ -103,7 +103,7 @@ def start_span( curr_otel_span = get_current_span(context) if curr_otel_span is INVALID_SPAN: # There is no active datadog/otel span - dd_active = None # type: Optional[Union[ddtrace.trace.Context, ddtrace.Span]] + dd_active = None # type: Optional[Union[ddtrace.trace.Context, ddtrace.trace.Span]] elif isinstance(curr_otel_span, Span): # Get underlying ddtrace span from the active otel span dd_active = curr_otel_span._ddspan diff --git a/ddtrace/internal/packages.py b/ddtrace/internal/packages.py index ab4023d93dd..9f276025aad 100644 --- a/ddtrace/internal/packages.py +++ b/ddtrace/internal/packages.py @@ -45,7 +45,7 @@ def get_distributions(): return pkgs -@callonce +@cached(maxsize=1) def get_package_distributions() -> t.Mapping[str, t.List[str]]: """a mapping of importable package names to their distribution name(s)""" try: diff --git a/ddtrace/internal/processor/stats.py b/ddtrace/internal/processor/stats.py index 295a6e289a2..3addd561c79 100644 --- a/ddtrace/internal/processor/stats.py +++ b/ddtrace/internal/processor/stats.py @@ -29,7 +29,7 @@ from typing import Optional # noqa:F401 from typing import Union # noqa:F401 - from ddtrace import Span # noqa:F401 + from ddtrace.trace import Span # noqa:F401 log = get_logger(__name__) diff --git a/ddtrace/internal/remoteconfig/_pubsub.py b/ddtrace/internal/remoteconfig/_pubsub.py index f6b366fa792..6db1690e4d0 100644 --- a/ddtrace/internal/remoteconfig/_pubsub.py +++ b/ddtrace/internal/remoteconfig/_pubsub.py @@ -73,8 +73,8 @@ def __init__(self, _preprocess_results, callback, name="Default"): from typing import Any # noqa:F401 from typing import Optional # noqa:F401 - from ddtrace import Tracer # noqa:F401 from ddtrace.internal.remoteconfig._connectors import PublisherSubscriberConnector # noqa:F401 + from ddtrace.trace import Tracer # noqa:F401 log = get_logger(__name__) diff --git a/ddtrace/internal/remoteconfig/_subscribers.py b/ddtrace/internal/remoteconfig/_subscribers.py index 6a112f54d66..c5a5aa7eb61 100644 --- a/ddtrace/internal/remoteconfig/_subscribers.py +++ b/ddtrace/internal/remoteconfig/_subscribers.py @@ -10,9 +10,9 @@ from typing import Callable # noqa:F401 from typing import Optional # noqa:F401 - from ddtrace import Tracer # noqa:F401 from ddtrace.internal.remoteconfig._connectors import PublisherSubscriberConnector # noqa:F401 from ddtrace.internal.remoteconfig._connectors import SharedDataType # noqa:F401 + from ddtrace.trace import Tracer # noqa:F401 log = get_logger(__name__) diff --git a/ddtrace/internal/remoteconfig/product.py b/ddtrace/internal/remoteconfig/product.py index f7d1ff04fd4..81d952099d5 100644 --- a/ddtrace/internal/remoteconfig/product.py +++ b/ddtrace/internal/remoteconfig/product.py @@ -11,7 +11,7 @@ def start(): from ddtrace.internal.remoteconfig.worker import remoteconfig_poller remoteconfig_poller.enable() - config.enable_remote_configuration() + config._enable_remote_configuration() def restart(join=False): diff --git a/ddtrace/internal/remoteconfig/worker.py b/ddtrace/internal/remoteconfig/worker.py index 7ad8c592d2e..5429e599e74 100644 --- a/ddtrace/internal/remoteconfig/worker.py +++ b/ddtrace/internal/remoteconfig/worker.py @@ -13,7 +13,7 @@ from ddtrace.internal.remoteconfig.utils import get_poll_interval_seconds from ddtrace.internal.service import ServiceStatus from ddtrace.internal.utils.time import StopWatch -from ddtrace.settings import _config as ddconfig +from ddtrace.settings import _global_config as ddconfig log = get_logger(__name__) diff --git a/ddtrace/internal/runtime/runtime_metrics.py b/ddtrace/internal/runtime/runtime_metrics.py index 4f214b54645..a71cd2cb805 100644 --- a/ddtrace/internal/runtime/runtime_metrics.py +++ b/ddtrace/internal/runtime/runtime_metrics.py @@ -78,7 +78,7 @@ def __init__(self, interval=_get_interval_or_default(), tracer=ddtrace.tracer, d self._dogstatsd_client: DogStatsd = get_dogstatsd_client( self.dogstatsd_url or ddtrace.internal.agent.get_stats_url() ) - self.tracer: Optional[ddtrace.Tracer] = tracer + self.tracer: Optional[ddtrace.trace.Tracer] = tracer self._runtime_metrics: RuntimeMetrics = RuntimeMetrics() self._services: Set[str] = set() @@ -114,7 +114,7 @@ def _restart(cls): @classmethod def enable(cls, flush_interval=None, tracer=None, dogstatsd_url=None): - # type: (Optional[float], Optional[ddtrace.Tracer], Optional[str]) -> None + # type: (Optional[float], Optional[ddtrace.trace.Tracer], Optional[str]) -> None with cls._lock: if cls._instance is not None: return diff --git a/ddtrace/internal/sampling.py b/ddtrace/internal/sampling.py index b1d3f7957f4..e64c0e27bc5 100644 --- a/ddtrace/internal/sampling.py +++ b/ddtrace/internal/sampling.py @@ -27,7 +27,7 @@ from ddtrace.internal.constants import SAMPLING_DECISION_TRACE_TAG_KEY from ddtrace.internal.glob_matching import GlobMatcher from ddtrace.internal.logger import get_logger -from ddtrace.settings import _config as config +from ddtrace.settings import _global_config as config from .rate_limiter import RateLimiter diff --git a/ddtrace/internal/test_visibility/_utils.py b/ddtrace/internal/test_visibility/_utils.py index 14cbd946aeb..0e22a15dc94 100644 --- a/ddtrace/internal/test_visibility/_utils.py +++ b/ddtrace/internal/test_visibility/_utils.py @@ -1,7 +1,7 @@ -from ddtrace import Span from ddtrace.ext.test_visibility._test_visibility_base import TestVisibilityItemId from ddtrace.internal import core from ddtrace.internal.logger import get_logger +from ddtrace.trace import Span log = get_logger(__name__) diff --git a/ddtrace/internal/test_visibility/api.py b/ddtrace/internal/test_visibility/api.py index 4c11135b76d..041f929e3a9 100644 --- a/ddtrace/internal/test_visibility/api.py +++ b/ddtrace/internal/test_visibility/api.py @@ -2,8 +2,6 @@ import typing as t from typing import NamedTuple -from ddtrace import Span -from ddtrace import Tracer from ddtrace.ext.test_visibility import api as ext_api from ddtrace.ext.test_visibility._test_visibility_base import TestSessionId from ddtrace.ext.test_visibility._utils import _catch_and_log_exceptions @@ -21,6 +19,8 @@ from ddtrace.internal.test_visibility._internal_item_ids import InternalTestId from ddtrace.internal.test_visibility._itr_mixins import ITRMixin from ddtrace.internal.test_visibility._utils import _get_item_span +from ddtrace.trace import Span +from ddtrace.trace import Tracer log = get_logger(__name__) diff --git a/ddtrace/internal/tracemethods.py b/ddtrace/internal/tracemethods.py index cdf16c3b785..5328797c09f 100644 --- a/ddtrace/internal/tracemethods.py +++ b/ddtrace/internal/tracemethods.py @@ -172,7 +172,7 @@ def _(m): def trace_wrapper(wrapped, instance, args, kwargs): - from ddtrace import tracer + from ddtrace.trace import tracer resource = wrapped.__name__ if hasattr(instance, "__class__") and instance.__class__ is not type(None): # noqa: E721 diff --git a/ddtrace/internal/wrapping/context.py b/ddtrace/internal/wrapping/context.py index c6b4ee896e2..cf36a93011b 100644 --- a/ddtrace/internal/wrapping/context.py +++ b/ddtrace/internal/wrapping/context.py @@ -462,8 +462,6 @@ def _exit(self) -> None: def __exit__(self, *exc) -> None: if exc == (None, None, None): - # In Python 3.7 this gets called when the context manager is exited - # normally return for context in self._contexts[::-1]: diff --git a/ddtrace/internal/writer/writer.py b/ddtrace/internal/writer/writer.py index c494aa206a2..da3f09a99b1 100644 --- a/ddtrace/internal/writer/writer.py +++ b/ddtrace/internal/writer/writer.py @@ -14,7 +14,7 @@ import ddtrace from ddtrace.internal.utils.retry import fibonacci_backoff_with_jitter -from ddtrace.settings import _config as config +from ddtrace.settings import _global_config as config from ddtrace.settings.asm import config as asm_config from ddtrace.vendor.dogstatsd import DogStatsd @@ -43,7 +43,7 @@ from typing import Any # noqa:F401 from typing import Tuple # noqa:F401 - from ddtrace import Span # noqa:F401 + from ddtrace.trace import Span # noqa:F401 from .agent import ConnectionType # noqa:F401 diff --git a/ddtrace/llmobs/_constants.py b/ddtrace/llmobs/_constants.py index 3c61053df68..1f1fbaa3eee 100644 --- a/ddtrace/llmobs/_constants.py +++ b/ddtrace/llmobs/_constants.py @@ -13,7 +13,6 @@ INPUT_DOCUMENTS = "_ml_obs.meta.input.documents" INPUT_MESSAGES = "_ml_obs.meta.input.messages" INPUT_VALUE = "_ml_obs.meta.input.value" -INPUT_PARAMETERS = "_ml_obs.meta.input.parameters" INPUT_PROMPT = "_ml_obs.meta.input.prompt" OUTPUT_DOCUMENTS = "_ml_obs.meta.output.documents" diff --git a/ddtrace/llmobs/_evaluators/runner.py b/ddtrace/llmobs/_evaluators/runner.py index 056a80000e4..780293563d8 100644 --- a/ddtrace/llmobs/_evaluators/runner.py +++ b/ddtrace/llmobs/_evaluators/runner.py @@ -2,16 +2,17 @@ import os from typing import Dict -from ddtrace import Span from ddtrace.internal import forksafe from ddtrace.internal.logger import get_logger from ddtrace.internal.periodic import PeriodicService +from ddtrace.internal.service import ServiceStatus from ddtrace.internal.telemetry import telemetry_writer from ddtrace.internal.telemetry.constants import TELEMETRY_NAMESPACE from ddtrace.llmobs._evaluators.ragas.answer_relevancy import RagasAnswerRelevancyEvaluator from ddtrace.llmobs._evaluators.ragas.context_precision import RagasContextPrecisionEvaluator from ddtrace.llmobs._evaluators.ragas.faithfulness import RagasFaithfulnessEvaluator from ddtrace.llmobs._evaluators.sampler import EvaluatorRunnerSampler +from ddtrace.trace import Span logger = get_logger(__name__) @@ -31,6 +32,8 @@ class EvaluatorRunner(PeriodicService): 2. triggers evaluator runs over buffered finished spans on each `periodic` call """ + EVALUATORS_ENV_VAR = "DD_LLMOBS_EVALUATORS" + def __init__(self, interval: float, llmobs_service=None, evaluators=None): super(EvaluatorRunner, self).__init__(interval=interval) self._lock = forksafe.RLock() @@ -45,7 +48,7 @@ def __init__(self, interval: float, llmobs_service=None, evaluators=None): if len(self.evaluators) > 0: return - evaluator_str = os.getenv("_DD_LLMOBS_EVALUATORS") + evaluator_str = os.getenv(self.EVALUATORS_ENV_VAR) if evaluator_str is None: return @@ -94,6 +97,8 @@ def recreate(self) -> "EvaluatorRunner": ) def enqueue(self, span_event: Dict, span: Span) -> None: + if self.status == ServiceStatus.STOPPED: + return with self._lock: if len(self._buffer) >= self._buffer_limit: logger.warning( diff --git a/ddtrace/llmobs/_evaluators/sampler.py b/ddtrace/llmobs/_evaluators/sampler.py index 3598e90f7f3..524af217f83 100644 --- a/ddtrace/llmobs/_evaluators/sampler.py +++ b/ddtrace/llmobs/_evaluators/sampler.py @@ -46,7 +46,7 @@ def __repr__(self): class EvaluatorRunnerSampler: - SAMPLING_RULES_ENV_VAR = "_DD_LLMOBS_EVALUATOR_SAMPLING_RULES" + SAMPLING_RULES_ENV_VAR = "DD_LLMOBS_EVALUATOR_SAMPLING_RULES" def __init__(self): self.rules = self.parse_rules() @@ -59,8 +59,9 @@ def sample(self, evaluator_label, span): def parse_rules(self) -> List[EvaluatorRunnerSamplingRule]: rules = [] + sampling_rules_str = os.getenv(self.SAMPLING_RULES_ENV_VAR) - telemetry_writer.add_configuration("_DD_LLMOBS_EVALUATOR_SAMPLING_RULES", sampling_rules_str, origin="env") + telemetry_writer.add_configuration(self.SAMPLING_RULES_ENV_VAR, sampling_rules_str, origin="env") def parsing_failed_because(msg, maybe_throw_this): telemetry_writer.add_log( diff --git a/ddtrace/llmobs/_integrations/anthropic.py b/ddtrace/llmobs/_integrations/anthropic.py index dfb39c0f7e9..a3224a083cd 100644 --- a/ddtrace/llmobs/_integrations/anthropic.py +++ b/ddtrace/llmobs/_integrations/anthropic.py @@ -5,7 +5,6 @@ from typing import List from typing import Optional -from ddtrace._trace.span import Span from ddtrace.internal.logger import get_logger from ddtrace.llmobs._constants import INPUT_MESSAGES from ddtrace.llmobs._constants import INPUT_TOKENS_METRIC_KEY @@ -19,6 +18,7 @@ from ddtrace.llmobs._constants import TOTAL_TOKENS_METRIC_KEY from ddtrace.llmobs._integrations.base import BaseLLMIntegration from ddtrace.llmobs._utils import _get_attr +from ddtrace.trace import Span log = get_logger(__name__) diff --git a/ddtrace/llmobs/_integrations/base.py b/ddtrace/llmobs/_integrations/base.py index 9b6b5eadcda..a098c899014 100644 --- a/ddtrace/llmobs/_integrations/base.py +++ b/ddtrace/llmobs/_integrations/base.py @@ -8,7 +8,6 @@ from ddtrace import config from ddtrace._trace.sampler import RateSampler -from ddtrace._trace.span import Span from ddtrace.constants import _SPAN_MEASURED_KEY from ddtrace.contrib.internal.trace_utils import int_service from ddtrace.ext import SpanTypes @@ -16,6 +15,8 @@ from ddtrace.internal.dogstatsd import get_dogstatsd_client from ddtrace.internal.hostname import get_hostname from ddtrace.internal.logger import get_logger +from ddtrace.internal.telemetry import telemetry_writer +from ddtrace.internal.telemetry.constants import TELEMETRY_NAMESPACE from ddtrace.internal.utils.formats import asbool from ddtrace.llmobs._constants import PARENT_ID_KEY from ddtrace.llmobs._constants import PROPAGATED_PARENT_ID_KEY @@ -24,6 +25,7 @@ from ddtrace.llmobs._utils import _get_llmobs_parent_id from ddtrace.settings import IntegrationConfig from ddtrace.trace import Pin +from ddtrace.trace import Span log = get_logger(__name__) @@ -136,6 +138,15 @@ def trace(self, pin: Pin, operation_id: str, submit_to_llmobs: bool = False, **k # in these cases to avoid conflicting with the later propagated tags. parent_id = _get_llmobs_parent_id(span) or "undefined" span._set_ctx_item(PARENT_ID_KEY, str(parent_id)) + telemetry_writer.add_count_metric( + namespace=TELEMETRY_NAMESPACE.MLOBS, + name="span.start", + value=1, + tags=( + ("integration", self._integration_name), + ("autoinstrumented", "true"), + ), + ) return span @classmethod diff --git a/ddtrace/llmobs/_integrations/bedrock.py b/ddtrace/llmobs/_integrations/bedrock.py index d2d57b50ed3..ac6092cbe1a 100644 --- a/ddtrace/llmobs/_integrations/bedrock.py +++ b/ddtrace/llmobs/_integrations/bedrock.py @@ -3,7 +3,6 @@ from typing import List from typing import Optional -from ddtrace._trace.span import Span from ddtrace.internal.logger import get_logger from ddtrace.llmobs._constants import INPUT_MESSAGES from ddtrace.llmobs._constants import INPUT_TOKENS_METRIC_KEY @@ -19,6 +18,7 @@ from ddtrace.llmobs._constants import TOTAL_TOKENS_METRIC_KEY from ddtrace.llmobs._integrations import BaseLLMIntegration from ddtrace.llmobs._utils import _get_llmobs_parent_id +from ddtrace.trace import Span log = get_logger(__name__) diff --git a/ddtrace/llmobs/_integrations/gemini.py b/ddtrace/llmobs/_integrations/gemini.py index 491187475f0..ecec71e0645 100644 --- a/ddtrace/llmobs/_integrations/gemini.py +++ b/ddtrace/llmobs/_integrations/gemini.py @@ -4,7 +4,6 @@ from typing import List from typing import Optional -from ddtrace import Span from ddtrace.internal.utils import get_argument_value from ddtrace.llmobs._constants import INPUT_MESSAGES from ddtrace.llmobs._constants import METADATA @@ -19,6 +18,7 @@ from ddtrace.llmobs._integrations.utils import get_system_instructions_from_google_model from ddtrace.llmobs._integrations.utils import llmobs_get_metadata_google from ddtrace.llmobs._utils import _get_attr +from ddtrace.trace import Span class GeminiIntegration(BaseLLMIntegration): diff --git a/ddtrace/llmobs/_integrations/langchain.py b/ddtrace/llmobs/_integrations/langchain.py index 6b09038bd90..c6a77fad3bc 100644 --- a/ddtrace/llmobs/_integrations/langchain.py +++ b/ddtrace/llmobs/_integrations/langchain.py @@ -7,7 +7,6 @@ from typing import Union from ddtrace import config -from ddtrace._trace.span import Span from ddtrace.constants import ERROR_TYPE from ddtrace.internal.logger import get_logger from ddtrace.internal.utils import ArgumentError @@ -30,6 +29,7 @@ from ddtrace.llmobs._integrations.base import BaseLLMIntegration from ddtrace.llmobs._integrations.utils import format_langchain_io from ddtrace.llmobs.utils import Document +from ddtrace.trace import Span log = get_logger(__name__) diff --git a/ddtrace/llmobs/_integrations/langgraph.py b/ddtrace/llmobs/_integrations/langgraph.py index a45e822e0a2..08f3943e57e 100644 --- a/ddtrace/llmobs/_integrations/langgraph.py +++ b/ddtrace/llmobs/_integrations/langgraph.py @@ -3,7 +3,6 @@ from typing import List from typing import Optional -from ddtrace import tracer from ddtrace.ext import SpanTypes from ddtrace.internal.utils import get_argument_value from ddtrace.llmobs._constants import INPUT_VALUE @@ -16,7 +15,8 @@ from ddtrace.llmobs._utils import _get_attr from ddtrace.llmobs._utils import _get_llmobs_parent_id from ddtrace.llmobs._utils import _get_nearest_llmobs_ancestor -from ddtrace.span import Span +from ddtrace.trace import Span +from ddtrace.trace import tracer class LangGraphIntegration(BaseLLMIntegration): diff --git a/ddtrace/llmobs/_integrations/openai.py b/ddtrace/llmobs/_integrations/openai.py index ea660f53f68..7ed3aace08a 100644 --- a/ddtrace/llmobs/_integrations/openai.py +++ b/ddtrace/llmobs/_integrations/openai.py @@ -6,7 +6,6 @@ from typing import Tuple from ddtrace import config -from ddtrace._trace.span import Span from ddtrace.internal.constants import COMPONENT from ddtrace.internal.utils.version import parse_version from ddtrace.llmobs._constants import INPUT_DOCUMENTS @@ -25,6 +24,7 @@ from ddtrace.llmobs._utils import _get_attr from ddtrace.llmobs.utils import Document from ddtrace.trace import Pin +from ddtrace.trace import Span class OpenAIIntegration(BaseLLMIntegration): diff --git a/ddtrace/llmobs/_integrations/vertexai.py b/ddtrace/llmobs/_integrations/vertexai.py index 933cd685a1f..88d38f1975e 100644 --- a/ddtrace/llmobs/_integrations/vertexai.py +++ b/ddtrace/llmobs/_integrations/vertexai.py @@ -4,7 +4,6 @@ from typing import List from typing import Optional -from ddtrace import Span from ddtrace.internal.utils import ArgumentError from ddtrace.internal.utils import get_argument_value from ddtrace.llmobs._constants import INPUT_MESSAGES @@ -20,6 +19,7 @@ from ddtrace.llmobs._integrations.utils import get_system_instructions_from_google_model from ddtrace.llmobs._integrations.utils import llmobs_get_metadata_google from ddtrace.llmobs._utils import _get_attr +from ddtrace.trace import Span class VertexAIIntegration(BaseLLMIntegration): diff --git a/ddtrace/llmobs/_llmobs.py b/ddtrace/llmobs/_llmobs.py index 809afcf9011..14e12d3151e 100644 --- a/ddtrace/llmobs/_llmobs.py +++ b/ddtrace/llmobs/_llmobs.py @@ -8,10 +8,8 @@ from typing import Union import ddtrace -from ddtrace import Span from ddtrace import config from ddtrace import patch -from ddtrace._trace.context import Context from ddtrace.constants import ERROR_MSG from ddtrace.constants import ERROR_STACK from ddtrace.constants import ERROR_TYPE @@ -27,6 +25,7 @@ from ddtrace.internal.service import ServiceStatusError from ddtrace.internal.telemetry import telemetry_writer from ddtrace.internal.telemetry.constants import TELEMETRY_APM_PRODUCT +from ddtrace.internal.telemetry.constants import TELEMETRY_NAMESPACE from ddtrace.internal.utils.formats import asbool from ddtrace.internal.utils.formats import parse_tags_str from ddtrace.llmobs import _constants as constants @@ -34,7 +33,6 @@ from ddtrace.llmobs._constants import ANNOTATIONS_CONTEXT_ID from ddtrace.llmobs._constants import INPUT_DOCUMENTS from ddtrace.llmobs._constants import INPUT_MESSAGES -from ddtrace.llmobs._constants import INPUT_PARAMETERS from ddtrace.llmobs._constants import INPUT_PROMPT from ddtrace.llmobs._constants import INPUT_VALUE from ddtrace.llmobs._constants import METADATA @@ -68,6 +66,8 @@ from ddtrace.llmobs.utils import ExportedLLMObsSpan from ddtrace.llmobs.utils import Messages from ddtrace.propagation.http import HTTPPropagator +from ddtrace.trace import Context +from ddtrace.trace import Span log = get_logger(__name__) @@ -147,8 +147,6 @@ def _llmobs_span_event(cls, span: Span) -> Dict[str, Any]: meta["model_name"] = span._get_ctx_item(MODEL_NAME) meta["model_provider"] = (span._get_ctx_item(MODEL_PROVIDER) or "custom").lower() meta["metadata"] = span._get_ctx_item(METADATA) or {} - if span._get_ctx_item(INPUT_PARAMETERS): - meta["input"]["parameters"] = span._get_ctx_item(INPUT_PARAMETERS) if span_kind == "llm" and span._get_ctx_item(INPUT_MESSAGES) is not None: meta["input"]["messages"] = span._get_ctx_item(INPUT_MESSAGES) if span._get_ctx_item(INPUT_VALUE) is not None: @@ -284,6 +282,7 @@ def _stop_service(self) -> None: # Remove listener hooks for span events core.reset_listeners("trace.span_start", self._on_span_start) core.reset_listeners("trace.span_finish", self._on_span_finish) + core.reset_listeners("http.span_inject", self._inject_llmobs_context) forksafe.unregister(self._child_after_fork) @@ -297,7 +296,7 @@ def enable( api_key: Optional[str] = None, env: Optional[str] = None, service: Optional[str] = None, - _tracer: Optional[ddtrace.Tracer] = None, + _tracer: Optional[ddtrace.trace.Tracer] = None, ) -> None: """ Enable LLM Observability tracing. @@ -323,9 +322,6 @@ def enable( config._dd_api_key = api_key or config._dd_api_key config.env = env or config.env config.service = service or config.service - if os.getenv("DD_LLMOBS_APP_NAME"): - log.warning("`DD_LLMOBS_APP_NAME` is deprecated. Use `DD_LLMOBS_ML_APP` instead.") - config._llmobs_ml_app = ml_app or os.getenv("DD_LLMOBS_APP_NAME") config._llmobs_ml_app = ml_app or config._llmobs_ml_app # validate required values for LLMObs @@ -368,6 +364,7 @@ def enable( # Register hooks for span events core.on("trace.span_start", cls._instance._on_span_start) core.on("trace.span_finish", cls._instance._on_span_finish) + core.on("http.span_inject", cls._instance._inject_llmobs_context) atexit.register(cls.disable) telemetry_writer.product_activated(TELEMETRY_APM_PRODUCT.LLMOBS, True) @@ -485,7 +482,7 @@ def _patch_integrations() -> None: integrations_to_patch.update( {k: asbool(v) for k, v in dd_patch_modules_to_str.items() if k in SUPPORTED_LLMOBS_INTEGRATIONS.values()} ) - patch(**integrations_to_patch) # type: ignore[arg-type] + patch(**integrations_to_patch) log.debug("Patched LLM integrations: %s", list(SUPPORTED_LLMOBS_INTEGRATIONS.values())) @classmethod @@ -520,6 +517,15 @@ def _start_span( model_provider: Optional[str] = None, ml_app: Optional[str] = None, ) -> Span: + telemetry_writer.add_count_metric( + namespace=TELEMETRY_NAMESPACE.MLOBS, + name="span.start", + value=1, + tags=( + ("autoinstrumented", "false"), + ("kind", operation_kind), + ), + ) if name is None: name = operation_kind span = self.tracer.trace(name, resource=operation_kind, span_type=SpanTypes.LLM) @@ -700,7 +706,6 @@ def retrieval( def annotate( cls, span: Optional[Span] = None, - parameters: Optional[Dict[str, Any]] = None, prompt: Optional[dict] = None, input_data: Optional[Any] = None, output_data: Optional[Any] = None, @@ -710,7 +715,7 @@ def annotate( _name: Optional[str] = None, ) -> None: """ - Sets parameters, inputs, outputs, tags, and metrics as provided for a given LLMObs span. + Sets metadata, inputs, outputs, tags, and metrics as provided for a given LLMObs span. Note that with the exception of tags, this method will override any existing values for the provided fields. :param Span span: Span to annotate. If no span is provided, the current active span will be used. @@ -737,7 +742,6 @@ def annotate( {"name": str, "id": str, "text": str, "score": float}, or a list of dictionaries with the same signature. - other: any JSON serializable type. - :param parameters: (DEPRECATED) Dictionary of JSON serializable key-value pairs to set as input parameters. :param metadata: Dictionary of JSON serializable key-value metadata pairs relevant to the input/output operation described by the LLMObs span. :param tags: Dictionary of JSON serializable key-value tag pairs to set or update on the LLMObs span @@ -757,19 +761,29 @@ def annotate( log.warning("Cannot annotate a finished span.") return if metadata is not None: - cls._tag_metadata(span, metadata) + if not isinstance(metadata, dict): + log.warning("metadata must be a dictionary") + else: + cls._set_dict_attribute(span, METADATA, metadata) if metrics is not None: - cls._tag_metrics(span, metrics) + if not isinstance(metrics, dict): + log.warning("metrics must be a dictionary of string key - numeric value pairs.") + else: + cls._set_dict_attribute(span, METRICS, metrics) if tags is not None: - cls._tag_span_tags(span, tags) + if not isinstance(tags, dict): + log.warning("span tags must be a dictionary of string key - primitive value pairs.") + else: + cls._set_dict_attribute(span, TAGS, tags) span_kind = span._get_ctx_item(SPAN_KIND) - if parameters is not None: - log.warning("Setting parameters is deprecated, please set parameters and other metadata as tags instead.") - cls._tag_params(span, parameters) if _name is not None: span.name = _name if prompt is not None: - cls._tag_prompt(span, prompt) + try: + validated_prompt = validate_prompt(prompt) + cls._set_dict_attribute(span, INPUT_PROMPT, validated_prompt) + except TypeError: + log.warning("Failed to validate prompt with error: ", exc_info=True) if not span_kind: log.debug("Span kind not specified, skipping annotation for input/output data") return @@ -783,26 +797,6 @@ def annotate( else: cls._tag_text_io(span, input_value=input_data, output_value=output_data) - @staticmethod - def _tag_prompt(span, prompt: dict) -> None: - """Tags a given LLMObs span with a prompt""" - try: - validated_prompt = validate_prompt(prompt) - span._set_ctx_item(INPUT_PROMPT, validated_prompt) - except TypeError: - log.warning("Failed to validate prompt with error: ", exc_info=True) - return - - @staticmethod - def _tag_params(span: Span, params: Dict[str, Any]) -> None: - """Tags input parameters for a given LLMObs span. - Will be mapped to span's `meta.input.parameters` field. - """ - if not isinstance(params, dict): - log.warning("parameters must be a dictionary of key-value pairs.") - return - span._set_ctx_item(INPUT_PARAMETERS, params) - @classmethod def _tag_llm_io(cls, span, input_messages=None, output_messages=None): """Tags input/output messages for LLM-kind spans. @@ -873,41 +867,14 @@ def _tag_text_io(cls, span, input_value=None, output_value=None): span._set_ctx_item(OUTPUT_VALUE, str(output_value)) @staticmethod - def _tag_span_tags(span: Span, span_tags: Dict[str, Any]) -> None: - """Tags a given LLMObs span with a dictionary of key-value tag pairs. - If tags are already set on the span, the new tags will be merged with the existing tags. + def _set_dict_attribute(span: Span, key, value: Dict[str, Any]) -> None: + """Sets a given LLM Obs span attribute with a dictionary key/values. + If the attribute is already set on the span, the new dict with be merged with the existing + dict. """ - if not span_tags: - return - if not isinstance(span_tags, dict): - log.warning("span_tags must be a dictionary of string key - primitive value pairs.") - return - try: - existing_tags = span._get_ctx_item(TAGS) or {} - existing_tags.update(span_tags) - span._set_ctx_item(TAGS, existing_tags) - except Exception: - log.warning("Failed to parse tags.", exc_info=True) - - @staticmethod - def _tag_metadata(span: Span, metadata: Dict[str, Any]) -> None: - """Tags a given LLMObs span with a dictionary of key-value metadata pairs.""" - if not metadata: - return - if not isinstance(metadata, dict): - log.warning("metadata must be a dictionary of string key-value pairs.") - return - span._set_ctx_item(METADATA, metadata) - - @staticmethod - def _tag_metrics(span: Span, metrics: Dict[str, Any]) -> None: - """Tags a given LLMObs span with a dictionary of key-value metric pairs.""" - if not metrics: - return - if not isinstance(metrics, dict): - log.warning("metrics must be a dictionary of string key - numeric value pairs.") - return - span._set_ctx_item(METRICS, metrics) + existing_value = span._get_ctx_item(key) or {} + existing_value.update(value) + span._set_ctx_item(key, existing_value) @classmethod def submit_evaluation_for( @@ -1152,6 +1119,11 @@ def submit_evaluation( cls._instance._llmobs_eval_metric_writer.enqueue(evaluation_metric) + def _inject_llmobs_context(self, span_context: Context, request_headers: Dict[str, str]) -> None: + if self.enabled is False: + return + _inject_llmobs_parent_id(span_context) + @classmethod def inject_distributed_headers(cls, request_headers: Dict[str, str], span: Optional[Span] = None) -> Dict[str, str]: """Injects the span's distributed context into the given request headers.""" @@ -1169,7 +1141,6 @@ def inject_distributed_headers(cls, request_headers: Dict[str, str], span: Optio if span is None: log.warning("No span provided and no currently active span found.") return request_headers - _inject_llmobs_parent_id(span.context) HTTPPropagator.inject(span.context, request_headers) return request_headers diff --git a/ddtrace/llmobs/_utils.py b/ddtrace/llmobs/_utils.py index c2f44689a05..8861820002c 100644 --- a/ddtrace/llmobs/_utils.py +++ b/ddtrace/llmobs/_utils.py @@ -5,7 +5,6 @@ from typing import Union import ddtrace -from ddtrace import Span from ddtrace import config from ddtrace.ext import SpanTypes from ddtrace.internal.logger import get_logger @@ -21,6 +20,7 @@ from ddtrace.llmobs._constants import PROPAGATED_PARENT_ID_KEY from ddtrace.llmobs._constants import SESSION_ID from ddtrace.llmobs._constants import VERTEXAI_APM_SPAN_NAME +from ddtrace.trace import Span log = get_logger(__name__) diff --git a/ddtrace/opentracer/span.py b/ddtrace/opentracer/span.py index 8be50b9cd4b..75bb522d06f 100644 --- a/ddtrace/opentracer/span.py +++ b/ddtrace/opentracer/span.py @@ -9,20 +9,20 @@ from opentracing import Span as OpenTracingSpan from opentracing.ext import tags as OTTags -from ddtrace._trace.context import Context as DatadogContext # noqa:F401 -from ddtrace._trace.span import Span as DatadogSpan 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.tracer import Tracer # noqa:F401 + from ddtrace.trace import Tracer # noqa:F401 _TagNameType = Union[Text, bytes] diff --git a/ddtrace/opentracer/span_context.py b/ddtrace/opentracer/span_context.py index 63cee94f4d3..171142d18a8 100644 --- a/ddtrace/opentracer/span_context.py +++ b/ddtrace/opentracer/span_context.py @@ -4,8 +4,8 @@ from opentracing import SpanContext as OpenTracingSpanContext -from ddtrace._trace.context import Context as DatadogContext from ddtrace.internal.compat import NumericType # noqa:F401 +from ddtrace.trace import Context as DatadogContext class SpanContext(OpenTracingSpanContext): diff --git a/ddtrace/opentracer/tracer.py b/ddtrace/opentracer/tracer.py index 2c8ac4a5d65..ca10cb8125a 100644 --- a/ddtrace/opentracer/tracer.py +++ b/ddtrace/opentracer/tracer.py @@ -11,13 +11,13 @@ from opentracing.scope_managers import ThreadLocalScopeManager import ddtrace -from ddtrace import Tracer as DatadogTracer from ddtrace import config as ddconfig -from ddtrace._trace.context import Context as DatadogContext # noqa:F401 -from ddtrace._trace.span import Span as DatadogSpan from ddtrace.internal.constants import SPAN_API_OPENTRACING from ddtrace.internal.utils.config import get_application_name from ddtrace.settings 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 ddtrace.vendor.debtcollector import deprecate from ..internal.logger import get_logger diff --git a/ddtrace/profiling/__init__.py b/ddtrace/profiling/__init__.py index 3361b574dd2..3e96d7a6685 100644 --- a/ddtrace/profiling/__init__.py +++ b/ddtrace/profiling/__init__.py @@ -1,21 +1 @@ -import sys - -from ddtrace.profiling import _build - from .profiler import Profiler # noqa:F401 - - -def _not_compatible_abi(): - raise ImportError( - "Python ABI is not compatible, you need to recompile this module.\n" - "Reinstall it with the following command:\n" - " pip install --no-binary ddtrace ddtrace" - ) - - -if (3, 7) < _build.compiled_with <= (3, 7, 3): - if sys.version_info[:3] > (3, 7, 3): - _not_compatible_abi() -elif (3, 7, 3) < _build.compiled_with < (3, 8): - if (3, 7) < sys.version_info[:3] <= (3, 7, 3): - _not_compatible_abi() diff --git a/ddtrace/profiling/_build.pyi b/ddtrace/profiling/_build.pyi deleted file mode 100644 index 88f43fc7d9c..00000000000 --- a/ddtrace/profiling/_build.pyi +++ /dev/null @@ -1,3 +0,0 @@ -import typing - -compiled_with: typing.Tuple[int, int, int] diff --git a/ddtrace/profiling/_build.pyx b/ddtrace/profiling/_build.pyx deleted file mode 100644 index bb4ec38738b..00000000000 --- a/ddtrace/profiling/_build.pyx +++ /dev/null @@ -1,4 +0,0 @@ -import typing - - -compiled_with: typing.Tuple[int, int, int] = (PY_MAJOR_VERSION, PY_MINOR_VERSION, PY_MICRO_VERSION) # type: ignore[name-defined] diff --git a/ddtrace/profiling/_threading.pyx b/ddtrace/profiling/_threading.pyx index b1267f1d6df..2a20b29b678 100644 --- a/ddtrace/profiling/_threading.pyx +++ b/ddtrace/profiling/_threading.pyx @@ -4,8 +4,6 @@ import sys import typing import weakref -import _thread - from ddtrace.internal._threads import periodic_threads from ddtrace.internal._unpatched import _threading as ddtrace_threading @@ -23,31 +21,6 @@ cdef extern from "": PyThreadState* PyThreadState_Get() -IF UNAME_SYSNAME == "Linux": - from ddtrace.internal.module import ModuleWatchdog - - cdef extern from "" nogil: - int __NR_gettid - long syscall(long number, ...) - - IF PY_VERSION_HEX < 0x03080000: - # The native_id attribute is available in Python >= 3.8. - @ModuleWatchdog.after_module_imported("threading") - def native_id_hook(threading): - def bootstrap_wrapper(f, args, kwargs): - try: - return f(*args, **kwargs) - finally: - # DEV: args[0] == self - args[0].native_id = PyLong_FromLong(syscall(__NR_gettid)) - - from ddtrace.internal.wrapping import wrap - wrap(threading.Thread._bootstrap, bootstrap_wrapper) - - # Assign the native thread ID to the main thread as well - threading.current_thread().native_id = PyLong_FromLong(syscall(__NR_gettid)) - - cpdef get_thread_by_id(thread_id): # Do not force-load the threading module if it's not already loaded threading = sys.modules.get("threading", ddtrace_threading) diff --git a/ddtrace/profiling/collector/_lock.py b/ddtrace/profiling/collector/_lock.py index ec0c438b2b9..3d9e974734a 100644 --- a/ddtrace/profiling/collector/_lock.py +++ b/ddtrace/profiling/collector/_lock.py @@ -10,7 +10,6 @@ import wrapt -from ddtrace._trace.tracer import Tracer from ddtrace.internal.datadog.profiling import ddup from ddtrace.internal.logger import get_logger from ddtrace.profiling import _threading @@ -20,6 +19,7 @@ from ddtrace.profiling.collector import _traceback from ddtrace.profiling.recorder import Recorder from ddtrace.settings.profiling import config +from ddtrace.trace import Tracer LOG = get_logger(__name__) diff --git a/ddtrace/profiling/collector/_memalloc.c b/ddtrace/profiling/collector/_memalloc.c index 1f2b87e0433..1e1b9dbf52e 100644 --- a/ddtrace/profiling/collector/_memalloc.c +++ b/ddtrace/profiling/collector/_memalloc.c @@ -394,20 +394,28 @@ iterevents_new(PyTypeObject* type, PyObject* Py_UNUSED(args), PyObject* Py_UNUSE } IterEventsState* iestate = (IterEventsState*)type->tp_alloc(type, 0); - if (!iestate) + if (!iestate) { + PyErr_SetString(PyExc_RuntimeError, "failed to allocate IterEventsState"); return NULL; + } memalloc_assert_gil(); - /* reset the current traceback list */ - if (memlock_trylock(&g_memalloc_lock)) { - iestate->alloc_tracker = global_alloc_tracker; - global_alloc_tracker = alloc_tracker_new(); - memlock_unlock(&g_memalloc_lock); - } else { + /* Reset the current traceback list. Do this outside lock so we can track it, + * and avoid reentrancy/deadlock problems, if we start tracking the raw + * allocator domain */ + alloc_tracker_t* tracker = alloc_tracker_new(); + if (!tracker) { + PyErr_SetString(PyExc_RuntimeError, "failed to allocate new allocation tracker"); Py_TYPE(iestate)->tp_free(iestate); return NULL; } + + memlock_lock(&g_memalloc_lock); + iestate->alloc_tracker = global_alloc_tracker; + global_alloc_tracker = tracker; + memlock_unlock(&g_memalloc_lock); + iestate->seq_index = 0; PyObject* iter_and_count = PyTuple_New(3); diff --git a/ddtrace/profiling/collector/pytorch.py b/ddtrace/profiling/collector/pytorch.py index 3d9e636871d..8d2bee1e965 100644 --- a/ddtrace/profiling/collector/pytorch.py +++ b/ddtrace/profiling/collector/pytorch.py @@ -7,12 +7,12 @@ import wrapt -from ddtrace._trace.tracer import Tracer from ddtrace.internal.datadog.profiling import ddup from ddtrace.profiling import _threading from ddtrace.profiling import collector from ddtrace.profiling.recorder import Recorder from ddtrace.settings.profiling import config +from ddtrace.trace import Tracer LOG = logging.getLogger(__name__) diff --git a/ddtrace/profiling/collector/stack.pyi b/ddtrace/profiling/collector/stack.pyi index e1181c96b05..237744eb9d4 100644 --- a/ddtrace/profiling/collector/stack.pyi +++ b/ddtrace/profiling/collector/stack.pyi @@ -4,4 +4,4 @@ import ddtrace from ddtrace.profiling import collector class StackCollector(collector.PeriodicCollector): - tracer: typing.Optional[ddtrace.Tracer] + tracer: typing.Optional[ddtrace.trace.Tracer] diff --git a/ddtrace/profiling/collector/stack.pyx b/ddtrace/profiling/collector/stack.pyx index 46b24e39c33..6fb34ca91c6 100644 --- a/ddtrace/profiling/collector/stack.pyx +++ b/ddtrace/profiling/collector/stack.pyx @@ -10,7 +10,7 @@ import typing from ddtrace.internal._unpatched import _threading as ddtrace_threading from ddtrace._trace import context from ddtrace._trace import span as ddspan -from ddtrace._trace.tracer import Tracer +from ddtrace.trace import Tracer from ddtrace.internal._threads import periodic_threads from ddtrace.internal.datadog.profiling import ddup from ddtrace.internal.datadog.profiling import stack_v2 @@ -194,19 +194,7 @@ ELIF UNAME_SYSNAME != "Windows": PyObject* PyException_GetTraceback(PyObject* exc) PyObject* Py_TYPE(PyObject* ob) - IF PY_VERSION_HEX < 0x03080000: - # Python 3.7 - cdef extern from "": - - cdef struct pyinterpreters: - PyThread_type_lock mutex - - ctypedef struct _PyRuntimeState: - pyinterpreters interpreters - - cdef extern _PyRuntimeState _PyRuntime - - ELIF PY_VERSION_HEX >= 0x03080000: + IF PY_VERSION_HEX >= 0x03080000: # Python 3.8 cdef extern from "": diff --git a/ddtrace/profiling/exporter/http.py b/ddtrace/profiling/exporter/http.py index b4ec6994d72..7ba1ef42eb0 100644 --- a/ddtrace/profiling/exporter/http.py +++ b/ddtrace/profiling/exporter/http.py @@ -40,7 +40,7 @@ class PprofHTTPExporter(pprof.PprofExporter): def __init__( self, - tracer: ddtrace.Tracer = ddtrace.tracer, + tracer: ddtrace.trace.Tracer = ddtrace.tracer, enable_code_provenance: bool = True, api_key: typing.Optional[str] = None, timeout: float = config.api_timeout, diff --git a/ddtrace/profiling/scheduler.py b/ddtrace/profiling/scheduler.py index 98ab424c42b..aa3db25e049 100644 --- a/ddtrace/profiling/scheduler.py +++ b/ddtrace/profiling/scheduler.py @@ -9,12 +9,12 @@ from typing import Sequence # noqa F401 import ddtrace -from ddtrace._trace.tracer import Tracer from ddtrace.internal import periodic from ddtrace.internal.datadog.profiling import ddup from ddtrace.profiling import _traceback from ddtrace.profiling import exporter from ddtrace.settings.profiling import config +from ddtrace.trace import Tracer from .exporter import Exporter from .recorder import EventsType diff --git a/ddtrace/propagation/_database_monitoring.py b/ddtrace/propagation/_database_monitoring.py index 5b585b13210..ae03aa5c4fe 100644 --- a/ddtrace/propagation/_database_monitoring.py +++ b/ddtrace/propagation/_database_monitoring.py @@ -10,14 +10,14 @@ from ..internal import compat from ..internal.utils import get_argument_value from ..internal.utils import set_argument_value -from ..settings import _config as dd_config +from ..settings import _global_config as dd_config from ..settings._database_monitoring import dbm_config if TYPE_CHECKING: from typing import Optional # noqa:F401 - from ddtrace import Span # noqa:F401 + from ddtrace.trace import Span # noqa:F401 import sys diff --git a/ddtrace/propagation/http.py b/ddtrace/propagation/http.py index fdaf97410ad..65d3595ba3a 100644 --- a/ddtrace/propagation/http.py +++ b/ddtrace/propagation/http.py @@ -12,7 +12,7 @@ import urllib.parse import ddtrace -from ddtrace._trace.span import Span # noqa:F401 +from ddtrace.trace import Span # noqa:F401 if sys.version_info >= (3, 8): @@ -23,12 +23,13 @@ from ddtrace import config from ddtrace._trace._span_link import SpanLink -from ddtrace._trace.context import Context from ddtrace._trace.span import _get_64_highest_order_bits_as_hex from ddtrace._trace.span import _get_64_lowest_order_bits_as_int from ddtrace._trace.span import _MetaDictType from ddtrace.appsec._constants import APPSEC +from ddtrace.internal.core import dispatch from ddtrace.settings.asm import config as asm_config +from ddtrace.trace import Context from ..constants import AUTO_KEEP from ..constants import AUTO_REJECT @@ -509,7 +510,7 @@ def _extract(headers): class _B3SingleHeader: - """Helper class to inject/extract B3 Single Header + """Helper class to inject/extract B3 https://github.com/openzipkin/b3-propagation/blob/3e54cda11620a773d53c7f64d2ebb10d3a01794c/README.md#single-header @@ -1052,6 +1053,7 @@ def parent_call(): :param dict headers: HTTP headers to extend with tracing attributes. :param Span non_active_span: Only to be used if injecting a non-active span. """ + dispatch("http.span_inject", (span_context, headers)) if not config._propagation_style_inject: return if non_active_span is not None and non_active_span.context is not span_context: @@ -1089,11 +1091,6 @@ def parent_call(): for key in span_context._baggage: headers[_HTTP_BAGGAGE_PREFIX + key] = span_context._baggage[key] - if config._llmobs_enabled: - from ddtrace.llmobs._utils import _inject_llmobs_parent_id - - _inject_llmobs_parent_id(span_context) - if PROPAGATION_STYLE_DATADOG in config._propagation_style_inject: _DatadogMultiHeader._inject(span_context, headers) if PROPAGATION_STYLE_B3_MULTI in config._propagation_style_inject: diff --git a/ddtrace/provider.py b/ddtrace/provider.py index 4a275ece8c8..7b9867de01a 100644 --- a/ddtrace/provider.py +++ b/ddtrace/provider.py @@ -7,7 +7,8 @@ deprecate( - "The context provider interface is deprecated.", - message="The trace context is an internal interface and will no longer be supported.", + "The context provider interface is deprecated", + message="Import BaseContextProvider from `ddtrace.trace` instead.", category=DDTraceDeprecationWarning, + removal_version="3.0.0", ) diff --git a/ddtrace/runtime/__init__.py b/ddtrace/runtime/__init__.py index dc6a3ae745c..1ae6fc97191 100644 --- a/ddtrace/runtime/__init__.py +++ b/ddtrace/runtime/__init__.py @@ -26,7 +26,7 @@ class RuntimeMetrics(metaclass=_RuntimeMetricsStatus): @staticmethod def enable(tracer=None, dogstatsd_url=None, flush_interval=None): - # type: (Optional[ddtrace.Tracer], Optional[str], Optional[float]) -> None + # type: (Optional[ddtrace.trace.Tracer], Optional[str], Optional[float]) -> None """ Enable the runtime metrics collection service. diff --git a/ddtrace/settings/__init__.py b/ddtrace/settings/__init__.py index 2c3a0bf7807..ebbb0c31f7b 100644 --- a/ddtrace/settings/__init__.py +++ b/ddtrace/settings/__init__.py @@ -1,12 +1,12 @@ from .._hooks import Hooks -from .config import Config +from ._config import Config from .exceptions import ConfigException from .http import HttpConfig from .integration import IntegrationConfig # Default global config -_config = Config() +_global_config = Config() __all__ = [ "Config", diff --git a/ddtrace/settings/_config.py b/ddtrace/settings/_config.py new file mode 100644 index 00000000000..35d2849884d --- /dev/null +++ b/ddtrace/settings/_config.py @@ -0,0 +1,909 @@ +from copy import deepcopy +import json +import os +import re +import sys +from typing import Any # noqa:F401 +from typing import Callable # noqa:F401 +from typing import Dict # noqa:F401 +from typing import List # noqa:F401 +from typing import Optional # noqa:F401 +from typing import Tuple # noqa:F401 +from typing import Union # noqa:F401 + +from ddtrace.internal._file_queue import File_Queue +from ddtrace.internal.serverless import in_azure_function +from ddtrace.internal.serverless import in_gcp_function +from ddtrace.internal.telemetry import telemetry_writer +from ddtrace.internal.utils.cache import cachedmethod +from ddtrace.internal.utils.deprecations import DDTraceDeprecationWarning +from ddtrace.vendor.debtcollector import deprecate + +from .._trace.pin import Pin +from ..internal import gitmetadata +from ..internal.constants import _PROPAGATION_BEHAVIOR_DEFAULT +from ..internal.constants import _PROPAGATION_BEHAVIOR_IGNORE +from ..internal.constants import _PROPAGATION_STYLE_DEFAULT +from ..internal.constants import _PROPAGATION_STYLE_NONE +from ..internal.constants import DEFAULT_BUFFER_SIZE +from ..internal.constants import DEFAULT_MAX_PAYLOAD_SIZE +from ..internal.constants import DEFAULT_PROCESSING_INTERVAL +from ..internal.constants import DEFAULT_REUSE_CONNECTIONS +from ..internal.constants import DEFAULT_SAMPLING_RATE_LIMIT +from ..internal.constants import DEFAULT_TIMEOUT +from ..internal.constants import PROPAGATION_STYLE_ALL +from ..internal.logger import get_logger +from ..internal.schema import DEFAULT_SPAN_SERVICE_NAME +from ..internal.serverless import in_aws_lambda +from ..internal.utils.formats import asbool +from ..internal.utils.formats import parse_tags_str +from ._core import get_config as _get_config +from ._inferred_base_service import detect_service +from ._otel_remapper import otel_remapping as _otel_remapping +from .endpoint_config import fetch_config_from_endpoint +from .http import HttpConfig +from .integration import IntegrationConfig + + +if sys.version_info >= (3, 8): + from typing import Literal # noqa:F401 +else: + from typing_extensions import Literal + + +log = get_logger(__name__) + +ENDPOINT_FETCHED_CONFIG = fetch_config_from_endpoint() + +DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP_DEFAULT = ( + r"(?ix)" + r"(?:" # JSON-ish leading quote + r'(?:"|%22)?' + r")" + r"(?:" # common keys" + r"(?:old[-_]?|new[-_]?)?p(?:ass)?w(?:or)?d(?:1|2)?" # pw, password variants + r"|pass(?:[-_]?phrase)?" # pass, passphrase variants + r"|secret" + r"|(?:" # key, key_id variants + r"api[-_]?" + r"|private[-_]?" + r"|public[-_]?" + r"|access[-_]?" + r"|secret[-_]?" + r"|app(?:lica" + r"tion)?[-_]?" + r")key(?:[-_]?id)?" + r"|token" + r"|consumer[-_]?(?:id|key|secret)" + r"|sign(?:ed|ature)?" + r"|auth(?:entication|orization)?" + r")" + r"(?:" + # '=' query string separator, plus value til next '&' separator + r"(?:\s|%20)*(?:=|%3D)[^&]+" + # JSON-ish '": "somevalue"', key being handled with case above, without the opening '"' + r'|(?:"|%22)' # closing '"' at end of key + r"(?:\s|%20)*(?::|%3A)(?:\s|%20)*" # ':' key-value separator, with surrounding spaces + r'(?:"|%22)' # opening '"' at start of value + r'(?:%2[^2]|%[^2]|[^"%])+' # value + r'(?:"|%22)' # closing '"' at end of value + r")" + r"|(?:" # other common secret values + r" bearer(?:\s|%20)+[a-z0-9._\-]+" + r"|token(?::|%3A)[a-z0-9]{13}" + r"|gh[opsu]_[0-9a-zA-Z]{36}" + r"|ey[I-L](?:[\w=-]|%3D)+\.ey[I-L](?:[\w=-]|%3D)+(?:\.(?:[\w.+/=-]|%3D|%2F|%2B)+)?" + r"|-{5}BEGIN(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY-{5}[^\-]+-{5}END" + r"(?:[a-z\s]|%20)+PRIVATE(?:\s|%20)KEY(?:-{5})?(?:\n|%0A)?" + r"|(?:ssh-(?:rsa|dss)|ecdsa-[a-z0-9]+-[a-z0-9]+)(?:\s|%20|%09)+(?:[a-z0-9/.+]" + r"|%2F|%5C|%2B){100,}(?:=|%3D)*(?:(?:\s|%20|%09)+[a-z0-9._-]+)?" + r")" +) + + +def _parse_propagation_styles(styles_str): + # type: (str) -> Optional[List[str]] + """Helper to parse http propagation extract/inject styles via env variables. + + The expected format is:: + +