cachekit 0.9.0__tar.gz → 0.9.1__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 (92) hide show
  1. {cachekit-0.9.0 → cachekit-0.9.1}/Cargo.lock +16 -234
  2. {cachekit-0.9.0 → cachekit-0.9.1}/Cargo.toml +1 -1
  3. {cachekit-0.9.0 → cachekit-0.9.1}/PKG-INFO +1 -1
  4. {cachekit-0.9.0 → cachekit-0.9.1}/pyproject.toml +4 -1
  5. {cachekit-0.9.0 → cachekit-0.9.1}/rust/Cargo.toml +1 -1
  6. {cachekit-0.9.0 → cachekit-0.9.1}/rust/src/python_bindings.rs +2 -1
  7. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/__init__.py +1 -1
  8. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/base.py +2 -2
  9. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/cachekitio/backend.py +12 -4
  10. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/cachekitio/error_handler.py +14 -0
  11. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/reliability/metrics_collection.py +0 -1
  12. {cachekit-0.9.0 → cachekit-0.9.1}/LICENSE +0 -0
  13. {cachekit-0.9.0 → cachekit-0.9.1}/README.md +0 -0
  14. {cachekit-0.9.0 → cachekit-0.9.1}/rust/Makefile +0 -0
  15. {cachekit-0.9.0 → cachekit-0.9.1}/rust/README.md +0 -0
  16. {cachekit-0.9.0 → cachekit-0.9.1}/rust/TEST_EXPANSION_SUMMARY.md +0 -0
  17. {cachekit-0.9.0 → cachekit-0.9.1}/rust/src/lib.rs +0 -0
  18. {cachekit-0.9.0 → cachekit-0.9.1}/rust/supply-chain/audits.toml +0 -0
  19. {cachekit-0.9.0 → cachekit-0.9.1}/rust/supply-chain/config.toml +0 -0
  20. {cachekit-0.9.0 → cachekit-0.9.1}/rust/supply-chain/imports.lock +0 -0
  21. {cachekit-0.9.0 → cachekit-0.9.1}/rust/tsan_suppressions.txt +0 -0
  22. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/__init__.py +0 -0
  23. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/base_config.py +0 -0
  24. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/cachekitio/__init__.py +0 -0
  25. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/cachekitio/client.py +0 -0
  26. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/cachekitio/config.py +0 -0
  27. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/cachekitio/session.py +0 -0
  28. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/errors.py +0 -0
  29. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/file/__init__.py +0 -0
  30. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/file/backend.py +0 -0
  31. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/file/config.py +0 -0
  32. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/memcached/__init__.py +0 -0
  33. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/memcached/backend.py +0 -0
  34. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/memcached/config.py +0 -0
  35. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/memcached/error_handler.py +0 -0
  36. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/provider.py +0 -0
  37. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/redis/__init__.py +0 -0
  38. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/redis/backend.py +0 -0
  39. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/redis/client.py +0 -0
  40. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/redis/config.py +0 -0
  41. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/redis/error_handler.py +0 -0
  42. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/backends/redis/provider.py +0 -0
  43. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/cache_handler.py +0 -0
  44. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/config/__init__.py +0 -0
  45. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/config/decorator.py +0 -0
  46. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/config/nested.py +0 -0
  47. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/config/settings.py +0 -0
  48. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/config/singleton.py +0 -0
  49. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/config/validation.py +0 -0
  50. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/decorators/__init__.py +0 -0
  51. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/decorators/intent.py +0 -0
  52. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/decorators/local_wrapper.py +0 -0
  53. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/decorators/main.py +0 -0
  54. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/decorators/orchestrator.py +0 -0
  55. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/decorators/session.py +0 -0
  56. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/decorators/stats_context.py +0 -0
  57. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/decorators/tenant_context.py +0 -0
  58. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/decorators/utils/__init__.py +0 -0
  59. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/decorators/wrapper.py +0 -0
  60. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/di.py +0 -0
  61. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/hash_utils.py +0 -0
  62. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/health.py +0 -0
  63. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/hiredis_compat.py +0 -0
  64. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/imports.py +0 -0
  65. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/invalidation/__init__.py +0 -0
  66. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/invalidation/channel.py +0 -0
  67. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/invalidation/event.py +0 -0
  68. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/invalidation/redis_channel.py +0 -0
  69. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/key_generator.py +0 -0
  70. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/l1_cache.py +0 -0
  71. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/logging.py +0 -0
  72. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/monitoring/__init__.py +0 -0
  73. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/monitoring/correlation_tracking.py +0 -0
  74. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/monitoring/pool_monitor.py +0 -0
  75. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/monitoring/protocols.py +0 -0
  76. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/object_cache.py +0 -0
  77. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/py.typed +0 -0
  78. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/reliability/__init__.py +0 -0
  79. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/reliability/adaptive_timeout.py +0 -0
  80. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/reliability/async_metrics.py +0 -0
  81. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/reliability/circuit_breaker.py +0 -0
  82. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/reliability/error_classification.py +0 -0
  83. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/reliability/load_control.py +0 -0
  84. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/reliability/profiles.py +0 -0
  85. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/serializers/__init__.py +0 -0
  86. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/serializers/arrow_serializer.py +0 -0
  87. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/serializers/auto_serializer.py +0 -0
  88. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/serializers/base.py +0 -0
  89. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/serializers/encryption_wrapper.py +0 -0
  90. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/serializers/orjson_serializer.py +0 -0
  91. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/serializers/standard_serializer.py +0 -0
  92. {cachekit-0.9.0 → cachekit-0.9.1}/src/cachekit/serializers/wrapper.py +0 -0
@@ -245,9 +245,9 @@ checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
245
245
 
246
246
  [[package]]
247
247
  name = "cachekit-core"
248
- version = "0.2.0"
248
+ version = "0.2.1"
249
249
  source = "registry+https://github.com/rust-lang/crates.io-index"
250
- checksum = "9622b3c3e47fcf7abfde287c557e6171674e37842a2dd26fda03f63720542f17"
250
+ checksum = "01870e86fa79ca9ee521b5b9c2bcff8428eab95fb343f75d35a6fce159bb1577"
251
251
  dependencies = [
252
252
  "aes",
253
253
  "aes-gcm",
@@ -271,7 +271,7 @@ dependencies = [
271
271
 
272
272
  [[package]]
273
273
  name = "cachekit-rs"
274
- version = "0.9.0"
274
+ version = "0.9.1"
275
275
  dependencies = [
276
276
  "cachekit-core",
277
277
  "criterion",
@@ -676,12 +676,6 @@ version = "1.0.7"
676
676
  source = "registry+https://github.com/rust-lang/crates.io-index"
677
677
  checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
678
678
 
679
- [[package]]
680
- name = "foldhash"
681
- version = "0.1.5"
682
- source = "registry+https://github.com/rust-lang/crates.io-index"
683
- checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
684
-
685
679
  [[package]]
686
680
  name = "generic-array"
687
681
  version = "0.14.7"
@@ -713,23 +707,10 @@ checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
713
707
  dependencies = [
714
708
  "cfg-if",
715
709
  "libc",
716
- "r-efi 5.3.0",
710
+ "r-efi",
717
711
  "wasip2",
718
712
  ]
719
713
 
720
- [[package]]
721
- name = "getrandom"
722
- version = "0.4.2"
723
- source = "registry+https://github.com/rust-lang/crates.io-index"
724
- checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555"
725
- dependencies = [
726
- "cfg-if",
727
- "libc",
728
- "r-efi 6.0.0",
729
- "wasip2",
730
- "wasip3",
731
- ]
732
-
733
714
  [[package]]
734
715
  name = "ghash"
735
716
  version = "0.5.1"
@@ -757,15 +738,6 @@ dependencies = [
757
738
  "zerocopy",
758
739
  ]
759
740
 
760
- [[package]]
761
- name = "hashbrown"
762
- version = "0.15.5"
763
- source = "registry+https://github.com/rust-lang/crates.io-index"
764
- checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
765
- dependencies = [
766
- "foldhash",
767
- ]
768
-
769
741
  [[package]]
770
742
  name = "hashbrown"
771
743
  version = "0.16.1"
@@ -847,12 +819,6 @@ dependencies = [
847
819
  "serde",
848
820
  ]
849
821
 
850
- [[package]]
851
- name = "id-arena"
852
- version = "2.3.0"
853
- source = "registry+https://github.com/rust-lang/crates.io-index"
854
- checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
855
-
856
822
  [[package]]
857
823
  name = "indexmap"
858
824
  version = "2.13.0"
@@ -860,18 +826,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
860
826
  checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
861
827
  dependencies = [
862
828
  "equivalent",
863
- "hashbrown 0.16.1",
864
- "serde",
865
- "serde_core",
866
- ]
867
-
868
- [[package]]
869
- name = "indoc"
870
- version = "2.0.7"
871
- source = "registry+https://github.com/rust-lang/crates.io-index"
872
- checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
873
- dependencies = [
874
- "rustversion",
829
+ "hashbrown",
875
830
  ]
876
831
 
877
832
  [[package]]
@@ -949,12 +904,6 @@ version = "1.5.0"
949
904
  source = "registry+https://github.com/rust-lang/crates.io-index"
950
905
  checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
951
906
 
952
- [[package]]
953
- name = "leb128fmt"
954
- version = "0.1.0"
955
- source = "registry+https://github.com/rust-lang/crates.io-index"
956
- checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
957
-
958
907
  [[package]]
959
908
  name = "libc"
960
909
  version = "0.2.183"
@@ -1012,15 +961,6 @@ dependencies = [
1012
961
  "libc",
1013
962
  ]
1014
963
 
1015
- [[package]]
1016
- name = "memoffset"
1017
- version = "0.9.1"
1018
- source = "registry+https://github.com/rust-lang/crates.io-index"
1019
- checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
1020
- dependencies = [
1021
- "autocfg",
1022
- ]
1023
-
1024
964
  [[package]]
1025
965
  name = "miniz_oxide"
1026
966
  version = "0.8.9"
@@ -1173,16 +1113,6 @@ dependencies = [
1173
1113
  "zerocopy",
1174
1114
  ]
1175
1115
 
1176
- [[package]]
1177
- name = "prettyplease"
1178
- version = "0.2.37"
1179
- source = "registry+https://github.com/rust-lang/crates.io-index"
1180
- checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
1181
- dependencies = [
1182
- "proc-macro2",
1183
- "syn",
1184
- ]
1185
-
1186
1116
  [[package]]
1187
1117
  name = "proc-macro-error-attr2"
1188
1118
  version = "2.0.0"
@@ -1286,36 +1216,32 @@ dependencies = [
1286
1216
 
1287
1217
  [[package]]
1288
1218
  name = "pyo3"
1289
- version = "0.25.1"
1219
+ version = "0.29.0"
1290
1220
  source = "registry+https://github.com/rust-lang/crates.io-index"
1291
- checksum = "8970a78afe0628a3e3430376fc5fd76b6b45c4d43360ffd6cdd40bdde72b682a"
1221
+ checksum = "cd274650b21d4bfc26a0a47587962c1edb425f69287324355cd040c3ea66071c"
1292
1222
  dependencies = [
1293
- "indoc",
1294
1223
  "libc",
1295
- "memoffset",
1296
1224
  "once_cell",
1297
1225
  "portable-atomic",
1298
1226
  "pyo3-build-config",
1299
1227
  "pyo3-ffi",
1300
1228
  "pyo3-macros",
1301
- "unindent",
1302
1229
  ]
1303
1230
 
1304
1231
  [[package]]
1305
1232
  name = "pyo3-build-config"
1306
- version = "0.25.1"
1233
+ version = "0.29.0"
1307
1234
  source = "registry+https://github.com/rust-lang/crates.io-index"
1308
- checksum = "458eb0c55e7ece017adeba38f2248ff3ac615e53660d7c71a238d7d2a01c7598"
1235
+ checksum = "c5e2a7d2f0d013342f295c048ad19237add5154a55b1c5a254c0ec93d4109078"
1309
1236
  dependencies = [
1310
- "once_cell",
1311
1237
  "target-lexicon",
1312
1238
  ]
1313
1239
 
1314
1240
  [[package]]
1315
1241
  name = "pyo3-ffi"
1316
- version = "0.25.1"
1242
+ version = "0.29.0"
1317
1243
  source = "registry+https://github.com/rust-lang/crates.io-index"
1318
- checksum = "7114fe5457c61b276ab77c5055f206295b812608083644a5c5b2640c3102565c"
1244
+ checksum = "ca85c467da1bbc8d866eea5deff9cf29ea5f7785054a17da36e65bda9c05845b"
1319
1245
  dependencies = [
1320
1246
  "libc",
1321
1247
  "pyo3-build-config",
@@ -1323,9 +1249,9 @@ dependencies = [
1323
1249
 
1324
1250
  [[package]]
1325
1251
  name = "pyo3-macros"
1326
- version = "0.25.1"
1252
+ version = "0.29.0"
1327
1253
  source = "registry+https://github.com/rust-lang/crates.io-index"
1328
- checksum = "a8725c0a622b374d6cb051d11a0983786448f7785336139c3c94f5aa6bef7e50"
1254
+ checksum = "9ac53762fd065daa3194dd09337a38bd793a188100fd1a9304c4ab312d901771"
1329
1255
  dependencies = [
1330
1256
  "proc-macro2",
1331
1257
  "pyo3-macros-backend",
@@ -1335,13 +1261,12 @@ dependencies = [
1335
1261
 
1336
1262
  [[package]]
1337
1263
  name = "pyo3-macros-backend"
1338
- version = "0.25.1"
1264
+ version = "0.29.0"
1339
1265
  source = "registry+https://github.com/rust-lang/crates.io-index"
1340
- checksum = "4109984c22491085343c05b0dbc54ddc405c3cf7b4374fc533f5c3313a572ccc"
1266
+ checksum = "4ca3a1557399783172dc5bf39cfca835157732532cba56b71d2292161e53b362"
1341
1267
  dependencies = [
1342
1268
  "heck",
1343
1269
  "proc-macro2",
1344
- "pyo3-build-config",
1345
1270
  "quote",
1346
1271
  "syn",
1347
1272
  ]
@@ -1376,12 +1301,6 @@ version = "5.3.0"
1376
1301
  source = "registry+https://github.com/rust-lang/crates.io-index"
1377
1302
  checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
1378
1303
 
1379
- [[package]]
1380
- name = "r-efi"
1381
- version = "6.0.0"
1382
- source = "registry+https://github.com/rust-lang/crates.io-index"
1383
- checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
1384
-
1385
1304
  [[package]]
1386
1305
  name = "rand"
1387
1306
  version = "0.9.2"
@@ -1771,7 +1690,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1771
1690
  checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
1772
1691
  dependencies = [
1773
1692
  "fastrand",
1774
- "getrandom 0.4.2",
1693
+ "getrandom 0.3.4",
1775
1694
  "once_cell",
1776
1695
  "rustix 1.1.4",
1777
1696
  "windows-sys 0.61.2",
@@ -1900,18 +1819,6 @@ version = "1.0.24"
1900
1819
  source = "registry+https://github.com/rust-lang/crates.io-index"
1901
1820
  checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
1902
1821
 
1903
- [[package]]
1904
- name = "unicode-xid"
1905
- version = "0.2.6"
1906
- source = "registry+https://github.com/rust-lang/crates.io-index"
1907
- checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
1908
-
1909
- [[package]]
1910
- name = "unindent"
1911
- version = "0.2.4"
1912
- source = "registry+https://github.com/rust-lang/crates.io-index"
1913
- checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
1914
-
1915
1822
  [[package]]
1916
1823
  name = "universal-hash"
1917
1824
  version = "0.5.1"
@@ -1984,15 +1891,6 @@ dependencies = [
1984
1891
  "wit-bindgen",
1985
1892
  ]
1986
1893
 
1987
- [[package]]
1988
- name = "wasip3"
1989
- version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
1990
- source = "registry+https://github.com/rust-lang/crates.io-index"
1991
- checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
1992
- dependencies = [
1993
- "wit-bindgen",
1994
- ]
1995
-
1996
1894
  [[package]]
1997
1895
  name = "wasm-bindgen"
1998
1896
  version = "0.2.114"
@@ -2038,40 +1936,6 @@ dependencies = [
2038
1936
  "unicode-ident",
2039
1937
  ]
2040
1938
 
2041
- [[package]]
2042
- name = "wasm-encoder"
2043
- version = "0.244.0"
2044
- source = "registry+https://github.com/rust-lang/crates.io-index"
2045
- checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
2046
- dependencies = [
2047
- "leb128fmt",
2048
- "wasmparser",
2049
- ]
2050
-
2051
- [[package]]
2052
- name = "wasm-metadata"
2053
- version = "0.244.0"
2054
- source = "registry+https://github.com/rust-lang/crates.io-index"
2055
- checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
2056
- dependencies = [
2057
- "anyhow",
2058
- "indexmap",
2059
- "wasm-encoder",
2060
- "wasmparser",
2061
- ]
2062
-
2063
- [[package]]
2064
- name = "wasmparser"
2065
- version = "0.244.0"
2066
- source = "registry+https://github.com/rust-lang/crates.io-index"
2067
- checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
2068
- dependencies = [
2069
- "bitflags 2.11.0",
2070
- "hashbrown 0.15.5",
2071
- "indexmap",
2072
- "semver",
2073
- ]
2074
-
2075
1939
  [[package]]
2076
1940
  name = "web-sys"
2077
1941
  version = "0.3.91"
@@ -2307,88 +2171,6 @@ name = "wit-bindgen"
2307
2171
  version = "0.51.0"
2308
2172
  source = "registry+https://github.com/rust-lang/crates.io-index"
2309
2173
  checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
2310
- dependencies = [
2311
- "wit-bindgen-rust-macro",
2312
- ]
2313
-
2314
- [[package]]
2315
- name = "wit-bindgen-core"
2316
- version = "0.51.0"
2317
- source = "registry+https://github.com/rust-lang/crates.io-index"
2318
- checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
2319
- dependencies = [
2320
- "anyhow",
2321
- "heck",
2322
- "wit-parser",
2323
- ]
2324
-
2325
- [[package]]
2326
- name = "wit-bindgen-rust"
2327
- version = "0.51.0"
2328
- source = "registry+https://github.com/rust-lang/crates.io-index"
2329
- checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
2330
- dependencies = [
2331
- "anyhow",
2332
- "heck",
2333
- "indexmap",
2334
- "prettyplease",
2335
- "syn",
2336
- "wasm-metadata",
2337
- "wit-bindgen-core",
2338
- "wit-component",
2339
- ]
2340
-
2341
- [[package]]
2342
- name = "wit-bindgen-rust-macro"
2343
- version = "0.51.0"
2344
- source = "registry+https://github.com/rust-lang/crates.io-index"
2345
- checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
2346
- dependencies = [
2347
- "anyhow",
2348
- "prettyplease",
2349
- "proc-macro2",
2350
- "quote",
2351
- "syn",
2352
- "wit-bindgen-core",
2353
- "wit-bindgen-rust",
2354
- ]
2355
-
2356
- [[package]]
2357
- name = "wit-component"
2358
- version = "0.244.0"
2359
- source = "registry+https://github.com/rust-lang/crates.io-index"
2360
- checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
2361
- dependencies = [
2362
- "anyhow",
2363
- "bitflags 2.11.0",
2364
- "indexmap",
2365
- "log",
2366
- "serde",
2367
- "serde_derive",
2368
- "serde_json",
2369
- "wasm-encoder",
2370
- "wasm-metadata",
2371
- "wasmparser",
2372
- "wit-parser",
2373
- ]
2374
-
2375
- [[package]]
2376
- name = "wit-parser"
2377
- version = "0.244.0"
2378
- source = "registry+https://github.com/rust-lang/crates.io-index"
2379
- checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
2380
- dependencies = [
2381
- "anyhow",
2382
- "id-arena",
2383
- "indexmap",
2384
- "log",
2385
- "semver",
2386
- "serde",
2387
- "serde_derive",
2388
- "serde_json",
2389
- "unicode-xid",
2390
- "wasmparser",
2391
- ]
2392
2174
 
2393
2175
  [[package]]
2394
2176
  name = "xxhash-rust"
@@ -4,7 +4,7 @@ members = ["rust"]
4
4
  exclude = ["rust/fuzz"]
5
5
 
6
6
  [workspace.dependencies]
7
- pyo3 = { version = "0.25", features = ["extension-module"] }
7
+ pyo3 = { version = "0.29", features = ["extension-module"] }
8
8
  serde = { version = "1.0", features = ["derive"] }
9
9
  serde_json = "1.0"
10
10
  bincode = "1.3"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cachekit
3
- Version: 0.9.0
3
+ Version: 0.9.1
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "cachekit"
7
- version = "0.9.0"
7
+ version = "0.9.1"
8
8
  description = "Production-ready Redis caching for Python with intelligent reliability features and Rust-powered performance"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -208,6 +208,9 @@ dev = [
208
208
  "pytest-markdown-docs>=0.6.0",
209
209
  "pytest-redis>=3.0.0",
210
210
  "pymemcache>=4.0.0",
211
+ # Competitive comparison suite (tests/competitive/ benchmarks cachekit vs these)
212
+ "cachetools>=5.3.0",
213
+ "aiocache>=0.12.0",
211
214
  # Code quality
212
215
  "basedpyright>=1.32.1",
213
216
  "ruff>=0.6.0",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "cachekit-rs"
3
- version = "0.9.0"
3
+ version = "0.9.1"
4
4
  edition = "2021"
5
5
  authors = ["cachekit Contributors"]
6
6
  description = "High-performance storage engine for caching with compression and encryption"
@@ -187,7 +187,8 @@ impl PyZeroKnowledgeEncryptor {
187
187
  encryption_time_micros: metrics.encryption_time_micros,
188
188
  hardware_accelerated: metrics.hardware_accelerated,
189
189
  };
190
- Python::with_gil(|py| Py::new(py, py_metrics))
190
+ // pyo3 0.29 renamed Python::with_gil -> Python::attach (GIL/free-threaded terminology).
191
+ Python::attach(|py| Py::new(py, py_metrics))
191
192
  }
192
193
  }
193
194
 
@@ -68,7 +68,7 @@ Example Usage:
68
68
  ```
69
69
  """
70
70
 
71
- __version__ = "0.9.0"
71
+ __version__ = "0.9.1"
72
72
 
73
73
  from collections.abc import Callable
74
74
  from typing import Any, TypeVar
@@ -32,9 +32,9 @@ class BaseBackend(Protocol):
32
32
 
33
33
  Example:
34
34
  >>> from cachekit.backends import BaseBackend, RedisBackend
35
- >>> backend = RedisBackend()
36
- >>> isinstance(backend, BaseBackend) # Runtime checkable protocol
35
+ >>> issubclass(RedisBackend, BaseBackend) # structural (runtime-checkable) protocol
37
36
  True
37
+ >>> backend = RedisBackend() # doctest: +SKIP
38
38
  >>> backend.set("key", b"value", ttl=60) # doctest: +SKIP
39
39
  >>> data = backend.get("key") # doctest: +SKIP
40
40
  """
@@ -27,6 +27,13 @@ if TYPE_CHECKING:
27
27
  # Module-level logger
28
28
  _logger = get_structured_logger(__name__)
29
29
 
30
+ # Lock capability token travels in this request header, never the query string:
31
+ # a ?lock_id= query leaks the token into access/proxy logs and OpenTelemetry
32
+ # http.url spans (CWE-532), letting anyone with log access replay it. The SaaS
33
+ # handler dual-reads this header + the legacy ?lock_id= query during rollout,
34
+ # preferring the header. See protocol spec/saas-api.md (DELETE .../lock).
35
+ LOCK_ID_HEADER = "X-CacheKit-Lock-Id"
36
+
30
37
 
31
38
  def _inject_metrics_headers(stats: _FunctionStats | None) -> dict[str, str]:
32
39
  """Extract cache metrics and format as HTTP headers.
@@ -649,12 +656,13 @@ class CachekitIOBackend:
649
656
  inside ``__aexit__`` cannot mask the user's exception. The server-side ``timeout``
650
657
  on the lock is the safety net if the DELETE never lands.
651
658
  """
652
- # URL-encode both segments: lock_key is caller-controlled, lock_id is server-issued
653
- # but the SaaS contract doesn't pin a charset.
659
+ # lock_key is caller-controlled → percent-encode it into the path. lock_id is a
660
+ # capability token and travels in the X-CacheKit-Lock-Id header, NOT the query
661
+ # string (CWE-532): a ?lock_id= query leaks it into access/proxy logs and OTel
662
+ # http.url spans. It is server-issued, so it needs no URL-encoding.
654
663
  encoded_key = quote(lock_key, safe="")
655
- encoded_id = quote(lock_id, safe="")
656
664
  try:
657
- await self._request_async("DELETE", f"{encoded_key}/lock?lock_id={encoded_id}")
665
+ await self._request_async("DELETE", f"{encoded_key}/lock", headers={LOCK_ID_HEADER: lock_id})
658
666
  return True
659
667
  except BackendError:
660
668
  return False
@@ -35,6 +35,7 @@ def classify_http_error(
35
35
  Classification rules:
36
36
  - HTTP 401/403: AUTHENTICATION (alert ops, don't retry)
37
37
  - HTTP 429: TRANSIENT (rate limit, exponential backoff)
38
+ - HTTP 413: PERMANENT (value too large — retrying never helps)
38
39
  - HTTP 5xx: TRANSIENT (server error, retry)
39
40
  - HTTP 4xx: PERMANENT (client error, don't retry)
40
41
  - TimeoutException: TIMEOUT (configurable retry)
@@ -75,6 +76,19 @@ def classify_http_error(
75
76
  key=key,
76
77
  )
77
78
 
79
+ # PERMANENT: value too large. A 413 would already classify PERMANENT via the generic
80
+ # 4xx branch below — this dedicated branch exists only to give an ACTIONABLE message
81
+ # ("value too large") instead of "Client error: HTTP 413". Retrying never helps (the
82
+ # value must shrink), so the decorator degrades: runs uncached, once.
83
+ if status == 413:
84
+ return BackendError(
85
+ "Value too large for cachekit.io backend (HTTP 413): value exceeds the server's maximum cache value size",
86
+ error_type=BackendErrorType.PERMANENT,
87
+ original_exception=exc,
88
+ operation=operation,
89
+ key=key,
90
+ )
91
+
78
92
  # PERMANENT: Client errors (don't retry)
79
93
  if 400 <= status < 500:
80
94
  return BackendError(
@@ -110,7 +110,6 @@ def get_all_metrics() -> dict[str, dict[str, Any]]:
110
110
  """Get all collected metrics.
111
111
 
112
112
  Examples:
113
- >>> clear_metrics() # Start fresh
114
113
  >>> counter = MetricsCollector("api_calls")
115
114
  >>> counter.inc()
116
115
  >>> metrics = get_all_metrics()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes