# cachebox





[**Releases**](https://github.com/awolverp/cachebox/releases) | [**Benchmarks**](https://github.com/awolverp/cachebox-benchmark) | [**Issues**](https://github.com/awolverp/cachebox/issues/new)
**The fastest caching Python library written in Rust**
### What does it do?
You can easily and powerfully perform caching operations in Python as fast as possible.
This can make your application very faster and it's a good choice in big applications.
- ๐ 10-50x faster than other caching libraries.
- ๐ Very low memory usage (1/2 of dictionary).
- ๐ฅ Full-feature and easy-to-use
- ๐งถ Completely thread-safe
- ๐ง Tested and correct
- **\[R\]** written in Rust that has high-performance
- ๐ค Support Python 3.8+ (PyPy & CPython)
- ๐ฆ Over 7 cache algorithms are supported
## Page Content
- [**When i need caching and cachebox?**](#when-i-need-caching-and-cachebox)
- [**Why `cachebox`?**](#why-cachebox)
- [**Installation**](#installation)
- [**Example**](#example)
- [**Learn**](#learn)
- [**Incompatible changes**](#incompatible-changes)
- [**Tips & Notes**](#tips-and-notes)
## When i need caching and cachebox?
**๐ Frequent Data Access** \
If your application frequently accesses the same data, caching can helps you.
**๐ Expensive Operations** \
When data retrieval involves costly operations such as database queries or API calls, caching can save time and resources.
**๐ High Traffic Scenarios** \
In big applications with high user traffic caching can help by reducing the number of operations.
**#๏ธโฃ Web Page Rendering** \
Caching HTML pages can speed up the delivery of static content.
**๐ง Rate Limiting** \
Caching can help you to manage rate limits imposed by third-party APIs by reducing the number of requests sent.
**๐ค Machine Learning Models** \
If your application frequently makes predictions using the same input data, caching the results can save computation time.
**And a lot of other situations ...**
## Why cachebox?
**โก Rust** \
It uses *Rust* language to has high-performance.
**๐งฎ SwissTable** \
It uses Google's high-performance SwissTable hash map. thanks to [hashbrown](https://github.com/rust-lang/hashbrown).
**โจ Low memory usage** \
It has very low memory usage.
**โญ Zero Dependency** \
As we said, `cachebox` written in Rust so you don't have to install any other dependecies.
**๐งถ Thread safe** \
It's completely thread-safe and uses locks to prevent problems.
**๐ Easy To Use** \
You only need to import it and choice your implementation to use and behave with it like a dictionary.
**๐ซ Avoids dog-piling**
It avoids [cache stampede](https://en.wikipedia.org/wiki/Cache_stampede) to have better performance.
## Installation
cachebox is installable by `pip`:
```bash
pip3 install -U cachebox
```
> [!WARNING]\
> The new version v4 has some incompatible with v3, for more info please see [Incompatible changes](#incompatible-changes)
## Example
The simplest example of **cachebox** could look like this:
```python
import cachebox
# Like functools.lru_cache, If maxsize is set to 0, the cache can grow without bound and limit.
@cachebox.cached(cachebox.FIFOCache(maxsize=128))
def factorial(number: int) -> int:
fact = 1
for num in range(2, n + 1):
fact *= num
return fact
assert factorial(5) == 125
assert len(factorial.cache) == 1
# Async are also supported
@cachebox.cached(cachebox.LRUCache(maxsize=128))
async def make_request(method: str, url: str) -> dict:
response = await client.request(method, url)
return response.json()
```
> [!NOTE]\
> Unlike functools.lru_cache and other caching libraries, cachebox will copy `dict`, `list`, and `set`.
> ```python
> @cachebox.cached(cachebox.LRUCache(maxsize=128))
> def make_dict(name: str, age: int) -> dict:
> return {"name": name, "age": age}
>
> d = make_dict("cachebox", 10)
> assert d == {"name": "cachebox", "age": 10}
> d["new-key"] = "new-value"
>
> d2 = make_dict("cachebox", 10)
> # `d2` will be `{"name": "cachebox", "age": 10, "new-key": "new-value"}` if you use other libraries
> assert d2 == {"name": "cachebox", "age": 10}
> ```
## Learn
There are 2 decorators:
- [**cached**](#function-cached): a decorator that helps you to cache your functions and calculations with a lot of options.
- [**cachedmethod**](#function-cachedmethod): this is excatly works like `cached()`, but ignores `self` parameters in hashing and key making.
- [**is_cached**](#function-is_cached): check if a function/method cached by cachebox or not
There are 9 classes:
- [**BaseCacheImpl**](#class-basecacheimpl): base-class for all classes.
- [**Cache**](#class-cache): A simple cache that has no algorithm; this is only a hashmap.
- [**FIFOCache**](#class-fifocache): the FIFO cache will remove the element that has been in the cache the longest.
- [**RRCache**](#class-rrcache): the RR cache will choice randomly element to remove it to make space when necessary.
- [**TTLCache**](#class-ttlcache): the TTL cache will automatically remove the element in the cache that has expired.
- [**LRUCache**](#class-lrucache): the LRU cache will remove the element in the cache that has not been accessed in the longest time.
- [**LFUCache**](#class-lfucache): the LFU cache will remove the element in the cache that has been accessed the least, regardless of time.
- [**VTTLCache**](#class-vttlcache): the TTL cache will automatically remove the element in the cache that has expired when need.
- [**Frozen**](#class-frozen): you can use this class for freezing your caches.
Using this library is very easy and you only need to import cachebox and then use these classes like a dictionary (or use its decorator such as `cached` and `cachedmethod`).
There are some examples for you with different methods for introducing those. \
**All the methods you will see in the examples are common across all classes (except for a few of them).**
* * *
### *function* cached
Decorator to wrap a function with a memoizing callable that saves results in a cache.
**Parameters:**
- `cache`: Specifies a cache that handles and stores the results. if `None` or `dict`, `FIFOCache` will be used.
- `key_maker`: Specifies a function that will be called with the same positional and keyword
arguments as the wrapped function itself, and which has to return a suitable
cache key (must be hashable).
- `clear_reuse`: The wrapped function has a function named `clear_cache` that uses `cache.clear`
method to clear the cache. This parameter will be passed to cache's `clear` method.
- `callback`: Every time the `cache` is used, callback is also called.
The callback arguments are: event number (see `EVENT_MISS` or `EVENT_HIT` variables), key, and then result.
- `copy_level`: The wrapped function always copies the result of your function and then returns it.
This parameter specifies that the wrapped function has to copy which type of results.
`0` means "never copy", `1` means "only copy `dict`, `list`, and `set` results" and
`2` means "always copy the results".
**A simple example:**
```python
import cachebox
@cachebox.cached(cachebox.LRUCache(128))
def sum_as_string(a, b):
return str(a+b)
assert sum_as_string(1, 2) == "3"
assert len(sum_as_string.cache) == 1
sum_as_string.cache_clear()
assert len(sum_as_string.cache) == 0
```
**A key_maker example:**
```python
import cachebox
def simple_key_maker(args: tuple, kwds: dict):
return args[0].path
# Async methods are supported
@cachebox.cached(cachebox.LRUCache(128), key_maker=simple_key_maker)
async def request_handler(request: Request):
return Response("hello man")
```
**A typed key_maker example:**
```python
import cachebox
@cachebox.cached(cachebox.LRUCache(128), key_maker=cachebox.make_typed_key)
def sum_as_string(a, b):
return str(a+b)
sum_as_string(1.0, 1)
sum_as_string(1, 1)
print(len(sum_as_string.cache)) # 2
```
You have also manage functions' caches with `.cache` attribute as you saw in examples.
Also there're more attributes and methods you can use:
```python
import cachebox
@cachebox.cached(cachebox.LRUCache(0))
def sum_as_string(a, b):
return str(a+b)
print(sum_as_string.cache)
# LRUCache(0 / 9223372036854775807, capacity=0)
print(sum_as_string.cache_info())
# CacheInfo(hits=0, misses=0, maxsize=9223372036854775807, length=0, cachememory=8)
# `.cache_clear()` clears the cache
sum_as_string.cache_clear()
```
**callback example:** (Added in v4.2.0)
```python
import cachebox
def callback_func(event: int, key, value):
if event == cachebox.EVENT_MISS:
print("callback_func: miss event", key, value)
elif event == cachebox.EVENT_HIT:
print("callback_func: hit event", key, value)
else:
# unreachable code
raise NotImplementedError
@cachebox.cached(cachebox.LRUCache(0), callback=callback_func)
def func(a, b):
return a + b
assert func(1, 2) == 3
# callback_func: miss event (1, 2) 3
assert func(1, 2) == 3 # hit
# callback_func: hit event (1, 2) 3
assert func(1, 2) == 3 # hit again
# callback_func: hit event (1, 2) 3
assert func(5, 4) == 9
# callback_func: miss event (5, 4) 9
```
> [!NOTE]\
> Recommended use `cached` method for **@staticmethod**s and use [`cachedmethod`](#function-cachedmethod) for **@classmethod**s;
> And set `copy_level` parameter to `2` on **@classmethod**s.
> ```python
> class MyClass:
> def __init__(self, num: int) -> None:
> self.num = num
>
> @classmethod
> @cachedmethod({}, copy_level=2)
> def class_func(cls, num: int):
> return cls(num)
>
> @staticmethod
> @cached({})
> def static_func(num: int):
> return num * 5
> ```
> [!TIP]\
> There's a new feature **since `v4.1.0`** that you can tell to a cached function that don't use cache for a call:
> ```python
> # with `cachebox__ignore=True` parameter, cachebox does not use cache and only calls the function and returns its result.
> sum_as_string(10, 20, cachebox__ignore=True)
> ```
> [!NOTE]\
> You can see [LRUCache here](#class-lrucache).
* * *
### *function* cachedmethod
this is excatly works like `cached()`, but ignores `self` parameters in hashing and key making.
```python
import cachebox
class MyClass:
@cachebox.cachedmethod(cachebox.TTLCache(0, ttl=10))
def my_method(self, name: str):
return "Hello, " + name + "!"
c = MyClass()
c.my_method()
```
> [!NOTE]\
> You can see [TTLCache here](#class-ttlcache).
* * *
### *function* is_cached
Check if a function/method cached by cachebox or not
```python
import cachebox
@cachebox.cached(cachebox.FIFOCache(0))
def func():
pass
assert cachebox.is_cached(func)
```
> [!NOTE]\
> You can see [TTLCache here](#class-ttlcache).
* * *
### *class* BaseCacheImpl
This is the base class of all cache classes such as Cache, FIFOCache, ... \
Do not try to call its constructor, this is only for type-hint.
```python
import cachebox
class ClassName(cachebox.BaseCacheImpl):
# ...
def func(cache: BaseCacheImpl):
# ...
cache = cachebox.LFUCache(0)
assert isinstance(cache, cachebox.BaseCacheImpl)
```
* * *
### *class* Cache
A simple cache that has no algorithm; this is only a hashmap.
> [!TIP]\
> **`Cache` vs `dict`**:
> - it is thread-safe and unordered, while `dict` isn't thread-safe and ordered (Python 3.6+).
> - it uses very lower memory than `dict`.
> - it supports useful and new methods for managing memory, while `dict` does not.
> - it does not support `popitem`, while `dict` does.
> - You can limit the size of `Cache`, but you cannot for `dict`.
| | get | insert | delete | popitem |
| ------------ | ----- | ------- | ------ | ------- |
| Worse-case | O(1) | O(1) | O(1) | N/A |
```python
from cachebox import Cache
# These parameters are common in classes:
# By `maxsize` param, you can specify the limit size of the cache ( zero means infinity ); this is unchangable.
# By `iterable` param, you can create cache from a dict or an iterable.
# If `capacity` param is given, cache attempts to allocate a new hash table with at
# least enough capacity for inserting the given number of elements without reallocating.
cache = Cache(maxsize=100, iterable=None, capacity=100)
# you can behave with it like a dictionary
cache["key"] = "value"
# or you can use `.insert(key, value)` instead of that (recommended)
cache.insert("key", "value")
print(cache["key"]) # value
del cache["key"]
cache["key"] # KeyError: key
# cachebox.Cache does not have any policy, so will raise OverflowError if reached the bound.
cache.update({i:i for i in range(200)})
# OverflowError: The cache has reached the bound.
```
* * *
### *class* FIFOCache
FIFO Cache implementation - First-In First-Out Policy (thread-safe).
In simple terms, the FIFO cache will remove the element that has been in the cache the longest.
| | get | insert | delete(i) | popitem |
| ------------ | ----- | ------- | --------- | ------- |
| Worse-case | O(1) | O(1) | O(min(i, n-i)) | O(1) |
```python
from cachebox import FIFOCache
cache = FIFOCache(5, {i:i*2 for i in range(5)})
print(len(cache)) # 5
cache["new-key"] = "new-value"
print(len(cache)) # 5
print(cache.get(3, "default-val")) # 6
print(cache.get(6, "default-val")) # default-val
print(cache.popitem()) # (1, 2)
# insert method returns a value:
# - If the cache did not have this key present, None is returned.
# - If the cache did have this key present, the value is updated, and the old value is returned.
print(cache.insert(3, "val")) # 6
print(cache.insert("new-key", "val")) # None
# Returns the first key in cache; this is the one which will be removed by `popitem()`.
print(cache.first())
```
* * *
### *class* RRCache
RRCache implementation - Random Replacement policy (thread-safe).
In simple terms, the RR cache will choice randomly element to remove it to make space when necessary.
| | get | insert | delete | popitem |
| ------------ | ----- | ------- | ------ | ------- |
| Worse-case | O(1) | O(1) | O(1) | O(1)~ |
```python
from cachebox import RRCache
cache = RRCache(10, {i:i for i in range(10)})
print(cache.is_full()) # True
print(cache.is_empty()) # False
# Returns the number of elements the map can hold without reallocating.
print(cache.capacity()) # 28
# Shrinks the cache to fit len(self) elements.
cache.shrink_to_fit()
print(cache.capacity()) # 10
print(len(cache)) # 10
cache.clear()
print(len(cache)) # 0
```
* * *
### *class* TTLCache
TTL Cache implementation - Time-To-Live Policy (thread-safe).
In simple terms, the TTL cache will automatically remove the element in the cache that has expired.
| | get | insert | delete(i) | popitem |
| ------------ | ----- | ------- | --------- | ------- |
| Worse-case | O(1)~ | O(1)~ | O(min(i, n-i)) | O(n) |
```python
from cachebox import TTLCache
import time
# The `ttl` param specifies the time-to-live value for each element in cache (in seconds); cannot be zero or negative.
cache = TTLCache(0, ttl=2)
cache.update({i:str(i) for i in range(10)})
print(cache.get_with_expire(2)) # ('2', 1.99)
# Returns the oldest key in cache; this is the one which will be removed by `popitem()`
print(cache.first()) # 0
cache["mykey"] = "value"
time.sleep(2)
cache["mykey"] # KeyError
```
* * *
### *class* LRUCache
LRU Cache implementation - Least recently used policy (thread-safe).
In simple terms, the LRU cache will remove the element in the cache that has not been accessed in the longest time.
| | get | insert | delete(i) | popitem |
| ------------ | ----- | ------- | --------- | ------- |
| Worse-case | O(1)~ | O(1)~ | O(1)~ | O(1)~ |
```python
from cachebox import LRUCache
cache = LRUCache(0, {i:i*2 for i in range(10)})
# access `1`
print(cache[0]) # 0
print(cache.popitem()) # (1, 2)
# .peek() searches for a key-value in the cache and returns it without moving the key to recently used.
print(cache.peek(2)) # 4
print(cache.popitem()) # (3, 6)
# Does the `popitem()` `n` times and returns count of removed items.
print(cache.drain(5)) # 5
```
* * *
### *class* LFUCache
LFU Cache implementation - Least frequantly used policy (thread-safe).
In simple terms, the LFU cache will remove the element in the cache that has been accessed the least, regardless of time.
| | get | insert | delete(i) | popitem |
| ------------ | ----- | ------- | --------- | ------- |
| Worse-case | O(1)~ | O(1)~ | O(n) | O(n) |
```python
from cachebox import LFUCache
cache = cachebox.LFUCache(5)
cache.insert(1, 1)
cache.insert(2, 2)
# access 1 twice
cache[1]
cache[1]
# access 2 once
cache[2]
assert cache.least_frequently_used() == 2
assert cache.least_frequently_used(2) is None # 2 is out of range
for item in cache.items():
print(item)
# (2, '2')
# (1, '1')
```
> [!TIP]\
> `.items()`, `.keys()`, and `.values()` are ordered (v4.0+)
* * *
### *class* VTTLCache
VTTL Cache implementation - Time-To-Live Per-Key Policy (thread-safe).
In simple terms, the TTL cache will automatically remove the element in the cache that has expired when need.
| | get | insert | delete(i) | popitem |
| ------------ | ----- | ------- | --------- | ------- |
| Worse-case | O(1)~ | O(1)~ | O(n) | O(n) |
```python
from cachebox import VTTLCache
import time
# The `ttl` param specifies the time-to-live value for `iterable` (in seconds); cannot be zero or negative.
cache = VTTLCache(100, iterable={i:i for i in range(4)}, ttl=3)
print(len(cache)) # 4
time.sleep(3)
print(len(cache)) # 0
# The "key1" is exists for 5 seconds
cache.insert("key1", "value", ttl=5)
# The "key2" is exists for 2 seconds
cache.insert("key2", "value", ttl=2)
time.sleep(2)
# "key1" is exists for 3 seconds
print(cache.get("key1")) # value
# "key2" has expired
print(cache.get("key2")) # None
```
> [!TIP]
> **`VTTLCache` vs `TTLCache`:**
> - In `VTTLCache` each item has its own unique time-to-live, unlike `TTLCache`.
> - `VTTLCache` is generally slower than `TTLCache`.
* * *
### *class* Frozen
**This is not a cache.** this class can freeze your caches and prevents changes โ๏ธ.
```python
from cachebox import Frozen, FIFOCache
cache = FIFOCache(10, {1:1, 2:2, 3:3})
# parameters:
# cls: your cache
# ignore: If False, will raise TypeError if anyone try to change cache. will do nothing otherwise.
frozen = Frozen(cache, ignore=True)
print(frozen[1]) # 1
print(len(frozen)) # 3
# Frozen ignores this action and do nothing
frozen.insert("key", "value")
print(len(frozen)) # 3
# Let's try with ignore=False
frozen = Frozen(cache, ignore=False)
frozen.insert("key", "value")
# TypeError: This cache is frozen.
```
> [!NOTE]\
> The **Frozen** class can't prevent expiring in [TTLCache](#ttlcache) or [VTTLCache](#vttlcache).
>
> For example:
> ```python
> cache = TTLCache(0, ttl=3, iterable={i:i for i in range(10)})
> frozen = Frozen(cache)
>
> time.sleep(3)
> print(len(frozen)) # 0
> ```
## Incompatible changes
These are changes that are not compatible with the previous version:
**You can see more info about changes in [Changelog](CHANGELOG.md).**
* * *
#### Pickle serializing changed!
If you try to load bytes that has dumped by pickle in previous version, you will get `TypeError` exception.
There's no way to fix that ๐, but it's worth it.
```python
import pickle
with open("old-version.pickle", "rb") as fd:
pickle.load(fd) # TypeError: ...
```
* * *
#### Iterators changed!
In previous versions, the iterators are not ordered; but now all of iterators are ordered.
this means all of `.keys()`, `.values()`, `.items()`, and `iter(cache)` methods are ordered now.
For example:
```python
from cachebox import FIFOCache
cache = FIFOCache(maxsize=4)
for i in range(4):
cache[i] = str(i)
for key in cache:
print(key)
# 0
# 1
# 2
# 3
```
* * *
#### `.insert()` method changed!
In new version, the `.insert()` method has a small change that can help you in coding.
`.insert()` equals to `self[key] = value`, but:
- If the cache did not have this key present, **None is returned**.
- If the cache did have this key present, the value is updated,
and **the old value is returned**. The key is not updated, though;
For example:
```python
from cachebox import LRUCache
lru = LRUCache(10, {"a": "b", "c": "d"})
print(lru.insert("a", "new-key")) # "b"
print(lru.insert("no-exists", "val")) # None
```
## Tips and Notes
#### How to save caches in files?
there's no built-in file-based implementation, but you can use `pickle` for saving caches in files. For example:
```python
import cachebox
import pickle
c = cachebox.LRUCache(100, {i:i for i in range(78)})
with open("file", "wb") as fd:
pickle.dump(c, fd)
with open("file", "rb") as fd:
loaded = pickle.load(fd)
assert c == loaded
assert c.capacity() == loaded.capacity()
```
> [!TIP]\
> For more, see this [issue](https://github.com/awolverp/cachebox/issues/8).
> [!NOTE]\
> Supported since version 3.1.0
* * *
#### How to copy the caches?
Use `copy.deepcopy` or `copy.copy` for copying caches. For example:
```python
import cachebox, copy
c = cachebox.LRUCache(100, {i:i for i in range(78)})
copied = copy.copy(c)
assert c == copied
assert c.capacity() == copied.capacity()
```
> [!NOTE]\
> Supported since version 3.1.0
## License
This repository is licensed under the [MIT License](LICENSE)
Raw data
{
"_id": null,
"home_page": "https://github.com/awolverp/cachebox",
"name": "cachebox",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "caching, cached, cachebox, cache, in-memory-caching, memoizing",
"author": "awolverp",
"author_email": "awolverp <awolverp@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/f8/04/6a30ec4fad72f39b76c87c0668977f51823018d0fcd92d9cf62f02d7bd60/cachebox-4.5.1.tar.gz",
"platform": null,
"description": "# cachebox\n\n\n\n\n\n\n\n[**Releases**](https://github.com/awolverp/cachebox/releases) | [**Benchmarks**](https://github.com/awolverp/cachebox-benchmark) | [**Issues**](https://github.com/awolverp/cachebox/issues/new)\n\n**The fastest caching Python library written in Rust**\n\n### What does it do?\nYou can easily and powerfully perform caching operations in Python as fast as possible.\nThis can make your application very faster and it's a good choice in big applications.\n\n- \ud83d\ude80 10-50x faster than other caching libraries.\n- \ud83d\udcca Very low memory usage (1/2 of dictionary).\n- \ud83d\udd25 Full-feature and easy-to-use\n- \ud83e\uddf6 Completely thread-safe\n- \ud83d\udd27 Tested and correct\n- **\\[R\\]** written in Rust that has high-performance\n- \ud83e\udd1d Support Python 3.8+ (PyPy & CPython)\n- \ud83d\udce6 Over 7 cache algorithms are supported\n\n## Page Content\n- [**When i need caching and cachebox?**](#when-i-need-caching-and-cachebox)\n- [**Why `cachebox`?**](#why-cachebox)\n- [**Installation**](#installation)\n- [**Example**](#example)\n- [**Learn**](#learn)\n- [**Incompatible changes**](#incompatible-changes)\n- [**Tips & Notes**](#tips-and-notes)\n\n## When i need caching and cachebox?\n**\ud83d\udcc8 Frequent Data Access** \\\nIf your application frequently accesses the same data, caching can helps you.\n\n**\ud83d\udc8e Expensive Operations** \\\nWhen data retrieval involves costly operations such as database queries or API calls, caching can save time and resources.\n\n**\ud83d\ude97 High Traffic Scenarios** \\\nIn big applications with high user traffic caching can help by reducing the number of operations.\n\n**#\ufe0f\u20e3 Web Page Rendering** \\\nCaching HTML pages can speed up the delivery of static content.\n\n**\ud83d\udea7 Rate Limiting** \\\nCaching can help you to manage rate limits imposed by third-party APIs by reducing the number of requests sent.\n\n**\ud83e\udd16 Machine Learning Models** \\\nIf your application frequently makes predictions using the same input data, caching the results can save computation time.\n\n**And a lot of other situations ...**\n\n## Why cachebox?\n**\u26a1 Rust** \\\nIt uses *Rust* language to has high-performance.\n\n**\ud83e\uddee SwissTable** \\\nIt uses Google's high-performance SwissTable hash map. thanks to [hashbrown](https://github.com/rust-lang/hashbrown).\n\n**\u2728 Low memory usage** \\\nIt has very low memory usage.\n\n**\u2b50 Zero Dependency** \\\nAs we said, `cachebox` written in Rust so you don't have to install any other dependecies.\n\n**\ud83e\uddf6 Thread safe** \\\nIt's completely thread-safe and uses locks to prevent problems.\n\n**\ud83d\udc4c Easy To Use** \\\nYou only need to import it and choice your implementation to use and behave with it like a dictionary.\n\n**\ud83d\udeab Avoids dog-piling**\nIt avoids [cache stampede](https://en.wikipedia.org/wiki/Cache_stampede) to have better performance.\n\n## Installation\ncachebox is installable by `pip`:\n```bash\npip3 install -U cachebox\n```\n\n> [!WARNING]\\\n> The new version v4 has some incompatible with v3, for more info please see [Incompatible changes](#incompatible-changes)\n\n## Example\nThe simplest example of **cachebox** could look like this:\n```python\nimport cachebox\n\n# Like functools.lru_cache, If maxsize is set to 0, the cache can grow without bound and limit.\n@cachebox.cached(cachebox.FIFOCache(maxsize=128))\ndef factorial(number: int) -> int:\n fact = 1\n for num in range(2, n + 1):\n fact *= num\n return fact\n\nassert factorial(5) == 125\nassert len(factorial.cache) == 1\n\n# Async are also supported\n@cachebox.cached(cachebox.LRUCache(maxsize=128))\nasync def make_request(method: str, url: str) -> dict:\n response = await client.request(method, url)\n return response.json()\n```\n\n> [!NOTE]\\\n> Unlike functools.lru_cache and other caching libraries, cachebox will copy `dict`, `list`, and `set`.\n> ```python\n> @cachebox.cached(cachebox.LRUCache(maxsize=128))\n> def make_dict(name: str, age: int) -> dict:\n> return {\"name\": name, \"age\": age}\n>\n> d = make_dict(\"cachebox\", 10)\n> assert d == {\"name\": \"cachebox\", \"age\": 10}\n> d[\"new-key\"] = \"new-value\"\n> \n> d2 = make_dict(\"cachebox\", 10)\n> # `d2` will be `{\"name\": \"cachebox\", \"age\": 10, \"new-key\": \"new-value\"}` if you use other libraries\n> assert d2 == {\"name\": \"cachebox\", \"age\": 10}\n> ```\n\n## Learn\nThere are 2 decorators:\n- [**cached**](#function-cached): a decorator that helps you to cache your functions and calculations with a lot of options.\n- [**cachedmethod**](#function-cachedmethod): this is excatly works like `cached()`, but ignores `self` parameters in hashing and key making.\n- [**is_cached**](#function-is_cached): check if a function/method cached by cachebox or not\n\nThere are 9 classes:\n- [**BaseCacheImpl**](#class-basecacheimpl): base-class for all classes.\n- [**Cache**](#class-cache): A simple cache that has no algorithm; this is only a hashmap.\n- [**FIFOCache**](#class-fifocache): the FIFO cache will remove the element that has been in the cache the longest.\n- [**RRCache**](#class-rrcache): the RR cache will choice randomly element to remove it to make space when necessary.\n- [**TTLCache**](#class-ttlcache): the TTL cache will automatically remove the element in the cache that has expired.\n- [**LRUCache**](#class-lrucache): the LRU cache will remove the element in the cache that has not been accessed in the longest time.\n- [**LFUCache**](#class-lfucache): the LFU cache will remove the element in the cache that has been accessed the least, regardless of time.\n- [**VTTLCache**](#class-vttlcache): the TTL cache will automatically remove the element in the cache that has expired when need.\n- [**Frozen**](#class-frozen): you can use this class for freezing your caches.\n\nUsing this library is very easy and you only need to import cachebox and then use these classes like a dictionary (or use its decorator such as `cached` and `cachedmethod`).\n\nThere are some examples for you with different methods for introducing those. \\\n**All the methods you will see in the examples are common across all classes (except for a few of them).**\n\n* * *\n\n### *function* cached\n\nDecorator to wrap a function with a memoizing callable that saves results in a cache.\n\n**Parameters:**\n- `cache`: Specifies a cache that handles and stores the results. if `None` or `dict`, `FIFOCache` will be used.\n\n- `key_maker`: Specifies a function that will be called with the same positional and keyword\n arguments as the wrapped function itself, and which has to return a suitable\n cache key (must be hashable).\n\n- `clear_reuse`: The wrapped function has a function named `clear_cache` that uses `cache.clear`\n method to clear the cache. This parameter will be passed to cache's `clear` method.\n\n- `callback`: Every time the `cache` is used, callback is also called.\n The callback arguments are: event number (see `EVENT_MISS` or `EVENT_HIT` variables), key, and then result.\n\n- `copy_level`: The wrapped function always copies the result of your function and then returns it.\n This parameter specifies that the wrapped function has to copy which type of results.\n `0` means \"never copy\", `1` means \"only copy `dict`, `list`, and `set` results\" and\n `2` means \"always copy the results\".\n\n**A simple example:**\n```python\nimport cachebox\n\n@cachebox.cached(cachebox.LRUCache(128))\ndef sum_as_string(a, b):\n return str(a+b)\n\nassert sum_as_string(1, 2) == \"3\"\n\nassert len(sum_as_string.cache) == 1\nsum_as_string.cache_clear()\nassert len(sum_as_string.cache) == 0\n```\n\n**A key_maker example:**\n```python\nimport cachebox\n\ndef simple_key_maker(args: tuple, kwds: dict):\n return args[0].path\n\n# Async methods are supported\n@cachebox.cached(cachebox.LRUCache(128), key_maker=simple_key_maker)\nasync def request_handler(request: Request):\n return Response(\"hello man\")\n```\n\n**A typed key_maker example:**\n```python\nimport cachebox\n\n@cachebox.cached(cachebox.LRUCache(128), key_maker=cachebox.make_typed_key)\ndef sum_as_string(a, b):\n return str(a+b)\n\nsum_as_string(1.0, 1)\nsum_as_string(1, 1)\nprint(len(sum_as_string.cache)) # 2\n```\n\nYou have also manage functions' caches with `.cache` attribute as you saw in examples.\nAlso there're more attributes and methods you can use:\n```python\nimport cachebox\n\n@cachebox.cached(cachebox.LRUCache(0))\ndef sum_as_string(a, b):\n return str(a+b)\n\nprint(sum_as_string.cache)\n# LRUCache(0 / 9223372036854775807, capacity=0)\n\nprint(sum_as_string.cache_info())\n# CacheInfo(hits=0, misses=0, maxsize=9223372036854775807, length=0, cachememory=8)\n\n# `.cache_clear()` clears the cache\nsum_as_string.cache_clear()\n```\n\n**callback example:** (Added in v4.2.0)\n```python\nimport cachebox\n\ndef callback_func(event: int, key, value):\n if event == cachebox.EVENT_MISS:\n print(\"callback_func: miss event\", key, value)\n elif event == cachebox.EVENT_HIT:\n print(\"callback_func: hit event\", key, value)\n else:\n # unreachable code\n raise NotImplementedError\n\n@cachebox.cached(cachebox.LRUCache(0), callback=callback_func)\ndef func(a, b):\n return a + b\n\nassert func(1, 2) == 3\n# callback_func: miss event (1, 2) 3\n\nassert func(1, 2) == 3 # hit\n# callback_func: hit event (1, 2) 3\n\nassert func(1, 2) == 3 # hit again\n# callback_func: hit event (1, 2) 3\n\nassert func(5, 4) == 9\n# callback_func: miss event (5, 4) 9\n```\n\n> [!NOTE]\\\n> Recommended use `cached` method for **@staticmethod**s and use [`cachedmethod`](#function-cachedmethod) for **@classmethod**s;\n> And set `copy_level` parameter to `2` on **@classmethod**s.\n> ```python\n> class MyClass:\n> def __init__(self, num: int) -> None:\n> self.num = num\n>\n> @classmethod\n> @cachedmethod({}, copy_level=2)\n> def class_func(cls, num: int):\n> return cls(num)\n>\n> @staticmethod\n> @cached({})\n> def static_func(num: int):\n> return num * 5\n> ```\n\n> [!TIP]\\\n> There's a new feature **since `v4.1.0`** that you can tell to a cached function that don't use cache for a call:\n> ```python\n> # with `cachebox__ignore=True` parameter, cachebox does not use cache and only calls the function and returns its result.\n> sum_as_string(10, 20, cachebox__ignore=True)\n> ```\n\n> [!NOTE]\\\n> You can see [LRUCache here](#class-lrucache).\n\n* * *\n\n### *function* cachedmethod\n\nthis is excatly works like `cached()`, but ignores `self` parameters in hashing and key making.\n\n```python\nimport cachebox\n\nclass MyClass:\n @cachebox.cachedmethod(cachebox.TTLCache(0, ttl=10))\n def my_method(self, name: str):\n return \"Hello, \" + name + \"!\"\n\nc = MyClass()\nc.my_method()\n```\n\n> [!NOTE]\\\n> You can see [TTLCache here](#class-ttlcache).\n\n* * *\n\n### *function* is_cached\n\nCheck if a function/method cached by cachebox or not\n\n```python\nimport cachebox\n\n@cachebox.cached(cachebox.FIFOCache(0))\ndef func():\n pass\n\nassert cachebox.is_cached(func)\n```\n\n> [!NOTE]\\\n> You can see [TTLCache here](#class-ttlcache).\n\n* * *\n\n### *class* BaseCacheImpl\nThis is the base class of all cache classes such as Cache, FIFOCache, ... \\\nDo not try to call its constructor, this is only for type-hint.\n\n```python\nimport cachebox\n\nclass ClassName(cachebox.BaseCacheImpl):\n # ...\n\ndef func(cache: BaseCacheImpl):\n # ...\n\ncache = cachebox.LFUCache(0)\nassert isinstance(cache, cachebox.BaseCacheImpl)\n```\n\n* * *\n\n### *class* Cache\nA simple cache that has no algorithm; this is only a hashmap.\n\n> [!TIP]\\\n> **`Cache` vs `dict`**:\n> - it is thread-safe and unordered, while `dict` isn't thread-safe and ordered (Python 3.6+).\n> - it uses very lower memory than `dict`.\n> - it supports useful and new methods for managing memory, while `dict` does not.\n> - it does not support `popitem`, while `dict` does.\n> - You can limit the size of `Cache`, but you cannot for `dict`.\n\n| | get | insert | delete | popitem |\n| ------------ | ----- | ------- | ------ | ------- |\n| Worse-case | O(1) | O(1) | O(1) | N/A |\n\n```python\nfrom cachebox import Cache\n\n# These parameters are common in classes:\n# By `maxsize` param, you can specify the limit size of the cache ( zero means infinity ); this is unchangable.\n# By `iterable` param, you can create cache from a dict or an iterable.\n# If `capacity` param is given, cache attempts to allocate a new hash table with at\n# least enough capacity for inserting the given number of elements without reallocating.\ncache = Cache(maxsize=100, iterable=None, capacity=100)\n\n# you can behave with it like a dictionary\ncache[\"key\"] = \"value\"\n# or you can use `.insert(key, value)` instead of that (recommended)\ncache.insert(\"key\", \"value\")\n\nprint(cache[\"key\"]) # value\n\ndel cache[\"key\"]\ncache[\"key\"] # KeyError: key\n\n# cachebox.Cache does not have any policy, so will raise OverflowError if reached the bound.\ncache.update({i:i for i in range(200)})\n# OverflowError: The cache has reached the bound.\n```\n\n* * *\n\n### *class* FIFOCache\nFIFO Cache implementation - First-In First-Out Policy (thread-safe).\n\nIn simple terms, the FIFO cache will remove the element that has been in the cache the longest.\n\n| | get | insert | delete(i) | popitem |\n| ------------ | ----- | ------- | --------- | ------- |\n| Worse-case | O(1) | O(1) | O(min(i, n-i)) | O(1) |\n\n```python\nfrom cachebox import FIFOCache\n\ncache = FIFOCache(5, {i:i*2 for i in range(5)})\n\nprint(len(cache)) # 5\ncache[\"new-key\"] = \"new-value\"\nprint(len(cache)) # 5\n\nprint(cache.get(3, \"default-val\")) # 6\nprint(cache.get(6, \"default-val\")) # default-val\n\nprint(cache.popitem()) # (1, 2)\n\n# insert method returns a value:\n# - If the cache did not have this key present, None is returned.\n# - If the cache did have this key present, the value is updated, and the old value is returned.\nprint(cache.insert(3, \"val\")) # 6\nprint(cache.insert(\"new-key\", \"val\")) # None\n\n# Returns the first key in cache; this is the one which will be removed by `popitem()`.\nprint(cache.first())\n```\n\n* * *\n\n### *class* RRCache\nRRCache implementation - Random Replacement policy (thread-safe).\n\nIn simple terms, the RR cache will choice randomly element to remove it to make space when necessary.\n\n| | get | insert | delete | popitem |\n| ------------ | ----- | ------- | ------ | ------- |\n| Worse-case | O(1) | O(1) | O(1) | O(1)~ |\n\n```python\nfrom cachebox import RRCache\n\ncache = RRCache(10, {i:i for i in range(10)})\nprint(cache.is_full()) # True\nprint(cache.is_empty()) # False\n\n# Returns the number of elements the map can hold without reallocating.\nprint(cache.capacity()) # 28\n\n# Shrinks the cache to fit len(self) elements.\ncache.shrink_to_fit()\nprint(cache.capacity()) # 10\n\nprint(len(cache)) # 10\ncache.clear()\nprint(len(cache)) # 0\n```\n\n* * *\n\n### *class* TTLCache\nTTL Cache implementation - Time-To-Live Policy (thread-safe).\n\nIn simple terms, the TTL cache will automatically remove the element in the cache that has expired.\n\n| | get | insert | delete(i) | popitem |\n| ------------ | ----- | ------- | --------- | ------- |\n| Worse-case | O(1)~ | O(1)~ | O(min(i, n-i)) | O(n) |\n\n```python\nfrom cachebox import TTLCache\nimport time\n\n# The `ttl` param specifies the time-to-live value for each element in cache (in seconds); cannot be zero or negative.\ncache = TTLCache(0, ttl=2)\ncache.update({i:str(i) for i in range(10)})\n\nprint(cache.get_with_expire(2)) # ('2', 1.99)\n\n# Returns the oldest key in cache; this is the one which will be removed by `popitem()` \nprint(cache.first()) # 0\n\ncache[\"mykey\"] = \"value\"\ntime.sleep(2)\ncache[\"mykey\"] # KeyError\n```\n\n* * *\n\n### *class* LRUCache\nLRU Cache implementation - Least recently used policy (thread-safe).\n\nIn simple terms, the LRU cache will remove the element in the cache that has not been accessed in the longest time.\n\n| | get | insert | delete(i) | popitem |\n| ------------ | ----- | ------- | --------- | ------- |\n| Worse-case | O(1)~ | O(1)~ | O(1)~ | O(1)~ |\n\n```python\nfrom cachebox import LRUCache\n\ncache = LRUCache(0, {i:i*2 for i in range(10)})\n\n# access `1`\nprint(cache[0]) # 0\nprint(cache.popitem()) # (1, 2)\n\n# .peek() searches for a key-value in the cache and returns it without moving the key to recently used.\nprint(cache.peek(2)) # 4\nprint(cache.popitem()) # (3, 6)\n\n# Does the `popitem()` `n` times and returns count of removed items.\nprint(cache.drain(5)) # 5\n```\n\n* * *\n\n### *class* LFUCache\nLFU Cache implementation - Least frequantly used policy (thread-safe).\n\nIn simple terms, the LFU cache will remove the element in the cache that has been accessed the least, regardless of time.\n\n| | get | insert | delete(i) | popitem |\n| ------------ | ----- | ------- | --------- | ------- |\n| Worse-case | O(1)~ | O(1)~ | O(n) | O(n) |\n\n```python\nfrom cachebox import LFUCache\n\ncache = cachebox.LFUCache(5)\ncache.insert(1, 1)\ncache.insert(2, 2)\n\n# access 1 twice\ncache[1]\ncache[1]\n\n# access 2 once\ncache[2]\n\nassert cache.least_frequently_used() == 2\nassert cache.least_frequently_used(2) is None # 2 is out of range\n\nfor item in cache.items():\n print(item)\n# (2, '2')\n# (1, '1')\n```\n\n> [!TIP]\\\n> `.items()`, `.keys()`, and `.values()` are ordered (v4.0+)\n\n* * *\n\n### *class* VTTLCache\nVTTL Cache implementation - Time-To-Live Per-Key Policy (thread-safe).\n\nIn simple terms, the TTL cache will automatically remove the element in the cache that has expired when need.\n\n| | get | insert | delete(i) | popitem |\n| ------------ | ----- | ------- | --------- | ------- |\n| Worse-case | O(1)~ | O(1)~ | O(n) | O(n) |\n\n```python\nfrom cachebox import VTTLCache\nimport time\n\n# The `ttl` param specifies the time-to-live value for `iterable` (in seconds); cannot be zero or negative.\ncache = VTTLCache(100, iterable={i:i for i in range(4)}, ttl=3)\nprint(len(cache)) # 4\ntime.sleep(3)\nprint(len(cache)) # 0\n\n# The \"key1\" is exists for 5 seconds\ncache.insert(\"key1\", \"value\", ttl=5)\n# The \"key2\" is exists for 2 seconds\ncache.insert(\"key2\", \"value\", ttl=2)\n\ntime.sleep(2)\n# \"key1\" is exists for 3 seconds\nprint(cache.get(\"key1\")) # value\n\n# \"key2\" has expired\nprint(cache.get(\"key2\")) # None\n```\n\n> [!TIP]\n> **`VTTLCache` vs `TTLCache`:**\n> - In `VTTLCache` each item has its own unique time-to-live, unlike `TTLCache`.\n> - `VTTLCache` is generally slower than `TTLCache`.\n\n* * *\n\n### *class* Frozen\n**This is not a cache.** this class can freeze your caches and prevents changes \u2744\ufe0f.\n\n```python\nfrom cachebox import Frozen, FIFOCache\n\ncache = FIFOCache(10, {1:1, 2:2, 3:3})\n\n# parameters:\n# cls: your cache\n# ignore: If False, will raise TypeError if anyone try to change cache. will do nothing otherwise.\nfrozen = Frozen(cache, ignore=True)\nprint(frozen[1]) # 1\nprint(len(frozen)) # 3\n\n# Frozen ignores this action and do nothing\nfrozen.insert(\"key\", \"value\")\nprint(len(frozen)) # 3\n\n# Let's try with ignore=False\nfrozen = Frozen(cache, ignore=False)\n\nfrozen.insert(\"key\", \"value\")\n# TypeError: This cache is frozen.\n```\n\n> [!NOTE]\\\n> The **Frozen** class can't prevent expiring in [TTLCache](#ttlcache) or [VTTLCache](#vttlcache).\n>\n> For example:\n> ```python\n> cache = TTLCache(0, ttl=3, iterable={i:i for i in range(10)})\n> frozen = Frozen(cache)\n> \n> time.sleep(3)\n> print(len(frozen)) # 0\n> ```\n\n## Incompatible changes\nThese are changes that are not compatible with the previous version:\n\n**You can see more info about changes in [Changelog](CHANGELOG.md).**\n\n* * *\n\n#### Pickle serializing changed!\nIf you try to load bytes that has dumped by pickle in previous version, you will get `TypeError` exception.\nThere's no way to fix that \ud83d\udc94, but it's worth it.\n\n```python\nimport pickle\n\nwith open(\"old-version.pickle\", \"rb\") as fd:\n pickle.load(fd) # TypeError: ...\n```\n\n* * *\n\n#### Iterators changed!\nIn previous versions, the iterators are not ordered; but now all of iterators are ordered.\nthis means all of `.keys()`, `.values()`, `.items()`, and `iter(cache)` methods are ordered now.\n\nFor example:\n```python\nfrom cachebox import FIFOCache\n\ncache = FIFOCache(maxsize=4)\nfor i in range(4):\n cache[i] = str(i)\n\nfor key in cache:\n print(key)\n# 0\n# 1\n# 2\n# 3\n```\n\n* * *\n\n#### `.insert()` method changed!\nIn new version, the `.insert()` method has a small change that can help you in coding.\n\n`.insert()` equals to `self[key] = value`, but:\n- If the cache did not have this key present, **None is returned**.\n- If the cache did have this key present, the value is updated,\nand **the old value is returned**. The key is not updated, though;\n\nFor example:\n```python\nfrom cachebox import LRUCache\n\nlru = LRUCache(10, {\"a\": \"b\", \"c\": \"d\"})\n\nprint(lru.insert(\"a\", \"new-key\")) # \"b\"\nprint(lru.insert(\"no-exists\", \"val\")) # None\n```\n\n## Tips and Notes\n#### How to save caches in files?\nthere's no built-in file-based implementation, but you can use `pickle` for saving caches in files. For example:\n```python\nimport cachebox\nimport pickle\nc = cachebox.LRUCache(100, {i:i for i in range(78)})\n\nwith open(\"file\", \"wb\") as fd:\n pickle.dump(c, fd)\n\nwith open(\"file\", \"rb\") as fd:\n loaded = pickle.load(fd)\n\nassert c == loaded\nassert c.capacity() == loaded.capacity()\n```\n\n> [!TIP]\\\n> For more, see this [issue](https://github.com/awolverp/cachebox/issues/8).\n\n> [!NOTE]\\\n> Supported since version 3.1.0\n\n* * *\n\n#### How to copy the caches?\nUse `copy.deepcopy` or `copy.copy` for copying caches. For example:\n```python\nimport cachebox, copy\nc = cachebox.LRUCache(100, {i:i for i in range(78)})\n\ncopied = copy.copy(c)\n\nassert c == copied\nassert c.capacity() == copied.capacity()\n```\n\n> [!NOTE]\\\n> Supported since version 3.1.0\n\n## License\nThis repository is licensed under the [MIT License](LICENSE)\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "The fastest memoizing and caching Python library written in Rust",
"version": "4.5.1",
"project_urls": {
"Homepage": "https://github.com/awolverp/cachebox"
},
"split_keywords": [
"caching",
" cached",
" cachebox",
" cache",
" in-memory-caching",
" memoizing"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "a3e471edd79321ef236242792b7f14a9bfa52a31f2cafd55019428487e83909b",
"md5": "169495eaf8e3243aebabd741833f6fd0",
"sha256": "07b79a33b17fcd55964061bdf83d46da3d182d6f7382c3c729f8d1cc45501c28"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp310-cp310-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "169495eaf8e3243aebabd741833f6fd0",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 382936,
"upload_time": "2025-02-01T09:17:08",
"upload_time_iso_8601": "2025-02-01T09:17:08.729756Z",
"url": "https://files.pythonhosted.org/packages/a3/e4/71edd79321ef236242792b7f14a9bfa52a31f2cafd55019428487e83909b/cachebox-4.5.1-cp310-cp310-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "afee6b1a9a27f07e08123286b611333e6954d72b3415d1ed87f93ad5a70f5b21",
"md5": "52614e43b88a0bf7286f6980b102a059",
"sha256": "162fc4b50bd91d04c921f0bc69c4420124354cf2f0174a18b6b36ff8fc90d69d"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "52614e43b88a0bf7286f6980b102a059",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 338610,
"upload_time": "2025-02-01T09:17:10",
"upload_time_iso_8601": "2025-02-01T09:17:10.703996Z",
"url": "https://files.pythonhosted.org/packages/af/ee/6b1a9a27f07e08123286b611333e6954d72b3415d1ed87f93ad5a70f5b21/cachebox-4.5.1-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6a77ec868b519bcfc1389b1d481f33069e2e2c798f59a2f83f0f8901801327fe",
"md5": "7056606569feda53f73034e3fb345f12",
"sha256": "ec41d05a3b33cd43d1bf98a942b7309a80a0ae41a92363074356d75de05bbd9b"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "7056606569feda53f73034e3fb345f12",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 358916,
"upload_time": "2025-02-01T09:17:12",
"upload_time_iso_8601": "2025-02-01T09:17:12.652239Z",
"url": "https://files.pythonhosted.org/packages/6a/77/ec868b519bcfc1389b1d481f33069e2e2c798f59a2f83f0f8901801327fe/cachebox-4.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0e6c4585245b5d9d25d08e39b419bbff0a72beb6043dd791663da7e77a0bfbc1",
"md5": "c7ac28e8ae75c4f6f06f136d0a0b8b7e",
"sha256": "4aaa1238bdeb2cd6e3f282c28e38259a2fc9a77b0f8a3d37f954b93f6c07df40"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "c7ac28e8ae75c4f6f06f136d0a0b8b7e",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 390273,
"upload_time": "2025-02-01T09:17:14",
"upload_time_iso_8601": "2025-02-01T09:17:14.764776Z",
"url": "https://files.pythonhosted.org/packages/0e/6c/4585245b5d9d25d08e39b419bbff0a72beb6043dd791663da7e77a0bfbc1/cachebox-4.5.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2d46ea7298e14f842978b8e0b007175d67c70a3ffccb74c70550ce8d582fdebd",
"md5": "656bd0b2a761d6b809ea4749e77b4750",
"sha256": "301a395a9581cd956feb978a895f88003f669493359979d52588bb2fe745a4b2"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "656bd0b2a761d6b809ea4749e77b4750",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 423286,
"upload_time": "2025-02-01T09:17:15",
"upload_time_iso_8601": "2025-02-01T09:17:15.825614Z",
"url": "https://files.pythonhosted.org/packages/2d/46/ea7298e14f842978b8e0b007175d67c70a3ffccb74c70550ce8d582fdebd/cachebox-4.5.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5fb64dfb65c73c2df40bfd8681faefa8f4790aae86e1a743c6de7b32cba1c3ea",
"md5": "0c68d0670108693af6957557bf3eacf5",
"sha256": "ad1def139e2d9d591ff03093e96ad195c1ad792b420256cdc28ff7ac45b999d0"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "0c68d0670108693af6957557bf3eacf5",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 637596,
"upload_time": "2025-02-01T09:17:17",
"upload_time_iso_8601": "2025-02-01T09:17:17.724273Z",
"url": "https://files.pythonhosted.org/packages/5f/b6/4dfb65c73c2df40bfd8681faefa8f4790aae86e1a743c6de7b32cba1c3ea/cachebox-4.5.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4854ab998a94a03f13f48412050566c6b86c64cd95dcfc326b8b70cc1b819941",
"md5": "bdb89096fc7265b3211349f7afe07f7a",
"sha256": "f1fdb0ee3d84529209b51a17351df75dcb4f2f340248c10d2e0aabdda141bfe6"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "bdb89096fc7265b3211349f7afe07f7a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 387579,
"upload_time": "2025-02-01T09:17:19",
"upload_time_iso_8601": "2025-02-01T09:17:19.921996Z",
"url": "https://files.pythonhosted.org/packages/48/54/ab998a94a03f13f48412050566c6b86c64cd95dcfc326b8b70cc1b819941/cachebox-4.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3fdef0e560aaf6a5c8243e1fafb2aba9b0f521a3a5afbfb26e5c619a7b397d9c",
"md5": "653248e00f3bab2d0c137a3f94658bee",
"sha256": "e9b4d4311e0bf9198a39568f2ce83a42760a4b0046ac32c98b4ee7ec3e35c533"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "653248e00f3bab2d0c137a3f94658bee",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 402410,
"upload_time": "2025-02-01T09:17:21",
"upload_time_iso_8601": "2025-02-01T09:17:21.852295Z",
"url": "https://files.pythonhosted.org/packages/3f/de/f0e560aaf6a5c8243e1fafb2aba9b0f521a3a5afbfb26e5c619a7b397d9c/cachebox-4.5.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "41983c2e3cd4c3f44cf4379025fb6196195481a7c4eda1100f0c63cb1f70c515",
"md5": "bbcb295e25bbbcdc66614bc013365882",
"sha256": "98bad031cf5dc8b5ab09a0c81e5769e60b32d1c1da2089716c886281ace68dcc"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp310-cp310-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "bbcb295e25bbbcdc66614bc013365882",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 536097,
"upload_time": "2025-02-01T09:17:23",
"upload_time_iso_8601": "2025-02-01T09:17:23.702211Z",
"url": "https://files.pythonhosted.org/packages/41/98/3c2e3cd4c3f44cf4379025fb6196195481a7c4eda1100f0c63cb1f70c515/cachebox-4.5.1-cp310-cp310-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7d1419e50039940da4bca92a1c316ad2c49540e56d3df96a99b19476273efb85",
"md5": "e4e84c1cc1eacc9214df18221134671a",
"sha256": "c77243eab84514b4542edf7a3398d13551fb69abba635a44d5eda9b73a7007c0"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp310-cp310-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "e4e84c1cc1eacc9214df18221134671a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 651208,
"upload_time": "2025-02-01T09:17:24",
"upload_time_iso_8601": "2025-02-01T09:17:24.907169Z",
"url": "https://files.pythonhosted.org/packages/7d/14/19e50039940da4bca92a1c316ad2c49540e56d3df96a99b19476273efb85/cachebox-4.5.1-cp310-cp310-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "613b51347dffe77281cf620b621377e827727ebf2c1408909ba493248db9ae29",
"md5": "a63468bd0aa88c4b2dc6b6d2fc6fd749",
"sha256": "f2445d9cf5688af76ab9daaddf3fc30a49da03aecdb182876d7efc43fdd61090"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp310-cp310-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "a63468bd0aa88c4b2dc6b6d2fc6fd749",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 556367,
"upload_time": "2025-02-01T09:17:26",
"upload_time_iso_8601": "2025-02-01T09:17:26.960473Z",
"url": "https://files.pythonhosted.org/packages/61/3b/51347dffe77281cf620b621377e827727ebf2c1408909ba493248db9ae29/cachebox-4.5.1-cp310-cp310-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "267dd8ae4db217589af49cb25c5e4b43d3afabe593446262bcfc10d64cbfe016",
"md5": "36ef2d26be0822828a095496a9f7b97a",
"sha256": "991c5ee72ea4afe997e3a461a9d69fe61d290e7fce591e9e7eca1b0074ed7778"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "36ef2d26be0822828a095496a9f7b97a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 268619,
"upload_time": "2025-02-01T09:17:28",
"upload_time_iso_8601": "2025-02-01T09:17:28.130933Z",
"url": "https://files.pythonhosted.org/packages/26/7d/d8ae4db217589af49cb25c5e4b43d3afabe593446262bcfc10d64cbfe016/cachebox-4.5.1-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3e7fa03e3c7cf96457c2843bb7cb855d26a7a18f7903ce9b5db39dad5106121d",
"md5": "54eaf86a453b1aae797e4a628b3dfff5",
"sha256": "e58f87039d53c2605e6d5a97676504a6a503ab71c618c516270f7f9b954e2bc4"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "54eaf86a453b1aae797e4a628b3dfff5",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 279085,
"upload_time": "2025-02-01T09:17:30",
"upload_time_iso_8601": "2025-02-01T09:17:30.885771Z",
"url": "https://files.pythonhosted.org/packages/3e/7f/a03e3c7cf96457c2843bb7cb855d26a7a18f7903ce9b5db39dad5106121d/cachebox-4.5.1-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0656297f85a85a53d34c82f30a6f252f4590372150e3aff4d8a7ea8274796460",
"md5": "2f2abca53126123b96de5b336df65f61",
"sha256": "d92316dad7df0d1db6ab614e07c1b16ee57760e482f6300950f60939380ec1e0"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp311-cp311-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "2f2abca53126123b96de5b336df65f61",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 382661,
"upload_time": "2025-02-01T09:17:32",
"upload_time_iso_8601": "2025-02-01T09:17:32.712057Z",
"url": "https://files.pythonhosted.org/packages/06/56/297f85a85a53d34c82f30a6f252f4590372150e3aff4d8a7ea8274796460/cachebox-4.5.1-cp311-cp311-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4da95758e4f3cb4e95a841c19648701e4e0c1bc9ea30bd99758d27c47c0586ad",
"md5": "4f22cce0b62a446b60f6df576a7225fd",
"sha256": "a34bd23fbac704cbf1552cab644afbf3763a1203ef7136cfd98b6c90eb8ddf90"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "4f22cce0b62a446b60f6df576a7225fd",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 338532,
"upload_time": "2025-02-01T09:17:33",
"upload_time_iso_8601": "2025-02-01T09:17:33.742660Z",
"url": "https://files.pythonhosted.org/packages/4d/a9/5758e4f3cb4e95a841c19648701e4e0c1bc9ea30bd99758d27c47c0586ad/cachebox-4.5.1-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fe7fe25c780afe825a6827ac476eb77295879997dc87e48fda7e451ed8eac01a",
"md5": "40ce608e9a17828ecf6504e1fc6781cb",
"sha256": "ab723cdbc822d71ac7cc4ccec2a9eba3e4231a843b136d073172354d838c6f82"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "40ce608e9a17828ecf6504e1fc6781cb",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 358657,
"upload_time": "2025-02-01T09:17:35",
"upload_time_iso_8601": "2025-02-01T09:17:35.603515Z",
"url": "https://files.pythonhosted.org/packages/fe/7f/e25c780afe825a6827ac476eb77295879997dc87e48fda7e451ed8eac01a/cachebox-4.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "34b71e18b9add25ff4d482d98a055d72c2b438b429eed3214c158932c78fd1c2",
"md5": "d628c95763e945dc218aafe8c4e6a6a3",
"sha256": "9ff8a05d231c7d84395a6a29b02dff69eb8c1cbb98d8050c818a05acc15fc12a"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "d628c95763e945dc218aafe8c4e6a6a3",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 390157,
"upload_time": "2025-02-01T09:17:36",
"upload_time_iso_8601": "2025-02-01T09:17:36.920357Z",
"url": "https://files.pythonhosted.org/packages/34/b7/1e18b9add25ff4d482d98a055d72c2b438b429eed3214c158932c78fd1c2/cachebox-4.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b7aafdc27ab788212816b32846479551682c7ee8861f4435aa95c648895e28aa",
"md5": "af2acd0c033e5dff938f1ecadc815fb5",
"sha256": "5ee811cc84121560479b7257b477e58f304a1b5b3bf8385f3acc218ab8698874"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "af2acd0c033e5dff938f1ecadc815fb5",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 422910,
"upload_time": "2025-02-01T09:17:37",
"upload_time_iso_8601": "2025-02-01T09:17:37.972624Z",
"url": "https://files.pythonhosted.org/packages/b7/aa/fdc27ab788212816b32846479551682c7ee8861f4435aa95c648895e28aa/cachebox-4.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7c5056871e698aa24a41fa6af82984d4677cdcf5a1d8cabaf680932865dcde91",
"md5": "929cd367ffc043bae3fd4916a0173da0",
"sha256": "2df2ec375f9a33c6eb0df68f77b8103288871c12635910dd88f210fce67cb7bd"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "929cd367ffc043bae3fd4916a0173da0",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 637044,
"upload_time": "2025-02-01T09:17:39",
"upload_time_iso_8601": "2025-02-01T09:17:39.875675Z",
"url": "https://files.pythonhosted.org/packages/7c/50/56871e698aa24a41fa6af82984d4677cdcf5a1d8cabaf680932865dcde91/cachebox-4.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "554e4c27ae44758f019f78b3795a6cf69b4f8444d6761fa13e016171b551a588",
"md5": "47190fdfc3cd5ca4cd23ebd4b16f95e9",
"sha256": "d8dd0990335ef46636fdfc1b7bfa9748f16bb56d3a9e330f701c38d51463e84d"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "47190fdfc3cd5ca4cd23ebd4b16f95e9",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 387278,
"upload_time": "2025-02-01T09:17:42",
"upload_time_iso_8601": "2025-02-01T09:17:42.001397Z",
"url": "https://files.pythonhosted.org/packages/55/4e/4c27ae44758f019f78b3795a6cf69b4f8444d6761fa13e016171b551a588/cachebox-4.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "186cb3f43216c7600dcad55aa2288f00baec4b5dd33bdb38583dbc24af05029e",
"md5": "465b88a6a85e085a9cb38ccbd23e4865",
"sha256": "ff4b6627e38e30c61fc07ae5a777ed115b8bc796a36bd067b54d62a1985d4588"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "465b88a6a85e085a9cb38ccbd23e4865",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 402473,
"upload_time": "2025-02-01T09:17:44",
"upload_time_iso_8601": "2025-02-01T09:17:44.083978Z",
"url": "https://files.pythonhosted.org/packages/18/6c/b3f43216c7600dcad55aa2288f00baec4b5dd33bdb38583dbc24af05029e/cachebox-4.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "70e6b9d23b1cb6e5662aed355dcd4edbb854462e76c9925ae075b4f6085310c0",
"md5": "0a9809458d6c205ff8d17d4ae16d6cc1",
"sha256": "04e883e25164b386dd052f46734e638fccc290f9920d5c1d292de0c94da8061d"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp311-cp311-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "0a9809458d6c205ff8d17d4ae16d6cc1",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 535744,
"upload_time": "2025-02-01T09:17:46",
"upload_time_iso_8601": "2025-02-01T09:17:46.209027Z",
"url": "https://files.pythonhosted.org/packages/70/e6/b9d23b1cb6e5662aed355dcd4edbb854462e76c9925ae075b4f6085310c0/cachebox-4.5.1-cp311-cp311-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fb5cab32e94be8f0280f5e0e493d29ea04a989791d52260661f64aa204bc1b9a",
"md5": "bd6ac32a28189e0097362139d3a063b5",
"sha256": "d759b65b2508d153494085bce5db9cd2af1c8cd8feb637fa7d6105a19aa53fb4"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp311-cp311-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "bd6ac32a28189e0097362139d3a063b5",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 651174,
"upload_time": "2025-02-01T09:17:48",
"upload_time_iso_8601": "2025-02-01T09:17:48.232019Z",
"url": "https://files.pythonhosted.org/packages/fb/5c/ab32e94be8f0280f5e0e493d29ea04a989791d52260661f64aa204bc1b9a/cachebox-4.5.1-cp311-cp311-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "14f1fa9561ee9d2662ecef6c3678a92e8a4930f8dc4b8c854b0d2b8aa3482550",
"md5": "7914dea845bdb4536680f93831bb7928",
"sha256": "1a1e6f5d5a9fbf058649738fd1ad744e72a420037d6a3ef4c0a30f0ac6296dbe"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp311-cp311-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "7914dea845bdb4536680f93831bb7928",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 556138,
"upload_time": "2025-02-01T09:17:49",
"upload_time_iso_8601": "2025-02-01T09:17:49.721112Z",
"url": "https://files.pythonhosted.org/packages/14/f1/fa9561ee9d2662ecef6c3678a92e8a4930f8dc4b8c854b0d2b8aa3482550/cachebox-4.5.1-cp311-cp311-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cf0882d2a6d3a0fb00bc1814edac5af55548a797b07cd60c929942664abb8d7a",
"md5": "0b730380f3feffcd9620c91cb4cac260",
"sha256": "3ca785910119b6bd39fe940f300c58489d0887e2c7c38cab69277fdca374ce26"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "0b730380f3feffcd9620c91cb4cac260",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 268403,
"upload_time": "2025-02-01T09:17:50",
"upload_time_iso_8601": "2025-02-01T09:17:50.946957Z",
"url": "https://files.pythonhosted.org/packages/cf/08/82d2a6d3a0fb00bc1814edac5af55548a797b07cd60c929942664abb8d7a/cachebox-4.5.1-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "74f3d0fddaf03fefb59a5ea82bd6c0ea5a8a113955c733ac64894c8df4a69690",
"md5": "c17e2b417b1f24bbb20bfb7e5c2122a2",
"sha256": "d4b20e6f2279dbdebfea4b5d2ea96d06be3b80afefbbdddcd42b6c73b05b679c"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "c17e2b417b1f24bbb20bfb7e5c2122a2",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 278816,
"upload_time": "2025-02-01T09:17:52",
"upload_time_iso_8601": "2025-02-01T09:17:52.080798Z",
"url": "https://files.pythonhosted.org/packages/74/f3/d0fddaf03fefb59a5ea82bd6c0ea5a8a113955c733ac64894c8df4a69690/cachebox-4.5.1-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fd8c3e35b9444602edf5e15d7233644e0e963c0f1929e2aa359d214e0dfb0081",
"md5": "e89cccee4394d578fa3728d611a76c9c",
"sha256": "43e7e1117a26b64381380e4ade7b872e5fe937d4e963cacefa0d949df361d193"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp312-cp312-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "e89cccee4394d578fa3728d611a76c9c",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 368495,
"upload_time": "2025-02-01T09:17:53",
"upload_time_iso_8601": "2025-02-01T09:17:53.243756Z",
"url": "https://files.pythonhosted.org/packages/fd/8c/3e35b9444602edf5e15d7233644e0e963c0f1929e2aa359d214e0dfb0081/cachebox-4.5.1-cp312-cp312-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a54a823e9234c86f58d80865251fe37a98fb4c000f4ba01a1492dff12a69d4e4",
"md5": "75e51ea2214b7ac19a75086f1fd57174",
"sha256": "dd114b3754d5f8a33df195ce9c09ac79cd64150e787e47d5421ae2a3a8710d5e"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "75e51ea2214b7ac19a75086f1fd57174",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 331868,
"upload_time": "2025-02-01T09:17:55",
"upload_time_iso_8601": "2025-02-01T09:17:55.239383Z",
"url": "https://files.pythonhosted.org/packages/a5/4a/823e9234c86f58d80865251fe37a98fb4c000f4ba01a1492dff12a69d4e4/cachebox-4.5.1-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f721a28ec12fa46a8c72534a2cad779a1f8295184567680846ce4d0db2c547d6",
"md5": "32c2c7b1bff436819045b5c52409c171",
"sha256": "57653aabb17e910175319b7f8ef6fb9643ab9351168c245b3f18db7e5b8ecec4"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "32c2c7b1bff436819045b5c52409c171",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 354611,
"upload_time": "2025-02-01T09:17:56",
"upload_time_iso_8601": "2025-02-01T09:17:56.419207Z",
"url": "https://files.pythonhosted.org/packages/f7/21/a28ec12fa46a8c72534a2cad779a1f8295184567680846ce4d0db2c547d6/cachebox-4.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ac3319dd580cd96fca7faed498976d9b67bb8c350d74a1769ce6c004eba57529",
"md5": "5af1f0724ef6e7dc35c9f1f4d8ffa6b9",
"sha256": "0cb01158385b3963a962b3ed18129d54c3789a12b7dcdd3a3a652104d0e3d3f1"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "5af1f0724ef6e7dc35c9f1f4d8ffa6b9",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 386300,
"upload_time": "2025-02-01T09:17:58",
"upload_time_iso_8601": "2025-02-01T09:17:58.252457Z",
"url": "https://files.pythonhosted.org/packages/ac/33/19dd580cd96fca7faed498976d9b67bb8c350d74a1769ce6c004eba57529/cachebox-4.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "71fce8fd03e6f297ab45ea7f77f0025de416128c00d5f7a17d60c39b0fe580c0",
"md5": "00e41c2f0cbde8cd6d21990e6b22d638",
"sha256": "c951aa8587f041f2b3ce7b7aef0ac51c8b5a7daeb4d26717a90e1cc950f9ab51"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "00e41c2f0cbde8cd6d21990e6b22d638",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 416145,
"upload_time": "2025-02-01T09:17:59",
"upload_time_iso_8601": "2025-02-01T09:17:59.370276Z",
"url": "https://files.pythonhosted.org/packages/71/fc/e8fd03e6f297ab45ea7f77f0025de416128c00d5f7a17d60c39b0fe580c0/cachebox-4.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "55a6fe9ad4f5e752d5d3441f38f14aa56536d2733e4c9782b5b25c904270db31",
"md5": "c4a774d2df86794aed52d27e24899001",
"sha256": "38391dce7d9a05c5a712282030e96f7d7c7fb550ca888c755dd6a1ec294847a5"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "c4a774d2df86794aed52d27e24899001",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 627820,
"upload_time": "2025-02-01T09:18:00",
"upload_time_iso_8601": "2025-02-01T09:18:00.605963Z",
"url": "https://files.pythonhosted.org/packages/55/a6/fe9ad4f5e752d5d3441f38f14aa56536d2733e4c9782b5b25c904270db31/cachebox-4.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "03174a833cc7197c52baca60cd5d2eba39ee008fca8ceac45e8576b435b9762a",
"md5": "001cf7dec1665bf07fcf6526ea252b4a",
"sha256": "5faa855f889329146c8d968eb7d10f58170bdf49009909ff3941f7b87b73f126"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "001cf7dec1665bf07fcf6526ea252b4a",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 381072,
"upload_time": "2025-02-01T09:18:01",
"upload_time_iso_8601": "2025-02-01T09:18:01.829451Z",
"url": "https://files.pythonhosted.org/packages/03/17/4a833cc7197c52baca60cd5d2eba39ee008fca8ceac45e8576b435b9762a/cachebox-4.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a0c101e6e30e33bda9a5719188d6e3bad20223fb75acddabaa1c2fc3d6394a44",
"md5": "a92594163550cdf4d657b60954834275",
"sha256": "48e8af69e6eb4e795a549ce2302f78896f064d7d14f0992065c2294fd36e782b"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "a92594163550cdf4d657b60954834275",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 396232,
"upload_time": "2025-02-01T09:18:03",
"upload_time_iso_8601": "2025-02-01T09:18:03.072932Z",
"url": "https://files.pythonhosted.org/packages/a0/c1/01e6e30e33bda9a5719188d6e3bad20223fb75acddabaa1c2fc3d6394a44/cachebox-4.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "26df2f2c6f06df65f98a5d0b0c6e521f2efb12338cf5ff403e245823acc6c9cc",
"md5": "03089b1b2fdbd907f11f2341fadaf88a",
"sha256": "309407ac135701e7566d281a10ae5230eeb433b632a72b0f211f2a45cd53dcc3"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp312-cp312-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "03089b1b2fdbd907f11f2341fadaf88a",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 531291,
"upload_time": "2025-02-01T09:18:05",
"upload_time_iso_8601": "2025-02-01T09:18:05.239715Z",
"url": "https://files.pythonhosted.org/packages/26/df/2f2c6f06df65f98a5d0b0c6e521f2efb12338cf5ff403e245823acc6c9cc/cachebox-4.5.1-cp312-cp312-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "30c683fd0466f9605e0dd6a4424b3f671f164fba60ae8a4f5405c6f44cce80de",
"md5": "c5da6fae4f8492f6c7289109a105494a",
"sha256": "1852d4aacc365385abe9c4d7d97b2dea7bdbeb6a97a1bcd955b1024ebc0799ee"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp312-cp312-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "c5da6fae4f8492f6c7289109a105494a",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 647348,
"upload_time": "2025-02-01T09:18:06",
"upload_time_iso_8601": "2025-02-01T09:18:06.443567Z",
"url": "https://files.pythonhosted.org/packages/30/c6/83fd0466f9605e0dd6a4424b3f671f164fba60ae8a4f5405c6f44cce80de/cachebox-4.5.1-cp312-cp312-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "02a7011e4e40df1e63d93ed20c9e34cf5c64521b9299d22a9128683b19aeb753",
"md5": "2641e2480befe0ffc8cb292978f3f812",
"sha256": "7c6e8308417b33538ceca4f30c00c6010eb4e81e0e72cfa8d94a53a89162abed"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp312-cp312-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "2641e2480befe0ffc8cb292978f3f812",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 550538,
"upload_time": "2025-02-01T09:18:08",
"upload_time_iso_8601": "2025-02-01T09:18:08.674058Z",
"url": "https://files.pythonhosted.org/packages/02/a7/011e4e40df1e63d93ed20c9e34cf5c64521b9299d22a9128683b19aeb753/cachebox-4.5.1-cp312-cp312-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "223a17819be636a6ea564f4e0a225fb21bc1cb9ed07439ced4b0dd6f191fe382",
"md5": "11928cd9d66c4c4f150a6957f6656b74",
"sha256": "1ea5d79669a2c52f16dba906fe71fecda5ff2f5458378fa71aeeaffdd31e21ce"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp312-cp312-win32.whl",
"has_sig": false,
"md5_digest": "11928cd9d66c4c4f150a6957f6656b74",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 263381,
"upload_time": "2025-02-01T09:18:10",
"upload_time_iso_8601": "2025-02-01T09:18:10.651069Z",
"url": "https://files.pythonhosted.org/packages/22/3a/17819be636a6ea564f4e0a225fb21bc1cb9ed07439ced4b0dd6f191fe382/cachebox-4.5.1-cp312-cp312-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3d8d36ac7e61881fe025d279735ec9343d39d6a0501850dc15e4eaa493e9857c",
"md5": "5f269daab6eca26fba890532333d0ccb",
"sha256": "619cb486a887ddf541c0db989d57ce786142257fc31a507b1e3f3976d92052e6"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "5f269daab6eca26fba890532333d0ccb",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 273872,
"upload_time": "2025-02-01T09:18:11",
"upload_time_iso_8601": "2025-02-01T09:18:11.746093Z",
"url": "https://files.pythonhosted.org/packages/3d/8d/36ac7e61881fe025d279735ec9343d39d6a0501850dc15e4eaa493e9857c/cachebox-4.5.1-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9209c78e5ac74a7d1552fdb6c1afec7932005b9639c826def6bac3fcae5616dd",
"md5": "fd3a0a5c9850bca9758bf2af57af1e64",
"sha256": "b18fe41ee80404d0807860f30b4079f9f824402ee84303416f25a4620eb74aef"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp313-cp313-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "fd3a0a5c9850bca9758bf2af57af1e64",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 368082,
"upload_time": "2025-02-01T09:18:12",
"upload_time_iso_8601": "2025-02-01T09:18:12.939147Z",
"url": "https://files.pythonhosted.org/packages/92/09/c78e5ac74a7d1552fdb6c1afec7932005b9639c826def6bac3fcae5616dd/cachebox-4.5.1-cp313-cp313-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ac1be0ccbd3ef9ddcddca5695ee8c0dee7d97f155b801ffcef47904913d7bbdb",
"md5": "a668b3a684c42883610ca97f82f54180",
"sha256": "ba2b5f7a250b946c6541fac7ba81767bc3118777229430d2efb5f7d95664cdf8"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "a668b3a684c42883610ca97f82f54180",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 331657,
"upload_time": "2025-02-01T09:18:14",
"upload_time_iso_8601": "2025-02-01T09:18:14.134281Z",
"url": "https://files.pythonhosted.org/packages/ac/1b/e0ccbd3ef9ddcddca5695ee8c0dee7d97f155b801ffcef47904913d7bbdb/cachebox-4.5.1-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7dd7f0074089aa912f15b68d06bbc3ca0d22e27d1b019857c85465e067b30581",
"md5": "43c047d27cc23ef25000e5749ab8d38c",
"sha256": "93a531ee54a42a7b08294cc2a8a5654220374d7f9d8c54af418093f9292ab5fd"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "43c047d27cc23ef25000e5749ab8d38c",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 354412,
"upload_time": "2025-02-01T09:18:15",
"upload_time_iso_8601": "2025-02-01T09:18:15.343983Z",
"url": "https://files.pythonhosted.org/packages/7d/d7/f0074089aa912f15b68d06bbc3ca0d22e27d1b019857c85465e067b30581/cachebox-4.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c492e757471c13a01344c097e0fc0fd8bc416c542eba52cbfa200de7fc011f7e",
"md5": "e32d3836541ebabdd22c7baf2092e7e3",
"sha256": "a280bc1f02fc6492abc4258c6b1abca52c5e3dfa1adfd10016ea32e5ebd40203"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "e32d3836541ebabdd22c7baf2092e7e3",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 386161,
"upload_time": "2025-02-01T09:18:16",
"upload_time_iso_8601": "2025-02-01T09:18:16.466453Z",
"url": "https://files.pythonhosted.org/packages/c4/92/e757471c13a01344c097e0fc0fd8bc416c542eba52cbfa200de7fc011f7e/cachebox-4.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9114e7fdc991ad3f4e25257854efc08e3d75df57217ec6619ceae13b4ce08823",
"md5": "04c558fefb850434d5e6b1a202674df7",
"sha256": "645233d74bc01a532bacb91c33a1eac65df839d5738c1d58272c5d61d7fe6a4c"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "04c558fefb850434d5e6b1a202674df7",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 415826,
"upload_time": "2025-02-01T09:18:18",
"upload_time_iso_8601": "2025-02-01T09:18:18.537802Z",
"url": "https://files.pythonhosted.org/packages/91/14/e7fdc991ad3f4e25257854efc08e3d75df57217ec6619ceae13b4ce08823/cachebox-4.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9b928df9a5f170e7589255cc3ca98f981a608828fe793a721db1de1ec6d88962",
"md5": "94117b584d72499decd95fe92f501932",
"sha256": "67adbe3f1063b11ff49b54d1a8fcb6f6aa8d06bdb473ea21350df32c44087c79"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "94117b584d72499decd95fe92f501932",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 627262,
"upload_time": "2025-02-01T09:18:19",
"upload_time_iso_8601": "2025-02-01T09:18:19.800124Z",
"url": "https://files.pythonhosted.org/packages/9b/92/8df9a5f170e7589255cc3ca98f981a608828fe793a721db1de1ec6d88962/cachebox-4.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ea75bdda4083398fced7e8875e5823248f183ccf64758d14f6386103ea785dfc",
"md5": "1be457db8338b890a7846d360d831556",
"sha256": "f7d719d021665e891d75f734b37396c3136edc4758da6e02b4452b2712e4ebe9"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "1be457db8338b890a7846d360d831556",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 380912,
"upload_time": "2025-02-01T09:18:21",
"upload_time_iso_8601": "2025-02-01T09:18:21.868607Z",
"url": "https://files.pythonhosted.org/packages/ea/75/bdda4083398fced7e8875e5823248f183ccf64758d14f6386103ea785dfc/cachebox-4.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0a3be608f17c7bfddc30192505ab7f2370ac392a67d37bd6c22dd22f3f5faec1",
"md5": "2f05e15ef0e2998b3f150431f53a14ac",
"sha256": "eca66621987bbcf7309ea3b8de709243ec869343533aad2467e44a07dce9f082"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "2f05e15ef0e2998b3f150431f53a14ac",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 396011,
"upload_time": "2025-02-01T09:18:22",
"upload_time_iso_8601": "2025-02-01T09:18:22.979352Z",
"url": "https://files.pythonhosted.org/packages/0a/3b/e608f17c7bfddc30192505ab7f2370ac392a67d37bd6c22dd22f3f5faec1/cachebox-4.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2e364ce519570e0ebbcdb5bcbf4f57cba07d97101465e2eed65ee81b34b96e54",
"md5": "0b8050287c67eb3e290d8cbd17db7d00",
"sha256": "cc3a78ef9b009d5bf59ee3651b43947180fbe7ed8a3ec68a923bc8b22bde7c6e"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp313-cp313-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "0b8050287c67eb3e290d8cbd17db7d00",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 531094,
"upload_time": "2025-02-01T09:18:24",
"upload_time_iso_8601": "2025-02-01T09:18:24.216394Z",
"url": "https://files.pythonhosted.org/packages/2e/36/4ce519570e0ebbcdb5bcbf4f57cba07d97101465e2eed65ee81b34b96e54/cachebox-4.5.1-cp313-cp313-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cfa8677e0ec48e3c93e3900d1b29b70e296b0260a13428b8301f109dcf425152",
"md5": "c1bdb8f632396c8c1e5ee66b3b9c0f42",
"sha256": "dbd748679acb9d34e32693dc00248c22bc8a198ce14925b32a50a5ffcd619c4c"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp313-cp313-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "c1bdb8f632396c8c1e5ee66b3b9c0f42",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 647167,
"upload_time": "2025-02-01T09:18:25",
"upload_time_iso_8601": "2025-02-01T09:18:25.436182Z",
"url": "https://files.pythonhosted.org/packages/cf/a8/677e0ec48e3c93e3900d1b29b70e296b0260a13428b8301f109dcf425152/cachebox-4.5.1-cp313-cp313-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bb019a14d9c5dca356802c7789127bf124e18d390c00ab66e0d1c62ccf253a21",
"md5": "12f4436e4f67612facc06fe71baa7809",
"sha256": "8134d4ebca6549d483c159243182387fd08d807359a99689eeb3e0ee4aad4ff6"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp313-cp313-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "12f4436e4f67612facc06fe71baa7809",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 550221,
"upload_time": "2025-02-01T09:18:26",
"upload_time_iso_8601": "2025-02-01T09:18:26.705676Z",
"url": "https://files.pythonhosted.org/packages/bb/01/9a14d9c5dca356802c7789127bf124e18d390c00ab66e0d1c62ccf253a21/cachebox-4.5.1-cp313-cp313-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "311a0a3f5f8a919a5bffd3542000ed4b3cbae41fc4770fd2eec844bcd1ffb591",
"md5": "0709e8849e35137dbb9b06a23dc9182a",
"sha256": "4c3a09ecf887bcaed7590d9c012e1eb94b789ab1bf58938288682f957fca707b"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp313-cp313-win32.whl",
"has_sig": false,
"md5_digest": "0709e8849e35137dbb9b06a23dc9182a",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 263210,
"upload_time": "2025-02-01T09:18:28",
"upload_time_iso_8601": "2025-02-01T09:18:28.153832Z",
"url": "https://files.pythonhosted.org/packages/31/1a/0a3f5f8a919a5bffd3542000ed4b3cbae41fc4770fd2eec844bcd1ffb591/cachebox-4.5.1-cp313-cp313-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "12c6588c32deff8612b817f528416fab601dc56ffbb342912ac57da652bae2b7",
"md5": "6a8049598fbf9802f2094aca245a89b0",
"sha256": "05c5a5b026d424dc1f7304edfa13bca9b9df4387421ad032b7c3aa666f56059d"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "6a8049598fbf9802f2094aca245a89b0",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 273569,
"upload_time": "2025-02-01T09:18:29",
"upload_time_iso_8601": "2025-02-01T09:18:29.283717Z",
"url": "https://files.pythonhosted.org/packages/12/c6/588c32deff8612b817f528416fab601dc56ffbb342912ac57da652bae2b7/cachebox-4.5.1-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b1296584920f75d08d9f34878681af27da4db35fc7a26d0a9a9ba9c2ff47b051",
"md5": "9d538af2f91c405f57ec06505a2e78ad",
"sha256": "97cbd31be6e6a3994e24deae186698b7890ed91979e422099b5078112694f51c"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp38-cp38-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "9d538af2f91c405f57ec06505a2e78ad",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 383257,
"upload_time": "2025-02-01T09:18:30",
"upload_time_iso_8601": "2025-02-01T09:18:30.418186Z",
"url": "https://files.pythonhosted.org/packages/b1/29/6584920f75d08d9f34878681af27da4db35fc7a26d0a9a9ba9c2ff47b051/cachebox-4.5.1-cp38-cp38-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7cc8ba3bbb764b47fff1bfb23b9cab4212d08742a5127e87012696e5e37e4875",
"md5": "fa9e4e39712a38aae55639e6cb02a003",
"sha256": "32243191ebe97064810505340095c6ef8db0dfed108bedbf32a1b1bb450ab5ba"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp38-cp38-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "fa9e4e39712a38aae55639e6cb02a003",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 339006,
"upload_time": "2025-02-01T09:18:32",
"upload_time_iso_8601": "2025-02-01T09:18:32.617128Z",
"url": "https://files.pythonhosted.org/packages/7c/c8/ba3bbb764b47fff1bfb23b9cab4212d08742a5127e87012696e5e37e4875/cachebox-4.5.1-cp38-cp38-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0ee5be8dc5b0024921796c080a05a73377feaf09aa5521afdff499f56ccc3b6a",
"md5": "221de6394ab62b4b70ccadf206594c8c",
"sha256": "d1a6240c9bb03fe41971eecd019d860b98da2ded83526429f8b58c7bd200f3e0"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "221de6394ab62b4b70ccadf206594c8c",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 359399,
"upload_time": "2025-02-01T09:18:34",
"upload_time_iso_8601": "2025-02-01T09:18:34.244149Z",
"url": "https://files.pythonhosted.org/packages/0e/e5/be8dc5b0024921796c080a05a73377feaf09aa5521afdff499f56ccc3b6a/cachebox-4.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bd7aae75ff2f1550208279d8d9867222f77f27200df5d9469cb51168be6cb44f",
"md5": "5ec5cd099b349d377e996e853d9bbef8",
"sha256": "a598540c09e10c6c056ec160a5a04a92accf244fb19ee58c6626eb9889232883"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "5ec5cd099b349d377e996e853d9bbef8",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 390566,
"upload_time": "2025-02-01T09:18:36",
"upload_time_iso_8601": "2025-02-01T09:18:36.340891Z",
"url": "https://files.pythonhosted.org/packages/bd/7a/ae75ff2f1550208279d8d9867222f77f27200df5d9469cb51168be6cb44f/cachebox-4.5.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "31e64ed48462ca46e560bad8dc409906062876fc48fddf23134e5bdaf7ec6e0c",
"md5": "c2d434b77fcfacd4837a92798bbd9f6f",
"sha256": "8f4b65288a251d6c49c43b7cc4955d019163b05eb8c227e73a60e11704d15b91"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "c2d434b77fcfacd4837a92798bbd9f6f",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 423773,
"upload_time": "2025-02-01T09:18:37",
"upload_time_iso_8601": "2025-02-01T09:18:37.762832Z",
"url": "https://files.pythonhosted.org/packages/31/e6/4ed48462ca46e560bad8dc409906062876fc48fddf23134e5bdaf7ec6e0c/cachebox-4.5.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7785a9c51a0c67771f8e25cf049593a3cb6c42d8a198839195b4a00b3cc74479",
"md5": "019029832d97b2179cf7bc2bc18bcdfc",
"sha256": "215504434387f7624e0630307846f19bb7e15f41b46a280cb08f0b09a25b7821"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "019029832d97b2179cf7bc2bc18bcdfc",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 637820,
"upload_time": "2025-02-01T09:18:39",
"upload_time_iso_8601": "2025-02-01T09:18:39.885378Z",
"url": "https://files.pythonhosted.org/packages/77/85/a9c51a0c67771f8e25cf049593a3cb6c42d8a198839195b4a00b3cc74479/cachebox-4.5.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "592c8475f7a959ce1031fd13dfa37e127f0173ccac56aeda22d10a7acb022552",
"md5": "9ff3201c24564951d8bd2295eaf2fb1a",
"sha256": "f4b1f4f0885fa7765a8f6194422d5a69c63ef68324ffc97e1f8756d1ccb32d1c"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "9ff3201c24564951d8bd2295eaf2fb1a",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 387919,
"upload_time": "2025-02-01T09:18:41",
"upload_time_iso_8601": "2025-02-01T09:18:41.998349Z",
"url": "https://files.pythonhosted.org/packages/59/2c/8475f7a959ce1031fd13dfa37e127f0173ccac56aeda22d10a7acb022552/cachebox-4.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4b1a52c0f1a835f7b802bad76f46e53e2bf0e4f591885828a97708c5f992a871",
"md5": "8081b17277efca9bcc7cade08a7f082f",
"sha256": "b8d11f91bbba619df3443daa7577b921533bf3c3243a59dff15208a9aa1e4249"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "8081b17277efca9bcc7cade08a7f082f",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 402911,
"upload_time": "2025-02-01T09:18:44",
"upload_time_iso_8601": "2025-02-01T09:18:44.035037Z",
"url": "https://files.pythonhosted.org/packages/4b/1a/52c0f1a835f7b802bad76f46e53e2bf0e4f591885828a97708c5f992a871/cachebox-4.5.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bf1cfe2696ae7b7d4b26fe4da83af508e3031c648f66b726d8808d5df7488e8b",
"md5": "7f7993abb7ec0fa466e27ffa13d0cf16",
"sha256": "b859be2c31f141edbd0a42207dfb51a2484663640e96f54f568376ff46c693a7"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp38-cp38-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "7f7993abb7ec0fa466e27ffa13d0cf16",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 536399,
"upload_time": "2025-02-01T09:18:45",
"upload_time_iso_8601": "2025-02-01T09:18:45.254291Z",
"url": "https://files.pythonhosted.org/packages/bf/1c/fe2696ae7b7d4b26fe4da83af508e3031c648f66b726d8808d5df7488e8b/cachebox-4.5.1-cp38-cp38-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "aa2458764dd989ddcbdd30527c427c55ec39dcc1579094315af9ddccf5f187fe",
"md5": "f293f6b03d073cd5b1186e35803284f5",
"sha256": "54f8a6b2d815f00a8e22fa1fc518c1c7f22bcb65fa72d574c90c797d3b637043"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp38-cp38-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "f293f6b03d073cd5b1186e35803284f5",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 651415,
"upload_time": "2025-02-01T09:18:47",
"upload_time_iso_8601": "2025-02-01T09:18:47.355280Z",
"url": "https://files.pythonhosted.org/packages/aa/24/58764dd989ddcbdd30527c427c55ec39dcc1579094315af9ddccf5f187fe/cachebox-4.5.1-cp38-cp38-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ddf4011166485b923b1e23e644a4a5a83aa56dd19dc638febed31ba14695e5a5",
"md5": "0a448e67d21adb0d66de3f7b8880fc3e",
"sha256": "c252e25b09a3c2de1a5d3a6482530dfc7e40382d0c3f38b9230aa3818e26f215"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp38-cp38-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "0a448e67d21adb0d66de3f7b8880fc3e",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 556737,
"upload_time": "2025-02-01T09:18:48",
"upload_time_iso_8601": "2025-02-01T09:18:48.574425Z",
"url": "https://files.pythonhosted.org/packages/dd/f4/011166485b923b1e23e644a4a5a83aa56dd19dc638febed31ba14695e5a5/cachebox-4.5.1-cp38-cp38-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b84ef62e8adc253c3b6a2f6308e1178d42737c8f77b28ee7339d8de3112a4b0a",
"md5": "b85c68c41c119fc53fd56a4fee1f3d3e",
"sha256": "55403c2f07fdaa6a216ac1121a23151f37cf89f7b1619cbfb55b93cb2d607d5a"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp38-cp38-win32.whl",
"has_sig": false,
"md5_digest": "b85c68c41c119fc53fd56a4fee1f3d3e",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 268918,
"upload_time": "2025-02-01T09:18:49",
"upload_time_iso_8601": "2025-02-01T09:18:49.889981Z",
"url": "https://files.pythonhosted.org/packages/b8/4e/f62e8adc253c3b6a2f6308e1178d42737c8f77b28ee7339d8de3112a4b0a/cachebox-4.5.1-cp38-cp38-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0ce4dd0842e784812a5158264e0e5880233c17afc9d090556fa1b69707748f00",
"md5": "8e624a5eb87c8b08c90b156e6f5c140e",
"sha256": "da2a62cdf2227aec8182d224027dec1d047cbd78fd1050ca31ff0ade1891bf72"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "8e624a5eb87c8b08c90b156e6f5c140e",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 279194,
"upload_time": "2025-02-01T09:18:53",
"upload_time_iso_8601": "2025-02-01T09:18:53.509718Z",
"url": "https://files.pythonhosted.org/packages/0c/e4/dd0842e784812a5158264e0e5880233c17afc9d090556fa1b69707748f00/cachebox-4.5.1-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "504a07c563bee497677d6ba5a50ac138b43e44f2e0876b4f42237335e1e6290b",
"md5": "b905e328650879a7f34a4eae010c896a",
"sha256": "44d45ce477a3da2d2a51ae87cbab331cab1d0884bd01dd78431fdca061065902"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp39-cp39-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "b905e328650879a7f34a4eae010c896a",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 383118,
"upload_time": "2025-02-01T09:18:55",
"upload_time_iso_8601": "2025-02-01T09:18:55.483707Z",
"url": "https://files.pythonhosted.org/packages/50/4a/07c563bee497677d6ba5a50ac138b43e44f2e0876b4f42237335e1e6290b/cachebox-4.5.1-cp39-cp39-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "51f2f6889164f65b96b75058a094df1b546d011673b84e9901164dd454fb2653",
"md5": "bb80d60738ea9537e7ff31f31a97c83c",
"sha256": "e183f45935db190ebb9d0eb6fa97da3c80f424b2ca967dbef70f25af16e43783"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "bb80d60738ea9537e7ff31f31a97c83c",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 338942,
"upload_time": "2025-02-01T09:18:56",
"upload_time_iso_8601": "2025-02-01T09:18:56.871633Z",
"url": "https://files.pythonhosted.org/packages/51/f2/f6889164f65b96b75058a094df1b546d011673b84e9901164dd454fb2653/cachebox-4.5.1-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "dce41feb12b8aa4682bf2597a61df03c11a7f9373005d06c803565c5282b8f8c",
"md5": "388067aaabb625195077ae3553ffdfbe",
"sha256": "bf2a8a955fe1e445c7f696b3097d16e16cd8405286a0a6bc5ca30970bf778c14"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "388067aaabb625195077ae3553ffdfbe",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 359221,
"upload_time": "2025-02-01T09:18:58",
"upload_time_iso_8601": "2025-02-01T09:18:58.106999Z",
"url": "https://files.pythonhosted.org/packages/dc/e4/1feb12b8aa4682bf2597a61df03c11a7f9373005d06c803565c5282b8f8c/cachebox-4.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b4c1251810ddb91749246bed503caab528df65c7e330abdb9e8026e1ce22b313",
"md5": "a3aa031c05fc12ce620a1f23d46ab45d",
"sha256": "c91b220e514a8e63945560a08b6f1a14fc069fc539a6f4cb529c84aa18aac6f4"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "a3aa031c05fc12ce620a1f23d46ab45d",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 390543,
"upload_time": "2025-02-01T09:18:59",
"upload_time_iso_8601": "2025-02-01T09:18:59.614899Z",
"url": "https://files.pythonhosted.org/packages/b4/c1/251810ddb91749246bed503caab528df65c7e330abdb9e8026e1ce22b313/cachebox-4.5.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "09e7873fff39d7fa63dcd6c8f1f6c5feeb00e4a04446168f688e1c6e608192bb",
"md5": "2f0803b59185f85d9a57925a7d10072d",
"sha256": "14dc058c2975bde59bb092ac49dfca7c69cbde14dbc4773521a67f823298bce6"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "2f0803b59185f85d9a57925a7d10072d",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 423568,
"upload_time": "2025-02-01T09:19:00",
"upload_time_iso_8601": "2025-02-01T09:19:00.866664Z",
"url": "https://files.pythonhosted.org/packages/09/e7/873fff39d7fa63dcd6c8f1f6c5feeb00e4a04446168f688e1c6e608192bb/cachebox-4.5.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b365eb064e7bbc47d5ae537c1a7e017ed8bb13050e5114fc1f9893a74bdb2b2d",
"md5": "a8c13646ab990c04b44583ea5c5d3b87",
"sha256": "1022e6280a54ee4e01d261f62b6e319d7a10104670963ebbd30d5fec41bbe97e"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "a8c13646ab990c04b44583ea5c5d3b87",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 637879,
"upload_time": "2025-02-01T09:19:02",
"upload_time_iso_8601": "2025-02-01T09:19:02.179936Z",
"url": "https://files.pythonhosted.org/packages/b3/65/eb064e7bbc47d5ae537c1a7e017ed8bb13050e5114fc1f9893a74bdb2b2d/cachebox-4.5.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "be493c65aec01178f88972e3cb2ea59154d062bdbfc0eb417147d9b92df41404",
"md5": "fcfcf0cec15f1b4fece6cac7a9778147",
"sha256": "875fdaa8426a393c7dc74165dc5d5b691cc5056c4e4149849453413757b9e393"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "fcfcf0cec15f1b4fece6cac7a9778147",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 387776,
"upload_time": "2025-02-01T09:19:03",
"upload_time_iso_8601": "2025-02-01T09:19:03.770582Z",
"url": "https://files.pythonhosted.org/packages/be/49/3c65aec01178f88972e3cb2ea59154d062bdbfc0eb417147d9b92df41404/cachebox-4.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8ff975eb4a143fdc3fbe41bf39e1b949b1ea57a70dc2f81fa45600d2a3c42f17",
"md5": "b53b046995169ae069e8606f351725a3",
"sha256": "bc777eb52f42efaf2e66e757a7248ace2b10fd84734b68ddebfaa278c1f663a6"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "b53b046995169ae069e8606f351725a3",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 402727,
"upload_time": "2025-02-01T09:19:05",
"upload_time_iso_8601": "2025-02-01T09:19:05.022175Z",
"url": "https://files.pythonhosted.org/packages/8f/f9/75eb4a143fdc3fbe41bf39e1b949b1ea57a70dc2f81fa45600d2a3c42f17/cachebox-4.5.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5d9d97261afb2048b09b7e51b16e204dedecd906e9511b422f9463a395995fca",
"md5": "643cbca68c510aab6a96d82c5663b662",
"sha256": "8c2259b4be78b231fafd3f10f8569d1c1bff3324ab6e9aa4aba75edcd36e0aba"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp39-cp39-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "643cbca68c510aab6a96d82c5663b662",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 536148,
"upload_time": "2025-02-01T09:19:06",
"upload_time_iso_8601": "2025-02-01T09:19:06.268175Z",
"url": "https://files.pythonhosted.org/packages/5d/9d/97261afb2048b09b7e51b16e204dedecd906e9511b422f9463a395995fca/cachebox-4.5.1-cp39-cp39-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5ddaea94464ed4cd73aba535133985c13cd33244de6190c502eddb261fe5c5f3",
"md5": "58819cd6cf10b0013f845487e400771c",
"sha256": "0d19acf19f2f6e7c560bdc4424e0eeafa31f201e7ec505ef8b8679b1a10cecbf"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp39-cp39-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "58819cd6cf10b0013f845487e400771c",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 651499,
"upload_time": "2025-02-01T09:19:07",
"upload_time_iso_8601": "2025-02-01T09:19:07.623472Z",
"url": "https://files.pythonhosted.org/packages/5d/da/ea94464ed4cd73aba535133985c13cd33244de6190c502eddb261fe5c5f3/cachebox-4.5.1-cp39-cp39-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a957dff777cd07305281a71b6ce55d9ba20a0ef28912e28bc997ad1759d9141c",
"md5": "28667c0dfa07fa6a84e3a3c1ec856e21",
"sha256": "c726ec29a331bf65e844174602811082fde1d986df93cf750e967eccaabb0217"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp39-cp39-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "28667c0dfa07fa6a84e3a3c1ec856e21",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 556600,
"upload_time": "2025-02-01T09:19:11",
"upload_time_iso_8601": "2025-02-01T09:19:11.771949Z",
"url": "https://files.pythonhosted.org/packages/a9/57/dff777cd07305281a71b6ce55d9ba20a0ef28912e28bc997ad1759d9141c/cachebox-4.5.1-cp39-cp39-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9e873ef16436fb4587e2dd5f7651181091ad89ba43f5da76f4fa023b031dab5f",
"md5": "8f638b1e166ad16a95bc9dfe722f416d",
"sha256": "96152eea5ae45d950670b94584cc6d2d670ef04a18b477d76f844b1778485536"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp39-cp39-win32.whl",
"has_sig": false,
"md5_digest": "8f638b1e166ad16a95bc9dfe722f416d",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 268807,
"upload_time": "2025-02-01T09:19:13",
"upload_time_iso_8601": "2025-02-01T09:19:13.088204Z",
"url": "https://files.pythonhosted.org/packages/9e/87/3ef16436fb4587e2dd5f7651181091ad89ba43f5da76f4fa023b031dab5f/cachebox-4.5.1-cp39-cp39-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "229a420fb11b5c4823a22f9e5855f152c7e9e4ac5f7d74c146ddcd54c852bd93",
"md5": "f0f4a06dbb4b086b7bc801bb1c93f342",
"sha256": "36ad776a01705560e6b3e739b65e35a498e3b7c4dae4589b7c9757d9c1ebf5a0"
},
"downloads": -1,
"filename": "cachebox-4.5.1-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "f0f4a06dbb4b086b7bc801bb1c93f342",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 279115,
"upload_time": "2025-02-01T09:19:14",
"upload_time_iso_8601": "2025-02-01T09:19:14.418869Z",
"url": "https://files.pythonhosted.org/packages/22/9a/420fb11b5c4823a22f9e5855f152c7e9e4ac5f7d74c146ddcd54c852bd93/cachebox-4.5.1-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "45b924ea3cc993e09dd67315861ac91eff099a2fb6abc8daf6d59733d91d9766",
"md5": "9a2be38728782f00ec09f1f77e18f8b8",
"sha256": "f52365aca8cfb27e729be27bc75d1a41fc83d6ca58030f31d6d7c55315f79d22"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "9a2be38728782f00ec09f1f77e18f8b8",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 383875,
"upload_time": "2025-02-01T09:19:15",
"upload_time_iso_8601": "2025-02-01T09:19:15.682837Z",
"url": "https://files.pythonhosted.org/packages/45/b9/24ea3cc993e09dd67315861ac91eff099a2fb6abc8daf6d59733d91d9766/cachebox-4.5.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "84cd3bf9ecb95f3dbedcd021c5513cd2c8de991a51643bd2b2477a6167612d14",
"md5": "aaba40a4333263db27e79ee561cace9a",
"sha256": "86969541ee364ee66defa8337f6aa4af021aa3bf6e63fd69b4f857be28484617"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "aaba40a4333263db27e79ee561cace9a",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 341437,
"upload_time": "2025-02-01T09:19:17",
"upload_time_iso_8601": "2025-02-01T09:19:17.189218Z",
"url": "https://files.pythonhosted.org/packages/84/cd/3bf9ecb95f3dbedcd021c5513cd2c8de991a51643bd2b2477a6167612d14/cachebox-4.5.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "79f4077a3d39f9fc6586c02e705e8be3dc1628c338f5590ff81a27747496be84",
"md5": "03fb7106e13ebd82a00c9b220b16faa5",
"sha256": "69463a79892a942a51afe803be4dd75d3e9c6b607440fb50163a90b86013a382"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "03fb7106e13ebd82a00c9b220b16faa5",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 359134,
"upload_time": "2025-02-01T09:19:18",
"upload_time_iso_8601": "2025-02-01T09:19:18.631409Z",
"url": "https://files.pythonhosted.org/packages/79/f4/077a3d39f9fc6586c02e705e8be3dc1628c338f5590ff81a27747496be84/cachebox-4.5.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7e258070cdba0bc450668885ada569f62ee3e7df112e767bc9b3c97531f54932",
"md5": "381d96a28019ea7806b5ff7488c0fec9",
"sha256": "d5a2051b4ebcb8ba8ca0f7d4587ce47e40ab23130642f8d5b8840785b9b6f8d2"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "381d96a28019ea7806b5ff7488c0fec9",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 388572,
"upload_time": "2025-02-01T09:19:20",
"upload_time_iso_8601": "2025-02-01T09:19:20.039733Z",
"url": "https://files.pythonhosted.org/packages/7e/25/8070cdba0bc450668885ada569f62ee3e7df112e767bc9b3c97531f54932/cachebox-4.5.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6c69350a6419acb0dc0c944942318a88b05c7d8052688ca38020445de5f53014",
"md5": "70b46aaad5cbc5a4ec6bd9a3c9408e01",
"sha256": "37647434ae71c0812cd46014a56b58088766319304a4cc2e92c521239b4a82fa"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "70b46aaad5cbc5a4ec6bd9a3c9408e01",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 405817,
"upload_time": "2025-02-01T09:19:21",
"upload_time_iso_8601": "2025-02-01T09:19:21.291648Z",
"url": "https://files.pythonhosted.org/packages/6c/69/350a6419acb0dc0c944942318a88b05c7d8052688ca38020445de5f53014/cachebox-4.5.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0c1b99edd7c27bcd68579deb919a10e2418c461d7b4c5aa629e0ba06b9687b6d",
"md5": "e8d8e0de3beca2bf5b11c200ef455bf2",
"sha256": "dd1f815e78a341b0d8d8052a4dcffb9e997b1caf61a13801111c2f1eb9c3a061"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "e8d8e0de3beca2bf5b11c200ef455bf2",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 536939,
"upload_time": "2025-02-01T09:19:22",
"upload_time_iso_8601": "2025-02-01T09:19:22.892314Z",
"url": "https://files.pythonhosted.org/packages/0c/1b/99edd7c27bcd68579deb919a10e2418c461d7b4c5aa629e0ba06b9687b6d/cachebox-4.5.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "99ea436d9a34cb25a6adf2f165bc820034a8079ff0c153d1f8e45618c3fa14c7",
"md5": "e5d0148df123e66bff4be0df3efa7789",
"sha256": "7476473ae6c85684d663341f81c3eb2faacebce6998aafa387456f1647e43ed4"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "e5d0148df123e66bff4be0df3efa7789",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 652473,
"upload_time": "2025-02-01T09:19:26",
"upload_time_iso_8601": "2025-02-01T09:19:26.473629Z",
"url": "https://files.pythonhosted.org/packages/99/ea/436d9a34cb25a6adf2f165bc820034a8079ff0c153d1f8e45618c3fa14c7/cachebox-4.5.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b6751df14f0a07c732a382c93df3d88d894e3e948789b6c2fe3457bb7317efe3",
"md5": "0c34d319f2e0817cc954b2d0126426a1",
"sha256": "87a0e90897031089cca6a330550d5230af026d9a10200575ab97347aa88c9395"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "0c34d319f2e0817cc954b2d0126426a1",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 557350,
"upload_time": "2025-02-01T09:19:27",
"upload_time_iso_8601": "2025-02-01T09:19:27.770534Z",
"url": "https://files.pythonhosted.org/packages/b6/75/1df14f0a07c732a382c93df3d88d894e3e948789b6c2fe3457bb7317efe3/cachebox-4.5.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b5d26e43677d9c2587dab003c9411edbc123bb25a7542d6448e5e08ea14b1f5f",
"md5": "e5fb41e42cfc26db4e4cc98d789a921c",
"sha256": "0b47da45822a7518b51a5bb61d2c2f87b8f7f93aab4ed9472b8ce6417b685b08"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "e5fb41e42cfc26db4e4cc98d789a921c",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 383875,
"upload_time": "2025-02-01T09:19:29",
"upload_time_iso_8601": "2025-02-01T09:19:29.031516Z",
"url": "https://files.pythonhosted.org/packages/b5/d2/6e43677d9c2587dab003c9411edbc123bb25a7542d6448e5e08ea14b1f5f/cachebox-4.5.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e11e1d2923b2c82956e7507ddf547a3d34f67fbbd5b86b9a31cf30a49fc60d51",
"md5": "64aaef63340ce75d775ff00d7868710d",
"sha256": "2d8e598f38da6a8abc6b69ac005ef36cd283897c2f081a51bb5f9b95547bafe0"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "64aaef63340ce75d775ff00d7868710d",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 341469,
"upload_time": "2025-02-01T09:19:30",
"upload_time_iso_8601": "2025-02-01T09:19:30.327027Z",
"url": "https://files.pythonhosted.org/packages/e1/1e/1d2923b2c82956e7507ddf547a3d34f67fbbd5b86b9a31cf30a49fc60d51/cachebox-4.5.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "23d1d4d366ae940576354955d4b86c08d6f363044c68e018255c31a5af5d0365",
"md5": "210050c8869baa564b32246ed1768432",
"sha256": "813aabd10979d655d46c4505986d808b9ad466d38ad289e8d6f508f43e81f842"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "210050c8869baa564b32246ed1768432",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 359122,
"upload_time": "2025-02-01T09:19:31",
"upload_time_iso_8601": "2025-02-01T09:19:31.938606Z",
"url": "https://files.pythonhosted.org/packages/23/d1/d4d366ae940576354955d4b86c08d6f363044c68e018255c31a5af5d0365/cachebox-4.5.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3a9ef705030d56b577c74029e27c0f4d865b9debee959cf5e39aaefb9cc2a01c",
"md5": "f8ca8707ca48183a2769da15ebe4a9e5",
"sha256": "beb0aaab151d3d8f63618743dd8f8538529de721b11166311f4d1e9fc08c7975"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "f8ca8707ca48183a2769da15ebe4a9e5",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 388572,
"upload_time": "2025-02-01T09:19:33",
"upload_time_iso_8601": "2025-02-01T09:19:33.294293Z",
"url": "https://files.pythonhosted.org/packages/3a/9e/f705030d56b577c74029e27c0f4d865b9debee959cf5e39aaefb9cc2a01c/cachebox-4.5.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0468fa020aea8854fef6e382b1a0f1479ff2e08da21c5d0352dc311e88f1049a",
"md5": "a057dc5579dc14b527bd09043c6cef78",
"sha256": "bcfa8f92acea0691ca8ce6be841f07b5077d2b518235e58e783baa1bb15d4ea5"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "a057dc5579dc14b527bd09043c6cef78",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 405813,
"upload_time": "2025-02-01T09:19:34",
"upload_time_iso_8601": "2025-02-01T09:19:34.693475Z",
"url": "https://files.pythonhosted.org/packages/04/68/fa020aea8854fef6e382b1a0f1479ff2e08da21c5d0352dc311e88f1049a/cachebox-4.5.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "551c547b144fb0255fc09cad6efb1d79cfa966e8be0d6888042de62138fec912",
"md5": "d50400c23ff40f075c29e23b4e8b7e91",
"sha256": "c8ff35c0995155e237a8469ca403e9f3d8ecd9f0c5fc4e86a68cc6d55e7e795d"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "d50400c23ff40f075c29e23b4e8b7e91",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 536914,
"upload_time": "2025-02-01T09:19:35",
"upload_time_iso_8601": "2025-02-01T09:19:35.907961Z",
"url": "https://files.pythonhosted.org/packages/55/1c/547b144fb0255fc09cad6efb1d79cfa966e8be0d6888042de62138fec912/cachebox-4.5.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0a755e2377d725854f8952acd0d5c9968fbcea6432c022ef036a2b928312ecf1",
"md5": "c3299aeb48d62c17dff12212f153b617",
"sha256": "64cfc13158608ee8c29038a24b3e29cbfb4dec873203beae2dfef8e68f084d23"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "c3299aeb48d62c17dff12212f153b617",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 652469,
"upload_time": "2025-02-01T09:19:38",
"upload_time_iso_8601": "2025-02-01T09:19:38.044866Z",
"url": "https://files.pythonhosted.org/packages/0a/75/5e2377d725854f8952acd0d5c9968fbcea6432c022ef036a2b928312ecf1/cachebox-4.5.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f28c18967a778acbab8d3e9177f0b45e4ad88cdc8d84f95a5f36453d2ad8ad4f",
"md5": "463b14a256dcf4b8457ad6a495fc896b",
"sha256": "1ad1f813fb27b40a5296b5e87a4d0414769f52166aff7a67c90f16c9e59d30d9"
},
"downloads": -1,
"filename": "cachebox-4.5.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "463b14a256dcf4b8457ad6a495fc896b",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 557350,
"upload_time": "2025-02-01T09:19:39",
"upload_time_iso_8601": "2025-02-01T09:19:39.436911Z",
"url": "https://files.pythonhosted.org/packages/f2/8c/18967a778acbab8d3e9177f0b45e4ad88cdc8d84f95a5f36453d2ad8ad4f/cachebox-4.5.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f8046a30ec4fad72f39b76c87c0668977f51823018d0fcd92d9cf62f02d7bd60",
"md5": "603ac231d6ecb2291a46394efedc2da4",
"sha256": "e0e11ee78fe6bc6ac8592e42e9e97d121b342902b64c6aff987eea113ed52891"
},
"downloads": -1,
"filename": "cachebox-4.5.1.tar.gz",
"has_sig": false,
"md5_digest": "603ac231d6ecb2291a46394efedc2da4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 56308,
"upload_time": "2025-02-01T09:19:40",
"upload_time_iso_8601": "2025-02-01T09:19:40.842344Z",
"url": "https://files.pythonhosted.org/packages/f8/04/6a30ec4fad72f39b76c87c0668977f51823018d0fcd92d9cf62f02d7bd60/cachebox-4.5.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-01 09:19:40",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "awolverp",
"github_project": "cachebox",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "cachebox"
}