Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-zxcvbn-rs-py for 
openSUSE:Factory checked in at 2025-12-09 12:53:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-zxcvbn-rs-py (Old)
 and      /work/SRC/openSUSE:Factory/.python-zxcvbn-rs-py.new.1939 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-zxcvbn-rs-py"

Tue Dec  9 12:53:29 2025 rev:3 rq:1321659 version:0.3.0+0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-zxcvbn-rs-py/python-zxcvbn-rs-py.changes  
2024-11-27 22:16:57.622578769 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-zxcvbn-rs-py.new.1939/python-zxcvbn-rs-py.changes
        2025-12-09 12:59:52.815999919 +0100
@@ -1,0 +2,8 @@
+Tue Dec  9 06:21:00 UTC 2025 - Steve Kowalik <[email protected]>
+
+- Update to 0.3.0+0:
+  * Drop Python 3.9 support
+  * Add Python 3.14 support
+- Actually run the testsuite.
+
+-------------------------------------------------------------------

Old:
----
  python-zxcvbn-rs-py-0.1.1+5.obscpio

New:
----
  python-zxcvbn-rs-py-0.3.0+0.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-zxcvbn-rs-py.spec ++++++
--- /var/tmp/diff_new_pack.1VDKtC/_old  2025-12-09 12:59:53.600032967 +0100
+++ /var/tmp/diff_new_pack.1VDKtC/_new  2025-12-09 12:59:53.600032967 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-zxcvbn-rs-py
 #
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,16 +16,19 @@
 #
 
 
+%define base_version 0.3.0
 Name:           python-zxcvbn-rs-py
-Version:        0.1.1+5
+Version:        %{base_version}+0
 Release:        0
 Summary:        Python bindings for zxcvbn-rs, the Rust implementation of 
zxcvbn
 License:        MIT
 URL:            https://github.com/fief-dev/zxcvbn-rs-py
 Source0:        %{name}-%{version}.tar.gz
 Source1:        vendor.tar.zst
+BuildRequires:  %{python_module base >= 3.10}
 BuildRequires:  %{python_module maturin >= 1.4.0}
 BuildRequires:  %{python_module pip}
+BuildRequires:  %{python_module pytest}
 BuildRequires:  cargo-packaging
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
@@ -51,10 +54,14 @@
 %pyproject_install
 %python_expand %fdupes %{buildroot}%{$python_sitearch}
 
+%check
+mv zxcvbn_rs_py zxcvbn_rs_py-do-not-import
+%pytest_arch
+mv zxcvbn_rs_py-do-not-import zxcvbn_rs_py
+
 %files %{python_files}
 %license LICENSE
 %doc README.md
 %{python_sitearch}/zxcvbn_rs_py
-%{python_sitearch}/zxcvbn_rs_py-0.1.1.dist-info
-%pycache_only %{python_sitearch}/zxcvbn_rs_py/__pycache__
+%{python_sitearch}/zxcvbn_rs_py-%{base_version}.dist-info
 

++++++ python-zxcvbn-rs-py-0.1.1+5.obscpio -> 
python-zxcvbn-rs-py-0.3.0+0.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-zxcvbn-rs-py-0.1.1+5/.github/workflows/CI.yml 
new/python-zxcvbn-rs-py-0.3.0+0/.github/workflows/CI.yml
--- old/python-zxcvbn-rs-py-0.1.1+5/.github/workflows/CI.yml    2024-11-27 
09:18:00.000000000 +0100
+++ new/python-zxcvbn-rs-py-0.3.0+0/.github/workflows/CI.yml    2025-11-29 
10:45:50.000000000 +0100
@@ -1,4 +1,4 @@
-# This file is autogenerated by maturin v1.7.4
+# This file is autogenerated by maturin v1.10.2
 # To update, run
 #
 #    maturin generate-ci github
@@ -24,17 +24,17 @@
     strategy:
       matrix:
         platform:
-          - runner: ubuntu-latest
+          - runner: ubuntu-22.04
             target: x86_64
-          - runner: ubuntu-latest
+          - runner: ubuntu-22.04
             target: x86
-          - runner: ubuntu-latest
+          - runner: ubuntu-22.04
             target: aarch64
-          - runner: ubuntu-latest
+          - runner: ubuntu-22.04
             target: armv7
-          - runner: ubuntu-latest
+          - runner: ubuntu-22.04
             target: s390x
-          - runner: ubuntu-latest
+          - runner: ubuntu-22.04
             target: ppc64le
     steps:
       - uses: actions/checkout@v4
@@ -46,7 +46,7 @@
         with:
           target: ${{ matrix.platform.target }}
           args: --release --out dist --find-interpreter
-          sccache: 'true'
+          sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
           manylinux: auto
       - name: Upload wheels
         uses: actions/upload-artifact@v4
@@ -59,13 +59,13 @@
     strategy:
       matrix:
         platform:
-          - runner: ubuntu-latest
+          - runner: ubuntu-22.04
             target: x86_64
-          - runner: ubuntu-latest
+          - runner: ubuntu-22.04
             target: x86
-          - runner: ubuntu-latest
+          - runner: ubuntu-22.04
             target: aarch64
-          - runner: ubuntu-latest
+          - runner: ubuntu-22.04
             target: armv7
     steps:
       - uses: actions/checkout@v4
@@ -77,7 +77,7 @@
         with:
           target: ${{ matrix.platform.target }}
           args: --release --out dist --find-interpreter
-          sccache: 'true'
+          sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
           manylinux: musllinux_1_2
       - name: Upload wheels
         uses: actions/upload-artifact@v4
@@ -105,7 +105,7 @@
         with:
           target: ${{ matrix.platform.target }}
           args: --release --out dist --find-interpreter
-          sccache: 'true'
+          sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
       - name: Upload wheels
         uses: actions/upload-artifact@v4
         with:
@@ -117,7 +117,7 @@
     strategy:
       matrix:
         platform:
-          - runner: macos-12
+          - runner: macos-13
             target: x86_64
           - runner: macos-14
             target: aarch64
@@ -131,7 +131,7 @@
         with:
           target: ${{ matrix.platform.target }}
           args: --release --out dist --find-interpreter
-          sccache: 'true'
+          sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
       - name: Upload wheels
         uses: actions/upload-artifact@v4
         with:
@@ -168,11 +168,11 @@
     steps:
       - uses: actions/download-artifact@v4
       - name: Generate artifact attestation
-        uses: actions/attest-build-provenance@v1
+        uses: actions/attest-build-provenance@v2
         with:
           subject-path: 'wheels-*/*'
       - name: Publish to PyPI
-        if: "startsWith(github.ref, 'refs/tags/')"
+        if: ${{ startsWith(github.ref, 'refs/tags/') }}
         uses: PyO3/maturin-action@v1
         env:
           MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-zxcvbn-rs-py-0.1.1+5/.github/workflows/documentation.yml 
new/python-zxcvbn-rs-py-0.3.0+0/.github/workflows/documentation.yml
--- old/python-zxcvbn-rs-py-0.1.1+5/.github/workflows/documentation.yml 
2024-11-27 09:18:00.000000000 +0100
+++ new/python-zxcvbn-rs-py-0.3.0+0/.github/workflows/documentation.yml 
2025-11-29 10:45:50.000000000 +0100
@@ -23,26 +23,25 @@
 
 jobs:
   build:
-
     runs-on: ubuntu-latest
 
     steps:
-    - uses: actions/checkout@v3
-    - name: Set up Python
-      uses: actions/setup-python@v4
-      with:
-        python-version: '3.10'
-    - name: Install dependencies
-      run: |
-        python -m pip install --upgrade pip
-        pip install hatch
-        hatch env create
-    - name: Build
-      run: hatch run docs-build
-    - name: Upload artifact
-      uses: actions/upload-pages-artifact@v1
-      with:
-        path: ./site
+      - uses: actions/checkout@v3
+      - name: Set up Python
+        uses: actions/setup-python@v4
+        with:
+          python-version: "3.10"
+      - name: Install dependencies
+        run: |
+          python -m pip install --upgrade pip
+          pip install hatch
+          hatch env create
+      - name: Build
+        run: hatch run docs-build
+      - name: Upload artifact
+        uses: actions/upload-pages-artifact@v3
+        with:
+          path: ./site
 
   deploy:
     environment:
@@ -53,4 +52,4 @@
     steps:
       - name: Deploy to GitHub Pages
         id: deployment
-        uses: actions/deploy-pages@v1
+        uses: actions/deploy-pages@v4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-zxcvbn-rs-py-0.1.1+5/.github/workflows/test.yml 
new/python-zxcvbn-rs-py-0.3.0+0/.github/workflows/test.yml
--- old/python-zxcvbn-rs-py-0.1.1+5/.github/workflows/test.yml  1970-01-01 
01:00:00.000000000 +0100
+++ new/python-zxcvbn-rs-py-0.3.0+0/.github/workflows/test.yml  2025-11-29 
10:45:50.000000000 +0100
@@ -0,0 +1,29 @@
+name: Build
+
+on: [push, pull_request]
+
+jobs:
+  test:
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        python_version: ["3.10", "3.11", "3.13", "3.14", "3.14t"]
+
+    steps:
+      - uses: actions/checkout@v5
+      - name: Set up Python
+        uses: actions/setup-python@v6
+        with:
+          python-version: ${{ matrix.python_version }}
+      - name: Install hatch
+        run: pip install hatch
+      - name: Install the project
+        run: hatch env create
+      - name: Local build
+        run: hatch run maturin develop
+      - name: Lint and typecheck
+        run: |
+          hatch run lint-check
+      - name: Test
+        run: |
+          hatch run test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-zxcvbn-rs-py-0.1.1+5/Cargo.lock 
new/python-zxcvbn-rs-py-0.3.0+0/Cargo.lock
--- old/python-zxcvbn-rs-py-0.1.1+5/Cargo.lock  2024-11-27 09:18:00.000000000 
+0100
+++ new/python-zxcvbn-rs-py-0.3.0+0/Cargo.lock  2025-11-29 10:45:50.000000000 
+0100
@@ -1,23 +1,17 @@
 # This file is automatically @generated by Cargo.
 # It is not intended for manual editing.
-version = 3
+version = 4
 
 [[package]]
 name = "aho-corasick"
-version = "1.1.3"
+version = "1.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
 dependencies = [
  "memchr",
 ]
 
 [[package]]
-name = "android-tzdata"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
-
-[[package]]
 name = "android_system_properties"
 version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
@@ -28,9 +22,9 @@
 
 [[package]]
 name = "autocfg"
-version = "1.4.0"
+version = "1.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
+checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
 
 [[package]]
 name = "bit-set"
@@ -49,37 +43,37 @@
 
 [[package]]
 name = "bumpalo"
-version = "3.16.0"
+version = "3.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
+checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
 
 [[package]]
 name = "cc"
-version = "1.2.1"
+version = "1.2.48"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47"
+checksum = "c481bdbf0ed3b892f6f806287d72acd515b352a4ec27a208489b8c1bc839633a"
 dependencies = [
+ "find-msvc-tools",
  "shlex",
 ]
 
 [[package]]
 name = "cfg-if"
-version = "1.0.0"
+version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
 
 [[package]]
 name = "chrono"
-version = "0.4.38"
+version = "0.4.42"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
+checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
 dependencies = [
- "android-tzdata",
  "iana-time-zone",
  "js-sys",
  "num-traits",
  "wasm-bindgen",
- "windows-targets",
+ "windows-link",
 ]
 
 [[package]]
@@ -90,9 +84,9 @@
 
 [[package]]
 name = "darling"
-version = "0.20.10"
+version = "0.20.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989"
+checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
 dependencies = [
  "darling_core",
  "darling_macro",
@@ -100,9 +94,9 @@
 
 [[package]]
 name = "darling_core"
-version = "0.20.10"
+version = "0.20.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5"
+checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
 dependencies = [
  "fnv",
  "ident_case",
@@ -114,9 +108,9 @@
 
 [[package]]
 name = "darling_macro"
-version = "0.20.10"
+version = "0.20.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
+checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
 dependencies = [
  "darling_core",
  "quote",
@@ -125,9 +119,9 @@
 
 [[package]]
 name = "deranged"
-version = "0.3.11"
+version = "0.5.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587"
 dependencies = [
  "powerfmt",
 ]
@@ -165,9 +159,9 @@
 
 [[package]]
 name = "either"
-version = "1.13.0"
+version = "1.15.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
+checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
 
 [[package]]
 name = "fancy-regex"
@@ -181,6 +175,12 @@
 ]
 
 [[package]]
+name = "find-msvc-tools"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844"
+
+[[package]]
 name = "fnv"
 version = "1.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
@@ -194,14 +194,15 @@
 
 [[package]]
 name = "iana-time-zone"
-version = "0.1.61"
+version = "0.1.64"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
+checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
 dependencies = [
  "android_system_properties",
  "core-foundation-sys",
  "iana-time-zone-haiku",
  "js-sys",
+ "log",
  "wasm-bindgen",
  "windows-core",
 ]
@@ -223,9 +224,12 @@
 
 [[package]]
 name = "indoc"
-version = "2.0.5"
+version = "2.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5"
+checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
+dependencies = [
+ "rustversion",
+]
 
 [[package]]
 name = "itertools"
@@ -238,10 +242,11 @@
 
 [[package]]
 name = "js-sys"
-version = "0.3.72"
+version = "0.3.83"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9"
+checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8"
 dependencies = [
+ "once_cell",
  "wasm-bindgen",
 ]
 
@@ -253,21 +258,21 @@
 
 [[package]]
 name = "libc"
-version = "0.2.164"
+version = "0.2.177"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f"
+checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
 
 [[package]]
 name = "log"
-version = "0.4.22"
+version = "0.4.28"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
+checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
 
 [[package]]
 name = "memchr"
-version = "2.7.4"
+version = "2.7.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
+checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
 
 [[package]]
 name = "memoffset"
@@ -295,15 +300,15 @@
 
 [[package]]
 name = "once_cell"
-version = "1.20.2"
+version = "1.21.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
+checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
 
 [[package]]
 name = "portable-atomic"
-version = "1.10.0"
+version = "1.11.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6"
+checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
 
 [[package]]
 name = "powerfmt"
@@ -313,20 +318,19 @@
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.92"
+version = "1.0.103"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0"
+checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "pyo3"
-version = "0.23.2"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f54b3d09cbdd1f8c20650b28e7b09e338881482f4aa908a5f61a00c98fba2690"
+checksum = "37a6df7eab65fc7bee654a421404947e10a0f7085b6951bf2ea395f4659fb0cf"
 dependencies = [
- "cfg-if",
  "indoc",
  "libc",
  "memoffset",
@@ -340,19 +344,18 @@
 
 [[package]]
 name = "pyo3-build-config"
-version = "0.23.2"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3015cf985888fe66cfb63ce0e321c603706cd541b7aec7ddd35c281390af45d8"
+checksum = "f77d387774f6f6eec64a004eac0ed525aab7fa1966d94b42f743797b3e395afb"
 dependencies = [
- "once_cell",
  "target-lexicon",
 ]
 
 [[package]]
 name = "pyo3-ffi"
-version = "0.23.2"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6fca7cd8fd809b5ac4eefb89c1f98f7a7651d3739dfb341ca6980090f554c270"
+checksum = "2dd13844a4242793e02df3e2ec093f540d948299a6a77ea9ce7afd8623f542be"
 dependencies = [
  "libc",
  "pyo3-build-config",
@@ -360,9 +363,9 @@
 
 [[package]]
 name = "pyo3-macros"
-version = "0.23.2"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "34e657fa5379a79151b6ff5328d9216a84f55dc93b17b08e7c3609a969b73aa0"
+checksum = "eaf8f9f1108270b90d3676b8679586385430e5c0bb78bb5f043f95499c821a71"
 dependencies = [
  "proc-macro2",
  "pyo3-macros-backend",
@@ -372,9 +375,9 @@
 
 [[package]]
 name = "pyo3-macros-backend"
-version = "0.23.2"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "295548d5ffd95fd1981d2d3cf4458831b21d60af046b729b6fd143b0ba7aee2f"
+checksum = "70a3b2274450ba5288bc9b8c1b69ff569d1d61189d4bff38f8d22e03d17f932b"
 dependencies = [
  "heck",
  "proc-macro2",
@@ -385,18 +388,18 @@
 
 [[package]]
 name = "quote"
-version = "1.0.37"
+version = "1.0.42"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
+checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
 dependencies = [
  "proc-macro2",
 ]
 
 [[package]]
 name = "regex"
-version = "1.11.1"
+version = "1.12.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
+checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -406,9 +409,9 @@
 
 [[package]]
 name = "regex-automata"
-version = "0.4.9"
+version = "0.4.13"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
+checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -417,24 +420,39 @@
 
 [[package]]
 name = "regex-syntax"
-version = "0.8.5"
+version = "0.8.8"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
+checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
+
+[[package]]
+name = "rustversion"
+version = "1.0.22"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
 
 [[package]]
 name = "serde"
-version = "1.0.215"
+version = "1.0.228"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
+dependencies = [
+ "serde_core",
+]
+
+[[package]]
+name = "serde_core"
+version = "1.0.228"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f"
+checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.215"
+version = "1.0.228"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0"
+checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -455,9 +473,9 @@
 
 [[package]]
 name = "syn"
-version = "2.0.89"
+version = "2.0.111"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e"
+checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -466,15 +484,15 @@
 
 [[package]]
 name = "target-lexicon"
-version = "0.12.16"
+version = "0.13.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
+checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c"
 
 [[package]]
 name = "time"
-version = "0.3.36"
+version = "0.3.44"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
+checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
 dependencies = [
  "deranged",
  "num-conv",
@@ -485,53 +503,40 @@
 
 [[package]]
 name = "time-core"
-version = "0.1.2"
+version = "0.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.14"
+version = "1.0.22"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
+checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
 
 [[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"
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.95"
+version = "0.2.106"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e"
+checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd"
 dependencies = [
  "cfg-if",
  "once_cell",
+ "rustversion",
  "wasm-bindgen-macro",
-]
-
-[[package]]
-name = "wasm-bindgen-backend"
-version = "0.2.95"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358"
-dependencies = [
- "bumpalo",
- "log",
- "once_cell",
- "proc-macro2",
- "quote",
- "syn",
  "wasm-bindgen-shared",
 ]
 
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.95"
+version = "0.2.106"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56"
+checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3"
 dependencies = [
  "quote",
  "wasm-bindgen-macro-support",
@@ -539,28 +544,31 @@
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.95"
+version = "0.2.106"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68"
+checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40"
 dependencies = [
+ "bumpalo",
  "proc-macro2",
  "quote",
  "syn",
- "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.95"
+version = "0.2.106"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d"
+checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4"
+dependencies = [
+ "unicode-ident",
+]
 
 [[package]]
 name = "web-sys"
-version = "0.3.72"
+version = "0.3.83"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112"
+checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac"
 dependencies = [
  "js-sys",
  "wasm-bindgen",
@@ -568,76 +576,62 @@
 
 [[package]]
 name = "windows-core"
-version = "0.52.0"
+version = "0.62.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
 dependencies = [
- "windows-targets",
+ "windows-implement",
+ "windows-interface",
+ "windows-link",
+ "windows-result",
+ "windows-strings",
 ]
 
 [[package]]
-name = "windows-targets"
-version = "0.52.6"
+name = "windows-implement"
+version = "0.60.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
 dependencies = [
- "windows_aarch64_gnullvm",
- "windows_aarch64_msvc",
- "windows_i686_gnu",
- "windows_i686_gnullvm",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_gnullvm",
- "windows_x86_64_msvc",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
-
-[[package]]
-name = "windows_i686_gnullvm"
-version = "0.52.6"
+name = "windows-interface"
+version = "0.59.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.52.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
 
 [[package]]
-name = "windows_x86_64_gnu"
-version = "0.52.6"
+name = "windows-link"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
 
 [[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.52.6"
+name = "windows-result"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
+dependencies = [
+ "windows-link",
+]
 
 [[package]]
-name = "windows_x86_64_msvc"
-version = "0.52.6"
+name = "windows-strings"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
+dependencies = [
+ "windows-link",
+]
 
 [[package]]
 name = "zxcvbn"
@@ -658,7 +652,7 @@
 
 [[package]]
 name = "zxcvbn-rs-py"
-version = "0.1.1"
+version = "0.3.0"
 dependencies = [
  "pyo3",
  "zxcvbn",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-zxcvbn-rs-py-0.1.1+5/Cargo.toml 
new/python-zxcvbn-rs-py-0.3.0+0/Cargo.toml
--- old/python-zxcvbn-rs-py-0.1.1+5/Cargo.toml  2024-11-27 09:18:00.000000000 
+0100
+++ new/python-zxcvbn-rs-py-0.3.0+0/Cargo.toml  2025-11-29 10:45:50.000000000 
+0100
@@ -1,6 +1,6 @@
 [package]
 name = "zxcvbn-rs-py"
-version = "0.1.1"
+version = "0.3.0"
 edition = "2021"
 
 # See more keys and their definitions at 
https://doc.rust-lang.org/cargo/reference/manifest.html
@@ -9,5 +9,5 @@
 crate-type = ["cdylib"]
 
 [dependencies]
-pyo3 = "^0.23"
+pyo3 = "^0.27"
 zxcvbn = "3.1.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-zxcvbn-rs-py-0.1.1+5/benchmark/benchmark.dat 
new/python-zxcvbn-rs-py-0.3.0+0/benchmark/benchmark.dat
--- old/python-zxcvbn-rs-py-0.1.1+5/benchmark/benchmark.dat     2024-11-27 
09:18:00.000000000 +0100
+++ new/python-zxcvbn-rs-py-0.3.0+0/benchmark/benchmark.dat     2025-11-29 
10:45:50.000000000 +0100
@@ -1,6 +1,6 @@
 "Case" "zxcvbn"        "zxcvbn_rs_py"
-"Length 4"     0.1059061661362648      0.00814666599035263
-"Length 8"     0.33018958382308483     0.044096667785197496
-"Length 16"    0.645416583865881       0.0927467499859631
-"Length 32"    2.0843886681832373      0.3682430819608271
-"Repetition"   0.8810213343240321      0.09670516801998019
+"Length 4"     0.11003966799999998     0.0066710000000000935
+"Length 8"     0.3304292499999999      0.04077016600000016
+"Length 16"    0.6488995840000005      0.08322083399999958
+"Length 32"    2.0829839999999997      0.3269414159999968
+"Repetition"   0.8670672499999981      0.0900664159999991
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-zxcvbn-rs-py-0.1.1+5/benchmark/benchmark.svg 
new/python-zxcvbn-rs-py-0.3.0+0/benchmark/benchmark.svg
--- old/python-zxcvbn-rs-py-0.1.1+5/benchmark/benchmark.svg     2024-11-27 
09:18:00.000000000 +0100
+++ new/python-zxcvbn-rs-py-0.3.0+0/benchmark/benchmark.svg     2025-11-29 
10:45:50.000000000 +0100
@@ -7,7 +7,7 @@
 >
 
 <title>Gnuplot</title>
-<desc>Produced by GNUPLOT 5.4 patchlevel 6 </desc>
+<desc>Produced by GNUPLOT 6.0 patchlevel 1 </desc>
 
 <g id="gnuplot_canvas">
 
@@ -101,16 +101,6 @@
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
        <path stroke='black'  d='M72.53,18.01 L72.53,742.40 L1254.82,742.40 
L1254.82,18.01 L72.53,18.01 Z  '/></g>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
-       <g transform="translate(19.18,380.21) rotate(270)" stroke="none" 
fill="black" font-family="Arial" font-size="12.00"  text-anchor="middle">
-               <text>Milliseconds</text>
-       </g>
-</g>
-<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
-       <g transform="translate(663.67,791.30)" stroke="none" fill="black" 
font-family="Arial" font-size="12.00"  text-anchor="middle">
-               <text>Test cases</text>
-       </g>
-</g>
-<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
 </g>
        <g id="gnuplot_plot_1"  fill="none"><title>gnuplot_plot_1</title>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
@@ -125,29 +115,29 @@
        <path stroke='rgb(  0,   0,   0)'  d='M1195.48,40.51 L1238.04,40.51 
L1238.04,31.51 L1195.48,31.51 L1195.48,40.51 Z  '/></g>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
        <g stroke='none' shape-rendering='crispEdges'>
-               <polygon fill = 'rgb(148,   0, 211)' points = '203.90,742.40 
269.59,742.40 269.59,711.70 203.90,711.70 '/>
+               <polygon fill = 'rgb(148,   0, 211)' points = '203.90,742.40 
269.59,742.40 269.59,710.51 203.90,710.51 '/>
        </g>
-       <path stroke='rgb(  0,   0,   0)'  d='M203.90,742.40 L203.90,711.71 
L269.58,711.71 L269.58,742.40 L203.90,742.40 Z  '/></g>
+       <path stroke='rgb(  0,   0,   0)'  d='M203.90,742.40 L203.90,710.52 
L269.58,710.52 L269.58,742.40 L203.90,742.40 Z  '/></g>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
        <g stroke='none' shape-rendering='crispEdges'>
-               <polygon fill = 'rgb(148,   0, 211)' points = '400.94,742.40 
466.64,742.40 466.64,646.72 400.94,646.72 '/>
+               <polygon fill = 'rgb(148,   0, 211)' points = '400.94,742.40 
466.64,742.40 466.64,646.65 400.94,646.65 '/>
        </g>
-       <path stroke='rgb(  0,   0,   0)'  d='M400.94,742.40 L400.94,646.73 
L466.63,646.73 L466.63,742.40 L400.94,742.40 Z  '/></g>
+       <path stroke='rgb(  0,   0,   0)'  d='M400.94,742.40 L400.94,646.66 
L466.63,646.66 L466.63,742.40 L400.94,742.40 Z  '/></g>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
        <g stroke='none' shape-rendering='crispEdges'>
-               <polygon fill = 'rgb(148,   0, 211)' points = '597.99,742.40 
663.69,742.40 663.69,555.38 597.99,555.38 '/>
+               <polygon fill = 'rgb(148,   0, 211)' points = '597.99,742.40 
663.69,742.40 663.69,554.37 597.99,554.37 '/>
        </g>
-       <path stroke='rgb(  0,   0,   0)'  d='M597.99,742.40 L597.99,555.39 
L663.68,555.39 L663.68,742.40 L597.99,742.40 Z  '/></g>
+       <path stroke='rgb(  0,   0,   0)'  d='M597.99,742.40 L597.99,554.38 
L663.68,554.38 L663.68,742.40 L597.99,742.40 Z  '/></g>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
        <g stroke='none' shape-rendering='crispEdges'>
-               <polygon fill = 'rgb(148,   0, 211)' points = '795.04,742.40 
860.73,742.40 860.73,138.43 795.04,138.43 '/>
+               <polygon fill = 'rgb(148,   0, 211)' points = '795.04,742.40 
860.73,742.40 860.73,138.83 795.04,138.83 '/>
        </g>
-       <path stroke='rgb(  0,   0,   0)'  d='M795.04,742.40 L795.04,138.44 
L860.72,138.44 L860.72,742.40 L795.04,742.40 Z  '/></g>
+       <path stroke='rgb(  0,   0,   0)'  d='M795.04,742.40 L795.04,138.84 
L860.72,138.84 L860.72,742.40 L795.04,742.40 Z  '/></g>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
        <g stroke='none' shape-rendering='crispEdges'>
-               <polygon fill = 'rgb(148,   0, 211)' points = '992.09,742.40 
1057.78,742.40 1057.78,487.11 992.09,487.11 '/>
+               <polygon fill = 'rgb(148,   0, 211)' points = '992.09,742.40 
1057.78,742.40 1057.78,491.15 992.09,491.15 '/>
        </g>
-       <path stroke='rgb(  0,   0,   0)'  d='M992.09,742.40 L992.09,487.12 
L1057.77,487.12 L1057.77,742.40 L992.09,742.40 Z  '/></g>
+       <path stroke='rgb(  0,   0,   0)'  d='M992.09,742.40 L992.09,491.16 
L1057.77,491.16 L1057.77,742.40 L992.09,742.40 Z  '/></g>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
 </g>
        </g>
@@ -164,29 +154,29 @@
        <path stroke='rgb(  0,   0,   0)'  d='M1195.48,58.51 L1238.04,58.51 
L1238.04,49.51 L1195.48,49.51 L1195.48,58.51 Z  '/></g>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
        <g stroke='none' shape-rendering='crispEdges'>
-               <polygon fill = 'rgb(  0, 158, 115)' points = '269.58,742.40 
335.27,742.40 335.27,740.03 269.58,740.03 '/>
+               <polygon fill = 'rgb(  0, 158, 115)' points = '269.58,742.40 
335.27,742.40 335.27,740.46 269.58,740.46 '/>
        </g>
-       <path stroke='rgb(  0,   0,   0)'  d='M269.58,742.40 L269.58,740.04 
L335.26,740.04 L335.26,742.40 L269.58,742.40 Z  '/></g>
+       <path stroke='rgb(  0,   0,   0)'  d='M269.58,742.40 L269.58,740.47 
L335.26,740.47 L335.26,742.40 L269.58,742.40 Z  '/></g>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
        <g stroke='none' shape-rendering='crispEdges'>
-               <polygon fill = 'rgb(  0, 158, 115)' points = '466.63,742.40 
532.32,742.40 532.32,729.61 466.63,729.61 '/>
+               <polygon fill = 'rgb(  0, 158, 115)' points = '466.63,742.40 
532.32,742.40 532.32,730.58 466.63,730.58 '/>
        </g>
-       <path stroke='rgb(  0,   0,   0)'  d='M466.63,742.40 L466.63,729.62 
L532.31,729.62 L532.31,742.40 L466.63,742.40 Z  '/></g>
+       <path stroke='rgb(  0,   0,   0)'  d='M466.63,742.40 L466.63,730.59 
L532.31,730.59 L532.31,742.40 L466.63,742.40 Z  '/></g>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
        <g stroke='none' shape-rendering='crispEdges'>
-               <polygon fill = 'rgb(  0, 158, 115)' points = '663.68,742.40 
729.37,742.40 729.37,715.52 663.68,715.52 '/>
+               <polygon fill = 'rgb(  0, 158, 115)' points = '663.68,742.40 
729.37,742.40 729.37,718.28 663.68,718.28 '/>
        </g>
-       <path stroke='rgb(  0,   0,   0)'  d='M663.68,742.40 L663.68,715.53 
L729.36,715.53 L729.36,742.40 L663.68,742.40 Z  '/></g>
+       <path stroke='rgb(  0,   0,   0)'  d='M663.68,742.40 L663.68,718.29 
L729.36,718.29 L729.36,742.40 L663.68,742.40 Z  '/></g>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
        <g stroke='none' shape-rendering='crispEdges'>
-               <polygon fill = 'rgb(  0, 158, 115)' points = '860.72,742.40 
926.42,742.40 926.42,635.69 860.72,635.69 '/>
+               <polygon fill = 'rgb(  0, 158, 115)' points = '860.72,742.40 
926.42,742.40 926.42,647.66 860.72,647.66 '/>
        </g>
-       <path stroke='rgb(  0,   0,   0)'  d='M860.72,742.40 L860.72,635.70 
L926.41,635.70 L926.41,742.40 L860.72,742.40 Z  '/></g>
+       <path stroke='rgb(  0,   0,   0)'  d='M860.72,742.40 L860.72,647.67 
L926.41,647.67 L926.41,742.40 L860.72,742.40 Z  '/></g>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
        <g stroke='none' shape-rendering='crispEdges'>
-               <polygon fill = 'rgb(  0, 158, 115)' points = '1057.77,742.40 
1123.46,742.40 1123.46,714.37 1057.77,714.37 '/>
+               <polygon fill = 'rgb(  0, 158, 115)' points = '1057.77,742.40 
1123.46,742.40 1123.46,716.29 1057.77,716.29 '/>
        </g>
-       <path stroke='rgb(  0,   0,   0)'  d='M1057.77,742.40 L1057.77,714.38 
L1123.45,714.38 L1123.45,742.40 L1057.77,742.40 Z  '/></g>
+       <path stroke='rgb(  0,   0,   0)'  d='M1057.77,742.40 L1057.77,716.30 
L1123.45,716.30 L1123.45,742.40 L1057.77,742.40 Z  '/></g>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
 </g>
        </g>
@@ -197,7 +187,17 @@
 <g fill="none" color="black" stroke="black" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
 </g>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
-       <path stroke='black'  d='M72.53,18.01 L72.53,742.40 L1254.82,742.40 
L1254.82,18.01 L72.53,18.01 Z  '/></g>
+       <path stroke='black'  d='M72.53,18.01 L72.53,742.40 L1254.82,742.40 
L1254.82,18.01 L72.53,18.01 Z  '/>  <g transform="translate(19.18,380.21) 
rotate(270.00)" stroke="none" fill="black" font-family="Arial" 
font-size="12.00"  text-anchor="middle">
+               <text>Milliseconds</text>
+       </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
+       <g transform="translate(663.67,791.30)" stroke="none" fill="black" 
font-family="Arial" font-size="12.00"  text-anchor="middle">
+               <text>Test cases</text>
+       </g>
+</g>
+<g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
+</g>
 <g fill="none" color="black" stroke="currentColor" stroke-width="1.00" 
stroke-linecap="butt" stroke-linejoin="miter">
 </g>
 </g>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-zxcvbn-rs-py-0.1.1+5/pyproject.toml 
new/python-zxcvbn-rs-py-0.3.0+0/pyproject.toml
--- old/python-zxcvbn-rs-py-0.1.1+5/pyproject.toml      2024-11-27 
09:18:00.000000000 +0100
+++ new/python-zxcvbn-rs-py-0.3.0+0/pyproject.toml      2025-11-29 
10:45:50.000000000 +0100
@@ -5,11 +5,11 @@
 [project]
 name = "zxcvbn-rs-py"
 authors = [
-  { name = "François Voron", email = "[email protected]" }
+  { name = "François Voron", email = "[email protected]" }
 ]
 description = "Python bindings for zxcvbn-rs, the Rust implementation of 
zxcvbn"
 readme = "README.md"
-requires-python = ">=3.9,<3.14"
+requires-python = ">=3.10"
 dynamic = ["version"]
 classifiers = [
     "Programming Language :: Rust",
@@ -26,7 +26,7 @@
 features = ["pyo3/extension-module"]
 
 [tool.ruff]
-target-version = "py39"
+target-version = "py310"
 
 [tool.ruff.lint]
 extend-select = ["I", "TRY", "UP"]
@@ -35,7 +35,7 @@
 
 [tool.hatch.envs.default]
 installer = "uv"
-python = "3.9"
+python = "3.10"
 dependencies = [
     "maturin",
     "mkdocs-material",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-zxcvbn-rs-py-0.1.1+5/src/lib.rs 
new/python-zxcvbn-rs-py-0.3.0+0/src/lib.rs
--- old/python-zxcvbn-rs-py-0.1.1+5/src/lib.rs  2024-11-27 09:18:00.000000000 
+0100
+++ new/python-zxcvbn-rs-py-0.3.0+0/src/lib.rs  2025-11-29 10:45:50.000000000 
+0100
@@ -27,11 +27,9 @@
         zxcvbn::Score::Two => Ok(Score::TWO),
         zxcvbn::Score::Three => Ok(Score::THREE),
         zxcvbn::Score::Four => Ok(Score::FOUR),
-        _ => {
-            Err(PyRuntimeError::new_err(
-                "zxcvbn entropy score must be in the range 0-4",
-            ))
-        }
+        _ => Err(PyRuntimeError::new_err(
+            "zxcvbn entropy score must be in the range 0-4",
+        )),
     }
 }
 
@@ -334,14 +332,14 @@
     let string_slice: &[&str] = &user_inputs_vec;
     let estimate = zxcvbn::zxcvbn(password, string_slice);
     let feedback: Option<Feedback> = estimate.feedback().map(|f| Feedback {
-            warning: f.warning().map(match_warning),
-            suggestions: f
-                .suggestions()
-                .iter()
-                .map(|s| match_suggestion(*s))
-                .collect::<Vec<Suggestion>>()
-                .to_vec(),
-        });
+        warning: f.warning().map(match_warning),
+        suggestions: f
+            .suggestions()
+            .iter()
+            .map(|s| match_suggestion(*s))
+            .collect::<Vec<Suggestion>>()
+            .to_vec(),
+    });
 
     let crack_times = estimate.crack_times();
     let online_throttling_100_per_hour = 
crack_times.online_throttling_100_per_hour();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-zxcvbn-rs-py-0.1.1+5/tests/test_zxcvbn_rs_py.py 
new/python-zxcvbn-rs-py-0.3.0+0/tests/test_zxcvbn_rs_py.py
--- old/python-zxcvbn-rs-py-0.1.1+5/tests/test_zxcvbn_rs_py.py  2024-11-27 
09:18:00.000000000 +0100
+++ new/python-zxcvbn-rs-py-0.3.0+0/tests/test_zxcvbn_rs_py.py  2025-11-29 
10:45:50.000000000 +0100
@@ -1,14 +1,14 @@
 import pytest
 
-from zxcvbn_rs_py import Score, zxcvbn
+from zxcvbn_rs_py import zxcvbn
 
 
 @pytest.mark.parametrize(
     "password,score",
     [
-        ("correcthorsebatterystaple", Score.FOUR),
+        ("correcthorsebatterystaple", 4),
     ],
 )
-def test_zxcvbn_rs_py(password: str, score: Score) -> None:
+def test_zxcvbn_rs_py(password: str, score: int) -> None:
     r = zxcvbn("correcthorsebatterystaple")
     assert r.score == score
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-zxcvbn-rs-py-0.1.1+5/zxcvbn_rs_py/__init__.py 
new/python-zxcvbn-rs-py-0.3.0+0/zxcvbn_rs_py/__init__.py
--- old/python-zxcvbn-rs-py-0.1.1+5/zxcvbn_rs_py/__init__.py    2024-11-27 
09:18:00.000000000 +0100
+++ new/python-zxcvbn-rs-py-0.3.0+0/zxcvbn_rs_py/__init__.py    2025-11-29 
10:45:50.000000000 +0100
@@ -3,7 +3,6 @@
     CrackTimesSeconds,
     Entropy,
     Feedback,
-    Score,
     Suggestion,
     Warning,
     __version__,
@@ -15,7 +14,6 @@
     "CrackTimesSeconds",
     "Entropy",
     "Feedback",
-    "Score",
     "Suggestion",
     "Warning",
     "__version__",

++++++ python-zxcvbn-rs-py.obsinfo ++++++
--- /var/tmp/diff_new_pack.1VDKtC/_old  2025-12-09 12:59:53.912046120 +0100
+++ /var/tmp/diff_new_pack.1VDKtC/_new  2025-12-09 12:59:53.936047131 +0100
@@ -1,5 +1,5 @@
 name: python-zxcvbn-rs-py
-version: 0.1.1+5
-mtime: 1732695480
-commit: dbaf975bbc606341e2704677936e2bfede5d98a1
+version: 0.3.0+0
+mtime: 1764409550
+commit: ce3cfd6bb67b460e4cb767cb9aa807d83fcabdd3
 

++++++ vendor.tar.zst ++++++
/work/SRC/openSUSE:Factory/python-zxcvbn-rs-py/vendor.tar.zst 
/work/SRC/openSUSE:Factory/.python-zxcvbn-rs-py.new.1939/vendor.tar.zst differ: 
char 7, line 1

Reply via email to