Easy value caching on Django.
Project description
django-cached-fields
Cached fields for Django
Usage
Defining a basic Cached Field
The first argument of the CachedField constructor can be the name of a method on the class.
This method only works with field triggers as signal triggers will require a CachedFieldSignalHandler
.
class Invoice(models.Model):
name = models.TextField(null=False)
quantity = models.IntegerField()
amount = models.IntegerField(null=False)
def calc_total(self):
self.total = self.quantity * self.amount
total = CachedIntegerField(
'calc_total',
field_triggers=[
'amount',
],
timeout=timedelta(seconds=5),
)
If you would like your cached field's callback to be triggered by a signal, you will need to create a signal handler.
class InvoiceSignalHandler(CachedFieldSignalHandler):
def calc_total(instance):
instance.total = instance.quantity * instance.amount
@for_class('Customer')
def cutomer_total(customer):
return invoice.quantity * invoice.amount
@for_class('Supplier')
def supplier_total(supplier):
invoice = supplier.invoice.last()
return invoice.quantity * invoice.amount
If you would like to offload task processing to Celery, django-cached-fields can handle that for you automatically.
settings.py
CACHED_FIELDS_CELERY_ENABLED = True
CACHED_FIELDS_CELERY = {
"queue": "default"
}
If you'd like to offload a recalculation to a specific queue, you can do this.
class InvoiceSignalHandler(CachedFieldSignalHandler):
def calc_total(instance):
instance.total = instance.quantity * instance.amount
@for_class('Customer', queue="low_priority")
def cutomer_total(customer):
invoices = customer.invoices.all()
for i in invoices:
i.cache_toolkit.update_cache('total', i.quantity * i.amount)
i.save()
@for_class('Supplier')
def supplier_total(supplier):
invoice = supplier.invoice.last()
invoice.total = invoice.quantity * invoice.amount
Force Recalculation
ym = YourModel.objects.create(name="fart", amount=6)
ym.cache_toolchain.refresh_field('total')
Get last time the cache was updated
For when you need to run queries ```python In [2]: print(ym.total_last_update) Out[2]: datetime.datetime(2019,10,30,4,30,54)
In [3]: YourModel.objcts.filter(total_last_update__date__gte=date(2019,10,1)).exists() Out[3]: True
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
File details
Details for the file django-cached-fields-0.1.2.tar.gz
.
File metadata
- Download URL: django-cached-fields-0.1.2.tar.gz
- Upload date:
- Size: 6.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.1.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.6.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
d9a582db63377e5a05d4669631218e1401221255175789c8836d1c07992330b8
|
|
MD5 |
bf943c080745f89be6511c841fe415cb
|
|
BLAKE2b-256 |
313c5667e91ee421f725d89e8d8b668783c1081e820a93bdbf11d9311ce1c4f5
|
File details
Details for the file django_cached_fields-0.1.2-py3-none-any.whl
.
File metadata
- Download URL: django_cached_fields-0.1.2-py3-none-any.whl
- Upload date:
- Size: 7.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.1.0 requests-toolbelt/0.9.1 tqdm/4.42.0 CPython/3.6.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
e370f8e573d32e27f535ec8d996c0845f75914fd6f2f3bc518f4589037add528
|
|
MD5 |
8bc0b1e9e62263a2ddb7f7930116c7eb
|
|
BLAKE2b-256 |
bb6a7d2053192d08d4e34aaeb0ad4c9f5d6590cd1b333c805195cec28034ca21
|