{
"info": {
"author": "Peter Bengtsson",
"author_email": "peterbe@mozilla.com",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 4 - Beta",
"License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)",
"Operating System :: OS Independent",
"Programming Language :: Python :: 2.7",
"Topic :: Software Development :: Libraries :: Python Modules"
],
"description": "crontabber\n==========\n\nA cron job runner with self-healing and job dependencies.\n\nLicense: `MPL 2 `__\n\n|Coverage Status|\n\n|Build Status|\n\nHow to run tests\n----------------\n\nFirst you need to create a dedicated test database. We recommend you\ncall it ``test_crontabber``. Then you need the necessary credentials for\nit.\n\nBefore running the tests you need to install some extras to be able to\nrun tests at all:\n\n::\n\n pip install -r test-requirements.txt\n\nNext, in the root directory of the project create a file called\n``test-crontabber.ini`` and it should look something like this:\n\n::\n\n [crontabber]\n user=myusername\n password=mypassword\n dbname=test_crontabber\n\nTo start all the tests run:\n\n::\n\n PYTHONPATH=. nosetests\n\nIf you want to run a specific test in a specific file in a specific\nclass you can define it per the ``nosetests`` standard like this for\nexample:\n\n::\n\n PYTHONPATH=. nosetests tests crontabber/tests/test_crontabber.py:TestCrontabber.test_basic_run_job\n\nIf you want the tests to stop as soon as the first test fails add ``-x``\nto that same command above.\n\nAlso, if you want ``nosetests`` to *not* capture ``stdout`` add ``-s``\nto that same command as above.\n\nHow to do code coverage analysis\n--------------------------------\n\nFirst you need to install the\n`coverage `__ module. Then,\nwith ``nosetests``, you can run this:\n\n::\n\n PYTHONPATH=. nosetests --with-coverage --cover-erase --cover-html --cover-package=crontabber\n\nAfter it has run, you can open the file ``cover/index.html`` in browser.\n\nHow to run the exampleapp\n-------------------------\n\nThe example app helps you set up a playground to play around with and\ntest crontabber to gain a better understanding of how it works.\n\nThe best place to start with is to read the ``exampleapp/README.md``\nfile and go through its steps. Once you get the basics to work you can\nstart experimenting with adding your job classes.\n\nHow locking works\n-----------------\n\ncrontabber supports locking. It basically means if you start a second\ninstance of crontabber whilst it's already ongoing in another\nterminal/server the second one will exist early. This is only applicable\nif there is an actual job ongoing.\n\nThere are two kinds of locking.\n\n1. **General locking.** The first thing crontabber does before it starts\n an app is to ask the state (stored in PostgreSQL) if it's ongoing and\n if it is, it exists with an error code of ``3``.\n\n2. **Sub-second locking.** If the general locking (see point above) says\n \"No, the job is not ongoing\", it's going to proceed to update the\n state with a `row-level locking transaction in\n PostgreSQL `__.\n That basically means PostgreSQL only allows one single ``UPDATE``\n from the process that gets there first. The second crontabber process\n will will exit early with an error code of ``2`` if the first\n crontabber process managed to run the ``UPDATE`` first.\n\nImagine two separate terminals starting crontabber at the almost same\ntime:\n\n::\n\n # Terminal 1\n $ python crontabber.py --admin.conf=crontabber.ini\n $ echo $?\n 0\n\n::\n\n # Terminal 2 (started almost simultaneously)\n $ python crontabber.py --admin.conf=crontabber.ini\n $ echo $?\n 3\n\n**Note!** If a job has been ongoing to a maximum period of time, the\nlocking is ignored. This is controlled by the config option\n``crontabber.max_ongoing_age_hours`` which defaults to **12 hours**.\nThis is applicable if crontabber, updates the state that it's starting a\njob, then when it tries to update the state that it finished\n(successfully or not) and that write fails, if for example it's unable\nto make a connection to PostgreSQL. If this happens crontabber will just\nignore the lock and run it anyway.\n\n.. |Coverage Status| image:: https://coveralls.io/repos/mozilla/crontabber/badge.png\n :target: https://coveralls.io/r/mozilla/crontabber\n.. |Build Status| image:: https://travis-ci.org/mozilla/crontabber.svg?branch=master\n :target: https://travis-ci.org/mozilla/crontabber",
"description_content_type": null,
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/mozilla/crontabber",
"keywords": "",
"license": "",
"maintainer": "",
"maintainer_email": "",
"name": "crontabber",
"package_url": "https://pypi.org/project/crontabber/",
"platform": "UNKNOWN",
"project_url": "https://pypi.org/project/crontabber/",
"project_urls": {
"Homepage": "https://github.com/mozilla/crontabber"
},
"release_url": "https://pypi.org/project/crontabber/0.18.1/",
"requires_dist": [
"configman (>1.2.3)",
"psycopg2 (>=2.4.5)",
"raven (>=3.4.1)"
],
"requires_python": "",
"summary": "A cron job runner with self-healing and job dependencies.",
"version": "0.18.1"
},
"last_serial": 2679489,
"releases": {
"0.10": [
{
"comment_text": "",
"digests": {
"md5": "b467d006a2db4d9dd559e9926aaa6862",
"sha256": "e7c570cf61f36028f91ab84f2bc17e47f5b2b059b61bd811b85b687ebd59653a"
},
"downloads": -1,
"filename": "crontabber-0.10.tar.gz",
"has_sig": false,
"md5_digest": "b467d006a2db4d9dd559e9926aaa6862",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 43496,
"upload_time": "2014-06-13T22:53:34",
"url": "https://files.pythonhosted.org/packages/a9/31/46026e90aa48da6f4235e84df0431176af481a98812fc20dd130ac27b422/crontabber-0.10.tar.gz"
}
],
"0.11": [
{
"comment_text": "",
"digests": {
"md5": "498a1cd4c650170f41969a0012348003",
"sha256": "3c5996649e0547e4369d932b3047b348b77a3edb67b648c1baded232fb92932e"
},
"downloads": -1,
"filename": "crontabber-0.11.tar.gz",
"has_sig": false,
"md5_digest": "498a1cd4c650170f41969a0012348003",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 43869,
"upload_time": "2014-06-17T20:25:24",
"url": "https://files.pythonhosted.org/packages/f3/1c/ff5507bdbb4f02d90e358f02202bad9c06cf3cff69d8024ba599fb191204/crontabber-0.11.tar.gz"
}
],
"0.12": [
{
"comment_text": "",
"digests": {
"md5": "979d3be1b83aad87b1f947e21e901cff",
"sha256": "814ca7fd53cc7b9c43df1732481fa102562ef0ee149e86fcbaf737a3f356f587"
},
"downloads": -1,
"filename": "crontabber-0.12.tar.gz",
"has_sig": false,
"md5_digest": "979d3be1b83aad87b1f947e21e901cff",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 44703,
"upload_time": "2014-07-31T22:46:42",
"url": "https://files.pythonhosted.org/packages/e0/d1/5b73cac22171056821191b45e2708babb373175bf3bb568fc491394fc98e/crontabber-0.12.tar.gz"
}
],
"0.13": [
{
"comment_text": "",
"digests": {
"md5": "b597b34d1dfb36d0a6e11c14a86b80c7",
"sha256": "b3c45ccd3829278f7be2c2565e369c0fbdc527f77d0636238780ab6fe75831b2"
},
"downloads": -1,
"filename": "crontabber-0.13-py2-none-any.whl",
"has_sig": false,
"md5_digest": "b597b34d1dfb36d0a6e11c14a86b80c7",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 51564,
"upload_time": "2014-09-22T20:49:51",
"url": "https://files.pythonhosted.org/packages/5a/27/1c598977da321c9b27384126b4dea3e700197ba4da09e0ef15969cc33a46/crontabber-0.13-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "e088618c3ea7f10100bde4f2b920e765",
"sha256": "8e709ecdc7ce0e044315b564999dcd00db53750f3a7fd814c10ce371544176c0"
},
"downloads": -1,
"filename": "crontabber-0.13.tar.gz",
"has_sig": false,
"md5_digest": "e088618c3ea7f10100bde4f2b920e765",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 45707,
"upload_time": "2014-09-22T20:49:28",
"url": "https://files.pythonhosted.org/packages/b1/cb/a879b29c017b7c524cb9236b4a1f2eec8cce217ddbf4ae416d64bf825a26/crontabber-0.13.tar.gz"
}
],
"0.14": [
{
"comment_text": "",
"digests": {
"md5": "9bc3de14622ae92efbeb9baf456ae120",
"sha256": "69854a9fccdd575944c552d51258bbe45ca7f4235194346efda178ae72f11cfe"
},
"downloads": -1,
"filename": "crontabber-0.14-py2-none-any.whl",
"has_sig": false,
"md5_digest": "9bc3de14622ae92efbeb9baf456ae120",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 51562,
"upload_time": "2014-10-15T20:17:08",
"url": "https://files.pythonhosted.org/packages/3f/85/9dde4b196d24d0c8dd236ca5c3863cee9e6af7559cea772ed56b46d794c5/crontabber-0.14-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "b3f66a0aa6825498b90df58c04cabd4d",
"sha256": "e571e4b5a7e7c99bbd8b9aeedd0b08de29e1aa2a57bee840dfb1111d94ba598f"
},
"downloads": -1,
"filename": "crontabber-0.14.tar.gz",
"has_sig": false,
"md5_digest": "b3f66a0aa6825498b90df58c04cabd4d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 45693,
"upload_time": "2014-10-15T20:17:03",
"url": "https://files.pythonhosted.org/packages/86/a9/592688218dd82d86bfd3e57dd70082cb389e24dfa90b480d1bcc19d7022e/crontabber-0.14.tar.gz"
}
],
"0.15": [
{
"comment_text": "",
"digests": {
"md5": "4f25a7396023e8dfd7bd5ef24debccbd",
"sha256": "e3882dd1e9ba9634eef5eeb4d8efcc97ae15d48296a86144b514c9c10c6c971c"
},
"downloads": -1,
"filename": "crontabber-0.15-py2-none-any.whl",
"has_sig": false,
"md5_digest": "4f25a7396023e8dfd7bd5ef24debccbd",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 49288,
"upload_time": "2014-10-29T00:44:56",
"url": "https://files.pythonhosted.org/packages/bd/ac/43a663669b3a5a0b36ea7fa093f08f16894624ba987fce1b9e803beab673/crontabber-0.15-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "76187c6d36b52bd16e379ba7e0a218be",
"sha256": "e5d1619cc701e07e4684cfa152c33844a7f79e8100401d41fd9e0c055f8f6238"
},
"downloads": -1,
"filename": "crontabber-0.15.tar.gz",
"has_sig": false,
"md5_digest": "76187c6d36b52bd16e379ba7e0a218be",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 46102,
"upload_time": "2014-10-29T00:44:53",
"url": "https://files.pythonhosted.org/packages/8d/ee/d1e2a746a8169273572bfd76d2cf0e9cbf893361216ab6546a769e4e74aa/crontabber-0.15.tar.gz"
}
],
"0.16.0": [
{
"comment_text": "",
"digests": {
"md5": "3f005e1db9bf3cb4d4a39d585bce08a5",
"sha256": "17271f406da0db9088a20559687c18937dd340a443f7d7f12f1371f57d31760a"
},
"downloads": -1,
"filename": "crontabber-0.16.0-py2-none-any.whl",
"has_sig": false,
"md5_digest": "3f005e1db9bf3cb4d4a39d585bce08a5",
"packagetype": "bdist_wheel",
"python_version": "2.7",
"requires_python": null,
"size": 50010,
"upload_time": "2015-02-18T19:57:05",
"url": "https://files.pythonhosted.org/packages/f4/e8/9d7680e7c5290d3e13657cc09bedc481e93ec313d1b983baebd8b20ac539/crontabber-0.16.0-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "3466b1cd4c7d93d07391eb3b9111a970",
"sha256": "8ee3702769d174684fa539459cbde22359e574fc4ecf71fc3f7f6901e5cd23ea"
},
"downloads": -1,
"filename": "crontabber-0.16.0.tar.gz",
"has_sig": false,
"md5_digest": "3466b1cd4c7d93d07391eb3b9111a970",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 47131,
"upload_time": "2015-02-18T19:57:03",
"url": "https://files.pythonhosted.org/packages/a7/1b/f63e2b914f54d8d14a25b4d4d30baaf319f79cd96cf6134c80b2cf3df97d/crontabber-0.16.0.tar.gz"
}
],
"0.16.1": [
{
"comment_text": "",
"digests": {
"md5": "e6d416a1da6f8fc67c8e0e31e6bd0f65",
"sha256": "250dfb9182954e767c715f2fd40658c50b28c8c5a0a4f82f12af660b86d68fdf"
},
"downloads": -1,
"filename": "crontabber-0.16.1-py2-none-any.whl",
"has_sig": false,
"md5_digest": "e6d416a1da6f8fc67c8e0e31e6bd0f65",
"packagetype": "bdist_wheel",
"python_version": "2.6",
"requires_python": null,
"size": 50153,
"upload_time": "2015-04-30T17:42:05",
"url": "https://files.pythonhosted.org/packages/8d/2e/d4298802df5f0f81d2687e88d739029ef598c949039fdb6ee69d080f03dc/crontabber-0.16.1-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "7566abb50da8019d8817213d6e92ef0f",
"sha256": "2a7b7082aa4b043ad4d66c99e1a9bc5c2c2df31b1456ced0ad1771c3cd5b3b7a"
},
"downloads": -1,
"filename": "crontabber-0.16.1.tar.gz",
"has_sig": false,
"md5_digest": "7566abb50da8019d8817213d6e92ef0f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 46645,
"upload_time": "2015-04-30T17:42:02",
"url": "https://files.pythonhosted.org/packages/8e/05/7498ef1f97be5533987ca0e14691597c54b96d165f845948c50288590df4/crontabber-0.16.1.tar.gz"
}
],
"0.17.0": [
{
"comment_text": "",
"digests": {
"md5": "b600d162881057aa06d7387d96e103ff",
"sha256": "680674574330001f71d33d4c6f374f5472b87af64f6dbe43f5989623086a72cb"
},
"downloads": -1,
"filename": "crontabber-0.17.0-py2-none-any.whl",
"has_sig": false,
"md5_digest": "b600d162881057aa06d7387d96e103ff",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 50599,
"upload_time": "2016-02-02T17:27:31",
"url": "https://files.pythonhosted.org/packages/e3/ac/134b9e82eaf0bef4cf4da73511e395b7997ebaab992f05eff8704861af7b/crontabber-0.17.0-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "b8e075327c401f912d47202d2915b478",
"sha256": "3e084eae18fccfc45d3e105abd86c111f735591bf9b90924ee90eed998566a8e"
},
"downloads": -1,
"filename": "crontabber-0.17.0.tar.gz",
"has_sig": false,
"md5_digest": "b8e075327c401f912d47202d2915b478",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 47058,
"upload_time": "2016-02-02T17:27:36",
"url": "https://files.pythonhosted.org/packages/76/67/1e47f3ab61eb2b6dd22e43e4f64772339482ca1618f238538e8f773f56b3/crontabber-0.17.0.tar.gz"
}
],
"0.18.0": [
{
"comment_text": "",
"digests": {
"md5": "ecfc1f49e4b16b908542c2b146c3b2a5",
"sha256": "0a689be6799ec9881ce5e97379b4cf628864bbda2e869600637cb17060df1fb8"
},
"downloads": -1,
"filename": "crontabber-0.18.0-py2-none-any.whl",
"has_sig": false,
"md5_digest": "ecfc1f49e4b16b908542c2b146c3b2a5",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 55216,
"upload_time": "2017-03-02T21:16:00",
"url": "https://files.pythonhosted.org/packages/6a/72/3283bef513e214ce6cb46004e83ce328a548c6f82279286bf03d24649057/crontabber-0.18.0-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "6f5007de12b2dd663ed26b8a00bf96a2",
"sha256": "ecec927552aaca9533d5c8a7c44cbeddf78ce2b9a0220abe775dddb7ebb49e50"
},
"downloads": -1,
"filename": "crontabber-0.18.0.tar.gz",
"has_sig": false,
"md5_digest": "6f5007de12b2dd663ed26b8a00bf96a2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 51247,
"upload_time": "2017-03-02T21:16:03",
"url": "https://files.pythonhosted.org/packages/e3/19/ec61d0a07abd1b92f04817a19c4d7ca38aaae99bd71e3e7674ac5e04704d/crontabber-0.18.0.tar.gz"
}
],
"0.18.1": [
{
"comment_text": "",
"digests": {
"md5": "cf1729aec1085a7d818d9cff490e4693",
"sha256": "da4b6d06b4955ed3439a3d5ccc09cb1b3fa644d11d6222c55611c1c64be5323d"
},
"downloads": -1,
"filename": "crontabber-0.18.1-py2-none-any.whl",
"has_sig": false,
"md5_digest": "cf1729aec1085a7d818d9cff490e4693",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 55376,
"upload_time": "2017-03-03T02:13:21",
"url": "https://files.pythonhosted.org/packages/f0/80/2e63b47598a5458ccc4c212dea727f3511399f2af4b00660e4f92da580fb/crontabber-0.18.1-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "f13bd8aa33018e7ccb9fe1f29a30e5d6",
"sha256": "dfe4086a23928647bb021ba0a8bf3e7bb9e86792042506dcca5040061b310d3e"
},
"downloads": -1,
"filename": "crontabber-0.18.1.tar.gz",
"has_sig": false,
"md5_digest": "f13bd8aa33018e7ccb9fe1f29a30e5d6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 51265,
"upload_time": "2017-03-03T02:13:23",
"url": "https://files.pythonhosted.org/packages/b8/54/643a25075bb9ceee2854c5ba723618d13e01142afb18e31039d776b192d2/crontabber-0.18.1.tar.gz"
}
],
"0.3": [
{
"comment_text": "",
"digests": {
"md5": "eedef1424ec8e0c4f35cfc0751c0e58a",
"sha256": "44096ba8491e821621107de94b455b8c43c657b83137111d323a26505f89eb83"
},
"downloads": -1,
"filename": "crontabber-0.3.tar.gz",
"has_sig": false,
"md5_digest": "eedef1424ec8e0c4f35cfc0751c0e58a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 41408,
"upload_time": "2014-04-07T23:31:31",
"url": "https://files.pythonhosted.org/packages/20/c8/8c8d1ceb54c5bd97d9d18bf4369f6216fa58c416dfc32d49b7015a5db2f4/crontabber-0.3.tar.gz"
}
],
"0.4": [
{
"comment_text": "",
"digests": {
"md5": "97a17245d0124f6167c5d6413867f21a",
"sha256": "699ef98979b66883d33730b4309cfad4b8df2617a77e7158c5ca27398fc5a3aa"
},
"downloads": -1,
"filename": "crontabber-0.4.tar.gz",
"has_sig": false,
"md5_digest": "97a17245d0124f6167c5d6413867f21a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 41327,
"upload_time": "2014-04-15T16:18:07",
"url": "https://files.pythonhosted.org/packages/04/f7/279f55eb5f02722d3a8fac8b0a1d40b886750d7b97b883bf986547288b6c/crontabber-0.4.tar.gz"
}
],
"0.5": [
{
"comment_text": "",
"digests": {
"md5": "59ddabf3e025c601c60d823aa2c99620",
"sha256": "fdc48553fc9084e11503b7b6f8cd193b74f747cf36147fc2e26d80350596c6ad"
},
"downloads": -1,
"filename": "crontabber-0.5.tar.gz",
"has_sig": false,
"md5_digest": "59ddabf3e025c601c60d823aa2c99620",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 41382,
"upload_time": "2014-04-15T16:19:52",
"url": "https://files.pythonhosted.org/packages/3b/86/4bcc8b766a1936105aa1570f0b9d808af57b05b52e2453ed9ecb9cd1b81d/crontabber-0.5.tar.gz"
}
],
"0.6": [
{
"comment_text": "",
"digests": {
"md5": "f92ea9fbb7fa1fdfdc79eaf86f2a1e9e",
"sha256": "050c66e1b7c95b423f712bcb7b91ee2f1869860e1fd48799f22f1fe6b141eb16"
},
"downloads": -1,
"filename": "crontabber-0.6.tar.gz",
"has_sig": false,
"md5_digest": "f92ea9fbb7fa1fdfdc79eaf86f2a1e9e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 43191,
"upload_time": "2014-04-22T17:18:09",
"url": "https://files.pythonhosted.org/packages/09/24/de953d08ed07745a83a872d571306f5619d1facf56663dc29e077080b286/crontabber-0.6.tar.gz"
}
],
"0.7": [
{
"comment_text": "",
"digests": {
"md5": "dba6958cd607ba6aa50e803269763ae3",
"sha256": "156e3eca4c0a2e0497c27c9cfb2eec262142ad3088182b66f5408f3ec86a86e9"
},
"downloads": -1,
"filename": "crontabber-0.7.tar.gz",
"has_sig": false,
"md5_digest": "dba6958cd607ba6aa50e803269763ae3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 43073,
"upload_time": "2014-04-23T03:21:55",
"url": "https://files.pythonhosted.org/packages/be/c6/793af71ee66e0e8fc67192aec7926bc97eec815c5098bc2aafd50007eca0/crontabber-0.7.tar.gz"
}
],
"0.8": [
{
"comment_text": "",
"digests": {
"md5": "5ce8f3943e879aeda44e3bed058d203b",
"sha256": "c0faa0cb0e346103f7cb7818bb9929c58ad57ea81f374e67fa7dce1b24780ac6"
},
"downloads": -1,
"filename": "crontabber-0.8.tar.gz",
"has_sig": false,
"md5_digest": "5ce8f3943e879aeda44e3bed058d203b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 43324,
"upload_time": "2014-05-09T19:29:04",
"url": "https://files.pythonhosted.org/packages/48/f5/c1fad994c5608b5529e3eb5aa86367ca8bb25651b2a84d69e8d2cd26586c/crontabber-0.8.tar.gz"
}
],
"0.9": [
{
"comment_text": "",
"digests": {
"md5": "3f84ae6323ca3749464cbf09635277b6",
"sha256": "1a91148e2f15e1a201ef54f93a05a9935c858e168d2ad8060a79b0fb378b09c2"
},
"downloads": -1,
"filename": "crontabber-0.9.tar.gz",
"has_sig": false,
"md5_digest": "3f84ae6323ca3749464cbf09635277b6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 43335,
"upload_time": "2014-06-09T15:56:05",
"url": "https://files.pythonhosted.org/packages/86/74/b4de90869d737da3a27f7d74d9a67ff86790127583f8347aa7d106d8f05f/crontabber-0.9.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "cf1729aec1085a7d818d9cff490e4693",
"sha256": "da4b6d06b4955ed3439a3d5ccc09cb1b3fa644d11d6222c55611c1c64be5323d"
},
"downloads": -1,
"filename": "crontabber-0.18.1-py2-none-any.whl",
"has_sig": false,
"md5_digest": "cf1729aec1085a7d818d9cff490e4693",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 55376,
"upload_time": "2017-03-03T02:13:21",
"url": "https://files.pythonhosted.org/packages/f0/80/2e63b47598a5458ccc4c212dea727f3511399f2af4b00660e4f92da580fb/crontabber-0.18.1-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "f13bd8aa33018e7ccb9fe1f29a30e5d6",
"sha256": "dfe4086a23928647bb021ba0a8bf3e7bb9e86792042506dcca5040061b310d3e"
},
"downloads": -1,
"filename": "crontabber-0.18.1.tar.gz",
"has_sig": false,
"md5_digest": "f13bd8aa33018e7ccb9fe1f29a30e5d6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 51265,
"upload_time": "2017-03-03T02:13:23",
"url": "https://files.pythonhosted.org/packages/b8/54/643a25075bb9ceee2854c5ba723618d13e01142afb18e31039d776b192d2/crontabber-0.18.1.tar.gz"
}
]
}