Skip to content

Commit

Permalink
Merge pull request #210 from terrycain/master
Browse files Browse the repository at this point in the history
Added option to pass in the factory to a decorated class
  • Loading branch information
spulec committed Nov 4, 2017
2 parents 385a78d + 503f6e4 commit 7ad16a5
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 5 deletions.
7 changes: 7 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,13 @@ Freezegun allows moving time to specific dates.
frozen_datetime.move_to(initial_datetime)
assert frozen_datetime() == initial_datetime
@freeze_time("2012-01-14", as_arg=True)
def test(frozen_time):
assert datetime.datetime.now() == datetime.datetime(2012, 1, 14)
frozen_time.move_to("2014-02-12")
assert datetime.datetime.now() == datetime.datetime(2014, 2, 12)
Parameter for ``move_to`` can be any valid ``freeze_time`` date (string, date, datetime).


Expand Down
14 changes: 9 additions & 5 deletions freezegun/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -305,14 +305,15 @@ def move_to(self, target_datetime):

class _freeze_time(object):

def __init__(self, time_to_freeze_str, tz_offset, ignore, tick):
def __init__(self, time_to_freeze_str, tz_offset, ignore, tick, as_arg):

self.time_to_freeze = _parse_time_to_freeze(time_to_freeze_str)
self.tz_offset = tz_offset
self.ignore = tuple(ignore)
self.tick = tick
self.undo_changes = []
self.modules_at_start = set()
self.as_arg = as_arg

def __call__(self, func):
if inspect.isclass(func):
Expand Down Expand Up @@ -496,8 +497,11 @@ def stop(self):

def decorate_callable(self, func):
def wrapper(*args, **kwargs):
with self:
result = func(*args, **kwargs)
with self as time_factory:
if self.as_arg:
result = func(time_factory, *args, **kwargs)
else:
result = func(*args, **kwargs)
return result
functools.update_wrapper(wrapper, func)

Expand All @@ -508,7 +512,7 @@ def wrapper(*args, **kwargs):
return wrapper


def freeze_time(time_to_freeze=None, tz_offset=0, ignore=None, tick=False):
def freeze_time(time_to_freeze=None, tz_offset=0, ignore=None, tick=False, as_arg=False):
# Python3 doesn't have basestring, but it does have str.
try:
string_type = basestring
Expand All @@ -534,7 +538,7 @@ def freeze_time(time_to_freeze=None, tz_offset=0, ignore=None, tick=False):
ignore.append('django.utils.six.moves')
ignore.append('threading')
ignore.append('Queue')
return _freeze_time(time_to_freeze, tz_offset, ignore, tick)
return _freeze_time(time_to_freeze, tz_offset, ignore, tick, as_arg)


# Setup adapters for sqlite
Expand Down

0 comments on commit 7ad16a5

Please sign in to comment.