{ "info": { "author": "Johann Kellerman", "author_email": "kellerza@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10" ], "description": "# Data Playbook\n\n:book: Playbooks for data. Open, process and save table based data.\n[![Workflow Status](https://github.com/kellerza/data-playbook/actions/workflows/main.yml/badge.svg?branch=master)](https://github.com/kellerza/data-playbook/actions)\n[![codecov](https://codecov.io/gh/kellerza/data-playbook/branch/master/graph/badge.svg)](https://codecov.io/gh/kellerza/data-playbook)\n\nAutomate repetitive tasks on table based data. Include various input and output tasks.\n\nInstall: `pip install dataplaybook`\n\nUse the `@task` and `@playbook` decorators\n\n```python\nfrom dataplaybook import task, playbook\nfrom dataplaybook.tasks.io_xlsx\n\n@task\ndef print\n```\n\n## Tasks\n\nTasks are implemented as simple Python functions and the modules can be found in the dataplaybook/tasks folder.\n\n| Module | Functions |\n| :----------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------- |\n| Generic function to work on tables
`dataplaybook.tasks` | build_lookup, build_lookup_var, combine, drop, extend, filter, print, replace, unique, vlookup |\n| Fuzzy string matching
`dataplaybook.taksk.fuzzy`
Requires _pip install fuzzywuzzy_ | |\n| Read/write excel files ()
`dataplaybook.tasks.io_xlsx` | read_excel, write_excel |\n| Misc IO tasks
`dataplaybook.tasks.io_misc` | read_csv, read_tab_delim, read_text_regex, wget, write_csv |\n| MongoDB functions
`dataplaybook.tasks.io_mongo` | read_mongo, write_mongo, columns_to_list, list_to_columns |\n| PDF functions. Requires _pdftotext_ on your path
`dataplaybook.tasks.io_pdf` | read_pdf_pages, read_pdf_files |\n| Read XML
`dataplaybook.tasks.io_xml` | read_xml |\n\n## Data Playbook v0\n\nThe [v0](https://github.com/kellerza/data-playbook/tree/v0) of dataplaybook used yaml files, very similar to playbooks\n\nUse: `dataplaybook playbook.yaml`\n\n### Playbook structure\n\nThe playbook.yaml file allows you to load additional modules (containing tasks) and specify the tasks to execute in sequence, with all their parameters.\n\nThe `tasks` to perform typically follow the the structure of read, process, write.\n\nExample yaml: (please note yaml is case sensitive)\n\n```yaml\nmodules: [list, of, modules]\n\ntasks:\n - task_name: # See a list of tasks below\n task_setting_1: 1\n tables: # The INPUT. One of more tables used by this task\n target: # The OUTPUT. Target table name of this function\n debug: True/False # Print extra debug message, default: False\n```\n\n### Templating\n\nJinja2 and JMESPath expressions can be used to create parameters for subsequent tasks. Jinja2 simply use the `\"{{ var[res1] }}\"` bracket syntax and jmespath expressions should start with the word _jmespath_ followed by a space.\n\nBoth the `vars` and `template` tasks achieve a similar result: (this will search a table matching string \"2\" on the key column and return the value in the value column)\n\n```yaml\n- vars:\n res1: jmespath test[?key=='2'].value | [0]\n# is equal to\n- template:\n jmespath: \"test[?key=='2'].value | [0]\"\n target: res1\n# ... then use it with `{{ var.res1 }}`\n```\n\nThe JMESpath task `template` task has an advantage that you can create new variables **or tables**.\n\nIf you have a lookup you use regularly you can do the following:\n\n```yaml\n - build_lookup_var:\n key: key\n columns: [value]\n target: lookup1\n # and then use it as follows to get a similar results to the previous example\n - vars:\n res1: \"{{ var['lookup1']['2'].value }}\"\n```\n\nWhen searching through a table with Jinja, a similar one-liner, using `selectattr`, seems much more complex:\n\n```yaml\n- vars:\n res1: \"{{ test | selectattr('key', 'equalto', '2') | map(attribute='value') | first }}\"\n```\n\n### Special yaml functions\n\n- `!re ` Regular expression\n- `!es ` Search a file using Everything by Voidtools\n\n### Install the development version\n\n1. Clone the repo\n2. `pip install -e`\n\n### Data Playbook v0 origins\n\nData playbooks was created to replace various snippets of code I had lying around. They were all created to ensure repeatability of some menial task, and generally followed a similar structure of load something, process it and save it. (Process network data into GIS tools, network audits & reporting on router & NMS output, Extract IETF standards to complete SOCs, read my bank statements into my Excel budgeting tool, etc.)\n\nFor many of these tasks I have specific processing code (`tasks_x.py`, loaded with `modules: [tasks_x]` in the playbook), but in almost all cases input & output tasks (and configuring these names etc) are common. The idea of the modular tasks originally came from Home Assistant, where I started learning Python and the idea of \"custom components\" to add your own integrations, although one could argue this also has similarities to Ansible playbooks.\n\nIn many cases I have a 'loose' coupling to actual file names, using Everything search (`!es search_pattern` in the playbook) to resolve a search pattern to the correct file used for input.\n\nIt has some parts in common with Ansible Playbooks, especially the name was chosen after I was introduced to Ansible Playbooks. The task structure has been updated in 2019 to match the Ansible Playbooks 2.0/2.5+ format and allow names. This format will also be easier to introduce loop mechanisms etc.\n\n#### Comparison to Ansible Playbooks\n\nData playbooks is intended to create and modify variables in the environment (similar to **inventory**). Data playbooks starts with an empty environment (although you can read the environment from various sources inside the play).\nAlthough new variables can be created using **register:** in Ansible, data playbook functions requires the output to be captured through `target:`.\n\nData playbook tasks are different form Ansible's **actions**:\n\n- They are mostly not idempotent, since the intention is to modify tables as we go along,\n- they can return lists containing rows or be Python iterators (that `yield` rows of a table)\n- if they dont return any tabular data (a list), the return value will be added to the `var` table in the environment\n- Each have a strict voluptuous schema, evaluated when loading and during runtime (e.g. to expand templates) to allow quick troubleshooting\n\nYou could argue I can do this with Ansible, but it won't be as elegant with single item hosts files, `gather_facts: no` and `delegate_to: localhost` throughout the playbooks. It will likely only be half as much fun trying to force it into my way of thinking.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kellerza/data-playbook", "keywords": "data,tables,excel,mongodb,generators", "license": "Apache License 2.0", "maintainer": "", "maintainer_email": "", "name": "dataplaybook", "package_url": "https://pypi.org/project/dataplaybook/", "platform": "", "project_url": "https://pypi.org/project/dataplaybook/", "project_urls": { "Homepage": "https://github.com/kellerza/data-playbook" }, "release_url": "https://pypi.org/project/dataplaybook/1.0.9/", "requires_dist": [ "colorlog", "attrs (>=21)", "voluptuous (>=0.11.5)", "jinja2 (<4,>=3)", "openpyxl (<4,>=3)", "typeguard", "icecream", "fuzzywuzzy", "python-Levenshtein", "requests", "pymongo ; extra == 'mongodb'" ], "requires_python": ">=3.8", "summary": "Playbooks for data. Open, process and save table based data.", "version": "1.0.9", "yanked": false, "yanked_reason": null }, "last_serial": 13076392, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "53ea512b0298aa62f1f6cc692debf079", "sha256": "fba98b83303aa0da45af2f418d7ab9244413790a294ae324adf9a0d4651b7376" }, "downloads": -1, "filename": "dataplaybook-0.1.tar.gz", "has_sig": false, "md5_digest": "53ea512b0298aa62f1f6cc692debf079", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 19816, "upload_time": "2018-06-14T14:36:03", "upload_time_iso_8601": "2018-06-14T14:36:03.065558Z", "url": "https://files.pythonhosted.org/packages/bf/0c/5c112c37ca13764803d6c64baac97c4b915da04554d05019359da02c02d2/dataplaybook-0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2": [ { "comment_text": "", "digests": { "md5": "e8c63ce2f8cbd062f61441cbe716458c", "sha256": "297aaec316a84fa5a40b41350b642ccbca974a1079ef9a868bdd22191219dfb1" }, "downloads": -1, "filename": "dataplaybook-0.2.tar.gz", "has_sig": false, "md5_digest": "e8c63ce2f8cbd062f61441cbe716458c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 21629, "upload_time": "2018-07-05T23:31:27", "upload_time_iso_8601": "2018-07-05T23:31:27.925837Z", "url": "https://files.pythonhosted.org/packages/a1/0e/f45089c9eb0c4b8144570b66cd1eb8cec825ace4fefeb94b73c4f0088552/dataplaybook-0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "8d231f53230e8afdad2ea8e5e82238f0", "sha256": "785feee02cb0ed554574bd1b5dc36161224cb795c11415d77f14181f188ffe6e" }, "downloads": -1, "filename": "dataplaybook-0.2.1.tar.gz", "has_sig": false, "md5_digest": "8d231f53230e8afdad2ea8e5e82238f0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 21309, "upload_time": "2018-07-06T07:04:36", "upload_time_iso_8601": "2018-07-06T07:04:36.638078Z", "url": "https://files.pythonhosted.org/packages/4a/f3/1f58773c4e1a8827cf5bd28c2da0dcf9d85a920c1892350863f1ce977e81/dataplaybook-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "08c80847e0db615be20e274497558dc0", "sha256": "82d50cfa32d13ee53916fe4fa1541b7d0f2df4ca7b4d274695c2b322c8cd107f" }, "downloads": -1, "filename": "dataplaybook-0.2.2.tar.gz", "has_sig": false, "md5_digest": "08c80847e0db615be20e274497558dc0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5.3", "size": 21630, "upload_time": "2018-07-06T07:29:41", "upload_time_iso_8601": "2018-07-06T07:29:41.174193Z", "url": "https://files.pythonhosted.org/packages/a3/3b/4665622487665a02bd1e285a28ef0d727e2afc90cdebd43aa0c4fe18ed17/dataplaybook-0.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "13727f61356bc39e04a340cf126f31ba", "sha256": "75432dee350e089f9b12e204aaababe375aeba9b848a3f2853f88b2b801b0f9f" }, "downloads": -1, "filename": "dataplaybook-0.2.3.tar.gz", "has_sig": false, "md5_digest": "13727f61356bc39e04a340cf126f31ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22014, "upload_time": "2018-07-11T21:56:43", "upload_time_iso_8601": "2018-07-11T21:56:43.741792Z", "url": "https://files.pythonhosted.org/packages/22/b5/9cb5703b0520a36258ea320dd4edbdec6cea8ead48e738f4e8c3e32fabb9/dataplaybook-0.2.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "c6610244b44c2cd7c645b46b58cb7dec", "sha256": "1204ddcad138e84a5247c11878323a33a7cb5b720a6b56b500d7162a0738db55" }, "downloads": -1, "filename": "dataplaybook-0.2.4.tar.gz", "has_sig": false, "md5_digest": "c6610244b44c2cd7c645b46b58cb7dec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22203, "upload_time": "2018-07-12T21:50:19", "upload_time_iso_8601": "2018-07-12T21:50:19.292273Z", "url": "https://files.pythonhosted.org/packages/5e/3e/b2881b0b48e73ad3edf1ceda969911867f5a1336a8674d3040df41edb7fb/dataplaybook-0.2.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "2d1c1ffa795657b166b5123d6e5f3909", "sha256": "3687dbbd54294fb847a2cb675d9beb985b51324a3df20e51d29584b02d63df9d" }, "downloads": -1, "filename": "dataplaybook-0.3.0.tar.gz", "has_sig": false, "md5_digest": "2d1c1ffa795657b166b5123d6e5f3909", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25027, "upload_time": "2018-11-06T20:53:34", "upload_time_iso_8601": "2018-11-06T20:53:34.241006Z", "url": "https://files.pythonhosted.org/packages/af/7d/c710d3e9d3f5f86c186751373d7d5902c88c0f98bd6985a43fa0a7e03a88/dataplaybook-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "8bb88897e4b443f74d4317e1afb91848", "sha256": "c428ed4afab7f52e6651729f8f86efae0d2adadca1419c6075cdc879d8d91c32" }, "downloads": -1, "filename": "dataplaybook-0.3.2.tar.gz", "has_sig": false, "md5_digest": "8bb88897e4b443f74d4317e1afb91848", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25467, "upload_time": "2019-01-11T04:00:23", "upload_time_iso_8601": "2019-01-11T04:00:23.503520Z", "url": "https://files.pythonhosted.org/packages/03/06/f87141e7d8a80a59cf1cbca1bbc5f6c79b54a3f137f20110bcdad7535f33/dataplaybook-0.3.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "a16ac74930cf85fcb0fbd56ff3d1a3c8", "sha256": "569b16c7b984d978c4a049f59a88430899a4d8326739ddf6fe0b3c03936a2e4e" }, "downloads": -1, "filename": "dataplaybook-0.3.3.tar.gz", "has_sig": false, "md5_digest": "a16ac74930cf85fcb0fbd56ff3d1a3c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24598, "upload_time": "2019-01-14T21:24:13", "upload_time_iso_8601": "2019-01-14T21:24:13.261135Z", "url": "https://files.pythonhosted.org/packages/00/54/41592e7246f39af747274fd804bc763759739efd90486546d12a47d16aa5/dataplaybook-0.3.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "e7b06093043af88f93a0f22df27eefda", "sha256": "eba32dde84917d69ad2f4cc177c2586deb733129833aafe47fe7f35e4ade2919" }, "downloads": -1, "filename": "dataplaybook-0.3.4.tar.gz", "has_sig": false, "md5_digest": "e7b06093043af88f93a0f22df27eefda", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25312, "upload_time": "2019-01-24T04:33:39", "upload_time_iso_8601": "2019-01-24T04:33:39.835555Z", "url": "https://files.pythonhosted.org/packages/21/80/94bdbf0626b77ddd0c4a0563bd2a8d3308e60605a11bc3145e4fe630963a/dataplaybook-0.3.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6": [ { "comment_text": "", "digests": { "md5": "3d4c119d6d3259ae567121ea107115d4", "sha256": "a03e7fcbffff56864cebe5eb9a20c9a657a67f100718b8696290eb71a074e3a6" }, "downloads": -1, "filename": "dataplaybook-0.6.tar.gz", "has_sig": false, "md5_digest": "3d4c119d6d3259ae567121ea107115d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33981, "upload_time": "2019-04-24T20:42:53", "upload_time_iso_8601": "2019-04-24T20:42:53.410779Z", "url": "https://files.pythonhosted.org/packages/b5/d9/9c726742681991f2470e099db3a2e7ce4e110d8a5a7f66c18454a4f86a36/dataplaybook-0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "8eb68c728e9b5ba8b5e09b3f430021a6", "sha256": "86c185592adce1b7c05c7479832c8767dfcc17fc24549567f9a1c6697575362e" }, "downloads": -1, "filename": "dataplaybook-0.6.1.tar.gz", "has_sig": false, "md5_digest": "8eb68c728e9b5ba8b5e09b3f430021a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34991, "upload_time": "2019-05-09T07:15:39", "upload_time_iso_8601": "2019-05-09T07:15:39.002928Z", "url": "https://files.pythonhosted.org/packages/84/5a/688ecb9157f9b9e1eb491f491ae7ae7849208d215d0b834f76a8f67a0bce/dataplaybook-0.6.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "d7aa03b743be01770d8d119383e7ef7c", "sha256": "57eca6ada9f44096f4825a5761326248f265e2510336bf2cef69bd3dfd189357" }, "downloads": -1, "filename": "dataplaybook-0.6.2.tar.gz", "has_sig": false, "md5_digest": "d7aa03b743be01770d8d119383e7ef7c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37498, "upload_time": "2019-05-29T09:39:32", "upload_time_iso_8601": "2019-05-29T09:39:32.648026Z", "url": "https://files.pythonhosted.org/packages/7b/f6/28c578d6a1c97d433c3266204e3d5b12f9710036b0101b10b1ae5153a7f1/dataplaybook-0.6.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.5": [ { "comment_text": "", "digests": { "md5": "f121e0bc4c856eb6a8ab09cb9594d3cd", "sha256": "2ac6a3b46b9e349b3290fb90d8e26bc8c8dc2955d3b2cb5b2f8680262968a481" }, "downloads": -1, "filename": "dataplaybook-0.6.5.tar.gz", "has_sig": false, "md5_digest": "f121e0bc4c856eb6a8ab09cb9594d3cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40827, "upload_time": "2019-10-30T08:19:04", "upload_time_iso_8601": "2019-10-30T08:19:04.448628Z", "url": "https://files.pythonhosted.org/packages/48/ef/8f5c928b08ee8629cb2a3787dbcbd05a1db3b01493fa6749f83998cd27b9/dataplaybook-0.6.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.7": [ { "comment_text": "", "digests": { "md5": "e4ff1bacd4bb19561dc526b8d6b043ea", "sha256": "29196989717a0c230218dc112f04fd41c78827ac50cbc7a9097a71057c8b4fab" }, "downloads": -1, "filename": "dataplaybook-0.6.7.tar.gz", "has_sig": false, "md5_digest": "e4ff1bacd4bb19561dc526b8d6b043ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41537, "upload_time": "2020-01-14T09:26:48", "upload_time_iso_8601": "2020-01-14T09:26:48.189587Z", "url": "https://files.pythonhosted.org/packages/1b/b9/388df75ede8e8b16f66cc76a58da048882a66a3d7de19e89956cd0503a60/dataplaybook-0.6.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.6.8": [ { "comment_text": "", "digests": { "md5": "0318d62d1ccecd083aa8ec14152e368f", "sha256": "6c727c9339fe2a8db17263c32a863b6c6bce7c2643cbb4f6d56684cc52559f85" }, "downloads": -1, "filename": "dataplaybook-0.6.8.tar.gz", "has_sig": false, "md5_digest": "0318d62d1ccecd083aa8ec14152e368f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43044, "upload_time": "2020-03-31T19:50:59", "upload_time_iso_8601": "2020-03-31T19:50:59.664149Z", "url": "https://files.pythonhosted.org/packages/d5/36/f46d0b26ebc5efaca2fc49fbde69c45c74eb301580cb940d2b659d6e762f/dataplaybook-0.6.8.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "87e0045ad190af921d5968b290135add", "sha256": "05b418398a32501652c43e4d3f63bda8b7ed8ccb389d36c4e6f5f0bab70c0fa7" }, "downloads": -1, "filename": "dataplaybook-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "87e0045ad190af921d5968b290135add", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 49253, "upload_time": "2021-06-01T11:24:29", "upload_time_iso_8601": "2021-06-01T11:24:29.471849Z", "url": "https://files.pythonhosted.org/packages/a5/91/04c06fbdc7b8d32dbe6ae54edeb673ee9bf9414b8ae9f7fdad7f6c239986/dataplaybook-1.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d98669b9cc4e897b86a07c84da97e9da", "sha256": "29db9004e66e43e89c0916b5b3bcc9f3ab27cf51273a4a3e90ed99f7034957f6" }, "downloads": -1, "filename": "dataplaybook-1.0.2.tar.gz", "has_sig": false, "md5_digest": "d98669b9cc4e897b86a07c84da97e9da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39868, "upload_time": "2021-06-01T11:24:30", "upload_time_iso_8601": "2021-06-01T11:24:30.355720Z", "url": "https://files.pythonhosted.org/packages/87/6e/e447e7c6981894aaace0a66e2ca37ee553cc94b354c4f4f5a78c190b5e46/dataplaybook-1.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "2b76bfee128c093b3a5f1f6d0f9b4ef9", "sha256": "09621c189e74a0d97ff229cc9b248496e8b839c918efb2e38958a0956860fe03" }, "downloads": -1, "filename": "dataplaybook-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "2b76bfee128c093b3a5f1f6d0f9b4ef9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 49366, "upload_time": "2021-06-01T18:28:28", "upload_time_iso_8601": "2021-06-01T18:28:28.716249Z", "url": "https://files.pythonhosted.org/packages/df/34/b3074ec9888387a8f7d7dfc6de383d480dd96eeee1b0d1bd73ae664c88f4/dataplaybook-1.0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "40dd1528d16ea7e368489c30357a19d6", "sha256": "dbe245438d672ada766c2a2450cb97cda197fdae0c262766a93971975b378269" }, "downloads": -1, "filename": "dataplaybook-1.0.3.tar.gz", "has_sig": false, "md5_digest": "40dd1528d16ea7e368489c30357a19d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39862, "upload_time": "2021-06-01T18:28:29", "upload_time_iso_8601": "2021-06-01T18:28:29.821692Z", "url": "https://files.pythonhosted.org/packages/95/44/57d14471041649124df627699aaab285538ca12b495fb2c2649d0ee12cf9/dataplaybook-1.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "9a9c62dcb02fa8c520ffec6f218c8a10", "sha256": "81ba712993ee88124723a3f35cf018c4b77f1f32e0b90f3cc73569c57293d007" }, "downloads": -1, "filename": "dataplaybook-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "9a9c62dcb02fa8c520ffec6f218c8a10", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 48409, "upload_time": "2021-06-02T12:12:49", "upload_time_iso_8601": "2021-06-02T12:12:49.371092Z", "url": "https://files.pythonhosted.org/packages/57/f2/07e7b1caf774f761a65537c60b6463a11dec4921f4c0e4e25fc3bd91b4bd/dataplaybook-1.0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e4673fdcd9d1d513aed446290ff42e49", "sha256": "02a50d09d567788b5241731931c95b504a4c857ccdf66bf82e037cac87ee13dd" }, "downloads": -1, "filename": "dataplaybook-1.0.4.tar.gz", "has_sig": false, "md5_digest": "e4673fdcd9d1d513aed446290ff42e49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39280, "upload_time": "2021-06-02T12:12:50", "upload_time_iso_8601": "2021-06-02T12:12:50.301357Z", "url": "https://files.pythonhosted.org/packages/f4/b0/a27d5a7350e1feb83e086756783a636ec44b0d2f16c37122c1ff3dd243ae/dataplaybook-1.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "8bb916f02b7e723133f5b80101d17a6c", "sha256": "b83d83bd39611828b90850ac7f88ee123240506588ba737a3b016158d0dcc60d" }, "downloads": -1, "filename": "dataplaybook-1.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "8bb916f02b7e723133f5b80101d17a6c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 49221, "upload_time": "2021-06-08T09:26:31", "upload_time_iso_8601": "2021-06-08T09:26:31.984819Z", "url": "https://files.pythonhosted.org/packages/83/52/df3600924f0c106cdcdb0deca52d735ae7d9e32054e17a0ba6b905ac1d50/dataplaybook-1.0.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5cc5b0118b38c3b0da768b70f06c12f8", "sha256": "83b9fc95161bcccc8349223744964f3f966ed3781f11426055eeac9231d018b8" }, "downloads": -1, "filename": "dataplaybook-1.0.5.tar.gz", "has_sig": false, "md5_digest": "5cc5b0118b38c3b0da768b70f06c12f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40032, "upload_time": "2021-06-08T09:26:33", "upload_time_iso_8601": "2021-06-08T09:26:33.177868Z", "url": "https://files.pythonhosted.org/packages/b2/7b/d659aef8e4d4c701d8cb8d16c58398ac6890f6b0a935aa1f530a3e01eed0/dataplaybook-1.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "9d4592e16f218eaa27009bea12f9b8ef", "sha256": "7cced59b6f441c9711b12577fe158139b32c64f113e270c0da1937047d061b5d" }, "downloads": -1, "filename": "dataplaybook-1.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "9d4592e16f218eaa27009bea12f9b8ef", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 49335, "upload_time": "2021-06-08T11:13:57", "upload_time_iso_8601": "2021-06-08T11:13:57.850948Z", "url": "https://files.pythonhosted.org/packages/d2/16/b4bed666f84cb5533ce2763d9b30bfb7d5508056a510842af20f801465a0/dataplaybook-1.0.6-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "07e4d0033a6897378dd6d33826b03e15", "sha256": "635e2341be31e2dc461ed4c93e3fd63e7b04c9137a4ca95121c796dabb89a233" }, "downloads": -1, "filename": "dataplaybook-1.0.6.tar.gz", "has_sig": false, "md5_digest": "07e4d0033a6897378dd6d33826b03e15", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40118, "upload_time": "2021-06-08T11:13:58", "upload_time_iso_8601": "2021-06-08T11:13:58.810980Z", "url": "https://files.pythonhosted.org/packages/95/09/c80cc4146393a47183ab1ad09dca24bee0f479294270c42cf3e3cfec9030/dataplaybook-1.0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "a6484946a0c7440726c453f9fc267152", "sha256": "7d47e41414e834895c2eebb0737464863077269b02925866eefa2188cb1468f6" }, "downloads": -1, "filename": "dataplaybook-1.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "a6484946a0c7440726c453f9fc267152", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 49392, "upload_time": "2021-06-30T15:56:45", "upload_time_iso_8601": "2021-06-30T15:56:45.157118Z", "url": "https://files.pythonhosted.org/packages/0a/97/e8a6f80a3a31e4874b4cf28e932921592dfe62f41aed80248f35c297390a/dataplaybook-1.0.7-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d9dacf6a768c177307ae323a6ed9c803", "sha256": "84a7f8ff15ee718a228b469533f19807fd4ee9e42005ab4074e71829e70aca3e" }, "downloads": -1, "filename": "dataplaybook-1.0.7.tar.gz", "has_sig": false, "md5_digest": "d9dacf6a768c177307ae323a6ed9c803", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40168, "upload_time": "2021-06-30T15:56:46", "upload_time_iso_8601": "2021-06-30T15:56:46.118895Z", "url": "https://files.pythonhosted.org/packages/d1/30/876183158d24e344f3798d391fbc7d94390bf9fd531b7513552b9e367901/dataplaybook-1.0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "247c7220911898abbb797e6d4722d77d", "sha256": "cfa03355bebe5760cfcfe20d3e1e48245f288b9a61307eda1ec79873183dcb59" }, "downloads": -1, "filename": "dataplaybook-1.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "247c7220911898abbb797e6d4722d77d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 47887, "upload_time": "2021-09-30T19:31:03", "upload_time_iso_8601": "2021-09-30T19:31:03.579082Z", "url": "https://files.pythonhosted.org/packages/42/5b/230e51cf2065a77b0112246b89c9cc7494b1fbabd8c8512d2b63fcfc0e50/dataplaybook-1.0.8-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7875c2ca8247cd8a044485fbc594bce0", "sha256": "56001adc5b455a94375306e54af2e4d5cb8a5b2e0cfc0bac678c52faa7aaba76" }, "downloads": -1, "filename": "dataplaybook-1.0.8.tar.gz", "has_sig": false, "md5_digest": "7875c2ca8247cd8a044485fbc594bce0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38664, "upload_time": "2021-09-30T19:31:05", "upload_time_iso_8601": "2021-09-30T19:31:05.640892Z", "url": "https://files.pythonhosted.org/packages/88/ba/815f4a51f893d73f757a50f949cca8907fd8d36729e80b0789b513d54f0a/dataplaybook-1.0.8.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "d06e49b5bbd94e847573be8f058ed0bc", "sha256": "78828c9758e2fb0cb739eb31137de0dbfd4e2f0c28eb3bb5a4b888be1abfbdcf" }, "downloads": -1, "filename": "dataplaybook-1.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "d06e49b5bbd94e847573be8f058ed0bc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8", "size": 47975, "upload_time": "2022-03-04T04:46:42", "upload_time_iso_8601": "2022-03-04T04:46:42.129829Z", "url": "https://files.pythonhosted.org/packages/3d/eb/291e7b0b270c944eb807d20ff65e8bd3419cd9990eb11c5ef83ec3b6cbd1/dataplaybook-1.0.9-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "30735da2774fda43347d039c344d347f", "sha256": "ab16236c9156ddf4242aa2aed7c94edbaab19c585e10c80618156781a0343727" }, "downloads": -1, "filename": "dataplaybook-1.0.9.tar.gz", "has_sig": false, "md5_digest": "30735da2774fda43347d039c344d347f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8", "size": 38859, "upload_time": "2022-03-04T04:46:44", "upload_time_iso_8601": "2022-03-04T04:46:44.194034Z", "url": "https://files.pythonhosted.org/packages/f9/3d/9f8cf1f88880af8844d89c3356039be31b1240205a1b486c16744952f341/dataplaybook-1.0.9.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d06e49b5bbd94e847573be8f058ed0bc", "sha256": "78828c9758e2fb0cb739eb31137de0dbfd4e2f0c28eb3bb5a4b888be1abfbdcf" }, "downloads": -1, "filename": "dataplaybook-1.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "d06e49b5bbd94e847573be8f058ed0bc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.8", "size": 47975, "upload_time": "2022-03-04T04:46:42", "upload_time_iso_8601": "2022-03-04T04:46:42.129829Z", "url": "https://files.pythonhosted.org/packages/3d/eb/291e7b0b270c944eb807d20ff65e8bd3419cd9990eb11c5ef83ec3b6cbd1/dataplaybook-1.0.9-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "30735da2774fda43347d039c344d347f", "sha256": "ab16236c9156ddf4242aa2aed7c94edbaab19c585e10c80618156781a0343727" }, "downloads": -1, "filename": "dataplaybook-1.0.9.tar.gz", "has_sig": false, "md5_digest": "30735da2774fda43347d039c344d347f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.8", "size": 38859, "upload_time": "2022-03-04T04:46:44", "upload_time_iso_8601": "2022-03-04T04:46:44.194034Z", "url": "https://files.pythonhosted.org/packages/f9/3d/9f8cf1f88880af8844d89c3356039be31b1240205a1b486c16744952f341/dataplaybook-1.0.9.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }