Skip to content

Commit

Permalink
CacheRegion.configure() accepts a datetime.timedelta object for 'expi…
Browse files Browse the repository at this point in the history
…ration_time', and rejects non-number, non-timedelta objects
  • Loading branch information
ijl committed May 3, 2013
1 parent 8c0998f commit 84aae5e
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 3 deletions.
12 changes: 10 additions & 2 deletions dogpile/cache/region.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
from .api import NO_VALUE, CachedValue
from .proxy import ProxyBackend
from . import compat
import time
import time, datetime
from numbers import Number
from functools import wraps
import threading

Expand Down Expand Up @@ -207,7 +208,14 @@ def configure(self, backend,
)
else:
self.backend = backend_cls(arguments or {})
self.expiration_time = expiration_time

if not expiration_time or isinstance(expiration_time, Number):
self.expiration_time = expiration_time
elif isinstance(expiration_time, datetime.timedelta):
self.expiration_time = int(expiration_time.total_seconds())
else:
raise Exception('expiration_time is not a number or timedelta.')

if self.key_mangler is None:
self.key_mangler = self.backend.key_mangler

Expand Down
19 changes: 18 additions & 1 deletion tests/cache/test_region.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from dogpile.cache import make_region, register_backend, CacheRegion, util
from dogpile.cache.proxy import ProxyBackend
from . import eq_, is_, assert_raises_message, io, configparser
import time
import time, datetime
import itertools
from collections import defaultdict
import operator
Expand Down Expand Up @@ -90,6 +90,23 @@ def test_instance_from_config_string(self):
eq_(my_region.backend.arguments, {'url': '127.0.0.1',
'dogpile_lockfile':False, 'xyz':None})

def test_datetime_expiration_time(self):
my_region = make_region()
my_region.configure(
backend='mock',
expiration_time=datetime.timedelta(days=1, hours=8)
)
eq_(my_region.expiration_time, 32*60*60)

def test_reject_invalid_expiration_time(self):
my_region = make_region()

assert_raises_message(
Exception,
"expiration_time is not a number or timedelta.",
my_region.configure, 'mock', 'one hour'
)

def test_key_mangler_argument(self):
reg = self._region(init_args={"key_mangler":key_mangler})
assert reg.key_mangler is key_mangler
Expand Down

0 comments on commit 84aae5e

Please sign in to comment.