{ "info": { "author": "Joseph Kato", "author_email": "joseph@jdkato.io", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6" ], "description": "\n# Markdata: Keep your data out of your markup!\n\n[![Build Status](https://img.shields.io/travis/errata-ai/vale/master.svg?logo=travis)](https://travis-ci.org/errata-ai/markdata) ![PyPI](https://img.shields.io/pypi/v/markdata.svg?colorB=blue&style=flat) [![wheels](https://img.shields.io/badge/wheels-%E2%9C%93-4c1.svg?longCache=true&logo=python&logoColor=white)](https://pypi.org/project/markdata/#files) [![code style](https://img.shields.io/badge/code%20style-black-%23000.svg)](https://black.readthedocs.io/en/stable/)\n\n**Markdata** is a Python library and command-line tool for managing data (e.g., code, diagrams, tables, etc.) in Markdown files. Its goal is to promote one simple rule: prose and non-prose supplements (collectively referred to as \"data\") should be managed separately whenever possible. The benefits of this philosophy include:\n\n- Adherence to the [DRY principle](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself): multiple files can include data from the same source.\n\n- Higher-quality data: code examples can be tested, tables can be generated directly from serialization formats, diagrams can be built from source, etc.\n\n- Human-friendly markup: less non-prose content means shorter files, which are easier to update and maintain.\n\nSee [*Fixing Markdown\u2019s shortcomings with Python*](https://medium.com/@jdkato/fixing-markdowns-shortcomings-with-python-cf1d31450e56) for more information.\n\n## Installation\n\n> :exclamation: Markdata requires Python >= 3.6.0. :exclamation:\n\n```console\n$ pip install markdata\n```\n\n## Usage\n\n###### As a library\n\n```python\nimport markdata\n\ndef my_directive():\n pass\n\nmarkdown = markdata.markdata(\n # A string or file-like object.\n file_or_str,\n # A dictionary of custom directives (optional).\n #\n # Format: {'name': my_directive}.\n directives={},\n # The type of front matter to parse (optional).\n fm_format=None, # 'JSON', 'YAML', or 'TOML'\n # The directory that paths will be resolved relative to (optional).\n root=None\n)\n```\n\n###### From the command line\n\n```console\n$ markdata --help\nUsage: markdata [OPTIONS] SOURCE [DESTINATION]\n\n A flavor-agnostic extension framework for Markdown.\n\n Reads from and writes to .\n\n If is a single file, it will be converted to Markdown and written\n to (default: stdout).\n\n If is a directory, all child Markdata files will be converted to\n Markdown and written to (default: overwrite ).\n\nOptions:\n --fm-type [JSON|YAML|TOML] The type of front matter to parse.\n --root PATH The directory that paths will be resolved\n relative to.\n --directives PATH The directory containing your custom directives.\n --version Show the version and exit.\n --help Show this message and exit.\n```\n\n## Directives\n\nMarkdata's functionality is driven by *directives*, which are Markdown snippets that invoke Python functions. Directives can be defined in two ways:\n\n````markdown\n# Example directives\n\n\n\n```callout{'title': 'NOTE', 'classes': ['warning']}\nThis is a callout message.\n```\n\n\n\n`table{'path': '../data/table.yml', 'classes': ['table'], 'caption': 'My data'}`\n````\n\nThe `table` directive creates an HTML table from a YAML, JSON, or CSV file (with an optional caption and classes). After calling `markdata` on this file, the output would be something along the lines of:\n\n```html\n\n \n \n \n \n \n \n \n
My data
\n```\n\n### Built-in directives\n\nMarkdata has two built-in, general-purpose directives:\n\n```python\ndef table(path: str, classes: List[str] = [], caption: str = \"\") -> str:\n \"\"\"Return an HTML table built from structured data (CSV, JSON, or YAML).\n\n `path` [required]: A path (relative to the directive-containing file) to a\n CSV, JSON, or YAML file.\n\n `classes` [optional]: A list of HTML classes to apply to the table.\n\n `caption` [optional]: A caption for the table.\n\n Example:\n\n `table{'path': 'table.yml', 'classes': ['table'], 'caption': '...'}`\n \"\"\"\n```\n\nThe `table` directive ([discussed above](#directives)) creates an HTML table from an external data source (CSV, JSON, or YAML). This allows you to avoid having to write and maintain tables in raw Markdown or HTML.\n\n```python\ndef document(path: str, span: Tuple[int, int] = []) -> str:\n \"\"\"Return the contents of a document (or part of it).\n\n `path` [required]: A path (relative to the directive-containing file) to a\n local file.\n\n `span` [optional]: A tuple ([begin, end]) indicating the beginning and\n ending line of the snippet (defaults to the entire file).\n\n Example:\n\n `document{'path': 'my_file.py', 'span': (10, 13)}`\n \"\"\"\n```\n\nThe `document` directive includes the content of an external text file (of any type—Markdown, Python, etc.). This allows you to, for example, write your code examples in their own files (which can be properly tested and linted).\n\n### Writing your own\n\n> **NOTE**: The first argument passed to custom directives will be a dictionary created from the file's front matter (`{}` by default).\n\nWhile `table` and `document` attempt to solve the most common needs, the true power of Markdata comes from leveraging Python in *your own* directives.\n\nThere are three steps to creating a directive:\n\n1. Design your *directive definition*: Choose either an inline or block directive and decide what arguments it'll accept.\n\n2. Write a Python function: This function needs to accept the arguments defined in step (1). So, if you were re-implementing the built-in `table` directive, you'd have a directive definition of `table{'path': '../data/table.yml', 'classes': ['table'], 'caption': 'My data'}` and a function definition of `table(fm: Dict, path: str, classes: List[str] = [], caption: str = \"\") -> str:`. When using block directives, the first argument passed to the backend function is its content (see our [admonition example](https://github.com/errata-ai/markdata/blob/master/tests/block/__init__.py)).\n\n3. Associate your directive with your function:\n\n - Using the library:\n ```python\n # When using Markdata as a library, you simply pass your function to `markdata`:\n import markdata\n\n\n def implementation(path):\n pass\n\n markdown = markdata.markdata(file_or_str, directives={'directive': implementation})\n ```\n - Using the command-line tool: Markdata will associate all Python modules with their `main` function found in the directory passed to `--directives='my_dir'`.\n\nCheck out [our test cases](https://github.com/errata-ai/Markdata/tree/master/tests) for some examples.\n\n#### Converters\n\nConverters are utilities that you can import and use in your own directives.\n\n```python\n# from markdata.converters import to_html_table\ndef to_html_table(\n rows: List[List[str]], caption: str = \"\", classes: List[str] = []\n) -> str:\n \"\"\"Convert the given rows into an HTML table.\n\n The first entry in `rows` will be used as the table headers.\n \"\"\"\n```\n\n## FAQ\n\n> Why only Markdown? What about AsciiDoc and reStructuredText?\n\nAsciiDoc and reStructuredText have more feature-rich syntaxes than Markdown. Many of Markdata's features are available out-of-the-box (in some form) in AsciiDoc and reStructuredText.\n\nThat said, Markdown has a much larger ecosystem of parsers (practically every language has a *native* Markdown library), editors (and editor plugins), linters, and static site generators than both AsciiDoc and reStructuredText.\n\nMarkdata's goal is to enrich Markdown's syntax without hurting its portability (see the next question).\n\n> What \"flavors\" of Markdown does Markdata support?\n\n*All of them*.\n\nOne of the common complaints about Markdown is that many of its best features are tied to a particular \"flavor\" (see [Babelmark](https://johnmacfarlane.net/babelmark2/faq.html)) that may not be compatible with other Markdown-related tooling.\n\nMarkdata avoids this problem by acting as more of a \"preprocessor\" (i.e., `Markdata + Markdown <=> Sass + CSS`) than another Markdown implementation. Its users have full control over what it outputs—meaning that they can choose to output raw HTML (effectively bypassing the problem of flavors altogether) or make use of features limited to their favorite flavor:\n\n

\n \n

\n\n> What if I'm already using a static site generator (SSG)?\n\nWhile many SSGs have built-in support for external data sources (e.g., [Jekyll](https://jekyllrb.com/docs/datafiles/), [Hugo](https://gohugo.io/templates/data-templates/), and [Gatsby](https://www.gatsbyjs.org/tutorial/part-four/)), there are still benefits to using Markdata:\n\n- As dicussed in the previous question, Markdata *doesn't* introduce new Markdown syntax—meaning Markdata directives can be used with *any* SSG that supports Markdown. This means that you can change SSGs without having to update the syntax (i.e., template language) for accessing your data.\n\n- Markdata's ability to manage data is far more powerful than what most SSGs offer: instead of merely iterating over static resource files, you have full access to Python and its library ecosystem. So, for example, you can\n - fetch data from APIs using the ultra-popular [Requests](http://docs.python-requests.org/en/master/) library;\n - include plots and diagrams created with [seaborn](https://github.com/mwaskom/seaborn); or\n - transform data using [pandas](https://github.com/pandas-dev/pandas).\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/errata-ai/markdata", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "markdata", "package_url": "https://pypi.org/project/markdata/", "platform": "", "project_url": "https://pypi.org/project/markdata/", "project_urls": { "Homepage": "https://github.com/errata-ai/markdata" }, "release_url": "https://pypi.org/project/markdata/0.4.1/", "requires_dist": [ "pyyaml", "tabulate", "click", "python-frontmatter" ], "requires_python": ">=3.6.0", "summary": "An extensible, parser-agnostic 'include' directive for Markdown.", "version": "0.4.1" }, "last_serial": 5574071, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "9da05dc53ed64efe1e4a0f46831f3bde", "sha256": "2ef2ea7de7a5611d2e2dacfce84a1b26ea2fd70037dc38c8bc9877a30e44b30c" }, "downloads": -1, "filename": "markdata-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9da05dc53ed64efe1e4a0f46831f3bde", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 9378, "upload_time": "2019-02-03T01:59:35", "url": "https://files.pythonhosted.org/packages/e7/f4/4f725586af46cb90bf982bb6eaebd6249b5dccca0852ee11b33825789368/markdata-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1217b4f10ca2fb4284b7f24ef7ee8d1b", "sha256": "266ef6a914e851bb854c423a2923f6e41f2f3722584b2da79e038719b2623df2" }, "downloads": -1, "filename": "markdata-0.1.0.tar.gz", "has_sig": false, "md5_digest": "1217b4f10ca2fb4284b7f24ef7ee8d1b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 8908, "upload_time": "2019-02-03T01:59:37", "url": "https://files.pythonhosted.org/packages/7e/3a/1b76ccb49fb390a2392c7fab93d0400faccef32fc17809a02da87d30e3a2/markdata-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "578fff9fb22ae41c63123bc609f1902a", "sha256": "d73acb29d820ea45077d19cfb59519ccd6f83e36cdee78d332d91b808b4fe3e5" }, "downloads": -1, "filename": "markdata-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "578fff9fb22ae41c63123bc609f1902a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 9849, "upload_time": "2019-02-03T22:51:38", "url": "https://files.pythonhosted.org/packages/54/a2/0164c126a446b05af4b7d3d4e0ebdf6c37813f73f3990a35005559fb1f15/markdata-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cfb60987a699a8348777adb7d7856250", "sha256": "e3b220e295bacfe10a90be69619e7841aebd3466f59c2112be0a22ed28db7ce3" }, "downloads": -1, "filename": "markdata-0.2.0.tar.gz", "has_sig": false, "md5_digest": "cfb60987a699a8348777adb7d7856250", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 9909, "upload_time": "2019-02-03T22:51:40", "url": "https://files.pythonhosted.org/packages/80/bc/7e3aea52f2643e099199286cc14324b10493c180cee7a6c7a733f9273bf5/markdata-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "c7c6143e369b193404ecfaf43380a276", "sha256": "42aa12b6fa00214c59517947cd6255d4dca5f7032958c7203fd168cd3d237a29" }, "downloads": -1, "filename": "markdata-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c7c6143e369b193404ecfaf43380a276", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 10650, "upload_time": "2019-02-03T23:06:15", "url": "https://files.pythonhosted.org/packages/4b/0d/2bd1414b99f6c82a93ec325465beb4680e3a1f6f3ef27849070e37ad0a32/markdata-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "937113524d32e51bb50d8ca3cd1401ec", "sha256": "9afb9d8d4e171c5495e23c00aa9344c06e1df989922759a3f691230c33ded26c" }, "downloads": -1, "filename": "markdata-0.2.1.tar.gz", "has_sig": false, "md5_digest": "937113524d32e51bb50d8ca3cd1401ec", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 9355, "upload_time": "2019-02-03T23:06:17", "url": "https://files.pythonhosted.org/packages/3a/a0/bfb1f6e9a20b915966f74bbb4b1f9e6a61bc764fa4ec671fb95446cc0ba8/markdata-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "7963c5006e85cab60cd8dc9d673ea343", "sha256": "f3b1586a0f3f8e09cda342612c7d65d5cfc1a4e1a37942edb75dffc5828eface" }, "downloads": -1, "filename": "markdata-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7963c5006e85cab60cd8dc9d673ea343", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 10651, "upload_time": "2019-02-03T23:13:20", "url": "https://files.pythonhosted.org/packages/53/a8/82bc6dd20fc2727efd01fac382ceb2be839a1bed1cd03b2b29873c421b6d/markdata-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7baad22d48a01222a10d280961bec76e", "sha256": "9355b0090bd6ba86aeaee4f395f986f7c7b8e391ad0bec2ff86b938f4a74add3" }, "downloads": -1, "filename": "markdata-0.2.2.tar.gz", "has_sig": false, "md5_digest": "7baad22d48a01222a10d280961bec76e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 9354, "upload_time": "2019-02-03T23:13:22", "url": "https://files.pythonhosted.org/packages/d3/04/63a8b6f65a9b78f8571f9acfde7089b7adf7a7b5576cf106f64fe77ebe62/markdata-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "cdeafd076d15bf9aaeea216f0c6b7988", "sha256": "4d955d29628addf6a76ccbfed68906f3d832b02793a8d30cb77df252bb616a33" }, "downloads": -1, "filename": "markdata-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cdeafd076d15bf9aaeea216f0c6b7988", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 11527, "upload_time": "2019-02-03T23:26:01", "url": "https://files.pythonhosted.org/packages/17/60/bd1a1ea5458d345d3ac8386b4ab1bb38afb55329a3fd6851379340f25729/markdata-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9842e033d67ab7cfc43acee0ace363f4", "sha256": "0508a8cf9889383c495a67283a6ecef239fd81bcac148fa20d12d8ccc52f04f4" }, "downloads": -1, "filename": "markdata-0.2.3.tar.gz", "has_sig": false, "md5_digest": "9842e033d67ab7cfc43acee0ace363f4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 10564, "upload_time": "2019-02-03T23:26:03", "url": "https://files.pythonhosted.org/packages/d3/81/b57345de9ee14bfb9b299be07b9a21a4570c966a5b00847f99b4e8c176d8/markdata-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "2b06acf798962fa5d724fad4b9fda543", "sha256": "4581ace9e2766fcd497890b54bc34e19b1dca82eb60394de3cb9bee4a6ac6293" }, "downloads": -1, "filename": "markdata-0.2.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2b06acf798962fa5d724fad4b9fda543", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 10717, "upload_time": "2019-02-04T00:32:58", "url": "https://files.pythonhosted.org/packages/4f/73/249f7c6608d4d47fc28cb717d302be380ee58cc1229011e529030596bd3c/markdata-0.2.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "23e9c61d5f43e4009491f13bac5be17f", "sha256": "4fb12f3d25e4ebea041e2c67983b9726fbaa6f8f1e7a39f2837c1e9dc6ea68f2" }, "downloads": -1, "filename": "markdata-0.2.4.tar.gz", "has_sig": false, "md5_digest": "23e9c61d5f43e4009491f13bac5be17f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 9918, "upload_time": "2019-02-04T00:33:00", "url": "https://files.pythonhosted.org/packages/33/85/84d2c22d8fdd641eae016232e08e49a432d7b483ea088e633798d5fd79d6/markdata-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "e9708bbf038940d62d5a223cd930e416", "sha256": "a4b8fc2458eb510786791b9bebdb7ec346ed0f6a1dacc9406fb83efd80f3d10e" }, "downloads": -1, "filename": "markdata-0.2.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e9708bbf038940d62d5a223cd930e416", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 11606, "upload_time": "2019-02-04T21:02:28", "url": "https://files.pythonhosted.org/packages/e0/81/f9f5081cce6dee5a909a4575fbb6e16862cecc59aad0fd44a79030994a05/markdata-0.2.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d7bd2eea57fef184b6f4f61ac03ab3be", "sha256": "7709fab069f3d2b1f3f891dd0328b554277ef3ef626793a3e38fc6606fa9bc94" }, "downloads": -1, "filename": "markdata-0.2.5.tar.gz", "has_sig": false, "md5_digest": "d7bd2eea57fef184b6f4f61ac03ab3be", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 10633, "upload_time": "2019-02-04T21:02:30", "url": "https://files.pythonhosted.org/packages/5f/71/44331a19ae0903cf7df7687dda8597824aca6bec8b46dbb91efb9de1bcb8/markdata-0.2.5.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "6979b83cc0b93c1a12a3e2b1ed359af1", "sha256": "fc7216a245d491a337dd3348bdd70842da554bdedea86c517f1d0505107e7e06" }, "downloads": -1, "filename": "markdata-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6979b83cc0b93c1a12a3e2b1ed359af1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 12500, "upload_time": "2019-02-07T00:49:17", "url": "https://files.pythonhosted.org/packages/45/4c/3dde069ed5ae6b1dacd6cc5c5c7a6be168da7bb59b9c3b63475d3c1ae63d/markdata-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "957c0212153722c49a04317428cfe416", "sha256": "305a6681869192ecc42f62b5f8715ce3ad6a6eea4f026b7531abfc70c55c7af6" }, "downloads": -1, "filename": "markdata-0.3.0.tar.gz", "has_sig": false, "md5_digest": "957c0212153722c49a04317428cfe416", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 11460, "upload_time": "2019-02-07T00:49:19", "url": "https://files.pythonhosted.org/packages/53/cb/96454670cd228d7efd1d36e19dc44ddc42534ff3e460c6ee584f15beb017/markdata-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "058aa10ed4835baacbc4ddd6d8e1a507", "sha256": "350538052485b9aae24e0167a5544fcfc23c5bfc5330721bbf81ad1123bd0524" }, "downloads": -1, "filename": "markdata-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "058aa10ed4835baacbc4ddd6d8e1a507", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 12502, "upload_time": "2019-02-07T01:06:41", "url": "https://files.pythonhosted.org/packages/5c/c1/2a515d6ab0ad5c60deea83355ef82e68366897504b760bf6988d6b9d1c42/markdata-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dda6d7c2e7def6d0b2a98af3186ee3d2", "sha256": "90ff823a076be9feb8ed82b3eacff07bb1440247e34108481a37129a1a524257" }, "downloads": -1, "filename": "markdata-0.3.1.tar.gz", "has_sig": false, "md5_digest": "dda6d7c2e7def6d0b2a98af3186ee3d2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 11463, "upload_time": "2019-02-07T01:06:43", "url": "https://files.pythonhosted.org/packages/41/3a/324ceb5c9c3e360bffdbd93a9b8c33f2849cb5cf9fc6701a322eaee9ae1f/markdata-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "43d7092f57bb80ebcebb2a2d0e787e3a", "sha256": "46caa47b4bfb82c93ee8b187674054d66a9fa9aa3da8acf1bc5ce420c0f8a880" }, "downloads": -1, "filename": "markdata-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "43d7092f57bb80ebcebb2a2d0e787e3a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 12889, "upload_time": "2019-02-14T20:20:27", "url": "https://files.pythonhosted.org/packages/03/1d/b4d013e5ac6e8db20a2198a8b2e69c51ec5457a2bdc3850509e1f593948f/markdata-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e699528cc47b31bd82b913d36c7e2c04", "sha256": "d25eb82aa9fcc3a9b4bbed0cf26063956ee195b86ed091f305f3d9024801a8e4" }, "downloads": -1, "filename": "markdata-0.4.0.tar.gz", "has_sig": false, "md5_digest": "e699528cc47b31bd82b913d36c7e2c04", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 12086, "upload_time": "2019-02-14T20:20:29", "url": "https://files.pythonhosted.org/packages/7b/b1/5da588e4ede1cf1f5838aaa03e04b47c3bf6a39ef4e3a86acddfac1887fd/markdata-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "cb82a472e8616e8aa3e9f9bbfa163c23", "sha256": "324f07da2964d0d1f89ccf3691bf970cbd4a5ee7409ac55a6e84b77a79103325" }, "downloads": -1, "filename": "markdata-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cb82a472e8616e8aa3e9f9bbfa163c23", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 12669, "upload_time": "2019-07-23T19:23:39", "url": "https://files.pythonhosted.org/packages/52/a0/989f2280e73fb96a1f7f917efed64eb6631e590bd75fb1a1ec6ddd0e1735/markdata-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "802258b712e5466b32f18317ec845f17", "sha256": "572f439f370523e99a8d4cac73b61c110c5b0ed726d36314d085e1a0f77a1776" }, "downloads": -1, "filename": "markdata-0.4.1.tar.gz", "has_sig": false, "md5_digest": "802258b712e5466b32f18317ec845f17", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 11742, "upload_time": "2019-07-23T19:23:41", "url": "https://files.pythonhosted.org/packages/a4/f9/12d6f3b256f333a723f3e291c7dad9047138b23638a0d1d5aa18d0ad70b7/markdata-0.4.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cb82a472e8616e8aa3e9f9bbfa163c23", "sha256": "324f07da2964d0d1f89ccf3691bf970cbd4a5ee7409ac55a6e84b77a79103325" }, "downloads": -1, "filename": "markdata-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "cb82a472e8616e8aa3e9f9bbfa163c23", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6.0", "size": 12669, "upload_time": "2019-07-23T19:23:39", "url": "https://files.pythonhosted.org/packages/52/a0/989f2280e73fb96a1f7f917efed64eb6631e590bd75fb1a1ec6ddd0e1735/markdata-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "802258b712e5466b32f18317ec845f17", "sha256": "572f439f370523e99a8d4cac73b61c110c5b0ed726d36314d085e1a0f77a1776" }, "downloads": -1, "filename": "markdata-0.4.1.tar.gz", "has_sig": false, "md5_digest": "802258b712e5466b32f18317ec845f17", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6.0", "size": 11742, "upload_time": "2019-07-23T19:23:41", "url": "https://files.pythonhosted.org/packages/a4/f9/12d6f3b256f333a723f3e291c7dad9047138b23638a0d1d5aa18d0ad70b7/markdata-0.4.1.tar.gz" } ] }