{ "info": { "author": "Simon Weber", "author_email": "simon@simonmweber.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "python-libfaketime: fast date/time mocking\n==========================================\n\n.. image:: https://img.shields.io/travis/simon-weber/python-libfaketime.svg\n :target: https://travis-ci.org/simon-weber/python-libfaketime\n.. image:: https://img.shields.io/pypi/v/libfaketime.svg\n :target: https://pypi.python.org/pypi/libfaketime\n.. image:: https://img.shields.io/badge/dynamic/json.svg?label=release&query=%24.status&maxAge=43200&uri=https%3A%2F%2Fwww.repominder.com%2Fbadge%2FeyJ1c2VyX2lkIjogMiwgInJlcG9faWQiOiA3OX0%3D%2F&link=https%3A%2F%2Fwww.repominder.com%2F\n :target: https://www.repominder.com\n\npython-libfaketime is a wrapper of `libfaketime `__ for python.\nSome brief details:\n\n* Linux and OS X, Pythons 2.7 and 3.4 through 3.7, pypy and pypy3\n* Mostly compatible with `freezegun `__.\n* Microsecond resolution.\n* Accepts datetimes and strings that can be parsed by dateutil.\n* Not threadsafe.\n* Will break profiling. A workaround: use ``libfaketime.{begin, end}_callback`` to disable/enable your profiler (`nosetest example `__).\n\n\nInstallation\n------------\n\n.. code-block:: sh\n\n $ pip install libfaketime\n\nUsage\n-----\n\n.. code-block:: python\n\n import datetime\n from libfaketime import fake_time, reexec_if_needed\n\n # libfaketime needs to be preloaded by the dynamic linker.\n # This will exec the same command, but with the proper environment variables set.\n # You can also skip this and manually manage your env (see \"How to avoid re-exec\").\n reexec_if_needed()\n\n def test_datetime_now():\n\n # fake_time can be used as a context_manager\n with fake_time('1970-01-01 00:00:01'):\n\n # Every calls to a date or datetime function returns the mocked date\n assert datetime.datetime.utcnow() == datetime.datetime(1970, 1, 1, 0, 0, 1)\n assert datetime.datetime.now() == datetime.datetime(1970, 1, 1, 0, 0, 1)\n assert time.time() == 1\n\n\n # fake_time can also be used as a decorator\n @fake_time('1970-01-01 00:00:01', tz_offset=12)\n def test_datetime_now_with_offset():\n\n # datetime.utcnow returns the mocked datetime without offset\n assert datetime.datetime.utcnow() == datetime.datetime(1970, 1, 1, 0, 0, 1)\n\n # datetime.now returns the mocked datetime with the offset passed to fake_time\n assert datetime.datetime.now() == datetime.datetime(1970, 1, 1, 12, 0, 1)\n\n\nPerformance\n-----------\n\nlibfaketime tends to be significantly faster than `freezegun `__.\nHere's the output of a `totally unscientific benchmark `__ on my laptop:\n\n.. code-block:: sh\n\n $ python benchmark.py\n re-exec with libfaketime dependencies\n timing 1000 executions of \n 0.021755 seconds\n\n $ python benchmark.py freezegun\n timing 1000 executions of \n 6.561472 seconds\n\n\nUse with py.test\n----------------\n\nThe `pytest-libfaketime `__ plugin will automatically configure python-libfaketime for you:\n\n.. code-block:: sh\n\n $ pip install pytest-libfaketime\n\n\nAlternatively, you can reexec manually from inside the pytest_configure hook:\n\n.. code-block:: python\n\n # conftest.py\n import os\n import libfaketime\n\n def pytest_configure():\n libfaketime.reexec_if_needed()\n _, env_additions = libfaketime.get_reload_information()\n os.environ.update(env_additions)\n\nMigration from freezegun\n------------------------\n\npython-libfaketime should have the same behavior as freezegun when running on supported code. To migrate to it, you can run:\n\n.. code-block:: bash\n\n find . -type f -name \"*.py\" -exec sed -i 's/freezegun/libfaketime/g' \"{}\" \\;\n\n\nHow to avoid re-exec\n--------------------\n\nIn some cases - especially when your tests start other processes - re-execing can cause unexpected problems. To avoid this, you can preload the necessary environment variables yourself. The necessary environment for your system can be found by running ``python-libfaketime`` on the command line:\n\n.. code-block:: sh\n\n $ python-libfaketime\n export LD_PRELOAD=\"/home/foo//vendor/libfaketime/src/libfaketime.so.1\"\n export DONT_FAKE_MONOTONIC=\"1\"\n export FAKETIME_DID_REEXEC=true\n\nYou can easily put this in a script like:\n\n.. code-block:: sh\n\n $ eval $(python-libfaketime)\n $ pytest # ...or any other code that imports libfaketime\n\n\nContributing and testing\n------------------------\n\nContributions are welcome! You should compile libfaketime before running tests:\n\n.. code-block:: bash\n\n make -C libfaketime/vendor/libfaketime\n\nThen you can install requirements with ``pip install -r requirements.txt`` and use ``pytest`` and ``tox`` to run the tests.\n\nuuid1 deadlock\n--------------\n\nCalling ``uuid.uuid1()`` multiple times while in a fake_time context can result in a deadlock when an OS-level uuid library is available.\nTo avoid this, python-libtaketime will monkeypatch uuid._uuid_generate_time (or similar, it varies by version) to None inside a fake_time context.\nThis may slow down uuid1 generation but should not affect correctness.\n\n\n.. :changelog:\n\nChangelog\n---------\n\n`Semantic versioning `__ is used.\n\n1.2.1\n+++++\nreleased 2019-01-20\n\n- fix a deadlock on python 3.7+\n\n1.2.0\n+++++\nreleased 2018-10-28\n\n- offset-aware datetimes now properly fake the timezone as well: `\\#49 `__\n\n1.1.0\n+++++\nreleased 2018-10-07\n\n- decorated classes can access the fake_time object with ``self._faked_time``: `\\#47 `__\n\n1.0.0\n+++++\nreleased 2018-06-16\n\n- **backwards incompatible**: the monotonic clock is no longer mocked: `\\#45 `__\n- ensure TZ is set to a valid timezone: `\\#46 `__\n\n0.5.2\n+++++\nreleased 2018-05-19\n\n- fix a bug causing incorrect times after unpatching under python 3.6+: `\\#43 `__\n- fix compilation under gcc8: `\\#44 `__\n\n0.5.1\n+++++\nreleased 2018-01-19\n\n- fix usage as a class decorator : `\\#41 `__\n\n0.5.0\n+++++\nreleased 2017-09-10\n\n- alias fake_time for freeze_time: `\\#31 `__\n- add tz_offset parameter: `\\#36 `__\n\n0.4.4\n+++++\nreleased 2017-07-16\n\n- allow contextlib2 as an alternative to contextdecorator: `\\#30 `__\n\n0.4.3\n+++++\nreleased 2017-07-07\n\n- add macOS Sierra compatibility: `\\#29 `__\n\n0.4.2\n+++++\nreleased 2016-06-30\n\n- fix only_main_thread=False: `\\#24 `__\n\n0.4.1\n+++++\nreleased 2016-05-02\n\n- fix deadlocks from uuid.uuid1 when faking time: `\\#14 `__\n- remove contextdecorator dependency on python3: `\\#15 `__\n\n0.4.0\n+++++\nreleased 2016-04-02\n\n- freezegun's tick() is now supported; see `their docs `__ for usage.\n\n0.3.0\n+++++\nreleased 2016-03-04\n\n- invoking ``libfaketime`` from the command line will now print the necessary environment to avoid a re-exec.\n\n0.2.1\n+++++\nreleased 2016-03-01\n\n- python 3 support\n\n0.1.1\n+++++\nreleased 2015-09-11\n\n- prevent distribution of test directory: https://github.com/simon-weber/python-libfaketime/pull/4\n\n0.1.0\n+++++\nreleased 2015-06-23\n\n- add global start/stop callbacks\n\n0.0.3\n+++++\nreleased 2015-03-28\n\n- initial packaged release\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://pypi.python.org/pypi/libfaketime/", "keywords": "", "license": "GPLv2", "maintainer": "", "maintainer_email": "", "name": "libfaketime", "package_url": "https://pypi.org/project/libfaketime/", "platform": "", "project_url": "https://pypi.org/project/libfaketime/", "project_urls": { "Homepage": "http://pypi.python.org/pypi/libfaketime/" }, "release_url": "https://pypi.org/project/libfaketime/1.2.1/", "requires_dist": null, "requires_python": "", "summary": "A fast alternative to freezegun that wraps libfaketime.", "version": "1.2.1" }, "last_serial": 4719910, "releases": { "0.0.2": [ { "comment_text": "", "digests": { "md5": "47255825beed14ee3ca50870de68035e", "sha256": "d4bb1732cc149f55e45ac7ddc2cc38043e08cce69dd015951baf8dddf7e6fde1" }, "downloads": -1, "filename": "libfaketime-0.0.2.tar.gz", "has_sig": false, "md5_digest": "47255825beed14ee3ca50870de68035e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36075, "upload_time": "2015-03-28T23:45:09", "url": "https://files.pythonhosted.org/packages/fc/ee/4cb334590a2ffc9b24542009ccd1421523b7535f58d9ce95224d894c4e82/libfaketime-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "86d2a55cf05fd510d59e0caae9d3c20a", "sha256": "8df01729c14427c327ca7fd95ca4166823b811fd89714e384af750a6140c7479" }, "downloads": -1, "filename": "libfaketime-0.0.3.tar.gz", "has_sig": false, "md5_digest": "86d2a55cf05fd510d59e0caae9d3c20a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36184, "upload_time": "2015-03-29T01:34:39", "url": "https://files.pythonhosted.org/packages/0e/00/ccdbb6482008c31d918e27a9eb7766460c85798465c6bff58b4101dc5bfb/libfaketime-0.0.3.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "f9b0fff478fac1271d120d56b6c1bd5a", "sha256": "ab422fa5d814503bf69e3fdbb4ba7322e8ef5ae95bff7c0b085fea521e4dfe1e" }, "downloads": -1, "filename": "libfaketime-0.1.0.tar.gz", "has_sig": false, "md5_digest": "f9b0fff478fac1271d120d56b6c1bd5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36295, "upload_time": "2015-07-23T15:28:34", "url": "https://files.pythonhosted.org/packages/be/e1/64529ac4c404540ce4b997dd792cd24c04bee88d496488fb6b4b43b2cde1/libfaketime-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "a66f6f5a63ae1f8f837b7b6d68be5fa9", "sha256": "c181a6a613799d3f263d77454a7ca7d61a6b3dd8275945b865b41e08c3c0f7a9" }, "downloads": -1, "filename": "libfaketime-0.1.1.tar.gz", "has_sig": false, "md5_digest": "a66f6f5a63ae1f8f837b7b6d68be5fa9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36884, "upload_time": "2015-09-11T19:47:03", "url": "https://files.pythonhosted.org/packages/61/ce/43bb56cde7773b7ab8197684c03b31a2295548f250c288e69c2f8b33c127/libfaketime-0.1.1.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "814baacb9e51c49ab13d6bf0eeedfe72", "sha256": "e5b1192820261f093b4686ab09bf4141caab291a11db22e6a049c2a505e29226" }, "downloads": -1, "filename": "libfaketime-0.2.1.tar.gz", "has_sig": false, "md5_digest": "814baacb9e51c49ab13d6bf0eeedfe72", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37232, "upload_time": "2016-03-01T19:09:25", "url": "https://files.pythonhosted.org/packages/fe/31/d1e8cf05fbcd9badf6060584b04ae9977f23d6e72ce6161605badc1a8a19/libfaketime-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "c631a4b7fdcc913d7cc9595028b7e812", "sha256": "fec8df9e233910bac423f2325a90d2cc884da1d18bf6837d88b5f1207bff4edd" }, "downloads": -1, "filename": "libfaketime-0.3.0.tar.gz", "has_sig": false, "md5_digest": "c631a4b7fdcc913d7cc9595028b7e812", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38097, "upload_time": "2016-03-04T19:24:22", "url": "https://files.pythonhosted.org/packages/93/33/fb59078b2975562c3b4848bbc8e65a8fe87b51d4e9c13ee4a9ef1cc95777/libfaketime-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "66eb5f905a3f327737c98278f66aebff", "sha256": "5be468049ac91940910400eef5a17051039e3e8796eb3210542604cc0a186a84" }, "downloads": -1, "filename": "libfaketime-0.4.0.tar.gz", "has_sig": false, "md5_digest": "66eb5f905a3f327737c98278f66aebff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37415, "upload_time": "2016-04-03T01:33:02", "url": "https://files.pythonhosted.org/packages/f1/f8/c9d85656cd54c5837fc25c9cebc234c35ee5bed8142fe00ddb957d110055/libfaketime-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "7ff449b227fd980fa47216c6a8bab723", "sha256": "d9f3b27acae6a9e289ebee5ed0c9e926bd46cf11e2fa84a27a2b265ccb23562a" }, "downloads": -1, "filename": "libfaketime-0.4.1.tar.gz", "has_sig": false, "md5_digest": "7ff449b227fd980fa47216c6a8bab723", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38811, "upload_time": "2016-05-02T17:41:22", "url": "https://files.pythonhosted.org/packages/5d/98/9a19fb047ee0fe6be8604c575da4ba8f8593a7e02a37e819e923aecd396a/libfaketime-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "3571de419c39a4c48173fcfc29d6ad84", "sha256": "889e8d7fba4d4e3b5c32e88c2e4007e1c846b5163f04c4cb61812288ca2bc6b9" }, "downloads": -1, "filename": "libfaketime-0.4.2.tar.gz", "has_sig": false, "md5_digest": "3571de419c39a4c48173fcfc29d6ad84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38394, "upload_time": "2016-07-30T20:54:35", "url": "https://files.pythonhosted.org/packages/0b/0c/acf93e2e793266cebeca2312d50cebc1fac2b6f81ead05178dea6175324b/libfaketime-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "c0c98f6f6891cdc4ddb1c419b160bed3", "sha256": "730597182fd71c1991a067d4ead0f6791c31b5668996e64a4eb3877fd5c60e04" }, "downloads": -1, "filename": "libfaketime-0.4.3.tar.gz", "has_sig": false, "md5_digest": "c0c98f6f6891cdc4ddb1c419b160bed3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 64035, "upload_time": "2017-07-07T15:45:45", "url": "https://files.pythonhosted.org/packages/09/52/3c83eb60f031e451892c7c7bf092fc2b483207073df7322f50b414591bda/libfaketime-0.4.3.tar.gz" } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "7283a60ed7be8bf02801a8aed81c2a51", "sha256": "34232e4c0b79dc6c450699b3bdbd0b8d12cc44d518d28014cf5e590a88033158" }, "downloads": -1, "filename": "libfaketime-0.4.4.tar.gz", "has_sig": false, "md5_digest": "7283a60ed7be8bf02801a8aed81c2a51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63632, "upload_time": "2017-07-16T04:17:41", "url": "https://files.pythonhosted.org/packages/c0/79/3ccac018432017b35bb0cf7fb6fb8c5dba4f8f454d44068093d220e3d605/libfaketime-0.4.4.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "365c57251758efe305a994110725cbe1", "sha256": "e81c59c571b9883743f34eea6b7412fd326c7a53dbbd191b84f5c3312d664dab" }, "downloads": -1, "filename": "libfaketime-0.5.0.tar.gz", "has_sig": false, "md5_digest": "365c57251758efe305a994110725cbe1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 64809, "upload_time": "2017-09-10T20:19:25", "url": "https://files.pythonhosted.org/packages/f5/b9/a257276ae57952ddb4e34d73c4de3b85aa08c49a409edf2327783a8c7a32/libfaketime-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "aaec3ec1b1a501fdfe8728fcc1643e94", "sha256": "0a4d34620d0d21d570e6e51bf82a5ecbc41fb30a8fc5529e9289c0a1f2db6046" }, "downloads": -1, "filename": "libfaketime-0.5.1.tar.gz", "has_sig": false, "md5_digest": "aaec3ec1b1a501fdfe8728fcc1643e94", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 68854, "upload_time": "2018-01-20T02:29:20", "url": "https://files.pythonhosted.org/packages/cf/e4/f45b712ecd26d77702941f939a5bd574ef33e0fc345365b8d77399c4f506/libfaketime-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "d29b3f9a1e54cdae8041e3d8e067fb38", "sha256": "865f5437f1e105eb3540270e17bb551f726b673e8bcf44ce7c638d934130eb79" }, "downloads": -1, "filename": "libfaketime-0.5.2.tar.gz", "has_sig": false, "md5_digest": "d29b3f9a1e54cdae8041e3d8e067fb38", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83655, "upload_time": "2018-05-19T23:48:39", "url": "https://files.pythonhosted.org/packages/4e/40/62b36576f59818f9a5547e1e6e1947225429ec62f401ef5d7bd436960c10/libfaketime-0.5.2.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "ccf3a7503c02064c61e2f4cb3ffb8621", "sha256": "02fc23d62fb75cf2174749d8c6408c0e27ec23678da2fb6be40ad951c9102d98" }, "downloads": -1, "filename": "libfaketime-1.0.0.tar.gz", "has_sig": false, "md5_digest": "ccf3a7503c02064c61e2f4cb3ffb8621", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83922, "upload_time": "2018-06-16T23:08:19", "url": "https://files.pythonhosted.org/packages/84/d0/0792456f20f89a7c269da3d5da82d227c0d44ccdeef54c80c903518e5971/libfaketime-1.0.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "c921e6ca62ef1ee045013678034c9c8b", "sha256": "5632aa0576a61f951d5131d189cd844475be6bda8f9f48d923349521edfc5a66" }, "downloads": -1, "filename": "libfaketime-1.2.0.tar.gz", "has_sig": false, "md5_digest": "c921e6ca62ef1ee045013678034c9c8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 84951, "upload_time": "2018-10-28T19:29:07", "url": "https://files.pythonhosted.org/packages/99/11/48056b50ce45fe4e8a55ed3b17d68564e3718c3643c23c7c37da68219d79/libfaketime-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "d21c37e84a8fb6e64049eb7cdca630a1", "sha256": "e4f54bfcefe8545e462abfbd501e4c037f35b5e8bbe4f1b206df672336e2e0eb" }, "downloads": -1, "filename": "libfaketime-1.2.1.tar.gz", "has_sig": false, "md5_digest": "d21c37e84a8fb6e64049eb7cdca630a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 84098, "upload_time": "2019-01-21T03:49:51", "url": "https://files.pythonhosted.org/packages/a3/cd/560c9f7d8afdb7dc71b96392c5d8d97533879a2c965fb9e6b005bcb60996/libfaketime-1.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d21c37e84a8fb6e64049eb7cdca630a1", "sha256": "e4f54bfcefe8545e462abfbd501e4c037f35b5e8bbe4f1b206df672336e2e0eb" }, "downloads": -1, "filename": "libfaketime-1.2.1.tar.gz", "has_sig": false, "md5_digest": "d21c37e84a8fb6e64049eb7cdca630a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 84098, "upload_time": "2019-01-21T03:49:51", "url": "https://files.pythonhosted.org/packages/a3/cd/560c9f7d8afdb7dc71b96392c5d8d97533879a2c965fb9e6b005bcb60996/libfaketime-1.2.1.tar.gz" } ] }