Skip to main content

Various utilities related to date and time for testing purposes.

Project description

A module to allow playing with time in tests.

This README is also a doctest. To it and other doctests for this package, simply do:

nosetests --with-doctest --doctest-extension=txt

Before anything, the package must be imported in order to replace the regular datetime module with the modified one:

>>> import anybox.testing.datetime
>>> from datetime import datetime
>>> import time

Let’s keep the real value of now around:

>>> start = datetime.now()
>>> start_t = time.time()

Then you can:

>>> datetime.set_now(datetime(2001, 01, 01, 3, 57, 0))
>>> datetime.now()
datetime(2001, 1, 1, 3, 57)
>>> datetime.today()
datetime(2001, 1, 1, 3, 57)

The time module goes along:

>>> datetime.fromtimestamp(time.time())
datetime(2001, 1, 1, 3, 57)

Note that you can expect a few microseconds difference (not displayed here because datetime.fromtimestamp ignores them).

Don’t forget afterwards get back to the regular system clock, otherwise many pieces of code might get very suprised if the system clock looks as if it’s frozen:

>>> datetime.real_now()

Now let’s check it worked:

>>> now = datetime.now()
>>> now > start
True
>>> from datetime import timedelta
>>> now - start < timedelta(0, 0, 10000) # 10 ms
True

And with the time module:

>>> now_t = time.time()
>>> now_t > start_t
True
>>> now_t - start_t < 0.01 # 10 ms again
True

Other constructors are still available (this is a non regression test):

>>> import datetime
>>> datetime.time(3, 57, 0)
datetime.time(3, 57)
>>> datetime.datetime(2013, 1, 1, 3, 57, 0)
datetime(2013, 1, 1, 3, 57)
>>> datetime.date(2013, 1, 1)
datetime.date(2013, 1, 1)

Our replacement class is the one loaded from the datetime module, but instances of the original datetime class behave exactly as instances of our datetime.datetime. This is needed because most computational methods, actually return an object of the original datetime class. This works with python >= 2.6 only.

First let’s check that our class is a subclass of the orininal one. If this fails, this test does not mean anything anymore:

>>> datetime.datetime is datetime.original_datetime
False
>>> issubclass(datetime.datetime, datetime.original_datetime)
True

Then let’s demonstrate the behaviour:

>>> odt = datetime.original_datetime(2012, 1, 1)
>>> isinstance(odt, datetime.datetime)
True
>>> issubclass(datetime.original_datetime, datetime.datetime)
True

Version 0.3 (2012-11-23)

  • Fixed the problem that datetime objects generated from computations used to fail isinstance tests.

Version 0.2.1 (2012-11-22)

  • Fixed issue with datetime.time masking

Version 0.1 (2012-07-15)

  • initial version

Project details


Release history Release notifications

History Node

0.5

History Node

0.4.2

History Node

0.4.1

History Node

0.4

History Node

0.3.1

This version
History Node

0.3

History Node

0.2.1

History Node

0.2

History Node

0.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
anybox.testing.datetime-0.3.tar.gz (3.9 kB) Copy SHA256 hash SHA256 Source None Nov 23, 2012

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page