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

Commit

Permalink
Fix datetime/timezone issues
Browse files Browse the repository at this point in the history
  • Loading branch information
christippett committed Jun 22, 2019
1 parent 31ebae7 commit eebea57
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 13 deletions.
9 changes: 3 additions & 6 deletions src/django_firebase_cache/firestore.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,7 @@
from datetime import datetime
from typing import Iterable

from django.conf import settings
from django.core.cache.backends.base import DEFAULT_TIMEOUT, BaseCache, CacheKeyWarning
from django.utils import timezone
from google.cloud import firestore
from google.cloud.firestore import (
CollectionReference,
Expand All @@ -35,12 +33,11 @@ def db(self) -> CollectionReference:
return self._db

def _base_set(self, mode, key, value, timeout=DEFAULT_TIMEOUT):
timeout = self.get_backend_timeout(timeout)
if timeout is None:
exp = datetime.max
elif settings.USE_TZ:
exp = datetime.utcfromtimestamp(timeout)
else:
exp = datetime.fromtimestamp(timeout)
exp = datetime.utcfromtimestamp(timeout)
exp = exp.replace(microsecond=0)

pickled = pickle.dumps(value, self.pickle_protocol)
Expand Down Expand Up @@ -87,7 +84,7 @@ def get(self, key, default=None, version=None):
return default
data = doc.to_dict()
expires = data.get("expires")
if expires >= timezone.now():
if expires >= datetime.utcnow():
value = data.get("value")
value = pickle.loads(base64.b64decode(value.encode()))
return value
Expand Down
11 changes: 4 additions & 7 deletions src/django_firebase_cache/realtime_database.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@
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
from firebase_admin import db
from firebase_admin.db import Reference

Expand Down Expand Up @@ -40,20 +38,19 @@ def db(self) -> Reference:
return self._db

def _set_data(self, mode, key, value, timeout=DEFAULT_TIMEOUT):
timeout = self.get_backend_timeout(timeout)
if timeout is None:
exp = datetime.max
elif settings.USE_TZ:
exp = datetime.utcfromtimestamp(timeout)
else:
exp = datetime.fromtimestamp(timeout)
exp = datetime.utcfromtimestamp(timeout)
exp = exp.replace(microsecond=0)

pickled = pickle.dumps(value, self.pickle_protocol)
b64encoded = base64.b64encode(pickled).decode("utf-8")
if mode == "touch":
data = {"expires": exp}
else:
data = {"key": key, "value": b64encoded, "expires": exp.timestamp()}
data = {"cache_key": key, "value": b64encoded, "expires": exp.timestamp()}
return data

def make_key(self, key, version=None):
Expand Down Expand Up @@ -85,7 +82,7 @@ def get(self, key, default=None, version=None):
data = self.db.child(key).get()
if data:
expires = datetime.utcfromtimestamp(data.get("expires", 0))
if expires >= timezone.now():
if expires >= datetime.utcnow():
value = data.get("value")
return pickle.loads(base64.b64decode(value.encode()))
else:
Expand Down

0 comments on commit eebea57

Please sign in to comment.