cachekit 0.8.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.
- {cachekit-0.8.0 → cachekit-0.9.1}/Cargo.lock +16 -234
- {cachekit-0.8.0 → cachekit-0.9.1}/Cargo.toml +1 -1
- {cachekit-0.8.0 → cachekit-0.9.1}/PKG-INFO +69 -23
- {cachekit-0.8.0 → cachekit-0.9.1}/README.md +67 -20
- {cachekit-0.8.0 → cachekit-0.9.1}/pyproject.toml +11 -5
- {cachekit-0.8.0 → cachekit-0.9.1}/rust/Cargo.toml +1 -1
- {cachekit-0.8.0 → cachekit-0.9.1}/rust/README.md +67 -20
- {cachekit-0.8.0 → cachekit-0.9.1}/rust/src/python_bindings.rs +2 -1
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/__init__.py +3 -2
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/base.py +2 -2
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/cachekitio/backend.py +12 -4
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/cachekitio/error_handler.py +14 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/memcached/backend.py +22 -1
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/memcached/config.py +10 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/redis/backend.py +5 -9
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/redis/client.py +2 -2
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/cache_handler.py +85 -35
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/config/decorator.py +8 -3
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/config/nested.py +46 -9
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/config/settings.py +10 -1
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/config/validation.py +3 -2
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/decorators/intent.py +24 -1
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/decorators/local_wrapper.py +2 -1
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/decorators/tenant_context.py +2 -1
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/decorators/wrapper.py +10 -4
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/invalidation/channel.py +2 -1
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/key_generator.py +2 -1
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/l1_cache.py +22 -3
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/object_cache.py +3 -2
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/reliability/circuit_breaker.py +2 -1
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/reliability/metrics_collection.py +0 -1
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/serializers/__init__.py +2 -0
- cachekit-0.9.1/src/cachekit/serializers/arrow_serializer.py +319 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/serializers/auto_serializer.py +37 -9
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/serializers/base.py +39 -1
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/serializers/orjson_serializer.py +4 -1
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/serializers/standard_serializer.py +4 -1
- cachekit-0.9.1/src/cachekit/serializers/wrapper.py +139 -0
- cachekit-0.8.0/src/cachekit/serializers/arrow_serializer.py +0 -247
- cachekit-0.8.0/src/cachekit/serializers/wrapper.py +0 -89
- {cachekit-0.8.0 → cachekit-0.9.1}/LICENSE +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/rust/Makefile +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/rust/TEST_EXPANSION_SUMMARY.md +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/rust/src/lib.rs +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/rust/supply-chain/audits.toml +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/rust/supply-chain/config.toml +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/rust/supply-chain/imports.lock +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/rust/tsan_suppressions.txt +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/__init__.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/base_config.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/cachekitio/__init__.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/cachekitio/client.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/cachekitio/config.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/cachekitio/session.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/errors.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/file/__init__.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/file/backend.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/file/config.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/memcached/__init__.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/memcached/error_handler.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/provider.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/redis/__init__.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/redis/config.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/redis/error_handler.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/backends/redis/provider.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/config/__init__.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/config/singleton.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/decorators/__init__.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/decorators/main.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/decorators/orchestrator.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/decorators/session.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/decorators/stats_context.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/decorators/utils/__init__.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/di.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/hash_utils.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/health.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/hiredis_compat.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/imports.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/invalidation/__init__.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/invalidation/event.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/invalidation/redis_channel.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/logging.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/monitoring/__init__.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/monitoring/correlation_tracking.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/monitoring/pool_monitor.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/monitoring/protocols.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/py.typed +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/reliability/__init__.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/reliability/adaptive_timeout.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/reliability/async_metrics.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/reliability/error_classification.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/reliability/load_control.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/reliability/profiles.py +0 -0
- {cachekit-0.8.0 → cachekit-0.9.1}/src/cachekit/serializers/encryption_wrapper.py +0 -0
|
@@ -245,9 +245,9 @@ checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
|
|
|
245
245
|
|
|
246
246
|
[[package]]
|
|
247
247
|
name = "cachekit-core"
|
|
248
|
-
version = "0.2.
|
|
248
|
+
version = "0.2.1"
|
|
249
249
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
250
|
-
checksum = "
|
|
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.
|
|
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
|
|
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
|
|
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.
|
|
1219
|
+
version = "0.29.0"
|
|
1290
1220
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1291
|
-
checksum = "
|
|
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.
|
|
1233
|
+
version = "0.29.0"
|
|
1307
1234
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1308
|
-
checksum = "
|
|
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.
|
|
1242
|
+
version = "0.29.0"
|
|
1317
1243
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1318
|
-
checksum = "
|
|
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.
|
|
1252
|
+
version = "0.29.0"
|
|
1327
1253
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1328
|
-
checksum = "
|
|
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.
|
|
1264
|
+
version = "0.29.0"
|
|
1339
1265
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1340
|
-
checksum = "
|
|
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
|
|
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.
|
|
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,12 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cachekit
|
|
3
|
-
Version: 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
|
|
7
7
|
Classifier: Operating System :: OS Independent
|
|
8
8
|
Classifier: Programming Language :: Python :: 3
|
|
9
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
10
9
|
Classifier: Programming Language :: Python :: 3.10
|
|
11
10
|
Classifier: Programming Language :: Python :: 3.11
|
|
12
11
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -44,7 +43,7 @@ Home-Page: https://github.com/cachekit-io/cachekit-py
|
|
|
44
43
|
Author-email: cachekit Contributors <noreply@cachekit.io>
|
|
45
44
|
Maintainer-email: cachekit Contributors <noreply@cachekit.io>
|
|
46
45
|
License: MIT
|
|
47
|
-
Requires-Python: >=3.
|
|
46
|
+
Requires-Python: >=3.10
|
|
48
47
|
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
49
48
|
Project-URL: Changelog, https://github.com/cachekit-io/cachekit-py/blob/main/CHANGELOG.md
|
|
50
49
|
Project-URL: Documentation, https://github.com/cachekit-io/cachekit-py#readme
|
|
@@ -119,7 +118,17 @@ Or with [uv][uv-url] (recommended):
|
|
|
119
118
|
uv add cachekit
|
|
120
119
|
```
|
|
121
120
|
|
|
122
|
-
### Setup (
|
|
121
|
+
### Setup (choose a backend)
|
|
122
|
+
|
|
123
|
+
cachekit exposes one decorator API over a pluggable backend abstraction. Pick the
|
|
124
|
+
backend that fits your infrastructure — they're peers behind the same `@cache` API:
|
|
125
|
+
|
|
126
|
+
| Backend | Best for | Select with |
|
|
127
|
+
|---------|----------|-------------|
|
|
128
|
+
| Redis | Self-hosted, full control | `REDIS_URL` / `CACHEKIT_REDIS_URL` |
|
|
129
|
+
| CachekitIO | Managed, zero-ops (alpha) | `CACHEKIT_API_KEY` |
|
|
130
|
+
| Memcached | High-throughput, existing infra | `CACHEKIT_MEMCACHED_SERVERS` |
|
|
131
|
+
| File / L1-only | Local dev, tests, no external deps | `CACHEKIT_FILE_CACHE_DIR` / `backend=None` |
|
|
123
132
|
|
|
124
133
|
```bash
|
|
125
134
|
# Run Redis locally or use your existing infrastructure
|
|
@@ -129,7 +138,7 @@ export REDIS_URL="redis://localhost:6379"
|
|
|
129
138
|
```python
|
|
130
139
|
from cachekit import cache
|
|
131
140
|
|
|
132
|
-
@cache #
|
|
141
|
+
@cache # Auto-detects backend (defaults to Redis at localhost)
|
|
133
142
|
def expensive_api_call(user_id: int):
|
|
134
143
|
return fetch_user_data(user_id)
|
|
135
144
|
```
|
|
@@ -207,26 +216,37 @@ def get_user_profile(user_id: int):
|
|
|
207
216
|
return db.fetch_user(user_id)
|
|
208
217
|
```
|
|
209
218
|
|
|
210
|
-
| Feature | `@cache.minimal` | `@cache.
|
|
211
|
-
|
|
212
|
-
| Circuit Breaker | - | ✅ |
|
|
213
|
-
| Adaptive Timeouts | - | ✅ |
|
|
214
|
-
|
|
|
215
|
-
| Integrity Checking | - | ✅
|
|
216
|
-
| Encryption | - | - |
|
|
217
|
-
|
|
|
218
|
-
|
|
|
219
|
+
| Feature | `@cache.minimal` | `@cache.dev` | `@cache.test` | `@cache.production` | `@cache.secure` |
|
|
220
|
+
|:--------|:----------------:|:------------:|:-------------:|:-------------------:|:---------------:|
|
|
221
|
+
| Circuit Breaker | - | ✅ | - | ✅ | ✅ |
|
|
222
|
+
| Adaptive Timeouts | - | ✅ | - | ✅ | ✅ |
|
|
223
|
+
| Backpressure | ✅ | ✅ | - | ✅ | ✅ |
|
|
224
|
+
| Integrity Checking | - | ✅ | - | ✅ | ✅ 🔒 |
|
|
225
|
+
| Encryption | - | - | - | - | ✅ Required |
|
|
226
|
+
| L1 SWR | - | ✅ | - | ✅ | ✅ |
|
|
227
|
+
| L1 Invalidation | - | - | - | ✅ | ✅ |
|
|
228
|
+
| L1 Namespace Index | - | - | - | ✅ | ✅ |
|
|
229
|
+
| Prometheus Metrics | - | - | - | ✅ | ✅ |
|
|
230
|
+
| Tracing | - | ✅ | - | ✅ | ✅ |
|
|
231
|
+
| Structured Logging | - | ✅ | - | ✅ | ✅ |
|
|
232
|
+
| **Use Case** | High throughput | Local debugging | Deterministic tests | Production reliability | Compliance/security |
|
|
233
|
+
|
|
234
|
+
> 🔒 `@cache.secure` forces `integrity_checking=True` — it cannot be overridden.
|
|
235
|
+
>
|
|
236
|
+
> **`@cache.io()`** mirrors `@cache.production` (full reliability + observability) but routes to the managed CachekitIO SaaS backend instead of Redis. **`@cache.local()`** is a separate in-process path backed by `ObjectCache` (raw object references, entry-count LRU, no serialization) — the reliability and encryption features listed above do not apply to it.
|
|
219
237
|
|
|
220
238
|
<details>
|
|
221
|
-
<summary><strong>Additional Presets</strong></summary>
|
|
239
|
+
<summary><strong>Additional Presets: <code>@cache.dev</code> and <code>@cache.test</code></strong></summary>
|
|
240
|
+
|
|
241
|
+
See the comparison table above for the exact feature set of each preset.
|
|
222
242
|
|
|
223
243
|
```python
|
|
224
|
-
# Development:
|
|
244
|
+
# Development: verbose logging, integrity checks on, Prometheus off
|
|
225
245
|
@cache.dev
|
|
226
246
|
def debug_expensive_call():
|
|
227
247
|
return complex_computation()
|
|
228
248
|
|
|
229
|
-
# Testing: deterministic, no
|
|
249
|
+
# Testing: deterministic, all protections off (no circuit breaker, no backpressure)
|
|
230
250
|
@cache.test
|
|
231
251
|
def test_cached_function():
|
|
232
252
|
return fixed_test_value()
|
|
@@ -356,12 +376,36 @@ See [SECURITY.md][security-url] for vulnerability reporting and detailed documen
|
|
|
356
376
|
|
|
357
377
|
</details>
|
|
358
378
|
|
|
359
|
-
###
|
|
379
|
+
### Monitoring & Observability
|
|
360
380
|
|
|
361
|
-
- **
|
|
381
|
+
- **Per-function statistics** - `cache_info()` on every decorated function, modelled on `functools.lru_cache`
|
|
382
|
+
- **Prometheus metrics** - Recorded by default (your app owns exposition)
|
|
362
383
|
- **Structured logging** - Context-aware with correlation IDs
|
|
363
384
|
- **Health checks** - Comprehensive status endpoints
|
|
364
|
-
|
|
385
|
+
|
|
386
|
+
Every decorated function exposes `cache_info()`, returning a `CacheInfo` named tuple with
|
|
387
|
+
hit/miss counts, the L1/L2 split, and average backend latency:
|
|
388
|
+
|
|
389
|
+
```python
|
|
390
|
+
@cache()
|
|
391
|
+
def get_score(x):
|
|
392
|
+
return x ** 2
|
|
393
|
+
|
|
394
|
+
get_score(2)
|
|
395
|
+
get_score(2) # served from cache
|
|
396
|
+
|
|
397
|
+
info = get_score.cache_info()
|
|
398
|
+
# CacheInfo has 9 fields: hits, misses, l1_hits, l2_hits, maxsize,
|
|
399
|
+
# currsize, l2_avg_latency_ms, last_operation_at, session_id
|
|
400
|
+
assert info.l1_hits + info.l2_hits == info.hits # every hit is L1 or L2
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
`maxsize` and `currsize` are always `None` (the cache lives in an external store, not a
|
|
404
|
+
bounded in-process dict); they exist only for `lru_cache` API parity. See the
|
|
405
|
+
[API Reference](docs/api-reference.md#per-function-statistics-via-cache_info) for the full
|
|
406
|
+
field reference and a sample stats endpoint, and the
|
|
407
|
+
[Prometheus Metrics guide](docs/features/prometheus-metrics.md) for metric names and
|
|
408
|
+
exposition setup.
|
|
365
409
|
|
|
366
410
|
<details>
|
|
367
411
|
<summary><strong>Thread Safety Details</strong></summary>
|
|
@@ -381,8 +425,10 @@ def expensive_func(x):
|
|
|
381
425
|
with ThreadPoolExecutor(max_workers=10) as executor:
|
|
382
426
|
results = list(executor.map(expensive_func, range(100)))
|
|
383
427
|
|
|
384
|
-
|
|
385
|
-
# CacheInfo(hits
|
|
428
|
+
info = expensive_func.cache_info()
|
|
429
|
+
# CacheInfo(hits=..., misses=..., l1_hits=..., l2_hits=...,
|
|
430
|
+
# maxsize=None, currsize=None, l2_avg_latency_ms=...,
|
|
431
|
+
# last_operation_at=..., session_id=...)
|
|
386
432
|
```
|
|
387
433
|
|
|
388
434
|
</details>
|
|
@@ -459,7 +505,7 @@ See [CONTRIBUTING.md][contributing-url] for full development guidelines.
|
|
|
459
505
|
|
|
460
506
|
| Component | Version |
|
|
461
507
|
|:----------|:--------|
|
|
462
|
-
| Python | 3.
|
|
508
|
+
| Python | 3.10+ |
|
|
463
509
|
|
|
464
510
|
---
|
|
465
511
|
|