A Django utility suite with additional features
Project description
Django Utility Suite
Description
django_utility_suite is a set of utilities to enhance Django development
Installation
You can install this package with:
pip install django-utility-suite
Or if you use Poetry:
poetry add django-utility-suite
Usage
Django Configuration
Add django_utility_suite to INSTALLED_APPS in your settings.py:
INSTALLED_APPS = [
...
'django_utility_suite',
]
Package utils
1. Performance optimization and cache management.
Using ReadOnlyViewSetMixin
This mixin provides an optimized way to handle caching in read-only views.
from django_utility_suite.api.mixins import ReadOnlyViewSetMixin
from rest_framework.viewsets import ReadOnlyModelViewSet
from .models import MyModel
from .serializers import MyModelSerializer
class MyModelViewSet(ReadOnlyViewSetMixin, ReadOnlyModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
def get_cache_key(self):
if self.action == "retrieve":
return f"mimodel-retrieve-{self.lookup_field}"
elif self.action == "list":
return f"mimodel-list"
@property
def cache_prefix(self):
return "my_model"
Using create_key_from_list (minimal if/else example)
Use create_key_from_list to cache responses under a short key generated from a hash of the list (normalized, regardless of order or duplicates). This avoids very long keys and gives deterministic cache hits; you can adjust the length with length_bytes.
Example: ["A", "b", "a"] → my_model:{list}:Q2r8y8tP (same hash as ["b","a"]).
from django_utility_suite.api.mixins import ReadOnlyViewSetMixin
from rest_framework.viewsets import ReadOnlyModelViewSet
from .models import MyModel
from .serializers import MyModelSerializer
class MyModelViewSet(ReadOnlyViewSetMixin, ReadOnlyModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
def get_cache_key(self):
params = self.request.query_params
data = getattr(self.request, "data", {})
lookup_value = self.kwargs.get(self.lookup_field, "")
if self.action == "retrieve":
# Simple scalar key for detail
return lookup_value
elif self.action == "list":
# Example: combine a scalar filter with a list-type query param (?slugs=a,b,c)
category = params.get("category", "")
slugs = (params.get("slugs") or "").split(",")
# Use an empty prefix so the mixin's cache_prefix is the only namespace
return f"list:{category}:{self.create_key_from_list(slugs, length_bytes=10, prefix='')}"
elif self.action == "search":
# Example: list-type input coming from JSON payload: {"ids": [1,2,3]}
ids = data.get("ids", [])
return f"search:{self.create_key_from_list(ids, length_bytes=10, prefix='')}"
# Default (no cache or unsupported action)
return ""
@property
def cache_prefix(self):
# Global namespace for this viewset in the cache backend
return "my_model"
Development
If you want to contribute, clone the repository and use Poetry to manage dependencies:
git clone https://github.com/yourusername/django-utility-suite.git
cd django-utility-suite
poetry install
License
This project is licensed under the MIT license.
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 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 django_utility_suite-0.1.7.tar.gz.
File metadata
- Download URL: django_utility_suite-0.1.7.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.0 CPython/3.11.13 Linux/5.15.154+
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc0f96b14e0ef5501e624f26b5cdba61f84154a5b3fd6f366df31055b696c916
|
|
| MD5 |
e8234598c5f49fb1bc01f96f8f584b1f
|
|
| BLAKE2b-256 |
e09467e2025035025ce9382a9dc720dffbaa0eeb35accf51b16d417f38f98fdd
|
File details
Details for the file django_utility_suite-0.1.7-py3-none-any.whl.
File metadata
- Download URL: django_utility_suite-0.1.7-py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.0 CPython/3.11.13 Linux/5.15.154+
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4b6cba561fa04e8a0ced6e2a9dfb732adc5c303883338843ecf70be6b28dfe1e
|
|
| MD5 |
0635ded5ef6b2de9c5fd9f865d03f664
|
|
| BLAKE2b-256 |
d3ee93d7fbabbe3277b080b0ec2dd8583a92f7fe6faa10396b37862933e8e817
|