A specialized library developed by Credenti for efficient caching in Flask applications.
Project description
Ct Cache Lib
A specialized library developed by Credenti for efficient caching in Flask applications.
Features
- Decorator-based caching for Flask endpoints and functions
- Configurable Valkey connection pooling
- Supports cache key templating with nested attribute access
- Easy integration with Flask app lifecycle
Installation
pip install ct-cache-lib
Configuration
Add the following to your Flask app configuration:
app.config['CACHE'] = True # Enable or disable caching
app.config['CACHE_EXPIRE_TIME'] = 60 # Default cache expiration time in seconds
app.config['CACHE_HOST'] = 'localhost' # Cache host
app.config['CACHE_PORT'] = 6379 # Cache port
app.config['CACHE_USERNAME'] = 'user' # Cache username (if required)
app.config['CACHE_PASSWORD'] = 'pass' # Cache password (if required)
app.config['CACHE_CLIENT_NAME'] = 'my-client' # Cache client name
Usage
The @ct_cache.cache decorator can be applied to any function to enable caching. It supports both positional and keyword arguments.
You can also set read_only=True to prevent the cache from being updated on a cache miss. This is useful for high-priority reads where you want to avoid writing to the cache.
from flask import Flask
from ct_cache_lib import init_cache
import logging
app = Flask(__name__)
logger = logging.getLogger(__name__)
# Initialize the cache
ct_cache = init_cache(app, logger)
@app.route('/idle_time')
@ct_cache.cache(template_cache_key='idle_time_value:$idle_time', field='$idle_time')
def get_idle_time_value(idle_time: str):
# Your function logic here
return {'idle_time': idle_time}
Bypassing the Cache
You can dynamically bypass the cache for any decorated function by passing use_cache=False when you call it. This tells the decorator to ignore the cache and execute the function directly.
# This call will use the cache
get_idle_time_value(idle_time='123')
# This call will bypass the cache and execute the function
get_idle_time_value(idle_time='123', use_cache=False)
Updating a Cache Entry
Update a cache entry directly:
ct_cache.update(
cache_key='idle_time_value:123', # Actual cache key
field='some_field',
value={'idle_time': 123},
is_global=False, # or True if the key is global
expire_time=120 # optional, in seconds
)
Deleting a Cache Entry
Delete a cache entry:
ct_cache.delete(
cache_key='idle_time_value:123', # Actual cache key, not a template
field='some_field',
is_global=False # or True if the key is global
)
Committing and Resetting Cache
Commit cache writes after each request:
@app.after_request
def after_request(response):
ct_cache.commit(response)
return response
Reset cache if you need to roll back changes:
ct_cache.reset()
Cache Key Specification Examples
You can use dynamic cache keys by referencing function arguments or nested data using $.
Basic Example
@ct_cache.cache(template_cache_key='idle_time_value:$idle_time', field='$idle_time')
def get_idle_time_value(idle_time: str):
return {'idle_time': idle_time}
- If
idle_time = 123, the cache key will beidle_time_value:123.
Keyword Argument Example
The decorator also supports keyword arguments, making it flexible for various function signatures.
@ct_cache.cache(template_cache_key='user_cache:$user_id', field='$user_id')
def get_user_by_id(user_id: int):
# Function logic to fetch user
return {'user_id': user_id}
- If you call
get_user_by_id(user_id=42, sort_order='desc'), the cache key will beuser_cache:42.
Nested Dictionary Example
@ct_cache.cache(template_cache_key='user_cache:$user.id', field='$user.id')
def get_user(user: dict):
return user
- If
user = {'id': 01, 'name': 'User1'}, the cache key will beuser_cache:01.
Nested Object Example
class User:
def __init__(self, id, name):
self.id = id
self.name = name
@ct_cache.cache(template_cache_key='user_cache:$user.id', field='$user.id')
def get_user_obj(user: User):
return {'id': user.id, 'name': user.name}
- If
user.id = 01, the cache key will beuser_cache:01.
Deeply Nested Example
@ct_cache.cache(template_cache_key='deep_cache:$data.profile.info.id', field='$data.profile.info.id')
def get_deep(data: dict):
return data
- If
data = {'profile': {'info': {'id': 01}}}, the cache key will bedeep_cache:01.
Static Key Example
@ct_cache.cache(template_cache_key='static_key')
def get_static():
return {'result': 1}
- The cache key will always be
static_key.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sample_test_lib-0.5.0.tar.gz.
File metadata
- Download URL: sample_test_lib-0.5.0.tar.gz
- Upload date:
- Size: 7.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1d8210ab3600075755cd88fee8ba72014230cb5e1bbb85a22152ffb522a63b7
|
|
| MD5 |
95d95c71d8892c35aee909b396f590f1
|
|
| BLAKE2b-256 |
ac0a8ca33b63f6ea2b0627dd5ae3e5cf8bed6cbc0a2b3606d31e30f29a69b83f
|
File details
Details for the file sample_test_lib-0.5.0-py3-none-any.whl.
File metadata
- Download URL: sample_test_lib-0.5.0-py3-none-any.whl
- Upload date:
- Size: 8.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7d8d5c658723b5313ab1f1546204dd1e776e34b3114282fc8e945de5800498f
|
|
| MD5 |
305534a7191fcb81d06c0285147852f4
|
|
| BLAKE2b-256 |
e70d6c43eba3d5e98f835e3da9076b53b90f475bd081276cde34e53e20f4c5fb
|