Skip to main content
Join the official 2020 Python Developers SurveyStart the survey!

A fast alternative to freezegun that wraps libfaketime.

Project description

python-libfaketime: fast date/time mocking

python-libfaketime is a wrapper of libfaketime for python.

import datetime

from libfaketime import fake_time, reexec_if_needed

# libfaketime needs to be preloaded by the dynamic linker.
# This will exec the same command, but with the proper environment variables set.
# Or you can skip running this and manually manage your env (see get_reload_information()).
reexec_if_needed()

def get_tomorrow():
    return datetime.date.today() + datetime.timedelta(days=1)


@fake_time('2014-01-01 00:00:00')
def test_get_tomorrow():
    assert get_tomorrow() == datetime.date(2014, 1, 2)

It serves as a fast drop-in replacement for freezegun. Here’s the output of a totally unscientific benchmark on my laptop:

$ python benchmark.py
re-exec with libfaketime dependencies
timing 1000 executions of <class 'libfaketime.fake_time'>
0.021755 seconds

$ python benchmark.py freezegun
timing 1000 executions of <function freeze_time at 0x10aaa1140>
6.561472 seconds

Some brief details:

  • linux and osx
  • microsecond resolution
  • accepts datetimes and strings that can be parsed by dateutil
  • not threadsafe
  • will break profiling. A workaround: use libfaketime.{begin, end}_callback to disable/enable your profiler.

To install: pip install libfaketime.

How to avoid re-exec

Sometimes, re-exec does unexpected things. You can avoid those problems by preloading libfaketime yourself. The environment variables you need can be found by running python-libfaketime on the command line:

$ python-libfaketime
export LD_PRELOAD="/home/allard/.virtualenvs/libfaketime/local/lib/python2.7/site-packages/libfaketime/vendor/libfaketime/src/libfaketime.so.1"
export FAKETIME_DID_REEXEC=true

You can use them as such:

eval $(python-libfaketime)
nosetests  # for example

Changelog

Semantic versioning is used.

0.3.0

released 2016-03-04

  • invoking libfaketime from the command line will now print the necessary environment to avoid a re-exec.

0.2.1

released 2016-03-01

  • python 3 support

0.1.1

released 2015-09-11

0.1.0

released 2015-06-23

  • add global start/stop callbacks

0.0.3

released 2015-03-28

  • initial packaged release

Project details


Download files

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

Files for libfaketime, version 0.3.0
Filename, size File type Python version Upload date Hashes
Filename, size libfaketime-0.3.0.tar.gz (38.1 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page