{ "info": { "author": "Max Zheng", "author_email": "maxzheng.os@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "datarunner\n==========\n\nA simple data workflow runner that helps you write better ETL scripts using reusable code pieces.\n\nQuick Start Tutorial\n====================\n\nInstall using pip::\n\n pip install datarunner\n\nThen write a few steps (functions, classes, etc) that can be called, pass to `datarunner.Workflow`, and call run():\n\n.. code-block:: python\n\n from datarunner import Workflow, Step\n\n\n def setup():\n print('Ready to go!')\n\n def extract():\n return 'data'\n\n def transform(data):\n return data + ' using reusable code pieces, like Lego.'\n\n class Load(Step):\n \"\"\" Sub-class Step to customize the callable \"\"\"\n def __init__(self, destination):\n super().__init__()\n self.destination = destination\n\n def __str__(self):\n return f'Load(\"{self.destination}\")'\n\n def run(self, data):\n print(f'Loading {data}')\n\n flow = Workflow(setup,\n table_name1=[extract, transform, Load('example')])\n flow.run()\n\nIt produces the following output::\n\n setup\n Ready to go!\n\n table_name1\n --------------------------------------------------------------------------------\n extract\n >> transform\n >> Load(\"example\")\n Loading data using reusable code pieces, like Lego.\n\nWe can also use `>>` operator to convey the same flow:\n\n.. code-block:: python\n\n flow = (Workflow()\n >> setup\n\n << 'table_name1'\n >> extract >> transform >> Load('example'))\n flow.run()\n\nTo make the workflow more flexible (e.g. write to different dataset), use templates to provide some values at run time:\n\n.. code-block:: python\n\n class Load(Step):\n TEMPLATE_ATTRS = ['destination']\n\n \"\"\" Sub-class Step to customize the callable \"\"\"\n def __init__(self, destination):\n super().__init__()\n self.destination = destination\n\n def __str__(self):\n return f'Load(\"{self.destination}\")'\n\n def run(self, data):\n print(f'Loading {data}')\n\n flow = Workflow() >> extract >> transform >> Load('{dataset}.table_name1')\n flow.run(dataset='staging')\n\nIt produces the following output::\n\n extract\n >> transform\n >> Load(\"staging.table_name1\")\n Loading data using reusable code pieces, like Lego.\n\nAnd finally, to test the workflow::\n\n def test_flow():\n assert \"\"\"\\\n extract\n >> transform\n >> Load(\"{dataset}.table_name1\")\"\"\" == str(flow)\n\nWorkflow Layout\n===============\n\nA recommended file layout for your ETL package::\n\n my_package/steps/__init__.py # Generic / common steps\n my_package/steps/bigquery.py # Group of steps for a specific service, like BigQuery.\n my_package/datasource1.py # ETL workflow for a single data source with steps specifc for the source\n my_package/datasource2.py # ETL workflow for another data source\n\nInside of `datasource*.py`, it should define `flow = Workflow(...)`, but not run. From your ETL script, it should call\n`flow.run()` to run the workflow. This ensures the workflow is properly constructed when imported and can be used for\ntesting without running it.\n\nLinks & Contact Info\n====================\n\n| PyPI Package: https://pypi.org/project/datarunner/\n| GitHub Source: https://github.com/maxzheng/datarunner\n| Report Issues/Bugs: https://github.com/maxzheng/datarunner/issues\n|\n| Creator: https://www.linkedin.com/in/maxzheng\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/maxzheng/datarunner", "keywords": "run call code workflow etl extract transform load", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "datarunner", "package_url": "https://pypi.org/project/datarunner/", "platform": "", "project_url": "https://pypi.org/project/datarunner/", "project_urls": { "Homepage": "https://github.com/maxzheng/datarunner" }, "release_url": "https://pypi.org/project/datarunner/1.2.5/", "requires_dist": null, "requires_python": ">=3.6", "summary": "A simple data workflow runner that helps you write better ETL scripts using reusable code pieces.", "version": "1.2.5", "yanked": false, "yanked_reason": null }, "last_serial": 8236456, "releases": { "1.1.1": [ { "comment_text": "", "digests": { "md5": "92f7fd9a343593baebdc8a2ba1976ba8", "sha256": "9117ce844b95640cc9c39115253b0ec87741825a6fca6c21f40d23bff7515f60" }, "downloads": -1, "filename": "datarunner-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "92f7fd9a343593baebdc8a2ba1976ba8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4199, "upload_time": "2019-10-27T15:10:46", "upload_time_iso_8601": "2019-10-27T15:10:46.368532Z", "url": "https://files.pythonhosted.org/packages/42/7a/b74fb16e570e93039eb33a3be66535ac7fa65f5105fc3246e956089d6cbb/datarunner-1.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "97cf3c64fafe58a990ee31736b2f0d8e", "sha256": "9890fa207bf4c30b77845487d95e4ae727422670a8cab979d0a1a8c57ed6c54b" }, "downloads": -1, "filename": "datarunner-1.1.1.tar.gz", "has_sig": false, "md5_digest": "97cf3c64fafe58a990ee31736b2f0d8e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6975, "upload_time": "2019-10-27T15:10:48", "upload_time_iso_8601": "2019-10-27T15:10:48.535234Z", "url": "https://files.pythonhosted.org/packages/d5/27/e34ef4b3cfd568f319c899ca685c35009dfd6445548ce4b94a2fb9a51a99/datarunner-1.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "af1597e0d5f528e3f73891bf1406e54f", "sha256": "d48d6d656baee0c8860785ca083d31caa4b3c341958a19a27e84dc3c87d34d04" }, "downloads": -1, "filename": "datarunner-1.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "af1597e0d5f528e3f73891bf1406e54f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4489, "upload_time": "2019-11-11T03:56:49", "upload_time_iso_8601": "2019-11-11T03:56:49.706421Z", "url": "https://files.pythonhosted.org/packages/2c/01/5b928f1db6ab90009a77219a9e734e4269ae88f5647a542b3ee4f139769f/datarunner-1.1.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7f7914d13235393b03445380145a7fe0", "sha256": "43f6038972d8cca20f61baea69a7f23b57c5bf8f780d5bca4bc2e68c52ee507e" }, "downloads": -1, "filename": "datarunner-1.1.2.tar.gz", "has_sig": false, "md5_digest": "7f7914d13235393b03445380145a7fe0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7405, "upload_time": "2019-11-11T03:56:51", "upload_time_iso_8601": "2019-11-11T03:56:51.309574Z", "url": "https://files.pythonhosted.org/packages/41/1b/5224391c7dbd4ab14e051d6bcfc8eea4e70adf856db069e9634bca8b309b/datarunner-1.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "f8452217103bc2a624c3f49053344890", "sha256": "8e236d18d766cded8ff2c38270fb51c04f400ab6303db550b0c46c826be40b05" }, "downloads": -1, "filename": "datarunner-1.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "f8452217103bc2a624c3f49053344890", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4695, "upload_time": "2019-11-11T04:40:54", "upload_time_iso_8601": "2019-11-11T04:40:54.740453Z", "url": "https://files.pythonhosted.org/packages/75/f5/03c4e6382a8d904cede0ad38c264ca0ba21df29882af8cd1d5fbcd028455/datarunner-1.1.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "715bb05bd95ebf51a260654c7c6656e4", "sha256": "6e7863c05d1d9440cdb2903fbc7ffe81b0b4a2785e241afdfe8c8b12d85d6bbb" }, "downloads": -1, "filename": "datarunner-1.1.3.tar.gz", "has_sig": false, "md5_digest": "715bb05bd95ebf51a260654c7c6656e4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7724, "upload_time": "2019-11-11T04:40:56", "upload_time_iso_8601": "2019-11-11T04:40:56.239045Z", "url": "https://files.pythonhosted.org/packages/91/85/e011f38ac897298eddeb5c86d7b9e8dce317f6b73f9dcaa4ffdb446b389e/datarunner-1.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.4": [ { "comment_text": "", "digests": { "md5": "081132181af94b774f7d43eae55af344", "sha256": "a5b7d71815f40bedaaa83bb137d1896bd98b90e22daef1882d197ca0be720c3a" }, "downloads": -1, "filename": "datarunner-1.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "081132181af94b774f7d43eae55af344", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4994, "upload_time": "2019-11-11T05:41:52", "upload_time_iso_8601": "2019-11-11T05:41:52.725494Z", "url": "https://files.pythonhosted.org/packages/04/5e/4e51adf254e4819796b688e75b353844fde78397bfb24c9325d2deea8eed/datarunner-1.1.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "04c7dfa4ada4fde96c5c2df50e3f29da", "sha256": "c0c5c3c61fb99ec159a267c526440cbf46b8e06ecbc6c2665202fd9bcbc6f21d" }, "downloads": -1, "filename": "datarunner-1.1.4.tar.gz", "has_sig": false, "md5_digest": "04c7dfa4ada4fde96c5c2df50e3f29da", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8097, "upload_time": "2019-11-11T05:41:54", "upload_time_iso_8601": "2019-11-11T05:41:54.481287Z", "url": "https://files.pythonhosted.org/packages/73/5e/532c50141dc7c922c07c3a8a1048b3e5136ba6dfe162bcf216ac8b5933b1/datarunner-1.1.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.5": [ { "comment_text": "", "digests": { "md5": "5eb3192b57f775f0edb5b1ea86080c8a", "sha256": "0c8b0aacb39cdf1a8f2d33ef04fb7a9694f24865af547ef673ee9735faa9a0f5" }, "downloads": -1, "filename": "datarunner-1.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "5eb3192b57f775f0edb5b1ea86080c8a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5012, "upload_time": "2019-11-11T05:58:23", "upload_time_iso_8601": "2019-11-11T05:58:23.639314Z", "url": "https://files.pythonhosted.org/packages/e4/d8/8f866deb8cd3a8bc76d45c73d1250a0941a45abfe8521f9a5c755dbed85a/datarunner-1.1.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9987833820ac57d2b238fdbc1b448462", "sha256": "f4bb0fe16dd250cd8f11ee86fb3f880d7acb0b74cbc6e761337be49f070b1048" }, "downloads": -1, "filename": "datarunner-1.1.5.tar.gz", "has_sig": false, "md5_digest": "9987833820ac57d2b238fdbc1b448462", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8122, "upload_time": "2019-11-11T05:58:25", "upload_time_iso_8601": "2019-11-11T05:58:25.279162Z", "url": "https://files.pythonhosted.org/packages/1b/4f/c7ec30c7e5ad5cc91cfcc50b7c98b6358713c9b39487bce5b8c517bdbac9/datarunner-1.1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "79de38e4418a335273a1d419c6140f68", "sha256": "3686bb7dcf7cf0b5277e6e0508abd14ed1766389e2807d5c39a2d5b7436f42fd" }, "downloads": -1, "filename": "datarunner-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "79de38e4418a335273a1d419c6140f68", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5074, "upload_time": "2019-11-11T18:26:14", "upload_time_iso_8601": "2019-11-11T18:26:14.032330Z", "url": "https://files.pythonhosted.org/packages/f1/3f/3c1d7ee1eb0be1460ccfbd5590d62eaeb2e7b728ac7641e3f72808bf4e38/datarunner-1.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "cc3534aa9c5e0550fcee73760882b699", "sha256": "d2341f2998263c4a625397baa74a96f51ddfeed1e26fabf1f20df1e4fcf6b586" }, "downloads": -1, "filename": "datarunner-1.2.0.tar.gz", "has_sig": false, "md5_digest": "cc3534aa9c5e0550fcee73760882b699", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8361, "upload_time": "2019-11-11T18:26:15", "upload_time_iso_8601": "2019-11-11T18:26:15.364116Z", "url": "https://files.pythonhosted.org/packages/31/24/3329e03b0eca30c326b0e00bc9e9453d290a50e4052433dc6c0c3b731d56/datarunner-1.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "736315d43e3df9daa143d61204055c3c", "sha256": "7f37c67bd74be2f3dd157d2c1ecd6cdabc23af6fdd6ebd31d26330c8d843af6e" }, "downloads": -1, "filename": "datarunner-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "736315d43e3df9daa143d61204055c3c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5082, "upload_time": "2020-04-21T18:56:45", "upload_time_iso_8601": "2020-04-21T18:56:45.320213Z", "url": "https://files.pythonhosted.org/packages/6c/df/5078a7438a7fb0e5e2a7ab7c0507e284384b9475d54af25219b7f36bda40/datarunner-1.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "be34bcfba10f2840a396d530b7274f2b", "sha256": "5c8f86cb041915d5d557d2a28e4d8431b0e2d808be925874baa110d15f80bded" }, "downloads": -1, "filename": "datarunner-1.2.1.tar.gz", "has_sig": false, "md5_digest": "be34bcfba10f2840a396d530b7274f2b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8415, "upload_time": "2020-04-21T18:56:47", "upload_time_iso_8601": "2020-04-21T18:56:47.043917Z", "url": "https://files.pythonhosted.org/packages/4b/28/ef6f50f047a27754b8a6143ed26433437f54ffd04c0cf36ba49f301bc8ce/datarunner-1.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "9e85a987e569cfabf91890a8c2d8bfe3", "sha256": "f6a8041ec55de542c9a4c2a6cc6f0b422aa043fe41161533a205036cee277a74" }, "downloads": -1, "filename": "datarunner-1.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "9e85a987e569cfabf91890a8c2d8bfe3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5085, "upload_time": "2020-04-21T20:22:19", "upload_time_iso_8601": "2020-04-21T20:22:19.452228Z", "url": "https://files.pythonhosted.org/packages/36/94/724f99f8ca5afb100a1e0de14441f20ab27dbd17873f6a9ac28930351a25/datarunner-1.2.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "da3759208129449a6ac31b7b8d83aac1", "sha256": "22d10a6d7f750879bece1f7e8ae5ddda4d1593f367abf9c70b2e24d0e1aa8311" }, "downloads": -1, "filename": "datarunner-1.2.2.tar.gz", "has_sig": false, "md5_digest": "da3759208129449a6ac31b7b8d83aac1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8488, "upload_time": "2020-04-21T20:22:20", "upload_time_iso_8601": "2020-04-21T20:22:20.696957Z", "url": "https://files.pythonhosted.org/packages/c1/0f/fcc1252b9298cd6fec94267ef89481a18b22b8c8aa6a2ec420ebd244d13d/datarunner-1.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "b06e402a757d70c821d6fe366d9756fa", "sha256": "60f9a74b7037257f7428e5f9d2889c78a0bca9a75ace71cff4e4386b6a905d53" }, "downloads": -1, "filename": "datarunner-1.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "b06e402a757d70c821d6fe366d9756fa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5255, "upload_time": "2020-09-15T22:50:57", "upload_time_iso_8601": "2020-09-15T22:50:57.699729Z", "url": "https://files.pythonhosted.org/packages/62/20/bd575d6fe92ecdcd1726c7158b7d34fbfc01a628700ac9dce41e1107cfbc/datarunner-1.2.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2b2b5313d545cf915495f45d60d08c25", "sha256": "0e1041cf34589ef79000ca1c0cf09caeb36f167ec7285000f48c1f1613d23369" }, "downloads": -1, "filename": "datarunner-1.2.3.tar.gz", "has_sig": false, "md5_digest": "2b2b5313d545cf915495f45d60d08c25", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8743, "upload_time": "2020-09-15T22:50:58", "upload_time_iso_8601": "2020-09-15T22:50:58.950465Z", "url": "https://files.pythonhosted.org/packages/03/1a/1f576f6ee206d581f445f75f0b7889608310d9fff2a42e79d4a9224d4055/datarunner-1.2.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "af145fac41c5b1c49815163c14098655", "sha256": "9c77593c951d43cbd94b6a63de99b60e435c61386a16247fc21f9a2735bf6b43" }, "downloads": -1, "filename": "datarunner-1.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "af145fac41c5b1c49815163c14098655", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5313, "upload_time": "2020-09-16T23:05:43", "upload_time_iso_8601": "2020-09-16T23:05:43.503166Z", "url": "https://files.pythonhosted.org/packages/0f/b4/a33f12a688f814cdbb8ffdceab6c11b25a9752f28b4832c698b3f8643385/datarunner-1.2.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "3ee5f3bd607b5933c3cd25c78d53ef82", "sha256": "5cd26c340df3498e16c87d8698a8a0a1554f544382c797648f3396f1fd420d20" }, "downloads": -1, "filename": "datarunner-1.2.4.tar.gz", "has_sig": false, "md5_digest": "3ee5f3bd607b5933c3cd25c78d53ef82", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8861, "upload_time": "2020-09-16T23:05:45", "upload_time_iso_8601": "2020-09-16T23:05:45.309740Z", "url": "https://files.pythonhosted.org/packages/46/e2/369d041498a83a75c0f1aafe2255e7adf2354c9f76e54d4a5713911edc9f/datarunner-1.2.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.5": [ { "comment_text": "", "digests": { "md5": "8bc9be5ac0c739c15ef57f501bc71115", "sha256": "0a2d5fdc2c42ff5030578cf03d5907e521395fe7bcdea28a288ca5ac756b276a" }, "downloads": -1, "filename": "datarunner-1.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "8bc9be5ac0c739c15ef57f501bc71115", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5324, "upload_time": "2020-09-21T16:30:38", "upload_time_iso_8601": "2020-09-21T16:30:38.516618Z", "url": "https://files.pythonhosted.org/packages/c8/c8/b28fba05bd3f35bd2be0586d3205f91ed6f268ef961694660186eb2bd2ae/datarunner-1.2.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "070edb90c0b989e2ec4339481a79c3f6", "sha256": "1d4622b9327d0f1b612e6ff4729d5f80c7061b0fb3e7efa3e918ba5942a7ac7a" }, "downloads": -1, "filename": "datarunner-1.2.5.tar.gz", "has_sig": false, "md5_digest": "070edb90c0b989e2ec4339481a79c3f6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8892, "upload_time": "2020-09-21T16:30:39", "upload_time_iso_8601": "2020-09-21T16:30:39.915019Z", "url": "https://files.pythonhosted.org/packages/20/53/f248f1858b3f2222e3bc4fc13fab57a295b7e48b91fbf481acd96b6a747e/datarunner-1.2.5.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8bc9be5ac0c739c15ef57f501bc71115", "sha256": "0a2d5fdc2c42ff5030578cf03d5907e521395fe7bcdea28a288ca5ac756b276a" }, "downloads": -1, "filename": "datarunner-1.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "8bc9be5ac0c739c15ef57f501bc71115", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 5324, "upload_time": "2020-09-21T16:30:38", "upload_time_iso_8601": "2020-09-21T16:30:38.516618Z", "url": "https://files.pythonhosted.org/packages/c8/c8/b28fba05bd3f35bd2be0586d3205f91ed6f268ef961694660186eb2bd2ae/datarunner-1.2.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "070edb90c0b989e2ec4339481a79c3f6", "sha256": "1d4622b9327d0f1b612e6ff4729d5f80c7061b0fb3e7efa3e918ba5942a7ac7a" }, "downloads": -1, "filename": "datarunner-1.2.5.tar.gz", "has_sig": false, "md5_digest": "070edb90c0b989e2ec4339481a79c3f6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8892, "upload_time": "2020-09-21T16:30:39", "upload_time_iso_8601": "2020-09-21T16:30:39.915019Z", "url": "https://files.pythonhosted.org/packages/20/53/f248f1858b3f2222e3bc4fc13fab57a295b7e48b91fbf481acd96b6a747e/datarunner-1.2.5.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }