{ "info": { "author": "Matt Ruffalo", "author_email": "matt.ruffalo@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3 :: Only", "Topic :: Software Development" ], "description": "Data path utilities\n===================\n\nOverview\n--------\n\nOver the past few years, I've organically standardized on a structure for the\ncode I write for my research. I've preferred to have each step of an analysis\npipeline implemented as a standalone script, though usually with functions and\nclasses that are importable in other modules -- such scripts often load some\ndata, perform some processing, save that processed data, save plots/figures,\netc.\n\nThis package provides utilities for creating and finding labeled paths, which\nare suitable for storing data and plots. It's often important to be able to\ncompare results between different versions of some analysis step, so these\npaths are timestamped to prevent repeated runs of a script from overwriting\nprevious results.\n\nThis package differentiates between \"data\" paths, to save things which might\nbe loaded by another script at a further stage of an analysis pipeline, and\n\"output\" paths, for plots/etc. which are only intended for people to examine.\n\nThe main interface to this code is through the complementary functions\n``create_data_path`` and ``find_newest_data_path``, which each take a single\n\"label\" string argument and return a ``pathlib.Path``. These can be used as\nfollows::\n\n input_path = find_newest_data_path('previous_script')\n with open(input_path / 'filename') as f:\n data = load(f)\n\n processed_data = do_something_with(data)\n\n data_path = create_data_path('name_of_this_script')\n with open(data_path / 'whatever_filename', 'w') as f:\n save(processed_data, f)\n\nOutput paths are likewise created by ``create_output_path``. It is recommended\nthat scripts which call ``create_data_path`` use the name of the script as the\n\"label\" argument, but this is not enforced -- one can include parameter values\nor anything else relevant.\n\nAdditional functionality\n------------------------\n\nWith these calls to ``create_data_path`` and ``find_newest_data_path``, one\ncan then model a set of such scripts as a directed graph, with nodes\nrepresenting both scripts and data paths, and edges denoting a \"requires\"\nrelationship, e.g. \"script X requires data label Y, which is produced by\nscript Z\". This package also contains standalone scripts (which require the\npackage NetworkX) that parse the Python files in a certain project, construct\nthis graph, and use this graph to provide other useful functionality in the\nform of three standalone executable scripts:\n\n* ``dependency_graph``: Plots this graph, using the ``pydotplus`` package, and\n a call to the ``dot`` GraphViz executable.\n\n* ``list_script_dependencies``: takes a script filename as a command-line\n argument, and produces an ordered list of the data/script dependencies of\n that script by performing a topological sort on the subset of the graph\n reachable from that script. Useful for answering questions like \"what should\n I run, in what order, to have everything in place to run this script of\n interest?\" Note that this requires that the subgraph reachable from a script\n node be acyclic (which it should be anyway).\n\n* ``archive_script_data_dependencies``: takes a script filename as a\n command-line argument, and identifies all data dependencies of that script.\n Archives all files under those data paths to a zip file which can easily be\n transported between machines.\n\nRequirements\n------------\n\nPython 3.6 or newer.\n\nThings listed under \"Additional functionality\" require NetworkX and pydotplus.\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mruffalo/data-path-utils", "keywords": "data-dependencies development", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "data-path-utils", "package_url": "https://pypi.org/project/data-path-utils/", "platform": "", "project_url": "https://pypi.org/project/data-path-utils/", "project_urls": { "Homepage": "https://github.com/mruffalo/data-path-utils" }, "release_url": "https://pypi.org/project/data-path-utils/0.8.1/", "requires_dist": null, "requires_python": "", "summary": "Management of scripts that produce/consume data with specific labels", "version": "0.8.1" }, "last_serial": 4098875, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "fda91f1493662c5ec296044ddf794174", "sha256": "e7f0272519a5ee99707c9194c058498ffa257a0d5324aadb2e97e49babc51fd5" }, "downloads": -1, "filename": "data_path_utils-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "fda91f1493662c5ec296044ddf794174", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 11027, "upload_time": "2017-07-31T17:53:11", "url": "https://files.pythonhosted.org/packages/b4/72/9e27b4a7c070b9757481415e2affdf6bcb50e4ae288e4379922ea4bf38f5/data_path_utils-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "427c6fa7912907f66ff4ea40ddc62fa1", "sha256": "d4143fd3eec15caa748a59cd09d95abde75ff8bc97d32f95ff31aa33a92347e3" }, "downloads": -1, "filename": "data-path-utils-0.1.tar.gz", "has_sig": false, "md5_digest": "427c6fa7912907f66ff4ea40ddc62fa1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7088, "upload_time": "2017-07-31T17:53:13", "url": "https://files.pythonhosted.org/packages/a1/8e/796509eb3370a360f739ccec695e59bef6341d7abfc699ba3a1a1f31e0dd/data-path-utils-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "5227ccbcdc88d9fd86c4760f922f4a6a", "sha256": "c4721b183afe036726a23ae5f16ebc2947c364d5be4b0fb5616ea7f086bde42b" }, "downloads": -1, "filename": "data_path_utils-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "5227ccbcdc88d9fd86c4760f922f4a6a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 11331, "upload_time": "2017-08-01T15:59:09", "url": "https://files.pythonhosted.org/packages/99/e7/7c9e6e5b869a358297d008f80084cb56fd4ce497bf35afdf08b5bb5b63c6/data_path_utils-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8d5554177b33e601e2d03fabb45d9ee8", "sha256": "49dce8febe9cbf749d5ddc25748dbff49de2835b03f96de32e4838f2bf1cff4b" }, "downloads": -1, "filename": "data-path-utils-0.2.tar.gz", "has_sig": false, "md5_digest": "8d5554177b33e601e2d03fabb45d9ee8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7256, "upload_time": "2017-08-01T15:59:10", "url": "https://files.pythonhosted.org/packages/1f/fd/ff2d704a4585c56554a986466647f5b201f240516d4cf2fb568501227114/data-path-utils-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "67cf1bb0c0006e6bde9fb8be65987b22", "sha256": "49e911836fd4e0301f02e1739b455438f3065a599769f960601d78ce932fd893" }, "downloads": -1, "filename": "data_path_utils-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "67cf1bb0c0006e6bde9fb8be65987b22", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 11995, "upload_time": "2017-08-02T16:21:53", "url": "https://files.pythonhosted.org/packages/6f/c9/0e7246ba1b4e3aa4b84fa2edccb789a9cdce06d7655dcddbb445162219b7/data_path_utils-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0e4e4a740d04ad3a3bea9363aa966867", "sha256": "07c3754e3b03ef1cbb978a978fe38ddf74222139440d78103ed65dc0841b6695" }, "downloads": -1, "filename": "data-path-utils-0.3.tar.gz", "has_sig": false, "md5_digest": "0e4e4a740d04ad3a3bea9363aa966867", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7509, "upload_time": "2017-08-02T16:21:54", "url": "https://files.pythonhosted.org/packages/ae/11/bf96ede4abfd1d546bd9ef65131ac0babde69ce77f1fb2945ba67efb660e/data-path-utils-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "8d41b5c68fdad6a7899ca4bcd4232500", "sha256": "1f59cd77d8e060554db555ce8f47dbce7895edae50ca2daa486802ea89830500" }, "downloads": -1, "filename": "data_path_utils-0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "8d41b5c68fdad6a7899ca4bcd4232500", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 12051, "upload_time": "2017-08-10T19:23:13", "url": "https://files.pythonhosted.org/packages/03/9b/3b526ce4f700e8fbd76d59f5a4b21eb15f7b71f2e960d51ee094d6878760/data_path_utils-0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2d5aba5638e4b4bb3b63867b3ffbd5b8", "sha256": "b3f8a376d67226680348eed5f09a19269512ca362305a1a55ad7df29b6ecab62" }, "downloads": -1, "filename": "data-path-utils-0.4.tar.gz", "has_sig": false, "md5_digest": "2d5aba5638e4b4bb3b63867b3ffbd5b8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7545, "upload_time": "2017-08-10T19:23:16", "url": "https://files.pythonhosted.org/packages/53/06/d4fc2eec94b93d5549fed7990e2b7a5bfea006aa73fa2073a2b2bd3fa2a8/data-path-utils-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "f55d69ea40df211a5a47330e6cd90efd", "sha256": "9915da41076a53130773bb245ae3548beec0ebbca3f3bc5a33b12d4c0aca894d" }, "downloads": -1, "filename": "data_path_utils-0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "f55d69ea40df211a5a47330e6cd90efd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 12141, "upload_time": "2017-08-10T20:20:51", "url": "https://files.pythonhosted.org/packages/fc/39/34e51e03f20381f9b25ca1918d4f1b97d2248a0df8aeac759eb00402a2c9/data_path_utils-0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e58d1780abca541046ca57a878187b08", "sha256": "8af502e055fa4b88c26b7e283459b33da3f3a154d1096472ef2521d106e79e09" }, "downloads": -1, "filename": "data-path-utils-0.5.tar.gz", "has_sig": false, "md5_digest": "e58d1780abca541046ca57a878187b08", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7611, "upload_time": "2017-08-10T20:20:52", "url": "https://files.pythonhosted.org/packages/d3/26/d7b59993c71b970299b4c7597318dcaf1925aff165606068b7cdd5e60141/data-path-utils-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "bfe8188f085fb334b55a568906897f34", "sha256": "824e663bbfc7235e8ce5a291b53e5183218c424deb2b53d2b5ea68dea7b14e86" }, "downloads": -1, "filename": "data_path_utils-0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "bfe8188f085fb334b55a568906897f34", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 12667, "upload_time": "2017-09-06T18:59:32", "url": "https://files.pythonhosted.org/packages/7b/7c/c9f0c2ded9d42d77b5e5c1be0b1aeb484b711500bbea938963db8e1b7ebb/data_path_utils-0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b3ac72d81008c034ead7b4b6ceeb27e3", "sha256": "0b39e51dfb9144d45c72463e3f7e1112141c813e813661ff600a7b5691118c67" }, "downloads": -1, "filename": "data-path-utils-0.6.tar.gz", "has_sig": false, "md5_digest": "b3ac72d81008c034ead7b4b6ceeb27e3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8087, "upload_time": "2017-09-06T18:59:35", "url": "https://files.pythonhosted.org/packages/a3/89/d95898b0499bf4edc36bec90f35aa0820cae7b335198624d3d937fb84e33/data-path-utils-0.6.tar.gz" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "a3c31ac41239cf248f6728b73c704345", "sha256": "6c4e741cc094dee81afc42c07d63266aea8b83fb7f08e300ebf09be9fedea072" }, "downloads": -1, "filename": "data_path_utils-0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "a3c31ac41239cf248f6728b73c704345", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 12700, "upload_time": "2018-02-02T18:51:22", "url": "https://files.pythonhosted.org/packages/b4/9f/ca2dd4abcccc8e798f7a6cf7bd817bed017f7301ed7c5b94e0cbd8f985bf/data_path_utils-0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bfd24ae1b16c656f71c7fa9fe20b40d0", "sha256": "250d6f61d556289652cc4714d566c4385148719c37ca95f4a2cf1be45b473144" }, "downloads": -1, "filename": "data-path-utils-0.7.tar.gz", "has_sig": false, "md5_digest": "bfd24ae1b16c656f71c7fa9fe20b40d0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8116, "upload_time": "2018-02-02T18:51:23", "url": "https://files.pythonhosted.org/packages/e1/b8/19e7e9745c387340a5a86a3ebad7cf8ab779aeb98180ba4536641bfb55fc/data-path-utils-0.7.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "8ea7df955e27d8a9dde8a15a5243db3a", "sha256": "3c0d5cb32279c186c22266d2da3e1080cd8fdc20adb4f17ef30fcd9932291814" }, "downloads": -1, "filename": "data_path_utils-0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "8ea7df955e27d8a9dde8a15a5243db3a", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 10158, "upload_time": "2018-07-24T23:29:16", "url": "https://files.pythonhosted.org/packages/f6/d0/2e476cca76a24073ac54859c9843f25dc682fdf4e7ccdfdde5c5d55c9c01/data_path_utils-0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "870c15595d82ec89670b22da3ee43a6b", "sha256": "46e14dfaea2e55882dd3b5a279559f7d823ce400ad1a17bc021be5f145309156" }, "downloads": -1, "filename": "data-path-utils-0.8.tar.gz", "has_sig": false, "md5_digest": "870c15595d82ec89670b22da3ee43a6b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8148, "upload_time": "2018-07-24T23:29:14", "url": "https://files.pythonhosted.org/packages/bd/f9/bfec816f02a3d292795314086c06b13d313ad297c163902ab6870c0d7c15/data-path-utils-0.8.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "c0adbd95266bb96bdd5bf54eb65e091e", "sha256": "4b5c92d64b027ae72df54ceb910ed842a1e461f23ed4f4788879782a9999580d" }, "downloads": -1, "filename": "data_path_utils-0.8.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c0adbd95266bb96bdd5bf54eb65e091e", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 10181, "upload_time": "2018-07-24T23:31:31", "url": "https://files.pythonhosted.org/packages/ca/27/c84298d3d2726d9e13dfa9a6b636e0a044ba241bb0873f3c4ab101c34700/data_path_utils-0.8.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c1b1e5d66ebadd08ea802fd4515d7672", "sha256": "3c60e0bd06362d213218704d4a302d33ebfdfcf630868b4e9edc48fcda612ea0" }, "downloads": -1, "filename": "data-path-utils-0.8.1.tar.gz", "has_sig": false, "md5_digest": "c1b1e5d66ebadd08ea802fd4515d7672", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8163, "upload_time": "2018-07-24T23:31:30", "url": "https://files.pythonhosted.org/packages/59/20/7682389c67af666dd75f8be0c13925609d8389ec5c8aa613adb5fb4b174e/data-path-utils-0.8.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c0adbd95266bb96bdd5bf54eb65e091e", "sha256": "4b5c92d64b027ae72df54ceb910ed842a1e461f23ed4f4788879782a9999580d" }, "downloads": -1, "filename": "data_path_utils-0.8.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c0adbd95266bb96bdd5bf54eb65e091e", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 10181, "upload_time": "2018-07-24T23:31:31", "url": "https://files.pythonhosted.org/packages/ca/27/c84298d3d2726d9e13dfa9a6b636e0a044ba241bb0873f3c4ab101c34700/data_path_utils-0.8.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c1b1e5d66ebadd08ea802fd4515d7672", "sha256": "3c60e0bd06362d213218704d4a302d33ebfdfcf630868b4e9edc48fcda612ea0" }, "downloads": -1, "filename": "data-path-utils-0.8.1.tar.gz", "has_sig": false, "md5_digest": "c1b1e5d66ebadd08ea802fd4515d7672", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8163, "upload_time": "2018-07-24T23:31:30", "url": "https://files.pythonhosted.org/packages/59/20/7682389c67af666dd75f8be0c13925609d8389ec5c8aa613adb5fb4b174e/data-path-utils-0.8.1.tar.gz" } ] }