django-constance/constance/backends/memory.py
Misha Behersky 9eccfe0386
Add memory backend (#394)
* Add simple backend

* Add test case for simple backend

* Add tests for mget backend method

* Fix redis mock mget implementation

* Make sure memory backend is thread safe

* Add docs section for memory backend

* Add test usage examples to docs

* Update docs for memory backend in testing

* Share memory storage between threads
2020-06-10 19:49:42 +02:00

38 lines
958 B
Python

from threading import Lock
from . import Backend
from .. import signals, config
class MemoryBackend(Backend):
"""
Simple in-memory backend that should be mostly used for testing purposes
"""
_storage = {}
_lock = Lock()
def __init__(self):
super().__init__()
def get(self, key):
with self._lock:
return self._storage.get(key)
def mget(self, keys):
if not keys:
return
result = []
with self._lock:
for key in keys:
value = self._storage.get(key)
if value is not None:
result.append((key, value))
return result
def set(self, key, value):
with self._lock:
old_value = self._storage.get(key)
self._storage[key] = value
signals.config_updated.send(
sender=config, key=key, old_value=old_value, new_value=value
)