diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index b0e5dc6..4c5acda 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -12,6 +12,8 @@ on: - cron: "33 5 * * *" workflow_dispatch: +permissions: {} + jobs: list: runs-on: ubuntu-latest @@ -21,12 +23,13 @@ jobs: - uses: actions/checkout@v4 with: persist-credentials: false - - name: Set up nox - uses: wntrblm/nox@2024.10.09 + - uses: astral-sh/setup-uv@445689ea25e0de0a23313031f5fe577c74ae45a1 + with: + enable-cache: ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning] - id: noxenvs-matrix run: | echo >>$GITHUB_OUTPUT noxenvs=$( - nox --list-sessions --json | jq '[.[].session]' + uvx nox --list-sessions --json | jq '[.[].session]' ) test: @@ -49,7 +52,7 @@ jobs: run: brew install enchant if: runner.os == 'macOS' && startsWith(matrix.noxenv, 'docs') - name: Set up Python - uses: quansight-labs/setup-python@v5 + uses: actions/setup-python@v5 with: python-version: | 3.9 @@ -58,29 +61,33 @@ jobs: 3.12 3.13 3.13t + 3.14 + 3.14t pypy3.9 pypy3.10 + pypy3.11 allow-prereleases: true - - name: Set up uv - uses: hynek/setup-cached-uv@v2 - - name: Set up nox - uses: wntrblm/nox@2024.10.09 - + - uses: astral-sh/setup-uv@445689ea25e0de0a23313031f5fe577c74ae45a1 + with: + enable-cache: ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning] - name: Run nox - run: nox -s "${{ matrix.noxenv }}" + run: uvx nox -s "${{ matrix.noxenv }}" -- ${{ matrix.posargs }} # zizmor: ignore[template-injection] manylinux: needs: test runs-on: ubuntu-latest + strategy: + fail-fast: false matrix: target: [x86_64, x86, aarch64, armv7, s390x, ppc64le] + steps: - uses: actions/checkout@v4 with: persist-credentials: false - - uses: quansight-labs/setup-python@v5 + - uses: actions/setup-python@v5 with: python-version: | 3.9 @@ -89,15 +96,18 @@ jobs: 3.12 3.13 3.13t + 3.14 + 3.14t pypy3.9 pypy3.10 + pypy3.11 allow-prereleases: true - name: Build wheels - uses: PyO3/maturin-action@v1 + uses: PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3 with: target: ${{ matrix.target }} - args: --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13 3.13t pypy3.9 pypy3.10' - sccache: "true" + args: --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13 3.13t 3.14 3.14t pypy3.9 pypy3.10 pypy3.11' + sccache: ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning] manylinux: auto - name: Upload wheels uses: actions/upload-artifact@v4 @@ -108,17 +118,20 @@ jobs: musllinux: needs: test runs-on: ubuntu-latest + strategy: + fail-fast: false matrix: target: - aarch64-unknown-linux-musl - i686-unknown-linux-musl - x86_64-unknown-linux-musl + steps: - uses: actions/checkout@v4 with: persist-credentials: false - - uses: quansight-labs/setup-python@v5 + - uses: actions/setup-python@v5 with: python-version: | 3.9 @@ -127,16 +140,19 @@ jobs: 3.12 3.13 3.13t + 3.14 + 3.14t pypy3.9 pypy3.10 + pypy3.11 allow-prereleases: true - name: Build wheels - uses: PyO3/maturin-action@v1 + uses: PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3 with: target: ${{ matrix.target }} - args: --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13 3.13t pypy3.9 pypy3.10' + args: --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13 3.13t 3.14 3.14t pypy3.9 pypy3.10 pypy3.11' manylinux: musllinux_1_2 - sccache: "true" + sccache: ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning] - name: Upload wheels uses: actions/upload-artifact@v4 with: @@ -146,14 +162,17 @@ jobs: windows: needs: test runs-on: windows-latest + strategy: + fail-fast: false matrix: target: [x64, x86] # x86 is not supported by pypy + steps: - uses: actions/checkout@v4 with: persist-credentials: false - - uses: quansight-labs/setup-python@v5 + - uses: actions/setup-python@v5 with: python-version: | 3.9 @@ -161,43 +180,109 @@ jobs: 3.11 3.12 3.13 + 3.14 ${{ matrix.target == 'x64' && 'pypy3.9' || '' }} ${{ matrix.target == 'x64' && 'pypy3.10' || '' }} allow-prereleases: true architecture: ${{ matrix.target }} - name: Build wheels - uses: PyO3/maturin-action@v1 + uses: PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3 + with: + target: ${{ matrix.target }} + args: --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13 3.14' --interpreter ${{ matrix.target == 'x64' && 'pypy3.9 pypy3.10' || '' }} + sccache: ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning] + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: dist-${{ github.job }}-${{ matrix.target }} + path: dist + + windows-arm: + needs: test + runs-on: windows-11-arm + + strategy: + fail-fast: false + matrix: + target: + - aarch64-pc-windows-msvc + + steps: + - uses: actions/checkout@v4 + with: + persist-credentials: false + # Install each python version seperatly so that the paths can be passed to maturin. (otherwise finds pre-installed x64 versions) + - uses: actions/setup-python@v5 + id: cp311 + with: + python-version: 3.11 + allow-prereleases: true + architecture: arm64 + - uses: actions/setup-python@v5 + id: cp312 + with: + python-version: 3.12 + allow-prereleases: true + architecture: arm64 + - uses: actions/setup-python@v5 + id: cp313 + with: + python-version: 3.13 + allow-prereleases: true + architecture: arm64 + - uses: actions/setup-python@v5 + id: cp314 + with: + python-version: 3.14 + allow-prereleases: true + architecture: arm64 + # rust toolchain is not currently installed on windopws arm64 images: https://github.com/actions/partner-runner-images/issues/77 + - name: Setup rust + id: setup-rust + run: | + Invoke-WebRequest https://static.rust-lang.org/rustup/dist/aarch64-pc-windows-msvc/rustup-init.exe -OutFile .\rustup-init.exe + .\rustup-init.exe -y + Add-Content $env:GITHUB_PATH "$env:USERPROFILE\.cargo\bin" + - name: Build wheels + uses: PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3 with: target: ${{ matrix.target }} - args: --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13' --interpreter ${{ matrix.target == 'x64' && 'pypy3.9 pypy3.10' || '' }} - sccache: "true" + args: --release --out dist --interpreter ${{ steps.cp311.outputs.python-path }} ${{ steps.cp312.outputs.python-path }} ${{ steps.cp313.outputs.python-path }} ${{ steps.cp314.outputs.python-path }} + sccache: ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning] - name: Upload wheels uses: actions/upload-artifact@v4 with: name: dist-${{ github.job }}-${{ matrix.target }} path: dist + # free-threaded and normal builds share a site-packages folder on Windows so + # we must build free-threaded separately windows-free-threaded: needs: test runs-on: windows-latest + strategy: + fail-fast: false matrix: target: [x64, x86] # x86 is not supported by pypy + steps: - uses: actions/checkout@v4 with: persist-credentials: false - - uses: quansight-labs/setup-python@v5 + - uses: actions/setup-python@v5 with: - python-version: 3.13t + python-version: | + 3.13t + 3.14t allow-prereleases: true architecture: ${{ matrix.target }} - name: Build wheels - uses: PyO3/maturin-action@v1 + uses: PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3 with: target: ${{ matrix.target }} - args: --release --out dist --interpreter '3.13t' - sccache: "true" + args: --release --out dist --interpreter '3.13t 3.14t' + sccache: ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning] - name: Upload wheels uses: actions/upload-artifact@v4 with: @@ -207,14 +292,17 @@ jobs: macos: needs: test runs-on: macos-latest + strategy: + fail-fast: false matrix: target: [x86_64, aarch64] + steps: - uses: actions/checkout@v4 with: persist-credentials: false - - uses: quansight-labs/setup-python@v5 + - uses: actions/setup-python@v5 with: python-version: | 3.9 @@ -223,15 +311,18 @@ jobs: 3.12 3.13 3.13t + 3.14 + 3.14t pypy3.9 pypy3.10 + pypy3.11 allow-prereleases: true - name: Build wheels - uses: PyO3/maturin-action@v1 + uses: PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3 with: target: ${{ matrix.target }} - args: --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13 3.13t pypy3.9 pypy3.10' - sccache: "true" + args: --release --out dist --interpreter '3.9 3.10 3.11 3.12 3.13 3.13t 3.14 3.14t pypy3.9 pypy3.10 pypy3.11' + sccache: ${{ github.ref_type != 'tag' }} # zizmor: ignore[cache-poisoning] - name: Upload wheels uses: actions/upload-artifact@v4 with: @@ -249,7 +340,7 @@ jobs: with: python-version: 3.13 - name: Build an sdist - uses: PyO3/maturin-action@v1 + uses: PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3 with: command: sdist args: --out dist @@ -260,7 +351,8 @@ jobs: path: dist release: - needs: [manylinux, musllinux, windows, windows-free-threaded, macos] + needs: + [manylinux, musllinux, windows, windows-arm, windows-free-threaded, macos] runs-on: ubuntu-latest if: "startsWith(github.ref, 'refs/tags/')" environment: @@ -276,13 +368,13 @@ jobs: pattern: dist-* merge-multiple: true - name: Publish to PyPI - uses: PyO3/maturin-action@v1 + uses: PyO3/maturin-action@e10f6c464b90acceb5f640d31beda6d586ba7b4a # v1.49.3 with: command: upload args: --non-interactive --skip-existing * - name: Create a GitHub Release if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8 with: files: | * diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml index bdba878..e5bb522 100644 --- a/.github/workflows/zizmor.yml +++ b/.github/workflows/zizmor.yml @@ -6,6 +6,8 @@ on: pull_request: branches: ["**"] +permissions: {} + jobs: zizmor: runs-on: ubuntu-latest @@ -14,21 +16,19 @@ jobs: security-events: write steps: - - name: Checkout repository - uses: actions/checkout@v4 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - - name: Setup Rust - uses: actions-rust-lang/setup-rust-toolchain@v1 - - name: Install zizmor - run: cargo install zizmor + + - uses: astral-sh/setup-uv@445689ea25e0de0a23313031f5fe577c74ae45a1 # v6.3.0 - name: Run zizmor 🌈 - run: zizmor --format sarif . > results.sarif + run: uvx zizmor --format=sarif . > results.sarif + env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload SARIF file - uses: github/codeql-action/upload-sarif@v3 + uses: github/codeql-action/upload-sarif@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0 with: sarif_file: results.sarif category: zizmor diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 152c646..70a87a4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -25,7 +25,7 @@ repos: - id: fmt - id: clippy - repo: https://github.com/psf/black - rev: 24.10.0 + rev: 25.1.0 hooks: - id: black - repo: https://github.com/pre-commit/mirrors-prettier @@ -33,6 +33,6 @@ repos: hooks: - id: prettier - repo: https://github.com/woodruffw/zizmor - rev: v0.6.0 + rev: v0.8.0 hooks: - id: zizmor diff --git a/Cargo.lock b/Cargo.lock index 2ad0d95..ab98755 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,21 +13,18 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "cc" -version = "1.0.90" +version = "1.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "d0fc897dc1e865cc67c0e05a836d9d3f1df3cbe442aa4a9473b18e12624a4951" +dependencies = [ + "shlex", +] [[package]] name = "heck" @@ -37,15 +34,15 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "indoc" -version = "2.0.5" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "memoffset" @@ -58,32 +55,31 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "portable-atomic" -version = "1.6.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] [[package]] name = "pyo3" -version = "0.23.3" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e484fd2c8b4cb67ab05a318f1fd6fa8f199fcc30819f08f07d200809dba26c15" +checksum = "8970a78afe0628a3e3430376fc5fd76b6b45c4d43360ffd6cdd40bdde72b682a" dependencies = [ - "cfg-if", "indoc", "libc", "memoffset", @@ -97,9 +93,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.23.3" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc0e0469a84f208e20044b98965e1561028180219e35352a2afaf2b942beff3b" +checksum = "458eb0c55e7ece017adeba38f2248ff3ac615e53660d7c71a238d7d2a01c7598" dependencies = [ "once_cell", "python3-dll-a", @@ -108,9 +104,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.23.3" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1547a7f9966f6f1a0f0227564a9945fe36b90da5a93b3933fc3dc03fae372d" +checksum = "7114fe5457c61b276ab77c5055f206295b812608083644a5c5b2640c3102565c" dependencies = [ "libc", "pyo3-build-config", @@ -118,9 +114,9 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.23.3" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb6da8ec6fa5cedd1626c886fc8749bdcbb09424a86461eb8cdf096b7c33257" +checksum = "a8725c0a622b374d6cb051d11a0983786448f7785336139c3c94f5aa6bef7e50" dependencies = [ "proc-macro2", "pyo3-macros-backend", @@ -130,9 +126,9 @@ dependencies = [ [[package]] name = "pyo3-macros-backend" -version = "0.23.3" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38a385202ff5a92791168b1136afae5059d3ac118457bb7bc304c197c2d33e7d" +checksum = "4109984c22491085343c05b0dbc54ddc405c3cf7b4374fc533f5c3313a572ccc" dependencies = [ "heck", "proc-macro2", @@ -143,45 +139,51 @@ dependencies = [ [[package]] name = "python3-dll-a" -version = "0.2.11" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b9e268ee1be609e93a13eb06839f68f67e5fe0fb4049834d261c2d5091c1b6d" +checksum = "d381ef313ae70b4da5f95f8a4de773c6aa5cd28f73adec4b4a31df70b66780d8" dependencies = [ "cc", ] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] [[package]] name = "rpds" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0e15515d3ce3313324d842629ea4905c25a13f81953eadb88f85516f59290a4" +checksum = "a7f89f654d51fffdd6026289d07d1fd523244d46ae0a8bc22caa6dd7f9e8cb0b" dependencies = [ "archery", ] [[package]] name = "rpds-py" -version = "0.22.3" +version = "0.25.1" dependencies = [ "archery", "pyo3", "rpds", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "syn" -version = "2.0.69" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201fcda3845c23e8212cd466bfebf0bd20694490fc0356ae8e428e0824a915a6" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", @@ -190,24 +192,24 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.14" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" +checksum = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a" [[package]] name = "triomphe" -version = "0.1.13" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6631e42e10b40c0690bf92f404ebcfe6e1fdb480391d15f17cc8e96eeed5369" +checksum = "ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unindent" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" +checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" diff --git a/Cargo.toml b/Cargo.toml index 081662d..d797d4c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rpds-py" -version = "0.22.3" +version = "0.25.1" edition = "2021" [lib] @@ -8,11 +8,11 @@ name = "rpds" crate-type = ["cdylib"] [dependencies] -rpds = "1.1.0" +rpds = "1.1.1" archery = "1.2.1" [dependencies.pyo3] -version = "0.23.3" +version = "0.25.1" # To build extension for PyPy on Windows, "generate-import-lib" is needed: # https://github.com/PyO3/maturin-action/issues/267#issuecomment-2106844429 features = ["extension-module", "generate-import-lib"] diff --git a/docs/requirements.txt b/docs/requirements.txt index cad8ef1..3171c85 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -2,13 +2,13 @@ # uv pip compile --output-file /Users/julian/Development/rpds.py/docs/requirements.txt docs/requirements.in alabaster==1.0.0 # via sphinx -babel==2.16.0 +babel==2.17.0 # via sphinx -beautifulsoup4==4.12.3 +beautifulsoup4==4.13.4 # via furo -certifi==2024.8.30 +certifi==2025.4.26 # via requests -charset-normalizer==3.4.0 +charset-normalizer==3.4.2 # via requests docutils==0.21.2 # via sphinx @@ -18,15 +18,15 @@ idna==3.10 # via requests imagesize==1.4.1 # via sphinx -jinja2==3.1.4 +jinja2==3.1.6 # via sphinx markupsafe==3.0.2 # via jinja2 -packaging==24.1 +packaging==25.0 # via sphinx pyenchant==3.2.2 # via sphinxcontrib-spelling -pygments==2.18.0 +pygments==2.19.1 # via # furo # pygments-github-lexers @@ -34,14 +34,18 @@ pygments==2.18.0 pygments-github-lexers==0.0.5 # via -r docs/requirements.in requests==2.32.3 + # via + # sphinx + # sphinxcontrib-spelling +roman-numerals-py==3.1.0 # via sphinx -file:.#egg=rpds-py +rpds-py @ file:.#egg=rpds-py # via -r docs/requirements.in -snowballstemmer==2.2.0 +snowballstemmer==3.0.1 # via sphinx -soupsieve==2.6 +soupsieve==2.7 # via beautifulsoup4 -sphinx==8.1.3 +sphinx==8.2.3 # via # -r docs/requirements.in # furo @@ -65,11 +69,13 @@ sphinxcontrib-qthelp==2.0.0 # via sphinx sphinxcontrib-serializinghtml==2.0.0 # via sphinx -sphinxcontrib-spelling==8.0.0 +sphinxcontrib-spelling==8.0.1 # via -r docs/requirements.in -sphinxext-opengraph==0.9.1 +sphinxext-opengraph==0.10.0 # via -r docs/requirements.in -url-py==0.13.0 +typing-extensions==4.13.2 + # via beautifulsoup4 +url-py==0.14.1 # via -r docs/requirements.in -urllib3==2.2.3 +urllib3==2.4.0 # via requests diff --git a/noxfile.py b/noxfile.py index 0ec7240..8b9d55d 100644 --- a/noxfile.py +++ b/noxfile.py @@ -17,7 +17,18 @@ (path.parent / f"{path.stem}.in", path) for path in REQUIREMENTS.values() ] -SUPPORTED = ["3.9", "3.10", "pypy3.10", "3.11", "3.12", "3.13", "3.13t"] +SUPPORTED = [ + "3.9", + "3.10", + "pypy3.10", + "3.11", + "pypy3.11", + "3.12", + "3.13", + "3.13t", + "3.14", + "3.14t", +] LATEST = "3.13" nox.options.default_venv_backend = "uv|virtualenv" diff --git a/pyproject.toml b/pyproject.toml index 26c56df..bb66591 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,6 +7,8 @@ name = "rpds-py" description = "Python bindings to Rust's persistent data structures (rpds)" requires-python = ">=3.9" readme = "README.rst" +license = "MIT" +license-files = ["LICENSE"] keywords = ["data structures", "rust", "persistent"] authors = [ { name = "Julian Berman", email = "Julian+rpds@GrayVines.com" }, @@ -14,7 +16,6 @@ authors = [ classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", - "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Rust", "Programming Language :: Python :: 3.9", @@ -22,6 +23,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python :: 3", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", @@ -59,8 +61,8 @@ skip_covered = true [tool.doc8] ignore = [ - "D000", # see PyCQA/doc8#125 - "D001", # one sentence per line, so max length doesn't make sense + "D000", # see PyCQA/doc8#125 + "D001", # one sentence per line, so max length doesn't make sense ] [tool.maturin] @@ -83,6 +85,7 @@ ignore = [ "A001", # It's fine to shadow builtins "A002", "A003", + "A005", "ARG", # This is all wrong whenever an interface is involved "ANN", # Just let the type checker do this "B006", # Mutable arguments require care but are OK if you don't abuse them diff --git a/src/lib.rs b/src/lib.rs index c95c40a..9f266a8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,7 +2,7 @@ use pyo3::exceptions::{PyIndexError, PyTypeError}; use pyo3::pyclass::CompareOp; use pyo3::types::{PyDict, PyIterator, PyTuple, PyType}; use pyo3::{exceptions::PyKeyError, types::PyMapping, types::PyTupleMethods}; -use pyo3::{prelude::*, AsPyPointer, BoundObject, PyTypeInfo}; +use pyo3::{prelude::*, BoundObject, PyTypeInfo}; use rpds::{ HashTrieMap, HashTrieMapSync, HashTrieSet, HashTrieSetSync, List, ListSync, Queue, QueueSync, }; @@ -67,12 +67,6 @@ impl Key { } } -unsafe impl AsPyPointer for Key { - fn as_ptr(&self) -> *mut pyo3::ffi::PyObject { - self.inner.as_ptr() - } -} - impl<'source> FromPyObject<'source> for Key { fn extract_bound(ob: &Bound<'source, PyAny>) -> PyResult { Ok(Key { diff --git a/tests/requirements.txt b/tests/requirements.txt index 0a7421a..6d2db2e 100644 --- a/tests/requirements.txt +++ b/tests/requirements.txt @@ -1,16 +1,16 @@ # This file was autogenerated by uv via the following command: -# uv pip compile --output-file tests/requirements.txt tests/requirements.in -iniconfig==2.0.0 +# uv pip compile --output-file /Users/julian/Development/rpds.py/tests/requirements.txt tests/requirements.in +iniconfig==2.1.0 # via pytest -packaging==24.1 +packaging==25.0 # via pytest -pluggy==1.5.0 +pluggy==1.6.0 # via pytest -pytest==8.3.3 +pytest==8.3.5 # via # -r tests/requirements.in # pytest-run-parallel -pytest-run-parallel==0.2.0 +pytest-run-parallel==0.4.2 # via -r tests/requirements.in -file:.#egg=rpds-py +rpds-py @ file:.#egg=rpds-py # via -r tests/requirements.in