Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-cached-fields-0.1.2.tar.gz (6.8 kB view details)

Uploaded Source

Built Distribution

django_cached_fields-0.1.2-py3-none-any.whl (7.0 kB view details)

Uploaded Python 3

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

Hashes for django-cached-fields-0.1.2.tar.gz
Algorithm Hash digest
SHA256 d9a582db63377e5a05d4669631218e1401221255175789c8836d1c07992330b8
MD5 bf943c080745f89be6511c841fe415cb
BLAKE2b-256 313c5667e91ee421f725d89e8d8b668783c1081e820a93bdbf11d9311ce1c4f5

See more details on using hashes here.

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

Hashes for django_cached_fields-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e370f8e573d32e27f535ec8d996c0845f75914fd6f2f3bc518f4589037add528
MD5 8bc0b1e9e62263a2ddb7f7930116c7eb
BLAKE2b-256 bb6a7d2053192d08d4e34aaeb0ad4c9f5d6590cd1b333c805195cec28034ca21

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page