A cacheable Django model
Project description
django cacheable model
A cacheable model for django.
- A generic way of creating cache keys from Django model fields
- Retrieve django models from cache with field values (cache on the way if cache missed)
- Retrieve all the model instances (suitable for small set of models)
See usage example below
1. Github
https://github.com/harisankar-krishna-swamy/django_cacheable_model
2. Install
pip install django_cacheable_model
3. Configuration
CACHE_SET_MANY_LIMIT
is chunk size for calls tocache.set_many
.
whenall_ins_from_cache
brings in all entries from cache, it will set each object
in chunks to control request size. Default is5
i.e if there are 10 instances of a model
from db this config will set each of the models to the cache in two groups of5
4. Usage
See samples in example_django_project
views.py and models.py.
4.1. Create a model that inherits from CacheableModel
class Question(CacheableModel):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(CacheableModel):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
4.2. Use cache operations from django_cacheable_model.utils
from django_cacheable_model.utils import all_ins_from_cache, model_ins_from_cache
# Get all instances of model from cache (use for smaller set of models)
context['choices'] = all_ins_from_cache(Choice)
# Get all instances with select_related and order_by
choices = all_ins_from_cache(Choice,
select_related=('question',),
order_by_fields=('-id',))
# Get a single model. Note this method returns a list of matching objects
context['choice'] = model_ins_from_cache(Choice, {'id': 5})[-1]
5. To do
a) Example and document use of prefetch_related
b) Doc and tests for util methods
c) timeout
in documentation
6. License
Apache2 License
7. Development
7.1 Python
Python 3.10.10 is used for development. Pyenv is used for managing Python versions.
Install dev requirements in dev-requirements.txt
# in root folder
# Set python version for project folder using pyenv
pyenv local 3.10.10
# Create virtual environment
python3 -m venv .venv
# Activate the virtual environment
source .venv/bin/activate
# Install all packages
pip install -r dev-requirements.txt
pre-commit install
7.2 IDE (PyCharm) setup
Set Python interpreter to the virtual env created
Set .venv
folder as excluded in Pycharm
Set src
folder as source root
For test runs from IDE set src
as working directory
7.3 Test
- Start memcached container for caching
cd src/tests/containers
# pull container and
docker-compose pull
docker-compose up -d
# Check container is running
docker ps
- Run tests
cd src
pytest
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Hashes for django_cacheable_model-1.0.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 137fc391e50feab0cd5151cbe9620a8de45a2eb6fd8d59ebf22af28bd213993d |
|
MD5 | 994a69bbed2796f9fa9305cf80bdf72f |
|
BLAKE2b-256 | 1b8f2e5b6fc40f3434e5ee34f089073ca79554c7ec9c19b22d79fd28c53a96c7 |