maxminddb-rust 0.7.0__tar.gz → 0.9.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/.github/dependabot.yml +15 -3
  2. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/.github/workflows/benchmark.yml +4 -4
  3. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/.github/workflows/codeql.yml +5 -5
  4. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/.github/workflows/lint.yml +8 -8
  5. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/.github/workflows/release.yml +16 -16
  6. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/.github/workflows/test.yml +16 -11
  7. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/.github/workflows/zizmor.yml +2 -2
  8. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/CHANGELOG.md +70 -1
  9. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/Cargo.lock +45 -52
  10. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/Cargo.toml +3 -3
  11. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/MIGRATION.md +16 -13
  12. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/PKG-INFO +7 -9
  13. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/README.md +3 -4
  14. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/benchmarks/_common.py +5 -5
  15. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/benchmarks/benchmark.py +8 -3
  16. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/benchmarks/benchmark_batch.py +10 -4
  17. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/benchmarks/benchmark_comprehensive.py +14 -10
  18. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/benchmarks/benchmark_parallel.py +7 -3
  19. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/benchmarks/benchmark_path.py +16 -20
  20. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/benchmarks/compare_refs.py +114 -68
  21. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/examples/basic_usage.py +4 -4
  22. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/examples/batch_processing.py +15 -16
  23. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/examples/context_manager.py +16 -15
  24. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/examples/iterator_demo.py +22 -32
  25. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/maxminddb_rust.pyi +54 -74
  26. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/pyproject.toml +26 -5
  27. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/src/decode.rs +107 -16
  28. maxminddb_rust-0.9.0/src/ip.rs +222 -0
  29. maxminddb_rust-0.9.0/src/iterator.rs +526 -0
  30. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/src/lib.rs +166 -154
  31. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/src/open.rs +1 -2
  32. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/src/path.rs +65 -32
  33. maxminddb_rust-0.9.0/tests/bad_data_test.py +179 -0
  34. maxminddb_rust-0.9.0/tests/benchmark_args_test.py +50 -0
  35. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/tests/concurrency_test.py +1 -2
  36. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/tests/get_many_path_test.py +50 -19
  37. maxminddb_rust-0.9.0/tests/get_many_test.py +209 -0
  38. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/tests/introspection_test.py +4 -3
  39. maxminddb_rust-0.9.0/tests/ip_object_test.py +92 -0
  40. maxminddb_rust-0.9.0/tests/iterator_test.py +289 -0
  41. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/tests/maxmind/README.md +20 -0
  42. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/tests/maxmind/reader_test.py +215 -18
  43. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/tests/open_mode_test.py +8 -15
  44. maxminddb_rust-0.9.0/tests/path_test.py +203 -0
  45. maxminddb_rust-0.9.0/tests/resource_guard_test.py +61 -0
  46. maxminddb_rust-0.9.0/uv.lock +235 -0
  47. maxminddb_rust-0.7.0/src/ip.rs +0 -146
  48. maxminddb_rust-0.7.0/src/iterator.rs +0 -188
  49. maxminddb_rust-0.7.0/tests/get_many_test.py +0 -108
  50. maxminddb_rust-0.7.0/tests/path_test.py +0 -139
  51. maxminddb_rust-0.7.0/uv.lock +0 -259
  52. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/.githooks/pre-commit +0 -0
  53. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/.gitignore +0 -0
  54. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/.gitmodules +0 -0
  55. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/CONTRIBUTING.md +0 -0
  56. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/LICENSE +0 -0
  57. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/dev-bin/release.sh +0 -0
  58. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/precious.toml +0 -0
  59. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/py.typed +0 -0
  60. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/src/metadata.rs +0 -0
  61. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/tests/__init__.py +0 -0
  62. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/tests/maxmind/UPSTREAM_LICENSE +0 -0
  63. {maxminddb_rust-0.7.0 → maxminddb_rust-0.9.0}/tests/maxmind/__init__.py +0 -0
@@ -8,7 +8,9 @@ updates:
8
8
  time: "14:00"
9
9
  open-pull-requests-limit: 10
10
10
  cooldown:
11
- default-days: 4
11
+ default-days: 7
12
+ allow:
13
+ - dependency-type: all
12
14
 
13
15
  - package-ecosystem: pip
14
16
  directory: /
@@ -17,7 +19,9 @@ updates:
17
19
  time: "14:00"
18
20
  open-pull-requests-limit: 10
19
21
  cooldown:
20
- default-days: 4
22
+ default-days: 7
23
+ allow:
24
+ - dependency-type: all
21
25
 
22
26
  - package-ecosystem: github-actions
23
27
  directory: /
@@ -25,4 +29,12 @@ updates:
25
29
  interval: daily
26
30
  time: "14:00"
27
31
  cooldown:
28
- default-days: 4
32
+ default-days: 7
33
+
34
+ - package-ecosystem: gitsubmodule
35
+ directory: /
36
+ schedule:
37
+ interval: daily
38
+ time: "14:00"
39
+ cooldown:
40
+ default-days: 7
@@ -38,19 +38,19 @@ jobs:
38
38
 
39
39
  steps:
40
40
  - name: Check out repository
41
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
41
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
42
42
  with:
43
43
  fetch-depth: 0
44
44
  persist-credentials: false
45
45
  submodules: recursive
46
46
 
47
47
  - name: Install Rust
48
- uses: dtolnay/rust-toolchain@67ef31d5b988238dd797d409d6f9574278e20537 # master
48
+ uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # master
49
49
  with:
50
50
  toolchain: stable
51
51
 
52
52
  - name: Install uv
53
- uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
53
+ uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
54
54
 
55
55
  - name: Run benchmark comparison
56
56
  env:
@@ -73,7 +73,7 @@ jobs:
73
73
  --json-output benchmark-results.json
74
74
 
75
75
  - name: Upload benchmark results
76
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
76
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
77
77
  if: always()
78
78
  with:
79
79
  name: benchmark-results
@@ -21,7 +21,7 @@ jobs:
21
21
 
22
22
  steps:
23
23
  - name: Checkout repository
24
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
24
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
25
25
  with:
26
26
  fetch-depth: 2
27
27
  persist-credentials: false
@@ -31,17 +31,17 @@ jobs:
31
31
  run: git checkout HEAD^2
32
32
 
33
33
  - name: Set up Python
34
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
34
+ uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
35
35
  with:
36
36
  python-version: "3.x"
37
37
 
38
38
  - name: Install Rust
39
- uses: dtolnay/rust-toolchain@67ef31d5b988238dd797d409d6f9574278e20537 # master
39
+ uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # master
40
40
  with:
41
41
  toolchain: stable
42
42
 
43
43
  - name: Initialize CodeQL
44
- uses: github/codeql-action/init@v4.36.0
44
+ uses: github/codeql-action/init@33d7b85da1a04171e211befe2c739303b9a4c066 # v4.39.3
45
45
  with:
46
46
  languages: python, rust
47
47
 
@@ -52,4 +52,4 @@ jobs:
52
52
  run: maturin build --release
53
53
 
54
54
  - name: Perform CodeQL Analysis
55
- uses: github/codeql-action/analyze@v4.36.0
55
+ uses: github/codeql-action/analyze@33d7b85da1a04171e211befe2c739303b9a4c066 # v4.39.3
@@ -13,12 +13,12 @@ jobs:
13
13
  name: Clippy
14
14
  runs-on: ubuntu-latest
15
15
  steps:
16
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
16
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
17
17
  with:
18
18
  persist-credentials: false
19
19
 
20
20
  - name: Install Rust
21
- uses: dtolnay/rust-toolchain@67ef31d5b988238dd797d409d6f9574278e20537 # master
21
+ uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # master
22
22
  with:
23
23
  toolchain: stable
24
24
  components: clippy
@@ -30,12 +30,12 @@ jobs:
30
30
  name: Rustfmt
31
31
  runs-on: ubuntu-latest
32
32
  steps:
33
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
33
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
34
34
  with:
35
35
  persist-credentials: false
36
36
 
37
37
  - name: Install Rust
38
- uses: dtolnay/rust-toolchain@67ef31d5b988238dd797d409d6f9574278e20537 # master
38
+ uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # master
39
39
  with:
40
40
  toolchain: stable
41
41
  components: rustfmt
@@ -47,7 +47,7 @@ jobs:
47
47
  name: Ruff
48
48
  runs-on: ubuntu-latest
49
49
  steps:
50
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
50
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
51
51
  with:
52
52
  persist-credentials: false
53
53
 
@@ -64,14 +64,14 @@ jobs:
64
64
  name: Prettier
65
65
  runs-on: ubuntu-latest
66
66
  steps:
67
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
67
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
68
68
  with:
69
69
  persist-credentials: false
70
70
 
71
71
  - name: Setup Node.js
72
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
72
+ uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
73
73
  with:
74
- node-version: "20"
74
+ node-version: "26"
75
75
 
76
76
  - name: Install Prettier
77
77
  run: npm install -g prettier
@@ -34,15 +34,15 @@ jobs:
34
34
  target: x86_64
35
35
  - os: windows-latest
36
36
  target: aarch64
37
- python_versions: "3.11 3.12 3.13 3.14"
37
+ python_versions: "3.11 3.12 3.13 3.14 3.14t 3.15 3.15t"
38
38
 
39
39
  steps:
40
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
40
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
41
41
  with:
42
42
  persist-credentials: false
43
43
 
44
44
  - name: Set up Python
45
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
45
+ uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
46
46
  with:
47
47
  python-version: "3.x"
48
48
 
@@ -57,7 +57,7 @@ jobs:
57
57
 
58
58
  - name: Set up QEMU
59
59
  if: runner.os == 'Linux' && matrix.target == 'aarch64'
60
- uses: docker/setup-qemu-action@06116385d9baf250c9f4dcb4858b16962ea869c3 # v4.1.0
60
+ uses: docker/setup-qemu-action@99012661954931238ded8c8b007157a8430204e1 # v4.4.0
61
61
  with:
62
62
  platforms: arm64
63
63
 
@@ -65,12 +65,12 @@ jobs:
65
65
  uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0
66
66
  with:
67
67
  target: ${{ matrix.target }}
68
- args: --release --out dist --interpreter ${{ matrix.python_versions || '3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.14t' }}
68
+ args: --release --out dist --interpreter ${{ matrix.python_versions || '3.9 3.10 3.11 3.12 3.13 3.14 3.14t 3.15 3.15t' }}
69
69
  sccache: "false"
70
70
  manylinux: auto
71
71
 
72
72
  - name: Upload wheels
73
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
73
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
74
74
  with:
75
75
  name: maxminddb-rust-whl-${{ matrix.os }}-${{ matrix.target }}
76
76
  path: dist
@@ -79,7 +79,7 @@ jobs:
79
79
  name: Build source distribution
80
80
  runs-on: ubuntu-latest
81
81
  steps:
82
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
82
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
83
83
  with:
84
84
  persist-credentials: false
85
85
 
@@ -90,7 +90,7 @@ jobs:
90
90
  args: --out dist
91
91
 
92
92
  - name: Upload sdist
93
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
93
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
94
94
  with:
95
95
  name: maxminddb-rust-sdist
96
96
  path: dist
@@ -100,23 +100,23 @@ jobs:
100
100
  runs-on: ubuntu-latest
101
101
  env:
102
102
  CIBW_BUILD: cp314-pyodide_wasm32
103
- CIBW_DEPENDENCY_VERSIONS_PYODIDE: "packages: pyodide-build==0.35.0"
103
+ CIBW_DEPENDENCY_VERSIONS_PYODIDE: "packages: pyodide-build==0.39.3"
104
104
  CIBW_ENVIRONMENT: CARGO_PROFILE_RELEASE_PANIC=abort
105
105
  CIBW_PLATFORM: pyodide
106
- CIBW_PYODIDE_VERSION: "314.0.0"
106
+ CIBW_PYODIDE_VERSION: "314.0.7"
107
107
  CIBW_TEST_COMMAND: >-
108
108
  python -c "import maxminddb_rust; reader =
109
109
  maxminddb_rust.open_database('{project}/tests/data/test-data/GeoIP2-City-Test.mmdb');
110
110
  assert reader.get('81.2.69.160')['country']['iso_code'] == 'GB'"
111
111
  RUSTUP_TOOLCHAIN: "1.93.0"
112
112
  steps:
113
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
113
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
114
114
  with:
115
115
  persist-credentials: false
116
116
  submodules: recursive
117
117
 
118
118
  - name: Set up Python
119
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
119
+ uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
120
120
  with:
121
121
  python-version: "3.x"
122
122
 
@@ -127,10 +127,10 @@ jobs:
127
127
  --target wasm32-unknown-emscripten
128
128
 
129
129
  - name: Build and test Pyodide wheel
130
- uses: pypa/cibuildwheel@294735312765b09d24a2fbec22660ce817587d55 # v4.1.0
130
+ uses: pypa/cibuildwheel@f9b966cfadf4109556cadc5bb39ddb72d0ce664e # v4.3.5
131
131
 
132
132
  - name: Upload Pyodide wheels
133
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
133
+ uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
134
134
  with:
135
135
  name: maxminddb-rust-whl-pyodide-wasm32
136
136
  path: wheelhouse/*.whl
@@ -145,11 +145,11 @@ jobs:
145
145
  id-token: write
146
146
  steps:
147
147
  - name: Download artifacts
148
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
148
+ uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
149
149
  with:
150
150
  pattern: maxminddb-rust-*
151
151
  path: dist
152
152
  merge-multiple: true
153
153
 
154
154
  - name: Publish to PyPI
155
- uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
155
+ uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
@@ -17,22 +17,22 @@ jobs:
17
17
  strategy:
18
18
  fail-fast: false
19
19
  matrix:
20
- python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
20
+ python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]
21
21
  os: [ubuntu-latest, macos-latest, windows-latest]
22
22
 
23
23
  steps:
24
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
24
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
25
25
  with:
26
26
  persist-credentials: false
27
27
  submodules: recursive
28
28
 
29
29
  - name: Set up Python ${{ matrix.python-version }}
30
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
30
+ uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
31
31
  with:
32
32
  python-version: ${{ matrix.python-version }}
33
33
 
34
34
  - name: Install Rust
35
- uses: dtolnay/rust-toolchain@67ef31d5b988238dd797d409d6f9574278e20537 # master
35
+ uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # master
36
36
  with:
37
37
  toolchain: stable
38
38
 
@@ -51,22 +51,27 @@ jobs:
51
51
  run: pytest -v tests/
52
52
 
53
53
  test-free-threaded:
54
- name: Test free-threaded Python 3.14
55
- runs-on: ubuntu-latest
54
+ name: Test free-threaded Python ${{ matrix.python-version }} on ${{ matrix.os }}
55
+ runs-on: ${{ matrix.os }}
56
+ strategy:
57
+ fail-fast: false
58
+ matrix:
59
+ python-version: ["3.14t", "3.15t"]
60
+ os: [ubuntu-latest, macos-latest, windows-latest]
56
61
 
57
62
  steps:
58
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
63
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
59
64
  with:
60
65
  persist-credentials: false
61
66
  submodules: recursive
62
67
 
63
- - name: Set up free-threaded Python 3.14
64
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
68
+ - name: Set up free-threaded Python ${{ matrix.python-version }}
69
+ uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
65
70
  with:
66
- python-version: "3.14t"
71
+ python-version: ${{ matrix.python-version }}
67
72
 
68
73
  - name: Install Rust
69
- uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9 # master
74
+ uses: dtolnay/rust-toolchain@683b588c487a69d01f6c6ddf40f036ff682cc2c8 # master
70
75
  with:
71
76
  toolchain: stable
72
77
 
@@ -17,9 +17,9 @@ jobs:
17
17
  security-events: write
18
18
  steps:
19
19
  - name: Checkout repository
20
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
20
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
21
21
  with:
22
22
  persist-credentials: false
23
23
 
24
24
  - name: Run zizmor
25
- uses: zizmorcore/zizmor-action@192e21d79ab29983730a13d1382995c2307fbcaa # v0.5.7
25
+ uses: zizmorcore/zizmor-action@45d7276c9ca790aabd705e31ca99c6185c3e76dd # v0.8.1
@@ -5,6 +5,73 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.9.0] - 2026-11-08
9
+
10
+ ### Added
11
+
12
+ - Added Python 3.15 support, with wheels for the standard and free-threaded
13
+ builds. CI now tests 3.15 and free-threaded 3.15.
14
+ - Releases now include free-threaded wheels for Windows ARM64.
15
+
16
+ ### Changed
17
+
18
+ - Updated PyO3 from 0.29 to 0.30. Calls to `open_database` are faster on
19
+ CPython 3.11 and later. The garbage collector now traverses the extension's
20
+ class objects, which fixes a possible memory leak of those classes.
21
+ - Updated Rust and Python dependencies, GitHub Actions, the Pyodide build, and
22
+ the MaxMind-DB test submodule. The CodeQL action is now pinned to a commit
23
+ SHA like the other actions.
24
+ - `get_path()` and `get_many_path()` now cache up to 32 parsed tuple paths per
25
+ thread instead of per `Reader`, so cache hits take no lock.
26
+ - Each thread that decodes records keeps caches of up to 2,560 short Python
27
+ strings and map keys, using about 120 KB of tables, until the thread exits.
28
+
29
+ ### Performance
30
+
31
+ - `get()`, `get_many()`, and lookups with `ipaddress` objects are about 20%
32
+ faster, and iteration is about 40% faster, measured against 0.8.0 with a
33
+ GeoIP2 City database on Python 3.14.
34
+ - Repeated strings and map keys in records reuse cached Python strings.
35
+ - Iteration builds `ipaddress` network objects without calling their
36
+ constructors. Each iterator first checks that the classes are the unpatched
37
+ standard library classes and that sample networks match. Otherwise it calls
38
+ the constructors, so patched or mocked classes behave as before.
39
+
40
+ ### Removed
41
+
42
+ - Dropped support for Python 3.8, which reached end of life in October 2024.
43
+ PyO3 0.30 no longer supports it. Python 3.9 or later is now required.
44
+
45
+ ### Fixed
46
+
47
+ - `get_many()` and `get_many_path()` no longer size the result from the
48
+ `__len__` of a generic iterable. A length such as `sys.maxsize` made them
49
+ panic with "capacity overflow" before reading any item.
50
+ - An error raised by the `__iter__` of the `ips` argument now propagates.
51
+ Before, every error became a `TypeError`. A `TypeError`, such as "object is
52
+ not iterable", still gets the "ips must be an iterable" message and keeps
53
+ the original error as its cause.
54
+ - `get_many()` and `get_many_path()` now iterate a list or tuple subclass that
55
+ overrides `__iter__`, instead of reading its contents directly.
56
+ - An error raised while reading `_ip` from an IP address object, such as a
57
+ `RuntimeError` from a property, now propagates. The lookup falls back to the
58
+ object's `packed` value only when `_ip` is missing or is not a usable int.
59
+
60
+ ## [0.8.0] - 2026-09-12
61
+
62
+ ### Changed
63
+
64
+ - Updated the `maxminddb` crate from 0.30.0 to 0.32.0, adding decoding resource
65
+ limits, fixing overflowing extended data types, and improving record decoding,
66
+ search-tree lookups, and selective path lookups.
67
+ - Databases that exceed the new decoding limits now raise `InvalidDatabaseError`,
68
+ including databases that previously decoded successfully.
69
+ - Updated Rust and Python dependencies and the MaxMind-DB test submodule.
70
+ - Dependabot now covers all Cargo and Python dependency types and test-submodule
71
+ updates, with seven-day cooldowns across all ecosystems.
72
+ - Synced applicable reader tests from the official Python reader's 3.2.0 release,
73
+ including bounded payload-amplification and pointer fan-out tests.
74
+
8
75
  ## [0.7.0] - 2026-07-19
9
76
 
10
77
  ### Changed
@@ -221,7 +288,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
221
288
  - Python 3.8+
222
289
  - CPython implementation
223
290
 
224
- [0.6.0]: https://github.com/oschwald/maxminddb-rust-python/compare/v0.6.0...v0.7.0
291
+ [0.9.0]: https://github.com/oschwald/maxminddb-rust-python/compare/v0.8.0...v0.9.0
292
+ [0.8.0]: https://github.com/oschwald/maxminddb-rust-python/compare/v0.7.0...v0.8.0
293
+ [0.7.0]: https://github.com/oschwald/maxminddb-rust-python/compare/v0.6.0...v0.7.0
225
294
  [0.6.0]: https://github.com/oschwald/maxminddb-rust-python/compare/v0.5.0...v0.6.0
226
295
  [0.5.0]: https://github.com/oschwald/maxminddb-rust-python/compare/v0.4.0...v0.5.0
227
296
  [0.4.0]: https://github.com/oschwald/maxminddb-rust-python/compare/v0.3.0...v0.4.0