{ "info": { "author": "Shrubbery Software", "author_email": "team@shrubberysoft.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Django", "License :: OSI Approved :: MIT License" ], "description": "-----\nAbout\n-----\n\n**django-future** is a Django application for scheduling jobs on specified\ntimes.\n\n**django-future** allows you to schedule invocation of callables at a given\ntime. The job queue is stored in the database and can be managed through the\nadmin interface. Queued jobs are run by invoking an external django management\ncommand.\n\n-----\nUsage\n-----\n\nYou need to have **django-future** installed. A recent version should be\navailable from PyPI.\n\nTo schedule jobs from your code, use the ``schedule_job`` function::\n\n >>> from django_future import schedule_job\n >>> import datetime\n\n >>> schedule_job(datetime.datetime(2010, 10, 10),\n ... 'myproject.myapp.handlers.dosomething')\n\n------------\nRunning jobs\n------------\n\nScheduled jobs will not start automagically. The job queue must regularly\nbe processed by invoking the Django management command\n``runscheduledjobs``. You will probably want to run this command regularly,\nperhaps in a cron job, to ensure that scheduled jobs are run in a timely\nmanner.\n\nWhen the job processor is started, it checks for concurrently active job\nprocessors. If any active jobs are found, the new instance of the job\nprocessor will not continue and will raise an error, so you do not need to\nworry about overlapping parallel job runs.\n\nEach job is run in a separate database transaction. If the handler raises\nan error, the transaction is rolled back.\n\nBy default, job entries for completed jobs are marked as finished, but not\ndeleted from the database. If you do not want to keep them, use the ``-d``\nparameter to ``runscheduledjobs`` and they will be deleted upon successful\ncompletion.\n\nIf a job handler raises an error, the queue processor will abort and\nshow the traceback. If you do not want to abort the processing in such a case\nuse the ``-i`` parameter. Either way, if an exception occurs, the traceback\nwill be stored on the job entry in the database.\n\nIf a job returns a value, the unicode representation of that value will also be\nstored on the job entry in the database.\n\n----------------\nScheduling times\n----------------\n\nThere are several ways to indicate the time the job should be executed.\nYou can use a straight datetime (as above), but you can also specify an offset\nfrom the present. The offset can be a specified as a timedelta::\n\n >>> schedule_job(datetime.timedelta(days=5), 'myproject.myapp.x')\n\nor it can be a string::\n\n >>> schedule_job('5d', 'myproject.myapp.x')\n\nAn expiry time (one week by default) may also be specified so that old jobs\nwill not be run by accident.\n\n::\n\n >>> schedule_job('5d', 'myproject.myapp.x', expires='7d')\n\nThe expiry date is calculated relative to the scheduled time.\n\n----------\nParameters\n----------\n\nYou can pass parameters to jobs::\n\n >>> schedule_job('5d', 'myproject.myapp.x',\n ... args=[1, 2], kwargs={'foo': 'bar'})\n\nThe parameters will be passed on to the callable. Note that the parameters\nhave to be picklable.\n\nYou can also associate a job with a database object::\n\n >>> schedule_job('5d', 'myproject.myapp.x',\n ... content_object=some_model_instance)\n\nIf specified, the content object will be passed in to the callable as the first\nparameter.\n\nIf you decorate your handler using ``job_as_parameter``, the active job will be\npassed as a parameter. Example::\n\n >>> from django_future import job_as_parameter\n\n >>> @job_as_parameter\n ... def handler(job):\n ... do_stuff()\n\n------------\nRescheduling\n------------\n\nSome jobs may need to be repeated. You can achieve this by scheduling a new\njob in the handler of a job, but it is more convenient to use the ``reschedule``\nmethod on jobs. ``reschedule`` has the same signature as ``schedule_job``, but\ncopies attributes of the current job.\n\n::\n\n >>> @job_as_parameter\n ... def handler(job, n=5):\n ... do_something()\n ... job.reschedule('3d', kwargs={'n': 6})\n\nWhen you pass a relative time value to ``reschedule``, the new scheduled time\nis calculated by adding the offset to the *scheduled time* of the original job,\nnot to the time the job was actually executed.\n\n--------\nFeedback\n--------\n\nThere is a `home page `_ with\ninstructions on how to access the code repository.\n\nSend feedback and suggestions to team@shrubberysoft.com.\n\n-------\nChanges\n-------\n\nChanges in version 0.2.3\n========================\n\n* Fixed a NameError on `ignore_errors` (thanks doreilly@github).\n\nChanges in version 0.2.2\n========================\n\n(thanks to Jannis Leidel!)\n\n* Marked strings for translation.\n* Added German translation.\n* Raise a nicer error in case a job is running.\n* Use admin fieldset.\n\n\nChanges in version 0.2.1\n========================\n\n* Fixed a bug in start_scheduled_jobs parameters (thanks to Maciek Szczesniak).\n\n\nChanges in version 0.2.0\n========================\n\n* Store the string value returned by the job.\n\n\nChanges in version 0.1.9\n========================\n\n* When rescheduling, the new date is calculated from the scheduled date of the\n current job rather than the start of the actual run.\n* Implemented check for concurrent job processors properly.\n* Status of expired jobs is now set to 'expired'.\n\n\nChanges in version 0.1.8\n========================\n\n* Updated admin interface: colored status, filtering by date.\n* Reused django-picklefield implementation for storing job arguments instead of\n the homebrewn pickle field.\n\n\nChanges in version 0.1.7\n========================\n\n* Doctests are now part of the source distribution.\n\n\nChanges in version 0.1.6\n========================\n\n* Minor packaging and formatting changes.\n\n\nChanges in version 0.1.5\n========================\n\n* Basic protection against concurrent job processors.\n* Added ``--ignore-errors`` option.\n\n\nChanges in version 0.1.4\n========================\n\n* Transaction support.\n* Added ``-d`` option to ``runscheduledjobs`` command.\n* Better test coverage.\n\n\nChanges in version 0.1.3\n========================\n\n* Fix pickled field implementation.\n* Job rescheduling made easy.\n\n\nChanges in version 0.1.1\n========================\n\n* Renamed to ``django-future``.\n\n\nChanges in version 0.1\n======================\n\n* First public release.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/shrubberysoft/django-future", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "django-future", "package_url": "https://pypi.org/project/django-future/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/django-future/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/shrubberysoft/django-future" }, "release_url": "https://pypi.org/project/django-future/0.2.3/", "requires_dist": null, "requires_python": null, "summary": "Scheduled jobs in Django", "version": "0.2.3" }, "last_serial": 789712, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "289b770ba0e1f0fc684ad45416da98a5", "sha256": "800214f22962e49da9d5c15ce805d0d2617b0d7ab8d0b5612d45720198abcad4" }, "downloads": -1, "filename": "django-future-0.1.tar.gz", "has_sig": false, "md5_digest": "289b770ba0e1f0fc684ad45416da98a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3798, "upload_time": "2009-10-08T13:25:03", "url": "https://files.pythonhosted.org/packages/14/3c/5fbb42d29f22e343afb9cb8fba7dae11dc9f8f743e1dc3d33ec984f3f50c/django-future-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "611fdf80ea4a2c6e14477a56a0ea1ebc", "sha256": "7b83798260495e26908d5cbdfef8d86b390cb907009be1cda808fbc29b780b44" }, "downloads": -1, "filename": "django-future-0.1.1.tar.gz", "has_sig": false, "md5_digest": "611fdf80ea4a2c6e14477a56a0ea1ebc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5761, "upload_time": "2009-10-08T17:00:24", "url": "https://files.pythonhosted.org/packages/ad/93/5d355c31c28e048a488a0eb3a94046e163edda5b9206d7a51d3121016600/django-future-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "a78ad03654f0248362328a8fefe33d5c", "sha256": "bc689d4e735272b46890e4ef0c54fea6929c86bbe0c4ce421993ba89806bd8e8" }, "downloads": -1, "filename": "django-future-0.1.2.tar.gz", "has_sig": false, "md5_digest": "a78ad03654f0248362328a8fefe33d5c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6088, "upload_time": "2009-10-08T17:30:52", "url": "https://files.pythonhosted.org/packages/58/48/3da2d8b01b33128d6613ca1a1a6078ee0ecd177b64becd4a2c667a8928c5/django-future-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "7b0b52e7ac0fb4d6d69ca77ebf138ab9", "sha256": "a97bf232f27a71a709f09db97c621391ad9ef42fe61168d168d10dce4c4762d4" }, "downloads": -1, "filename": "django-future-0.1.3.tar.gz", "has_sig": false, "md5_digest": "7b0b52e7ac0fb4d6d69ca77ebf138ab9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6138, "upload_time": "2009-10-08T23:41:57", "url": "https://files.pythonhosted.org/packages/a7/3a/6da66126c2dbff08fabf0639be3c486d861d660fa19d445a78f7b0d3b171/django-future-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "ec69fc866f37589422e19c1234849d2c", "sha256": "cc159e04220b04eb1e15c3243d18bd81393a668c118c4c414c21f4079cc7502f" }, "downloads": -1, "filename": "django-future-0.1.4.tar.gz", "has_sig": false, "md5_digest": "ec69fc866f37589422e19c1234849d2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6852, "upload_time": "2009-10-09T00:38:17", "url": "https://files.pythonhosted.org/packages/88/ed/49b9ac601471b06bb5122868252a3e64aee2ccbf5fdffc1a06d9447569c9/django-future-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "0dbc30c424edf57567389336a838a9bd", "sha256": "bc408338058cd4d4e93fc3105aaba849ba5b4716615241520e08c1403a311cc4" }, "downloads": -1, "filename": "django-future-0.1.5.tar.gz", "has_sig": false, "md5_digest": "0dbc30c424edf57567389336a838a9bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7124, "upload_time": "2009-10-09T01:09:07", "url": "https://files.pythonhosted.org/packages/07/fd/ce36e41173a56b163f7e7a317cfda00172174920f294ba7243e6bc0d0682/django-future-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "6ec271bc107f0a22902d2428ba5e8aa3", "sha256": "22bc9037846bd7187cb96bf56c545e367df050d050f82f360260c60fc93d85b2" }, "downloads": -1, "filename": "django-future-0.1.6.tar.gz", "has_sig": false, "md5_digest": "6ec271bc107f0a22902d2428ba5e8aa3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6622, "upload_time": "2009-10-09T11:37:45", "url": "https://files.pythonhosted.org/packages/2d/72/f07381b1793af7df8e7c795b6c02576bc87142a3b7ac9ff1641a97139ebd/django-future-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "528b8903504cf07d8894627fd658a1fa", "sha256": "2d612c7e38bb29b11e63343371bb672025df8ac3c4a6a521a95a169544941b62" }, "downloads": -1, "filename": "django-future-0.1.7.tar.gz", "has_sig": false, "md5_digest": "528b8903504cf07d8894627fd658a1fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7303, "upload_time": "2009-10-09T13:59:25", "url": "https://files.pythonhosted.org/packages/b2/b5/918e2f730010e8a12904e2630f4e0f15187b2da156446d4751851f565520/django-future-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "96da134096bc2ea2ed66ab5498ca9d2d", "sha256": "4dba03c91a5dc8d7d2fcd64fa880d444b7d77c82123663c43a46b81c6906c08b" }, "downloads": -1, "filename": "django-future-0.1.8.tar.gz", "has_sig": false, "md5_digest": "96da134096bc2ea2ed66ab5498ca9d2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7642, "upload_time": "2009-10-09T15:26:48", "url": "https://files.pythonhosted.org/packages/43/f2/1af7793a6af4fb4ba0a91a030be343d9965b0bb777bfc41ecc3e31a65aa4/django-future-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "495eac90a679d096a98ea9391ab216d4", "sha256": "52093868f17d4aee053cbe77995d53734b14085bb836f074a7918156fa6e9bb6" }, "downloads": -1, "filename": "django-future-0.1.9.tar.gz", "has_sig": false, "md5_digest": "495eac90a679d096a98ea9391ab216d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7844, "upload_time": "2009-10-09T17:39:13", "url": "https://files.pythonhosted.org/packages/37/2b/b41aff45617be706434e45dfe0712566ba1ac68506b182a60f600d9fc5f4/django-future-0.1.9.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "947edb5fc169a61d81d4558e9ac7941c", "sha256": "0e57aa6032a0ea309b69604797fa00977ecec974c32ca8ac5883ad91c9d540a2" }, "downloads": -1, "filename": "django-future-0.2.1.tar.gz", "has_sig": false, "md5_digest": "947edb5fc169a61d81d4558e9ac7941c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8373, "upload_time": "2010-01-10T23:48:21", "url": "https://files.pythonhosted.org/packages/3d/61/e0c7a5cc41717be8ab81cc46976b32255a6d1f401f6b389cd59e3e0541c0/django-future-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "437af2eb48ed32b67885c1f138818143", "sha256": "5a3eee84fe74d98fbda2b15e3a001500bbd9a6a76c0a3d9413838a5a653dadd4" }, "downloads": -1, "filename": "django-future-0.2.2.tar.gz", "has_sig": false, "md5_digest": "437af2eb48ed32b67885c1f138818143", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12908, "upload_time": "2010-08-31T15:27:01", "url": "https://files.pythonhosted.org/packages/20/9b/9dbffaa32cc5a5b05f4cfadaf86a85957d4bc4993158545870d127bc5442/django-future-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "75b09c4f08f46995f22a8061a217a4ef", "sha256": "936f70ea5e0a519e3f8c70f8c2cf72824e010a6e4ea3f2f1011e945b605d7b71" }, "downloads": -1, "filename": "django-future-0.2.3.tar.gz", "has_sig": false, "md5_digest": "75b09c4f08f46995f22a8061a217a4ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12975, "upload_time": "2010-09-08T14:30:40", "url": "https://files.pythonhosted.org/packages/8f/79/653f3edf565fd913e2e1a394c227474de8bc815fc8b679ce5c71a6c4b798/django-future-0.2.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "75b09c4f08f46995f22a8061a217a4ef", "sha256": "936f70ea5e0a519e3f8c70f8c2cf72824e010a6e4ea3f2f1011e945b605d7b71" }, "downloads": -1, "filename": "django-future-0.2.3.tar.gz", "has_sig": false, "md5_digest": "75b09c4f08f46995f22a8061a217a4ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12975, "upload_time": "2010-09-08T14:30:40", "url": "https://files.pythonhosted.org/packages/8f/79/653f3edf565fd913e2e1a394c227474de8bc815fc8b679ce5c71a6c4b798/django-future-0.2.3.tar.gz" } ] }