# cachebox
![image](https://img.shields.io/pypi/v/cachebox.svg)
![image](https://img.shields.io/pypi/l/cachebox.svg)
![image](https://img.shields.io/pypi/pyversions/cachebox.svg)
![image](https://static.pepy.tech/badge/cachebox)
![python-test](https://github.com/awolverp/cachebox/actions/workflows/python-test.yml/badge.svg)
[**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.
## 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": null,
"author_email": "awolverp <awolverp@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/93/2a/c59689860188d3b490de448383966eca43bee5c06d8718d1cdc73d4a7141/cachebox-4.4.0.tar.gz",
"platform": null,
"description": "# cachebox\n\n![image](https://img.shields.io/pypi/v/cachebox.svg)\n![image](https://img.shields.io/pypi/l/cachebox.svg)\n![image](https://img.shields.io/pypi/pyversions/cachebox.svg)\n![image](https://static.pepy.tech/badge/cachebox)\n![python-test](https://github.com/awolverp/cachebox/actions/workflows/python-test.yml/badge.svg)\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## 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.4.0",
"project_urls": {
"Homepage": "https://github.com/awolverp/cachebox"
},
"split_keywords": [
"caching",
" cached",
" cachebox",
" cache",
" in-memory-caching",
" memoizing"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "5442aeb790497e1fd7b3f0be0933b0738a34c9b5545245958474894796000996",
"md5": "b43b55a6693431e1de876a6c26a9063f",
"sha256": "8f6636c26c97e504e471d41a20fef08173a8b64a9e3da58b7eebcfba109051f4"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp310-cp310-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "b43b55a6693431e1de876a6c26a9063f",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 382636,
"upload_time": "2024-11-28T10:55:25",
"upload_time_iso_8601": "2024-11-28T10:55:25.392455Z",
"url": "https://files.pythonhosted.org/packages/54/42/aeb790497e1fd7b3f0be0933b0738a34c9b5545245958474894796000996/cachebox-4.4.0-cp310-cp310-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "daed8d7d3e88f8f31e1dd4ebf13fd5f1340a14a7fd5dce5234b472316201fe84",
"md5": "90511ff4ac89728de6cd6cfb62505d05",
"sha256": "5a3e9c295dc8961fccd731178d79a839e9dfb42f1de181bbd685dee3b9b5aff3"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "90511ff4ac89728de6cd6cfb62505d05",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 342692,
"upload_time": "2024-11-28T10:55:27",
"upload_time_iso_8601": "2024-11-28T10:55:27.139895Z",
"url": "https://files.pythonhosted.org/packages/da/ed/8d7d3e88f8f31e1dd4ebf13fd5f1340a14a7fd5dce5234b472316201fe84/cachebox-4.4.0-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5a00955b38ed045eed0f433d367a13656e5bc4d67f0d259b2615b774d260c858",
"md5": "50c4023062512bcf6d95f07ad7027863",
"sha256": "01dff18248489a863bad0b0157fa414a5e3aca0e76bc2b0077157e3dd13b89e7"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "50c4023062512bcf6d95f07ad7027863",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 358430,
"upload_time": "2024-11-28T10:55:28",
"upload_time_iso_8601": "2024-11-28T10:55:28.400045Z",
"url": "https://files.pythonhosted.org/packages/5a/00/955b38ed045eed0f433d367a13656e5bc4d67f0d259b2615b774d260c858/cachebox-4.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0bddb3393f93c46ade43c014b47bf5cbb7e59e3ca7d12854e8cf6f7fee814706",
"md5": "92dbf33644d3d67f56321d1007ab8845",
"sha256": "17f8b356db9c83b05bfe07a19e06617a6c9f5e27536e5454b929a5173df28252"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "92dbf33644d3d67f56321d1007ab8845",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 386063,
"upload_time": "2024-11-28T10:55:29",
"upload_time_iso_8601": "2024-11-28T10:55:29.795453Z",
"url": "https://files.pythonhosted.org/packages/0b/dd/b3393f93c46ade43c014b47bf5cbb7e59e3ca7d12854e8cf6f7fee814706/cachebox-4.4.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a02d80fc5b0285c257f9b2174329873312ccaf90ad6334dece86e73f1907ec69",
"md5": "c65722ea29d17181fb719c92ae2483dc",
"sha256": "fd8232ebe2248e6363d25bfc8377f537ba44c1b1fc8ceeb8cb908cd31d56865d"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "c65722ea29d17181fb719c92ae2483dc",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 421811,
"upload_time": "2024-11-28T10:55:31",
"upload_time_iso_8601": "2024-11-28T10:55:31.207740Z",
"url": "https://files.pythonhosted.org/packages/a0/2d/80fc5b0285c257f9b2174329873312ccaf90ad6334dece86e73f1907ec69/cachebox-4.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "bba0f2a64e93aefa445fcf6eee094b61ad0f3916d1d002aa317a1e5f6a7a7773",
"md5": "06004701cac22f05de111ebc6a973f16",
"sha256": "284fb75285e890b745f824829159f17f348bdc309517dd58f407573a6f437b6a"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "06004701cac22f05de111ebc6a973f16",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 644457,
"upload_time": "2024-11-28T10:55:32",
"upload_time_iso_8601": "2024-11-28T10:55:32.623517Z",
"url": "https://files.pythonhosted.org/packages/bb/a0/f2a64e93aefa445fcf6eee094b61ad0f3916d1d002aa317a1e5f6a7a7773/cachebox-4.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e76a23d236a25bdc3f88d5be56d826b84008a5f8d28747d36e6af8ff65241af7",
"md5": "1eada34d07263171145e8baad1f51767",
"sha256": "3565c7c98eb859eb0724f7443f66cfda20b8518ea90f65919ecbff68a9025641"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "1eada34d07263171145e8baad1f51767",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 385642,
"upload_time": "2024-11-28T10:55:33",
"upload_time_iso_8601": "2024-11-28T10:55:33.864499Z",
"url": "https://files.pythonhosted.org/packages/e7/6a/23d236a25bdc3f88d5be56d826b84008a5f8d28747d36e6af8ff65241af7/cachebox-4.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6f7f402ab1d39589ea331c0ee9667129d0d05300efde61e782740794edafbdb7",
"md5": "1546ab3ac57228b2e9fc8e6335353372",
"sha256": "49626663d00c089e14d78a0efbe97c9df0a2f66b8a96f27f89591768eeb73829"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "1546ab3ac57228b2e9fc8e6335353372",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 399615,
"upload_time": "2024-11-28T10:55:35",
"upload_time_iso_8601": "2024-11-28T10:55:35.920345Z",
"url": "https://files.pythonhosted.org/packages/6f/7f/402ab1d39589ea331c0ee9667129d0d05300efde61e782740794edafbdb7/cachebox-4.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "554bbe532ec886450e39e98081590eb683d8713805cbcd7617ee9bdd1f80b349",
"md5": "1c3d2f26b65e20cf8044223e0794b36a",
"sha256": "37bdcc6a6dbb5c8281c3e4a4dfabf87b62a89369cbbac008fcc4e4ac08cb5c2f"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp310-cp310-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "1c3d2f26b65e20cf8044223e0794b36a",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 537350,
"upload_time": "2024-11-28T10:55:37",
"upload_time_iso_8601": "2024-11-28T10:55:37.210681Z",
"url": "https://files.pythonhosted.org/packages/55/4b/be532ec886450e39e98081590eb683d8713805cbcd7617ee9bdd1f80b349/cachebox-4.4.0-cp310-cp310-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4d7155009b743be2239508229367bd94addf1b4884428434a44165c1c635eab7",
"md5": "7043798dc6a579c870e9af10e18a6f42",
"sha256": "f483dc9232d8b2f12756d78ff8a307a638eeb5f859d49c9ba8d6a223f0c64e55"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp310-cp310-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "7043798dc6a579c870e9af10e18a6f42",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 649332,
"upload_time": "2024-11-28T10:55:38",
"upload_time_iso_8601": "2024-11-28T10:55:38.583508Z",
"url": "https://files.pythonhosted.org/packages/4d/71/55009b743be2239508229367bd94addf1b4884428434a44165c1c635eab7/cachebox-4.4.0-cp310-cp310-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b51e216999ca25bde789e546d3491accc2fac279eab48e96c014779c352e7e43",
"md5": "83bf9e0d4c5ff356267dfdd04db010c4",
"sha256": "ea0496e23757756b5b3434df17355be3512948de4c389f499acdd3bf262d63a7"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp310-cp310-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "83bf9e0d4c5ff356267dfdd04db010c4",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 557264,
"upload_time": "2024-11-28T10:55:39",
"upload_time_iso_8601": "2024-11-28T10:55:39.946299Z",
"url": "https://files.pythonhosted.org/packages/b5/1e/216999ca25bde789e546d3491accc2fac279eab48e96c014779c352e7e43/cachebox-4.4.0-cp310-cp310-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f02e3ecb35bf556b95148aa3958317e931fe75f1fa3ce2124d38ce78a6a215c6",
"md5": "51d190b8b4a0402630ab983a06dafefc",
"sha256": "ec29e47b5b56df8118234161774c707a02a69654034138ab2fc3147eb85ad06d"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp310-none-win32.whl",
"has_sig": false,
"md5_digest": "51d190b8b4a0402630ab983a06dafefc",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 267153,
"upload_time": "2024-11-28T10:55:41",
"upload_time_iso_8601": "2024-11-28T10:55:41.289079Z",
"url": "https://files.pythonhosted.org/packages/f0/2e/3ecb35bf556b95148aa3958317e931fe75f1fa3ce2124d38ce78a6a215c6/cachebox-4.4.0-cp310-none-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6d14f4df35f40e373100e8f61122d50fa0f7709873d2dd342632aaad8ee410f8",
"md5": "1668aa9ed072c4cb8728c6d867cfc1f1",
"sha256": "8ce702e0fd134f0e0ebd6bf2d09557b269bd24d6b33d91047989a1d05c79b165"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp310-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "1668aa9ed072c4cb8728c6d867cfc1f1",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.8",
"size": 278008,
"upload_time": "2024-11-28T10:55:42",
"upload_time_iso_8601": "2024-11-28T10:55:42.614124Z",
"url": "https://files.pythonhosted.org/packages/6d/14/f4df35f40e373100e8f61122d50fa0f7709873d2dd342632aaad8ee410f8/cachebox-4.4.0-cp310-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a71c354c412eb03ed29855a55ac728d4529d694cafbc259b6b3a35d50a71db32",
"md5": "534636901a563c337f7acd450fbfda1c",
"sha256": "1024de50b4ee45ace268702dba61ea45340912343fcdbf8492e7b306e9e4719d"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp311-cp311-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "534636901a563c337f7acd450fbfda1c",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 382636,
"upload_time": "2024-11-28T10:55:44",
"upload_time_iso_8601": "2024-11-28T10:55:44.625354Z",
"url": "https://files.pythonhosted.org/packages/a7/1c/354c412eb03ed29855a55ac728d4529d694cafbc259b6b3a35d50a71db32/cachebox-4.4.0-cp311-cp311-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "41df96fc02c6d3e32540dbb13f861d258019b42f04b288836151991eb154bd29",
"md5": "55a2b8570ee7b777cc22692adfdd29f7",
"sha256": "446ce06c2f5bfe78ee8e61e7f532257ecc800ac3e720c2c2796cfb538945ec3f"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "55a2b8570ee7b777cc22692adfdd29f7",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 342689,
"upload_time": "2024-11-28T10:55:45",
"upload_time_iso_8601": "2024-11-28T10:55:45.958662Z",
"url": "https://files.pythonhosted.org/packages/41/df/96fc02c6d3e32540dbb13f861d258019b42f04b288836151991eb154bd29/cachebox-4.4.0-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7bba5d162f6dcd850af52bc775cfb8e170408ef24b4b1665593915b4bbd21593",
"md5": "02db672e3b50745373e7b52b4f25aae5",
"sha256": "cc82e2f48f2cc44824452ea44c29cc0a414fb889ec118f69fc34b225cf18e3b3"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "02db672e3b50745373e7b52b4f25aae5",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 358429,
"upload_time": "2024-11-28T10:55:47",
"upload_time_iso_8601": "2024-11-28T10:55:47.961536Z",
"url": "https://files.pythonhosted.org/packages/7b/ba/5d162f6dcd850af52bc775cfb8e170408ef24b4b1665593915b4bbd21593/cachebox-4.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "247083d9f31a9839093931609d63e0dca4b20a1b63c766b8724d9eada2de398a",
"md5": "b2799d93980eb6d02ac9db5ccf8ff95c",
"sha256": "ca412bbe9b07b7fd0dd75c1f0129afd326de87d7203d0170b047791abb84db21"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "b2799d93980eb6d02ac9db5ccf8ff95c",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 386065,
"upload_time": "2024-11-28T10:55:49",
"upload_time_iso_8601": "2024-11-28T10:55:49.219619Z",
"url": "https://files.pythonhosted.org/packages/24/70/83d9f31a9839093931609d63e0dca4b20a1b63c766b8724d9eada2de398a/cachebox-4.4.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a59d4b61a5a31c883b4b2887d1a46cc2497189b58d6719217da9d08aa55eb241",
"md5": "1b735fce6d61a91aea7268746aedd0b3",
"sha256": "77dd295389b1f213c5a4d53335e68603a319e6aa92eeca57376853ccf23d6fe9"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "1b735fce6d61a91aea7268746aedd0b3",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 421813,
"upload_time": "2024-11-28T10:55:50",
"upload_time_iso_8601": "2024-11-28T10:55:50.396370Z",
"url": "https://files.pythonhosted.org/packages/a5/9d/4b61a5a31c883b4b2887d1a46cc2497189b58d6719217da9d08aa55eb241/cachebox-4.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "236f1a70cb96fa7a531ffb300bbfcb30a2992b6a4336ff277c240d789bbad881",
"md5": "8b87a4a63ad6a1ae230db03f7396b7fc",
"sha256": "f7131ec8f43ae02d8bc41f5add537469f56326dd60d63cbcde5a0e276bf460bc"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "8b87a4a63ad6a1ae230db03f7396b7fc",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 644458,
"upload_time": "2024-11-28T10:55:52",
"upload_time_iso_8601": "2024-11-28T10:55:52.496926Z",
"url": "https://files.pythonhosted.org/packages/23/6f/1a70cb96fa7a531ffb300bbfcb30a2992b6a4336ff277c240d789bbad881/cachebox-4.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "39c2528e42a15f5820df557ebbab62fed54b2af051bd37061e09ddd96662018a",
"md5": "435525e7505ab7a9460afdb2eda8beda",
"sha256": "7d75e904a4bc5765476b1067b961042b0f3dfe0e37e8b2a66e3940d82758726f"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "435525e7505ab7a9460afdb2eda8beda",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 385643,
"upload_time": "2024-11-28T10:55:55",
"upload_time_iso_8601": "2024-11-28T10:55:55.376648Z",
"url": "https://files.pythonhosted.org/packages/39/c2/528e42a15f5820df557ebbab62fed54b2af051bd37061e09ddd96662018a/cachebox-4.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "193269e075a3138ead858ad8607706ba581b0acbf84cbc30a3811b69d660e0ce",
"md5": "5e4d43d06f4ce19cf54a02495c651c40",
"sha256": "9b2282053fa8097633dc34ee942b3a172f57be64e965f99f50178703eba36c5b"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "5e4d43d06f4ce19cf54a02495c651c40",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 399613,
"upload_time": "2024-11-28T10:55:58",
"upload_time_iso_8601": "2024-11-28T10:55:58.040688Z",
"url": "https://files.pythonhosted.org/packages/19/32/69e075a3138ead858ad8607706ba581b0acbf84cbc30a3811b69d660e0ce/cachebox-4.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f73041743e38a2f04005709b3034afe0627c3b2173728ed2be5fadfab049d9c0",
"md5": "bc23d36a8d4f65091eced16d5aebf20e",
"sha256": "525a6d2a619b48304d04fe18e2d3b60f06000e052effc8aaed25876464a8b519"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp311-cp311-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "bc23d36a8d4f65091eced16d5aebf20e",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 537352,
"upload_time": "2024-11-28T10:56:00",
"upload_time_iso_8601": "2024-11-28T10:56:00.221405Z",
"url": "https://files.pythonhosted.org/packages/f7/30/41743e38a2f04005709b3034afe0627c3b2173728ed2be5fadfab049d9c0/cachebox-4.4.0-cp311-cp311-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a9b01aa932c9c962be569b32277c9db1cdd87a96537035dca5706919118531fb",
"md5": "e98ced94d8fe4539ec2493fcfc67ae38",
"sha256": "5dbc6470b645de96e39c069e0a89fa63ab52fd15df6a0fba73a3fcf4946bb931"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp311-cp311-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "e98ced94d8fe4539ec2493fcfc67ae38",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 649334,
"upload_time": "2024-11-28T10:56:01",
"upload_time_iso_8601": "2024-11-28T10:56:01.601585Z",
"url": "https://files.pythonhosted.org/packages/a9/b0/1aa932c9c962be569b32277c9db1cdd87a96537035dca5706919118531fb/cachebox-4.4.0-cp311-cp311-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "36fb0d084a17991c6f5c52e488942f25b022fdfefb07eb20a4d2363fb8c96228",
"md5": "846fe4f8cae7d850f636cd2634dd715d",
"sha256": "ace341256a504b0d1bef8b1512610acfddd75dae073c49e8797e3e3afe07cf8f"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp311-cp311-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "846fe4f8cae7d850f636cd2634dd715d",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 557267,
"upload_time": "2024-11-28T10:56:03",
"upload_time_iso_8601": "2024-11-28T10:56:03.164020Z",
"url": "https://files.pythonhosted.org/packages/36/fb/0d084a17991c6f5c52e488942f25b022fdfefb07eb20a4d2363fb8c96228/cachebox-4.4.0-cp311-cp311-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c8a065a81105e3b0f61074a1809ebb7f63ca3a097c18aa1f491a4f5dfe53dd3b",
"md5": "39a37b334eca28a9bd70115dab3e9ec6",
"sha256": "baa91dc1decc01714be961ec848d1518e88f782ca28160d057031ab777cfeeaf"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp311-none-win32.whl",
"has_sig": false,
"md5_digest": "39a37b334eca28a9bd70115dab3e9ec6",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 267029,
"upload_time": "2024-11-28T10:56:04",
"upload_time_iso_8601": "2024-11-28T10:56:04.436555Z",
"url": "https://files.pythonhosted.org/packages/c8/a0/65a81105e3b0f61074a1809ebb7f63ca3a097c18aa1f491a4f5dfe53dd3b/cachebox-4.4.0-cp311-none-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "173bd0da08be5115fbdcb4468069bdf7a9bb5006f2136463bcb989d807c77061",
"md5": "9a7d56c457007e2b51bc75bf4a7c1f97",
"sha256": "5b89b0bbd5103ac1e0eb2a28ca4a872c36d90d87ea92b337efcde8411b17e4cb"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp311-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "9a7d56c457007e2b51bc75bf4a7c1f97",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.8",
"size": 277660,
"upload_time": "2024-11-28T10:56:05",
"upload_time_iso_8601": "2024-11-28T10:56:05.733349Z",
"url": "https://files.pythonhosted.org/packages/17/3b/d0da08be5115fbdcb4468069bdf7a9bb5006f2136463bcb989d807c77061/cachebox-4.4.0-cp311-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0513788dfc65dd8c59d47f7756755b1a241ca15dc0bf5b8283eae6b2738bbc64",
"md5": "cd5342c7480d55b093db85cdfb8ea542",
"sha256": "1c65f1395c3823477e160d6abea48a44cbc6e9326887cdc47405ed16632bb47b"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp312-cp312-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "cd5342c7480d55b093db85cdfb8ea542",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 382635,
"upload_time": "2024-11-28T10:56:07",
"upload_time_iso_8601": "2024-11-28T10:56:07.022836Z",
"url": "https://files.pythonhosted.org/packages/05/13/788dfc65dd8c59d47f7756755b1a241ca15dc0bf5b8283eae6b2738bbc64/cachebox-4.4.0-cp312-cp312-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b27de81a6fff1aec0b36295fbf6087ecd03aa0e7ded671188dc9c7ebe0fc8f9f",
"md5": "c7ccb4c8810909fc3e1d809cb847c159",
"sha256": "ef0d5095eb816f93eb4bc4cfa58166f07950b980d3930903f94e14a7b0edaa50"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "c7ccb4c8810909fc3e1d809cb847c159",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 342690,
"upload_time": "2024-11-28T10:56:08",
"upload_time_iso_8601": "2024-11-28T10:56:08.273056Z",
"url": "https://files.pythonhosted.org/packages/b2/7d/e81a6fff1aec0b36295fbf6087ecd03aa0e7ded671188dc9c7ebe0fc8f9f/cachebox-4.4.0-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9be75fc5a38a4016658714572d3ecb691913060c6c9c06c531e033865f99191c",
"md5": "407c7a35558155e7faeb3f35067a1807",
"sha256": "d836204f02157aff5af321ff0c893724595972c00b655d4ea13b1ba11bedb485"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "407c7a35558155e7faeb3f35067a1807",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 358428,
"upload_time": "2024-11-28T10:56:10",
"upload_time_iso_8601": "2024-11-28T10:56:10.414509Z",
"url": "https://files.pythonhosted.org/packages/9b/e7/5fc5a38a4016658714572d3ecb691913060c6c9c06c531e033865f99191c/cachebox-4.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4bd2e0591dda8d7c32c98050fcdcbf303f2fd16a171856252faf4dec89b47e56",
"md5": "b0c5aead62538fbf812b05268a89337d",
"sha256": "cbe9c73ca604377c2d32ac1ed5ad2a6d89d8744a1f74657a239ee4ca90969379"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "b0c5aead62538fbf812b05268a89337d",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 386063,
"upload_time": "2024-11-28T10:56:11",
"upload_time_iso_8601": "2024-11-28T10:56:11.790108Z",
"url": "https://files.pythonhosted.org/packages/4b/d2/e0591dda8d7c32c98050fcdcbf303f2fd16a171856252faf4dec89b47e56/cachebox-4.4.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "66d48a53020a064460fd695b9ebc851a4b267f343fdb55f36f53780b69e8d62b",
"md5": "1cf997a3ff17b09c2e2c517e233ffbc9",
"sha256": "72bec6bd94ee6779e29de86fae0cf5b5bb6464f4923db1b00dc87c9e73238a9e"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "1cf997a3ff17b09c2e2c517e233ffbc9",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 421812,
"upload_time": "2024-11-28T10:56:13",
"upload_time_iso_8601": "2024-11-28T10:56:13.114722Z",
"url": "https://files.pythonhosted.org/packages/66/d4/8a53020a064460fd695b9ebc851a4b267f343fdb55f36f53780b69e8d62b/cachebox-4.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fe347110c21020e1483a97eb17657f2a506a2fcd9a978c164c85d20fa20cb5c7",
"md5": "dcd09a1c2b314c824e70393afc76b33e",
"sha256": "7e7242bbbbe993bc37ac2b277e0634a427b0ba480ccdfd7092fd1fb69da59298"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "dcd09a1c2b314c824e70393afc76b33e",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 644456,
"upload_time": "2024-11-28T10:56:15",
"upload_time_iso_8601": "2024-11-28T10:56:15.241651Z",
"url": "https://files.pythonhosted.org/packages/fe/34/7110c21020e1483a97eb17657f2a506a2fcd9a978c164c85d20fa20cb5c7/cachebox-4.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0cf97376afeedae64412b3c353bf36a39abf797561f93907497488daa19e0385",
"md5": "fd8c7f970385c0cb6d81ec9406304aab",
"sha256": "69189fcb81d0f03346894f2d2eb8e7a469dbe4ba6fd5fa148d350d7105ffd190"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "fd8c7f970385c0cb6d81ec9406304aab",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 385642,
"upload_time": "2024-11-28T10:56:16",
"upload_time_iso_8601": "2024-11-28T10:56:16.848815Z",
"url": "https://files.pythonhosted.org/packages/0c/f9/7376afeedae64412b3c353bf36a39abf797561f93907497488daa19e0385/cachebox-4.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "658e3f8085394494ca8e08dec1705c842505f9f67897f1df665aa760cf877cd7",
"md5": "0464ad284a169652f556272ac67be20f",
"sha256": "80977471ef4bcd4fc7567c2863871f8189e7e6d26ae1c6194fef701407e45412"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "0464ad284a169652f556272ac67be20f",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 399615,
"upload_time": "2024-11-28T10:56:18",
"upload_time_iso_8601": "2024-11-28T10:56:18.260363Z",
"url": "https://files.pythonhosted.org/packages/65/8e/3f8085394494ca8e08dec1705c842505f9f67897f1df665aa760cf877cd7/cachebox-4.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0efc6a0f03e217c4eaf24dd09d383ea3f78ee071ba147601707cf6610825bc77",
"md5": "49dd6acfa03033466c1579c593b2b44c",
"sha256": "cf02247945ca1fa87e917a1cd525151923c85ed451c2c8bb4a9c047e5e124bae"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp312-cp312-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "49dd6acfa03033466c1579c593b2b44c",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 537353,
"upload_time": "2024-11-28T10:56:19",
"upload_time_iso_8601": "2024-11-28T10:56:19.701484Z",
"url": "https://files.pythonhosted.org/packages/0e/fc/6a0f03e217c4eaf24dd09d383ea3f78ee071ba147601707cf6610825bc77/cachebox-4.4.0-cp312-cp312-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ec01d90651a82d5d9dfd5749fdf21cb845a5d2437b712c50e14c5a1d4bb89809",
"md5": "efd866461c9a776711be5cb7dfbdee0e",
"sha256": "14326dc41dbcf0cfe2ce66903e6e222d30ddf7c9a2a1dd6b6224aaa565812959"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp312-cp312-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "efd866461c9a776711be5cb7dfbdee0e",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 649335,
"upload_time": "2024-11-28T10:56:21",
"upload_time_iso_8601": "2024-11-28T10:56:21.138298Z",
"url": "https://files.pythonhosted.org/packages/ec/01/d90651a82d5d9dfd5749fdf21cb845a5d2437b712c50e14c5a1d4bb89809/cachebox-4.4.0-cp312-cp312-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4a75f6cc39d9b4dec102f0bd7ead3cdb0410fad6a033b355659429cc0c83f182",
"md5": "e825114b92366296991cf2a63b492ada",
"sha256": "5273bf67a6302d8af4338eacb8cd05253a589c21e5acbd37220d6749b1346b25"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp312-cp312-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "e825114b92366296991cf2a63b492ada",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 557266,
"upload_time": "2024-11-28T10:56:22",
"upload_time_iso_8601": "2024-11-28T10:56:22.498293Z",
"url": "https://files.pythonhosted.org/packages/4a/75/f6cc39d9b4dec102f0bd7ead3cdb0410fad6a033b355659429cc0c83f182/cachebox-4.4.0-cp312-cp312-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c02763282cc7c4f90f5ee13d3c0b8397d18a715ca707272e4d34b7c66dc035e7",
"md5": "a9e22c60e954bf17865a8466a73dcf1b",
"sha256": "4c638d65550a8e25cc4a6ee1b9caab93c359986b62028d65e0270b6d344d031b"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp312-none-win32.whl",
"has_sig": false,
"md5_digest": "a9e22c60e954bf17865a8466a73dcf1b",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 262844,
"upload_time": "2024-11-28T10:56:24",
"upload_time_iso_8601": "2024-11-28T10:56:24.003669Z",
"url": "https://files.pythonhosted.org/packages/c0/27/63282cc7c4f90f5ee13d3c0b8397d18a715ca707272e4d34b7c66dc035e7/cachebox-4.4.0-cp312-none-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7cc2cc10601b3a83b2e19ea352269fd4586f4c956ce897577245c49542dcdcfe",
"md5": "8917a301e710b242cb480fd56028a75e",
"sha256": "51c0a6620d73a17986af74fea07b59cf821e929da299946bea83d5dbf1e55a31"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp312-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "8917a301e710b242cb480fd56028a75e",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.8",
"size": 274315,
"upload_time": "2024-11-28T10:56:25",
"upload_time_iso_8601": "2024-11-28T10:56:25.324534Z",
"url": "https://files.pythonhosted.org/packages/7c/c2/cc10601b3a83b2e19ea352269fd4586f4c956ce897577245c49542dcdcfe/cachebox-4.4.0-cp312-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "64e12c59c9ac7a4965c45dd1888a43e8fb59efe24a980fc85b37fd5f36f97671",
"md5": "dd407657926a0c62f576820ef56e4c5f",
"sha256": "74b734b4dacc76878517a68317b8211e02579c27acea4e6965afd23ffd5f8fff"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp313-cp313-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "dd407657926a0c62f576820ef56e4c5f",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 382637,
"upload_time": "2024-11-28T10:56:26",
"upload_time_iso_8601": "2024-11-28T10:56:26.653332Z",
"url": "https://files.pythonhosted.org/packages/64/e1/2c59c9ac7a4965c45dd1888a43e8fb59efe24a980fc85b37fd5f36f97671/cachebox-4.4.0-cp313-cp313-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9844a8704887154a54c5cddef30a73af7c9b118571fd79f7fb5cb6ac39cc297d",
"md5": "0377497ddb49d3bc2be56c319b76f775",
"sha256": "ad37b41141a5347953afb7be07a33b69178f4d8227773d313d3902ccceac7419"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "0377497ddb49d3bc2be56c319b76f775",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 342690,
"upload_time": "2024-11-28T10:56:28",
"upload_time_iso_8601": "2024-11-28T10:56:28.044321Z",
"url": "https://files.pythonhosted.org/packages/98/44/a8704887154a54c5cddef30a73af7c9b118571fd79f7fb5cb6ac39cc297d/cachebox-4.4.0-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a599898b8db88cc06dce19ff8c5516ff1f0a9ebde972b311bb67bcd5361331c1",
"md5": "f48e04f380be990a1702db4f5c46eb61",
"sha256": "f6e9121322436fae5a59cc2db4d4a027cd607d44a25bbcea50c6b7e0249c4886"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "f48e04f380be990a1702db4f5c46eb61",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 358431,
"upload_time": "2024-11-28T10:56:29",
"upload_time_iso_8601": "2024-11-28T10:56:29.409147Z",
"url": "https://files.pythonhosted.org/packages/a5/99/898b8db88cc06dce19ff8c5516ff1f0a9ebde972b311bb67bcd5361331c1/cachebox-4.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "51430c3b851d981d1aa9ff17cb55caa0310cdf26de5999bc2904554641c91e30",
"md5": "c9e777040aa9015cdc83284f31e033bf",
"sha256": "089c4dd5dbc5196ee478e72d09b6a19ecf40fdbb15d8ae867120a8f49eccae0b"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "c9e777040aa9015cdc83284f31e033bf",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 386065,
"upload_time": "2024-11-28T10:56:30",
"upload_time_iso_8601": "2024-11-28T10:56:30.723155Z",
"url": "https://files.pythonhosted.org/packages/51/43/0c3b851d981d1aa9ff17cb55caa0310cdf26de5999bc2904554641c91e30/cachebox-4.4.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d8359c1e11b2c6bc56b8003fe1a69c19db5e8db422c1a05205ed8c37db0027ac",
"md5": "732f8f0a9edcdb0ec2c1713878136f9a",
"sha256": "359c946dbe2f5a8a73dd9d7679bbca8e04e7f331bec521b81aa1fd9333fc595f"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "732f8f0a9edcdb0ec2c1713878136f9a",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 421814,
"upload_time": "2024-11-28T10:56:32",
"upload_time_iso_8601": "2024-11-28T10:56:32.305929Z",
"url": "https://files.pythonhosted.org/packages/d8/35/9c1e11b2c6bc56b8003fe1a69c19db5e8db422c1a05205ed8c37db0027ac/cachebox-4.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8331b7120416ad3e835c341031078991eb60c71ce9f61b1f578f2d535645e1ed",
"md5": "bcf0d9b099a76382b03afe100ffed3cf",
"sha256": "5468ac1168c67fac5ca765311772b8468c878867bde392da2c894b30b16d0c2e"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "bcf0d9b099a76382b03afe100ffed3cf",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 644455,
"upload_time": "2024-11-28T10:56:33",
"upload_time_iso_8601": "2024-11-28T10:56:33.744249Z",
"url": "https://files.pythonhosted.org/packages/83/31/b7120416ad3e835c341031078991eb60c71ce9f61b1f578f2d535645e1ed/cachebox-4.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ac7317339491892eba8e85efc89f49d5552c637765958388fe14a4c76df9fa04",
"md5": "50427dbd62cba897a3fff55a87b88ef7",
"sha256": "0e7d19ab662189cf6455500638ae1d202146cc02007fa8fcbd74a427665f15be"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "50427dbd62cba897a3fff55a87b88ef7",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 385643,
"upload_time": "2024-11-28T10:56:35",
"upload_time_iso_8601": "2024-11-28T10:56:35.175459Z",
"url": "https://files.pythonhosted.org/packages/ac/73/17339491892eba8e85efc89f49d5552c637765958388fe14a4c76df9fa04/cachebox-4.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "63c52b9098ad8a672be6a860b544b038579a6d0649b365baf9101cfb40b0165e",
"md5": "77e9896146e4322de31b02786b89f606",
"sha256": "eb13d8fe23140875fbf040c022943649e9ea422261818bbd2afd06179f5e86bf"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "77e9896146e4322de31b02786b89f606",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 399614,
"upload_time": "2024-11-28T10:56:36",
"upload_time_iso_8601": "2024-11-28T10:56:36.570598Z",
"url": "https://files.pythonhosted.org/packages/63/c5/2b9098ad8a672be6a860b544b038579a6d0649b365baf9101cfb40b0165e/cachebox-4.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "01a2c12b73e42d572551e5deb156380d302cbb64d8c68f5650f507c3e19e87d4",
"md5": "ba2de2afdc39cab5ba5ca75b086215a6",
"sha256": "e0d6e68e571f565928faa58104134307f837618e3c53970611659360add53000"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp313-cp313-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "ba2de2afdc39cab5ba5ca75b086215a6",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 537353,
"upload_time": "2024-11-28T10:56:37",
"upload_time_iso_8601": "2024-11-28T10:56:37.985252Z",
"url": "https://files.pythonhosted.org/packages/01/a2/c12b73e42d572551e5deb156380d302cbb64d8c68f5650f507c3e19e87d4/cachebox-4.4.0-cp313-cp313-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "161f647c422cc49eb2ca41dc7176dc5e89ad7f0b95f0b8c1367a70b51a7aa2a4",
"md5": "fed5e9c7d4e12e731b0b7c99d346d87b",
"sha256": "4c25db18c2f50fb7647d6c99983abc678f7c519f0803821905a70ec335fd1946"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp313-cp313-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "fed5e9c7d4e12e731b0b7c99d346d87b",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 649334,
"upload_time": "2024-11-28T10:56:39",
"upload_time_iso_8601": "2024-11-28T10:56:39.420135Z",
"url": "https://files.pythonhosted.org/packages/16/1f/647c422cc49eb2ca41dc7176dc5e89ad7f0b95f0b8c1367a70b51a7aa2a4/cachebox-4.4.0-cp313-cp313-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "87134642e8602d5e6a5efa019041934682078c3377d1c0f85adf30f5ee1e4d3b",
"md5": "605d014c503dcbeb65814799fb3a0eda",
"sha256": "80b12e76154f17d671ef0c3030aaa7241da4cd7c9d89f7237e1ec6a6aac66ce0"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp313-cp313-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "605d014c503dcbeb65814799fb3a0eda",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 557266,
"upload_time": "2024-11-28T10:56:40",
"upload_time_iso_8601": "2024-11-28T10:56:40.772518Z",
"url": "https://files.pythonhosted.org/packages/87/13/4642e8602d5e6a5efa019041934682078c3377d1c0f85adf30f5ee1e4d3b/cachebox-4.4.0-cp313-cp313-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6ec492ba543dfa1e37866b2709a62371d6b34ea1e69baaaae575ab6d7249a39c",
"md5": "5b968de16822d1daebcac756b12dea22",
"sha256": "51779a4d73434add1908721a17e176dc2f5a9822259b023a1a666bfd74df7df4"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp313-none-win32.whl",
"has_sig": false,
"md5_digest": "5b968de16822d1daebcac756b12dea22",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 262611,
"upload_time": "2024-11-28T10:56:42",
"upload_time_iso_8601": "2024-11-28T10:56:42.093323Z",
"url": "https://files.pythonhosted.org/packages/6e/c4/92ba543dfa1e37866b2709a62371d6b34ea1e69baaaae575ab6d7249a39c/cachebox-4.4.0-cp313-none-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "806a7e0ec51b539a841e5e7861f526f4d90c0f56a892e8eba5c3df9ffdd4b3ef",
"md5": "761c82c541532ef1a8c15b4bd1f88ff3",
"sha256": "02358fc49fcd07684fec26130994877102ac39df5200912589b54e11cd8a64ed"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp313-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "761c82c541532ef1a8c15b4bd1f88ff3",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.8",
"size": 273963,
"upload_time": "2024-11-28T10:56:44",
"upload_time_iso_8601": "2024-11-28T10:56:44.164281Z",
"url": "https://files.pythonhosted.org/packages/80/6a/7e0ec51b539a841e5e7861f526f4d90c0f56a892e8eba5c3df9ffdd4b3ef/cachebox-4.4.0-cp313-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "12dda831258403bdcb63999396ebb6bf8e8cafbfaf33cb5f880af04af0a24c3f",
"md5": "fb1b056023b64648ff85b018710226ff",
"sha256": "d3b468817deed39ccf337e4eabda45ce799c564cd9b78db0485f7a7cbccddc74"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp38-cp38-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "fb1b056023b64648ff85b018710226ff",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 382635,
"upload_time": "2024-11-28T10:56:45",
"upload_time_iso_8601": "2024-11-28T10:56:45.689743Z",
"url": "https://files.pythonhosted.org/packages/12/dd/a831258403bdcb63999396ebb6bf8e8cafbfaf33cb5f880af04af0a24c3f/cachebox-4.4.0-cp38-cp38-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "09fe0fddb0018ffc4da3505588e95c741ed04ca79f08d3e743a9df3e9548c14d",
"md5": "2316773654fe944bbe0a74a44b4b109e",
"sha256": "1bfdb604d3126a9b1094f587de91e4195f9d62d2034808c5419785e2dda27557"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp38-cp38-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "2316773654fe944bbe0a74a44b4b109e",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 342686,
"upload_time": "2024-11-28T10:56:47",
"upload_time_iso_8601": "2024-11-28T10:56:47.076099Z",
"url": "https://files.pythonhosted.org/packages/09/fe/0fddb0018ffc4da3505588e95c741ed04ca79f08d3e743a9df3e9548c14d/cachebox-4.4.0-cp38-cp38-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "87ba301b0fe4e6e05af93f4dd096beedf6584432b928dbef0c8041943f5a22f7",
"md5": "a3c3bd379477a8aa0fb93ddccf8a89b8",
"sha256": "ba0de5e6dfe649a525596c425849ea7e5668e18d09df6632f8e389cd9f19887b"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "a3c3bd379477a8aa0fb93ddccf8a89b8",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 358427,
"upload_time": "2024-11-28T10:56:48",
"upload_time_iso_8601": "2024-11-28T10:56:48.505913Z",
"url": "https://files.pythonhosted.org/packages/87/ba/301b0fe4e6e05af93f4dd096beedf6584432b928dbef0c8041943f5a22f7/cachebox-4.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a6d19864b3f8a89611fdf61ee42b76b122567412a33a46c59c6cb381d10ac9db",
"md5": "3e3bf2e13b9a2e2dad06bfb906842f2e",
"sha256": "d1bf4c41bbc30cb938e4a1a6ec61b18cb408ecbe09b764ce0befbb1b480a84cb"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "3e3bf2e13b9a2e2dad06bfb906842f2e",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 386061,
"upload_time": "2024-11-28T10:56:50",
"upload_time_iso_8601": "2024-11-28T10:56:50.680824Z",
"url": "https://files.pythonhosted.org/packages/a6/d1/9864b3f8a89611fdf61ee42b76b122567412a33a46c59c6cb381d10ac9db/cachebox-4.4.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b2f2fb4e20948c40b85953e4edc2cb79edd1573e8632226ef7dfc020f9cd2cb1",
"md5": "9d2add06d675d1dff89811fe829426a0",
"sha256": "120dad1c468b65fb0694cbd3c05986161f349025c0ed1fc0806a01c457649b66"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "9d2add06d675d1dff89811fe829426a0",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 421810,
"upload_time": "2024-11-28T10:56:52",
"upload_time_iso_8601": "2024-11-28T10:56:52.189553Z",
"url": "https://files.pythonhosted.org/packages/b2/f2/fb4e20948c40b85953e4edc2cb79edd1573e8632226ef7dfc020f9cd2cb1/cachebox-4.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ee8e0add554d11f20cf15abef451fb1ace2c3a36956ef17cfce2f96d311008e4",
"md5": "8fcbd3db174ea813759ded3fdb65a42d",
"sha256": "482ac31e85b745a0c07e6ced83e6daf29376a567cb979c8584a22cc202876bea"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "8fcbd3db174ea813759ded3fdb65a42d",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 644454,
"upload_time": "2024-11-28T10:56:53",
"upload_time_iso_8601": "2024-11-28T10:56:53.627145Z",
"url": "https://files.pythonhosted.org/packages/ee/8e/0add554d11f20cf15abef451fb1ace2c3a36956ef17cfce2f96d311008e4/cachebox-4.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "52b5bf839b6bc1ec40e2b405ac7ca2b759c236f57f0a62305a8d3b66cb19d094",
"md5": "c02d084da49ba4de566dcb48c8070ba9",
"sha256": "ce0714d019a8c76a1fc2176c34ba9b9d6e165be92a6e14b7ad9bd483a7b49e88"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "c02d084da49ba4de566dcb48c8070ba9",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 385640,
"upload_time": "2024-11-28T10:56:55",
"upload_time_iso_8601": "2024-11-28T10:56:55.022772Z",
"url": "https://files.pythonhosted.org/packages/52/b5/bf839b6bc1ec40e2b405ac7ca2b759c236f57f0a62305a8d3b66cb19d094/cachebox-4.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e66e15a36e6a46cbe46d6ae59ce517369c972b21b6c9d366467a3bd9e076c4c5",
"md5": "afe2b0ef38175933ca8d7d81872e6827",
"sha256": "ecee607e5b6053243e1725c64c15a72029ceec2cb9e8d84133c901978c705c80"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "afe2b0ef38175933ca8d7d81872e6827",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 399611,
"upload_time": "2024-11-28T10:56:56",
"upload_time_iso_8601": "2024-11-28T10:56:56.509554Z",
"url": "https://files.pythonhosted.org/packages/e6/6e/15a36e6a46cbe46d6ae59ce517369c972b21b6c9d366467a3bd9e076c4c5/cachebox-4.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ea13b9e1f0703df71f3e54086e4e8c5137be991da500da44f51db1c1a7994714",
"md5": "b28b74dc4d300bd90324755a93a90445",
"sha256": "a6d7b57a236601e47442b3f5c697b47d4e40a0fa8af8634d7f28c2adbd9a5860"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp38-cp38-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "b28b74dc4d300bd90324755a93a90445",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 537344,
"upload_time": "2024-11-28T10:56:57",
"upload_time_iso_8601": "2024-11-28T10:56:57.951818Z",
"url": "https://files.pythonhosted.org/packages/ea/13/b9e1f0703df71f3e54086e4e8c5137be991da500da44f51db1c1a7994714/cachebox-4.4.0-cp38-cp38-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c7ef23aae64836ce7c5dd49e0b946d45342df7aa82fa38df5ab17ac317aaf6a8",
"md5": "19d0997d590f408f485a39fa874a635a",
"sha256": "183ffed34886d364b3798262a0dee280029ff724a239bd77b7eb67e69ef1f28a"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp38-cp38-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "19d0997d590f408f485a39fa874a635a",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 649329,
"upload_time": "2024-11-28T10:56:59",
"upload_time_iso_8601": "2024-11-28T10:56:59.448280Z",
"url": "https://files.pythonhosted.org/packages/c7/ef/23aae64836ce7c5dd49e0b946d45342df7aa82fa38df5ab17ac317aaf6a8/cachebox-4.4.0-cp38-cp38-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6a7633975eb6afc6890d0aeaa5d6be268f01b690a8d3dce8a89300044b9fc4fa",
"md5": "2f00ba44774241293ba2945aaba29497",
"sha256": "669321e8340b8fd247f8ba939e32bc6288d9ac738d0b30caccb98cd454b1be91"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp38-cp38-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "2f00ba44774241293ba2945aaba29497",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 557261,
"upload_time": "2024-11-28T10:57:01",
"upload_time_iso_8601": "2024-11-28T10:57:01.354732Z",
"url": "https://files.pythonhosted.org/packages/6a/76/33975eb6afc6890d0aeaa5d6be268f01b690a8d3dce8a89300044b9fc4fa/cachebox-4.4.0-cp38-cp38-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3c265962a9a3fda6d75b5057f80f78967c87c859cc2cecbb73650df919714179",
"md5": "5d4a8ed549ad2adafad90ee566afa489",
"sha256": "cfef27e1653beb93afc91652496dadc8213fd87bf62d73e18657fc49ad2f455a"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp38-none-win32.whl",
"has_sig": false,
"md5_digest": "5d4a8ed549ad2adafad90ee566afa489",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 267443,
"upload_time": "2024-11-28T10:57:03",
"upload_time_iso_8601": "2024-11-28T10:57:03.599767Z",
"url": "https://files.pythonhosted.org/packages/3c/26/5962a9a3fda6d75b5057f80f78967c87c859cc2cecbb73650df919714179/cachebox-4.4.0-cp38-none-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "db9f0d93577efc91085f6de8debf1fac64201995211efc951c707729c1f8a42e",
"md5": "3aeab2db42f5a9125e889a1b988b8ef2",
"sha256": "25247bdf189c8d36747e99138f94ae0ef4b7a7c68605aaac6499ff25d7251430"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp38-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "3aeab2db42f5a9125e889a1b988b8ef2",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 278322,
"upload_time": "2024-11-28T10:57:05",
"upload_time_iso_8601": "2024-11-28T10:57:05.104739Z",
"url": "https://files.pythonhosted.org/packages/db/9f/0d93577efc91085f6de8debf1fac64201995211efc951c707729c1f8a42e/cachebox-4.4.0-cp38-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b2afaf07eefc3d96a926ea8baf8a723c310e68a4556428b91733ac2ed55111d9",
"md5": "02dd265e8188acec871604392a8672e5",
"sha256": "3a221a9a4b820690831ec290279f2f9132fa4fbf0a99c2433bebd526182b22f6"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp39-cp39-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "02dd265e8188acec871604392a8672e5",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 382636,
"upload_time": "2024-11-28T10:57:06",
"upload_time_iso_8601": "2024-11-28T10:57:06.540619Z",
"url": "https://files.pythonhosted.org/packages/b2/af/af07eefc3d96a926ea8baf8a723c310e68a4556428b91733ac2ed55111d9/cachebox-4.4.0-cp39-cp39-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0e7d6b946d341ea2bb2adedcd23a7360e0716b3efd364214c56f36b2bc006e07",
"md5": "692ad7259205026d5f59849d6826ebec",
"sha256": "de0ad65a6f455afb2caa7860b564e591088303545c16a3233c1cab88d1428b5f"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "692ad7259205026d5f59849d6826ebec",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 342686,
"upload_time": "2024-11-28T10:57:08",
"upload_time_iso_8601": "2024-11-28T10:57:08.068075Z",
"url": "https://files.pythonhosted.org/packages/0e/7d/6b946d341ea2bb2adedcd23a7360e0716b3efd364214c56f36b2bc006e07/cachebox-4.4.0-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "56e184ea4e1e93cebe0a89bfce18e34b84da2d20b032f66194164413f4221123",
"md5": "16ec2b5612e38aae539ec3b41bc7634a",
"sha256": "76bbb80b7a5445655780a48a03d086844b360342b3a353099d9b29941c78c084"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "16ec2b5612e38aae539ec3b41bc7634a",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 358426,
"upload_time": "2024-11-28T10:57:10",
"upload_time_iso_8601": "2024-11-28T10:57:10.067251Z",
"url": "https://files.pythonhosted.org/packages/56/e1/84ea4e1e93cebe0a89bfce18e34b84da2d20b032f66194164413f4221123/cachebox-4.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4777b2e3edf818d01a9587ccdce2854d728e34da4c2ec1e9559230f9b46369e6",
"md5": "8448f00684a553bee728d1cc50f77ec9",
"sha256": "1a0f18338c6657701d5a12a10f73222ebb04d53f3cac68d633a6b1c4e6ab6fb6"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "8448f00684a553bee728d1cc50f77ec9",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 386062,
"upload_time": "2024-11-28T10:57:11",
"upload_time_iso_8601": "2024-11-28T10:57:11.668343Z",
"url": "https://files.pythonhosted.org/packages/47/77/b2e3edf818d01a9587ccdce2854d728e34da4c2ec1e9559230f9b46369e6/cachebox-4.4.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9e1815a2760fc8c46496fedb79454e6be1cc6f2b982ac3919aa398e973a2813a",
"md5": "0b175b0dfbd1f87bd0fe68851245f738",
"sha256": "b68902d6f5c9b139360b65d66d560a3049dcbd5b7898c75b819c57534ec02420"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "0b175b0dfbd1f87bd0fe68851245f738",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 421807,
"upload_time": "2024-11-28T10:57:13",
"upload_time_iso_8601": "2024-11-28T10:57:13.347686Z",
"url": "https://files.pythonhosted.org/packages/9e/18/15a2760fc8c46496fedb79454e6be1cc6f2b982ac3919aa398e973a2813a/cachebox-4.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "336198658d0beaca57fe4b680a1882bfc2bc0e9dcb28134c028949fb634c8508",
"md5": "8a6d9bf52dcb3e3aca1b9541f902d389",
"sha256": "44f9614027dac26f2e81c27cef28a7b702e2d7ed2dc28d33c28adad6cd01320b"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "8a6d9bf52dcb3e3aca1b9541f902d389",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 644453,
"upload_time": "2024-11-28T10:57:14",
"upload_time_iso_8601": "2024-11-28T10:57:14.848565Z",
"url": "https://files.pythonhosted.org/packages/33/61/98658d0beaca57fe4b680a1882bfc2bc0e9dcb28134c028949fb634c8508/cachebox-4.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "089d3927f33a8088b07a597fb7f9fd90ad12d8366a047299b39ad866560415e6",
"md5": "80c6e04bbbeafb4345d172b6904915cb",
"sha256": "28d075eab251c083bc756977b1617c9daa9796b4f52eab9d2aa5f0e71e23d714"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "80c6e04bbbeafb4345d172b6904915cb",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 385640,
"upload_time": "2024-11-28T10:57:16",
"upload_time_iso_8601": "2024-11-28T10:57:16.541371Z",
"url": "https://files.pythonhosted.org/packages/08/9d/3927f33a8088b07a597fb7f9fd90ad12d8366a047299b39ad866560415e6/cachebox-4.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d1f9040f687bc8ce42a1db81898bde7f3b075479d3a303bec76d63a267169014",
"md5": "8a3a49ade92ed83a123e90ad8c7914de",
"sha256": "966ba7d0ea42320cfae680ac2308d8a88d41f23e6de91db59cbc1ad1e6b61fac"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "8a3a49ade92ed83a123e90ad8c7914de",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 399610,
"upload_time": "2024-11-28T10:57:18",
"upload_time_iso_8601": "2024-11-28T10:57:18.184963Z",
"url": "https://files.pythonhosted.org/packages/d1/f9/040f687bc8ce42a1db81898bde7f3b075479d3a303bec76d63a267169014/cachebox-4.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4c1f7b239241e17fb23cf4d235c49eb9d0ff7cd869551bc73faf77f0657cd1d9",
"md5": "67a0ab4b351131c67d316325a68802c7",
"sha256": "a01ddd103d13d459ff106a3f8b45bdc9f98911ac8e82e276a3dd4321ede59d6c"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp39-cp39-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "67a0ab4b351131c67d316325a68802c7",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 537344,
"upload_time": "2024-11-28T10:57:19",
"upload_time_iso_8601": "2024-11-28T10:57:19.779070Z",
"url": "https://files.pythonhosted.org/packages/4c/1f/7b239241e17fb23cf4d235c49eb9d0ff7cd869551bc73faf77f0657cd1d9/cachebox-4.4.0-cp39-cp39-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9f772d98d6a96ecaf17d0dc2592f9b0c50c750d47731fca1c4933472f485975b",
"md5": "19b3b9c3c9759d1a7fcdf77aaa597ba1",
"sha256": "c9086c8e130e9ab30117a11f003f32d9326ad63dd4cc3f630ce13a563bbcdb49"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp39-cp39-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "19b3b9c3c9759d1a7fcdf77aaa597ba1",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 649328,
"upload_time": "2024-11-28T10:57:21",
"upload_time_iso_8601": "2024-11-28T10:57:21.420865Z",
"url": "https://files.pythonhosted.org/packages/9f/77/2d98d6a96ecaf17d0dc2592f9b0c50c750d47731fca1c4933472f485975b/cachebox-4.4.0-cp39-cp39-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "032180a72abec7d3c86dd6f3939ae8146cdb2f56894f502f31277bd3323299b7",
"md5": "9b22c5e7e5b8eda4d96d20330c15b5ae",
"sha256": "e3dd761abcc2a431c3c19515f668b93b9fcaa2a5ab8b2517ddb14065ae35ac13"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp39-cp39-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "9b22c5e7e5b8eda4d96d20330c15b5ae",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 557261,
"upload_time": "2024-11-28T10:57:23",
"upload_time_iso_8601": "2024-11-28T10:57:23.089600Z",
"url": "https://files.pythonhosted.org/packages/03/21/80a72abec7d3c86dd6f3939ae8146cdb2f56894f502f31277bd3323299b7/cachebox-4.4.0-cp39-cp39-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b6b07301ce8c45b2f0d3657e3f8d3c7ed2f5cfa53011522a8b7bb73a6506594d",
"md5": "198242c473d73bd90f28324ed5bcb789",
"sha256": "70b6a3531df48c291ea9a7fd6b6422702bdef5c7243042847b9500d0a9db9373"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp39-none-win32.whl",
"has_sig": false,
"md5_digest": "198242c473d73bd90f28324ed5bcb789",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 267379,
"upload_time": "2024-11-28T10:57:24",
"upload_time_iso_8601": "2024-11-28T10:57:24.733218Z",
"url": "https://files.pythonhosted.org/packages/b6/b0/7301ce8c45b2f0d3657e3f8d3c7ed2f5cfa53011522a8b7bb73a6506594d/cachebox-4.4.0-cp39-none-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2ee4f3fb77da73e7966786235a857ea526701ef745e59c6f751d4b0d5716fb40",
"md5": "e9cc29fa89606be7463ddf20fd95cf53",
"sha256": "6d4daef6ccf56d652c2adea170e7c4c2d64dddccdf1313c64b11bd1f2fcef170"
},
"downloads": -1,
"filename": "cachebox-4.4.0-cp39-none-win_amd64.whl",
"has_sig": false,
"md5_digest": "e9cc29fa89606be7463ddf20fd95cf53",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.8",
"size": 278138,
"upload_time": "2024-11-28T10:57:26",
"upload_time_iso_8601": "2024-11-28T10:57:26.233283Z",
"url": "https://files.pythonhosted.org/packages/2e/e4/f3fb77da73e7966786235a857ea526701ef745e59c6f751d4b0d5716fb40/cachebox-4.4.0-cp39-none-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "044d0b0f407192ef530def8e5e9b875ac933734c6ec5b0baef1cf6eee3b49e8a",
"md5": "09bcbba931b7825bfaa9d62f1af17fcf",
"sha256": "9fc2acce41e3c6342910edf19c3f37cdcf615a80af9cf23dccc8ad7cc6dbf1d8"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "09bcbba931b7825bfaa9d62f1af17fcf",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 382647,
"upload_time": "2024-11-28T10:57:28",
"upload_time_iso_8601": "2024-11-28T10:57:28.036346Z",
"url": "https://files.pythonhosted.org/packages/04/4d/0b0f407192ef530def8e5e9b875ac933734c6ec5b0baef1cf6eee3b49e8a/cachebox-4.4.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "aa9ae1728e255db19042893658005bef6ac0466e1e83f4e293efa6f9e0b7ed7d",
"md5": "9514f8913c5ba6673854ce0808cf20ec",
"sha256": "31db975ee1052f7d65fbf172b52f06bafa870994866b0756dda71aac82247223"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "9514f8913c5ba6673854ce0808cf20ec",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 342701,
"upload_time": "2024-11-28T10:57:30",
"upload_time_iso_8601": "2024-11-28T10:57:30.663275Z",
"url": "https://files.pythonhosted.org/packages/aa/9a/e1728e255db19042893658005bef6ac0466e1e83f4e293efa6f9e0b7ed7d/cachebox-4.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4f53fd5138f9c4aa2722d20f4aedf351b168bbd9377fd94f4188433f2efc35ff",
"md5": "c86b9b0937a62c32739f2cf90c91dd51",
"sha256": "96db1717b37aafd2346080416c72d16ae4ea8b197996b65452c26ff7f07cb65b"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "c86b9b0937a62c32739f2cf90c91dd51",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 358437,
"upload_time": "2024-11-28T10:57:32",
"upload_time_iso_8601": "2024-11-28T10:57:32.298609Z",
"url": "https://files.pythonhosted.org/packages/4f/53/fd5138f9c4aa2722d20f4aedf351b168bbd9377fd94f4188433f2efc35ff/cachebox-4.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9172380c7f03f68e2e82b24f2daa82d5cfa6c781cb902097c05f9a9a38b13f4c",
"md5": "320c5af941c702334fa62e5004d1eced",
"sha256": "ff972530a6512cd58a8c0444ee0ab2da27fc49e939e34e942f5b7a193ef28764"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "320c5af941c702334fa62e5004d1eced",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 386557,
"upload_time": "2024-11-28T10:57:33",
"upload_time_iso_8601": "2024-11-28T10:57:33.919002Z",
"url": "https://files.pythonhosted.org/packages/91/72/380c7f03f68e2e82b24f2daa82d5cfa6c781cb902097c05f9a9a38b13f4c/cachebox-4.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "aae4f04f2a28cd95f9f6c9937cb7f754ff99272b19344b3da045e85000e7fbd7",
"md5": "2358ae546c65428f68baec59a6a362cf",
"sha256": "e605e170e23806295cde8727ea69a32c90d6a537f8a765e56d1ae2a3aa61f150"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "2358ae546c65428f68baec59a6a362cf",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 403434,
"upload_time": "2024-11-28T10:57:35",
"upload_time_iso_8601": "2024-11-28T10:57:35.501323Z",
"url": "https://files.pythonhosted.org/packages/aa/e4/f04f2a28cd95f9f6c9937cb7f754ff99272b19344b3da045e85000e7fbd7/cachebox-4.4.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ac2bbf72820a3604c82ab47013ef27aad8381e6591cd8ef5620cc5b9d95896f7",
"md5": "59a34797c666b081cc381632c05ce005",
"sha256": "c2e098dd4c7725e7247a66596246c667944355af4024395db747f2f3600f1a52"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "59a34797c666b081cc381632c05ce005",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 537359,
"upload_time": "2024-11-28T10:57:37",
"upload_time_iso_8601": "2024-11-28T10:57:37.131519Z",
"url": "https://files.pythonhosted.org/packages/ac/2b/bf72820a3604c82ab47013ef27aad8381e6591cd8ef5620cc5b9d95896f7/cachebox-4.4.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ca76b694b6c87d7c0bf23011c8f284e56a8b8cbba5d8d427e6803406164d9a41",
"md5": "9b693bb74a3e1ce93983a7c06755eebe",
"sha256": "ea829c774c9db94a52b865ed43d29dc80f604365434d637038d98332102144cb"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "9b693bb74a3e1ce93983a7c06755eebe",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 649322,
"upload_time": "2024-11-28T10:57:38",
"upload_time_iso_8601": "2024-11-28T10:57:38.832855Z",
"url": "https://files.pythonhosted.org/packages/ca/76/b694b6c87d7c0bf23011c8f284e56a8b8cbba5d8d427e6803406164d9a41/cachebox-4.4.0-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8061e389ef738f74dbfbde6b2391f683c0a59c99a1b852a8a8b1c091eabe20ef",
"md5": "35f8cae8bb1b99012a11d87786bb8610",
"sha256": "e11a76307794be9024bea92103c8368b020aae63866e16cc30cc0e8681c373ca"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "35f8cae8bb1b99012a11d87786bb8610",
"packagetype": "bdist_wheel",
"python_version": "pp310",
"requires_python": ">=3.8",
"size": 557271,
"upload_time": "2024-11-28T10:57:40",
"upload_time_iso_8601": "2024-11-28T10:57:40.473685Z",
"url": "https://files.pythonhosted.org/packages/80/61/e389ef738f74dbfbde6b2391f683c0a59c99a1b852a8a8b1c091eabe20ef/cachebox-4.4.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1839ee7eeba79124c712f9baed43de7c3a52d1cdeb9d8680fceaafb9e3ece361",
"md5": "6948fea6dcb625d6d40523883c0f4b5d",
"sha256": "4230741481a04ddd3c9d95919346b00001438396df37a94d8b5f988e5cde9866"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "6948fea6dcb625d6d40523883c0f4b5d",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 382638,
"upload_time": "2024-11-28T10:57:42",
"upload_time_iso_8601": "2024-11-28T10:57:42.703797Z",
"url": "https://files.pythonhosted.org/packages/18/39/ee7eeba79124c712f9baed43de7c3a52d1cdeb9d8680fceaafb9e3ece361/cachebox-4.4.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "747540104559608897416981d7ca10986292506614a6776315fe6882a307327a",
"md5": "0f43867e82a9e502656bdd00c842c1b3",
"sha256": "f955a14dfd936e503db9c6f8234e51b47ad40f46821eae4087f85a4d6fe92335"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "0f43867e82a9e502656bdd00c842c1b3",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 342689,
"upload_time": "2024-11-28T10:57:44",
"upload_time_iso_8601": "2024-11-28T10:57:44.348747Z",
"url": "https://files.pythonhosted.org/packages/74/75/40104559608897416981d7ca10986292506614a6776315fe6882a307327a/cachebox-4.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "86a440c5dc0bcab1b99f10a23406fc46dfc1c46bc2cefb8bf69aa55647802110",
"md5": "5654551f106a3dc69a30cd7c9acaa4f3",
"sha256": "1471fdf106bd8daae8b7ccdff1167a14ea11af7a43fd455a01bcca653122ac9c"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "5654551f106a3dc69a30cd7c9acaa4f3",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 358432,
"upload_time": "2024-11-28T10:57:45",
"upload_time_iso_8601": "2024-11-28T10:57:45.996195Z",
"url": "https://files.pythonhosted.org/packages/86/a4/40c5dc0bcab1b99f10a23406fc46dfc1c46bc2cefb8bf69aa55647802110/cachebox-4.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "dc7b23088611128d18691bb1b6dd3bc3e3ba332516224aa9a7a04898a51ca920",
"md5": "7d0579596d1d5b5183793f742062ef65",
"sha256": "46c5b568bf93f91e754ff286d1de3fbd0056e78a4ef84944e105027f0235bd84"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "7d0579596d1d5b5183793f742062ef65",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 385646,
"upload_time": "2024-11-28T10:57:47",
"upload_time_iso_8601": "2024-11-28T10:57:47.611728Z",
"url": "https://files.pythonhosted.org/packages/dc/7b/23088611128d18691bb1b6dd3bc3e3ba332516224aa9a7a04898a51ca920/cachebox-4.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "24e3cf2b48d86caaa6fb8d8e439d479e961f9f4e0e0a2c3e3bb079274997e364",
"md5": "c677ab4661c4c6d5d9e932426311856f",
"sha256": "adb34d6b054b472c2f5ecd1d3a078d44fc4964135677966e119120f5e18b21df"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "c677ab4661c4c6d5d9e932426311856f",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 399614,
"upload_time": "2024-11-28T10:57:49",
"upload_time_iso_8601": "2024-11-28T10:57:49.392976Z",
"url": "https://files.pythonhosted.org/packages/24/e3/cf2b48d86caaa6fb8d8e439d479e961f9f4e0e0a2c3e3bb079274997e364/cachebox-4.4.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "40ec5a5a1bb612e3232c33c90c9bf4dec82b7f12bc6335b000a5a02578665269",
"md5": "65d78411ef15e496c88c0630d5bd4654",
"sha256": "680cba332655fb3c250a9061bb83b00113c8f7f7b2ae9a6f7ba1d1eaba9d903f"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "65d78411ef15e496c88c0630d5bd4654",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 537354,
"upload_time": "2024-11-28T10:57:51",
"upload_time_iso_8601": "2024-11-28T10:57:51.245386Z",
"url": "https://files.pythonhosted.org/packages/40/ec/5a5a1bb612e3232c33c90c9bf4dec82b7f12bc6335b000a5a02578665269/cachebox-4.4.0-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d2f787ba0bcecde30ae4280c892f82e0ecac9e8a475f2d6469b80564edf6b2dd",
"md5": "ebb7d7a4a9fe3e112999a76f0f126e30",
"sha256": "c4af9d6999f88995f9bb354d3ea96386cd21ba89a22627ea4f5895e5ab44fcf8"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl",
"has_sig": false,
"md5_digest": "ebb7d7a4a9fe3e112999a76f0f126e30",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 649316,
"upload_time": "2024-11-28T10:57:53",
"upload_time_iso_8601": "2024-11-28T10:57:53.614927Z",
"url": "https://files.pythonhosted.org/packages/d2/f7/87ba0bcecde30ae4280c892f82e0ecac9e8a475f2d6469b80564edf6b2dd/cachebox-4.4.0-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5b6ea0b9d92673fbcb91d44255a160b079c0eacaf026a6f1afea2a67ce608cfb",
"md5": "bf6732691fe0151285d8508907137b48",
"sha256": "0d085b6f830749ebb313ad7dab1d78d072a1f05be26318d6b4193223bd64c731"
},
"downloads": -1,
"filename": "cachebox-4.4.0-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "bf6732691fe0151285d8508907137b48",
"packagetype": "bdist_wheel",
"python_version": "pp39",
"requires_python": ">=3.8",
"size": 557267,
"upload_time": "2024-11-28T10:57:55",
"upload_time_iso_8601": "2024-11-28T10:57:55.473234Z",
"url": "https://files.pythonhosted.org/packages/5b/6e/a0b9d92673fbcb91d44255a160b079c0eacaf026a6f1afea2a67ce608cfb/cachebox-4.4.0-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "932ac59689860188d3b490de448383966eca43bee5c06d8718d1cdc73d4a7141",
"md5": "c04b626f789c23d684da441b89ca9788",
"sha256": "b45e97a764d1455c7fc747868747067e21d6be78a00d68625808d82c4ab050e2"
},
"downloads": -1,
"filename": "cachebox-4.4.0.tar.gz",
"has_sig": false,
"md5_digest": "c04b626f789c23d684da441b89ca9788",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 55149,
"upload_time": "2024-11-28T10:57:57",
"upload_time_iso_8601": "2024-11-28T10:57:57.034295Z",
"url": "https://files.pythonhosted.org/packages/93/2a/c59689860188d3b490de448383966eca43bee5c06d8718d1cdc73d4a7141/cachebox-4.4.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-28 10:57:57",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "awolverp",
"github_project": "cachebox",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "cachebox"
}