Skip to content
This repository has been archived by the owner on Jul 14, 2021. It is now read-only.

Commit

Permalink
md5 hash key for Realtime DB
Browse files Browse the repository at this point in the history
  • Loading branch information
christippett committed Jun 22, 2019
1 parent 4c4d07b commit 195ae06
Showing 1 changed file with 13 additions and 8 deletions.
21 changes: 13 additions & 8 deletions src/django_firebase_cache/realtime_database.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
"Firestore cache backend"
import base64
import hashlib
import pickle
import re
import warnings
from datetime import datetime

import firebase_admin
from django.conf import settings
from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache, CacheKeyWarning
from django.utils import timezone
import firebase_admin
from firebase_admin import db
from firebase_admin.db import Reference


FIREBASE_APP = None


Expand All @@ -39,7 +39,7 @@ def db(self) -> Reference:

return self._db

def _set_data(self, mode, value, timeout=DEFAULT_TIMEOUT):
def _set_data(self, mode, key, value, timeout=DEFAULT_TIMEOUT):
if timeout is None:
exp = datetime.max
elif settings.USE_TZ:
Expand All @@ -53,9 +53,14 @@ def _set_data(self, mode, value, timeout=DEFAULT_TIMEOUT):
if mode == "touch":
data = {"expires": exp}
else:
data = {"value": b64encoded, "expires": exp.timestamp()}
data = {"key": key, "value": b64encoded, "expires": exp.timestamp()}
return data

def make_key(self, key, version=None):
key = super().make_key(key, version)
md5_key = hashlib.md5(key.encode("utf-8")).hexdigest()
return md5_key

def validate_key(self, key):
if re.search(r"[\.\$\#\[\]\/\n]", key):
warnings.warn(
Expand All @@ -70,7 +75,7 @@ def validate_key(self, key):
def add(self, key, value, timeout=DEFAULT_TIMEOUT, version=None):
key = self.make_key(key, version=version)
self.validate_key(key)
data = self._set_data("add", None, timeout)
data = self._set_data("add", key, None, timeout)
self.db.key(key).set(data)

def get(self, key, default=None, version=None):
Expand All @@ -89,21 +94,21 @@ def get(self, key, default=None, version=None):
def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None):
key = self.make_key(key, version=version)
self.validate_key(key)
data = self._set_data("set", None, timeout)
data = self._set_data("set", key, None, timeout)
self.db.key(key).set(data)

def set_many(self, data, timeout=DEFAULT_TIMEOUT, version=None):
set_data = {}
for key, value in data.items():
key = self.make_key(key, version=version)
set_data[key] = self._set_data("set", value, timeout)
set_data[key] = self._set_data("set", key, value, timeout)
self.db.set(set_data)
return []

def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None):
key = self.make_key(key, version=version)
self.validate_key(key)
data = self._set_data("touch", None, timeout)
data = self._set_data("touch", key, None, timeout)
self.db.key(key).update(data)

def delete(self, key, version=None):
Expand Down

0 comments on commit 195ae06

Please sign in to comment.