Hello community,

here is the log from the commit of package python-freezegun for 
openSUSE:Factory checked in at 2019-07-05 13:47:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-freezegun (Old)
 and      /work/SRC/openSUSE:Factory/.python-freezegun.new.4615 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-freezegun"

Fri Jul  5 13:47:03 2019 rev:7 rq:713090 version:0.3.12

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-freezegun/python-freezegun.changes        
2019-02-08 13:48:15.086782043 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-freezegun.new.4615/python-freezegun.changes  
    2019-07-05 13:47:05.161302287 +0200
@@ -1,0 +2,10 @@
+Tue Jul  2 18:11:23 CEST 2019 - Matej Cepl <[email protected]>
+
+- Upgrade to 0.3.12:
+  * Refactor classes to functions
+  * Ignore Selenium
+  * Move to pytest
+  * Conditionally patch time.clock (removed in 3.8)
+  * Patch time.time_ns added in Python 3.7
+
+-------------------------------------------------------------------

Old:
----
  freezegun-0.3.11.tar.gz

New:
----
  freezegun-0.3.12.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-freezegun.spec ++++++
--- /var/tmp/diff_new_pack.kBUtwp/_old  2019-07-05 13:47:06.341304107 +0200
+++ /var/tmp/diff_new_pack.kBUtwp/_new  2019-07-05 13:47:06.349304119 +0200
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-freezegun
-Version:        0.3.11
+Version:        0.3.12
 Release:        0
 Summary:        Mock time date for Python
 License:        Apache-2.0
@@ -29,6 +29,7 @@
 Patch0:         remove_dependency_on_mock.patch
 # gh#spulec/freezegun#280 Removal of nose dependency
 Patch1:         denose.patch
+BuildRequires:  %{python_module pytest}
 BuildRequires:  %{python_module python-dateutil > 2.0}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  %{python_module six}

++++++ denose.patch ++++++
++++ 1149 lines (skipped)
++++ between /work/SRC/openSUSE:Factory/python-freezegun/denose.patch
++++ and /work/SRC/openSUSE:Factory/.python-freezegun.new.4615/denose.patch

++++++ freezegun-0.3.11.tar.gz -> freezegun-0.3.12.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/CHANGELOG 
new/freezegun-0.3.12/CHANGELOG
--- old/freezegun-0.3.11/CHANGELOG      2018-10-15 05:05:22.000000000 +0200
+++ new/freezegun-0.3.12/CHANGELOG      2019-05-30 03:55:02.000000000 +0200
@@ -4,6 +4,14 @@
 Latest
 ------
 
+0.3.12
+------
+
+* Refactor classes to functions
+* Ignore Selenium
+* Move to pytest
+* Conditionally patch time.clock
+
 0.3.11
 ------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/PKG-INFO 
new/freezegun-0.3.12/PKG-INFO
--- old/freezegun-0.3.11/PKG-INFO       2018-10-15 05:09:26.000000000 +0200
+++ new/freezegun-0.3.12/PKG-INFO       2019-05-30 04:02:10.000000000 +0200
@@ -1,16 +1,16 @@
 Metadata-Version: 1.2
 Name: freezegun
-Version: 0.3.11
+Version: 0.3.12
 Summary: Let your Python tests travel through time
 Home-page: https://github.com/spulec/freezegun
 Author: Steve Pulec
 Author-email: [email protected]
 License: Apache 2.0
-Description-Content-Type: UNKNOWN
 Description: FreezeGun: Let your Python tests travel through time
         ====================================================
         
-        
+        .. image:: https://img.shields.io/pypi/v/freezegun.svg
+           :target: https://pypi.python.org/pypi/freezegun/
         .. image:: 
https://secure.travis-ci.org/spulec/freezegun.svg?branch=master
            :target: https://travis-ci.org/spulec/freezegun
         .. image:: 
https://coveralls.io/repos/spulec/freezegun/badge.svg?branch=master
@@ -141,6 +141,22 @@
             def test_nice_datetime():
                 assert datetime.datetime.now() > datetime.datetime(2020, 1, 14)
         
+        ``auto_tick_seconds`` argument
+        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+        
+        FreezeGun has an additional ``auto_tick_seconds`` argument which will 
autoincrement the
+        value every time by the given amount from the start value. This is 
alternative to the default
+        parameters which will keep time stopped. Note that given 
``auto_tick_seconds`` the ``tick`` parameter will be ignored.
+        
+        .. code-block:: python
+        
+            @freeze_time("Jan 14th, 2020", auto_tick_seconds=15)
+            def test_nice_datetime():
+                first_time = datetime.datetime.now()
+                auto_incremented_time = datetime.datetime.now()
+                assert first_time + datetime.timedelta(seconds=15) == 
auto_incremented_time
+        
+        
         Manual ticks
         ~~~~~~~~~~~~
         
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/README.rst 
new/freezegun-0.3.12/README.rst
--- old/freezegun-0.3.11/README.rst     2018-10-15 04:31:36.000000000 +0200
+++ new/freezegun-0.3.12/README.rst     2019-05-30 04:02:08.000000000 +0200
@@ -1,7 +1,8 @@
 FreezeGun: Let your Python tests travel through time
 ====================================================
 
-
+.. image:: https://img.shields.io/pypi/v/freezegun.svg
+   :target: https://pypi.python.org/pypi/freezegun/
 .. image:: https://secure.travis-ci.org/spulec/freezegun.svg?branch=master
    :target: https://travis-ci.org/spulec/freezegun
 .. image:: https://coveralls.io/repos/spulec/freezegun/badge.svg?branch=master
@@ -132,6 +133,22 @@
     def test_nice_datetime():
         assert datetime.datetime.now() > datetime.datetime(2020, 1, 14)
 
+``auto_tick_seconds`` argument
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+FreezeGun has an additional ``auto_tick_seconds`` argument which will 
autoincrement the
+value every time by the given amount from the start value. This is alternative 
to the default
+parameters which will keep time stopped. Note that given ``auto_tick_seconds`` 
the ``tick`` parameter will be ignored.
+
+.. code-block:: python
+
+    @freeze_time("Jan 14th, 2020", auto_tick_seconds=15)
+    def test_nice_datetime():
+        first_time = datetime.datetime.now()
+        auto_incremented_time = datetime.datetime.now()
+        assert first_time + datetime.timedelta(seconds=15) == 
auto_incremented_time
+
+
 Manual ticks
 ~~~~~~~~~~~~
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/freezegun/__init__.py 
new/freezegun-0.3.12/freezegun/__init__.py
--- old/freezegun-0.3.11/freezegun/__init__.py  2018-10-15 05:05:33.000000000 
+0200
+++ new/freezegun-0.3.12/freezegun/__init__.py  2019-05-30 03:55:25.000000000 
+0200
@@ -9,7 +9,7 @@
 from .api import freeze_time
 
 __title__ = 'freezegun'
-__version__ = '0.3.11'
+__version__ = '0.3.12'
 __author__ = 'Steve Pulec'
 __license__ = 'Apache License 2.0'
 __copyright__ = 'Copyright 2012 Steve Pulec'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/freezegun/api.py 
new/freezegun-0.3.12/freezegun/api.py
--- old/freezegun-0.3.11/freezegun/api.py       2018-10-15 04:58:23.000000000 
+0200
+++ new/freezegun-0.3.12/freezegun/api.py       2019-05-30 03:52:31.000000000 
+0200
@@ -25,20 +25,34 @@
 real_localtime = time.localtime
 real_gmtime = time.gmtime
 real_strftime = time.strftime
-real_clock = time.clock
 real_date = datetime.date
 real_datetime = datetime.datetime
 real_date_objects = [real_time, real_localtime, real_gmtime, real_strftime, 
real_date, real_datetime]
 _real_time_object_ids = set(id(obj) for obj in real_date_objects)
 
-times_to_freeze = []
+# time.clock is deprecated and was removed in Python 3.8
+real_clock = getattr(time, 'clock', None)
+
+freeze_factories = []
 tz_offsets = []
+ignore_lists = []
+tick_flags = []
+
+# Python3 doesn't have basestring, but it does have str.
+try:
+    # noinspection PyUnresolvedReferences
+    string_type = basestring
+except NameError:
+    string_type = str
 
 try:
+    # noinspection PyUnresolvedReferences
     real_uuid_generate_time = uuid._uuid_generate_time
     uuid_generate_time_attr = '_uuid_generate_time'
 except AttributeError:
+    # noinspection PyUnresolvedReferences
     uuid._load_system_functions()
+    # noinspection PyUnresolvedReferences
     real_uuid_generate_time = uuid._generate_time_safe
     uuid_generate_time_attr = '_generate_time_safe'
 except ImportError:
@@ -46,6 +60,7 @@
     uuid_generate_time_attr = None
 
 try:
+    # noinspection PyUnresolvedReferences
     real_uuid_create = uuid._UuidCreate
 except (AttributeError, ImportError):
     real_uuid_create = None
@@ -73,7 +88,7 @@
     result = []
     try:
         module_attributes = dir(module)
-    except TypeError:
+    except (ImportError, TypeError):
         return result
     for attribute_name in module_attributes:
         try:
@@ -98,7 +113,7 @@
 def _get_module_attributes_hash(module):
     try:
         module_dir = dir(module)
-    except TypeError:
+    except (ImportError, TypeError):
         module_dir = []
     return '{0}-{1}'.format(id(module), hash(frozenset(module_dir)))
 
@@ -126,104 +141,84 @@
 )
 
 
-class BaseFakeTime(object):
-    call_stack_inspection_limit = 5
+call_stack_inspection_limit = 5
 
-    def _should_use_real_time(self):
-        if not self.call_stack_inspection_limit:
-            return False
-
-        if not self.ignore:
-            return False
-
-        frame = inspect.currentframe().f_back.f_back
-
-        for _ in range(self.call_stack_inspection_limit):
-            module_name = frame.f_globals.get('__name__')
-            if module_name and module_name.startswith(self.ignore):
-                return True
-
-            frame = frame.f_back
-            if frame is None:
-                break
 
+def _should_use_real_time():
+    if not call_stack_inspection_limit:
         return False
 
+    if not ignore_lists[-1]:
+        return False
 
-class FakeTime(BaseFakeTime):
+    frame = inspect.currentframe().f_back.f_back
 
-    def __init__(self, previous_time_function, ignore=None):
-        self.previous_time_function = previous_time_function
-        self.ignore = ignore
+    for _ in range(call_stack_inspection_limit):
+        module_name = frame.f_globals.get('__name__')
+        if module_name and module_name.startswith(ignore_lists[-1]):
+            return True
 
-    def __call__(self):
-        if self._should_use_real_time():
-            return real_time()
-        current_time = times_to_freeze[-1]()
-        return calendar.timegm(current_time.timetuple()) + 
current_time.microsecond / 1000000.0
-
-
-class FakeLocalTime(BaseFakeTime):
-    def __init__(self, previous_localtime_function=None, ignore=None):
-        self.previous_localtime_function = previous_localtime_function
-        self.ignore = ignore
-
-    def __call__(self, t=None):
-        if t is not None:
-            return real_localtime(t)
-        if self._should_use_real_time():
-            return real_localtime()
-        shifted_time = times_to_freeze[-1]() - 
datetime.timedelta(seconds=time.timezone)
-        return shifted_time.timetuple()
-
-
-class FakeGMTTime(BaseFakeTime):
-    def __init__(self, previous_gmtime_function, ignore=None):
-        self.previous_gmtime_function = previous_gmtime_function
-        self.ignore = ignore
-
-    def __call__(self, t=None):
-        if t is not None:
-            return real_gmtime(t)
-        if self._should_use_real_time():
-            return real_gmtime()
-        return times_to_freeze[-1]().timetuple()
-
-
-class FakeStrfTime(BaseFakeTime):
-    def __init__(self, previous_strftime_function, ignore=None):
-        self.previous_strftime_function = previous_strftime_function
-        self.ignore = ignore
-
-    def __call__(self, format, time_to_format=None):
-        if time_to_format is None:
-            if not self._should_use_real_time():
-                time_to_format = FakeLocalTime()()
+        frame = frame.f_back
+        if frame is None:
+            break
 
-        return real_strftime(format, time_to_format)
+    return False
 
 
-class FakeClock(BaseFakeTime):
-    def __init__(self, previous_clock_function, tick=False, ignore=None):
-        self.previous_clock_function = previous_clock_function
-        self.tick = tick
-        self.ignore = ignore
+def get_current_time():
+    return freeze_factories[-1]()
+
+
+def fake_time():
+    if _should_use_real_time():
+        return real_time()
+    current_time = get_current_time()
+    return calendar.timegm(current_time.timetuple()) + 
current_time.microsecond / 1000000.0
+
+
+def fake_localtime(t=None):
+    if t is not None:
+        return real_localtime(t)
+    if _should_use_real_time():
+        return real_localtime()
+    shifted_time = get_current_time() - 
datetime.timedelta(seconds=time.timezone)
+    return shifted_time.timetuple()
 
-    def __call__(self, *args, **kwargs):
-        if self._should_use_real_time():
+
+def fake_gmtime(t=None):
+    if t is not None:
+        return real_gmtime(t)
+    if _should_use_real_time():
+        return real_gmtime()
+    return get_current_time().timetuple()
+
+
+def fake_strftime(format, time_to_format=None):
+    if time_to_format is None:
+        if not _should_use_real_time():
+            time_to_format = fake_localtime()
+
+    if time_to_format is None:
+        return real_strftime(format)
+    else:
+        return real_strftime(format, time_to_format)
+
+if real_clock is not None:
+    def fake_clock():
+        if _should_use_real_time():
             return real_clock()
 
-        if len(times_to_freeze) == 1:
-            return 0.0 if not self.tick else self.previous_clock_function()
+        if len(freeze_factories) == 1:
+            return 0.0 if not tick_flags[-1] else real_clock()
 
-        first_frozen_time = times_to_freeze[0]()
-        last_frozen_time = times_to_freeze[-1]()
+        first_frozen_time = freeze_factories[0]()
+        last_frozen_time = get_current_time()
 
         timedelta = (last_frozen_time - first_frozen_time)
         total_seconds = timedelta.total_seconds()
 
-        if self.tick:
-            total_seconds += self.previous_clock_function()
+        if tick_flags[-1]:
+            total_seconds += real_clock()
 
         return total_seconds
 
@@ -233,6 +228,10 @@
     def __instancecheck__(self, obj):
         return isinstance(obj, real_date)
 
+    @classmethod
+    def __subclasscheck__(cls, subclass):
+        return issubclass(subclass, real_date)
+
 
 def datetime_to_fakedatetime(datetime):
     return FakeDatetime(datetime.year,
@@ -277,7 +276,7 @@
 
     @staticmethod
     def _date_to_freeze():
-        return times_to_freeze[-1]()
+        return get_current_time()
 
     @classmethod
     def _tz_offset(cls):
@@ -292,6 +291,10 @@
     def __instancecheck__(self, obj):
         return isinstance(obj, real_datetime)
 
+    @classmethod
+    def __subclasscheck__(cls, subclass):
+        return issubclass(subclass, real_datetime)
+
 
 class FakeDatetime(with_metaclass(FakeDatetimeMeta, real_datetime, FakeDate)):
     def __new__(cls, *args, **kwargs):
@@ -332,6 +335,7 @@
     @property
     def nanosecond(self):
         try:
+            # noinspection PyUnresolvedReferences
             return real_datetime.nanosecond
         except AttributeError:
             return 0
@@ -347,8 +351,8 @@
 
     @staticmethod
     def _time_to_freeze():
-        if times_to_freeze:
-            return times_to_freeze[-1]()
+        if freeze_factories:
+            return get_current_time()
 
     @classmethod
     def _tz_offset(cls):
@@ -438,6 +442,7 @@
 
     def tick(self, delta=datetime.timedelta(seconds=1)):
         if isinstance(delta, numbers.Real):
+            # noinspection PyTypeChecker
             self.time_to_freeze += datetime.timedelta(seconds=delta)
         else:
             self.time_to_freeze += delta
@@ -449,14 +454,41 @@
         self.tick(delta=delta)
 
 
+class StepTickTimeFactory(object):
+
+    def __init__(self, time_to_freeze, step_width):
+        self.time_to_freeze = time_to_freeze
+        self.step_width = step_width
+
+    def __call__(self):
+        return_time = self.time_to_freeze
+        self.tick()
+        return return_time
+
+    def tick(self, delta=None):
+        if not delta:
+            delta = datetime.timedelta(seconds=self.step_width)
+        self.time_to_freeze += delta
+
+    def update_step_width(self, step_width):
+        self.step_width = step_width
+
+    def move_to(self, target_datetime):
+        """Moves frozen date to the given ``target_datetime``"""
+        target_datetime = _parse_time_to_freeze(target_datetime)
+        delta = target_datetime - self.time_to_freeze
+        self.tick(delta=delta)
+
+
 class _freeze_time(object):
 
-    def __init__(self, time_to_freeze_str, tz_offset, ignore, tick, as_arg):
 
+    def __init__(self, time_to_freeze_str, tz_offset, ignore, tick, as_arg, 
auto_tick_seconds):
         self.time_to_freeze = _parse_time_to_freeze(time_to_freeze_str)
         self.tz_offset = _parse_tz_offset(tz_offset)
         self.ignore = tuple(ignore)
         self.tick = tick
+        self.auto_tick_seconds = auto_tick_seconds
         self.undo_changes = []
         self.modules_at_start = set()
         self.as_arg = as_arg
@@ -477,12 +509,14 @@
             orig_setUpClass = getattr(klass, 'setUpClass', None)
             orig_tearDownClass = getattr(klass, 'tearDownClass', None)
 
+            # noinspection PyDecorator
             @classmethod
             def setUpClass(cls):
                 self.start()
                 if orig_setUpClass is not None:
                     orig_setUpClass()
 
+            # noinspection PyDecorator
             @classmethod
             def tearDownClass(cls):
                 if orig_tearDownClass is not None:
@@ -522,33 +556,31 @@
         self.stop()
 
     def start(self):
-        if self.tick:
-            time_to_freeze = TickingDateTimeFactory(self.time_to_freeze, 
real_datetime.now())
+
+        if self.auto_tick_seconds:
+            freeze_factory = StepTickTimeFactory(self.time_to_freeze, 
self.auto_tick_seconds)
+        elif self.tick:
+            freeze_factory = TickingDateTimeFactory(self.time_to_freeze, 
real_datetime.now())
         else:
-            time_to_freeze = FrozenDateTimeFactory(self.time_to_freeze)
+            freeze_factory = FrozenDateTimeFactory(self.time_to_freeze)
 
-        # Change the modules
-        is_already_started = len(times_to_freeze) > 0
-        times_to_freeze.append(time_to_freeze)
+        is_already_started = len(freeze_factories) > 0
+        freeze_factories.append(freeze_factory)
         tz_offsets.append(self.tz_offset)
+        ignore_lists.append(self.ignore)
+        tick_flags.append(self.tick)
 
         if is_already_started:
-            return time_to_freeze
+            return freeze_factory
 
+        # Change the modules
         datetime.datetime = FakeDatetime
         datetime.date = FakeDate
 
-        fake_time = FakeTime(time.time, ignore=self.ignore)
-        fake_localtime = FakeLocalTime(time.localtime, ignore=self.ignore)
-        fake_gmtime = FakeGMTTime(time.gmtime, ignore=self.ignore)
-        fake_strftime = FakeStrfTime(time.strftime, ignore=self.ignore)
-        fake_clock = FakeClock(time.clock, tick=self.tick, ignore=self.ignore)
-
         time.time = fake_time
         time.localtime = fake_localtime
         time.gmtime = fake_gmtime
         time.strftime = fake_strftime
-        time.clock = fake_clock
         if uuid_generate_time_attr:
             setattr(uuid, uuid_generate_time_attr, None)
         uuid._UuidCreate = None
@@ -559,17 +591,22 @@
 
         # Change any place where the module had already been imported
         to_patch = [
-            ('real_date', real_date, 'FakeDate', FakeDate),
-            ('real_datetime', real_datetime, 'FakeDatetime', FakeDatetime),
-            ('real_gmtime', real_gmtime, 'FakeGMTTime', fake_gmtime),
-            ('real_localtime', real_localtime, 'FakeLocalTime', 
fake_localtime),
-            ('real_strftime', real_strftime, 'FakeStrfTime', fake_strftime),
-            ('real_time', real_time, 'FakeTime', fake_time),
-            ('real_clock', real_clock, 'FakeClock', fake_clock),
+            ('real_date', real_date, FakeDate),
+            ('real_datetime', real_datetime, FakeDatetime),
+            ('real_gmtime', real_gmtime, fake_gmtime),
+            ('real_localtime', real_localtime, fake_localtime),
+            ('real_strftime', real_strftime, fake_strftime),
+            ('real_time', real_time, fake_time),
         ]
-        self.fake_names = tuple(fake_name for real_name, real, fake_name, fake 
in to_patch)
-        self.reals = dict((id(fake), real) for real_name, real, fake_name, 
fake in to_patch)
-        fakes = dict((id(real), fake) for real_name, real, fake_name, fake in 
to_patch)
+
+        if real_clock is not None:
+            # time.clock is deprecated and was removed in Python 3.8
+            time.clock = fake_clock
+            to_patch.append(('real_clock', real_clock, fake_clock))
+
+        self.fake_names = tuple(fake.__name__ for real_name, real, fake in 
to_patch)
+        self.reals = dict((id(fake), real) for real_name, real, fake in 
to_patch)
+        fakes = dict((id(real), fake) for real_name, real, fake in to_patch)
         add_change = self.undo_changes.append
 
         # Save the current loaded modules
@@ -593,13 +630,15 @@
                         setattr(module, attribute_name, fake)
                         add_change((module, attribute_name, attribute_value))
 
-        return time_to_freeze
+        return freeze_factory
 
     def stop(self):
-        times_to_freeze.pop()
+        freeze_factories.pop()
+        ignore_lists.pop()
+        tick_flags.pop()
         tz_offsets.pop()
 
-        if not times_to_freeze:
+        if not freeze_factories:
             datetime.datetime = real_datetime
             datetime.date = real_date
             copyreg.dispatch_table.pop(real_datetime)
@@ -635,11 +674,11 @@
                         if real:
                             setattr(module, module_attribute, real)
 
-            time.time = time.time.previous_time_function
-            time.gmtime = time.gmtime.previous_gmtime_function
-            time.localtime = time.localtime.previous_localtime_function
-            time.strftime = time.strftime.previous_strftime_function
-            time.clock = time.clock.previous_clock_function
+            time.time = real_time
+            time.gmtime = real_gmtime
+            time.localtime = real_localtime
+            time.strftime = real_strftime
+            time.clock = real_clock
 
             if uuid_generate_time_attr:
                 setattr(uuid, uuid_generate_time_attr, real_uuid_generate_time)
@@ -666,13 +705,7 @@
         return wrapper
 
 
-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
-    except NameError:
-        string_type = str
-
+def freeze_time(time_to_freeze=None, tz_offset=0, ignore=None, tick=False, 
as_arg=False, auto_tick_seconds=0):
     acceptable_times = (type(None), string_type, datetime.date, 
datetime.timedelta,
              types.FunctionType, types.GeneratorType)
 
@@ -687,10 +720,10 @@
         raise SystemError('Calling freeze_time with tick=True is only 
compatible with CPython')
 
     if isinstance(time_to_freeze, types.FunctionType):
-        return freeze_time(time_to_freeze(), tz_offset, ignore, tick)
+        return freeze_time(time_to_freeze(), tz_offset, ignore, tick, 
auto_tick_seconds)
 
     if isinstance(time_to_freeze, types.GeneratorType):
-        return freeze_time(next(time_to_freeze), tz_offset, ignore, tick)
+        return freeze_time(next(time_to_freeze), tz_offset, ignore, tick, 
auto_tick_seconds)
 
     if MayaDT is not None and isinstance(time_to_freeze, MayaDT):
         return freeze_time(time_to_freeze.datetime(), tz_offset, ignore,
@@ -705,11 +738,16 @@
     ignore.append('google.gax')
     ignore.append('threading')
     ignore.append('Queue')
-    return _freeze_time(time_to_freeze, tz_offset, ignore, tick, as_arg)
+    ignore.append('selenium')
+    ignore.append('_pytest.terminal.')
+    ignore.append('_pytest.runner.')
+    
+    return _freeze_time(time_to_freeze, tz_offset, ignore, tick, as_arg, 
auto_tick_seconds)
 
 
 # Setup adapters for sqlite
 try:
+    # noinspection PyUnresolvedReferences
     import sqlite3
 except ImportError:
     # Some systems have trouble with this
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/freezegun.egg-info/PKG-INFO 
new/freezegun-0.3.12/freezegun.egg-info/PKG-INFO
--- old/freezegun-0.3.11/freezegun.egg-info/PKG-INFO    2018-10-15 
05:09:26.000000000 +0200
+++ new/freezegun-0.3.12/freezegun.egg-info/PKG-INFO    2019-05-30 
04:02:10.000000000 +0200
@@ -1,16 +1,16 @@
 Metadata-Version: 1.2
 Name: freezegun
-Version: 0.3.11
+Version: 0.3.12
 Summary: Let your Python tests travel through time
 Home-page: https://github.com/spulec/freezegun
 Author: Steve Pulec
 Author-email: [email protected]
 License: Apache 2.0
-Description-Content-Type: UNKNOWN
 Description: FreezeGun: Let your Python tests travel through time
         ====================================================
         
-        
+        .. image:: https://img.shields.io/pypi/v/freezegun.svg
+           :target: https://pypi.python.org/pypi/freezegun/
         .. image:: 
https://secure.travis-ci.org/spulec/freezegun.svg?branch=master
            :target: https://travis-ci.org/spulec/freezegun
         .. image:: 
https://coveralls.io/repos/spulec/freezegun/badge.svg?branch=master
@@ -141,6 +141,22 @@
             def test_nice_datetime():
                 assert datetime.datetime.now() > datetime.datetime(2020, 1, 14)
         
+        ``auto_tick_seconds`` argument
+        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+        
+        FreezeGun has an additional ``auto_tick_seconds`` argument which will 
autoincrement the
+        value every time by the given amount from the start value. This is 
alternative to the default
+        parameters which will keep time stopped. Note that given 
``auto_tick_seconds`` the ``tick`` parameter will be ignored.
+        
+        .. code-block:: python
+        
+            @freeze_time("Jan 14th, 2020", auto_tick_seconds=15)
+            def test_nice_datetime():
+                first_time = datetime.datetime.now()
+                auto_incremented_time = datetime.datetime.now()
+                assert first_time + datetime.timedelta(seconds=15) == 
auto_incremented_time
+        
+        
         Manual ticks
         ~~~~~~~~~~~~
         
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/freezegun.egg-info/SOURCES.txt 
new/freezegun-0.3.12/freezegun.egg-info/SOURCES.txt
--- old/freezegun-0.3.11/freezegun.egg-info/SOURCES.txt 2018-10-15 
05:09:26.000000000 +0200
+++ new/freezegun-0.3.12/freezegun.egg-info/SOURCES.txt 2019-05-30 
04:02:10.000000000 +0200
@@ -19,6 +19,7 @@
 tests/test_asyncio.py
 tests/test_class_import.py
 tests/test_datetimes.py
+tests/test_errors.py
 tests/test_import_alias.py
 tests/test_operations.py
 tests/test_pickle.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/setup.py 
new/freezegun-0.3.12/setup.py
--- old/freezegun-0.3.11/setup.py       2018-10-15 05:05:29.000000000 +0200
+++ new/freezegun-0.3.12/setup.py       2019-05-30 04:01:14.000000000 +0200
@@ -18,7 +18,7 @@
 
 setup(
     name='freezegun',
-    version='0.3.11',
+    version='0.3.12',
     description='Let your Python tests travel through time',
     long_description=readme,
     author='Steve Pulec',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/tests/another_module.py 
new/freezegun-0.3.12/tests/another_module.py
--- old/freezegun-0.3.11/tests/another_module.py        2018-03-06 
01:33:10.000000000 +0100
+++ new/freezegun-0.3.12/tests/another_module.py        2019-05-30 
03:52:31.000000000 +0200
@@ -4,10 +4,10 @@
 from freezegun.api import (
     FakeDatetime,
     FakeDate,
-    FakeTime,
-    FakeLocalTime,
-    FakeGMTTime,
-    FakeStrfTime,
+    fake_time,
+    fake_localtime,
+    fake_gmtime,
+    fake_strftime,
 )
 
 
@@ -48,16 +48,16 @@
 
 
 def get_fake_time():
-    return FakeTime
+    return fake_time
 
 
 def get_fake_localtime():
-    return FakeLocalTime
+    return fake_localtime
 
 
 def get_fake_gmtime():
-    return FakeGMTTime
+    return fake_gmtime
 
 
 def get_fake_strftime():
-    return FakeStrfTime
+    return fake_strftime
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/tests/test_asyncio.py 
new/freezegun-0.3.12/tests/test_asyncio.py
--- old/freezegun-0.3.11/tests/test_asyncio.py  2018-03-06 03:30:32.000000000 
+0100
+++ new/freezegun-0.3.12/tests/test_asyncio.py  2019-05-30 03:52:31.000000000 
+0200
@@ -1,7 +1,7 @@
 import datetime
 from textwrap import dedent
+from unittest import SkipTest
 
-from nose.plugins import skip
 
 from freezegun import freeze_time
 
@@ -13,7 +13,7 @@
 
 def test_time_freeze_coroutine():
     if not asyncio:
-        raise skip.SkipTest('asyncio required')
+        raise SkipTest('asyncio required')
     @asyncio.coroutine
     @freeze_time('1970-01-01')
     def frozen_coroutine():
@@ -26,7 +26,7 @@
     try:
         exec('async def foo(): pass')
     except SyntaxError:
-        raise skip.SkipTest('async def not supported')
+        raise SkipTest('async def not supported')
     else:
         exec(dedent('''
         @freeze_time('1970-01-01')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/tests/test_class_import.py 
new/freezegun-0.3.12/tests/test_class_import.py
--- old/freezegun-0.3.11/tests/test_class_import.py     2018-10-15 
04:31:36.000000000 +0200
+++ new/freezegun-0.3.12/tests/test_class_import.py     2019-05-30 
03:52:31.000000000 +0200
@@ -13,10 +13,10 @@
 from freezegun.api import (
     FakeDatetime,
     FakeDate,
-    FakeTime,
-    FakeLocalTime,
-    FakeGMTTime,
-    FakeStrfTime,
+    fake_time,
+    fake_localtime,
+    fake_gmtime,
+    fake_strftime,
 )
 import datetime
 
@@ -70,6 +70,17 @@
     freezer.stop()
 
 
+def test_issubclass_works():
+    real_date = datetime.date
+    real_datetime = datetime.datetime
+
+    freezer = freeze_time('2011-01-01')
+    freezer.start()
+    assert issubclass(real_date, datetime.date)
+    assert issubclass(real_datetime, datetime.datetime)
+    freezer.stop()
+
+
 def test_fake_uses_real_when_ignored():
     real_time_before = time.time()
     with freeze_time('2012-01-14', ignore=['tests.fake_module']):
@@ -130,21 +141,21 @@
         assert another_module.get_date() is datetime.date
         assert another_module.get_date() is FakeDate
         assert another_module.get_time() is time.time
-        assert isinstance(another_module.get_time(), FakeTime)
+        assert another_module.get_time() is fake_time
         assert another_module.get_localtime() is time.localtime
-        assert isinstance(another_module.get_localtime(), FakeLocalTime)
+        assert another_module.get_localtime() is fake_localtime
         assert another_module.get_gmtime() is time.gmtime
-        assert isinstance(another_module.get_gmtime(), FakeGMTTime)
+        assert another_module.get_gmtime() is fake_gmtime
         assert another_module.get_strftime() is time.strftime
-        assert isinstance(another_module.get_strftime(), FakeStrfTime)
+        assert another_module.get_strftime() is fake_strftime
 
         # Fakes
         assert another_module.get_fake_datetime() is FakeDatetime
         assert another_module.get_fake_date() is FakeDate
-        assert another_module.get_fake_time() is FakeTime
-        assert another_module.get_fake_localtime() is FakeLocalTime
-        assert another_module.get_fake_gmtime() is FakeGMTTime
-        assert another_module.get_fake_strftime() is FakeStrfTime
+        assert another_module.get_fake_time() is fake_time
+        assert another_module.get_fake_localtime() is fake_localtime
+        assert another_module.get_fake_gmtime() is fake_gmtime
+        assert another_module.get_fake_strftime() is fake_strftime
 
     # Reals
     assert another_module.get_datetime() is datetime.datetime
@@ -152,21 +163,21 @@
     assert another_module.get_date() is datetime.date
     assert not another_module.get_date() is FakeDate
     assert another_module.get_time() is time.time
-    assert not isinstance(another_module.get_time(), FakeTime)
+    assert not another_module.get_time() is fake_time
     assert another_module.get_localtime() is time.localtime
-    assert not isinstance(another_module.get_localtime(), FakeLocalTime)
+    assert not another_module.get_localtime() is fake_localtime
     assert another_module.get_gmtime() is time.gmtime
-    assert not isinstance(another_module.get_gmtime(), FakeGMTTime)
+    assert not another_module.get_gmtime() is fake_gmtime
     assert another_module.get_strftime() is time.strftime
-    assert not isinstance(another_module.get_strftime(), FakeStrfTime)
+    assert not another_module.get_strftime() is fake_strftime
 
     # Fakes
     assert another_module.get_fake_datetime() is FakeDatetime
     assert another_module.get_fake_date() is FakeDate
-    assert another_module.get_fake_time() is FakeTime
-    assert another_module.get_fake_localtime() is FakeLocalTime
-    assert another_module.get_fake_gmtime() is FakeGMTTime
-    assert another_module.get_fake_strftime() is FakeStrfTime
+    assert another_module.get_fake_time() is fake_time
+    assert another_module.get_fake_localtime() is fake_localtime
+    assert another_module.get_fake_gmtime() is fake_gmtime
+    assert another_module.get_fake_strftime() is fake_strftime
 
 
 def test_none_as_initial():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/tests/test_datetimes.py 
new/freezegun-0.3.12/tests/test_datetimes.py
--- old/freezegun-0.3.11/tests/test_datetimes.py        2018-10-15 
04:58:23.000000000 +0200
+++ new/freezegun-0.3.12/tests/test_datetimes.py        2019-05-30 
03:52:31.000000000 +0200
@@ -3,13 +3,13 @@
 import unittest
 import locale
 import sys
+from unittest import SkipTest
 
-from nose.plugins import skip
-from nose.tools import assert_raises
+import pytest
 from tests import utils
 
 from freezegun import freeze_time
-from freezegun.api import FakeDatetime, FakeDate, BaseFakeTime
+from freezegun.api import FakeDatetime, FakeDate
 
 try:
     import maya
@@ -17,6 +17,8 @@
 except ImportError:
     maya = None
 
+# time.clock was removed in Python 3.8
+HAS_CLOCK = hasattr(time, 'clock')
 
 class temp_locale(object):
     """Temporarily change the locale."""
@@ -33,7 +35,7 @@
             except locale.Error:
                 pass
         msg = 'could not set locale to any of: %s' % ', '.join(self.targets)
-        raise skip.SkipTest(msg)
+        raise SkipTest(msg)
 
     def __exit__(self, *args):
         locale.setlocale(locale.LC_ALL, self.old)
@@ -207,6 +209,8 @@
         assert time_struct.tm_isdst == -1
 
 
[email protected](not HAS_CLOCK,
+                    reason="time.clock was removed in Python 3.8")
 def test_time_clock():
     with freeze_time('2012-01-14 03:21:34'):
         assert time.clock() == 0
@@ -253,6 +257,12 @@
             assert time.strftime("%Y") == "1970"
 
 
+def test_real_strftime_fall_through():
+    with freeze_time(ignore=['_pytest']):
+        time.strftime('%Y')
+        time.strftime('%Y', (2001, 1, 1, 1, 1, 1, 1, 1, 1)) == '2001'
+
+
 def test_date_object():
     frozen_date = datetime.date(year=2012, month=11, day=10)
     date_freezer = freeze_time(frozen_date)
@@ -316,12 +326,13 @@
     with freeze_time(frozen_datetimes):
         assert datetime.datetime(2011, 1, 1) == datetime.datetime.now()
 
-    assert_raises(StopIteration, freeze_time, frozen_datetimes)
+    with pytest.raises(StopIteration):
+        freeze_time(frozen_datetimes)
 
 
 def test_maya_datetimes():
     if not maya:
-        raise skip.SkipTest("maya is optional since it's not supported for "
+        raise SkipTest("maya is optional since it's not supported for "
                             "enough python versions")
 
     with freeze_time(maya.when("October 2nd, 1997")):
@@ -392,12 +403,12 @@
 
     def test_class_decorator_skips_callable_object_py2(self):
         if sys.version_info[0] != 2:
-            raise skip.SkipTest("test target is Python2")
+            raise SkipTest("test target is Python2")
         assert self.a_mock.__class__ == Callable
 
     def test_class_decorator_wraps_callable_object_py3(self):
         if sys.version_info[0] != 3:
-            raise skip.SkipTest("test target is Python3")
+            raise SkipTest("test target is Python3")
         assert self.a_mock.__wrapped__.__class__ == Callable
 
     @staticmethod
@@ -629,16 +640,19 @@
     expected_frozen_gmt = (2015, 3, 5, 0, 0, 0, 3, 64, -1)
     expected_clock = 0
 
-    BaseFakeTime.call_stack_inspection_limit = 100  # just to increase coverage
+    from freezegun import api
+    api.call_stack_inspection_limit = 100  # just to increase coverage
 
     with freeze_time(frozen):
         assert time.time() == expected_frozen
         # assert time.localtime() == expected_frozen_local
         assert time.gmtime() == expected_frozen_gmt
-        assert time.clock() == expected_clock
+        if HAS_CLOCK:
+            assert time.clock() == expected_clock
 
     with freeze_time(frozen, ignore=['_pytest', 'nose']):
         assert time.time() != expected_frozen
         # assert time.localtime() != expected_frozen_local
         assert time.gmtime() != expected_frozen_gmt
-        assert time.clock() != expected_clock
+        if HAS_CLOCK:
+            assert time.clock() != expected_clock
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/tests/test_errors.py 
new/freezegun-0.3.12/tests/test_errors.py
--- old/freezegun-0.3.11/tests/test_errors.py   1970-01-01 01:00:00.000000000 
+0100
+++ new/freezegun-0.3.12/tests/test_errors.py   2019-05-30 03:52:31.000000000 
+0200
@@ -0,0 +1,58 @@
+import contextlib
+import datetime
+import sys
+
+import pytest
+from freezegun import freeze_time
+
+
+class ModuleWithError(object):
+    """
+    A module that triggers an error on __dir__ access.
+
+    This could happen with modules that overrides its __dir__ method and
+    performing non standard operations.
+
+    One such example is IPython which adds shim modules when certain packages
+    are imported. (Eg. `import IPython.html`) This leads to errors upon
+    activating freezegun if the modules being shimmed are not installed.
+
+    See: 
https://github.com/ipython/ipython/blob/5.8.0/IPython/utils/shimmodule.py#L75
+    """
+    __name__ = 'module_with_error'
+    __dict__ = {}
+
+    def __init__(self, error_type):
+        self.error_triggered = False
+        self.error_type = error_type
+
+    def __dir__(self):
+        try:
+            raise self.error_type()
+        finally:
+            self.error_triggered = True
+
+
[email protected]
+def assert_module_with_raised_error(error_type):
+    """Install a module into sys.modules that raises an error upon invoking
+    __dir__."""
+    module = sys.modules['module_with_error'] = ModuleWithError(error_type)
+
+    try:
+        yield
+    finally:
+        del sys.modules['module_with_error']
+
+    assert module.error_triggered
+
+
[email protected]('error_type', [ImportError, TypeError])
+def test_ignore_errors_in_start(error_type):
+    with assert_module_with_raised_error(error_type):
+        freezer = freeze_time(datetime.datetime(2019, 1, 11, 9, 34))
+
+        try:
+            freezer.start()
+        finally:
+            freezer.stop()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/tests/test_operations.py 
new/freezegun-0.3.12/tests/test_operations.py
--- old/freezegun-0.3.11/tests/test_operations.py       2018-03-06 
01:33:10.000000000 +0100
+++ new/freezegun-0.3.12/tests/test_operations.py       2019-05-30 
03:52:31.000000000 +0200
@@ -93,3 +93,11 @@
     today = datetime.date.today()
     modified_date = today.replace(year=2013)
     assert utils.is_fake_date(modified_date)
+
+
+@freeze_time("Jan 14th, 2020", auto_tick_seconds=15)
+def test_auto_tick():
+    first_time = datetime.datetime.now()
+    auto_incremented_time = datetime.datetime.now()
+    assert first_time + datetime.timedelta(seconds=15) == auto_incremented_time
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/tests/test_ticking.py 
new/freezegun-0.3.12/tests/test_ticking.py
--- old/freezegun-0.3.11/tests/test_ticking.py  2018-10-15 04:58:23.000000000 
+0200
+++ new/freezegun-0.3.12/tests/test_ticking.py  2019-05-30 03:52:31.000000000 
+0200
@@ -1,11 +1,11 @@
 import datetime
 import time
 import mock
+import pytest
 
 from freezegun import freeze_time
 from tests import utils
 
-
 @utils.cpython_only
 def test_ticking_datetime():
     with freeze_time("Jan 14th, 2012", tick=True):
@@ -13,6 +13,8 @@
         assert datetime.datetime.now() > datetime.datetime(2012, 1, 14)
 
 
[email protected](not hasattr(time, "clock"),
+                    reason="time.clock was removed in Python 3.8")
 @utils.cpython_only
 def test_ticking_time_clock():
     with freeze_time('2012-01-14 03:21:34', tick=True):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/tests/test_utils.py 
new/freezegun-0.3.12/tests/test_utils.py
--- old/freezegun-0.3.11/tests/test_utils.py    2018-03-06 01:33:10.000000000 
+0100
+++ new/freezegun-0.3.12/tests/test_utils.py    2019-05-30 03:52:31.000000000 
+0200
@@ -1,5 +1,6 @@
+from unittest import SkipTest
+
 import mock
-from nose.plugins import skip
 
 from freezegun import api
 from tests import utils
@@ -20,7 +21,7 @@
     function_mock = mock.MagicMock(__name__='function')
     try:
         utils.cpython_only(function_mock)()
-    except skip.SkipTest:
+    except SkipTest:
         raise AssertionError("Test was skipped in CPython")
     assert function_mock.called
 
@@ -32,7 +33,7 @@
     function_mock = mock.MagicMock(__name__='function', skipped=False)
     try:
         utils.cpython_only(function_mock)()
-    except skip.SkipTest:
+    except SkipTest:
         function_mock.skipped = True
     assert not function_mock.called
     assert function_mock.skipped
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/tests/test_uuid.py 
new/freezegun-0.3.12/tests/test_uuid.py
--- old/freezegun-0.3.11/tests/test_uuid.py     2018-03-06 03:30:32.000000000 
+0100
+++ new/freezegun-0.3.12/tests/test_uuid.py     2019-05-30 03:52:31.000000000 
+0200
@@ -2,8 +2,6 @@
 import datetime
 import uuid
 
-from nose.tools import assert_equal
-
 from freezegun import freeze_time
 
 
@@ -25,11 +23,11 @@
     """
     future_target = datetime.datetime(2056, 2, 6, 14, 3, 21)
     with freeze_time(future_target):
-        assert_equal(time_from_uuid(uuid.uuid1()), future_target)
+        assert time_from_uuid(uuid.uuid1()) == future_target
 
     past_target = datetime.datetime(1978, 7, 6, 23, 6, 31)
     with freeze_time(past_target):
-        assert_equal(time_from_uuid(uuid.uuid1()), past_target)
+        assert time_from_uuid(uuid.uuid1()) == past_target
 
 
 def test_uuid1_past():
@@ -39,8 +37,8 @@
     """
     past_target = datetime.datetime(1978, 7, 6, 23, 6, 31)
     with freeze_time(past_target):
-        assert_equal(time_from_uuid(uuid.uuid1()), past_target)
+        assert time_from_uuid(uuid.uuid1()) == past_target
 
     future_target = datetime.datetime(2056, 2, 6, 14, 3, 21)
     with freeze_time(future_target):
-        assert_equal(time_from_uuid(uuid.uuid1()), future_target)
+        assert time_from_uuid(uuid.uuid1()) == future_target
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/freezegun-0.3.11/tests/utils.py 
new/freezegun-0.3.12/tests/utils.py
--- old/freezegun-0.3.11/tests/utils.py 2018-03-08 15:55:24.000000000 +0100
+++ new/freezegun-0.3.12/tests/utils.py 2019-05-30 03:52:31.000000000 +0200
@@ -1,6 +1,5 @@
 from functools import wraps
-
-from nose.plugins import skip
+from unittest import SkipTest
 
 from freezegun.api import FakeDate, FakeDatetime, _is_cpython
 
@@ -17,6 +16,6 @@
     @wraps(func)
     def wrapper(*args):
         if not _is_cpython:
-            raise skip.SkipTest("Requires CPython")
+            raise SkipTest("Requires CPython")
         return func(*args)
     return wrapper

++++++ remove_dependency_on_mock.patch ++++++
--- /var/tmp/diff_new_pack.kBUtwp/_old  2019-07-05 13:47:06.537304409 +0200
+++ /var/tmp/diff_new_pack.kBUtwp/_new  2019-07-05 13:47:06.537304409 +0200
@@ -1,9 +1,10 @@
 --- a/tests/test_ticking.py
 +++ b/tests/test_ticking.py
-@@ -1,6 +1,9 @@
+@@ -1,7 +1,10 @@
  import datetime
  import time
 -import mock
+ import pytest
 +try:
 +    import mock
 +except ImportError:
@@ -13,12 +14,14 @@
  from tests import utils
 --- a/tests/test_utils.py
 +++ b/tests/test_utils.py
-@@ -1,4 +1,7 @@
+@@ -1,6 +1,9 @@
+ from unittest import SkipTest
+ 
 -import mock
 +try:
 +    import mock
 +except ImportError:
 +    import unittest.mock as mock
- from nose.plugins import skip
  
  from freezegun import api
+ from tests import utils


Reply via email to