diff --git a/.github/workflows/docker-builds.yml b/.github/workflows/docker-builds.yml index c1b495da..972d2558 100644 --- a/.github/workflows/docker-builds.yml +++ b/.github/workflows/docker-builds.yml @@ -88,6 +88,18 @@ jobs: --version ${{ matrix.common_version_noclang }} \ --push NO + - name: Build common wrappers (Conan) + run: | + set -ex + uv run aswfdocker \ + --verbose \ + build \ + --ci-image-type PACKAGE \ + --group common-wrappers \ + --version ${{ matrix.common_version_noclang }} \ + --build-missing \ + --push NO + - name: Build Ninja and CMake (Conan) run: | set -ex @@ -97,7 +109,6 @@ jobs: --ci-image-type PACKAGE \ --group common \ --version ${{ matrix.common_version_noclang }} \ - --use-conan \ --build-missing \ --target ninja \ --target cmake \ @@ -112,7 +123,6 @@ jobs: --ci-image-type PACKAGE \ --group common \ --version ${{ matrix.common_version }} \ - --use-conan \ --build-missing \ --target clang \ --push NO @@ -136,7 +146,6 @@ jobs: --ci-image-type PACKAGE \ --group base1-wrappers \ --version ${{ matrix.version_noclang }} \ - --use-conan \ --build-missing \ --push NO @@ -149,7 +158,6 @@ jobs: --ci-image-type PACKAGE \ --group base1-1 \ --version ${{ matrix.version_noclang }} \ - --use-conan \ --build-missing \ --push NO @@ -162,7 +170,6 @@ jobs: --ci-image-type PACKAGE \ --group base1-2 \ --version ${{ matrix.version_noclang }} \ - --use-conan \ --build-missing \ --push NO @@ -175,7 +182,6 @@ jobs: --ci-image-type PACKAGE \ --group base1-3 \ --version ${{ matrix.version_noclang }} \ - --use-conan \ --build-missing \ --push NO @@ -188,7 +194,6 @@ jobs: --ci-image-type PACKAGE \ --group base2-wrappers \ --version ${{ matrix.version_noclang }} \ - --use-conan \ --build-missing \ --push NO @@ -201,7 +206,6 @@ jobs: --ci-image-type PACKAGE \ --group base2-1 --version ${{ matrix.version_noclang }} \ - --use-conan \ --build-missing \ --push NO @@ -214,7 +218,6 @@ jobs: --ci-image-type PACKAGE \ --group base2-2 \ --version ${{ matrix.version_noclang }} \ - --use-conan \ --build-missing \ --push NO @@ -227,7 +230,6 @@ jobs: --ci-image-type PACKAGE \ --group base3 \ --version ${{ matrix.version_noclang }} \ - --use-conan \ --build-missing \ --push NO @@ -251,7 +253,6 @@ jobs: --ci-image-type PACKAGE \ --group vfx1-wrappers \ --version ${{ matrix.version_noclang }} \ - --use-conan \ --build-missing \ --push NO @@ -264,7 +265,6 @@ jobs: --ci-image-type PACKAGE \ --group vfx1-1 \ --version ${{ matrix.version_noclang }} \ - --use-conan \ --build-missing \ --push NO @@ -277,7 +277,6 @@ jobs: --ci-image-type PACKAGE \ --group vfx1-2 \ --version ${{ matrix.version_noclang }} \ - --use-conan \ --build-missing \ --push NO @@ -290,7 +289,6 @@ jobs: --ci-image-type PACKAGE \ --group vfx1-3 \ --version ${{ matrix.version_noclang }} \ - --use-conan \ --build-missing \ --push NO @@ -303,7 +301,6 @@ jobs: --ci-image-type PACKAGE \ --group vfx1-4 \ --version ${{ matrix.version_noclang }} \ - --use-conan \ --build-missing \ --push NO @@ -316,7 +313,6 @@ jobs: --ci-image-type PACKAGE \ --group vfx1-5 \ --version ${{ matrix.version_noclang }} \ - --use-conan \ --build-missing \ --push NO @@ -329,19 +325,6 @@ jobs: --ci-image-type PACKAGE \ --group vfx1-6 \ --version ${{ matrix.version_noclang }} \ - --use-conan \ - --build-missing \ - --push NO - - - name: Build vfx2 non-Conan packages - run: | - set -ex - uv run aswfdocker \ - --verbose \ - build \ - --ci-image-type PACKAGE \ - --group vfx2 \ - --version ${{ matrix.version_noclang }} \ --build-missing \ --push NO diff --git a/.github/workflows/python-sonar.yml b/.github/workflows/python-sonar.yml index 4ee4c462..e97b4742 100644 --- a/.github/workflows/python-sonar.yml +++ b/.github/workflows/python-sonar.yml @@ -17,7 +17,7 @@ jobs: - name: Set up Python uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: - python-version: "3.9" + python-version: "3.10" - name: Install uv uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 1d50e4a2..35649c1d 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -22,7 +22,7 @@ jobs: - name: Set up Python uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: - python-version: "3.9" + python-version: "3.10" - name: Install uv uses: astral-sh/setup-uv@e06108dd0aef18192324c70427afc47652e63a82 # v7.5.0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cfdb6aa5..0992c72f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,7 +23,7 @@ jobs: build: true push_description: true - group: conan - args: --use-conan + args: "" build: ${{ contains(github.ref, '/ci-package') }} push_description: false diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9773f5da..d5255bc4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -4,7 +4,7 @@ repos: hooks: # Don't reformat vendored Conan recipes - id: black - language_version: python3.9 + language_version: python3.10 exclude: packages/conan/recipes/ - repo: local hooks: diff --git a/CHANGELOG.md b/CHANGELOG.md index e02c76e0..92849307 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,21 @@ All notable changes to this project will be documented in this file. +# 2026-03-31 + +- All releases + - [OpenTimelineIO now built as a Conan package](https://github.com/AcademySoftwareFoundation/aswf-docker/issues/231) + - we previously weren't actually building the C++ components of OTIO, just installing Python prerequisites + - for now we only build the C++ libraries, need to resolve issue of installation location to also build Python module + - aswfdocker cleanup + - since all packages are now built as Conan packages, we remove obsolete support for building packages as container images + - `aswfdocker build -c / --use-conan` emits a warning about being deprecated + - `aswfdocker migrate` and `aswfdocker download` emit a warning about being deprecated + - minimum Python version to run aswfdocker is now Python 3.10, needed for Click 8.3.1 + - [CMake built with SSL support](https://github.com/AcademySoftwareFoundation/aswf-docker/issues/326), can download from https:// +- 2026.x (no new container image release yet) + - [OTIO 0.17.0 to 0.18.1](https://github.com/AcademySoftwareFoundation/aswf-docker/issues/313) + # 2026-03-23 OpenUSD updates and Conan package. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ed2b6620..a02be66d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -354,12 +354,7 @@ Unfortunately there is duplication between the version information in When a sufficiently recent package is provided by the underlying OS distribution, packages labeled as version `system` are created which are thin wrappers around system installed components, and the Conan profile is used to remap `requires()` call to specific versions to these wrapper packages. Confusingly some will have an actual version number since some dependent packages check for acceptable version ranges. A better versioning scheme would be desirable for these wrapper packages. -To test locally, use the `aswfdocker build` command with the `--use-conan` argument. -The `--keep-source` and `--keep-build` can help when iterating on the build recipe to -avoid re-downloading the source, and even keep the previous build artifact. -All regular aswfdocker commands and options work the same with conan or docker packages. - -You can use the `aswfdocker conandiff` command to view updates in the upstream Conan Center Index recipes since the last time the local copy was updated. This requires the `From: https://...` header comment to be updated correctly. +You can use the `aswfdocker conandiff` command to view updates in the upstream Conan Center Index recipes since the last time the local copy was updated. This requires the `From: https://...` header comment to be updated correctly in our vendored copies of the CCI recipes. ``` $ aswfdocker conandiff @@ -392,7 +387,7 @@ at the end of the `versions.yaml` file, see `gtest` as an example. ### Peeking into the Conan cache -When building a Conan package, `aswfdocker build --use-conan` uses [common/packages/Dockerfile](https://github.com/AcademySoftwareFoundation/aswf-docker/blob/main/packages/common/Dockerfile) which uses a +When building a Conan package, `aswfdocker build` uses [common/packages/Dockerfile](https://github.com/AcademySoftwareFoundation/aswf-docker/blob/main/packages/common/Dockerfile) which uses a [Docker Cache Mount](https://docs.docker.com/build/cache/optimize/#use-cache-mounts) to store the persistent cache of local Conan package builds (similarly for the [ccache](https://ccache.dev/) persistent cache): @@ -654,7 +649,6 @@ aswfdocker release -t PACKAGE -g vfx1-3 -v 2024 -v 2025 -v 2026 --docker-org asw aswfdocker release -t PACKAGE -g vfx1-4 -v 2024 -v 2025 -v 2026 --docker-org aswf -m "RELEASE_NOTES!" aswfdocker release -t PACKAGE -g vfx1-5 -v 2024 -v 2025 -v 2026 --docker-org aswf -m "RELEASE_NOTES!" aswfdocker release -t PACKAGE -g vfx1-6 -v 2024 -v 2025 -v 2026 --docker-org aswf -m "RELEASE_NOTES!" -aswfdocker release -t PACKAGE -g vfx2 -v 2024 -v 2025 -v 2026 --docker-org aswf -m "RELEASE_NOTES!" # Finally build the CI images aswfdocker release -t IMAGE -g base -v 2024 -v 2025 -v 2026 --docker-org aswf -m "RELEASE_NOTES!" diff --git a/ci-base/Dockerfile b/ci-base/Dockerfile index f02b7882..6fdf189e 100644 --- a/ci-base/Dockerfile +++ b/ci-base/Dockerfile @@ -29,6 +29,7 @@ ARG ASWF_LIBXCRYPT_VERSION ARG ASWF_LZ4_VERSION ARG ASWF_PUGIXML_VERSION ARG ASWF_PYSTRING_VERSION +ARG ASWF_RAPIDJSON_VERSION ARG ASWF_SNAPPY_VERSION ARG ASWF_ONETBB_VERSION ARG ASWF_TSL_ROBIN_MAP_VERSION @@ -52,7 +53,6 @@ ARG ASWF_VFXPLATFORM_VERSION -# Comment out this block to use Conan packages FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-base @@ -80,6 +80,7 @@ ARG ASWF_LIBXCRYPT_VERSION ARG ASWF_LZ4_VERSION ARG ASWF_PUGIXML_VERSION ARG ASWF_PYSTRING_VERSION +ARG ASWF_RAPIDJSON_VERSION ARG ASWF_SNAPPY_VERSION ARG ASWF_ONETBB_VERSION ARG ASWF_TSL_ROBIN_MAP_VERSION @@ -127,6 +128,7 @@ LABEL io.aswf.docker.versions.libxcrypt="$ASWF_LIBXCRYPT_VERSION" LABEL io.aswf.docker.versions.lz4="$ASWF_LZ4_VERSION" LABEL io.aswf.docker.versions.pugixml="$ASWF_PUGIXML_VERSION" LABEL io.aswf.docker.versions.pystring="$ASWF_PYSTRING_VERSION" +LABEL io.aswf.docker.versions.rapidjson="$ASWF_RAPIDJSON_VERSION" LABEL io.aswf.docker.versions.snappy="$ASWF_SNAPPY_VERSION" LABEL io.aswf.docker.versions.onetbb="$ASWF_ONETBB_VERSION" LABEL io.aswf.docker.versions.tsl-robin-map="$ASWF_TSL_ROBIN_MAP_VERSION" @@ -172,6 +174,7 @@ ENV ASWF_LIBXCRYPT_VERSION=$ASWF_LIBXCRYPT_VERSION ENV ASWF_LZ4_VERSION=$ASWF_LZ4_VERSION ENV ASWF_PUGIXML_VERSION=$ASWF_PUGIXML_VERSION ENV ASWF_PYSTRING_VERSION=$ASWF_PYSTRING_VERSION +ENV ASWF_RAPIDJSON_VERSION=$ASWF_RAPIDJSON_VERSION ENV ASWF_SNAPPY_VERSION=$ASWF_SNAPPY_VERSION ENV ASWF_ONETBB_VERSION=$ASWF_ONETBB_VERSION ENV ASWF_TSL_ROBIN_MAP_VERSION=$ASWF_TSL_ROBIN_MAP_VERSION @@ -220,6 +223,7 @@ libxcrypt/${ASWF_LIBXCRYPT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} lz4/${ASWF_LZ4_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} pugixml/${ASWF_PUGIXML_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} pystring/${ASWF_PYSTRING_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} +rapidjson/${ASWF_RAPIDJSON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} snappy/${ASWF_SNAPPY_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} onetbb/${ASWF_ONETBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} tsl-robin-map/${ASWF_TSL_ROBIN_MAP_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} diff --git a/ci-base/README.md b/ci-base/README.md index e28f1ded..cbbcdc26 100644 --- a/ci-base/README.md +++ b/ci-base/README.md @@ -108,6 +108,7 @@ Contains: * lz4-1.10.0 * pugixml-1.14 * pystring-1.1.4 +* rapidjson-cci.20250205 * snappy-1.1.10 * onetbb-2020.3 * zlib-1.3.1 @@ -140,6 +141,7 @@ Contains: * lz4-1.10.0 * pugixml-1.14 * pystring-1.1.4 +* rapidjson-cci.20250205 * snappy-1.1.10 * onetbb-2021.13.0 * zlib-1.3.1 @@ -172,6 +174,7 @@ Contains: * lz4-1.10.0 * pugixml-1.15 * pystring-1.1.4 +* rapidjson-cci.20250205 * snappy-1.2.2 * onetbb-2022.1.0 * zlib-1.3.1 diff --git a/ci-base/image.yaml b/ci-base/image.yaml index c78b291b..ce1a2cab 100644 --- a/ci-base/image.yaml +++ b/ci-base/image.yaml @@ -16,6 +16,7 @@ packages: - lz4 - pugixml - pystring + - rapidjson - snappy - onetbb - tsl-robin-map diff --git a/ci-baseos-gl-conan/Dockerfile b/ci-baseos-gl-conan/Dockerfile index 9550303a..5b21a7e6 100644 --- a/ci-baseos-gl-conan/Dockerfile +++ b/ci-baseos-gl-conan/Dockerfile @@ -31,7 +31,6 @@ ARG ASWF_BASEOS_IMAGE ARG ASWF_BASEOS_DISTRO -# Comment out this block to use Conan packages FROM ${ASWF_BASEOS_IMAGE}:${ASWF_CUDA_VERSION}-runtime-${ASWF_BASEOS_DISTRO} AS ci-baseos-gl-conan diff --git a/ci-baseqt/Dockerfile b/ci-baseqt/Dockerfile index 0a7f6fb1..2abb5c0b 100644 --- a/ci-baseqt/Dockerfile +++ b/ci-baseqt/Dockerfile @@ -57,7 +57,6 @@ ARG ASWF_VFXPLATFORM_VERSION -# Comment out this block to use Conan packages FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-baseqt diff --git a/ci-common/Dockerfile b/ci-common/Dockerfile index 656d4f7b..8490d480 100644 --- a/ci-common/Dockerfile +++ b/ci-common/Dockerfile @@ -33,7 +33,6 @@ ARG ASWF_BASEOS_IMAGE ARG ASWF_BASEOS_DISTRO -# Comment out this block to use Conan packages FROM ${ASWF_BASEOS_IMAGE}:${ASWF_CUDA_VERSION}-runtime-${ASWF_BASEOS_DISTRO} AS ci-common diff --git a/ci-imath/Dockerfile b/ci-imath/Dockerfile index a609490e..a9a0b716 100644 --- a/ci-imath/Dockerfile +++ b/ci-imath/Dockerfile @@ -23,7 +23,6 @@ ARG ASWF_VFXPLATFORM_VERSION -# Comment out this block to use Conan packages FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-imath diff --git a/ci-materialx/Dockerfile b/ci-materialx/Dockerfile index 7b670794..944c71be 100644 --- a/ci-materialx/Dockerfile +++ b/ci-materialx/Dockerfile @@ -23,7 +23,6 @@ ARG ASWF_VFXPLATFORM_VERSION -# Comment out this block to use Conan packages FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-materialx diff --git a/ci-ocio/Dockerfile b/ci-ocio/Dockerfile index 180fa497..233ed637 100644 --- a/ci-ocio/Dockerfile +++ b/ci-ocio/Dockerfile @@ -23,7 +23,6 @@ ARG ASWF_VFXPLATFORM_VERSION -# Comment out this block to use Conan packages FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-ocio diff --git a/ci-oiio/Dockerfile b/ci-oiio/Dockerfile index 9cd2bc7e..2f3c4434 100644 --- a/ci-oiio/Dockerfile +++ b/ci-oiio/Dockerfile @@ -23,7 +23,6 @@ ARG ASWF_VFXPLATFORM_VERSION -# Comment out this block to use Conan packages FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-oiio diff --git a/ci-opencue/Dockerfile b/ci-opencue/Dockerfile index 76646c97..4fa93c9a 100644 --- a/ci-opencue/Dockerfile +++ b/ci-opencue/Dockerfile @@ -23,7 +23,6 @@ ARG ASWF_VFXPLATFORM_VERSION -# Comment out this block to use Conan packages FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-opencue diff --git a/ci-openexr/Dockerfile b/ci-openexr/Dockerfile index fdcae992..5b5918a7 100644 --- a/ci-openexr/Dockerfile +++ b/ci-openexr/Dockerfile @@ -23,7 +23,6 @@ ARG ASWF_VFXPLATFORM_VERSION -# Comment out this block to use Conan packages FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-openexr diff --git a/ci-openfx/Dockerfile b/ci-openfx/Dockerfile index 1fe1d2b5..ccab68a9 100644 --- a/ci-openfx/Dockerfile +++ b/ci-openfx/Dockerfile @@ -23,7 +23,6 @@ ARG ASWF_VFXPLATFORM_VERSION -# Comment out this block to use Conan packages FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-openfx diff --git a/ci-openrv/Dockerfile b/ci-openrv/Dockerfile index 14b6ddb6..2a789604 100644 --- a/ci-openrv/Dockerfile +++ b/ci-openrv/Dockerfile @@ -25,7 +25,6 @@ ARG ASWF_VFXPLATFORM_VERSION -# Comment out this block to use Conan packages FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-openrv diff --git a/ci-openvdb/Dockerfile b/ci-openvdb/Dockerfile index 78c7c2ba..f661921d 100644 --- a/ci-openvdb/Dockerfile +++ b/ci-openvdb/Dockerfile @@ -24,7 +24,6 @@ ARG ASWF_VFXPLATFORM_VERSION -# Comment out this block to use Conan packages FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-openvdb diff --git a/ci-osl/Dockerfile b/ci-osl/Dockerfile index 11f8dac4..03241b3f 100644 --- a/ci-osl/Dockerfile +++ b/ci-osl/Dockerfile @@ -25,7 +25,6 @@ ARG ASWF_VFXPLATFORM_VERSION -# Comment out this block to use Conan packages FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-osl diff --git a/ci-otio/Dockerfile b/ci-otio/Dockerfile index a1db4fb9..ee131621 100644 --- a/ci-otio/Dockerfile +++ b/ci-otio/Dockerfile @@ -16,47 +16,13 @@ ARG ASWF_CXX_STANDARD ARG ASWF_VFXPLATFORM_VERSION -ARG ASWF_B2_VERSION -ARG ASWF_BZIP2_VERSION -ARG ASWF_CPPUNIT_VERSION -ARG ASWF_EXPAT_VERSION -ARG ASWF_FMT_VERSION -ARG ASWF_GTEST_VERSION -ARG ASWF_LIBBACKTRACE_VERSION -ARG ASWF_LIBDEFLATE_VERSION -ARG ASWF_LIBICONV_VERSION -ARG ASWF_LIBXCRYPT_VERSION -ARG ASWF_LZ4_VERSION -ARG ASWF_PUGIXML_VERSION -ARG ASWF_PYSTRING_VERSION -ARG ASWF_SNAPPY_VERSION -ARG ASWF_ONETBB_VERSION -ARG ASWF_TSL_ROBIN_MAP_VERSION -ARG ASWF_YAML_CPP_VERSION -ARG ASWF_ZLIB_VERSION -ARG ASWF_ZSTD_VERSION -ARG ASWF_C_BLOSC_VERSION -ARG ASWF_CPYTHON_VERSION -ARG ASWF_FREETYPE_VERSION -ARG ASWF_GLEW_VERSION -ARG ASWF_GLFW_VERSION -ARG ASWF_LOG4CPLUS_VERSION -ARG ASWF_MINIZIP_NG_VERSION -ARG ASWF_BOOST_VERSION -ARG ASWF_PYBIND11_VERSION -ARG ASWF_LIBJPEG_TURBO_VERSION -ARG ASWF_LIBWEBP_VERSION -ARG ASWF_MD4C_VERSION -ARG ASWF_QT_VERSION -ARG ASWF_PYSIDE_VERSION -ARG ASWF_IMATH_VERSION +ARG ASWF_OPENTIMELINEIO_VERSION ARG ASWF_NUMPY_VERSION ARG ASWF_VFXPLATFORM_VERSION -# Comment out this block to use Conan packages FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-otio @@ -71,47 +37,14 @@ ARG ASWF_CXX_STANDARD -ARG ASWF_B2_VERSION -ARG ASWF_BZIP2_VERSION -ARG ASWF_CPPUNIT_VERSION -ARG ASWF_EXPAT_VERSION -ARG ASWF_FMT_VERSION -ARG ASWF_GTEST_VERSION -ARG ASWF_LIBBACKTRACE_VERSION -ARG ASWF_LIBDEFLATE_VERSION -ARG ASWF_LIBICONV_VERSION -ARG ASWF_LIBXCRYPT_VERSION -ARG ASWF_LZ4_VERSION -ARG ASWF_PUGIXML_VERSION -ARG ASWF_PYSTRING_VERSION -ARG ASWF_SNAPPY_VERSION -ARG ASWF_ONETBB_VERSION -ARG ASWF_TSL_ROBIN_MAP_VERSION -ARG ASWF_YAML_CPP_VERSION -ARG ASWF_ZLIB_VERSION -ARG ASWF_ZSTD_VERSION -ARG ASWF_C_BLOSC_VERSION -ARG ASWF_CPYTHON_VERSION -ARG ASWF_FREETYPE_VERSION -ARG ASWF_GLEW_VERSION -ARG ASWF_GLFW_VERSION -ARG ASWF_LOG4CPLUS_VERSION -ARG ASWF_MINIZIP_NG_VERSION -ARG ASWF_BOOST_VERSION -ARG ASWF_PYBIND11_VERSION -ARG ASWF_LIBJPEG_TURBO_VERSION -ARG ASWF_LIBWEBP_VERSION -ARG ASWF_MD4C_VERSION -ARG ASWF_QT_VERSION -ARG ASWF_PYSIDE_VERSION -ARG ASWF_IMATH_VERSION +ARG ASWF_OPENTIMELINEIO_VERSION ARG ASWF_NUMPY_VERSION ARG ASWF_VFXPLATFORM_VERSION LABEL org.opencontainers.image.name="$ASWF_ORG/ci-otio" LABEL org.opencontainers.image.title="OpenTimelineIO CI Docker Image" -LABEL org.opencontainers.image.description="Contains: Python, Qt, PySide and other OpenTimelineIO upstream dependencies\ +LABEL org.opencontainers.image.description="Contains: Imath, RapidJSON and other OpenTimelineIO upstream dependencies\ Warning: this image does *not* contain OpenTimelineIO itself as it is used to *build* OpenTimelineIO!" LABEL org.opencontainers.image.url="http://aswf.io/" LABEL org.opencontainers.image.source="https://github.com/AcademySoftwareFoundation/aswf-docker/blob/main/ci-otio/Dockerfile" @@ -123,40 +56,7 @@ LABEL org.opencontainers.image.version="${ASWF_VERSION}" LABEL com.vfxplatform.version="${ASWF_VFXPLATFORM_VERSION}" -LABEL io.aswf.docker.versions.b2="$ASWF_B2_VERSION" -LABEL io.aswf.docker.versions.bzip2="$ASWF_BZIP2_VERSION" -LABEL io.aswf.docker.versions.cppunit="$ASWF_CPPUNIT_VERSION" -LABEL io.aswf.docker.versions.expat="$ASWF_EXPAT_VERSION" -LABEL io.aswf.docker.versions.fmt="$ASWF_FMT_VERSION" -LABEL io.aswf.docker.versions.gtest="$ASWF_GTEST_VERSION" -LABEL io.aswf.docker.versions.libbacktrace="$ASWF_LIBBACKTRACE_VERSION" -LABEL io.aswf.docker.versions.libdeflate="$ASWF_LIBDEFLATE_VERSION" -LABEL io.aswf.docker.versions.libiconv="$ASWF_LIBICONV_VERSION" -LABEL io.aswf.docker.versions.libxcrypt="$ASWF_LIBXCRYPT_VERSION" -LABEL io.aswf.docker.versions.lz4="$ASWF_LZ4_VERSION" -LABEL io.aswf.docker.versions.pugixml="$ASWF_PUGIXML_VERSION" -LABEL io.aswf.docker.versions.pystring="$ASWF_PYSTRING_VERSION" -LABEL io.aswf.docker.versions.snappy="$ASWF_SNAPPY_VERSION" -LABEL io.aswf.docker.versions.onetbb="$ASWF_ONETBB_VERSION" -LABEL io.aswf.docker.versions.tsl-robin-map="$ASWF_TSL_ROBIN_MAP_VERSION" -LABEL io.aswf.docker.versions.yaml-cpp="$ASWF_YAML_CPP_VERSION" -LABEL io.aswf.docker.versions.zlib="$ASWF_ZLIB_VERSION" -LABEL io.aswf.docker.versions.zstd="$ASWF_ZSTD_VERSION" -LABEL io.aswf.docker.versions.c-blosc="$ASWF_C_BLOSC_VERSION" -LABEL io.aswf.docker.versions.cpython="$ASWF_CPYTHON_VERSION" -LABEL io.aswf.docker.versions.freetype="$ASWF_FREETYPE_VERSION" -LABEL io.aswf.docker.versions.glew="$ASWF_GLEW_VERSION" -LABEL io.aswf.docker.versions.glfw="$ASWF_GLFW_VERSION" -LABEL io.aswf.docker.versions.log4cplus="$ASWF_LOG4CPLUS_VERSION" -LABEL io.aswf.docker.versions.minizip-ng="$ASWF_MINIZIP_NG_VERSION" -LABEL io.aswf.docker.versions.boost="$ASWF_BOOST_VERSION" -LABEL io.aswf.docker.versions.pybind11="$ASWF_PYBIND11_VERSION" -LABEL io.aswf.docker.versions.libjpeg-turbo="$ASWF_LIBJPEG_TURBO_VERSION" -LABEL io.aswf.docker.versions.libwebp="$ASWF_LIBWEBP_VERSION" -LABEL io.aswf.docker.versions.md4c="$ASWF_MD4C_VERSION" -LABEL io.aswf.docker.versions.qt="$ASWF_QT_VERSION" -LABEL io.aswf.docker.versions.pyside="$ASWF_PYSIDE_VERSION" -LABEL io.aswf.docker.versions.imath="$ASWF_IMATH_VERSION" +LABEL io.aswf.docker.versions.opentimelineio="$ASWF_OPENTIMELINEIO_VERSION" LABEL io.aswf.docker.versions.numpy="$ASWF_NUMPY_VERSION" LABEL io.aswf.docker.versions.vfxplatform="$ASWF_VFXPLATFORM_VERSION" @@ -172,40 +72,7 @@ ENV ASWF_CXX_STANDARD=${ASWF_CXX_STANDARD} ENV ASWF_VFXPLATFORM_VERSION=${ASWF_VFXPLATFORM_VERSION} -ENV ASWF_B2_VERSION=$ASWF_B2_VERSION -ENV ASWF_BZIP2_VERSION=$ASWF_BZIP2_VERSION -ENV ASWF_CPPUNIT_VERSION=$ASWF_CPPUNIT_VERSION -ENV ASWF_EXPAT_VERSION=$ASWF_EXPAT_VERSION -ENV ASWF_FMT_VERSION=$ASWF_FMT_VERSION -ENV ASWF_GTEST_VERSION=$ASWF_GTEST_VERSION -ENV ASWF_LIBBACKTRACE_VERSION=$ASWF_LIBBACKTRACE_VERSION -ENV ASWF_LIBDEFLATE_VERSION=$ASWF_LIBDEFLATE_VERSION -ENV ASWF_LIBICONV_VERSION=$ASWF_LIBICONV_VERSION -ENV ASWF_LIBXCRYPT_VERSION=$ASWF_LIBXCRYPT_VERSION -ENV ASWF_LZ4_VERSION=$ASWF_LZ4_VERSION -ENV ASWF_PUGIXML_VERSION=$ASWF_PUGIXML_VERSION -ENV ASWF_PYSTRING_VERSION=$ASWF_PYSTRING_VERSION -ENV ASWF_SNAPPY_VERSION=$ASWF_SNAPPY_VERSION -ENV ASWF_ONETBB_VERSION=$ASWF_ONETBB_VERSION -ENV ASWF_TSL_ROBIN_MAP_VERSION=$ASWF_TSL_ROBIN_MAP_VERSION -ENV ASWF_YAML_CPP_VERSION=$ASWF_YAML_CPP_VERSION -ENV ASWF_ZLIB_VERSION=$ASWF_ZLIB_VERSION -ENV ASWF_ZSTD_VERSION=$ASWF_ZSTD_VERSION -ENV ASWF_C_BLOSC_VERSION=$ASWF_C_BLOSC_VERSION -ENV ASWF_CPYTHON_VERSION=$ASWF_CPYTHON_VERSION -ENV ASWF_FREETYPE_VERSION=$ASWF_FREETYPE_VERSION -ENV ASWF_GLEW_VERSION=$ASWF_GLEW_VERSION -ENV ASWF_GLFW_VERSION=$ASWF_GLFW_VERSION -ENV ASWF_LOG4CPLUS_VERSION=$ASWF_LOG4CPLUS_VERSION -ENV ASWF_MINIZIP_NG_VERSION=$ASWF_MINIZIP_NG_VERSION -ENV ASWF_BOOST_VERSION=$ASWF_BOOST_VERSION -ENV ASWF_PYBIND11_VERSION=$ASWF_PYBIND11_VERSION -ENV ASWF_LIBJPEG_TURBO_VERSION=$ASWF_LIBJPEG_TURBO_VERSION -ENV ASWF_LIBWEBP_VERSION=$ASWF_LIBWEBP_VERSION -ENV ASWF_MD4C_VERSION=$ASWF_MD4C_VERSION -ENV ASWF_QT_VERSION=$ASWF_QT_VERSION -ENV ASWF_PYSIDE_VERSION=$ASWF_PYSIDE_VERSION -ENV ASWF_IMATH_VERSION=$ASWF_IMATH_VERSION +ENV ASWF_OPENTIMELINEIO_VERSION=$ASWF_OPENTIMELINEIO_VERSION ENV ASWF_NUMPY_VERSION=$ASWF_NUMPY_VERSION ENV ASWF_VFXPLATFORM_VERSION=$ASWF_VFXPLATFORM_VERSION @@ -226,40 +93,7 @@ COPY < . [requires] -b2/${ASWF_B2_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -bzip2/${ASWF_BZIP2_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -cppunit/${ASWF_CPPUNIT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -expat/${ASWF_EXPAT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -fmt/${ASWF_FMT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -gtest/${ASWF_GTEST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -libbacktrace/${ASWF_LIBBACKTRACE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -libdeflate/${ASWF_LIBDEFLATE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -libiconv/${ASWF_LIBICONV_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -libxcrypt/${ASWF_LIBXCRYPT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -lz4/${ASWF_LZ4_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -pugixml/${ASWF_PUGIXML_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -pystring/${ASWF_PYSTRING_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -snappy/${ASWF_SNAPPY_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -onetbb/${ASWF_ONETBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -tsl-robin-map/${ASWF_TSL_ROBIN_MAP_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -yaml-cpp/${ASWF_YAML_CPP_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -zlib/${ASWF_ZLIB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -zstd/${ASWF_ZSTD_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -c-blosc/${ASWF_C_BLOSC_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -cpython/${ASWF_CPYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -freetype/${ASWF_FREETYPE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -glew/${ASWF_GLEW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -glfw/${ASWF_GLFW_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -log4cplus/${ASWF_LOG4CPLUS_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -minizip-ng/${ASWF_MINIZIP_NG_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -pybind11/${ASWF_PYBIND11_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -libjpeg-turbo/${ASWF_LIBJPEG_TURBO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -libwebp/${ASWF_LIBWEBP_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -md4c/${ASWF_MD4C_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -qt/${ASWF_QT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -pyside/${ASWF_PYSIDE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -imath/${ASWF_IMATH_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} +opentimelineio/${ASWF_OPENTIMELINEIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} EOF ENV CONAN_HOME=${ASWF_CONAN_HOME}/.conan2 diff --git a/ci-otio/README.md b/ci-otio/README.md index abcb0181..aab50c0a 100644 --- a/ci-otio/README.md +++ b/ci-otio/README.md @@ -13,7 +13,7 @@ for further information, and participate in the discussion on the ## OpenTimelineIO CI Docker Image -Contains: Python, Qt, PySide and other OpenTimelineIO upstream dependencies +Contains: Imath, RapidJSON and other OpenTimelineIO upstream dependencies Warning: this image does *not* contain OpenTimelineIO itself as it is used to *build* OpenTimelineIO! [Docker Image Source](https://github.com/AcademySoftwareFoundation/aswf-docker/blob/main/ci-otio/Dockerfile) @@ -21,195 +21,56 @@ Warning: this image does *not* contain OpenTimelineIO itself as it is used to *b ## [aswf/ci-otio:2019.3](https://hub.docker.com/r/aswf/ci-otio/tags?page=1&name=2019.3) Contains: -* cppunit-1.14.0 -* gtest-1.8.1 -* onetbb-2018 -* cpython-2.7.15 -* glew-2.1.0 -* glfw-3.1.2 -* log4cplus-1.1.2 -* boost-1.66.0 -* pybind11-2.4.3 -* qt-5.12.6 -* pyside-5.12.6 -* imath-2.3.0 +* opentimelineio-0.12.1 * numpy-1.14 * vfxplatform-2019 ## [aswf/ci-otio:2020.3](https://hub.docker.com/r/aswf/ci-otio/tags?page=1&name=2020.3) Contains: -* cppunit-1.15.1 -* gtest-1.10.0 -* onetbb-2019_u6 -* cpython-3.7.3 -* glew-2.1.0 -* glfw-3.1.2 -* log4cplus-1.1.2 -* boost-1.70.0 -* pybind11-2.4.3 -* qt-5.12.6 -* pyside-5.12.6 -* imath-2.4.0 +* opentimelineio-0.12.1 * numpy-1.16 * vfxplatform-2020 ## [aswf/ci-otio:2021.5](https://hub.docker.com/r/aswf/ci-otio/tags?page=1&name=2021.5) Contains: -* cppunit-1.15.1 -* gtest-1.11.0 -* onetbb-2020_u2 -* cpython-3.7.9 -* glew-2.1.0 -* glfw-3.1.2 -* log4cplus-1.1.2 -* boost-1.73.0 -* pybind11-2.6.2 -* qt-5.15.2 -* pyside-5.15.2 -* imath-2.5.5 +* opentimelineio-0.13 * numpy-1.19 * vfxplatform-2021 ## [aswf/ci-otio:2022.3](https://hub.docker.com/r/aswf/ci-otio/tags?page=1&name=2022.3) Contains: -* cppunit-1.15.1 -* gtest-1.11.0 -* onetbb-2020.3 -* cpython-3.9.15 -* glew-2.1.0 -* glfw-3.1.2 -* log4cplus-1.1.2 -* boost-1.76.0 -* pybind11-2.8.1 -* qt-5.15.2 -* pyside-5.15.2 -* imath-3.1.5 +* opentimelineio-0.14.1 * numpy-1.20 * vfxplatform-2022 ## [aswf/ci-otio:2023.2](https://hub.docker.com/r/aswf/ci-otio/tags?page=1&name=2023.2) Contains: -* cppunit-1.15.1 -* gtest-1.11.0 -* onetbb-2020.3 -* cpython-3.10.11 -* glew-2.1.0 -* glfw-3.1.2 -* log4cplus-1.1.2 -* boost-1.80.0 -* pybind11-2.9.2 -* qt-5.15.9 -* pyside-5.15.9 -* imath-3.1.9 +* opentimelineio-0.15 * numpy-1.23.5 * vfxplatform-2023 ## [aswf/ci-otio:2024.6](https://hub.docker.com/r/aswf/ci-otio/tags?page=1&name=2024.6) Contains: -* b2-5.2.1 -* bzip2-1.0.8 -* cppunit-1.15.1 -* expat-2.6.4 -* fmt-11.2.0 -* gtest-1.15.2 -* libbacktrace-cci.20210118 -* libdeflate-1.23 -* libiconv-1.17 -* libxcrypt-4.4.36 -* lz4-1.10.0 -* pugixml-1.14 -* pystring-1.1.4 -* snappy-1.1.10 -* onetbb-2020.3 -* zlib-1.3.1 -* zstd-1.5.6 -* cpython-3.11.13 -* freetype-2.13.2 -* glew-2.2.0 -* glfw-3.4 -* log4cplus-2.1.2 -* boost-1.82.0 -* pybind11-2.13.6 -* libwebp-1.5.0 -* md4c-0.4.8 -* qt-6.5.6 -* pyside-6.5.6 -* imath-3.1.12 +* opentimelineio-0.17.0 * numpy-1.24.3 * vfxplatform-2024 ## [aswf/ci-otio:2025.5](https://hub.docker.com/r/aswf/ci-otio/tags?page=1&name=2025.5) Contains: -* b2-5.2.1 -* bzip2-1.0.8 -* cppunit-1.15.1 -* expat-2.6.4 -* fmt-11.2.0 -* gtest-1.15.2 -* libbacktrace-cci.20210118 -* libdeflate-1.23 -* libiconv-1.17 -* libxcrypt-4.4.36 -* lz4-1.10.0 -* pugixml-1.14 -* pystring-1.1.4 -* snappy-1.1.10 -* onetbb-2021.13.0 -* zlib-1.3.1 -* zstd-1.5.6 -* cpython-3.11.13 -* freetype-2.13.2 -* glew-2.2.0 -* glfw-3.4 -* log4cplus-2.1.2 -* boost-1.85.0 -* pybind11-2.13.6 -* libwebp-1.5.0 -* md4c-0.4.8 -* qt-6.5.6 -* pyside-6.5.6 -* imath-3.1.12 +* opentimelineio-0.17.0 * numpy-1.26.4 * vfxplatform-2025 ## [aswf/ci-otio:2026.3](https://hub.docker.com/r/aswf/ci-otio/tags?page=1&name=2026.3) Contains: -* b2-5.3.2 -* bzip2-1.0.8 -* cppunit-1.15.1 -* expat-2.7.1 -* fmt-11.2.0 -* gtest-1.17.0 -* libbacktrace-cci.20210118 -* libdeflate-1.24 -* libiconv-1.18 -* libxcrypt-4.4.38 -* lz4-1.10.0 -* pugixml-1.15 -* pystring-1.1.4 -* snappy-1.2.2 -* onetbb-2022.1.0 -* zlib-1.3.1 -* zstd-1.5.7 -* cpython-3.13.3 -* freetype-2.13.2 -* glew-2.2.0 -* glfw-3.4 -* log4cplus-2.1.2 -* boost-1.88.0 -* pybind11-2.13.6 -* libwebp-1.5.0 -* md4c-0.5.2 -* qt-6.8.3 -* pyside-6.8.3 -* imath-3.2.2 +* opentimelineio-0.18.1 * numpy-2.3.2 * vfxplatform-2026 diff --git a/ci-otio/image.yaml b/ci-otio/image.yaml index 1df05aa6..7044c700 100644 --- a/ci-otio/image.yaml +++ b/ci-otio/image.yaml @@ -1,43 +1,10 @@ name: "otio" title: "OpenTimelineIO CI Docker Image" description: | - Contains: Python, Qt, PySide and other OpenTimelineIO upstream dependencies + Contains: Imath, RapidJSON and other OpenTimelineIO upstream dependencies Warning: this image does *not* contain OpenTimelineIO itself as it is used to *build* OpenTimelineIO! packages: - - b2 # base1-1 packages - - bzip2 - - cppunit - - expat - - fmt - - gtest - - libbacktrace - - libdeflate - - libiconv - - libxcrypt - - lz4 - - pugixml - - pystring - - snappy - - onetbb - - tsl-robin-map - - yaml-cpp - - zlib - - zstd - - c-blosc # base1-2 packages - - cpython - - freetype - - glew - - glfw - - log4cplus - - minizip-ng - - boost # base1-3 packages - - pybind11 - - libjpeg-turbo # base2-1 packages - - libwebp - - md4c - - qt # base2-2 packages - - pyside # base2-3 packages - - imath # vfx1-1 packages + - opentimelineio # all dependencies will be installed except opentimelineio itself implicit_packages: - numpy - vfxplatform diff --git a/ci-rawtoaces/Dockerfile b/ci-rawtoaces/Dockerfile index ddbb5d50..3429ad39 100644 --- a/ci-rawtoaces/Dockerfile +++ b/ci-rawtoaces/Dockerfile @@ -23,7 +23,6 @@ ARG ASWF_VFXPLATFORM_VERSION -# Comment out this block to use Conan packages FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-rawtoaces diff --git a/ci-usd/Dockerfile b/ci-usd/Dockerfile index 0d342606..60a38b76 100644 --- a/ci-usd/Dockerfile +++ b/ci-usd/Dockerfile @@ -24,7 +24,6 @@ ARG ASWF_USD_VERSION -# Comment out this block to use Conan packages FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-usd diff --git a/ci-vfxall/Dockerfile b/ci-vfxall/Dockerfile index dc745810..03eff1e0 100644 --- a/ci-vfxall/Dockerfile +++ b/ci-vfxall/Dockerfile @@ -31,11 +31,11 @@ ARG ASWF_OPENEXR_VERSION ARG ASWF_OIIO_VERSION ARG ASWF_OCIO_VERSION ARG ASWF_OPENFX_VERSION +ARG ASWF_OPENTIMELINEIO_VERSION ARG ASWF_OPENUSD_VERSION ARG ASWF_OPENVDB_VERSION ARG ASWF_MATERIALX_VERSION ARG ASWF_OSL_VERSION -ARG ASWF_OTIO_VERSION ARG ASWF_RAWTOACES_VERSION ARG ASWF_NUMPY_VERSION ARG ASWF_VFXPLATFORM_VERSION @@ -43,8 +43,6 @@ ARG ASWF_VFXPLATFORM_VERSION -# Comment out this block to use Conan packages -FROM ${ASWF_PKG_ORG}/ci-package-otio:$ASWF_VFXPLATFORM_VERSION-$ASWF_OTIO_VERSION AS ci-package-otio FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-vfxall @@ -74,11 +72,11 @@ ARG ASWF_OPENEXR_VERSION ARG ASWF_OIIO_VERSION ARG ASWF_OCIO_VERSION ARG ASWF_OPENFX_VERSION +ARG ASWF_OPENTIMELINEIO_VERSION ARG ASWF_OPENUSD_VERSION ARG ASWF_OPENVDB_VERSION ARG ASWF_MATERIALX_VERSION ARG ASWF_OSL_VERSION -ARG ASWF_OTIO_VERSION ARG ASWF_RAWTOACES_VERSION ARG ASWF_NUMPY_VERSION ARG ASWF_VFXPLATFORM_VERSION @@ -112,11 +110,11 @@ LABEL io.aswf.docker.versions.openexr="$ASWF_OPENEXR_VERSION" LABEL io.aswf.docker.versions.oiio="$ASWF_OIIO_VERSION" LABEL io.aswf.docker.versions.ocio="$ASWF_OCIO_VERSION" LABEL io.aswf.docker.versions.openfx="$ASWF_OPENFX_VERSION" +LABEL io.aswf.docker.versions.opentimelineio="$ASWF_OPENTIMELINEIO_VERSION" LABEL io.aswf.docker.versions.openusd="$ASWF_OPENUSD_VERSION" LABEL io.aswf.docker.versions.openvdb="$ASWF_OPENVDB_VERSION" LABEL io.aswf.docker.versions.materialx="$ASWF_MATERIALX_VERSION" LABEL io.aswf.docker.versions.osl="$ASWF_OSL_VERSION" -LABEL io.aswf.docker.versions.otio="$ASWF_OTIO_VERSION" LABEL io.aswf.docker.versions.rawtoaces="$ASWF_RAWTOACES_VERSION" LABEL io.aswf.docker.versions.numpy="$ASWF_NUMPY_VERSION" LABEL io.aswf.docker.versions.vfxplatform="$ASWF_VFXPLATFORM_VERSION" @@ -148,17 +146,16 @@ ENV ASWF_OPENEXR_VERSION=$ASWF_OPENEXR_VERSION ENV ASWF_OIIO_VERSION=$ASWF_OIIO_VERSION ENV ASWF_OCIO_VERSION=$ASWF_OCIO_VERSION ENV ASWF_OPENFX_VERSION=$ASWF_OPENFX_VERSION +ENV ASWF_OPENTIMELINEIO_VERSION=$ASWF_OPENTIMELINEIO_VERSION ENV ASWF_OPENUSD_VERSION=$ASWF_OPENUSD_VERSION ENV ASWF_OPENVDB_VERSION=$ASWF_OPENVDB_VERSION ENV ASWF_MATERIALX_VERSION=$ASWF_MATERIALX_VERSION ENV ASWF_OSL_VERSION=$ASWF_OSL_VERSION -ENV ASWF_OTIO_VERSION=$ASWF_OTIO_VERSION ENV ASWF_RAWTOACES_VERSION=$ASWF_RAWTOACES_VERSION ENV ASWF_NUMPY_VERSION=$ASWF_NUMPY_VERSION ENV ASWF_VFXPLATFORM_VERSION=$ASWF_VFXPLATFORM_VERSION -COPY --from=ci-package-otio /. /usr/local/ COPY ci-vfxall/README.md ci-vfxall/image.yaml /usr/local/aswf/ @@ -188,11 +185,11 @@ openexr/${ASWF_OPENEXR_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} oiio/${ASWF_OIIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} ocio/${ASWF_OCIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} openfx/${ASWF_OPENFX_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} +opentimelineio/${ASWF_OPENTIMELINEIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} openusd/${ASWF_OPENUSD_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} openvdb/${ASWF_OPENVDB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} materialx/${ASWF_MATERIALX_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} osl/${ASWF_OSL_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -# otio/${ASWF_OTIO_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} rawtoaces/${ASWF_RAWTOACES_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} EOF diff --git a/ci-vfxall/README.md b/ci-vfxall/README.md index b2b660e4..4153ddec 100644 --- a/ci-vfxall/README.md +++ b/ci-vfxall/README.md @@ -33,10 +33,10 @@ Contains: * openexr-2.3.0 * oiio-2.0.8 * ocio-1.1.0 +* opentimelineio-0.12.1 * openusd-19.11 * openvdb-6.2.1 * osl-1.10.9 -* otio-0.12.1 * numpy-1.14 * vfxplatform-2019 @@ -56,10 +56,10 @@ Contains: * openexr-2.3.0 * oiio-2.0.8 * ocio-1.1.0 +* opentimelineio-0.12.1 * openusd-19.11 * openvdb-6.2.1 * osl-1.10.9 -* otio-0.12.1 * numpy-1.14 * vfxplatform-2019 @@ -79,10 +79,10 @@ Contains: * openexr-2.3.0 * oiio-2.0.8 * ocio-1.1.0 +* opentimelineio-0.12.1 * openusd-19.11 * openvdb-6.2.1 * osl-1.10.9 -* otio-0.12.1 * numpy-1.14 * vfxplatform-2019 @@ -102,10 +102,10 @@ Contains: * openexr-2.3.0 * oiio-2.0.8 * ocio-1.1.0 +* opentimelineio-0.12.1 * openusd-19.11 * openvdb-6.2.1 * osl-1.10.9 -* otio-0.12.1 * numpy-1.14 * vfxplatform-2019 @@ -125,10 +125,10 @@ Contains: * openexr-2.4.0 * oiio-2.1.13.0 * ocio-1.1.1 +* opentimelineio-0.12.1 * openusd-20.11 * openvdb-7.1.0 * osl-1.10.10 -* otio-0.12.1 * numpy-1.16 * vfxplatform-2020 @@ -148,10 +148,10 @@ Contains: * openexr-2.5.5 * oiio-2.2.14.0 * ocio-2.0.1 +* opentimelineio-0.13 * openusd-21.05 * openvdb-8.0.1 * osl-1.11.13.0 -* otio-0.13 * numpy-1.19 * vfxplatform-2021 @@ -171,11 +171,11 @@ Contains: * openexr-3.1.5 * oiio-2.4.5.0 * ocio-2.1.1 +* opentimelineio-0.14.1 * openusd-22.11 * openvdb-9.1.0 * materialx-1.38.5 * osl-1.12.7.0 -* otio-0.14.1 * numpy-1.20 * vfxplatform-2022 @@ -195,11 +195,11 @@ Contains: * openexr-3.1.5 * oiio-2.4.5.0 * ocio-2.1.1 +* opentimelineio-0.14.1 * openusd-22.11 * openvdb-9.1.0 * materialx-1.38.5 * osl-1.12.7.0 -* otio-0.14.1 * numpy-1.20 * vfxplatform-2022 @@ -219,11 +219,11 @@ Contains: * openexr-3.1.5 * oiio-2.4.5.0 * ocio-2.1.1 +* opentimelineio-0.14.1 * openusd-22.11 * openvdb-9.1.0 * materialx-1.38.5 * osl-1.12.7.0 -* otio-0.14.1 * numpy-1.20 * vfxplatform-2022 @@ -243,11 +243,11 @@ Contains: * openexr-3.1.5 * oiio-2.4.5.0 * ocio-2.1.1 +* opentimelineio-0.14.1 * openusd-22.11 * openvdb-9.1.0 * materialx-1.38.5 * osl-1.12.7.0 -* otio-0.14.1 * numpy-1.20 * vfxplatform-2022 @@ -267,11 +267,11 @@ Contains: * openexr-3.1.5 * oiio-2.4.5.0 * ocio-2.1.1 +* opentimelineio-0.14.1 * openusd-22.11 * openvdb-9.1.0 * materialx-1.38.5 * osl-1.12.7.0 -* otio-0.14.1 * numpy-1.20 * vfxplatform-2022 @@ -291,11 +291,11 @@ Contains: * openexr-3.1.11 * oiio-2.4.13.0 * ocio-2.2.1 +* opentimelineio-0.15 * openusd-23.05 * openvdb-10.0.1 * materialx-1.38.7 * osl-1.12.13.0 -* otio-0.15 * numpy-1.23.5 * vfxplatform-2023 @@ -315,11 +315,11 @@ Contains: * openexr-3.1.11 * oiio-2.4.13.0 * ocio-2.2.1 +* opentimelineio-0.15 * openusd-23.05 * openvdb-10.0.1 * materialx-1.38.7 * osl-1.12.13.0 -* otio-0.15 * numpy-1.23.5 * vfxplatform-2023 @@ -341,11 +341,11 @@ Contains: * oiio-2.5.19.0 * ocio-2.3.2 * openfx-1.5s +* opentimelineio-0.17.0 * openusd-24.08 * openvdb-11.0.0 * materialx-1.39.1 * osl-1.13.11.0 -* otio-0.17.0 * rawtoaces-1.1.0 * numpy-1.24.3 * vfxplatform-2024 @@ -368,11 +368,11 @@ Contains: * oiio-2.5.19.0 * ocio-2.3.2 * openfx-1.5s +* opentimelineio-0.17.0 * openusd-24.08 * openvdb-11.0.0 * materialx-1.39.1 * osl-1.13.11.0 -* otio-0.17.0 * rawtoaces-1.1.0 * numpy-1.24.3 * vfxplatform-2024 @@ -395,11 +395,11 @@ Contains: * oiio-3.1.6.2 * ocio-2.4.2 * openfx-1.5s +* opentimelineio-0.17.0 * openusd-25.05.01 * openvdb-12.1.1 * materialx-1.39.3 * osl-1.14.7.0 -* otio-0.17.0 * rawtoaces-1.1.0 * numpy-1.26.4 * vfxplatform-2025 @@ -422,11 +422,11 @@ Contains: * oiio-3.1.6.2 * ocio-2.4.2 * openfx-1.5s +* opentimelineio-0.17.0 * openusd-25.05.01 * openvdb-12.1.1 * materialx-1.39.3 * osl-1.14.7.0 -* otio-0.17.0 * rawtoaces-1.1.0 * numpy-1.26.4 * vfxplatform-2025 @@ -449,11 +449,11 @@ Contains: * oiio-3.1.10.0 * ocio-2.5.1 * openfx-1.5s +* opentimelineio-0.18.1 * openusd-26.03 * openvdb-13.0.0 * materialx-1.39.4 * osl-1.15.1.0 -* otio-0.17.0 * rawtoaces-2.0.0 * numpy-2.3.2 * vfxplatform-2026 @@ -476,11 +476,11 @@ Contains: * oiio-3.1.10.0 * ocio-2.5.1 * openfx-1.5s +* opentimelineio-0.18.1 * openusd-26.03 * openvdb-13.0.0 * materialx-1.39.4 * osl-1.15.1.0 -* otio-0.17.0 * rawtoaces-2.0.0 * numpy-2.3.2 * vfxplatform-2026 diff --git a/ci-vfxall/image.yaml b/ci-vfxall/image.yaml index 1fad7d82..41ff274a 100644 --- a/ci-vfxall/image.yaml +++ b/ci-vfxall/image.yaml @@ -18,11 +18,11 @@ packages: - oiio - ocio - openfx + - opentimelineio - openusd - openvdb - materialx - osl - - otio - rawtoaces implicit_packages: - numpy diff --git a/packages/conan/recipes/opentimelineio/conandata.yml b/packages/conan/recipes/opentimelineio/conandata.yml new file mode 100644 index 00000000..15287125 --- /dev/null +++ b/packages/conan/recipes/opentimelineio/conandata.yml @@ -0,0 +1,22 @@ +# Copyright (c) Contributors to the conan-center-index Project. All rights reserved. +# Copyright (c) Contributors to the aswf-docker Project. All rights reserved. +# SPDX-License-Identifier: MIT +# + +sources: + "0.17.0": + url: "https://github.com/AcademySoftwareFoundation/OpenTimelineIO/archive/refs/tags/v0.17.0.tar.gz" + sha256: "cdf8281c6091a18a4147295b660e13b610a6d58919a79608bf03e5359c1c2d24" + "0.18.1": + url: "https://github.com/AcademySoftwareFoundation/OpenTimelineIO/archive/refs/tags/v0.18.1.tar.gz" + sha256: "bcb516a43a962dac0cde3e1f9da634c1fd409915d499ff8f3ce6f738a4637d72" + +patches: + "0.17.0": + - patch_file: "patches/0.17.0-cmake-pybind11.patch" + patch_description: "Allow builds to find pre-installed pybind11" + patch_type: "conan" + "0.18.1": + - patch_file: "patches/0.18.1-cmake-pybind11.patch" + patch_description: "Allow builds to find pre-installed pybind11" + patch_type: "conan" diff --git a/packages/conan/recipes/opentimelineio/conanfile.py b/packages/conan/recipes/opentimelineio/conanfile.py new file mode 100644 index 00000000..73cb2077 --- /dev/null +++ b/packages/conan/recipes/opentimelineio/conanfile.py @@ -0,0 +1,95 @@ +# Copyright (c) Contributors to the conan-center-index Project. All rights reserved. +# Copyright (c) Contributors to the aswf-docker Project. All rights reserved. +# SPDX-License-Identifier: MIT +# + +from conan import ConanFile +from conan.tools.build import check_min_cppstd +from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout +from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, rmdir +from conan.tools.scm import Version +from conan.tools.env import Environment +import os + +required_conan_version = ">=2" + + +class OpenTimelineIOConan(ConanFile): + name = "opentimelineio" + license = "Apache-2.0" + url = "https://github.com/conan-io/conan-center-index" + homepage = "https://github.com/AcademySoftwareFoundation/OpenTimelineIO" + description = "Open Source API and interchange format for editorial timeline information." + + package_type = "library" + settings = "os", "arch", "compiler", "build_type" + options = { + "shared": [True, False], + "fPIC": [True, False], + "with_pythonbind": [True, False], + } + default_options = { + "shared": False, + "fPIC": True, + "with_pythonbind": False, # FIXME: disable python bindings until solution for + # https://github.com/AcademySoftwareFoundation/OpenTimelineIO/issues/2007 + } + + def export_sources(self): + export_conandata_patches(self) + + def config_options(self): + if self.settings.os == "Windows": + del self.options.fPIC + + def configure(self): + if self.options.shared: + self.options.rm_safe("fPIC") + + def layout(self): + cmake_layout(self, src_folder="src") + + def requirements(self): + self.requires("cpython/[>=3.0.0]") + self.tool_requires("cpython/[>=3.0.0]") + if self.options.with_pythonbind: + self.requires("pybind11/2.13.6") + self.requires("imath/3.2.2", transitive_headers=True) + self.requires("rapidjson/cci.20250205") + + def source(self): + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + def generate(self): + tc = CMakeToolchain(self) + # Dont use vendored copies + tc.cache_variables["OTIO_CXX_INSTALL"] = True # Build and install C++ bindings + tc.cache_variables["OTIO_PYTHON_INSTALL"] = self.options.with_pythonbind # Build and install Python bindings + tc.cache_variables["OTIO_DEPENDENCIES_INSTALL"] = False # Ignore vendored dependencies + tc.cache_variables["OTIO_INSTALL_PYTHON_MODULES"] = True # Install OTIO pure Python modules/files + tc.cache_variables["OTIO_INSTALL_COMMANDLINE_TOOLS"] = True # Install OTIO command line tools + tc.cache_variables["OTIO_FIND_IMATH"] = True # Let CMake find Imath + tc.cache_variables["OTIO_FIND_PYBIND11"] = True # Let CMake find pybind11 + tc.cache_variables["OTIO_FIND_RAPIDJSON"] = True # Let CMake find RapidJSON + tc.cache_variables["OTIO_AUTOMATIC_SUBMODULES"] = False # Don't refresh submodules + tc.generate() + deps = CMakeDeps(self) + deps.generate() + + def build(self): + apply_conandata_patches(self) + cmake = CMake(self) + cmake.configure() + cmake.build() + + def package(self): + # ASWF: separate license files per package + copy(self, "LICENSE", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses", self.name)) + cmake = CMake(self) + cmake.install() + rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) + + def package_info(self): + self.cpp_info.set_property("cmake_file_name", "OpenTimelineIO") + self.cpp_info.set_property("cmake_target_name", "OpenTimelineIO::OpenTimelineIO") + self.cpp_info.libs = ["opentime","opentimelineio"] diff --git a/packages/conan/recipes/opentimelineio/patches/0.17.0-cmake-pybind11.patch b/packages/conan/recipes/opentimelineio/patches/0.17.0-cmake-pybind11.patch new file mode 100644 index 00000000..99a63e70 --- /dev/null +++ b/packages/conan/recipes/opentimelineio/patches/0.17.0-cmake-pybind11.patch @@ -0,0 +1,165 @@ +diff --git CMakeLists.txt CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- CMakeLists.txt ++++ CMakeLists.txt +@@ -34,6 +34,8 @@ + option(OTIO_INSTALL_CONTRIB "Install the opentimelineio_contrib Python package" ON) + set(OTIO_IMATH_LIBS "" CACHE STRING "Imath library overrides to use instead of src/deps or find_package") + option(OTIO_FIND_IMATH "Find Imath using find_package, ignored if OTIO_IMATH_LIBS is set" OFF) ++option(OTIO_FIND_PYBIND11 "Find pybind11 using find_package" OFF) ++option(OTIO_FIND_RAPIDJSON "Find RapidJSON using find_package" OFF) + set(OTIO_PYTHON_INSTALL_DIR "" CACHE STRING "Python installation dir (such as the site-packages dir)") + + # Build options +@@ -244,6 +246,28 @@ + set(USE_DEPS_IMATH ON) + endif() + ++#----- pybind11 ++if(OTIO_FIND_PYBIND11) ++ find_package(pybind11 REQUIRED) ++ if (pybind11_FOUND) ++ message(STATUS "Found pybind11 at ${pybind11_CONFIG}") ++ endif() ++else() ++ message(STATUS "Using src/deps/pybind11 by default") ++endif() ++ ++ ++#----- RapidJSON ++ ++if(OTIO_FIND_RAPIDJSON) ++ find_package(RapidJSON CONFIG REQUIRED) ++ if (RapidJSON_FOUND) ++ message(STATUS "Found RapidJSON at ${RapidJSON_CONFIG}") ++ endif() ++else() ++ message(STATUS "Using src/deps/rapidjson by default") ++endif() ++ + # set up the internally hosted dependencies + add_subdirectory(src/deps) + +diff --git src/deps/CMakeLists.txt src/deps/CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- src/deps/CMakeLists.txt ++++ src/deps/CMakeLists.txt +@@ -4,9 +4,21 @@ + #----- Other dependencies + + # detect if the submodules haven't been updated +-set(DEPS_SUBMODULES pybind11 rapidjson) ++if(NOT OTIO_FIND_PYBIND11 AND OTIO_PYTHON_INSTALL) ++ # pybind11 only needed when building Python bindings ++ set(DEPS_SUBMODULES ${DEPS_SUBMODULES} pybind11) ++endif() ++ ++if(USE_DEPS_IMATH) ++ set(DEPS_SUBMODULES ${DEPS_SUBMODULES} Imath) ++endif() ++ ++if(NOT OTIO_FIND_RAPIDJSON) ++ set(DEPS_SUBMODULES ${DEPS_SUBMODULES} rapidjson) ++endif() ++ + foreach(submodule IN LISTS DEPS_SUBMODULES) +- file(GLOB SUBMOD_CONTENTS ${submodule}) ++ file(GLOB SUBMOD_CONTENTS "${submodule}/*") + list(LENGTH SUBMOD_CONTENTS SUBMOD_CONTENT_LEN) + if(SUBMOD_CONTENT_LEN EQUAL 0) + message( +@@ -16,10 +28,13 @@ + endif() + endforeach() + +-if(OTIO_PYTHON_INSTALL) ++if(NOT OTIO_FIND_PYBIND11 AND OTIO_PYTHON_INSTALL) ++ # pybind11 only needed when building Python bindings + add_subdirectory(pybind11) + endif() + ++# Don't try to build rapidjson, it won't, and since it's header-only, we don't need to built it. ++ + if (USE_DEPS_IMATH) + # preserve BUILD_SHARED_LIBS options for this project, but set it off for Imath + option(BUILD_SHARED_LIBS "Build shared libraries" ON) +diff --git src/opentime/CMakeLists.txt src/opentime/CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- src/opentime/CMakeLists.txt ++++ src/opentime/CMakeLists.txt +@@ -49,7 +49,7 @@ + RUNTIME DESTINATION "${OTIO_RESOLVED_CXX_DYLIB_INSTALL_DIR}") + + install(EXPORT OpenTimeTargets +- DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentime" ++ DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentime" + NAMESPACE OTIO:: ) + + include(CMakePackageConfigHelpers) +@@ -57,7 +57,7 @@ + ${CMAKE_CURRENT_SOURCE_DIR}/OpenTimeConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimeConfig.cmake + INSTALL_DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentime ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentime + NO_SET_AND_CHECK_MACRO + NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) +@@ -66,7 +66,7 @@ + FILES + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimeConfig.cmake + DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentime ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentime + ) + endif() + +diff --git src/opentimelineio/CMakeLists.txt src/opentimelineio/CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- src/opentimelineio/CMakeLists.txt ++++ src/opentimelineio/CMakeLists.txt +@@ -81,9 +81,16 @@ + PRIVATE "${IMATH_INCLUDES}" + "${PROJECT_SOURCE_DIR}/src" + "${PROJECT_SOURCE_DIR}/src/deps" +- "${PROJECT_SOURCE_DIR}/src/deps/rapidjson/include" + "${IMATH_INCLUDES}") + ++if(OTIO_FIND_RAPIDJSON) ++ target_include_directories(opentimelineio ++ PRIVATE "${RapidJSON_INCLUDE_DIRS}") ++else() ++ target_include_directories(opentimelineio ++ PRIVATE "${PROJECT_SOURCE_DIR}/src/deps/rapidjson/include") ++endif() ++ + target_link_libraries(opentimelineio + PUBLIC opentime ${OTIO_IMATH_TARGETS}) + +@@ -124,7 +131,7 @@ + RUNTIME DESTINATION "${OTIO_RESOLVED_CXX_DYLIB_INSTALL_DIR}") + + install(EXPORT OpenTimelineIOTargets +- DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentimelineio" ++ DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentimelineio" + NAMESPACE OTIO:: ) + + include(CMakePackageConfigHelpers) +@@ -132,7 +139,7 @@ + ${CMAKE_CURRENT_SOURCE_DIR}/OpenTimelineIOConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimelineIOConfig.cmake + INSTALL_DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentimelineio ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentimelineio + NO_SET_AND_CHECK_MACRO + NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) +@@ -141,6 +148,6 @@ + FILES + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimelineIOConfig.cmake + DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentimelineio ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentimelineio + ) + endif() + diff --git a/packages/conan/recipes/opentimelineio/patches/0.18.1-cmake-pybind11.patch b/packages/conan/recipes/opentimelineio/patches/0.18.1-cmake-pybind11.patch new file mode 100644 index 00000000..43102b26 --- /dev/null +++ b/packages/conan/recipes/opentimelineio/patches/0.18.1-cmake-pybind11.patch @@ -0,0 +1,135 @@ +diff --git CMakeLists.txt CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- CMakeLists.txt ++++ CMakeLists.txt +@@ -32,6 +32,7 @@ + option(OTIO_INSTALL_PYTHON_MODULES "Install OTIO pure Python modules/files" ON) + option(OTIO_INSTALL_COMMANDLINE_TOOLS "Install the OTIO command line tools" ON) + option(OTIO_FIND_IMATH "Find Imath using find_package" OFF) ++option(OTIO_FIND_PYBIND11 "Find pybind11 using find_package" OFF) + option(OTIO_FIND_RAPIDJSON "Find RapidJSON using find_package" OFF) + set(OTIO_PYTHON_INSTALL_DIR "" CACHE STRING "Python installation dir (such as the site-packages dir)") + +@@ -252,6 +253,17 @@ + include_directories("${PROJECT_SOURCE_DIR}/src/deps/Imath/src") + endif() + ++#----- pybind11 ++if(OTIO_FIND_PYBIND11) ++ find_package(pybind11 REQUIRED) ++ if (pybind11_FOUND) ++ message(STATUS "Found pybind11 at ${pybind11_CONFIG}") ++ endif() ++else() ++ message(STATUS "Using src/deps/pybind11 by default") ++endif() ++ ++ + #----- RapidJSON + + if(OTIO_FIND_RAPIDJSON) +diff --git src/deps/CMakeLists.txt src/deps/CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- src/deps/CMakeLists.txt ++++ src/deps/CMakeLists.txt +@@ -4,14 +4,21 @@ + #----- Other dependencies + + # detect if the submodules haven't been updated +-set(DEPS_SUBMODULES pybind11) ++if(NOT OTIO_FIND_PYBIND11 AND OTIO_PYTHON_INSTALL) ++ # pybind11 only needed when building Python bindings ++ set(DEPS_SUBMODULES ${DEPS_SUBMODULES} pybind11) ++endif() ++ ++if(NOT OTIO_FIND_RAPIDJSON) ++ set(DEPS_SUBMODULES ${DEPS_SUBMODULES} rapidjson) ++endif() + + if(NOT OTIO_FIND_RAPIDJSON) + set(DEPS_SUBMODULES ${DEPS_SUBMODULES} rapidjson) + endif() + + foreach(submodule IN LISTS DEPS_SUBMODULES) +- file(GLOB SUBMOD_CONTENTS ${submodule}) ++ file(GLOB SUBMOD_CONTENTS "${submodule}/*") + list(LENGTH SUBMOD_CONTENTS SUBMOD_CONTENT_LEN) + if(SUBMOD_CONTENT_LEN EQUAL 0) + message( +@@ -21,10 +28,13 @@ + endif() + endforeach() + +-if(OTIO_PYTHON_INSTALL) ++if(NOT OTIO_FIND_PYBIND11 AND OTIO_PYTHON_INSTALL) ++ # pybind11 only needed when building Python bindings + add_subdirectory(pybind11) + endif() + ++# Don't try to build rapidjson, it won't, and since it's header-only, we don't need to built it. ++ + if(NOT OTIO_FIND_IMATH) + # preserve BUILD_SHARED_LIBS options for this project, but set it off for Imath + option(BUILD_SHARED_LIBS "Build shared libraries" ON) +diff --git src/opentime/CMakeLists.txt src/opentime/CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- src/opentime/CMakeLists.txt ++++ src/opentime/CMakeLists.txt +@@ -73,7 +73,7 @@ + RUNTIME DESTINATION "${OTIO_RESOLVED_CXX_DYLIB_INSTALL_DIR}") + + install(EXPORT OpenTimeTargets +- DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentime" ++ DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentime" + NAMESPACE OTIO:: ) + + include(CMakePackageConfigHelpers) +@@ -81,7 +81,7 @@ + ${CMAKE_CURRENT_SOURCE_DIR}/OpenTimeConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimeConfig.cmake + INSTALL_DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentime ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentime + NO_SET_AND_CHECK_MACRO + NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) +@@ -90,7 +90,7 @@ + FILES + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimeConfig.cmake + DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentime ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentime + ) + + install( +diff --git src/opentimelineio/CMakeLists.txt src/opentimelineio/CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- src/opentimelineio/CMakeLists.txt ++++ src/opentimelineio/CMakeLists.txt +@@ -151,7 +151,7 @@ + RUNTIME DESTINATION "${OTIO_RESOLVED_CXX_DYLIB_INSTALL_DIR}") + + install(EXPORT OpenTimelineIOTargets +- DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentimelineio" ++ DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentimelineio" + NAMESPACE OTIO:: ) + + include(CMakePackageConfigHelpers) +@@ -159,7 +159,7 @@ + ${CMAKE_CURRENT_SOURCE_DIR}/OpenTimelineIOConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimelineIOConfig.cmake + INSTALL_DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentimelineio ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentimelineio + NO_SET_AND_CHECK_MACRO + NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) +@@ -168,7 +168,7 @@ + FILES + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimelineIOConfig.cmake + DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentimelineio ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentimelineio + ) + + install( diff --git a/packages/conan/recipes/opentimelineio/test_package/CMakeLists.txt b/packages/conan/recipes/opentimelineio/test_package/CMakeLists.txt new file mode 100644 index 00000000..df775795 --- /dev/null +++ b/packages/conan/recipes/opentimelineio/test_package/CMakeLists.txt @@ -0,0 +1,15 @@ +# Copyright (c) Contributors to the conan-center-index Project. All rights reserved. +# Copyright (c) Contributors to the aswf-docker Project. All rights reserved. +# SPDX-License-Identifier: MIT +# +# From: https://github.com/EstebanDugueperoux2/conan-center-index/blob/1d8986d11305e1303b1581532f327cdd9d32ed20/recipes/openusd/all/test_package/CMakeLists.txt + +cmake_minimum_required(VERSION 3.15) + +project(test_package LANGUAGES CXX) + +find_package(OpenTimelineIO REQUIRED CONFIG) + +add_executable(${PROJECT_NAME} test_package.cpp) +target_link_libraries(${PROJECT_NAME} PRIVATE OpenTimelineIO::OpenTimelineIO) +target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17) diff --git a/packages/conan/recipes/opentimelineio/test_package/conanfile.py b/packages/conan/recipes/opentimelineio/test_package/conanfile.py new file mode 100644 index 00000000..ad1cd76f --- /dev/null +++ b/packages/conan/recipes/opentimelineio/test_package/conanfile.py @@ -0,0 +1,32 @@ +# Copyright (c) Contributors to the conan-center-index Project. All rights reserved. +# Copyright (c) Contributors to the aswf-docker Project. All rights reserved. +# SPDX-License-Identifier: MIT +# + +from conan import ConanFile +from conan.tools.build import can_run +from conan.tools.cmake import cmake_layout, CMake +import os + + +class TestPackageConan(ConanFile): + settings = "os", "arch", "compiler", "build_type" + generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv" + test_type = "explicit" + + def requirements(self): + self.requires(self.tested_reference_str) + + def layout(self): + cmake_layout(self) + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if can_run(self): + bin_path = os.path.join(self.cpp.build.bindir, "test_package") + otio_path = os.path.join(self.source_folder, "taco.otio") + self.run(f"{bin_path} {otio_path}", env="conanrun") diff --git a/packages/conan/recipes/opentimelineio/test_package/taco.otio b/packages/conan/recipes/opentimelineio/test_package/taco.otio new file mode 100644 index 00000000..ca9589bf --- /dev/null +++ b/packages/conan/recipes/opentimelineio/test_package/taco.otio @@ -0,0 +1,139 @@ +{ + "OTIO_SCHEMA": "Timeline.1", + "metadata": {}, + "name": "transition_test", + "tracks": { + "OTIO_SCHEMA": "Stack.1", + "children": [ + { + "OTIO_SCHEMA": "Track.1", + "children": [ + { + "OTIO_SCHEMA": "Gap.1", + "effects": [], + "markers": [], + "enabled": true, + "metadata": {}, + "name": "Gap A", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 8 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0 + } + } + }, + { + "OTIO_SCHEMA": "Clip.1", + "effects": [], + "markers": [], + "enabled": true, + "media_reference": { + "OTIO_SCHEMA": "MissingReference.1", + "available_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 8 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0 + } + }, + "metadata": {}, + "available_image_bounds": { + "OTIO_SCHEMA": "Box2d.1", + "min": { + "OTIO_SCHEMA":"V2d.1", + "x": 0.0, + "y": 0.0 + }, + "max": { + "OTIO_SCHEMA":"V2d.1", + "x": 16.0, + "y": 9.0 + } + }, + "name": null + }, + "metadata": {}, + "name": "Clip-001", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 3 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 3 + } + } + }, + { + "OTIO_SCHEMA": "Transition.1", + "metadata": {}, + "name": "Dissolve", + "transition_type": "SMPTE_Dissolve", + "parameters": {}, + "in_offset": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 2 + }, + "out_offset": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 1 + } + }, + { + "OTIO_SCHEMA": "Gap.1", + "effects": [], + "markers": [], + "enabled": true, + "metadata": {}, + "name": "Gap B", + "source_range": { + "OTIO_SCHEMA": "TimeRange.1", + "duration": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 8 + }, + "start_time": { + "OTIO_SCHEMA": "RationalTime.1", + "rate": 24, + "value": 0 + } + } + } + ], + "effects": [], + "kind": "Video", + "markers": [], + "enabled": true, + "metadata": {}, + "name": "Track-001", + "source_range": null + } + ], + "effects": [], + "markers": [], + "enabled": true, + "metadata": {}, + "name": "tracks", + "source_range": null + } +} diff --git a/packages/conan/recipes/opentimelineio/test_package/test_package.cpp b/packages/conan/recipes/opentimelineio/test_package/test_package.cpp new file mode 100644 index 00000000..92b756b3 --- /dev/null +++ b/packages/conan/recipes/opentimelineio/test_package/test_package.cpp @@ -0,0 +1,27 @@ +/* +# Copyright (c) Contributors to the conan-center-index Project. All rights reserved. +# Copyright (c) Contributors to the aswf-docker Project. All rights reserved. +# SPDX-License-Identifier: MIT +# +*/ + +#include + +#include +#include + +int main(int argc, char *argv[]) +{ + OTIO_NS::SerializableObject::Retainer tl( + dynamic_cast( + OTIO_NS::Timeline::from_json_file(argv[1]) + ) + ); + for (const auto& cl : tl->find_clips()) + { + OTIO_NS::RationalTime dur = cl->duration(); + std::cout << "Name: " << cl->name() << " ["; + std::cout << dur.value() << "/" << dur.rate() << "]" << std::endl; + } + exit(EXIT_SUCCESS); +} diff --git a/packages/conan/recipes/openusd/test_package/conanfile.py b/packages/conan/recipes/openusd/test_package/conanfile.py index e04441c8..1bd17586 100644 --- a/packages/conan/recipes/openusd/test_package/conanfile.py +++ b/packages/conan/recipes/openusd/test_package/conanfile.py @@ -25,8 +25,7 @@ def layout(self): def build(self): cmake = CMake(self) cmake.configure() - # cmake.build() - cmake.build(cli_args=["--verbose"]) + cmake.build() def test(self): if can_run(self): diff --git a/packages/conan/recipes/rapidjson/conandata.yml b/packages/conan/recipes/rapidjson/conandata.yml new file mode 100644 index 00000000..6386f422 --- /dev/null +++ b/packages/conan/recipes/rapidjson/conandata.yml @@ -0,0 +1,28 @@ + + +# Copyright (c) Contributors to the conan-center-index Project. All rights reserved. +# Copyright (c) Contributors to the aswf-docker Project. All rights reserved. +# SPDX-License-Identifier: MIT +# +# From https://github.com/conan-io/conan-center-index/blob/3c237f4a7e8f29eacae90b809e4f18e75dfc05a3/recipes/rapidjson/all/conandata.yml + +sources: + "1.1.0": + url: "https://github.com/Tencent/rapidjson/archive/v1.1.0.tar.gz" + sha256: bf7ced29704a1e696fbccf2a2b4ea068e7774fa37f6d7dd4039d0787f8bed98e + # More recent unofficial releases based on commits + "cci.20250205": + url: "https://github.com/Tencent/rapidjson/archive/24b5e7a8b27f42fa16b96fc70aade9106cf7102f.tar.gz" + sha256: "2d2601a82d2d3b7e143a3c8d43ef616671391034bc46891a9816b79cf2d3e7a8" + "cci.20230929": + url: "https://github.com/Tencent/rapidjson/archive/f9d53419e912910fd8fa57d5705fa41425428c35.tar.gz" + sha256: "2b521dba5c22eaae6e6e7d4d304cb317e2cf8c687c70046b02792c02f78c127e" + "cci.20220822": + url: "https://github.com/Tencent/rapidjson/archive/06d58b9e848c650114556a23294d0b6440078c61.tar.gz" + sha256: 30d28bbe0bfff9d8dc5d3cf62799b6ee550499cc1520e44bdece81e002480d19 + "cci.20211112": + url: "https://github.com/Tencent/rapidjson/archive/0d4517f15a8d7167ba9ae67f3f22a559ca841e3b.tar.gz" + sha256: 3697fdcea30dc7c2b2bb68d2521a6b8793f4d3269de751eed2c5fd477ff329ce + "cci.20200410": + url: "https://github.com/Tencent/rapidjson/archive/8f4c021fa2f1e001d2376095928fc0532adf2ae6.zip" + sha256: e6fc99c7df7f29995838a764dd68df87b71db360f7727ace467b21b82c85efda diff --git a/packages/conan/recipes/rapidjson/conanfile.py b/packages/conan/recipes/rapidjson/conanfile.py new file mode 100644 index 00000000..0527f555 --- /dev/null +++ b/packages/conan/recipes/rapidjson/conanfile.py @@ -0,0 +1,75 @@ +# Copyright (c) Contributors to the conan-center-index Project. All rights reserved. +# Copyright (c) Contributors to the aswf-docker Project. All rights reserved. +# SPDX-License-Identifier: MIT +# +# From: https://github.com/conan-io/conan-center-index/blob/3c237f4a7e8f29eacae90b809e4f18e75dfc05a3/recipes/rapidjson/all/conanfile.py + +from conan import ConanFile +from conan.tools.files import get, copy, mkdir +from conan.tools.layout import basic_layout +import os + +required_conan_version = ">=1.50.0" + + +class RapidjsonConan(ConanFile): + name = "rapidjson" + description = "A fast JSON parser/generator for C++ with both SAX/DOM style API" + topics = ("rapidjson", "json", "parser", "generator") + url = "https://github.com/conan-io/conan-center-index" + homepage = "http://rapidjson.org" + license = "MIT" + package_type = "header-library" + package_id_embed_mode = "minor_mode" + settings = "os", "arch", "compiler", "build_type" + no_copy_source = True + + def layout(self): + basic_layout(self, src_folder="src") + + def source(self): + get(self, **self.conan_data["sources"][self.version], strip_root=True, + destination=self.source_folder) + + def package(self): + copy(self, pattern="license.txt", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses", self.name)) # ASWF: licenses in package dir + copy(self, pattern="*", src=os.path.join(self.source_folder, "include"), dst=os.path.join(self.package_folder, "include")) + # ASWF: a trivial CMake config to help with outside Conan builds + cmakepath = os.path.join(self.package_folder, "lib", "cmake", "RapidJSON") + mkdir(self, cmakepath) + with open(os.path.join(cmakepath, "RapidJSONConfig.cmake"), "w") as f: + f.write(""" +if(NOT TARGET RapidJSON::RapidJSON) + add_library(RapidJSON::RapidJSON INTERFACE IMPORTED) +endif() +""") + with open(os.path.join(cmakepath, "RapidJSONConfigVersion.cmake"), "w") as f: + f.write(f""" +set(PACKAGE_VERSION "{ self.version }") +if(NOT DEFINED PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE TRUE) + set(PACKAGE_VERSION_EXACT TRUE) + return() +endif() +if(PACKAGE_FIND_VERSION VERSION_LESS PACKAGE_VERSION) + set(PACKAGE_VERSION_COMPATIBLE TRUE) +else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) +endif() +if(PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) +endif() +""") + + def package_id(self): + self.info.clear() + + def package_info(self): + self.cpp_info.set_property("cmake_file_name", "RapidJSON") + self.cpp_info.set_property("cmake_target_name", "rapidjson") + self.cpp_info.bindirs = [] + self.cpp_info.libdirs = [] + + # TODO: to remove in conan v2 once cmake_find_package* generators removed + self.cpp_info.names["cmake_find_package"] = "RapidJSON" + self.cpp_info.names["cmake_find_package_multi"] = "RapidJSON" diff --git a/packages/conan/recipes/rapidjson/test_package/CMakeLists.txt b/packages/conan/recipes/rapidjson/test_package/CMakeLists.txt new file mode 100644 index 00000000..7b3ff644 --- /dev/null +++ b/packages/conan/recipes/rapidjson/test_package/CMakeLists.txt @@ -0,0 +1,14 @@ +# Copyright (c) Contributors to the conan-center-index Project. All rights reserved. +# Copyright (c) Contributors to the aswf-docker Project. All rights reserved. +# SPDX-License-Identifier: MIT +# +# From: https://github.com/conan-io/conan-center-index/blob/3c237f4a7e8f29eacae90b809e4f18e75dfc05a3/recipes/rapidjson/all/test_package/CMakeLists.txt + +cmake_minimum_required(VERSION 3.15) +project(test_package) + +find_package(RapidJSON CONFIG REQUIRED) + +add_executable(${PROJECT_NAME} test_package.cpp) +target_link_libraries(${PROJECT_NAME} PRIVATE rapidjson) +target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_11) diff --git a/packages/conan/recipes/rapidjson/test_package/conanfile.py b/packages/conan/recipes/rapidjson/test_package/conanfile.py new file mode 100644 index 00000000..387f97ff --- /dev/null +++ b/packages/conan/recipes/rapidjson/test_package/conanfile.py @@ -0,0 +1,32 @@ +# Copyright (c) Contributors to the conan-center-index Project. All rights reserved. +# Copyright (c) Contributors to the aswf-docker Project. All rights reserved. +# SPDX-License-Identifier: MIT +# +# From: https://github.com/conan-io/conan-center-index/blob/3c237f4a7e8f29eacae90b809e4f18e75dfc05a3/recipes/rapidjson/all/test_package/conanfile.py + +import os +from conan import ConanFile +from conan.tools.build import can_run +from conan.tools.cmake import CMake, cmake_layout + +required_conan_version = ">=1.50.0" + +class TestPackageConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + generators = "CMakeDeps", "CMakeToolchain", "VirtualRunEnv" + test_type = "explicit" + + def requirements(self): + self.requires(self.tested_reference_str) + + def layout(self): + cmake_layout(self) + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if can_run(self): + self.run(os.path.join(self.cpp.build.bindirs[0], "test_package"), env="conanrun") diff --git a/packages/conan/recipes/rapidjson/test_package/test_package.cpp b/packages/conan/recipes/rapidjson/test_package/test_package.cpp new file mode 100644 index 00000000..d80319ad --- /dev/null +++ b/packages/conan/recipes/rapidjson/test_package/test_package.cpp @@ -0,0 +1,31 @@ +/* +# Copyright (c) Contributors to the conan-center-index Project. All rights reserved. +# Copyright (c) Contributors to the aswf-docker Project. All rights reserved. +# SPDX-License-Identifier: MIT +# +# From: https://github.com/conan-io/conan-center-index/blob/3c237f4a7e8f29eacae90b809e4f18e75dfc05a3/recipes/rapidjson/all/test_package/test_package.cpp +*/ + +#include "rapidjson/document.h" +#include "rapidjson/writer.h" +#include "rapidjson/stringbuffer.h" + +#include + +using namespace rapidjson; + +int main() { + const char* json = "{\"working\":\"false\"}"; + Document d; + d.Parse(json); + + Value& w = d["working"]; + w.SetString("true", 4); + + StringBuffer buffer; + Writer writer(buffer); + d.Accept(writer); + + std::cout << buffer.GetString() << std::endl; + return 0; +} diff --git a/packages/conan/settings/profiles_aswf/vfx2024 b/packages/conan/settings/profiles_aswf/vfx2024 index deba99aa..e0665286 100644 --- a/packages/conan/settings/profiles_aswf/vfx2024 +++ b/packages/conan/settings/profiles_aswf/vfx2024 @@ -83,6 +83,7 @@ openjph/*: openjph/0.24.5@aswf/vfx2024 openssl/*: openssl/1.1.1k@aswf/vfx2024 opensubdiv/*: opensubdiv/3.6.1@aswf/vfx2024 openusd/*: openusd/24.08@aswf/vfx2024 +opentimelineio/*: opentimelineio/0.17.0@aswf/vfx2024 openvdb/*: openvdb/11.0.0@aswf/vfx2024 opus/*: opus/system@aswf/vfx2024 osl/*: osl/1.13.11.0@aswf/vfx2024 @@ -95,6 +96,7 @@ pybind11/*: pybind11/2.13.6@aswf/vfx2024 pyside/*: pyside/6.5.6@aswf/vfx2024 pystring/*: pystring/1.1.4@aswf/vfx2024 qt/*: qt/6.5.6@aswf/vfx2024 +rapidjson/*: rapidjson/cci.20250205@aswf/vfx2024 rawtoaces/*: rawtoaces/1.1.0@aswf/vfx2024 snappy/*: snappy/1.1.10@aswf/vfx2024 spdlog/*: spdlog/1.15.3@aswf/vfx2024 diff --git a/packages/conan/settings/profiles_aswf/vfx2025 b/packages/conan/settings/profiles_aswf/vfx2025 index ba6a5eba..f54ce0bf 100644 --- a/packages/conan/settings/profiles_aswf/vfx2025 +++ b/packages/conan/settings/profiles_aswf/vfx2025 @@ -82,6 +82,7 @@ openjpeg/*: openjpeg/2.4.0@aswf/vfx2025 openjph/*: openjph/0.24.5@aswf/vfx2025 openssl/*: openssl/1.1.1k@aswf/vfx2025 opensubdiv/*: opensubdiv/3.6.1@aswf/vfx2025 +opentimelineio/*: opentimelineio/0.17.0@aswf/vfx205 openusd/*: openusd/25.05.01@aswf/vfx2025 openvdb/*: openvdb/12.1.1@aswf/vfx2025 opus/*: opus/system@aswf/vfx2025 @@ -95,6 +96,7 @@ pybind11/*: pybind11/2.13.6@aswf/vfx2025 pyside/*: pyside/6.5.6@aswf/vfx2025 pystring/*: pystring/1.1.4@aswf/vfx2025 qt/*: qt/6.5.6@aswf/vfx2025 +rapidjson/*: rapidjson/cci.20250205@aswf/vfx2025 rawtoaces/*: rawtoaces/1.1.0@aswf/vfx2025 snappy/*: snappy/1.1.10@aswf/vfx2025 spdlog/*: spdlog/1.15.3@aswf/vfx2025 diff --git a/packages/conan/settings/profiles_aswf/vfx2026 b/packages/conan/settings/profiles_aswf/vfx2026 index 51af59bf..fbbac3e3 100644 --- a/packages/conan/settings/profiles_aswf/vfx2026 +++ b/packages/conan/settings/profiles_aswf/vfx2026 @@ -84,6 +84,7 @@ openjpeg/*: openjpeg/2.4.0@aswf/vfx2026 openjph/*: openjph/0.24.5@aswf/vfx2026 openssl/*: openssl/1.1.1k@aswf/vfx2026 opensubdiv/*: opensubdiv/3.7.0@aswf/vfx2026 +opentimelineio/*: opentimelineio/0.18.1@aswf/vfx2026 openusd/*: openusd/26.03@aswf/vfx2026 openvdb/*: openvdb/13.0.0@aswf/vfx2026 opus/*: opus/system@aswf/vfx2026 @@ -97,6 +98,7 @@ pybind11/*: pybind11/2.13.6@aswf/vfx2026 pyside/*: pyside/6.8.3@aswf/vfx2026 pystring/*: pystring/1.1.4@aswf/vfx2026 qt/*: qt/6.8.3@aswf/vfx2026 +rapidjson/*: rapidjson/cci.20250205@aswf/vfx2026 rawtoaces/*: rawtoaces/2.0.0@aswf/vfx2026 snappy/*: snappy/1.2.2@aswf/vfx2026 spdlog/*: spdlog/1.15.3@aswf/vfx2026 diff --git a/packages/conan/settings/profiles_aswftesting/vfx2024 b/packages/conan/settings/profiles_aswftesting/vfx2024 index bd2dd406..52e593a2 100644 --- a/packages/conan/settings/profiles_aswftesting/vfx2024 +++ b/packages/conan/settings/profiles_aswftesting/vfx2024 @@ -82,6 +82,7 @@ openjpeg/*: openjpeg/2.4.0@aswftesting/vfx2024 openjph/*: openjph/0.24.5@aswftesting/vfx2024 openssl/*: openssl/1.1.1k@aswftesting/vfx2024 opensubdiv/*: opensubdiv/3.6.1@aswftesting/vfx2024 +opentimelineio/*: opentimelineio/0.17.0@aswftesting/vfx2024 openusd/*: openusd/24.08@aswftesting/vfx2024 openvdb/*: openvdb/11.0.0@aswftesting/vfx2024 opus/*: opus/system@aswftesting/vfx2024 @@ -95,6 +96,7 @@ pybind11/*: pybind11/2.13.6@aswftesting/vfx2024 pyside/*: pyside/6.5.6@aswftesting/vfx2024 pystring/*: pystring/1.1.4@aswftesting/vfx2024 qt/*: qt/6.5.6@aswftesting/vfx2024 +rapidjson/*: rapidjson/cci.20250205@aswftesting/vfx2024 rawtoaces/*: rawtoaces/1.1.0@aswftesting/vfx2024 snappy/*: snappy/1.1.10@aswftesting/vfx2024 spdlog/*: spdlog/1.15.3@aswftesting/vfx2024 diff --git a/packages/conan/settings/profiles_aswftesting/vfx2025 b/packages/conan/settings/profiles_aswftesting/vfx2025 index 743b2b9a..e4970a02 100644 --- a/packages/conan/settings/profiles_aswftesting/vfx2025 +++ b/packages/conan/settings/profiles_aswftesting/vfx2025 @@ -82,6 +82,7 @@ openjpeg/*: openjpeg/2.4.0@aswftesting/vfx2025 openjph/*: openjph/0.24.5@aswftesting/vfx2025 openssl/*: openssl/1.1.1k@aswftesting/vfx2025 opensubdiv/*: opensubdiv/3.6.1@aswftesting/vfx2025 +opentimelineio/*: opentimelineio/0.17.0@aswftesting/vfx2025 openusd/*: openusd/25.05.01@aswftesting/vfx2025 openvdb/*: openvdb/12.1.1@aswftesting/vfx2025 opus/*: opus/system@aswftesting/vfx2025 @@ -95,6 +96,7 @@ pybind11/*: pybind11/2.13.6@aswftesting/vfx2025 pyside/*: pyside/6.5.6@aswftesting/vfx2025 pystring/*: pystring/1.1.4@aswftesting/vfx2025 qt/*: qt/6.5.6@aswftesting/vfx2025 +rapidjson/*: rapidjson/cci.20250205@aswftesting/vfx2025 rawtoaces/*: rawtoaces/1.1.0@aswftesting/vfx2025 snappy/*: snappy/1.1.10@aswftesting/vfx2025 spdlog/*: spdlog/1.15.3@aswftesting/vfx2025 diff --git a/packages/conan/settings/profiles_aswftesting/vfx2026 b/packages/conan/settings/profiles_aswftesting/vfx2026 index bed4898c..923b950e 100644 --- a/packages/conan/settings/profiles_aswftesting/vfx2026 +++ b/packages/conan/settings/profiles_aswftesting/vfx2026 @@ -84,6 +84,7 @@ openjpeg/*: openjpeg/2.4.0@aswftesting/vfx2026 openjph/*: openjph/0.24.5@aswftesting/vfx2026 openssl/*: openssl/1.1.1k@aswftesting/vfx2026 opensubdiv/*: opensubdiv/3.7.0@aswftesting/vfx2026 +opentimelineio/*: opentimelineio/0.18.1@aswftesting/vfx2026 openusd/*: openusd/26.03@aswftesting/vfx2026 openvdb/*: openvdb/13.0.0@aswftesting/vfx2026 opus/*: opus/system@aswftesting/vfx2026 @@ -97,6 +98,7 @@ pybind11/*: pybind11/2.13.6@aswftesting/vfx2026 pyside/*: pyside/6.8.3@aswftesting/vfx2026 pystring/*: pystring/1.1.4@aswftesting/vfx2026 qt/*: qt/6.8.3@aswftesting/vfx2026 +rapidjson/*: rapidjson/cci.20250205@aswftesting/vfx2026 rawtoaces/*: rawtoaces/2.0.0@aswftesting/vfx2026 snappy/*: snappy/1.2.2@aswftesting/vfx2026 spdlog/*: spdlog/1.15.3@aswftesting/vfx2026 diff --git a/packages/vfx2/Dockerfile b/packages/vfx2/Dockerfile deleted file mode 100644 index bf50bb6a..00000000 --- a/packages/vfx2/Dockerfile +++ /dev/null @@ -1,165 +0,0 @@ -# syntax = docker/dockerfile:1.4 -# Copyright (c) Contributors to the aswf-docker Project. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - -# "Global" ARGs -ARG ASWF_ORG -ARG CI_COMMON_VERSION -ARG ASWF_CLANG_MAJOR_VERSION -ARG ASWF_CUDA_VERSION -ARG ASWF_OPTIX_VERSION -ARG ASWF_PYSIDE_CLANG_VERSION -ARG ASWF_VFXPLATFORM_VERSION - -ARG ASWF_BOOST_VERSION -ARG ASWF_CMAKE_VERSION -ARG ASWF_CPPUNIT_VERSION -ARG ASWF_EXPAT_VERSION -ARG ASWF_FMT_VERSION -ARG ASWF_FREETYPE_VERSION -ARG ASWF_GLEW_VERSION -ARG ASWF_GLFW_VERSION -ARG ASWF_HIGHWAY_VERSION -ARG ASWF_PYBIND11_VERSION -ARG ASWF_LIBICONV_VERSION -ARG ASWF_LIBJPEG_TURBO_VERSION -ARG ASWF_LIBJXL_VERSION -ARG ASWF_LIBULTRAHDR_VERSION -ARG ASWF_LIBWEBP_VERSION -ARG ASWF_MD4C_VERSION -ARG ASWF_MINIZIP_NG_VERSION -ARG ASWF_NUMPY_VERSION -ARG ASWF_PYSTRING_VERSION -ARG ASWF_CPYTHON_VERSION -ARG ASWF_PYTHON_MAJOR_MINOR_VERSION -ARG ASWF_ONETBB_VERSION -ARG ASWF_TSL_ROBIN_MAP_VERSION -ARG ASWF_YAML_CPP_VERSION - -ARG ASWF_OTIO_VERSION -ARG ASWF_PYSIDE_VERSION -ARG ASWF_QT_VERSION - -#################### ci-base-builder #################### -FROM ${ASWF_ORG}/ci-common:${CI_COMMON_VERSION}-clang${ASWF_CLANG_MAJOR_VERSION} AS ci-base-builder - -ARG ASWF_CUDA_VERSION -ARG ASWF_OPTIX_VERSION -ARG ASWF_CMAKE_VERSION -ARG ASWF_CPYTHON_VERSION -ARG ASWF_PYTHON_MAJOR_MINOR_VERSION -ARG ASWF_NUMPY_VERSION -ARG ASWF_BOOST_VERSION -ARG ASWF_ONETBB_VERSION -ARG ASWF_PKG_ORG -ARG ASWF_CONAN_CHANNEL -ARG ASWF_VFXPLATFORM_VERSION - -ENV ASWF_CMAKE_VERSION=${ASWF_CMAKE_VERSION} -ENV ASWF_CPYTHON_VERSION=${ASWF_CPYTHON_VERSION} -ENV ASWF_PYTHON_MAJOR_MINOR_VERSION=${ASWF_PYTHON_MAJOR_MINOR_VERSION} -ENV ASWF_NUMPY_VERSION=${ASWF_NUMPY_VERSION} -ENV ASWF_BOOST_VERSION=${ASWF_BOOST_VERSION} -ENV ASWF_ONETBB_VERSION=${ASWF_ONETBB_VERSION} -ENV ASWF_VFXPLATFORM_VERSION=${ASWF_VFXPLATFORM_VERSION} - -COPY scripts/common/install_conanpackages.sh /tmp - -# Use conan to install some packages -COPY < . -[requires] -cpython/${ASWF_CPYTHON_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -boost/${ASWF_BOOST_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -onetbb/${ASWF_ONETBB_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -EOF - -RUN --mount=type=cache,target=/opt/conan_home/d \ - --mount=type=bind,rw,target=/opt/conan_home/.conan2,source=packages/conan/settings \ - /tmp/install_conanpackages.sh /usr/local vfx"${ASWF_VFXPLATFORM_VERSION}" vfx2 - -COPY ../scripts/common/before_build.sh \ - ../scripts/common/copy_new_files.sh \ - /tmp/ - -ENV DOWNLOADS_DIR=/tmp/downloads \ - CCACHE_DIR=/tmp/ccache \ - ASWF_INSTALL_PREFIX=/usr/local \ - PYTHONPATH=${ASWF_INSTALL_PREFIX}/lib/python${ASWF_PYTHON_MAJOR_MINOR_VERSION}/site-packages:${PYTHONPATH} - -#################### ci-otio-builder #################### -FROM ci-base-builder AS ci-otio-builder - -ARG CI_COMMON_VERSION -ARG ASWF_PYSIDE_CLANG_VERSION -ARG ASWF_OTIO_VERSION -ARG ASWF_EXPAT_VERSION -ARG ASWF_FREETYPE_VERSION -ARG ASWF_MD4C_VERSION -ARG ASWF_QT_VERSION -ARG ASWF_PYSIDE_VERSION - -ENV CI_COMMON_VERSION=${CI_COMMON_VERSION} -ENV ASWF_PYSIDE_CLANG_VERSION=${ASWF_PYSIDE_CLANG_VERSION} -ENV ASWF_OTIO_VERSION=${ASWF_OTIO_VERSION} -ENV ASWF_EXPAT_VERSION=${ASWF_EXPAT_VERSION} -ENV ASWF_FREETYPE_VERSION=${ASWF_FREETYPE_VERSION} -ENV ASWF_MD4C_VERSION=${ASWF_MD4C_VERSION} -ENV ASWF_QT_VERSION=${ASWF_QT_VERSION} -ENV ASWF_PYSIDE_VERSION=${ASWF_PYSIDE_VERSION} - -COPY scripts/common/install_conanpackages.sh /tmp - -# Use conan to install some packages -COPY < . -[requires] -expat/${ASWF_EXPAT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -qt/${ASWF_QT_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -pyside/${ASWF_PYSIDE_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -EOF - -COPY ../scripts/vfx/build_otio.sh \ - /tmp/ - -RUN --mount=type=cache,target=/opt/conan_home/d \ - --mount=type=bind,rw,target=/opt/conan_home/.conan2,source=packages/conan/settings \ - /tmp/install_conanpackages.sh /usr/local vfx"${ASWF_VFXPLATFORM_VERSION}" otio - -RUN --mount=type=cache,target=/tmp/ccache \ - --mount=type=cache,sharing=private,target=/tmp/downloads \ - /tmp/before_build.sh && \ - /tmp/build_otio.sh && \ - /tmp/copy_new_files.sh && \ - ccache --show-stats - - -#################### ci-package-otio #################### -FROM scratch AS ci-package-otio - -ARG ASWF_ORG -ARG CI_COMMON_VERSION -ARG ASWF_DTS_VERSION -ARG ASWF_DTS_PREFIX -ARG ASWF_OTIO_VERSION -ARG ASWF_VFXPLATFORM_VERSION - -LABEL org.opencontainers.image.name="$ASWF_ORG/ci-package-otio" -LABEL org.opencontainers.image.title="OpenTimelineIO package built for ASWF Docker images" -LABEL org.opencontainers.image.description="OpenTimelineIO headers and binaries to be installed in ASWF Docker images" -LABEL org.opencontainers.image.authors="Built by aswf.io CI Working Group" -LABEL org.opencontainers.image.vendor="AcademySoftwareFoundation" -LABEL org.opencontainers.image.url="https://github.com/PixarAnimationStudios/OpenTimelineIO" -LABEL org.opencontainers.image.source="https://github.com/AcademySoftwareFoundation/aswf-docker/blob/main/packages/Dockerfile" -LABEL org.opencontainers.image.version="${ASWF_OTIO_VERSION}" -LABEL org.opencontainers.image.licenses="Apache-2.0" -LABEL io.aswf.docker.versions.ci-common="${CI_COMMON_VERSION}" -LABEL io.aswf.docker.versions.vfx-platform="${ASWF_VFXPLATFORM_VERSION}" -LABEL io.aswf.docker.versions.dts="${ASWF_DTS_VERSION}" -LABEL io.aswf.docker.versions.otio="${ASWF_OTIO_VERSION}" - -COPY --from=ci-otio-builder /package/. / diff --git a/pyproject.toml b/pyproject.toml index 70a5aa84..e49cdbdb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ version = "1.0.0" description = "ASWF Docker Utilities" readme = "python/README.md" license = { text = "Apache-2.0" } -requires-python = ">=3.9" +requires-python = ">=3.10" authors = [ { name = "Aloys Baillet", email = "aloys.baillet+github@gmail.com" } ] @@ -21,7 +21,7 @@ dependencies = [ "bottle==0.12.25", "certifi==2024.7.4", "charset-normalizer==3.3.2", - "click==8.1.7", + "click==8.3.1", "colorama==0.4.6", "conan==2.26.2", "deprecated==1.2.14", @@ -83,7 +83,7 @@ testpaths = [ ] [tool.black] -target-version = ['py39'] +target-version = ['py310'] include = ''' ( python/.*\.py$ diff --git a/python/aswfdocker/builder.py b/python/aswfdocker/builder.py index a5f0b20b..9360e047 100644 --- a/python/aswfdocker/builder.py +++ b/python/aswfdocker/builder.py @@ -23,12 +23,10 @@ def __init__( build_info: aswfinfo.ASWFInfo, group_info: groupinfo.GroupInfo, push: bool = False, - use_conan: bool = False, ): self.push = push self.build_info = build_info self.group_info = group_info - self.use_conan = use_conan self.index = index.Index() def make_bake_dict( @@ -40,10 +38,6 @@ def make_bake_dict( root: typing.Dict[str, dict] = {} root["target"] = {} for image, version in self.group_info.iter_images_versions(): - use_conan = self.group_info.type == constants.ImageType.PACKAGE and ( - self.use_conan - or self.index.is_conan_only_package(image.replace("ci-package-", "")) - ) versions_to_bake = set() major_version = utils.get_major_version(version) version_info = self.index.version_info(major_version) @@ -52,35 +46,23 @@ def make_bake_dict( group = self.index.get_group_from_image( self.group_info.type, image_base ) - if use_conan: - if version in versions_to_bake: - # Only one version per image needed - continue - # if version_info.ci_common_version != major_version: - # Only bake conan images in ci_common container! - # version = version_info.ci_common_version - # major_version = utils.get_major_version(version) - versions_to_bake.add(version) - tags = list( - map( - lambda tag: f"{constants.DOCKER_REGISTRY}/{self.build_info.docker_org}" - + f"/ci-baseos-gl-conan:{tag}", - [version, major_version], - ) - ) - docker_file = "packages/common/Dockerfile" - else: - tags = version_info.get_tags( - version, - self.build_info.docker_org, - image, - extra_suffix=version_info.package_versions.get( - "ASWF_" - + image.replace("ci-package-", "").upper() - + "_VERSION" - ), + if version in versions_to_bake: + # Only one version per image needed + continue + # if version_info.ci_common_version != major_version: + # Only bake conan images in ci_common container! + # version = version_info.ci_common_version + # major_version = utils.get_major_version(version) + versions_to_bake.add(version) + # tags may not make much sense for Conan packages + tags = list( + map( + lambda tag: f"{constants.DOCKER_REGISTRY}/{self.build_info.docker_org}" + + f"/ci-baseos-gl-conan:{tag}", + [version, major_version], ) - docker_file = f"packages/{group}/Dockerfile" + ) + docker_file = "packages/common/Dockerfile" else: tags = version_info.get_tags(version, self.build_info.docker_org, image) docker_file = f"{image}/Dockerfile" @@ -97,14 +79,14 @@ def make_bake_dict( "CI_COMMON_VERSION": version_info.ci_common_version, "ASWF_CONAN_CHANNEL": channel, } - if use_conan: + if self.group_info.type == constants.ImageType.PACKAGE: # params as env var needed for conan build args.update( { "ASWF_PKG_NAME": image.replace("ci-package-", ""), "ASWF_PKG_VERSION": version_info.package_versions.get( "ASWF_" - # Handle dependencies with hyhpen in their name. + # Handle dependencies with hyphens in their name. + image.replace("ci-package-", "").upper().replace("-", "_") + "_VERSION" ), @@ -132,9 +114,6 @@ def make_bake_dict( "id=conan_password,env=CONAN_PASSWORD", ], } - if self.group_info.type == constants.ImageType.PACKAGE: - if not use_conan: - target_dict["target"] = image root["target"][f"{image}-{major_version}"] = target_dict root["group"] = {"default": {"targets": list(root["target"].keys())}} @@ -262,13 +241,6 @@ def build( ) -> None: images_and_versions = [] for image, version in self.group_info.iter_images_versions(get_image=True): - if ( - self.group_info.type == constants.ImageType.PACKAGE - and not self.use_conan - and self.index.is_conan_only_package(image) - ): - logger.warning("Skipping %s as it is a conan-only package!", image) - continue images_and_versions.append((image, version)) if not images_and_versions: @@ -276,7 +248,7 @@ def build( path = self.make_bake_jsonfile(build_missing, no_remote) if path: - if not self.use_conan: + if self.group_info.type == constants.ImageType.IMAGE: self._run( f"docker buildx bake -f {path} --progress {progress}", dry_run=dry_run, diff --git a/python/aswfdocker/cli/aswfdocker.py b/python/aswfdocker/cli/aswfdocker.py index 8932ca8d..233e0fb4 100644 --- a/python/aswfdocker/cli/aswfdocker.py +++ b/python/aswfdocker/cli/aswfdocker.py @@ -15,7 +15,6 @@ from aswfdocker import ( builder, - migrater, aswfinfo, groupinfo, constants, @@ -77,7 +76,7 @@ def common_image_options(function): "--ci-image-type", "-t", required=False, - help="Builds a ci-package or a ci-image.", + help="Builds a Conan package or a container image.", type=click.Choice(constants.ImageType.__members__.keys(), case_sensitive=True), )(function) function = click.option( @@ -157,24 +156,33 @@ def get_group_info(build_info, ci_image_type, groups, versions, full_name, targe default="auto", help='Set type of progress output for "docker buildx bake" command.', ) -@click.option("--use-conan", "-c", is_flag=True, help="Use Conan to build packages") +@click.option( + "--use-conan", + "-c", + is_flag=True, + expose_value=False, + deprecated="This option is no longer relevant since all packages are built with Conan.", +) @click.option( "--keep-source", "-ks", is_flag=True, - help="[DEPRECATED] This option is no longer relevant with Conan 2.", + expose_value=False, + deprecated="This option is no longer relevant with Conan 2.", ) @click.option( "--keep-build", "-kb", is_flag=True, - help="[DEPRECATED] This option is no longer relevant with Conan 2.", + expose_value=False, + deprecated="This option is no longer relevant with Conan 2.", ) @click.option( "--conan-login", "-cl", is_flag=True, - help="[DEPRECATED] This option is no longer used as authentication is now handled via buildx secrets.", + expose_value=False, + deprecated="This option is no longer relevant as authentication is now handled via buildx secrets.", ) @click.option( "--build-missing", @@ -199,14 +207,10 @@ def build( push, dry_run, progress, - use_conan, - keep_source, # pylint: disable=unused-argument - keep_build, # pylint: disable=unused-argument - conan_login, # pylint: disable=unused-argument build_missing, no_remote, ): - """Builds a ci-package or ci-image Docker image.""" + """Builds a Conan package or ci-image Docker image.""" if push == "YES": pushb = True elif push == "AUTO": @@ -217,9 +221,7 @@ def build( group_info = get_group_info( build_info, ci_image_type, group, version, full_name, target ) - b = builder.Builder( - build_info=build_info, group_info=group_info, push=pushb, use_conan=use_conan - ) + b = builder.Builder(build_info=build_info, group_info=group_info, push=pushb) b.build( dry_run=dry_run, progress=progress, @@ -228,7 +230,7 @@ def build( ) -@cli.command() +@cli.command(deprecated="No longer relevant since all packages are built with Conan.") @click.option("--from", "-f", "from_org", default="aswftesting") @click.option("--to", "-t", "to_org", default="aswf") @click.option( @@ -243,17 +245,7 @@ def build( ) @click.option("--dry-run", "-d", is_flag=True) def migrate(from_org, to_org, package, version, dry_run): - """Migrates packages from a Docker Hub org to another.""" - m = migrater.Migrater(from_org, to_org) - m.gather(package, version) - mig_list = "\n".join(f"{mi.source} -> {mi.destination}" for mi in m.migration_list) - if not click.confirm( - f"Are you sure you want to migrate the following {len(m.migration_list)} packages?\n{mig_list}\n" - ): - click.echo("Migration cancelled.") - return - m.migrate(dry_run) - click.echo("Migration done.") + pass @cli.command() @@ -279,7 +271,7 @@ def getdockerpush(build_info): ) -@cli.command() +@cli.command(deprecated="No longer relevant since all packages are built with Conan.") @click.option( "--docker-org", "-d", @@ -298,9 +290,7 @@ def getdockerpush(build_info): ) @pass_build_info def download(build_info, docker_org, package, version): - """Downloads and extracts a ci-package into the packages folder.""" - path = utils.download_package(build_info.repo_root, docker_org, package, version) - click.echo(path, nl=False) + pass @cli.command() diff --git a/python/aswfdocker/data/ci-image-dockerfile.jinja2 b/python/aswfdocker/data/ci-image-dockerfile.jinja2 index 9a3acdfd..63e139c8 100644 --- a/python/aswfdocker/data/ci-image-dockerfile.jinja2 +++ b/python/aswfdocker/data/ci-image-dockerfile.jinja2 @@ -38,14 +38,6 @@ ARG ASWF_BASEOS_IMAGE ARG ASWF_BASEOS_DISTRO {% endif %} -# Comment out this block to use Conan packages -{% for package in packages -%} -{% if not index.is_conan_only_package(package) -%} -FROM ${ASWF_PKG_ORG}/ci-package-{{ package }}:{{docker_package_version}}-$ASWF_{{package|upper|replace("-", "_")}}_VERSION AS ci-package-{{ package }} -{% endif -%} -{% endfor -%} - - FROM {{ docker_from }} AS ci-{{ name }} @@ -126,12 +118,6 @@ ENV {{ arg }}=${{ arg }} {% endfor -%} {% endfor %} -{% for package in packages -%} -{% if not index.is_conan_only_package(package) -%} -COPY --from=ci-package-{{ package }} /. /usr/local/ -{% endif -%} -{% endfor -%} - COPY ci-{{name}}/README.md ci-{{name}}/image.yaml /usr/local/aswf/ {% if name != "common" and name != "baseos-gl-conan" and name != "base" and name != "baseqt" and name != "vfxall" %} COPY scripts/vfx/build_{{name}}.sh /usr/local/aswf @@ -155,11 +141,7 @@ COPY < . [requires] {% for package in packages -%} -{% if index.is_conan_only_package(package) -%} {{package}}/${ASWF_{{package|upper|replace("-", "_")}}_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -{% else -%} -# {{package}}/${ASWF_{{package|upper|replace("-", "_")}}_VERSION}@${ASWF_PKG_ORG}/${ASWF_CONAN_CHANNEL} -{% endif -%} {% endfor -%} EOF diff --git a/python/aswfdocker/data/versions.yaml b/python/aswfdocker/data/versions.yaml index abd50dca..0affc730 100644 --- a/python/aswfdocker/data/versions.yaml +++ b/python/aswfdocker/data/versions.yaml @@ -278,7 +278,7 @@ versions: ASWF_OPENSUBDIV_VERSION: "3_3_3" ASWF_OPENVDB_VERSION: "6.2.1" ASWF_OSL_VERSION: "1.10.9" - ASWF_OTIO_VERSION: "0.12.1" + ASWF_OPENTIMELINEIO_VERSION: "0.12.1" ASWF_PARTIO_VERSION: "1.10.1" ASWF_PTEX_VERSION: "2.1.33" ASWF_PYBIND11_VERSION: "2.4.3" @@ -337,7 +337,7 @@ versions: ASWF_OPENSUBDIV_VERSION: "3_4_3" ASWF_OPENVDB_VERSION: "7.1.0" ASWF_OSL_VERSION: "1.10.10" - ASWF_OTIO_VERSION: "0.12.1" + ASWF_OPENTIMELINEIO_VERSION: "0.12.1" ASWF_PARTIO_VERSION: "1.10.1" ASWF_PTEX_VERSION: "2.3.2" ASWF_PYBIND11_VERSION: "2.4.3" @@ -380,7 +380,7 @@ versions: ASWF_OPENSUBDIV_VERSION: "3_4_3" ASWF_OPENVDB_VERSION: "8.0.1" ASWF_OSL_VERSION: "1.11.13.0" - ASWF_OTIO_VERSION: "0.13" + ASWF_OPENTIMELINEIO_VERSION: "0.13" ASWF_PARTIO_VERSION: "1.14.0" ASWF_PTEX_VERSION: "2.3.2" ASWF_PYBIND11_VERSION: "2.6.2" @@ -427,7 +427,7 @@ versions: ASWF_OPENSUBDIV_VERSION: "3_4_4" ASWF_OPENVDB_VERSION: "9.1.0" ASWF_OSL_VERSION: "1.12.7.0" - ASWF_OTIO_VERSION: "0.14.1" + ASWF_OPENTIMELINEIO_VERSION: "0.14.1" ASWF_PARTIO_VERSION: "1.14.0" ASWF_PTEX_VERSION: "2.4.0" ASWF_PYBIND11_VERSION: "2.8.1" @@ -486,7 +486,7 @@ versions: ASWF_OPENSUBDIV_VERSION: "3_5_0" ASWF_OPENVDB_VERSION: "10.0.1" ASWF_OSL_VERSION: "1.12.13.0" - ASWF_OTIO_VERSION: "0.15" + ASWF_OPENTIMELINEIO_VERSION: "0.15" ASWF_PARTIO_VERSION: "1.17.1" ASWF_PTEX_VERSION: "2.4.2" ASWF_PYBIND11_VERSION: "2.9.2" @@ -599,6 +599,7 @@ versions: ASWF_PUGIXML_VERSION: "1.14" ASWF_PYBIND11_VERSION: "2.13.6" ASWF_PYSTRING_VERSION: "1.1.4" + ASWF_RAPIDJSON_VERSION: "cci.20250205" ASWF_SNAPPY_VERSION: "1.1.10" ASWF_SPDLOG_VERSION: "1.15.3" ASWF_TSL_ROBIN_MAP_VERSION: "1.3.0" @@ -631,7 +632,7 @@ versions: ASWF_OPENRV_VERSION: "2.1.0" ASWF_OPENVDB_VERSION: "11.0.0" ASWF_OSL_VERSION: "1.13.11.0" - ASWF_OTIO_VERSION: "0.17.0" + ASWF_OPENTIMELINEIO_VERSION: "0.17.0" ASWF_RAWTOACES_VERSION: "1.1.0" "2024-clang16": parent_versions: ["4", "4-clang16", "2024"] @@ -734,6 +735,7 @@ versions: ASWF_PUGIXML_VERSION: "1.14" ASWF_PYBIND11_VERSION: "2.13.6" ASWF_PYSTRING_VERSION: "1.1.4" + ASWF_RAPIDJSON_VERSION: "cci.20250205" ASWF_SNAPPY_VERSION: "1.1.10" ASWF_SPDLOG_VERSION: "1.15.3" ASWF_TSL_ROBIN_MAP_VERSION: "1.3.0" @@ -766,7 +768,7 @@ versions: ASWF_OPENRV_VERSION: "2.1.0" ASWF_OPENVDB_VERSION: "12.1.1" ASWF_OSL_VERSION: "1.14.7.0" - ASWF_OTIO_VERSION: "0.17.0" + ASWF_OPENTIMELINEIO_VERSION: "0.17.0" ASWF_RAWTOACES_VERSION: "1.1.0" "2025-clang18": parent_versions: ["5", "5-clang18", "2025"] @@ -870,6 +872,7 @@ versions: ASWF_PUGIXML_VERSION: "1.15" ASWF_PYBIND11_VERSION: "2.13.6" ASWF_PYSTRING_VERSION: "1.1.4" + ASWF_RAPIDJSON_VERSION: "cci.20250205" ASWF_SNAPPY_VERSION: "1.2.2" ASWF_SPDLOG_VERSION: "1.15.3" ASWF_TSL_ROBIN_MAP_VERSION: "1.4.0" @@ -902,7 +905,7 @@ versions: ASWF_OPENRV_VERSION: "2.1.0" ASWF_OPENVDB_VERSION: "13.0.0" ASWF_OSL_VERSION: "1.15.1.0" - ASWF_OTIO_VERSION: "0.17.0" + ASWF_OPENTIMELINEIO_VERSION: "0.18.1" ASWF_RAWTOACES_VERSION: "2.0.0" "2026-clang19": parent_versions: ["6", "6-clang19", "2026"] @@ -1168,7 +1171,7 @@ ci-packages: - "2024.6" - "2025.5" - "2026.3" - otio: + opentimelineio: - "2019.1" - "2020.1" - "2021.3" @@ -1451,6 +1454,10 @@ ci-packages: - "2024.6" - "2025.5" - "2026.3" + rapidjson: + - "2024.6" + - "2025.5" + - "2026.3" snappy: - "2024.6" - "2025.5" @@ -1742,6 +1749,7 @@ groups: - onetbb - pugixml - pystring + - rapidjson - snappy - tk - tsl-robin-map @@ -1815,6 +1823,7 @@ groups: - libraw - openexr - openfx + - opentimelineio vfx1-3: - alembic - ocio @@ -1827,8 +1836,6 @@ groups: - materialx vfx1-6: - openusd - vfx2: - - otio review: - openrv image: @@ -1867,117 +1874,3 @@ package_data: conan: docker_args: - ASWF_CONAN_PYTHON_VERSION - -conan_only: - - aces_container - - alembic - - b2 - - c-blosc - - boost - - brotli - - bzip2 - - ceres-solver - - cimg - - clang - - cmake - - cppunit - - cpython - - dbus - - double-conversion - - eigen - - expat - - fmt - - fontconfig - - freetype - - gdbm - - giflib - - glew - - glfw - - glib - - gtest - - harfbuzz - - hdf5 - - highway - - icu - - imath - - jasper - - lcms - - libalsa - - libaom-av1 - - libbacktrace - - libdeflate - - libdrm - - libffi - - libiconv - - libjpeg-turbo - - libjxl - - libmp3lame - - libpng - - libraw - - libsndfile - - libsquish - - libsvtav1 - - libtiff - - libultrahdr - - libvpx - - libwebp - - libxcrypt - - libxshmfence - - log4cplus - - lz4 - - materialx - - md4c - - minizip-ng - - mpdecimal - - mpg123 - - nanobind - - nasm - - ninja - - nlohmann_json - - nspr - - nss - - ocio - - oiio - - ogg - - onetbb - - openal-soft - - opencl-headers - - opencl-icd-loader - - openexr - - openfx - - opengl - - openjpeg - - openjph - - openssl - - opensubdiv - - openusd - - openvdb - - opus - - osl - - partio - - pcre2 - - ptex - - pugixml - - pulseaudio - - pybind11 - - pyside - - pystring - - qt - - rawtoaces - - snappy - - spdlog - - sqlite3 - - tcl - - tk - - tsl-robin-map - - util-linux-libuuid - - vorbis - - vulkan-headers - - vulkan-loader - - xkbcommon - - xorg - - xorg-proto - - xz_utils - - yaml-cpp - - zlib - - zstd diff --git a/python/aswfdocker/index.py b/python/aswfdocker/index.py index e5f7f722..c824dfb6 100644 --- a/python/aswfdocker/index.py +++ b/python/aswfdocker/index.py @@ -87,6 +87,3 @@ def get_group_from_image(self, image_type: constants.ImageType, image: str): if img == image: return group raise RuntimeError(f"Cannot find group for image {image}") - - def is_conan_only_package(self, package): - return package in self._versions["conan_only"] diff --git a/python/aswfdocker/migrater.py b/python/aswfdocker/migrater.py deleted file mode 100644 index 05681cf7..00000000 --- a/python/aswfdocker/migrater.py +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright (c) Contributors to the aswf-docker Project. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 -""" -Migration of ASWF Docker images between Docker organizations -""" -import logging -import subprocess -import typing - -from aswfdocker import constants, index, utils - - -logger = logging.getLogger(__name__) - - -class MigrateInfo: - def __init__(self, image, version, source, destination): - self.image = image - self.version = version - self.source = source - self.destination = destination - - -class Migrater: - def __init__(self, from_org: str, to_org: str): - self.from_org = from_org - self.to_org = to_org - self.migration_list: typing.List[MigrateInfo] = [] - self.cmds: typing.List[str] = [] - self.index = index.Index() - - def gather(self, package: str, version: str): - for pkg in self.index.iter_images(constants.ImageType.PACKAGE): - image = utils.get_image_name(constants.ImageType.PACKAGE, pkg) - if not package or package == pkg: - for v in self.index.iter_versions(constants.ImageType.PACKAGE, pkg): - major_version = v.split(".")[0] - if not version or version == major_version: - self.migration_list.append( - MigrateInfo( - image, - v, - f"{constants.DOCKER_REGISTRY}/{self.from_org}/{image}:{v}", - f"{constants.DOCKER_REGISTRY}/{self.to_org}/{image}:{v}", - ) - ) - - def migrate(self, dry_run: bool): - for minfo in self.migration_list: - if dry_run: - logger.info("Migrating %s -> %s", minfo.source, minfo.destination) - else: - logger.info("Would migrate %s -> %s", minfo.source, minfo.destination) - - self.cmds.append(f"docker pull {minfo.source}") - self.cmds.append(f"docker tag {minfo.source} {minfo.destination}") - self.cmds.append(f"docker push {minfo.destination}") - - major_version = utils.get_major_version(minfo.version) - version_info = self.index.version_info(major_version) - tags = version_info.get_tags(minfo.version, self.to_org, minfo.image) - if len(tags) > 1: - for tag in tags: - if tag != minfo.destination: - self.cmds.append(f"docker tag {minfo.destination} {tag}") - self.cmds.append(f"docker push {tag}") - - if logger.isEnabledFor(logging.DEBUG): - list(map(logger.debug, self.cmds)) - - if not dry_run: - for cmd in self.cmds: - subprocess.run(cmd, shell=True, check=True) diff --git a/python/aswfdocker/tests/test_builder.py b/python/aswfdocker/tests/test_builder.py index 962d7688..a022a76f 100644 --- a/python/aswfdocker/tests/test_builder.py +++ b/python/aswfdocker/tests/test_builder.py @@ -22,72 +22,39 @@ def setUp(self): repo_uri="notauri", source_branch="testing", aswf_version="2024.123" ) - def test_package_otio_2024_dict(self): + def test_package_opentimelineio_2019_dict(self): b = builder.Builder( self.build_info, groupinfo.GroupInfo( - names=["vfx2"], - versions=["2024"], - type_=constants.ImageType.PACKAGE, - targets=[], - ), - ) - otio_version = list( - filter( - lambda package: package.startswith("2024"), - index.Index().iter_versions(constants.ImageType.PACKAGE, "otio"), - ) - )[0] - baked = b.make_bake_dict(False, False) - self.assertEqual( - baked["target"]["ci-package-otio-2024"]["tags"], - [ - f"{constants.DOCKER_REGISTRY}/aswflocaltesting/ci-package-otio:2024", - f"{constants.DOCKER_REGISTRY}/aswflocaltesting/ci-package-otio:{otio_version}", - f"{constants.DOCKER_REGISTRY}/aswflocaltesting/ci-package-otio:2024-0.17.0", - ], - ) - self.assertEqual( - baked["target"]["ci-package-otio-2024"]["args"]["ASWF_VERSION"], - otio_version, - ) - self.assertEqual( - baked["target"]["ci-package-otio-2024"]["dockerfile"], - "packages/vfx2/Dockerfile", - ) - - def test_package_otio_2019_dict_conan(self): - b = builder.Builder( - self.build_info, - groupinfo.GroupInfo( - names=["vfx2"], + names=["vfx1-2"], versions=["2019"], type_=constants.ImageType.PACKAGE, targets=[], ), ) - otio_version = list( - index.Index().iter_versions(constants.ImageType.PACKAGE, "otio") + opentimelineio_version = list( + index.Index().iter_versions(constants.ImageType.PACKAGE, "opentimelineio") )[0] baked = b.make_bake_dict(False, False) self.assertIn( - "ASWF_OSL_VERSION", baked["target"]["ci-package-otio-2019"]["args"] + "ASWF_OPENTIMELINEIO_VERSION", + baked["target"]["ci-package-opentimelineio-2019"]["args"], ) + # tags may not make much sense for Conan packages self.assertEqual( - baked["target"]["ci-package-otio-2019"]["tags"], + baked["target"]["ci-package-opentimelineio-2019"]["tags"], [ - f"{constants.DOCKER_REGISTRY}/aswflocaltesting/ci-package-otio:2019", - f"{constants.DOCKER_REGISTRY}/aswflocaltesting/ci-package-otio:{otio_version}", - f"{constants.DOCKER_REGISTRY}/aswflocaltesting/ci-package-otio:2019-0.12.1", + f"{constants.DOCKER_REGISTRY}/aswflocaltesting/ci-baseos-gl-conan:2019.1", + f"{constants.DOCKER_REGISTRY}/aswflocaltesting/ci-baseos-gl-conan:2019", ], ) self.assertEqual( - baked["target"]["ci-package-otio-2019"]["args"]["ASWF_VERSION"], - otio_version, + baked["target"]["ci-package-opentimelineio-2019"]["args"]["ASWF_VERSION"], + opentimelineio_version, ) self.assertEqual( - baked["target"]["ci-package-otio-2019"]["dockerfile"], - "packages/vfx2/Dockerfile", + baked["target"]["ci-package-opentimelineio-2019"]["dockerfile"], + "packages/common/Dockerfile", ) def test_image_base_2019_dict(self): @@ -172,7 +139,7 @@ def test_image_base_2019clang_dict(self): "ASWF_OPTIX_VERSION": "7.1.0", "ASWF_ORG": "aswflocaltesting", "ASWF_OSL_VERSION": "1.10.9", - "ASWF_OTIO_VERSION": "0.12.1", + "ASWF_OPENTIMELINEIO_VERSION": "0.12.1", "ASWF_PARTIO_VERSION": "1.10.1", "ASWF_PKG_ORG": "aswftesting", "ASWF_PTEX_VERSION": "2.1.33", @@ -266,7 +233,7 @@ def test_image_base_2019_2020_dict(self): "ASWF_OPTIX_VERSION": "7.1.0", "ASWF_ORG": "aswflocaltesting", "ASWF_OSL_VERSION": "1.10.10", - "ASWF_OTIO_VERSION": "0.12.1", + "ASWF_OPENTIMELINEIO_VERSION": "0.12.1", "ASWF_PARTIO_VERSION": "1.10.1", "ASWF_PKG_ORG": "aswftesting", "ASWF_PTEX_VERSION": "2.3.2", @@ -336,7 +303,7 @@ def test_image_base_2019_2020_dict(self): "ASWF_OPTIX_VERSION": "7.1.0", "ASWF_ORG": "aswflocaltesting", "ASWF_OSL_VERSION": "1.10.9", - "ASWF_OTIO_VERSION": "0.12.1", + "ASWF_OPENTIMELINEIO_VERSION": "0.12.1", "ASWF_PARTIO_VERSION": "1.10.1", "ASWF_PKG_ORG": "aswftesting", "ASWF_PTEX_VERSION": "2.1.33", @@ -381,32 +348,6 @@ def tearDown(self): logging.getLogger("").handlers = self._log_handlers def test_builder_cli(self): - runner = CliRunner() - result = runner.invoke( - aswfdocker.cli, - [ - "build", - "--ci-image-type", - "PACKAGE", - "--version", - "2024", - "--target", - "otio", - "--dry-run", - ], - ) - self.assertFalse(result.exception) - bake_path = os.path.join( - tempfile.gettempdir(), "docker-bake-PACKAGE-vfx2-2024.json" - ) - cmd = f"docker buildx bake -f {bake_path} --progress auto" - self.assertEqual( - result.output, - f"INFO:aswfdocker.builder:Would run: '{cmd}'\n", - ) - self.assertEqual(result.exit_code, 0) - - def test_builder_cli_conan(self): runner = CliRunner() result = runner.invoke( aswfdocker.cli, @@ -419,7 +360,6 @@ def test_builder_cli_conan(self): "--target", "openexr", "--dry-run", - "--use-conan", ], ) self.assertFalse(result.exception) @@ -455,39 +395,11 @@ def test_builder_cli_fromtag(self): ) self.assertEqual(result.exit_code, 0) - def test_builderlist_cli(self): - runner = CliRunner() - result = runner.invoke( - aswfdocker.cli, - [ - "build", - "--ci-image-type", - "PACKAGE", - "--version", - "2024", - "--version", - "2025", - "--target", - "otio", - "--dry-run", - ], - ) - self.assertFalse(result.exception) - bake_path = os.path.join( - tempfile.gettempdir(), "docker-bake-PACKAGE-vfx2-2024-2025.json" - ) - cmd = f"docker buildx bake -f {bake_path} --progress auto" - self.assertEqual( - result.output, - f"INFO:aswfdocker.builder:Would run: '{cmd}'\n", - ) - self.assertEqual(result.exit_code, 0) - def _assertEndsWith(self, cmds, expected): self.assertTrue(cmds[self._i].endswith(expected), "got: " + cmds[self._i]) self._i += 1 - def test_builderlist_cli_conan(self): + def test_builderlist_cli(self): runner = CliRunner() result = runner.invoke( aswfdocker.cli, @@ -502,7 +414,6 @@ def test_builderlist_cli_conan(self): "--target", "openexr", "--dry-run", - "--use-conan", "--build-missing", "--push", "YES", diff --git a/python/aswfdocker/tests/test_index.py b/python/aswfdocker/tests/test_index.py index 698418e1..8880ff23 100644 --- a/python/aswfdocker/tests/test_index.py +++ b/python/aswfdocker/tests/test_index.py @@ -36,6 +36,3 @@ def test_group_from_image(self): self.index.get_group_from_image(constants.ImageType.PACKAGE, "clang"), "common", ) - - def test_conan_only(self): - self.assertTrue(self.index.is_conan_only_package("gtest")) diff --git a/python/aswfdocker/tests/test_migrater.py b/python/aswfdocker/tests/test_migrater.py deleted file mode 100644 index e3f925ac..00000000 --- a/python/aswfdocker/tests/test_migrater.py +++ /dev/null @@ -1,108 +0,0 @@ -# Copyright (c) Contributors to the aswf-docker Project. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 -""" -Tests for the migrate command -""" -import unittest -import logging - -from click.testing import CliRunner - -from aswfdocker import migrater, index, constants -from aswfdocker.cli import aswfdocker - - -class TestMigrater(unittest.TestCase): - def setUp(self): - self.maxDiff = None - - def test_migrate_nofilter(self): - m = migrater.Migrater("src", "dst") - m.gather("", "") - self.assertGreater(len(m.migration_list), 10) - - def test_migrate_pkgfilter(self): - m = migrater.Migrater("src", "dst") - m.gather("otio", "") - self.assertEqual(len(m.migration_list), 8) - - def test_migrate_versionfilter(self): - m = migrater.Migrater("src", "dst") - m.gather("otio", "2019") - current_version = list( - index.Index().iter_versions(constants.ImageType.PACKAGE, "otio") - )[0] - self.assertEqual(len(m.migration_list), 1) - minfo = m.migration_list[0] - self.assertEqual(minfo.image, "ci-package-otio") - oexr_version = list( - index.Index().iter_versions(constants.ImageType.PACKAGE, "otio") - )[0] - self.assertEqual(minfo.version, oexr_version) - self.assertEqual( - minfo.source, - f"{constants.DOCKER_REGISTRY}/src/ci-package-otio:{current_version}", - ) - self.assertEqual( - minfo.destination, - f"{constants.DOCKER_REGISTRY}/dst/ci-package-otio:{current_version}", - ) - - m.migrate(dry_run=True) - reg = constants.DOCKER_REGISTRY - self.assertEqual( - m.cmds, - [ - f"docker pull {reg}/src/ci-package-otio:{current_version}", - f"docker tag {reg}/src/ci-package-otio:{current_version} " - f"{reg}/dst/ci-package-otio:{current_version}", - f"docker push {reg}/dst/ci-package-otio:{current_version}", - f"docker tag {reg}/dst/ci-package-otio:{current_version} " - f"{reg}/dst/ci-package-otio:2019", - f"docker push {reg}/dst/ci-package-otio:2019", - ], - ) - - -class TestMigraterCli(unittest.TestCase): - def setUp(self): - self._log_handlers = logging.getLogger("").handlers - logging.getLogger("").handlers = [] - - def tearDown(self): - logging.getLogger("").handlers = self._log_handlers - - def test_migrate_cli(self): - runner = CliRunner() - result = runner.invoke( - aswfdocker.cli, - [ - "migrate", - "--from", - "src", - "--to", - "dst", - "--package", - "otio", - "--version", - "2019", - "--dry-run", - ], - input="y\n", - ) - self.assertEqual(result.exit_code, 0) - current_version = list( - index.Index().iter_versions(constants.ImageType.PACKAGE, "otio") - )[0] - reg = constants.DOCKER_REGISTRY - self.assertEqual( - result.output, - f"Are you sure you want to migrate the following 1 packages?\n" - f"{reg}/src/ci-package-otio:{current_version} -> " - f"{reg}/dst/ci-package-otio:{current_version}\n" - f" [y/N]: y\n" - f"INFO:aswfdocker.migrater:Migrating " - f"{reg}/src/ci-package-otio:{current_version} -> " - f"{reg}/dst/ci-package-otio:{current_version}\n" - f"Migration done.\n", - ) diff --git a/python/aswfdocker/tests/test_releaser.py b/python/aswfdocker/tests/test_releaser.py index 5e23a3eb..0f5e00b5 100644 --- a/python/aswfdocker/tests/test_releaser.py +++ b/python/aswfdocker/tests/test_releaser.py @@ -66,7 +66,7 @@ def setUp(self): def tearDown(self): logging.getLogger("").handlers = self._log_handlers - def test_migrate_cli(self): + def test_release_cli(self): current_version = list( index.Index().iter_versions(constants.ImageType.PACKAGE, "boost") )[1] diff --git a/python/aswfdocker/tests/test_utils.py b/python/aswfdocker/tests/test_utils.py index b48584a9..2ee4a043 100644 --- a/python/aswfdocker/tests/test_utils.py +++ b/python/aswfdocker/tests/test_utils.py @@ -127,27 +127,6 @@ def test_cli_getdockerpush(self): self.assertEqual(result.exit_code, 0) self.assertEqual(result.output, "false") - def test_cli_download(self): - runner = CliRunner() - with tempfile.TemporaryDirectory() as tmpdirname: - result = runner.invoke( - aswfdocker.cli, - [ - "--repo-root", - tmpdirname, - "download", - "--package", - "tbb", - "--version", - "2019", - ], - catch_exceptions=False, - ) - self.assertEqual(result.exit_code, 0) - path = os.path.join(tmpdirname, "packages", "2019", "tbb.tar.gz") - self.assertEqual(result.output, path) - self.assertTrue(os.path.exists(result.output)) - def test_cli_packages(self): runner = CliRunner() result = runner.invoke(aswfdocker.cli, ["packages"], catch_exceptions=False) diff --git a/python/aswfdocker/utils.py b/python/aswfdocker/utils.py index a7350ea0..aa9c5a71 100644 --- a/python/aswfdocker/utils.py +++ b/python/aswfdocker/utils.py @@ -64,22 +64,6 @@ def get_major_version(version: str) -> str: return version.split(".")[0] -def download_package(repo_root: str, docker_org: str, package: str, version: str): - folder = os.path.join(repo_root, "packages", version) - os.makedirs(folder) - subprocess.check_call( - f"docker pull {docker_org}/ci-package-{package}:{version}", shell=True - ) - container_id = subprocess.check_output( - f"docker create {docker_org}/ci-package-{package}:{version} null", shell=True - ).decode("utf-8") - output = os.path.join(folder, package + ".tar") - subprocess.check_call(f"docker export --output={output} {container_id}", shell=True) - subprocess.check_call(f"docker rm {container_id}", shell=True) - subprocess.check_call(f"gzip -9 {output}", shell=True) - return output + ".gz" - - def get_image_name(image_type: constants.ImageType, image: str): if image_type == constants.ImageType.PACKAGE: return f"ci-package-{image}" diff --git a/scripts/vfx/build_otio.sh b/scripts/vfx/build_otio.sh index 1b41f83e..520e0ec9 100755 --- a/scripts/vfx/build_otio.sh +++ b/scripts/vfx/build_otio.sh @@ -4,14 +4,342 @@ set -ex -git clone https://github.com/AcademySoftwareFoundation/OpenTimelineIO.git -cd OpenTimelineIO +if [[ ! -f "$DOWNLOADS_DIR/OpenTimelineIO-${ASWF_OPENTIMELINEIO_VERSION}.tar.gz" ]]; then + curl --location "https://github.com/AcademySoftwareFoundation/OpenTimelineIO/archive/refs/tags/v${ASWF_OPENTIMELINEIO_VERSION}.tar.gz" -o "$DOWNLOADS_DIR/OpenTimelineIO-${ASWF_OPENTIMELINEIO_VERSION}.tar.gz" +fi + +tar -zxf "$DOWNLOADS_DIR/OpenTimelineIO-${ASWF_OPENTIMELINEIO_VERSION}.tar.gz" +cd "OpenTimelineIO-${ASWF_OPENTIMELINEIO_VERSION}" + +if [[ $ASWF_OPENTIMELINEIO_VERSION == 0.17.0 ]]; then + +cat << 'EOF' | patch -p0 +diff --git CMakeLists.txt CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- CMakeLists.txt ++++ CMakeLists.txt +@@ -34,6 +34,8 @@ + option(OTIO_INSTALL_CONTRIB "Install the opentimelineio_contrib Python package" ON) + set(OTIO_IMATH_LIBS "" CACHE STRING "Imath library overrides to use instead of src/deps or find_package") + option(OTIO_FIND_IMATH "Find Imath using find_package, ignored if OTIO_IMATH_LIBS is set" OFF) ++option(OTIO_FIND_PYBIND11 "Find pybind11 using find_package" OFF) ++option(OTIO_FIND_RAPIDJSON "Find RapidJSON using find_package" OFF) + set(OTIO_PYTHON_INSTALL_DIR "" CACHE STRING "Python installation dir (such as the site-packages dir)") + + # Build options +@@ -244,6 +246,28 @@ + set(USE_DEPS_IMATH ON) + endif() + ++#----- pybind11 ++if(OTIO_FIND_PYBIND11) ++ find_package(pybind11 REQUIRED) ++ if (pybind11_FOUND) ++ message(STATUS "Found pybind11 at ${pybind11_CONFIG}") ++ endif() ++else() ++ message(STATUS "Using src/deps/pybind11 by default") ++endif() ++ ++ ++#----- RapidJSON ++ ++if(OTIO_FIND_RAPIDJSON) ++ find_package(RapidJSON CONFIG REQUIRED) ++ if (RapidJSON_FOUND) ++ message(STATUS "Found RapidJSON at ${RapidJSON_CONFIG}") ++ endif() ++else() ++ message(STATUS "Using src/deps/rapidjson by default") ++endif() ++ + # set up the internally hosted dependencies + add_subdirectory(src/deps) + +diff --git src/deps/CMakeLists.txt src/deps/CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- src/deps/CMakeLists.txt ++++ src/deps/CMakeLists.txt +@@ -4,9 +4,21 @@ + #----- Other dependencies + + # detect if the submodules haven't been updated +-set(DEPS_SUBMODULES pybind11 rapidjson) ++if(NOT OTIO_FIND_PYBIND11 AND OTIO_PYTHON_INSTALL) ++ # pybind11 only needed when building Python bindings ++ set(DEPS_SUBMODULES ${DEPS_SUBMODULES} pybind11) ++endif() ++ ++if(USE_DEPS_IMATH) ++ set(DEPS_SUBMODULES ${DEPS_SUBMODULES} Imath) ++endif() ++ ++if(NOT OTIO_FIND_RAPIDJSON) ++ set(DEPS_SUBMODULES ${DEPS_SUBMODULES} rapidjson) ++endif() ++ + foreach(submodule IN LISTS DEPS_SUBMODULES) +- file(GLOB SUBMOD_CONTENTS ${submodule}) ++ file(GLOB SUBMOD_CONTENTS "${submodule}/*") + list(LENGTH SUBMOD_CONTENTS SUBMOD_CONTENT_LEN) + if(SUBMOD_CONTENT_LEN EQUAL 0) + message( +@@ -16,10 +28,13 @@ + endif() + endforeach() + +-if(OTIO_PYTHON_INSTALL) ++if(NOT OTIO_FIND_PYBIND11 AND OTIO_PYTHON_INSTALL) ++ # pybind11 only needed when building Python bindings + add_subdirectory(pybind11) + endif() + ++# Don't try to build rapidjson, it won't, and since it's header-only, we don't need to built it. ++ + if (USE_DEPS_IMATH) + # preserve BUILD_SHARED_LIBS options for this project, but set it off for Imath + option(BUILD_SHARED_LIBS "Build shared libraries" ON) +diff --git src/opentime/CMakeLists.txt src/opentime/CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- src/opentime/CMakeLists.txt ++++ src/opentime/CMakeLists.txt +@@ -49,7 +49,7 @@ + RUNTIME DESTINATION "${OTIO_RESOLVED_CXX_DYLIB_INSTALL_DIR}") -if [[ "$ASWF_OTIO_VERSION" != "latest" ]]; then - git checkout "tags/v${ASWF_OTIO_VERSION}" -b "v${ASWF_OTIO_VERSION}" + install(EXPORT OpenTimeTargets +- DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentime" ++ DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentime" + NAMESPACE OTIO:: ) + + include(CMakePackageConfigHelpers) +@@ -57,7 +57,7 @@ + ${CMAKE_CURRENT_SOURCE_DIR}/OpenTimeConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimeConfig.cmake + INSTALL_DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentime ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentime + NO_SET_AND_CHECK_MACRO + NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) +@@ -66,7 +66,7 @@ + FILES + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimeConfig.cmake + DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentime ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentime + ) + endif() + +diff --git src/opentimelineio/CMakeLists.txt src/opentimelineio/CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- src/opentimelineio/CMakeLists.txt ++++ src/opentimelineio/CMakeLists.txt +@@ -81,9 +81,16 @@ + PRIVATE "${IMATH_INCLUDES}" + "${PROJECT_SOURCE_DIR}/src" + "${PROJECT_SOURCE_DIR}/src/deps" +- "${PROJECT_SOURCE_DIR}/src/deps/rapidjson/include" + "${IMATH_INCLUDES}") + ++if(OTIO_FIND_RAPIDJSON) ++ target_include_directories(opentimelineio ++ PRIVATE "${RapidJSON_INCLUDE_DIRS}") ++else() ++ target_include_directories(opentimelineio ++ PRIVATE "${PROJECT_SOURCE_DIR}/src/deps/rapidjson/include") ++endif() ++ + target_link_libraries(opentimelineio + PUBLIC opentime ${OTIO_IMATH_TARGETS}) + +@@ -124,7 +131,7 @@ + RUNTIME DESTINATION "${OTIO_RESOLVED_CXX_DYLIB_INSTALL_DIR}") + + install(EXPORT OpenTimelineIOTargets +- DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentimelineio" ++ DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentimelineio" + NAMESPACE OTIO:: ) + + include(CMakePackageConfigHelpers) +@@ -132,7 +139,7 @@ + ${CMAKE_CURRENT_SOURCE_DIR}/OpenTimelineIOConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimelineIOConfig.cmake + INSTALL_DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentimelineio ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentimelineio + NO_SET_AND_CHECK_MACRO + NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) +@@ -141,6 +148,6 @@ + FILES + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimelineIOConfig.cmake + DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentimelineio ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentimelineio + ) + endif() + +EOF fi -pip3 install --prefix="${ASWF_INSTALL_PREFIX}" . +if [[ $ASWF_OPENTIMELINEIO_VERSION == 0.18.1 ]]; then + +cat << 'EOF' | patch -p0 +diff --git CMakeLists.txt CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- CMakeLists.txt ++++ CMakeLists.txt +@@ -32,6 +32,7 @@ + option(OTIO_INSTALL_PYTHON_MODULES "Install OTIO pure Python modules/files" ON) + option(OTIO_INSTALL_COMMANDLINE_TOOLS "Install the OTIO command line tools" ON) + option(OTIO_FIND_IMATH "Find Imath using find_package" OFF) ++option(OTIO_FIND_PYBIND11 "Find pybind11 using find_package" OFF) + option(OTIO_FIND_RAPIDJSON "Find RapidJSON using find_package" OFF) + set(OTIO_PYTHON_INSTALL_DIR "" CACHE STRING "Python installation dir (such as the site-packages dir)") + +@@ -252,6 +253,17 @@ + include_directories("${PROJECT_SOURCE_DIR}/src/deps/Imath/src") + endif() + ++#----- pybind11 ++if(OTIO_FIND_PYBIND11) ++ find_package(pybind11 REQUIRED) ++ if (pybind11_FOUND) ++ message(STATUS "Found pybind11 at ${pybind11_CONFIG}") ++ endif() ++else() ++ message(STATUS "Using src/deps/pybind11 by default") ++endif() ++ ++ + #----- RapidJSON + + if(OTIO_FIND_RAPIDJSON) +diff --git src/deps/CMakeLists.txt src/deps/CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- src/deps/CMakeLists.txt ++++ src/deps/CMakeLists.txt +@@ -4,14 +4,21 @@ + #----- Other dependencies + + # detect if the submodules haven't been updated +-set(DEPS_SUBMODULES pybind11) ++if(NOT OTIO_FIND_PYBIND11 AND OTIO_PYTHON_INSTALL) ++ # pybind11 only needed when building Python bindings ++ set(DEPS_SUBMODULES ${DEPS_SUBMODULES} pybind11) ++endif() ++ ++if(NOT OTIO_FIND_RAPIDJSON) ++ set(DEPS_SUBMODULES ${DEPS_SUBMODULES} rapidjson) ++endif() + + if(NOT OTIO_FIND_RAPIDJSON) + set(DEPS_SUBMODULES ${DEPS_SUBMODULES} rapidjson) + endif() + + foreach(submodule IN LISTS DEPS_SUBMODULES) +- file(GLOB SUBMOD_CONTENTS ${submodule}) ++ file(GLOB SUBMOD_CONTENTS "${submodule}/*") + list(LENGTH SUBMOD_CONTENTS SUBMOD_CONTENT_LEN) + if(SUBMOD_CONTENT_LEN EQUAL 0) + message( +@@ -21,10 +28,13 @@ + endif() + endforeach() + +-if(OTIO_PYTHON_INSTALL) ++if(NOT OTIO_FIND_PYBIND11 AND OTIO_PYTHON_INSTALL) ++ # pybind11 only needed when building Python bindings + add_subdirectory(pybind11) + endif() + ++# Don't try to build rapidjson, it won't, and since it's header-only, we don't need to built it. ++ + if(NOT OTIO_FIND_IMATH) + # preserve BUILD_SHARED_LIBS options for this project, but set it off for Imath + option(BUILD_SHARED_LIBS "Build shared libraries" ON) +diff --git src/opentime/CMakeLists.txt src/opentime/CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- src/opentime/CMakeLists.txt ++++ src/opentime/CMakeLists.txt +@@ -73,7 +73,7 @@ + RUNTIME DESTINATION "${OTIO_RESOLVED_CXX_DYLIB_INSTALL_DIR}") + + install(EXPORT OpenTimeTargets +- DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentime" ++ DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentime" + NAMESPACE OTIO:: ) + + include(CMakePackageConfigHelpers) +@@ -81,7 +81,7 @@ + ${CMAKE_CURRENT_SOURCE_DIR}/OpenTimeConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimeConfig.cmake + INSTALL_DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentime ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentime + NO_SET_AND_CHECK_MACRO + NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) +@@ -90,7 +90,7 @@ + FILES + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimeConfig.cmake + DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentime ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentime + ) + + install( +diff --git src/opentimelineio/CMakeLists.txt src/opentimelineio/CMakeLists.txt +index d99dd79ac..bfda2778a 100644 +--- src/opentimelineio/CMakeLists.txt ++++ src/opentimelineio/CMakeLists.txt +@@ -151,7 +151,7 @@ + RUNTIME DESTINATION "${OTIO_RESOLVED_CXX_DYLIB_INSTALL_DIR}") + + install(EXPORT OpenTimelineIOTargets +- DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentimelineio" ++ DESTINATION "${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentimelineio" + NAMESPACE OTIO:: ) + + include(CMakePackageConfigHelpers) +@@ -159,7 +159,7 @@ + ${CMAKE_CURRENT_SOURCE_DIR}/OpenTimelineIOConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimelineIOConfig.cmake + INSTALL_DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentimelineio ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentimelineio + NO_SET_AND_CHECK_MACRO + NO_CHECK_REQUIRED_COMPONENTS_MACRO + ) +@@ -168,7 +168,7 @@ + FILES + ${CMAKE_CURRENT_BINARY_DIR}/OpenTimelineIOConfig.cmake + DESTINATION +- ${OTIO_RESOLVED_CXX_INSTALL_DIR}/share/opentimelineio ++ ${OTIO_RESOLVED_CXX_INSTALL_DIR}/lib/cmake/opentimelineio + ) + + install( +EOF +fi + +mkdir build +cd build + +cmake -DOTIO_CXX_INSTALL=ON \ + -DOTIO_PYTHON_INSTALL=ON \ + -DOTIO_DEPENDENCIES_INSTALL=OFF \ + -DOTIO_INSTALL_PYTHON_MODULES=ON \ + -DOTIO_INSTALL_COMMANDLINE_TOOLS=ON \ + -DOTIO_FIND_IMATH=ON \ + -DOTIO_FIND_PYBIND11=ON \ + -DOTIO_FIND_RAPIDJSON=ON \ + -DOTIO_AUTOMATIC_SUBMODULES=OFF \ + ../. +cmake --build . -j$(nproc) +cmake --install . + +cd ../.. +rm -rf OpenTimelineIO-${ASWF_OPENTIMELINEIO_VERSION} + -cd .. -rm -rf OpenTimelineIO diff --git a/uv.lock b/uv.lock index 2e0ab256..22ff25cb 100644 --- a/uv.lock +++ b/uv.lock @@ -1,11 +1,10 @@ version = 1 revision = 3 -requires-python = ">=3.9" +requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.12'", "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", - "python_full_version < '3.10'", + "python_full_version < '3.11'", ] [[package]] @@ -52,20 +51,16 @@ dependencies = [ { name = "typing-extensions" }, { name = "urllib3" }, { name = "wrapt" }, - { name = "zipp", marker = "python_full_version < '3.10'" }, ] [package.optional-dependencies] dev = [ { name = "atomicwrites", marker = "sys_platform == 'win32'" }, - { name = "black", version = "25.11.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "black", version = "26.3.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "black" }, { name = "mypy" }, - { name = "pre-commit", version = "4.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pre-commit", version = "4.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pre-commit" }, { name = "pylint" }, - { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pytest", version = "9.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pytest" }, { name = "pytest-cov" }, { name = "pytest-pylint" }, { name = "twine" }, @@ -82,7 +77,7 @@ requires-dist = [ { name = "bottle", specifier = "==0.12.25" }, { name = "certifi", specifier = "==2024.7.4" }, { name = "charset-normalizer", specifier = "==3.3.2" }, - { name = "click", specifier = "==8.1.7" }, + { name = "click", specifier = "==8.3.1" }, { name = "colorama", specifier = "==0.4.6" }, { name = "conan", specifier = "==2.26.2" }, { name = "deprecated", specifier = "==1.2.14" }, @@ -136,70 +131,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl", hash = "sha256:77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", size = 30181, upload-time = "2024-05-28T17:01:53.112Z" }, ] -[[package]] -name = "black" -version = "25.11.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "click", marker = "python_full_version < '3.10'" }, - { name = "mypy-extensions", marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "pathspec", marker = "python_full_version < '3.10'" }, - { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pytokens", marker = "python_full_version < '3.10'" }, - { name = "tomli", marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8c/ad/33adf4708633d047950ff2dfdea2e215d84ac50ef95aff14a614e4b6e9b2/black-25.11.0.tar.gz", hash = "sha256:9a323ac32f5dc75ce7470501b887250be5005a01602e931a15e45593f70f6e08", size = 655669, upload-time = "2025-11-10T01:53:50.558Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/d2/6caccbc96f9311e8ec3378c296d4f4809429c43a6cd2394e3c390e86816d/black-25.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ec311e22458eec32a807f029b2646f661e6859c3f61bc6d9ffb67958779f392e", size = 1743501, upload-time = "2025-11-10T01:59:06.202Z" }, - { url = "https://files.pythonhosted.org/packages/69/35/b986d57828b3f3dccbf922e2864223197ba32e74c5004264b1c62bc9f04d/black-25.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1032639c90208c15711334d681de2e24821af0575573db2810b0763bcd62e0f0", size = 1597308, upload-time = "2025-11-10T01:57:58.633Z" }, - { url = "https://files.pythonhosted.org/packages/39/8e/8b58ef4b37073f52b64a7b2dd8c9a96c84f45d6f47d878d0aa557e9a2d35/black-25.11.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0c0f7c461df55cf32929b002335883946a4893d759f2df343389c4396f3b6b37", size = 1656194, upload-time = "2025-11-10T01:57:10.909Z" }, - { url = "https://files.pythonhosted.org/packages/8d/30/9c2267a7955ecc545306534ab88923769a979ac20a27cf618d370091e5dd/black-25.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:f9786c24d8e9bd5f20dc7a7f0cdd742644656987f6ea6947629306f937726c03", size = 1347996, upload-time = "2025-11-10T01:57:22.391Z" }, - { url = "https://files.pythonhosted.org/packages/c4/62/d304786b75ab0c530b833a89ce7d997924579fb7484ecd9266394903e394/black-25.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:895571922a35434a9d8ca67ef926da6bc9ad464522a5fe0db99b394ef1c0675a", size = 1727891, upload-time = "2025-11-10T02:01:40.507Z" }, - { url = "https://files.pythonhosted.org/packages/82/5d/ffe8a006aa522c9e3f430e7b93568a7b2163f4b3f16e8feb6d8c3552761a/black-25.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cb4f4b65d717062191bdec8e4a442539a8ea065e6af1c4f4d36f0cdb5f71e170", size = 1581875, upload-time = "2025-11-10T01:57:51.192Z" }, - { url = "https://files.pythonhosted.org/packages/cb/c8/7c8bda3108d0bb57387ac41b4abb5c08782b26da9f9c4421ef6694dac01a/black-25.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d81a44cbc7e4f73a9d6ae449ec2317ad81512d1e7dce7d57f6333fd6259737bc", size = 1642716, upload-time = "2025-11-10T01:56:51.589Z" }, - { url = "https://files.pythonhosted.org/packages/34/b9/f17dea34eecb7cc2609a89627d480fb6caea7b86190708eaa7eb15ed25e7/black-25.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:7eebd4744dfe92ef1ee349dc532defbf012a88b087bb7ddd688ff59a447b080e", size = 1352904, upload-time = "2025-11-10T01:59:26.252Z" }, - { url = "https://files.pythonhosted.org/packages/7f/12/5c35e600b515f35ffd737da7febdb2ab66bb8c24d88560d5e3ef3d28c3fd/black-25.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:80e7486ad3535636657aa180ad32a7d67d7c273a80e12f1b4bfa0823d54e8fac", size = 1772831, upload-time = "2025-11-10T02:03:47Z" }, - { url = "https://files.pythonhosted.org/packages/1a/75/b3896bec5a2bb9ed2f989a970ea40e7062f8936f95425879bbe162746fe5/black-25.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6cced12b747c4c76bc09b4db057c319d8545307266f41aaee665540bc0e04e96", size = 1608520, upload-time = "2025-11-10T01:58:46.895Z" }, - { url = "https://files.pythonhosted.org/packages/f3/b5/2bfc18330eddbcfb5aab8d2d720663cd410f51b2ed01375f5be3751595b0/black-25.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cb2d54a39e0ef021d6c5eef442e10fd71fcb491be6413d083a320ee768329dd", size = 1682719, upload-time = "2025-11-10T01:56:55.24Z" }, - { url = "https://files.pythonhosted.org/packages/96/fb/f7dc2793a22cdf74a72114b5ed77fe3349a2e09ef34565857a2f917abdf2/black-25.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae263af2f496940438e5be1a0c1020e13b09154f3af4df0835ea7f9fe7bfa409", size = 1362684, upload-time = "2025-11-10T01:57:07.639Z" }, - { url = "https://files.pythonhosted.org/packages/ad/47/3378d6a2ddefe18553d1115e36aea98f4a90de53b6a3017ed861ba1bd3bc/black-25.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0a1d40348b6621cc20d3d7530a5b8d67e9714906dfd7346338249ad9c6cedf2b", size = 1772446, upload-time = "2025-11-10T02:02:16.181Z" }, - { url = "https://files.pythonhosted.org/packages/ba/4b/0f00bfb3d1f7e05e25bfc7c363f54dc523bb6ba502f98f4ad3acf01ab2e4/black-25.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:51c65d7d60bb25429ea2bf0731c32b2a2442eb4bd3b2afcb47830f0b13e58bfd", size = 1607983, upload-time = "2025-11-10T02:02:52.502Z" }, - { url = "https://files.pythonhosted.org/packages/99/fe/49b0768f8c9ae57eb74cc10a1f87b4c70453551d8ad498959721cc345cb7/black-25.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:936c4dd07669269f40b497440159a221ee435e3fddcf668e0c05244a9be71993", size = 1682481, upload-time = "2025-11-10T01:57:12.35Z" }, - { url = "https://files.pythonhosted.org/packages/55/17/7e10ff1267bfa950cc16f0a411d457cdff79678fbb77a6c73b73a5317904/black-25.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:f42c0ea7f59994490f4dccd64e6b2dd49ac57c7c84f38b8faab50f8759db245c", size = 1363869, upload-time = "2025-11-10T01:58:24.608Z" }, - { url = "https://files.pythonhosted.org/packages/67/c0/cc865ce594d09e4cd4dfca5e11994ebb51604328489f3ca3ae7bb38a7db5/black-25.11.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:35690a383f22dd3e468c85dc4b915217f87667ad9cce781d7b42678ce63c4170", size = 1771358, upload-time = "2025-11-10T02:03:33.331Z" }, - { url = "https://files.pythonhosted.org/packages/37/77/4297114d9e2fd2fc8ab0ab87192643cd49409eb059e2940391e7d2340e57/black-25.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:dae49ef7369c6caa1a1833fd5efb7c3024bb7e4499bf64833f65ad27791b1545", size = 1612902, upload-time = "2025-11-10T01:59:33.382Z" }, - { url = "https://files.pythonhosted.org/packages/de/63/d45ef97ada84111e330b2b2d45e1dd163e90bd116f00ac55927fb6bf8adb/black-25.11.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bd4a22a0b37401c8e492e994bce79e614f91b14d9ea911f44f36e262195fdda", size = 1680571, upload-time = "2025-11-10T01:57:04.239Z" }, - { url = "https://files.pythonhosted.org/packages/ff/4b/5604710d61cdff613584028b4cb4607e56e148801ed9b38ee7970799dab6/black-25.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:aa211411e94fdf86519996b7f5f05e71ba34835d8f0c0f03c00a26271da02664", size = 1382599, upload-time = "2025-11-10T01:57:57.427Z" }, - { url = "https://files.pythonhosted.org/packages/d5/9a/5b2c0e3215fe748fcf515c2dd34658973a1210bf610e24de5ba887e4f1c8/black-25.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3bb5ce32daa9ff0605d73b6f19da0b0e6c1f8f2d75594db539fdfed722f2b06", size = 1743063, upload-time = "2025-11-10T02:02:43.175Z" }, - { url = "https://files.pythonhosted.org/packages/a1/20/245164c6efc27333409c62ba54dcbfbe866c6d1957c9a6c0647786e950da/black-25.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9815ccee1e55717fe9a4b924cae1646ef7f54e0f990da39a34fc7b264fcf80a2", size = 1596867, upload-time = "2025-11-10T02:00:17.157Z" }, - { url = "https://files.pythonhosted.org/packages/ca/6f/1a3859a7da205f3d50cf3a8bec6bdc551a91c33ae77a045bb24c1f46ab54/black-25.11.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:92285c37b93a1698dcbc34581867b480f1ba3a7b92acf1fe0467b04d7a4da0dc", size = 1655678, upload-time = "2025-11-10T01:57:09.028Z" }, - { url = "https://files.pythonhosted.org/packages/56/1a/6dec1aeb7be90753d4fcc273e69bc18bfd34b353223ed191da33f7519410/black-25.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:43945853a31099c7c0ff8dface53b4de56c41294fa6783c0441a8b1d9bf668bc", size = 1347452, upload-time = "2025-11-10T01:57:01.871Z" }, - { url = "https://files.pythonhosted.org/packages/00/5d/aed32636ed30a6e7f9efd6ad14e2a0b0d687ae7c8c7ec4e4a557174b895c/black-25.11.0-py3-none-any.whl", hash = "sha256:e3f562da087791e96cefcd9dda058380a442ab322a02e222add53736451f604b", size = 204918, upload-time = "2025-11-10T01:53:48.917Z" }, -] - [[package]] name = "black" version = "26.3.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] dependencies = [ - { name = "click", marker = "python_full_version >= '3.10'" }, - { name = "mypy-extensions", marker = "python_full_version >= '3.10'" }, - { name = "packaging", marker = "python_full_version >= '3.10'" }, - { name = "pathspec", marker = "python_full_version >= '3.10'" }, - { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "pytokens", marker = "python_full_version >= '3.10'" }, - { name = "tomli", marker = "python_full_version == '3.10.*'" }, - { name = "typing-extensions", marker = "python_full_version == '3.10.*'" }, + { name = "click" }, + { name = "mypy-extensions" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "platformdirs" }, + { name = "pytokens" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e1/c5/61175d618685d42b005847464b8fb4743a67b1b8fdb75e50e5a96c31a27a/black-26.3.1.tar.gz", hash = "sha256:2c50f5063a9641c7eed7795014ba37b0f5fa227f3d408b968936e24bc0566b07", size = 666155, upload-time = "2026-03-12T03:36:03.593Z" } wheels = [ @@ -254,8 +198,7 @@ name = "cffi" version = "2.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pycparser", version = "2.23", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and implementation_name != 'PyPy'" }, - { name = "pycparser", version = "3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' and implementation_name != 'PyPy'" }, + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } wheels = [ @@ -330,41 +273,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, - { url = "https://files.pythonhosted.org/packages/c0/cc/08ed5a43f2996a16b462f64a7055c6e962803534924b9b2f1371d8c00b7b/cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf", size = 184288, upload-time = "2025-09-08T23:23:48.404Z" }, - { url = "https://files.pythonhosted.org/packages/3d/de/38d9726324e127f727b4ecc376bc85e505bfe61ef130eaf3f290c6847dd4/cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7", size = 180509, upload-time = "2025-09-08T23:23:49.73Z" }, - { url = "https://files.pythonhosted.org/packages/9b/13/c92e36358fbcc39cf0962e83223c9522154ee8630e1df7c0b3a39a8124e2/cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c", size = 208813, upload-time = "2025-09-08T23:23:51.263Z" }, - { url = "https://files.pythonhosted.org/packages/15/12/a7a79bd0df4c3bff744b2d7e52cc1b68d5e7e427b384252c42366dc1ecbc/cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165", size = 216498, upload-time = "2025-09-08T23:23:52.494Z" }, - { url = "https://files.pythonhosted.org/packages/a3/ad/5c51c1c7600bdd7ed9a24a203ec255dccdd0ebf4527f7b922a0bde2fb6ed/cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534", size = 203243, upload-time = "2025-09-08T23:23:53.836Z" }, - { url = "https://files.pythonhosted.org/packages/32/f2/81b63e288295928739d715d00952c8c6034cb6c6a516b17d37e0c8be5600/cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f", size = 203158, upload-time = "2025-09-08T23:23:55.169Z" }, - { url = "https://files.pythonhosted.org/packages/1f/74/cc4096ce66f5939042ae094e2e96f53426a979864aa1f96a621ad128be27/cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63", size = 216548, upload-time = "2025-09-08T23:23:56.506Z" }, - { url = "https://files.pythonhosted.org/packages/e8/be/f6424d1dc46b1091ffcc8964fa7c0ab0cd36839dd2761b49c90481a6ba1b/cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2", size = 218897, upload-time = "2025-09-08T23:23:57.825Z" }, - { url = "https://files.pythonhosted.org/packages/f7/e0/dda537c2309817edf60109e39265f24f24aa7f050767e22c98c53fe7f48b/cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65", size = 211249, upload-time = "2025-09-08T23:23:59.139Z" }, - { url = "https://files.pythonhosted.org/packages/2b/e7/7c769804eb75e4c4b35e658dba01de1640a351a9653c3d49ca89d16ccc91/cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322", size = 218041, upload-time = "2025-09-08T23:24:00.496Z" }, - { url = "https://files.pythonhosted.org/packages/aa/d9/6218d78f920dcd7507fc16a766b5ef8f3b913cc7aa938e7fc80b9978d089/cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a", size = 172138, upload-time = "2025-09-08T23:24:01.7Z" }, - { url = "https://files.pythonhosted.org/packages/54/8f/a1e836f82d8e32a97e6b29cc8f641779181ac7363734f12df27db803ebda/cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9", size = 182794, upload-time = "2025-09-08T23:24:02.943Z" }, -] - -[[package]] -name = "cfgv" -version = "3.4.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload-time = "2023-08-12T20:38:17.776Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload-time = "2023-08-12T20:38:16.269Z" }, ] [[package]] name = "cfgv" version = "3.5.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, @@ -421,34 +335,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5b/ae/ce2c12fcac59cb3860b2e2d76dc405253a4475436b1861d95fe75bdea520/charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", size = 142167, upload-time = "2023-11-01T04:03:41.491Z" }, { url = "https://files.pythonhosted.org/packages/ed/3a/a448bf035dce5da359daf9ae8a16b8a39623cc395a2ffb1620aa1bce62b0/charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", size = 93041, upload-time = "2023-11-01T04:03:42.836Z" }, { url = "https://files.pythonhosted.org/packages/b6/7c/8debebb4f90174074b827c63242c23851bdf00a532489fba57fef3416e40/charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", size = 100397, upload-time = "2023-11-01T04:03:44.467Z" }, - { url = "https://files.pythonhosted.org/packages/f7/9d/bcf4a449a438ed6f19790eee543a86a740c77508fbc5ddab210ab3ba3a9a/charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", size = 194198, upload-time = "2023-11-01T04:04:32.328Z" }, - { url = "https://files.pythonhosted.org/packages/66/fe/c7d3da40a66a6bf2920cce0f436fa1f62ee28aaf92f412f0bf3b84c8ad6c/charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", size = 122494, upload-time = "2023-11-01T04:04:33.993Z" }, - { url = "https://files.pythonhosted.org/packages/2a/9d/a6d15bd1e3e2914af5955c8eb15f4071997e7078419328fee93dfd497eb7/charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", size = 120393, upload-time = "2023-11-01T04:04:35.533Z" }, - { url = "https://files.pythonhosted.org/packages/3d/85/5b7416b349609d20611a64718bed383b9251b5a601044550f0c8983b8900/charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", size = 138331, upload-time = "2023-11-01T04:04:37.199Z" }, - { url = "https://files.pythonhosted.org/packages/79/66/8946baa705c588521afe10b2d7967300e49380ded089a62d38537264aece/charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", size = 148097, upload-time = "2023-11-01T04:04:39.217Z" }, - { url = "https://files.pythonhosted.org/packages/44/80/b339237b4ce635b4af1c73742459eee5f97201bd92b2371c53e11958392e/charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", size = 140711, upload-time = "2023-11-01T04:04:40.964Z" }, - { url = "https://files.pythonhosted.org/packages/98/69/5d8751b4b670d623aa7a47bef061d69c279e9f922f6705147983aa76c3ce/charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", size = 142251, upload-time = "2023-11-01T04:04:42.893Z" }, - { url = "https://files.pythonhosted.org/packages/1f/8d/33c860a7032da5b93382cbe2873261f81467e7b37f4ed91e25fed62fd49b/charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", size = 144636, upload-time = "2023-11-01T04:04:44.693Z" }, - { url = "https://files.pythonhosted.org/packages/c2/65/52aaf47b3dd616c11a19b1052ce7fa6321250a7a0b975f48d8c366733b9f/charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", size = 139514, upload-time = "2023-11-01T04:04:46.388Z" }, - { url = "https://files.pythonhosted.org/packages/51/fd/0ee5b1c2860bb3c60236d05b6e4ac240cf702b67471138571dad91bcfed8/charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", size = 145528, upload-time = "2023-11-01T04:04:47.893Z" }, - { url = "https://files.pythonhosted.org/packages/e1/9c/60729bf15dc82e3aaf5f71e81686e42e50715a1399770bcde1a9e43d09db/charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", size = 149804, upload-time = "2023-11-01T04:04:49.979Z" }, - { url = "https://files.pythonhosted.org/packages/53/cd/aa4b8a4d82eeceb872f83237b2d27e43e637cac9ffaef19a1321c3bafb67/charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", size = 141708, upload-time = "2023-11-01T04:04:51.846Z" }, - { url = "https://files.pythonhosted.org/packages/54/7f/cad0b328759630814fcf9d804bfabaf47776816ad4ef2e9938b7e1123d04/charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561", size = 142708, upload-time = "2023-11-01T04:04:53.252Z" }, - { url = "https://files.pythonhosted.org/packages/c1/9d/254a2f1bcb0ce9acad838e94ed05ba71a7cb1e27affaa4d9e1ca3958cdb6/charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", size = 92830, upload-time = "2023-11-01T04:04:54.827Z" }, - { url = "https://files.pythonhosted.org/packages/2f/0e/d7303ccae9735ff8ff01e36705ad6233ad2002962e8668a970fc000c5e1b/charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", size = 100376, upload-time = "2023-11-01T04:04:56.588Z" }, { url = "https://files.pythonhosted.org/packages/28/76/e6222113b83e3622caa4bb41032d0b1bf785250607392e1b778aca0b8a7d/charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", size = 48543, upload-time = "2023-11-01T04:04:58.622Z" }, ] [[package]] name = "click" -version = "8.1.7" +version = "8.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/96/d3/f04c7bfcf5c1862a2a5b845c6b2b360488cf47af55dfa79c98f6a6bf98b5/click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de", size = 336121, upload-time = "2023-08-17T17:29:11.868Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", size = 295065, upload-time = "2025-11-15T20:45:42.706Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", size = 97941, upload-time = "2023-08-17T17:29:10.08Z" }, + { url = "https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6", size = 108274, upload-time = "2025-11-15T20:45:41.139Z" }, ] [[package]] @@ -477,134 +376,10 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/f9/84/1032763b9fae2de2d32213470f829ece7467bb32ad8b19a9dfd9c77be54d/conan-2.26.2.tar.gz", hash = "sha256:28bfbbd276935623f1b304811335acb9d2b8ce3a57aa649e432d10d4f51ce055", size = 567729, upload-time = "2026-03-05T09:31:30.75Z" } -[[package]] -name = "coverage" -version = "7.10.7" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/51/26/d22c300112504f5f9a9fd2297ce33c35f3d353e4aeb987c8419453b2a7c2/coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239", size = 827704, upload-time = "2025-09-21T20:03:56.815Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/6c/3a3f7a46888e69d18abe3ccc6fe4cb16cccb1e6a2f99698931dafca489e6/coverage-7.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc04cc7a3db33664e0c2d10eb8990ff6b3536f6842c9590ae8da4c614b9ed05a", size = 217987, upload-time = "2025-09-21T20:00:57.218Z" }, - { url = "https://files.pythonhosted.org/packages/03/94/952d30f180b1a916c11a56f5c22d3535e943aa22430e9e3322447e520e1c/coverage-7.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e201e015644e207139f7e2351980feb7040e6f4b2c2978892f3e3789d1c125e5", size = 218388, upload-time = "2025-09-21T20:01:00.081Z" }, - { url = "https://files.pythonhosted.org/packages/50/2b/9e0cf8ded1e114bcd8b2fd42792b57f1c4e9e4ea1824cde2af93a67305be/coverage-7.10.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:240af60539987ced2c399809bd34f7c78e8abe0736af91c3d7d0e795df633d17", size = 245148, upload-time = "2025-09-21T20:01:01.768Z" }, - { url = "https://files.pythonhosted.org/packages/19/20/d0384ac06a6f908783d9b6aa6135e41b093971499ec488e47279f5b846e6/coverage-7.10.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8421e088bc051361b01c4b3a50fd39a4b9133079a2229978d9d30511fd05231b", size = 246958, upload-time = "2025-09-21T20:01:03.355Z" }, - { url = "https://files.pythonhosted.org/packages/60/83/5c283cff3d41285f8eab897651585db908a909c572bdc014bcfaf8a8b6ae/coverage-7.10.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be8ed3039ae7f7ac5ce058c308484787c86e8437e72b30bf5e88b8ea10f3c87", size = 248819, upload-time = "2025-09-21T20:01:04.968Z" }, - { url = "https://files.pythonhosted.org/packages/60/22/02eb98fdc5ff79f423e990d877693e5310ae1eab6cb20ae0b0b9ac45b23b/coverage-7.10.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e28299d9f2e889e6d51b1f043f58d5f997c373cc12e6403b90df95b8b047c13e", size = 245754, upload-time = "2025-09-21T20:01:06.321Z" }, - { url = "https://files.pythonhosted.org/packages/b4/bc/25c83bcf3ad141b32cd7dc45485ef3c01a776ca3aa8ef0a93e77e8b5bc43/coverage-7.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4e16bd7761c5e454f4efd36f345286d6f7c5fa111623c355691e2755cae3b9e", size = 246860, upload-time = "2025-09-21T20:01:07.605Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b7/95574702888b58c0928a6e982038c596f9c34d52c5e5107f1eef729399b5/coverage-7.10.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b1c81d0e5e160651879755c9c675b974276f135558cf4ba79fee7b8413a515df", size = 244877, upload-time = "2025-09-21T20:01:08.829Z" }, - { url = "https://files.pythonhosted.org/packages/47/b6/40095c185f235e085df0e0b158f6bd68cc6e1d80ba6c7721dc81d97ec318/coverage-7.10.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:606cc265adc9aaedcc84f1f064f0e8736bc45814f15a357e30fca7ecc01504e0", size = 245108, upload-time = "2025-09-21T20:01:10.527Z" }, - { url = "https://files.pythonhosted.org/packages/c8/50/4aea0556da7a4b93ec9168420d170b55e2eb50ae21b25062513d020c6861/coverage-7.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10b24412692df990dbc34f8fb1b6b13d236ace9dfdd68df5b28c2e39cafbba13", size = 245752, upload-time = "2025-09-21T20:01:11.857Z" }, - { url = "https://files.pythonhosted.org/packages/6a/28/ea1a84a60828177ae3b100cb6723838523369a44ec5742313ed7db3da160/coverage-7.10.7-cp310-cp310-win32.whl", hash = "sha256:b51dcd060f18c19290d9b8a9dd1e0181538df2ce0717f562fff6cf74d9fc0b5b", size = 220497, upload-time = "2025-09-21T20:01:13.459Z" }, - { url = "https://files.pythonhosted.org/packages/fc/1a/a81d46bbeb3c3fd97b9602ebaa411e076219a150489bcc2c025f151bd52d/coverage-7.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:3a622ac801b17198020f09af3eaf45666b344a0d69fc2a6ffe2ea83aeef1d807", size = 221392, upload-time = "2025-09-21T20:01:14.722Z" }, - { url = "https://files.pythonhosted.org/packages/d2/5d/c1a17867b0456f2e9ce2d8d4708a4c3a089947d0bec9c66cdf60c9e7739f/coverage-7.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a609f9c93113be646f44c2a0256d6ea375ad047005d7f57a5c15f614dc1b2f59", size = 218102, upload-time = "2025-09-21T20:01:16.089Z" }, - { url = "https://files.pythonhosted.org/packages/54/f0/514dcf4b4e3698b9a9077f084429681bf3aad2b4a72578f89d7f643eb506/coverage-7.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:65646bb0359386e07639c367a22cf9b5bf6304e8630b565d0626e2bdf329227a", size = 218505, upload-time = "2025-09-21T20:01:17.788Z" }, - { url = "https://files.pythonhosted.org/packages/20/f6/9626b81d17e2a4b25c63ac1b425ff307ecdeef03d67c9a147673ae40dc36/coverage-7.10.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5f33166f0dfcce728191f520bd2692914ec70fac2713f6bf3ce59c3deacb4699", size = 248898, upload-time = "2025-09-21T20:01:19.488Z" }, - { url = "https://files.pythonhosted.org/packages/b0/ef/bd8e719c2f7417ba03239052e099b76ea1130ac0cbb183ee1fcaa58aaff3/coverage-7.10.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f5e3f9e455bb17831876048355dca0f758b6df22f49258cb5a91da23ef437d", size = 250831, upload-time = "2025-09-21T20:01:20.817Z" }, - { url = "https://files.pythonhosted.org/packages/a5/b6/bf054de41ec948b151ae2b79a55c107f5760979538f5fb80c195f2517718/coverage-7.10.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da86b6d62a496e908ac2898243920c7992499c1712ff7c2b6d837cc69d9467e", size = 252937, upload-time = "2025-09-21T20:01:22.171Z" }, - { url = "https://files.pythonhosted.org/packages/0f/e5/3860756aa6f9318227443c6ce4ed7bf9e70bb7f1447a0353f45ac5c7974b/coverage-7.10.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b8b09c1fad947c84bbbc95eca841350fad9cbfa5a2d7ca88ac9f8d836c92e23", size = 249021, upload-time = "2025-09-21T20:01:23.907Z" }, - { url = "https://files.pythonhosted.org/packages/26/0f/bd08bd042854f7fd07b45808927ebcce99a7ed0f2f412d11629883517ac2/coverage-7.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4376538f36b533b46f8971d3a3e63464f2c7905c9800db97361c43a2b14792ab", size = 250626, upload-time = "2025-09-21T20:01:25.721Z" }, - { url = "https://files.pythonhosted.org/packages/8e/a7/4777b14de4abcc2e80c6b1d430f5d51eb18ed1d75fca56cbce5f2db9b36e/coverage-7.10.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:121da30abb574f6ce6ae09840dae322bef734480ceafe410117627aa54f76d82", size = 248682, upload-time = "2025-09-21T20:01:27.105Z" }, - { url = "https://files.pythonhosted.org/packages/34/72/17d082b00b53cd45679bad682fac058b87f011fd8b9fe31d77f5f8d3a4e4/coverage-7.10.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:88127d40df529336a9836870436fc2751c339fbaed3a836d42c93f3e4bd1d0a2", size = 248402, upload-time = "2025-09-21T20:01:28.629Z" }, - { url = "https://files.pythonhosted.org/packages/81/7a/92367572eb5bdd6a84bfa278cc7e97db192f9f45b28c94a9ca1a921c3577/coverage-7.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ba58bbcd1b72f136080c0bccc2400d66cc6115f3f906c499013d065ac33a4b61", size = 249320, upload-time = "2025-09-21T20:01:30.004Z" }, - { url = "https://files.pythonhosted.org/packages/2f/88/a23cc185f6a805dfc4fdf14a94016835eeb85e22ac3a0e66d5e89acd6462/coverage-7.10.7-cp311-cp311-win32.whl", hash = "sha256:972b9e3a4094b053a4e46832b4bc829fc8a8d347160eb39d03f1690316a99c14", size = 220536, upload-time = "2025-09-21T20:01:32.184Z" }, - { url = "https://files.pythonhosted.org/packages/fe/ef/0b510a399dfca17cec7bc2f05ad8bd78cf55f15c8bc9a73ab20c5c913c2e/coverage-7.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:a7b55a944a7f43892e28ad4bc0561dfd5f0d73e605d1aa5c3c976b52aea121d2", size = 221425, upload-time = "2025-09-21T20:01:33.557Z" }, - { url = "https://files.pythonhosted.org/packages/51/7f/023657f301a276e4ba1850f82749bc136f5a7e8768060c2e5d9744a22951/coverage-7.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:736f227fb490f03c6488f9b6d45855f8e0fd749c007f9303ad30efab0e73c05a", size = 220103, upload-time = "2025-09-21T20:01:34.929Z" }, - { url = "https://files.pythonhosted.org/packages/13/e4/eb12450f71b542a53972d19117ea5a5cea1cab3ac9e31b0b5d498df1bd5a/coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417", size = 218290, upload-time = "2025-09-21T20:01:36.455Z" }, - { url = "https://files.pythonhosted.org/packages/37/66/593f9be12fc19fb36711f19a5371af79a718537204d16ea1d36f16bd78d2/coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973", size = 218515, upload-time = "2025-09-21T20:01:37.982Z" }, - { url = "https://files.pythonhosted.org/packages/66/80/4c49f7ae09cafdacc73fbc30949ffe77359635c168f4e9ff33c9ebb07838/coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c", size = 250020, upload-time = "2025-09-21T20:01:39.617Z" }, - { url = "https://files.pythonhosted.org/packages/a6/90/a64aaacab3b37a17aaedd83e8000142561a29eb262cede42d94a67f7556b/coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7", size = 252769, upload-time = "2025-09-21T20:01:41.341Z" }, - { url = "https://files.pythonhosted.org/packages/98/2e/2dda59afd6103b342e096f246ebc5f87a3363b5412609946c120f4e7750d/coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6", size = 253901, upload-time = "2025-09-21T20:01:43.042Z" }, - { url = "https://files.pythonhosted.org/packages/53/dc/8d8119c9051d50f3119bb4a75f29f1e4a6ab9415cd1fa8bf22fcc3fb3b5f/coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59", size = 250413, upload-time = "2025-09-21T20:01:44.469Z" }, - { url = "https://files.pythonhosted.org/packages/98/b3/edaff9c5d79ee4d4b6d3fe046f2b1d799850425695b789d491a64225d493/coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b", size = 251820, upload-time = "2025-09-21T20:01:45.915Z" }, - { url = "https://files.pythonhosted.org/packages/11/25/9a0728564bb05863f7e513e5a594fe5ffef091b325437f5430e8cfb0d530/coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a", size = 249941, upload-time = "2025-09-21T20:01:47.296Z" }, - { url = "https://files.pythonhosted.org/packages/e0/fd/ca2650443bfbef5b0e74373aac4df67b08180d2f184b482c41499668e258/coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb", size = 249519, upload-time = "2025-09-21T20:01:48.73Z" }, - { url = "https://files.pythonhosted.org/packages/24/79/f692f125fb4299b6f963b0745124998ebb8e73ecdfce4ceceb06a8c6bec5/coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1", size = 251375, upload-time = "2025-09-21T20:01:50.529Z" }, - { url = "https://files.pythonhosted.org/packages/5e/75/61b9bbd6c7d24d896bfeec57acba78e0f8deac68e6baf2d4804f7aae1f88/coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256", size = 220699, upload-time = "2025-09-21T20:01:51.941Z" }, - { url = "https://files.pythonhosted.org/packages/ca/f3/3bf7905288b45b075918d372498f1cf845b5b579b723c8fd17168018d5f5/coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba", size = 221512, upload-time = "2025-09-21T20:01:53.481Z" }, - { url = "https://files.pythonhosted.org/packages/5c/44/3e32dbe933979d05cf2dac5e697c8599cfe038aaf51223ab901e208d5a62/coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf", size = 220147, upload-time = "2025-09-21T20:01:55.2Z" }, - { url = "https://files.pythonhosted.org/packages/9a/94/b765c1abcb613d103b64fcf10395f54d69b0ef8be6a0dd9c524384892cc7/coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d", size = 218320, upload-time = "2025-09-21T20:01:56.629Z" }, - { url = "https://files.pythonhosted.org/packages/72/4f/732fff31c119bb73b35236dd333030f32c4bfe909f445b423e6c7594f9a2/coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b", size = 218575, upload-time = "2025-09-21T20:01:58.203Z" }, - { url = "https://files.pythonhosted.org/packages/87/02/ae7e0af4b674be47566707777db1aa375474f02a1d64b9323e5813a6cdd5/coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e", size = 249568, upload-time = "2025-09-21T20:01:59.748Z" }, - { url = "https://files.pythonhosted.org/packages/a2/77/8c6d22bf61921a59bce5471c2f1f7ac30cd4ac50aadde72b8c48d5727902/coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b", size = 252174, upload-time = "2025-09-21T20:02:01.192Z" }, - { url = "https://files.pythonhosted.org/packages/b1/20/b6ea4f69bbb52dac0aebd62157ba6a9dddbfe664f5af8122dac296c3ee15/coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49", size = 253447, upload-time = "2025-09-21T20:02:02.701Z" }, - { url = "https://files.pythonhosted.org/packages/f9/28/4831523ba483a7f90f7b259d2018fef02cb4d5b90bc7c1505d6e5a84883c/coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911", size = 249779, upload-time = "2025-09-21T20:02:04.185Z" }, - { url = "https://files.pythonhosted.org/packages/a7/9f/4331142bc98c10ca6436d2d620c3e165f31e6c58d43479985afce6f3191c/coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0", size = 251604, upload-time = "2025-09-21T20:02:06.034Z" }, - { url = "https://files.pythonhosted.org/packages/ce/60/bda83b96602036b77ecf34e6393a3836365481b69f7ed7079ab85048202b/coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f", size = 249497, upload-time = "2025-09-21T20:02:07.619Z" }, - { url = "https://files.pythonhosted.org/packages/5f/af/152633ff35b2af63977edd835d8e6430f0caef27d171edf2fc76c270ef31/coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c", size = 249350, upload-time = "2025-09-21T20:02:10.34Z" }, - { url = "https://files.pythonhosted.org/packages/9d/71/d92105d122bd21cebba877228990e1646d862e34a98bb3374d3fece5a794/coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f", size = 251111, upload-time = "2025-09-21T20:02:12.122Z" }, - { url = "https://files.pythonhosted.org/packages/a2/9e/9fdb08f4bf476c912f0c3ca292e019aab6712c93c9344a1653986c3fd305/coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698", size = 220746, upload-time = "2025-09-21T20:02:13.919Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b1/a75fd25df44eab52d1931e89980d1ada46824c7a3210be0d3c88a44aaa99/coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843", size = 221541, upload-time = "2025-09-21T20:02:15.57Z" }, - { url = "https://files.pythonhosted.org/packages/14/3a/d720d7c989562a6e9a14b2c9f5f2876bdb38e9367126d118495b89c99c37/coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546", size = 220170, upload-time = "2025-09-21T20:02:17.395Z" }, - { url = "https://files.pythonhosted.org/packages/bb/22/e04514bf2a735d8b0add31d2b4ab636fc02370730787c576bb995390d2d5/coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c", size = 219029, upload-time = "2025-09-21T20:02:18.936Z" }, - { url = "https://files.pythonhosted.org/packages/11/0b/91128e099035ece15da3445d9015e4b4153a6059403452d324cbb0a575fa/coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15", size = 219259, upload-time = "2025-09-21T20:02:20.44Z" }, - { url = "https://files.pythonhosted.org/packages/8b/51/66420081e72801536a091a0c8f8c1f88a5c4bf7b9b1bdc6222c7afe6dc9b/coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4", size = 260592, upload-time = "2025-09-21T20:02:22.313Z" }, - { url = "https://files.pythonhosted.org/packages/5d/22/9b8d458c2881b22df3db5bb3e7369e63d527d986decb6c11a591ba2364f7/coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0", size = 262768, upload-time = "2025-09-21T20:02:24.287Z" }, - { url = "https://files.pythonhosted.org/packages/f7/08/16bee2c433e60913c610ea200b276e8eeef084b0d200bdcff69920bd5828/coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0", size = 264995, upload-time = "2025-09-21T20:02:26.133Z" }, - { url = "https://files.pythonhosted.org/packages/20/9d/e53eb9771d154859b084b90201e5221bca7674ba449a17c101a5031d4054/coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65", size = 259546, upload-time = "2025-09-21T20:02:27.716Z" }, - { url = "https://files.pythonhosted.org/packages/ad/b0/69bc7050f8d4e56a89fb550a1577d5d0d1db2278106f6f626464067b3817/coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541", size = 262544, upload-time = "2025-09-21T20:02:29.216Z" }, - { url = "https://files.pythonhosted.org/packages/ef/4b/2514b060dbd1bc0aaf23b852c14bb5818f244c664cb16517feff6bb3a5ab/coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6", size = 260308, upload-time = "2025-09-21T20:02:31.226Z" }, - { url = "https://files.pythonhosted.org/packages/54/78/7ba2175007c246d75e496f64c06e94122bdb914790a1285d627a918bd271/coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999", size = 258920, upload-time = "2025-09-21T20:02:32.823Z" }, - { url = "https://files.pythonhosted.org/packages/c0/b3/fac9f7abbc841409b9a410309d73bfa6cfb2e51c3fada738cb607ce174f8/coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2", size = 261434, upload-time = "2025-09-21T20:02:34.86Z" }, - { url = "https://files.pythonhosted.org/packages/ee/51/a03bec00d37faaa891b3ff7387192cef20f01604e5283a5fabc95346befa/coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a", size = 221403, upload-time = "2025-09-21T20:02:37.034Z" }, - { url = "https://files.pythonhosted.org/packages/53/22/3cf25d614e64bf6d8e59c7c669b20d6d940bb337bdee5900b9ca41c820bb/coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb", size = 222469, upload-time = "2025-09-21T20:02:39.011Z" }, - { url = "https://files.pythonhosted.org/packages/49/a1/00164f6d30d8a01c3c9c48418a7a5be394de5349b421b9ee019f380df2a0/coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb", size = 220731, upload-time = "2025-09-21T20:02:40.939Z" }, - { url = "https://files.pythonhosted.org/packages/23/9c/5844ab4ca6a4dd97a1850e030a15ec7d292b5c5cb93082979225126e35dd/coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520", size = 218302, upload-time = "2025-09-21T20:02:42.527Z" }, - { url = "https://files.pythonhosted.org/packages/f0/89/673f6514b0961d1f0e20ddc242e9342f6da21eaba3489901b565c0689f34/coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32", size = 218578, upload-time = "2025-09-21T20:02:44.468Z" }, - { url = "https://files.pythonhosted.org/packages/05/e8/261cae479e85232828fb17ad536765c88dd818c8470aca690b0ac6feeaa3/coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f", size = 249629, upload-time = "2025-09-21T20:02:46.503Z" }, - { url = "https://files.pythonhosted.org/packages/82/62/14ed6546d0207e6eda876434e3e8475a3e9adbe32110ce896c9e0c06bb9a/coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a", size = 252162, upload-time = "2025-09-21T20:02:48.689Z" }, - { url = "https://files.pythonhosted.org/packages/ff/49/07f00db9ac6478e4358165a08fb41b469a1b053212e8a00cb02f0d27a05f/coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360", size = 253517, upload-time = "2025-09-21T20:02:50.31Z" }, - { url = "https://files.pythonhosted.org/packages/a2/59/c5201c62dbf165dfbc91460f6dbbaa85a8b82cfa6131ac45d6c1bfb52deb/coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69", size = 249632, upload-time = "2025-09-21T20:02:51.971Z" }, - { url = "https://files.pythonhosted.org/packages/07/ae/5920097195291a51fb00b3a70b9bbd2edbfe3c84876a1762bd1ef1565ebc/coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14", size = 251520, upload-time = "2025-09-21T20:02:53.858Z" }, - { url = "https://files.pythonhosted.org/packages/b9/3c/a815dde77a2981f5743a60b63df31cb322c944843e57dbd579326625a413/coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe", size = 249455, upload-time = "2025-09-21T20:02:55.807Z" }, - { url = "https://files.pythonhosted.org/packages/aa/99/f5cdd8421ea656abefb6c0ce92556709db2265c41e8f9fc6c8ae0f7824c9/coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e", size = 249287, upload-time = "2025-09-21T20:02:57.784Z" }, - { url = "https://files.pythonhosted.org/packages/c3/7a/e9a2da6a1fc5d007dd51fca083a663ab930a8c4d149c087732a5dbaa0029/coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd", size = 250946, upload-time = "2025-09-21T20:02:59.431Z" }, - { url = "https://files.pythonhosted.org/packages/ef/5b/0b5799aa30380a949005a353715095d6d1da81927d6dbed5def2200a4e25/coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2", size = 221009, upload-time = "2025-09-21T20:03:01.324Z" }, - { url = "https://files.pythonhosted.org/packages/da/b0/e802fbb6eb746de006490abc9bb554b708918b6774b722bb3a0e6aa1b7de/coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681", size = 221804, upload-time = "2025-09-21T20:03:03.4Z" }, - { url = "https://files.pythonhosted.org/packages/9e/e8/71d0c8e374e31f39e3389bb0bd19e527d46f00ea8571ec7ec8fd261d8b44/coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880", size = 220384, upload-time = "2025-09-21T20:03:05.111Z" }, - { url = "https://files.pythonhosted.org/packages/62/09/9a5608d319fa3eba7a2019addeacb8c746fb50872b57a724c9f79f146969/coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63", size = 219047, upload-time = "2025-09-21T20:03:06.795Z" }, - { url = "https://files.pythonhosted.org/packages/f5/6f/f58d46f33db9f2e3647b2d0764704548c184e6f5e014bef528b7f979ef84/coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2", size = 219266, upload-time = "2025-09-21T20:03:08.495Z" }, - { url = "https://files.pythonhosted.org/packages/74/5c/183ffc817ba68e0b443b8c934c8795553eb0c14573813415bd59941ee165/coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d", size = 260767, upload-time = "2025-09-21T20:03:10.172Z" }, - { url = "https://files.pythonhosted.org/packages/0f/48/71a8abe9c1ad7e97548835e3cc1adbf361e743e9d60310c5f75c9e7bf847/coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0", size = 262931, upload-time = "2025-09-21T20:03:11.861Z" }, - { url = "https://files.pythonhosted.org/packages/84/fd/193a8fb132acfc0a901f72020e54be5e48021e1575bb327d8ee1097a28fd/coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699", size = 265186, upload-time = "2025-09-21T20:03:13.539Z" }, - { url = "https://files.pythonhosted.org/packages/b1/8f/74ecc30607dd95ad50e3034221113ccb1c6d4e8085cc761134782995daae/coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9", size = 259470, upload-time = "2025-09-21T20:03:15.584Z" }, - { url = "https://files.pythonhosted.org/packages/0f/55/79ff53a769f20d71b07023ea115c9167c0bb56f281320520cf64c5298a96/coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f", size = 262626, upload-time = "2025-09-21T20:03:17.673Z" }, - { url = "https://files.pythonhosted.org/packages/88/e2/dac66c140009b61ac3fc13af673a574b00c16efdf04f9b5c740703e953c0/coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1", size = 260386, upload-time = "2025-09-21T20:03:19.36Z" }, - { url = "https://files.pythonhosted.org/packages/a2/f1/f48f645e3f33bb9ca8a496bc4a9671b52f2f353146233ebd7c1df6160440/coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0", size = 258852, upload-time = "2025-09-21T20:03:21.007Z" }, - { url = "https://files.pythonhosted.org/packages/bb/3b/8442618972c51a7affeead957995cfa8323c0c9bcf8fa5a027421f720ff4/coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399", size = 261534, upload-time = "2025-09-21T20:03:23.12Z" }, - { url = "https://files.pythonhosted.org/packages/b2/dc/101f3fa3a45146db0cb03f5b4376e24c0aac818309da23e2de0c75295a91/coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235", size = 221784, upload-time = "2025-09-21T20:03:24.769Z" }, - { url = "https://files.pythonhosted.org/packages/4c/a1/74c51803fc70a8a40d7346660379e144be772bab4ac7bb6e6b905152345c/coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d", size = 222905, upload-time = "2025-09-21T20:03:26.93Z" }, - { url = "https://files.pythonhosted.org/packages/12/65/f116a6d2127df30bcafbceef0302d8a64ba87488bf6f73a6d8eebf060873/coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a", size = 220922, upload-time = "2025-09-21T20:03:28.672Z" }, - { url = "https://files.pythonhosted.org/packages/a3/ad/d1c25053764b4c42eb294aae92ab617d2e4f803397f9c7c8295caa77a260/coverage-7.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fff7b9c3f19957020cac546c70025331113d2e61537f6e2441bc7657913de7d3", size = 217978, upload-time = "2025-09-21T20:03:30.362Z" }, - { url = "https://files.pythonhosted.org/packages/52/2f/b9f9daa39b80ece0b9548bbb723381e29bc664822d9a12c2135f8922c22b/coverage-7.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bc91b314cef27742da486d6839b677b3f2793dfe52b51bbbb7cf736d5c29281c", size = 218370, upload-time = "2025-09-21T20:03:32.147Z" }, - { url = "https://files.pythonhosted.org/packages/dd/6e/30d006c3b469e58449650642383dddf1c8fb63d44fdf92994bfd46570695/coverage-7.10.7-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:567f5c155eda8df1d3d439d40a45a6a5f029b429b06648235f1e7e51b522b396", size = 244802, upload-time = "2025-09-21T20:03:33.919Z" }, - { url = "https://files.pythonhosted.org/packages/b0/49/8a070782ce7e6b94ff6a0b6d7c65ba6bc3091d92a92cef4cd4eb0767965c/coverage-7.10.7-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af88deffcc8a4d5974cf2d502251bc3b2db8461f0b66d80a449c33757aa9f40", size = 246625, upload-time = "2025-09-21T20:03:36.09Z" }, - { url = "https://files.pythonhosted.org/packages/6a/92/1c1c5a9e8677ce56d42b97bdaca337b2d4d9ebe703d8c174ede52dbabd5f/coverage-7.10.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7315339eae3b24c2d2fa1ed7d7a38654cba34a13ef19fbcb9425da46d3dc594", size = 248399, upload-time = "2025-09-21T20:03:38.342Z" }, - { url = "https://files.pythonhosted.org/packages/c0/54/b140edee7257e815de7426d5d9846b58505dffc29795fff2dfb7f8a1c5a0/coverage-7.10.7-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:912e6ebc7a6e4adfdbb1aec371ad04c68854cd3bf3608b3514e7ff9062931d8a", size = 245142, upload-time = "2025-09-21T20:03:40.591Z" }, - { url = "https://files.pythonhosted.org/packages/e4/9e/6d6b8295940b118e8b7083b29226c71f6154f7ff41e9ca431f03de2eac0d/coverage-7.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f49a05acd3dfe1ce9715b657e28d138578bc40126760efb962322c56e9ca344b", size = 246284, upload-time = "2025-09-21T20:03:42.355Z" }, - { url = "https://files.pythonhosted.org/packages/db/e5/5e957ca747d43dbe4d9714358375c7546cb3cb533007b6813fc20fce37ad/coverage-7.10.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cce2109b6219f22ece99db7644b9622f54a4e915dad65660ec435e89a3ea7cc3", size = 244353, upload-time = "2025-09-21T20:03:44.218Z" }, - { url = "https://files.pythonhosted.org/packages/9a/45/540fc5cc92536a1b783b7ef99450bd55a4b3af234aae35a18a339973ce30/coverage-7.10.7-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:f3c887f96407cea3916294046fc7dab611c2552beadbed4ea901cbc6a40cc7a0", size = 244430, upload-time = "2025-09-21T20:03:46.065Z" }, - { url = "https://files.pythonhosted.org/packages/75/0b/8287b2e5b38c8fe15d7e3398849bb58d382aedc0864ea0fa1820e8630491/coverage-7.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:635adb9a4507c9fd2ed65f39693fa31c9a3ee3a8e6dc64df033e8fdf52a7003f", size = 245311, upload-time = "2025-09-21T20:03:48.19Z" }, - { url = "https://files.pythonhosted.org/packages/0c/1d/29724999984740f0c86d03e6420b942439bf5bd7f54d4382cae386a9d1e9/coverage-7.10.7-cp39-cp39-win32.whl", hash = "sha256:5a02d5a850e2979b0a014c412573953995174743a3f7fa4ea5a6e9a3c5617431", size = 220500, upload-time = "2025-09-21T20:03:50.024Z" }, - { url = "https://files.pythonhosted.org/packages/43/11/4b1e6b129943f905ca54c339f343877b55b365ae2558806c1be4f7476ed5/coverage-7.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:c134869d5ffe34547d14e174c866fd8fe2254918cc0a95e99052903bc1543e07", size = 221408, upload-time = "2025-09-21T20:03:51.803Z" }, - { url = "https://files.pythonhosted.org/packages/ec/16/114df1c291c22cac3b0c127a73e0af5c12ed7bbb6558d310429a0ae24023/coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260", size = 209952, upload-time = "2025-09-21T20:03:53.918Z" }, -] - -[package.optional-dependencies] -toml = [ - { name = "tomli", marker = "python_full_version < '3.10'" }, -] - [[package]] name = "coverage" version = "7.13.4" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] sdist = { url = "https://files.pythonhosted.org/packages/24/56/95b7e30fa389756cb56630faa728da46a27b8c6eb46f9d557c68fff12b65/coverage-7.13.4.tar.gz", hash = "sha256:e5c8f6ed1e61a8b2dcdf31eb0b9bbf0130750ca79c1c49eb898e2ad86f5ccc91", size = 827239, upload-time = "2026-02-09T12:59:03.86Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/44/d4/7827d9ffa34d5d4d752eec907022aa417120936282fc488306f5da08c292/coverage-7.13.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fc31c787a84f8cd6027eba44010517020e0d18487064cd3d8968941856d1415", size = 219152, upload-time = "2026-02-09T12:56:11.974Z" }, @@ -716,7 +491,7 @@ wheels = [ [package.optional-dependencies] toml = [ - { name = "tomli", marker = "python_full_version >= '3.10' and python_full_version <= '3.11'" }, + { name = "tomli", marker = "python_full_version <= '3.11'" }, ] [[package]] @@ -724,8 +499,7 @@ name = "cryptography" version = "45.0.7" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version == '3.10.*'", - "python_full_version < '3.10'", + "python_full_version < '3.11'", ] dependencies = [ { name = "cffi", marker = "python_full_version < '3.11' and platform_python_implementation != 'PyPy'" }, @@ -902,27 +676,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/61/bf/fd60001b3abc5222d8eaa4a204cd8c0ae78e75adc688f33ce4bf25b7fafa/fasteners-0.19-py3-none-any.whl", hash = "sha256:758819cb5d94cdedf4e836988b74de396ceacb8e2794d21f82d131fd9ee77237", size = 18679, upload-time = "2023-09-19T17:11:18.725Z" }, ] -[[package]] -name = "filelock" -version = "3.19.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687, upload-time = "2025-08-14T16:56:03.016Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988, upload-time = "2025-08-14T16:56:01.633Z" }, -] - [[package]] name = "filelock" version = "3.25.2" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] sdist = { url = "https://files.pythonhosted.org/packages/94/b8/00651a0f559862f3bb7d6f7477b192afe3f583cc5e26403b44e59a55ab34/filelock-3.25.2.tar.gz", hash = "sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694", size = 40480, upload-time = "2026-03-11T20:45:38.487Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70", size = 26759, upload-time = "2026-03-11T20:45:37.437Z" }, @@ -940,27 +697,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9f/cb/18326d2d89ad3b0dd143da971e77afd1e6ca6674f1b1c3df4b6bec6279fc/id-1.5.0-py3-none-any.whl", hash = "sha256:f1434e1cef91f2cbb8a4ec64663d5a23b9ed43ef44c4c957d02583d61714c658", size = 13611, upload-time = "2024-12-04T19:53:03.02Z" }, ] -[[package]] -name = "identify" -version = "2.6.15" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/ff/e7/685de97986c916a6d93b3876139e00eef26ad5bbbd61925d670ae8013449/identify-2.6.15.tar.gz", hash = "sha256:e4f4864b96c6557ef2a1e1c951771838f4edc9df3a72ec7118b338801b11c7bf", size = 99311, upload-time = "2025-10-02T17:43:40.631Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl", hash = "sha256:1181ef7608e00704db228516541eb83a88a9f94433a8c80bb9b5bd54b1d81757", size = 99183, upload-time = "2025-10-02T17:43:39.137Z" }, -] - [[package]] name = "identify" version = "2.6.18" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] sdist = { url = "https://files.pythonhosted.org/packages/46/c4/7fb4db12296cdb11893d61c92048fe617ee853f8523b9b296ac03b43757e/identify-2.6.18.tar.gz", hash = "sha256:873ac56a5e3fd63e7438a7ecbc4d91aca692eb3fefa4534db2b7913f3fc352fd", size = 99580, upload-time = "2026-03-15T18:39:50.319Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl", hash = "sha256:8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737", size = 99394, upload-time = "2026-03-15T18:39:48.915Z" }, @@ -991,35 +731,15 @@ wheels = [ name = "importlib-resources" version = "5.12.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "zipp", marker = "python_full_version < '3.10'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/4e/a2/3cab1de83f95dd15297c15bdc04d50902391d707247cada1f021bbfe2149/importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6", size = 39894, upload-time = "2023-02-17T22:32:21.013Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/38/71/c13ea695a4393639830bf96baea956538ba7a9d06fcce7cef10bfff20f72/importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a", size = 36211, upload-time = "2023-02-17T22:32:19.266Z" }, ] -[[package]] -name = "iniconfig" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, -] - [[package]] name = "iniconfig" version = "2.3.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, @@ -1102,8 +822,7 @@ dependencies = [ { name = "jaraco-functools" }, { name = "jeepney", marker = "sys_platform == 'linux'" }, { name = "pywin32-ctypes", marker = "sys_platform == 'win32'" }, - { name = "secretstorage", version = "3.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10' and sys_platform == 'linux'" }, - { name = "secretstorage", version = "3.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10' and sys_platform == 'linux'" }, + { name = "secretstorage", marker = "sys_platform == 'linux'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/43/4b/674af6ef2f97d56f0ab5153bf0bfa28ccb6c3ed4d1babf4305449668807b/keyring-25.7.0.tar.gz", hash = "sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b", size = 63516, upload-time = "2025-11-16T16:26:09.482Z" } wheels = [ @@ -1193,46 +912,14 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b9/eb/7697f60fbe7042ab4e88f4ee6af496b7f222fffb0a4e3593ef1f29f81652/librt-0.8.1-cp314-cp314t-win32.whl", hash = "sha256:738f08021b3142c2918c03692608baed43bc51144c29e35807682f8070ee2a3a", size = 51328, upload-time = "2026-02-17T16:12:45.148Z" }, { url = "https://files.pythonhosted.org/packages/7c/72/34bf2eb7a15414a23e5e70ecb9440c1d3179f393d9349338a91e2781c0fb/librt-0.8.1-cp314-cp314t-win_amd64.whl", hash = "sha256:89815a22daf9c51884fb5dbe4f1ef65ee6a146e0b6a8df05f753e2e4a9359bf4", size = 58722, upload-time = "2026-02-17T16:12:46.85Z" }, { url = "https://files.pythonhosted.org/packages/b2/c8/d148e041732d631fc76036f8b30fae4e77b027a1e95b7a84bb522481a940/librt-0.8.1-cp314-cp314t-win_arm64.whl", hash = "sha256:bf512a71a23504ed08103a13c941f763db13fb11177beb3d9244c98c29fb4a61", size = 48755, upload-time = "2026-02-17T16:12:47.943Z" }, - { url = "https://files.pythonhosted.org/packages/01/1f/c7d8b66a3ca3ca3ed8ded4b32c96ee58a45920ebbbaa934355c74adcc33e/librt-0.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3dff3d3ca8db20e783b1bc7de49c0a2ab0b8387f31236d6a026597d07fcd68ac", size = 65990, upload-time = "2026-02-17T16:12:48.972Z" }, - { url = "https://files.pythonhosted.org/packages/56/be/ee9ba1730052313d08457f19beaa1b878619978863fba09b40aed5b5c123/librt-0.8.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:08eec3a1fc435f0d09c87b6bf1ec798986a3544f446b864e4099633a56fcd9ed", size = 68640, upload-time = "2026-02-17T16:12:50.24Z" }, - { url = "https://files.pythonhosted.org/packages/81/27/b7309298b96f7690cec3ceee38004c1a7f60fcd96d952d3ac344a1e3e8b3/librt-0.8.1-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e3f0a41487fd5fad7e760b9e8a90e251e27c2816fbc2cff36a22a0e6bcbbd9dd", size = 196099, upload-time = "2026-02-17T16:12:52.788Z" }, - { url = "https://files.pythonhosted.org/packages/10/48/160a5aacdcb21824b10a52378c39e88c46a29bb31efdaf3910dd1f9b670e/librt-0.8.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bacdb58d9939d95cc557b4dbaa86527c9db2ac1ed76a18bc8d26f6dc8647d851", size = 206663, upload-time = "2026-02-17T16:12:55.017Z" }, - { url = "https://files.pythonhosted.org/packages/ee/65/33dd1d8caabb7c6805d87d095b143417dc96b0277c06ffa0508361422c82/librt-0.8.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b6d7ab1f01aa753188605b09a51faa44a3327400b00b8cce424c71910fc0a128", size = 219318, upload-time = "2026-02-17T16:12:56.145Z" }, - { url = "https://files.pythonhosted.org/packages/09/d4/353805aa6181c7950a2462bd6e855366eeca21a501f375228d72a51547df/librt-0.8.1-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4998009e7cb9e896569f4be7004f09d0ed70d386fa99d42b6d363f6d200501ac", size = 212191, upload-time = "2026-02-17T16:12:57.326Z" }, - { url = "https://files.pythonhosted.org/packages/06/08/725b3f304d61eba56c713c251fb833a06d84bf93381caad5152366f5d2bb/librt-0.8.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2cc68eeeef5e906839c7bb0815748b5b0a974ec27125beefc0f942715785b551", size = 220672, upload-time = "2026-02-17T16:12:58.497Z" }, - { url = "https://files.pythonhosted.org/packages/0e/55/e8cdf04145872b3b97cb9b68287b22d1c08348227063f305aec11a3e6ce7/librt-0.8.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0bf69d79a23f4f40b8673a947a234baeeb133b5078b483b7297c5916539cf5d5", size = 216172, upload-time = "2026-02-17T16:12:59.751Z" }, - { url = "https://files.pythonhosted.org/packages/8f/d8/23b1c6592d2422dd6829c672f45b1f1c257f219926b0d216fedb572d0184/librt-0.8.1-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:22b46eabd76c1986ee7d231b0765ad387d7673bbd996aa0d0d054b38ac65d8f6", size = 214116, upload-time = "2026-02-17T16:13:01.056Z" }, - { url = "https://files.pythonhosted.org/packages/c9/92/2b44fd3cc3313f44e43bdbb41343735b568fa675fa351642b408ee48d418/librt-0.8.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:237796479f4d0637d6b9cbcb926ff424a97735e68ade6facf402df4ec93375ed", size = 236664, upload-time = "2026-02-17T16:13:02.314Z" }, - { url = "https://files.pythonhosted.org/packages/00/23/92313ecdab80e142d8ea10e8dfa6297694359dbaacc9e81679bdc8cbceb6/librt-0.8.1-cp39-cp39-win32.whl", hash = "sha256:4beb04b8c66c6ae62f8c1e0b2f097c1ebad9295c929a8d5286c05eae7c2fc7dc", size = 54368, upload-time = "2026-02-17T16:13:03.549Z" }, - { url = "https://files.pythonhosted.org/packages/68/36/18f6e768afad6b55a690d38427c53251b69b7ba8795512730fd2508b31a9/librt-0.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:64548cde61b692dc0dc379f4b5f59a2f582c2ebe7890d09c1ae3b9e66fa015b7", size = 61507, upload-time = "2026-02-17T16:13:04.556Z" }, -] - -[[package]] -name = "markdown-it-py" -version = "3.0.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "mdurl", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" }, ] [[package]] name = "markdown-it-py" version = "4.0.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] dependencies = [ - { name = "mdurl", marker = "python_full_version >= '3.10'" }, + { name = "mdurl" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } wheels = [ @@ -1275,16 +962,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/88/07/2dc76aa51b481eb96a4c3198894f38b480490e834479611a4053fbf08623/MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169", size = 33038, upload-time = "2024-02-02T16:30:42.243Z" }, { url = "https://files.pythonhosted.org/packages/96/0c/620c1fb3661858c0e37eb3cbffd8c6f732a67cd97296f725789679801b31/MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad", size = 16572, upload-time = "2024-02-02T16:30:43.326Z" }, { url = "https://files.pythonhosted.org/packages/3f/14/c3554d512d5f9100a95e737502f4a2323a1959f6d0d01e0d0997b35f7b10/MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb", size = 17127, upload-time = "2024-02-02T16:30:44.418Z" }, - { url = "https://files.pythonhosted.org/packages/0f/31/780bb297db036ba7b7bbede5e1d7f1e14d704ad4beb3ce53fb495d22bc62/MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf", size = 18193, upload-time = "2024-02-02T16:31:10.155Z" }, - { url = "https://files.pythonhosted.org/packages/6c/77/d77701bbef72892affe060cdacb7a2ed7fd68dae3b477a8642f15ad3b132/MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2", size = 14073, upload-time = "2024-02-02T16:31:11.442Z" }, - { url = "https://files.pythonhosted.org/packages/d9/a7/1e558b4f78454c8a3a0199292d96159eb4d091f983bc35ef258314fe7269/MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8", size = 26486, upload-time = "2024-02-02T16:31:12.488Z" }, - { url = "https://files.pythonhosted.org/packages/5f/5a/360da85076688755ea0cceb92472923086993e86b5613bbae9fbc14136b0/MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3", size = 25685, upload-time = "2024-02-02T16:31:13.726Z" }, - { url = "https://files.pythonhosted.org/packages/6a/18/ae5a258e3401f9b8312f92b028c54d7026a97ec3ab20bfaddbdfa7d8cce8/MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465", size = 25338, upload-time = "2024-02-02T16:31:14.812Z" }, - { url = "https://files.pythonhosted.org/packages/0b/cc/48206bd61c5b9d0129f4d75243b156929b04c94c09041321456fd06a876d/MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e", size = 30439, upload-time = "2024-02-02T16:31:15.946Z" }, - { url = "https://files.pythonhosted.org/packages/d1/06/a41c112ab9ffdeeb5f77bc3e331fdadf97fa65e52e44ba31880f4e7f983c/MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea", size = 29531, upload-time = "2024-02-02T16:31:17.13Z" }, - { url = "https://files.pythonhosted.org/packages/02/8c/ab9a463301a50dab04d5472e998acbd4080597abc048166ded5c7aa768c8/MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6", size = 29823, upload-time = "2024-02-02T16:31:18.247Z" }, - { url = "https://files.pythonhosted.org/packages/bc/29/9bc18da763496b055d8e98ce476c8e718dcfd78157e17f555ce6dd7d0895/MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf", size = 16658, upload-time = "2024-02-02T16:31:19.583Z" }, - { url = "https://files.pythonhosted.org/packages/f6/f8/4da07de16f10551ca1f640c92b5f316f9394088b183c6a57183df6de5ae4/MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5", size = 17211, upload-time = "2024-02-02T16:31:20.96Z" }, ] [[package]] @@ -1357,12 +1034,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/32/2a/66ba933fe6c76bd40d1fe916a83f04fed253152f451a877520b3c4a5e41e/mypy-1.19.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045", size = 13601998, upload-time = "2025-12-15T05:03:13.056Z" }, { url = "https://files.pythonhosted.org/packages/e3/da/5055c63e377c5c2418760411fd6a63ee2b96cf95397259038756c042574f/mypy-1.19.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957", size = 13807476, upload-time = "2025-12-15T05:03:17.977Z" }, { url = "https://files.pythonhosted.org/packages/cd/09/4ebd873390a063176f06b0dbf1f7783dd87bd120eae7727fa4ae4179b685/mypy-1.19.1-cp314-cp314-win_amd64.whl", hash = "sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f", size = 10281872, upload-time = "2025-12-15T05:03:05.549Z" }, - { url = "https://files.pythonhosted.org/packages/b5/f7/88436084550ca9af5e610fa45286be04c3b63374df3e021c762fe8c4369f/mypy-1.19.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7bcfc336a03a1aaa26dfce9fff3e287a3ba99872a157561cbfcebe67c13308e3", size = 13102606, upload-time = "2025-12-15T05:02:46.833Z" }, - { url = "https://files.pythonhosted.org/packages/ca/a5/43dfad311a734b48a752790571fd9e12d61893849a01bff346a54011957f/mypy-1.19.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b7951a701c07ea584c4fe327834b92a30825514c868b1f69c30445093fdd9d5a", size = 12164496, upload-time = "2025-12-15T05:03:41.947Z" }, - { url = "https://files.pythonhosted.org/packages/88/f0/efbfa391395cce2f2771f937e0620cfd185ec88f2b9cd88711028a768e96/mypy-1.19.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b13cfdd6c87fc3efb69ea4ec18ef79c74c3f98b4e5498ca9b85ab3b2c2329a67", size = 12772068, upload-time = "2025-12-15T05:02:53.689Z" }, - { url = "https://files.pythonhosted.org/packages/25/05/58b3ba28f5aed10479e899a12d2120d582ba9fa6288851b20bf1c32cbb4f/mypy-1.19.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f28f99c824ecebcdaa2e55d82953e38ff60ee5ec938476796636b86afa3956e", size = 13520385, upload-time = "2025-12-15T05:02:38.328Z" }, - { url = "https://files.pythonhosted.org/packages/c5/a0/c006ccaff50b31e542ae69b92fe7e2f55d99fba3a55e01067dd564325f85/mypy-1.19.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c608937067d2fc5a4dd1a5ce92fd9e1398691b8c5d012d66e1ddd430e9244376", size = 13796221, upload-time = "2025-12-15T05:03:22.147Z" }, - { url = "https://files.pythonhosted.org/packages/b2/ff/8bdb051cd710f01b880472241bd36b3f817a8e1c5d5540d0b761675b6de2/mypy-1.19.1-cp39-cp39-win_amd64.whl", hash = "sha256:409088884802d511ee52ca067707b90c883426bd95514e8cfda8281dc2effe24", size = 10055456, upload-time = "2025-12-15T05:03:35.169Z" }, { url = "https://files.pythonhosted.org/packages/8d/f4/4ce9a05ce5ded1de3ec1c1d96cf9f9504a04e54ce0ed55cfa38619a32b8d/mypy-1.19.1-py3-none-any.whl", hash = "sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247", size = 2471239, upload-time = "2025-12-15T05:03:07.248Z" }, ] @@ -1451,27 +1122,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", size = 55206, upload-time = "2026-01-27T03:59:45.137Z" }, ] -[[package]] -name = "platformdirs" -version = "4.4.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/23/e8/21db9c9987b0e728855bd57bff6984f67952bea55d6f75e055c46b5383e8/platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf", size = 21634, upload-time = "2025-08-26T14:32:04.268Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85", size = 18654, upload-time = "2025-08-26T14:32:02.735Z" }, -] - [[package]] name = "platformdirs" version = "4.9.4" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] sdist = { url = "https://files.pythonhosted.org/packages/19/56/8d4c30c8a1d07013911a8fdbd8f89440ef9f08d07a1b50ab8ca8be5a20f9/platformdirs-4.9.4.tar.gz", hash = "sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934", size = 28737, upload-time = "2026-03-05T18:34:13.271Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl", hash = "sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868", size = 21216, upload-time = "2026-03-05T18:34:12.172Z" }, @@ -1492,40 +1146,16 @@ version = "1.0.1" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/f3/07/753451e80d2b0bf3bceec1162e8d23638ac3cb18d1c38ad340c586e90b42/pluginbase-1.0.1.tar.gz", hash = "sha256:ff6c33a98fce232e9c73841d787a643de574937069f0d18147028d70d7dee287", size = 43588, upload-time = "2021-05-16T16:25:40.715Z" } -[[package]] -name = "pre-commit" -version = "4.3.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "cfgv", version = "3.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "identify", version = "2.6.15", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "nodeenv", marker = "python_full_version < '3.10'" }, - { name = "pyyaml", marker = "python_full_version < '3.10'" }, - { name = "virtualenv", version = "20.33.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ff/29/7cf5bbc236333876e4b41f56e06857a87937ce4bf91e117a6991a2dbb02a/pre_commit-4.3.0.tar.gz", hash = "sha256:499fe450cc9d42e9d58e606262795ecb64dd05438943c62b66f6a8673da30b16", size = 193792, upload-time = "2025-08-09T18:56:14.651Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl", hash = "sha256:2b0747ad7e6e967169136edffee14c16e148a778a54e4f967921aa1ebf2308d8", size = 220965, upload-time = "2025-08-09T18:56:13.192Z" }, -] - [[package]] name = "pre-commit" version = "4.5.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] dependencies = [ - { name = "cfgv", version = "3.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "identify", version = "2.6.18", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "nodeenv", marker = "python_full_version >= '3.10'" }, - { name = "pyyaml", marker = "python_full_version >= '3.10'" }, - { name = "virtualenv", version = "20.33.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "cfgv" }, + { name = "identify" }, + { name = "nodeenv" }, + { name = "pyyaml" }, + { name = "virtualenv", version = "20.33.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "virtualenv", version = "21.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/40/f1/6d86a29246dfd2e9b6237f0b5823717f60cad94d47ddc26afa916d21f525/pre_commit-4.5.1.tar.gz", hash = "sha256:eb545fcff725875197837263e977ea257a402056661f09dae08e4b149b030a61", size = 198232, upload-time = "2025-12-16T21:14:33.552Z" } @@ -1533,27 +1163,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5d/19/fd3ef348460c80af7bb4669ea7926651d1f95c23ff2df18b9d24bab4f3fa/pre_commit-4.5.1-py2.py3-none-any.whl", hash = "sha256:3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77", size = 226437, upload-time = "2025-12-16T21:14:32.409Z" }, ] -[[package]] -name = "pycparser" -version = "2.23" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, -] - [[package]] name = "pycparser" version = "3.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, @@ -1610,11 +1223,9 @@ dependencies = [ { name = "dill" }, { name = "isort" }, { name = "mccabe" }, - { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "platformdirs" }, { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "tomlkit" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cf/e8/d59ce8e54884c9475ed6510685ef4311a10001674c28703b23da30f3b24d/pylint-3.2.7.tar.gz", hash = "sha256:1b7a721b575eaeaa7d39db076b6e7743c993ea44f57979127c517c6c572c803e", size = 1511922, upload-time = "2024-08-31T14:26:26.851Z" } wheels = [ @@ -1656,44 +1267,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/29/7d/5945b5af29534641820d3bd7b00962abbbdfee84ec7e19f0d5b3175f9a31/pynacl-1.6.2-cp38-abi3-win_arm64.whl", hash = "sha256:834a43af110f743a754448463e8fd61259cd4ab5bbedcf70f9dabad1d28a394c", size = 184801, upload-time = "2026-01-01T17:32:36.309Z" }, ] -[[package]] -name = "pytest" -version = "8.4.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.10'" }, - { name = "iniconfig", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "pluggy", marker = "python_full_version < '3.10'" }, - { name = "pygments", marker = "python_full_version < '3.10'" }, - { name = "tomli", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload-time = "2025-09-04T14:34:22.711Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" }, -] - [[package]] name = "pytest" version = "9.0.2" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] dependencies = [ - { name = "colorama", marker = "python_full_version >= '3.10' and sys_platform == 'win32'" }, - { name = "exceptiongroup", marker = "python_full_version == '3.10.*'" }, - { name = "iniconfig", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "packaging", marker = "python_full_version >= '3.10'" }, - { name = "pluggy", marker = "python_full_version >= '3.10'" }, - { name = "pygments", marker = "python_full_version >= '3.10'" }, - { name = "tomli", marker = "python_full_version == '3.10.*'" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" } wheels = [ @@ -1705,11 +1290,9 @@ name = "pytest-cov" version = "7.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "coverage", version = "7.10.7", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version < '3.10'" }, - { name = "coverage", version = "7.13.4", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version >= '3.10'" }, + { name = "coverage", extra = ["toml"] }, { name = "pluggy" }, - { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pytest", version = "9.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pytest" }, ] sdist = { url = "https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size = 54328, upload-time = "2025-09-09T10:57:02.113Z" } wheels = [ @@ -1722,8 +1305,7 @@ version = "0.21.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pylint" }, - { name = "pytest", version = "8.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pytest", version = "9.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pytest" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a3/a2/760c54166210dbf7ba8b5dcf19b28d388c53569faa412809f6fb652aa588/pytest-pylint-0.21.0.tar.gz", hash = "sha256:88764b8e1d5cfa18809248e0ccc2fc05035f08c35f0b0222ddcfea1c3c4e553e", size = 14250, upload-time = "2023-10-06T04:15:29.249Z" } @@ -1748,8 +1330,8 @@ name = "python-discovery" version = "1.1.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "filelock", marker = "python_full_version >= '3.11'" }, + { name = "platformdirs", marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d7/7e/9f3b0dd3a074a6c3e1e79f35e465b1f2ee4b262d619de00cfce523cc9b24/python_discovery-1.1.3.tar.gz", hash = "sha256:7acca36e818cd88e9b2ba03e045ad7e93e1713e29c6bbfba5d90202310b7baa5", size = 56945, upload-time = "2026-03-10T15:08:15.038Z" } wheels = [ @@ -1792,11 +1374,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cf/35/3aa899645e29b6375b4aed9f8d21df219e7c958c4c186b465e42ee0a06bf/pytokens-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d31b97b3de0f61571a124a00ffe9a81fb9939146c122c11060725bd5aea79975", size = 303485, upload-time = "2026-01-30T01:03:28.558Z" }, { url = "https://files.pythonhosted.org/packages/52/a0/07907b6ff512674d9b201859f7d212298c44933633c946703a20c25e9d81/pytokens-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:967cf6e3fd4adf7de8fc73cd3043754ae79c36475c1c11d514fc72cf5490094a", size = 306698, upload-time = "2026-01-30T01:03:29.653Z" }, { url = "https://files.pythonhosted.org/packages/39/2a/cbbf9250020a4a8dd53ba83a46c097b69e5eb49dd14e708f496f548c6612/pytokens-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:584c80c24b078eec1e227079d56dc22ff755e0ba8654d8383b2c549107528918", size = 116287, upload-time = "2026-01-30T01:03:30.912Z" }, - { url = "https://files.pythonhosted.org/packages/51/2a/f125667ce48105bf1f4e50e03cfa7b24b8c4f47684d7f1cf4dcb6f6b1c15/pytokens-0.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:34bcc734bd2f2d5fe3b34e7b3c0116bfb2397f2d9666139988e7a3eb5f7400e3", size = 161464, upload-time = "2026-01-30T01:03:39.11Z" }, - { url = "https://files.pythonhosted.org/packages/40/df/065a30790a7ca6bb48ad9018dd44668ed9135610ebf56a2a4cb8e513fd5c/pytokens-0.4.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:941d4343bf27b605e9213b26bfa1c4bf197c9c599a9627eb7305b0defcfe40c1", size = 246159, upload-time = "2026-01-30T01:03:40.131Z" }, - { url = "https://files.pythonhosted.org/packages/a5/1c/fd09976a7e04960dabc07ab0e0072c7813d566ec67d5490a4c600683c158/pytokens-0.4.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3ad72b851e781478366288743198101e5eb34a414f1d5627cdd585ca3b25f1db", size = 259120, upload-time = "2026-01-30T01:03:41.233Z" }, - { url = "https://files.pythonhosted.org/packages/52/49/59fdc6fc5a390ae9f308eadeb97dfc70fc2d804ffc49dd39fc97604622ec/pytokens-0.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:682fa37ff4d8e95f7df6fe6fe6a431e8ed8e788023c6bcc0f0880a12eab80ad1", size = 262196, upload-time = "2026-01-30T01:03:42.696Z" }, - { url = "https://files.pythonhosted.org/packages/3d/e7/d6734dccf0080e3dc00a55b0827ab5af30c886f8bc127bbc04bc3445daec/pytokens-0.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:30f51edd9bb7f85c748979384165601d028b84f7bd13fe14d3e065304093916a", size = 103510, upload-time = "2026-01-30T01:03:43.915Z" }, { url = "https://files.pythonhosted.org/packages/c6/78/397db326746f0a342855b81216ae1f0a32965deccfd7c830a2dbc66d2483/pytokens-0.4.1-py3-none-any.whl", hash = "sha256:26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de", size = 13729, upload-time = "2026-01-30T01:03:45.029Z" }, ] @@ -1871,15 +1448,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, - { url = "https://files.pythonhosted.org/packages/9f/62/67fc8e68a75f738c9200422bf65693fb79a4cd0dc5b23310e5202e978090/pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da", size = 184450, upload-time = "2025-09-25T21:33:00.618Z" }, - { url = "https://files.pythonhosted.org/packages/ae/92/861f152ce87c452b11b9d0977952259aa7df792d71c1053365cc7b09cc08/pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917", size = 174319, upload-time = "2025-09-25T21:33:02.086Z" }, - { url = "https://files.pythonhosted.org/packages/d0/cd/f0cfc8c74f8a030017a2b9c771b7f47e5dd702c3e28e5b2071374bda2948/pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9", size = 737631, upload-time = "2025-09-25T21:33:03.25Z" }, - { url = "https://files.pythonhosted.org/packages/ef/b2/18f2bd28cd2055a79a46c9b0895c0b3d987ce40ee471cecf58a1a0199805/pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5", size = 836795, upload-time = "2025-09-25T21:33:05.014Z" }, - { url = "https://files.pythonhosted.org/packages/73/b9/793686b2d54b531203c160ef12bec60228a0109c79bae6c1277961026770/pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a", size = 750767, upload-time = "2025-09-25T21:33:06.398Z" }, - { url = "https://files.pythonhosted.org/packages/a9/86/a137b39a611def2ed78b0e66ce2fe13ee701a07c07aebe55c340ed2a050e/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926", size = 727982, upload-time = "2025-09-25T21:33:08.708Z" }, - { url = "https://files.pythonhosted.org/packages/dd/62/71c27c94f457cf4418ef8ccc71735324c549f7e3ea9d34aba50874563561/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7", size = 755677, upload-time = "2025-09-25T21:33:09.876Z" }, - { url = "https://files.pythonhosted.org/packages/29/3d/6f5e0d58bd924fb0d06c3a6bad00effbdae2de5adb5cda5648006ffbd8d3/pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0", size = 142592, upload-time = "2025-09-25T21:33:10.983Z" }, - { url = "https://files.pythonhosted.org/packages/f0/0c/25113e0b5e103d7f1490c0e947e303fe4a696c10b501dea7a9f49d4e876c/pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007", size = 158777, upload-time = "2025-09-25T21:33:15.55Z" }, ] [[package]] @@ -1937,8 +1505,7 @@ name = "rich" version = "14.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "markdown-it-py", version = "3.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "markdown-it-py", version = "4.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "markdown-it-py" }, { name = "pygments" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b3/c6/f3b320c27991c46f43ee9d856302c70dc2d0fb2dba4842ff739d5f46b393/rich-14.3.3.tar.gz", hash = "sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b", size = 230582, upload-time = "2026-02-19T17:23:12.474Z" } @@ -1946,35 +1513,14 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl", hash = "sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d", size = 310458, upload-time = "2026-02-19T17:23:13.732Z" }, ] -[[package]] -name = "secretstorage" -version = "3.3.3" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "cryptography", version = "45.0.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jeepney", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/53/a4/f48c9d79cb507ed1373477dbceaba7401fd8a23af63b837fa61f1dcd3691/SecretStorage-3.3.3.tar.gz", hash = "sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77", size = 19739, upload-time = "2022-08-13T16:22:46.976Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl", hash = "sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99", size = 15221, upload-time = "2022-08-13T16:22:44.457Z" }, -] - [[package]] name = "secretstorage" version = "3.5.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version == '3.11.*'", - "python_full_version == '3.10.*'", -] dependencies = [ - { name = "cryptography", version = "45.0.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "cryptography", version = "45.0.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "cryptography", version = "46.0.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "jeepney", marker = "python_full_version >= '3.10'" }, + { name = "jeepney" }, ] sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } wheels = [ @@ -2071,7 +1617,6 @@ version = "6.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "id" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "keyring", marker = "platform_machine != 'ppc64le' and platform_machine != 's390x'" }, { name = "packaging" }, { name = "readme-renderer" }, @@ -2169,15 +1714,12 @@ name = "virtualenv" version = "20.33.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version == '3.10.*'", - "python_full_version < '3.10'", + "python_full_version < '3.11'", ] dependencies = [ { name = "distlib", marker = "python_full_version < '3.11'" }, - { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, - { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "filelock", marker = "python_full_version < '3.11'" }, + { name = "platformdirs", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/8b/60/4f20960df6c7b363a18a55ab034c8f2bcd5d9770d1f94f9370ec104c1855/virtualenv-20.33.1.tar.gz", hash = "sha256:1b44478d9e261b3fb8baa5e74a0ca3bc0e05f21aa36167bf9cbf850e542765b8", size = 6082160, upload-time = "2025-08-05T16:10:55.605Z" } wheels = [ @@ -2194,8 +1736,8 @@ resolution-markers = [ ] dependencies = [ { name = "distlib", marker = "python_full_version >= '3.11'" }, - { name = "filelock", version = "3.25.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "platformdirs", version = "4.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "filelock", marker = "python_full_version >= '3.11'" }, + { name = "platformdirs", marker = "python_full_version >= '3.11'" }, { name = "python-discovery", marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/aa/92/58199fe10049f9703c2666e809c4f686c54ef0a68b0f6afccf518c0b1eb9/virtualenv-21.2.0.tar.gz", hash = "sha256:1720dc3a62ef5b443092e3f499228599045d7fea4c79199770499df8becf9098", size = 5840618, upload-time = "2026-03-09T17:24:38.013Z" } @@ -2239,16 +1781,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/14/26/93a9fa02c6f257df54d7570dfe8011995138118d11939a4ecd82cb849613/wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c", size = 91738, upload-time = "2023-11-09T06:32:20.989Z" }, { url = "https://files.pythonhosted.org/packages/a2/5b/4660897233eb2c8c4de3dc7cefed114c61bacb3c28327e64150dc44ee2f6/wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc", size = 35568, upload-time = "2023-11-09T06:32:22.715Z" }, { url = "https://files.pythonhosted.org/packages/5c/cc/8297f9658506b224aa4bd71906447dea6bb0ba629861a758c28f67428b91/wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8", size = 37653, upload-time = "2023-11-09T06:32:24.533Z" }, - { url = "https://files.pythonhosted.org/packages/70/cc/b92e1da2cad6a9f8ee481000ece07a35e3b24e041e60ff8b850c079f0ebf/wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2", size = 37314, upload-time = "2023-11-09T06:33:12.535Z" }, - { url = "https://files.pythonhosted.org/packages/4a/cc/3402bcc897978be00fef608cd9e3e39ec8869c973feeb5e1e277670e5ad2/wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb", size = 38162, upload-time = "2023-11-09T06:33:14.102Z" }, - { url = "https://files.pythonhosted.org/packages/28/d3/4f079f649c515727c127c987b2ec2e0816b80d95784f2d28d1a57d2a1029/wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8", size = 80235, upload-time = "2023-11-09T06:33:15.446Z" }, - { url = "https://files.pythonhosted.org/packages/a3/1c/226c2a4932e578a2241dcb383f425995f80224b446f439c2e112eb51c3a6/wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c", size = 72553, upload-time = "2023-11-09T06:33:17.315Z" }, - { url = "https://files.pythonhosted.org/packages/b1/e7/459a8a4f40f2fa65eb73cb3f339e6d152957932516d18d0e996c7ae2d7ae/wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a", size = 80129, upload-time = "2023-11-09T06:33:18.858Z" }, - { url = "https://files.pythonhosted.org/packages/da/6f/6d0b3c4983f1fc764a422989dabc268ee87d937763246cd48aa92f1eed1e/wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664", size = 84550, upload-time = "2023-11-09T06:33:20.267Z" }, - { url = "https://files.pythonhosted.org/packages/96/e8/27ef35cf61e5147c1c3abcb89cfbb8d691b2bb8364803fcc950140bc14d8/wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f", size = 77352, upload-time = "2023-11-09T06:33:22.041Z" }, - { url = "https://files.pythonhosted.org/packages/b6/ad/7a0766341081bfd9f18a7049e4d6d45586ae5c5bb0a640f05e2f558e849c/wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537", size = 84626, upload-time = "2023-11-09T06:33:23.634Z" }, - { url = "https://files.pythonhosted.org/packages/09/43/b26852e9c45a1aac0d14b1080b25b612fa840ba99739c5fc55db07b7ce08/wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3", size = 35327, upload-time = "2023-11-09T06:33:25.43Z" }, - { url = "https://files.pythonhosted.org/packages/74/f2/96ed140b08743f7f68d5bda35a2a589600781366c3da96f056043d258b1a/wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35", size = 37526, upload-time = "2023-11-09T06:33:26.882Z" }, { url = "https://files.pythonhosted.org/packages/ff/21/abdedb4cdf6ff41ebf01a74087740a709e2edb146490e4d9beea054b0b7a/wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1", size = 23362, upload-time = "2023-11-09T06:33:28.271Z" }, ]