Skip to main content

No project description provided

Project description

django-cache-mock

Use in-process mocks to avoid setting up external caches for Django during development.

Django has a limited built-in django.core.cache.backends.locmem.LocMemCache, to help development, but Django do some magic to always give you a working connection.

I have some reasons to abuse Django cache this way:

  • Thread safety: Django spin one connection per thread to avoid issues with thread unsafe drivers.
  • Good defaults: Django run connections with good defaults.
  • Connection reuse: Django already have a pool running and in most cases it is better to use it.

Install

$ pip install django-cache-mock

Also, it is possible to install with the backends you want.

For mockcache, it installs mockcache3, a fork from original package because it doesn´t work for new versions of Python.

$ pip install django-cache-mock[mockcache]
$ pip install django-cache-mock[fakeredis]
$ pip install django-cache-mock[redislite]

How to use

In your Django settings you already have CACHES defined.

For memcached, it's something like that:

CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.memcached.PyMemcacheCache",
        "LOCATION": os.getenv("MEMCACHED_HOSTS"),
        "OPTIONS": {
            "no_delay": True,
            "ignore_exc": True,
            "max_pool_size": 4,
            "use_pooling": True,
        },
    },
}

Just make a call to django_cache_mock.patch to replace with a mock backend.

The lib will patch only when cache LOCATION is not defined.

import django_cache_mock

if DEBUG:  # Apply it only in debug mode to be extra careful.
    django_cache_mock.patch(CACHES, "default", "mockcache")

This patch replace cache with a mocked one. For mockcache,

Custom cache options

The patch function accepts custom params. It can be used to override mock behaviours, like the db file redislite will use, defined by LOCATION:

django_cache_mock.patch(CACHES, "default", "redislite", {"LOCATION": "data/redis.db"})

Redis backends

Redis has several options to run. This lib implements fakeredis and redislite, with django.core.cache or django-redis.

By default, the lib try to maintain the same behavior of the original implementation. If config uses django-redis, when you set use backend fakeredis, it will use it as fakeredis[django-redis].

# Force to use django-redis. It is not necessary, the lib already try to use
# django-redis if cache uses `django_redis.cache.cache.RedisCache`.
django_cache_mock.patch(CACHES, "redis", "fakeredis[django-redis]")
django_cache_mock.patch(CACHES, "redis", "redislite[django-redis]")

How to access connections

To get Django memcached and redis clients from cache:

from django.core.cache import caches

def give_me_memcached():
    return caches["memcached"]._cache

# for django.core.cache.backends.redis
def give_me_primary_redis():
    return caches["redis"]._cache.get_client(write=True)

def give_me_secondary_redis():
    return caches["redis"]._cache.get_client()

# for django-redis
def give_me_primary_redis():
    return caches["redis"].client.get_client()

def give_me_secondary_redis():
    return caches["redis"].client.get_client(write=False)

# Yes, django and django-redis have different write flag defaults.

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_cache_mock-0.0.3.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

django_cache_mock-0.0.3-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

Details for the file django_cache_mock-0.0.3.tar.gz.

File metadata

  • Download URL: django_cache_mock-0.0.3.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.11.0 Linux/5.15.0-1030-azure

File hashes

Hashes for django_cache_mock-0.0.3.tar.gz
Algorithm Hash digest
SHA256 cadcaf6f83db551dbe19be503012f6a3c77035d69d709d377806c8d60340feef
MD5 ce936cc49b1dfc6e8543bef70bc10a92
BLAKE2b-256 672c4551dcf3478879496a333641573f2706301a56c2d5a6da98b1c8ef5570c4

See more details on using hashes here.

File details

Details for the file django_cache_mock-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: django_cache_mock-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 6.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.11.0 Linux/5.15.0-1030-azure

File hashes

Hashes for django_cache_mock-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 7bf0a8fde24452bf91fc60590ec68f4ce8c506275a6a59b1c18c91464845a954
MD5 1edf8381ad18e119d66f98bece1037ba
BLAKE2b-256 9909f45db26ca9c272ef1c53b6c9b9e1413a484bc9db25781cf44f0dced8fe7f

See more details on using hashes here.

Supported by

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