{ "info": { "author": "Sam Spilsbury", "author_email": "smspillaz@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.1", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Software Development :: Build Tools" ], "description": "# Jobstamps\n\nMake-like caching of idempotent functions for python.\n\nThis module provides memoization of long-running functions which have clearly\ndocumented side effects and do not change their result if their inputs\nhave not changed. It is ideal for tools which analyze text files to produce\nsome output, such as a source code linter. The result of a the function\nis stored in a file which is named by the hash of the function's\narguments.\n\nA separate `jobstamp` command line utility is provided for integration\nwith shell scripts or non-python commands. This utility caches the\nstandard input, output and error of command line invocation and upon\nrunning that utility with the same arguments, the cached output\nis printed and return code returned.\n\n## Status\n\n| Travis CI (Ubuntu) | AppVeyor (Windows) | Coverage | PyPI | Licence |\n|--------------------|--------------------|----------|------|---------|\n|[![Travis](https://img.shields.io/travis/polysquare/jobstamps.svg)](http://travis-ci.org/polysquare/jobstamps)|[![AppVeyor](https://img.shields.io/appveyor/ci/smspillaz/jobstamps.svg)](https://ci.appveyor.com/project/smspillaz/jobstamps)|[![Coveralls](https://img.shields.io/coveralls/polysquare/jobstamps.svg)](http://coveralls.io/polysquare/jobstamps)|[![PyPIVersion](https://img.shields.io/pypi/v/jobstamps.svg)](https://pypi.python.org/pypi/jobstamps)[![PyPIPythons](https://img.shields.io/pypi/pyversions/jobstamps.svg)](https://pypi.python.org/pypi/jobstamps)|[![License](https://img.shields.io/github/license/polysquare/jobstamps.svg)](http://github.com/polysquare/jobstamps)|\n\n## Usage\n\n usage: jobstamp [-h] [--dependencies [PATH [PATH ...]]]\n [--output-files [PATH [PATH ...]]]\n [--stamp-directory DIRECTORY] [--use-hashes]\n\n Cache results from jobs\n\n optional arguments:\n -h, --help show this help message and exit\n --dependencies [PATH [PATH ...]]\n A list of paths which, if more recent than the last\n time this job was invoked, will cause the job to be\n re-invoked.\n --output-files [PATH [PATH ...]]\n A list of expected output paths form this command,\n which, if they do not exist, will cause the job to\n be re-invoked.\n --stamp-directory DIRECTORY\n A directory to store cached results from this\n command.\n If a matching invocation is used and the files\n specified in --dependencies and --output-files are\n up-to-date, then the cached stdout, stderr and\n return code is used and the command is not run\n again.\n --use-hashes Use hash comparison in order to determine if\n dependencies have changed since the last invocation\n of the job. This method is slower, but can\n withstand files being copied or moved.\n\n## API Usage\n\nPython modules can integrate directly with the jobstamp API, which is\nexposed as so:\n\n jobstamp.run(func, *args, **kwargs)\n\nThe default signature allows for the specified function to be applied to\nthe specified args and kwargs. The result of the function will be cached\n(so long as it can be represented in text form and parsed from its\n__repr__) in a stamp file in the temporary files directory. The next time\nthe function is invoked through the `jobstamp` wrapper with the same arguments,\nthe result from the stampfile will be loaded and returned directly.\n\nIf you want to check if a function will be run again without actually running\nit, then, you can use the `out_of_date` function. That function returns\neither `None` or any file which would, by virtue of being out of date,\ncause the job to be re-run.\n\n out_of_date(func, *args, **kwargs)\n\nCertain `kwargs` have special meanings and will be parsed and removed\nfrom the `kwargs` passed to the underlying function. Those are:\n\n- `jobstamps_dependencies`: A list of files for which this function depends\n on to produce its output. If any of these files\n have been updated since the last invocation, the\n function will be run again.\n- `jobstamps_output_files`: A list of files for which this function produces\n as a side-effect. If any of these files don't\n exist, the job gets run again.\n- `jobstamps_cache_output_directory`: Where to store internal cached\n invocation stamps. Usually this\n should be specified on a per-domain\n basis to avoid clashes stamps in the\n global temporary files directory.\n- `jobstamps_method`: Either one of `jobstamp.HashMethod` or\n `jobstamp.MTimeMethod`, defaulting to the latter if\n left unspecified. This option allows the user to pick\n the implementation of determining whether a dependency\n is out of date. `jobstamp.MTimeMethod` uses the\n file-system modification time to determine if a\n dependency is more recent than the last run of the\n function. `jobstamp.HashMethod` uses the SHA1 algorithm\n to store a hash of the file and compares the hash on\n the next invocation. It is slower than\n `jobstamp.MTimeMethod` but handles cases where files\n are copied or otherwise saved and restored between\n invocations.\n\n## Influential environment variables\n\nSpecify `JOBSTAMPS_DISABLED` to always disable caching of jobs on all\ninvocations. Jobs will always be re-run, but existing stamp files\nwon't be removed.\n\nSpecify `JOBSTAMPS_DEBUG` to see when a job was re-run or a cached\nvalue was used.\n\nSpecify `JOBSTAMPS_ALWAYS_USE_HASHES` to force any underlying jobstamp\nlibrary to use `jobstamp.HashMethod` instead of `jobstamp.MTimeMethod`, even\nif the user explicitly asked for the latter. This is useful for CI environments\nwhere the latter method almost never works the way one would expect it to.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/polysquare/jobstamps", "keywords": "development", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "jobstamps", "package_url": "https://pypi.org/project/jobstamps/", "platform": "", "project_url": "https://pypi.org/project/jobstamps/", "project_urls": { "Homepage": "http://github.com/polysquare/jobstamps" }, "release_url": "https://pypi.org/project/jobstamps/0.0.20/", "requires_dist": null, "requires_python": "", "summary": "Cache output of idempotent jobs.", "version": "0.0.20" }, "last_serial": 3603973, "releases": { "0.0.1": [], "0.0.10": [ { "comment_text": "", "digests": { "md5": "6a945c4d0e700a55c623f0e21555a5a5", "sha256": "21c72dfb0ef855668c437c2d0161756681354d1333d61a22c6331f55193bdb0a" }, "downloads": -1, "filename": "jobstamps-0.0.10.tar.gz", "has_sig": false, "md5_digest": "6a945c4d0e700a55c623f0e21555a5a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12015, "upload_time": "2015-07-29T05:00:28", "url": "https://files.pythonhosted.org/packages/98/da/5e9734bc11877f49942f469f28352f4af4003e08f80fd7e11f5f1c9e5f42/jobstamps-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "bbb3c1144d882846ae9783d91358490e", "sha256": "81cade9cf4a5fe6e9ef61c1fccb8ec2ca77a9921b3ca8c190f47795f2be73ee9" }, "downloads": -1, "filename": "jobstamps-0.0.11.tar.gz", "has_sig": false, "md5_digest": "bbb3c1144d882846ae9783d91358490e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12963, "upload_time": "2015-07-29T15:02:16", "url": "https://files.pythonhosted.org/packages/50/a6/26416164e099eaa15612af27b77e087a3ef93c11f4e524f493d3db7099ec/jobstamps-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "ca5382f626a7efd6b390e126e38413ee", "sha256": "9e7fb2f99432d2fc209b1706c836e6090978aacd1eebffb9a2ee2496b207a36d" }, "downloads": -1, "filename": "jobstamps-0.0.12.tar.gz", "has_sig": false, "md5_digest": "ca5382f626a7efd6b390e126e38413ee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12614, "upload_time": "2015-08-02T13:23:23", "url": "https://files.pythonhosted.org/packages/a3/b3/6649b6d7331b0384e360e57bcc772327b0e441145d4da3b63f18e10ebf83/jobstamps-0.0.12.tar.gz" } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "3beb6043b6702ab8a4fd143805b30676", "sha256": "f9db4743beac92d1b1530bc684faa26a6e42d18e3a66114319128fa4524eeb49" }, "downloads": -1, "filename": "jobstamps-0.0.13.tar.gz", "has_sig": false, "md5_digest": "3beb6043b6702ab8a4fd143805b30676", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12620, "upload_time": "2015-08-02T14:31:38", "url": "https://files.pythonhosted.org/packages/ad/cd/435885cdde96c688c4a7ea2702f72c4b1b1581cf3f39c82780b3a41453cc/jobstamps-0.0.13.tar.gz" } ], "0.0.14": [ { "comment_text": "", "digests": { "md5": "e68c17dd11a320af2b5869688dab73b3", "sha256": "9059caf596861d884ee578ce1da48dfabab8d44b3b056b6dc511ec65e5610652" }, "downloads": -1, "filename": "jobstamps-0.0.14.tar.gz", "has_sig": false, "md5_digest": "e68c17dd11a320af2b5869688dab73b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12839, "upload_time": "2015-08-02T15:52:40", "url": "https://files.pythonhosted.org/packages/0e/69/4d57b5ea7a853216b2c3c65be1d596a657d225ecaf40a783727bdf66d8c1/jobstamps-0.0.14.tar.gz" } ], "0.0.15": [ { "comment_text": "", "digests": { "md5": "0e39712d7cb2f14a32f90a6e6ffed757", "sha256": "83a9ba2e4527ba8bfc8d3c420156f8ef80a04c8b9513e6f0ea07ac4d36cca565" }, "downloads": -1, "filename": "jobstamps-0.0.15.tar.gz", "has_sig": false, "md5_digest": "0e39712d7cb2f14a32f90a6e6ffed757", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12837, "upload_time": "2015-08-02T15:58:30", "url": "https://files.pythonhosted.org/packages/00/64/288bc5951f2954f27c8d15e66f4bf3442c830ccf9773c44d5d69ea5fdfc8/jobstamps-0.0.15.tar.gz" } ], "0.0.16": [ { "comment_text": "", "digests": { "md5": "27366af5fe12bc37d7552c7b810ef20a", "sha256": "4b3ee72f9eaf6d2f1dbcce33b2bb82d1231df0b681103417f8bf42b559c40cb4" }, "downloads": -1, "filename": "jobstamps-0.0.16.tar.gz", "has_sig": false, "md5_digest": "27366af5fe12bc37d7552c7b810ef20a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12866, "upload_time": "2015-08-03T04:00:35", "url": "https://files.pythonhosted.org/packages/2d/69/c063b6cba03bd1a285d911fdfb6994e4eac96f335a4bea82ee3fe957960c/jobstamps-0.0.16.tar.gz" } ], "0.0.17": [ { "comment_text": "", "digests": { "md5": "f8602fb2d1e85870f6fbf82c7d050cce", "sha256": "fbfe1ed7c4f89784dae1fc023a5030b50d74840e532b0729dfae71d64c4cc321" }, "downloads": -1, "filename": "jobstamps-0.0.17.tar.gz", "has_sig": false, "md5_digest": "f8602fb2d1e85870f6fbf82c7d050cce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12665, "upload_time": "2016-03-03T13:41:35", "url": "https://files.pythonhosted.org/packages/15/5c/660a24f436abb8e8a28ccf6b283f259967e12ffd1fd51679175fa0702ba2/jobstamps-0.0.17.tar.gz" } ], "0.0.18": [ { "comment_text": "", "digests": { "md5": "1f9ab4b178f0a69ae109ddbe4b980919", "sha256": "7c88277dd9582f2a2e26d3622d06849d3b4deca8be6c4c80c6258bb28613d365" }, "downloads": -1, "filename": "jobstamps-0.0.18.tar.gz", "has_sig": false, "md5_digest": "1f9ab4b178f0a69ae109ddbe4b980919", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12665, "upload_time": "2016-03-06T16:04:28", "url": "https://files.pythonhosted.org/packages/3d/19/7367728fa2705db592a60ebff72f3ad6bf3029ebc6d4fdab26e6cc5a502c/jobstamps-0.0.18.tar.gz" } ], "0.0.19": [ { "comment_text": "", "digests": { "md5": "c91f854c238ab1057d93303b1068b3fe", "sha256": "13391bd51ac557e0be848653576659e58afd2fb85f47bbd677c74bfef54ef3b8" }, "downloads": -1, "filename": "jobstamps-0.0.19.tar.gz", "has_sig": false, "md5_digest": "c91f854c238ab1057d93303b1068b3fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12664, "upload_time": "2016-03-06T23:46:52", "url": "https://files.pythonhosted.org/packages/38/31/ed7a63d6694d0269724d1a95ef470aaf81ad0cba23cd49c5c51c26be8055/jobstamps-0.0.19.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "79646f8df704e40a6f22ee1132b567ac", "sha256": "831a48b892c25b804c5755b07404de1197f710bea072550d0dd5ebdc69ffc40e" }, "downloads": -1, "filename": "jobstamps-0.0.2.tar.gz", "has_sig": false, "md5_digest": "79646f8df704e40a6f22ee1132b567ac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11835, "upload_time": "2015-07-25T09:18:43", "url": "https://files.pythonhosted.org/packages/32/10/534028b207c62a81bfceefcf133ef5890674f4910d1ff8ec10e4814b930c/jobstamps-0.0.2.tar.gz" } ], "0.0.20": [ { "comment_text": "", "digests": { "md5": "b4dbb07121c574dba56d84eb4b37f9c1", "sha256": "11a6ea8021a6f9dc6dba7a31a7917656d1f4d5ef76ed3bb133fce026ace84cf0" }, "downloads": -1, "filename": "jobstamps-0.0.20.tar.gz", "has_sig": false, "md5_digest": "b4dbb07121c574dba56d84eb4b37f9c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12949, "upload_time": "2018-02-22T02:17:43", "url": "https://files.pythonhosted.org/packages/8b/29/f9577fce16b17bd22dc0c17e7e114893f4e7acf8462222ee0c58ed47aa5d/jobstamps-0.0.20.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "44bad195a324ae251074e859c903871a", "sha256": "ceef0091f43f4dacf67cb431b2b18dc1cd48b1b122f6486995eb931f6b5510cb" }, "downloads": -1, "filename": "jobstamps-0.0.3.tar.gz", "has_sig": false, "md5_digest": "44bad195a324ae251074e859c903871a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8008, "upload_time": "2015-07-25T09:19:48", "url": "https://files.pythonhosted.org/packages/54/cd/9ba245135d3a9bc498a074dbfd33b083b9a348d55fe30fea3f9a07ed8030/jobstamps-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "072316c5ce61941bbeb5f90906b19df2", "sha256": "966fb7c4bedb4ed6c667dc05c55e27f84f7254f66e58b58c3dffca9ebeedff98" }, "downloads": -1, "filename": "jobstamps-0.0.4.tar.gz", "has_sig": false, "md5_digest": "072316c5ce61941bbeb5f90906b19df2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8058, "upload_time": "2015-07-25T12:35:53", "url": "https://files.pythonhosted.org/packages/8d/9f/25d1e6d83ecdf46581142f0f0bc7c341083072d0c054ffd288f6f712d787/jobstamps-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "90815561f17e348b212b69c6aff8fbf0", "sha256": "49a80b5ba245d478e937353f15b2e05534a651c263550ae604762f0390869ccd" }, "downloads": -1, "filename": "jobstamps-0.0.5.tar.gz", "has_sig": false, "md5_digest": "90815561f17e348b212b69c6aff8fbf0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11905, "upload_time": "2015-07-25T13:02:46", "url": "https://files.pythonhosted.org/packages/8b/50/5bf326aa0f3718242c973573abd067de04f67b3f20dabf58e4f86de20287/jobstamps-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "43c24cdc9105779f36475bd187e9a2b2", "sha256": "3a9423c1e46ae9b95ad40f27900d2fac7d226da053b581d0d89a3e25ff2f0f31" }, "downloads": -1, "filename": "jobstamps-0.0.6.tar.gz", "has_sig": false, "md5_digest": "43c24cdc9105779f36475bd187e9a2b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12094, "upload_time": "2015-07-25T14:27:17", "url": "https://files.pythonhosted.org/packages/be/fd/ddf912bfb96e866841318a824f0f2fccdfc2ec9e6deb91f1c7cafe184d22/jobstamps-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "ff1c7ca44791025ab80ae0c082af4999", "sha256": "b2c6aaf280c17ff45f1da8e48e367491d35097fb3fa0fe56efd15b124d409d6a" }, "downloads": -1, "filename": "jobstamps-0.0.7.tar.gz", "has_sig": false, "md5_digest": "ff1c7ca44791025ab80ae0c082af4999", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11897, "upload_time": "2015-07-26T09:53:53", "url": "https://files.pythonhosted.org/packages/0d/af/75bbfa0b3473cdeedc02b2b47132ca03b342b08c30fa63000b2a6b876099/jobstamps-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "98cf94ef50dbbbcb45d9708ab394ec1a", "sha256": "294c48699b6bc190cadb260fb16f3d3a20b0b16271e60e96e74c5c255fe2cce3" }, "downloads": -1, "filename": "jobstamps-0.0.8.tar.gz", "has_sig": false, "md5_digest": "98cf94ef50dbbbcb45d9708ab394ec1a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11991, "upload_time": "2015-07-26T14:27:04", "url": "https://files.pythonhosted.org/packages/81/ad/c4c45661b97daa7f998ada9a016cc0ff6cec7bcce0b4070a3a026f0c11a5/jobstamps-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "4f7a83fa8559ffdb756fa0e762389ed9", "sha256": "c80e83440ac537bc8d35d8a2f515d3064d394ba934265a29b03fdebf265e3c76" }, "downloads": -1, "filename": "jobstamps-0.0.9.tar.gz", "has_sig": false, "md5_digest": "4f7a83fa8559ffdb756fa0e762389ed9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12012, "upload_time": "2015-07-29T02:48:13", "url": "https://files.pythonhosted.org/packages/3c/6f/1954be26ab0e22be4b66b6623e576df8bbfc3c16df589665958e817b0464/jobstamps-0.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b4dbb07121c574dba56d84eb4b37f9c1", "sha256": "11a6ea8021a6f9dc6dba7a31a7917656d1f4d5ef76ed3bb133fce026ace84cf0" }, "downloads": -1, "filename": "jobstamps-0.0.20.tar.gz", "has_sig": false, "md5_digest": "b4dbb07121c574dba56d84eb4b37f9c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12949, "upload_time": "2018-02-22T02:17:43", "url": "https://files.pythonhosted.org/packages/8b/29/f9577fce16b17bd22dc0c17e7e114893f4e7acf8462222ee0c58ed47aa5d/jobstamps-0.0.20.tar.gz" } ] }