# markdown-to-data
Convert markdown and its elements (tables, lists, code, etc.) into structured, easily processable data formats like lists and hierarchical dictionaries (or JSON), with support for parsing back to markdown.
## Status
- [x] Detect, extract and convert markdown building blocks into Python data structures
- [x] Provide two formats for parsed markdown:
- [x] List format: Each building block as separate dictionary in a list
- [x] Dictionary format: Nested structure using headers as keys
- [x] Convert parsed markdown to JSON
- [x] Parse markdown data back to markdown formatted string
- [x] Add options which data gets parsed back to markdown
- [x] Extract specific building blocks (e.g., only tables or lists)
- [x] Support for task lists (checkboxes)
- [x] Enhanced code block handling with language detection
- [x] Comprehensive blockquote support with nesting
- [x] Consistent handling of definition lists
- [x] Provide comprehensive documentation
- [x] Add more test coverage --> 215 test cases
- [x] Publish on PyPI
- [ ] Add line numbers (`start_line` and `end_line`) to parsed markdown elements
- [ ] Align with edge cases of [Common Markdown Specification](https://spec.commonmark.org/0.31.2/)
## Quick Overview
### Install
```bash
pip install markdown-to-data
```
### Basic Usage
```python
from markdown_to_data import Markdown
markdown = """
---
title: Example text
author: John Doe
---
# Main Header
- [ ] Pending task
- [x] Completed subtask
- [x] Completed task
## Table Example
| Column 1 | Column 2 |
|----------|----------|
| Cell 1 | Cell 2 |
´´´python
def hello():
print("Hello World!")
´´´
"""
md = Markdown(markdown)
# Get parsed markdown as list
print(md.md_list)
# Each building block is a separate dictionary in the list
# Get parsed markdown as nested dictionary
print(md.md_dict)
# Headers are used as keys for nesting content
# Get information about markdown elements
print(md.md_elements)
```
### Output Formats
#### List Format (`md.md_list`)
```python
[
{
'metadata': {'title': 'Example text', 'author': 'John Doe'},
'start_line': 2,
'end_line': 5
},
{
'header': {'level': 1, 'content': 'Main Header'},
'start_line': 7,
'end_line': 7
},
{
'list': {
'type': 'ul',
'items': [
{
'content': 'Pending task',
'items': [
{
'content': 'Completed subtask',
'items': [],
'task': 'checked'
}
],
'task': 'unchecked'
},
{'content': 'Completed task', 'items': [], 'task': 'checked'}
]
},
'start_line': 9,
'end_line': 11
},
{
'header': {'level': 2, 'content': 'Table Example'},
'start_line': 13,
'end_line': 13
},
{
'table': {'Column 1': ['Cell 1'], 'Column 2': ['Cell 2']},
'start_line': 14,
'end_line': 16
},
{
'code': {
'language': 'python',
'content': 'def hello():\n print("Hello World!")'
},
'start_line': 18,
'end_line': 21
}
]
```
#### Dictionary Format (`md.md_dict`)
```python
{
'metadata': {'title': 'Example text', 'author': 'John Doe'},
'Main Header': {
'list_1': {
'type': 'ul',
'items': [
{
'content': 'Pending task',
'items': [
{
'content': 'Completed subtask',
'items': [],
'task': 'checked'
}
],
'task': 'unchecked'
},
{'content': 'Completed task', 'items': [], 'task': 'checked'}
]
},
'Table Example': {
'table_1': {'Column 1': ['Cell 1'], 'Column 2': ['Cell 2']},
'code_1': {
'language': 'python',
'content': 'def hello():\n print("Hello World!")'
}
}
}
}
```
#### MD Elements (`md.md_elements`)
```python
{
'metadata': {
'count': 1,
'positions': [0],
'variants': ['2_fields'],
'summary': {}
},
'header': {
'count': 2,
'positions': [1, 3],
'variants': ['h1', 'h2'],
'summary': {'levels': {1: 1, 2: 1}}
},
'list': {
'count': 1,
'positions': [2],
'variants': ['task', 'ul'],
'summary': {'task_stats': {'checked': 2, 'unchecked': 1, 'total_tasks': 3}}
},
'table': {
'count': 1,
'positions': [4],
'variants': ['2_columns'],
'summary': {'column_counts': [2], 'total_cells': 2}
},
'paragraph': {
'count': 4,
'positions': [5, 6, 7, 8],
'variants': [],
'summary': {}
}
}
```
The enhanced `md_elements` property now provides:
- **Extended variant tracking**: Headers show level variants (h1, h2, etc.), tables show column counts, lists identify task lists
- **Summary statistics**: Detailed analytics for each element type including task list statistics, language distribution for code blocks, header level distribution, table cell counts, and blockquote nesting depth
- **Better performance**: Fixed O(n²) performance issue with efficient indexing
- **Consistent output**: Variants are sorted lists instead of sets for predictable results
### Parse back to markdown (`to_md`)
The `Markdown` class provides a method to parse markdown data back to markdown-formatted strings.
The `to_md` method comes with options to customize the output:
```python
from markdown_to_data import Markdown
markdown = """
---
title: Example
---
# Main Header
- [x] Task 1
- [ ] Subtask
- [ ] Task 2
## Code Example
´´´python
print("Hello")
´´´
"""
md = Markdown(markdown)
```
**Example 1**: Include specific elements
```python
print(md.to_md(
include=['header', 'list'], # Include all headers and lists
spacer=1 # One empty line between elements
))
```
Output:
```markdown
# Main Header
- [x] Task 1
- [ ] Subtask
- [ ] Task 2
```
**Example 2**: Include by position and exclude specific types
```python
print(md.to_md(
include=[0, 1, 2], # Include first three elements
exclude=['code'], # But exclude any code blocks
spacer=2 # Two empty lines between elements
))
```
Output:
```markdown
---
title: Example
---
# Main Header
- [x] Task 1
- [ ] Subtask
- [ ] Task 2
```
#### Using `to_md_parser` Function
The `to_md_parser` function can be used directly to convert markdown data structures to markdown text:
```python
from markdown_to_data import to_md_parser
data = [
{
'metadata': {
'title': 'Document'
}
},
{
'header': {
'level': 1,
'content': 'Title'
}
},
{
'list': {
'type': 'ul',
'items': [
{
'content': 'Task 1',
'items': [],
'task': 'checked'
}
]
}
}
]
print(to_md_parser(data=data, spacer=1))
```
Output:
```markdown
---
title: Document
---
# Title
- [x] Task 1
```
## Supported Markdown Elements
### Metadata (YAML frontmatter)
```python
metadata = '''
---
title: Document
author: John Doe
tags: markdown, documentation
---
'''
md = Markdown(metadata)
print(md.md_list)
```
Output:
```python
[
{
'metadata': {
'title': 'Document',
'author': 'John Doe',
'tags': ['markdown', 'documentation']
},
'start_line': 2,
'end_line': 6
}
]
```
### Headers
```python
headers = '''
# Main Title
## Section
### Subsection
'''
md = Markdown(headers)
print(md.md_list)
```
Output:
```python
[
{
'header': {'level': 1, 'content': 'Main Title'},
'start_line': 2,
'end_line': 2
},
{
'header': {
'level': 2,
'content': 'Section'
},
'start_line': 3,
'end_line': 3
},
{
'header': {'level': 3, 'content': 'Subsection'},
'start_line': 4,
'end_line': 4
}
]
```
### Lists (Including Task Lists)
```python
lists = '''
- Regular item
- Nested item
- [x] Completed task
- [ ] Pending subtask
1. Ordered item
1. Nested ordered
'''
md = Markdown(lists)
print(md.md_list)
```
Output:
```python
[
{
'list': {
'type': 'ul',
'items': [
{
'content': 'Regular item',
'items': [
{'content': 'Nested item', 'items': [], 'task': None}
],
'task': None
},
{
'content': 'Completed task',
'items': [
{
'content': 'Pending subtask',
'items': [],
'task': 'unchecked'
}
],
'task': 'checked'
}
]
},
'start_line': 2,
'end_line': 5
},
{
'list': {
'type': 'ol',
'items': [
{
'content': 'Ordered item',
'items': [
{'content': 'Nested ordered', 'items': [], 'task': None}
],
'task': None
}
]
},
'start_line': 6,
'end_line': 7
}
]
```
### Tables
```python
tables = '''
| Header 1 | Header 2 |
|----------|----------|
| Value 1 | Value 2 |
| Value 3 | Value 4 |
'''
md = Markdown(tables)
print(md.md_list)
```
Output:
```python
[
{
'table': {
'Header 1': ['Value 1', 'Value 3'],
'Header 2': ['Value 2', 'Value 4']
},
'start_line': 2,
'end_line': 5
}
]
```
### Code Blocks
```python
code = '''
´´´python
def example():
return "Hello"
´´´
´´´javascript
console.log("Hello");
´´´
'''
md = Markdown(code)
print(md.md_list)
```
Output:
```python
[
{
'code': {
'language': 'python',
'content': 'def example():\n return "Hello"'
},
'start_line': 2,
'end_line': 5
},
{
'code': {'language': 'javascript', 'content': 'console.log("Hello");'},
'start_line': 7,
'end_line': 9
}
]
```
### Blockquotes
```python
blockquotes = '''
> Simple quote
> Multiple lines
> Nested quote
>> Inner quote
> Back to outer
'''
md = Markdown(blockquotes)
print(md.md_list)
```
Output:
```python
[
{
'blockquote': [
{'content': 'Simple quote', 'items': []},
{'content': 'Multiple lines', 'items': []}
],
'start_line': 2,
'end_line': 3
},
{
'blockquote': [
{
'content': 'Nested quote',
'items': [{'content': 'Inner quote', 'items': []}]
},
{'content': 'Back to outer', 'items': []}
],
'start_line': 5,
'end_line': 7
}
]
```
### Definition Lists
```python
def_lists = '''
Term
: Definition 1
: Definition 2
'''
md = Markdown(def_lists)
print(md.md_list)
```
Output:
```python
[
{
'def_list': {'term': 'Term', 'list': ['Definition 1', 'Definition 2']},
'start_line': 2,
'end_line': 4
}
]
```
## Limitations
- Some extended markdown flavors might not be supported
- Inline formatting (bold, italic, links) is currently not parsed
- Table alignment specifications are not preserved
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request or open an issue.
Raw data
{
"_id": null,
"home_page": null,
"name": "markdown-to-data",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "json, lists, markdown, markdown-parser, markdown-to-data, markdown-to-json, md, parser, parsing, tables",
"author": null,
"author_email": "Lennart Pollvogt <lennartpollvogt@protonmail.com>",
"download_url": "https://files.pythonhosted.org/packages/b4/df/b5d6b28dcb4452a1bda5659f24e277ffccfa13d1afa1364ce0860fa2cdc6/markdown_to_data-2.0.0.tar.gz",
"platform": null,
"description": "# markdown-to-data\n\nConvert markdown and its elements (tables, lists, code, etc.) into structured, easily processable data formats like lists and hierarchical dictionaries (or JSON), with support for parsing back to markdown.\n\n## Status\n\n- [x] Detect, extract and convert markdown building blocks into Python data structures\n- [x] Provide two formats for parsed markdown:\n - [x] List format: Each building block as separate dictionary in a list\n - [x] Dictionary format: Nested structure using headers as keys\n- [x] Convert parsed markdown to JSON\n- [x] Parse markdown data back to markdown formatted string\n - [x] Add options which data gets parsed back to markdown\n- [x] Extract specific building blocks (e.g., only tables or lists)\n- [x] Support for task lists (checkboxes)\n- [x] Enhanced code block handling with language detection\n- [x] Comprehensive blockquote support with nesting\n- [x] Consistent handling of definition lists\n- [x] Provide comprehensive documentation\n- [x] Add more test coverage --> 215 test cases\n- [x] Publish on PyPI\n- [ ] Add line numbers (`start_line` and `end_line`) to parsed markdown elements\n- [ ] Align with edge cases of [Common Markdown Specification](https://spec.commonmark.org/0.31.2/)\n\n## Quick Overview\n\n### Install\n\n```bash\npip install markdown-to-data\n```\n\n### Basic Usage\n\n```python\nfrom markdown_to_data import Markdown\n\nmarkdown = \"\"\"\n---\ntitle: Example text\nauthor: John Doe\n---\n\n# Main Header\n\n- [ ] Pending task\n - [x] Completed subtask\n- [x] Completed task\n\n## Table Example\n| Column 1 | Column 2 |\n|----------|----------|\n| Cell 1 | Cell 2 |\n\n\u00b4\u00b4\u00b4python\ndef hello():\n print(\"Hello World!\")\n\u00b4\u00b4\u00b4\n\"\"\"\n\nmd = Markdown(markdown)\n\n# Get parsed markdown as list\nprint(md.md_list)\n# Each building block is a separate dictionary in the list\n\n# Get parsed markdown as nested dictionary\nprint(md.md_dict)\n# Headers are used as keys for nesting content\n\n# Get information about markdown elements\nprint(md.md_elements)\n```\n\n### Output Formats\n\n#### List Format (`md.md_list`)\n\n```python\n[\n {\n 'metadata': {'title': 'Example text', 'author': 'John Doe'},\n 'start_line': 2,\n 'end_line': 5\n },\n {\n 'header': {'level': 1, 'content': 'Main Header'},\n 'start_line': 7,\n 'end_line': 7\n },\n {\n 'list': {\n 'type': 'ul',\n 'items': [\n {\n 'content': 'Pending task',\n 'items': [\n {\n 'content': 'Completed subtask',\n 'items': [],\n 'task': 'checked'\n }\n ],\n 'task': 'unchecked'\n },\n {'content': 'Completed task', 'items': [], 'task': 'checked'}\n ]\n },\n 'start_line': 9,\n 'end_line': 11\n },\n {\n 'header': {'level': 2, 'content': 'Table Example'},\n 'start_line': 13,\n 'end_line': 13\n },\n {\n 'table': {'Column 1': ['Cell 1'], 'Column 2': ['Cell 2']},\n 'start_line': 14,\n 'end_line': 16\n },\n {\n 'code': {\n 'language': 'python',\n 'content': 'def hello():\\n print(\"Hello World!\")'\n },\n 'start_line': 18,\n 'end_line': 21\n }\n]\n```\n\n#### Dictionary Format (`md.md_dict`)\n\n```python\n{\n 'metadata': {'title': 'Example text', 'author': 'John Doe'},\n 'Main Header': {\n 'list_1': {\n 'type': 'ul',\n 'items': [\n {\n 'content': 'Pending task',\n 'items': [\n {\n 'content': 'Completed subtask',\n 'items': [],\n 'task': 'checked'\n }\n ],\n 'task': 'unchecked'\n },\n {'content': 'Completed task', 'items': [], 'task': 'checked'}\n ]\n },\n 'Table Example': {\n 'table_1': {'Column 1': ['Cell 1'], 'Column 2': ['Cell 2']},\n 'code_1': {\n 'language': 'python',\n 'content': 'def hello():\\n print(\"Hello World!\")'\n }\n }\n }\n}\n```\n\n#### MD Elements (`md.md_elements`)\n\n```python\n{\n 'metadata': {\n 'count': 1,\n 'positions': [0],\n 'variants': ['2_fields'],\n 'summary': {}\n },\n 'header': {\n 'count': 2,\n 'positions': [1, 3],\n 'variants': ['h1', 'h2'],\n 'summary': {'levels': {1: 1, 2: 1}}\n },\n 'list': {\n 'count': 1,\n 'positions': [2],\n 'variants': ['task', 'ul'],\n 'summary': {'task_stats': {'checked': 2, 'unchecked': 1, 'total_tasks': 3}}\n },\n 'table': {\n 'count': 1,\n 'positions': [4],\n 'variants': ['2_columns'],\n 'summary': {'column_counts': [2], 'total_cells': 2}\n },\n 'paragraph': {\n 'count': 4,\n 'positions': [5, 6, 7, 8],\n 'variants': [],\n 'summary': {}\n }\n}\n```\n\nThe enhanced `md_elements` property now provides:\n\n- **Extended variant tracking**: Headers show level variants (h1, h2, etc.), tables show column counts, lists identify task lists\n- **Summary statistics**: Detailed analytics for each element type including task list statistics, language distribution for code blocks, header level distribution, table cell counts, and blockquote nesting depth\n- **Better performance**: Fixed O(n\u00b2) performance issue with efficient indexing\n- **Consistent output**: Variants are sorted lists instead of sets for predictable results\n\n### Parse back to markdown (`to_md`)\n\nThe `Markdown` class provides a method to parse markdown data back to markdown-formatted strings.\nThe `to_md` method comes with options to customize the output:\n\n```python\nfrom markdown_to_data import Markdown\n\nmarkdown = \"\"\"\n---\ntitle: Example\n---\n\n# Main Header\n\n- [x] Task 1\n - [ ] Subtask\n- [ ] Task 2\n\n## Code Example\n\u00b4\u00b4\u00b4python\nprint(\"Hello\")\n\u00b4\u00b4\u00b4\n\"\"\"\n\nmd = Markdown(markdown)\n```\n\n**Example 1**: Include specific elements\n\n```python\nprint(md.to_md(\n include=['header', 'list'], # Include all headers and lists\n spacer=1 # One empty line between elements\n))\n```\n\nOutput:\n\n```markdown\n# Main Header\n\n- [x] Task 1\n - [ ] Subtask\n- [ ] Task 2\n```\n\n**Example 2**: Include by position and exclude specific types\n\n```python\nprint(md.to_md(\n include=[0, 1, 2], # Include first three elements\n exclude=['code'], # But exclude any code blocks\n spacer=2 # Two empty lines between elements\n))\n```\n\nOutput:\n\n```markdown\n---\ntitle: Example\n---\n\n# Main Header\n\n- [x] Task 1\n - [ ] Subtask\n- [ ] Task 2\n```\n\n#### Using `to_md_parser` Function\n\nThe `to_md_parser` function can be used directly to convert markdown data structures to markdown text:\n\n```python\nfrom markdown_to_data import to_md_parser\n\ndata = [\n {\n 'metadata': {\n 'title': 'Document'\n }\n },\n {\n 'header': {\n 'level': 1,\n 'content': 'Title'\n }\n },\n {\n 'list': {\n 'type': 'ul',\n 'items': [\n {\n 'content': 'Task 1',\n 'items': [],\n 'task': 'checked'\n }\n ]\n }\n }\n]\n\nprint(to_md_parser(data=data, spacer=1))\n```\n\nOutput:\n\n```markdown\n---\ntitle: Document\n---\n\n# Title\n\n- [x] Task 1\n```\n\n## Supported Markdown Elements\n\n### Metadata (YAML frontmatter)\n\n```python\nmetadata = '''\n---\ntitle: Document\nauthor: John Doe\ntags: markdown, documentation\n---\n'''\n\nmd = Markdown(metadata)\nprint(md.md_list)\n```\n\nOutput:\n\n```python\n[\n {\n 'metadata': {\n 'title': 'Document',\n 'author': 'John Doe',\n 'tags': ['markdown', 'documentation']\n },\n 'start_line': 2,\n 'end_line': 6\n }\n]\n```\n\n### Headers\n\n```python\nheaders = '''\n# Main Title\n## Section\n### Subsection\n'''\n\nmd = Markdown(headers)\nprint(md.md_list)\n```\n\nOutput:\n\n```python\n[\n {\n 'header': {'level': 1, 'content': 'Main Title'},\n 'start_line': 2,\n 'end_line': 2\n },\n {\n 'header': {\n 'level': 2,\n 'content': 'Section'\n },\n 'start_line': 3,\n 'end_line': 3\n },\n {\n 'header': {'level': 3, 'content': 'Subsection'},\n 'start_line': 4,\n 'end_line': 4\n }\n]\n```\n\n### Lists (Including Task Lists)\n\n```python\nlists = '''\n- Regular item\n - Nested item\n- [x] Completed task\n - [ ] Pending subtask\n1. Ordered item\n 1. Nested ordered\n'''\n\nmd = Markdown(lists)\nprint(md.md_list)\n```\n\nOutput:\n\n```python\n[\n {\n 'list': {\n 'type': 'ul',\n 'items': [\n {\n 'content': 'Regular item',\n 'items': [\n {'content': 'Nested item', 'items': [], 'task': None}\n ],\n 'task': None\n },\n {\n 'content': 'Completed task',\n 'items': [\n {\n 'content': 'Pending subtask',\n 'items': [],\n 'task': 'unchecked'\n }\n ],\n 'task': 'checked'\n }\n ]\n },\n 'start_line': 2,\n 'end_line': 5\n },\n {\n 'list': {\n 'type': 'ol',\n 'items': [\n {\n 'content': 'Ordered item',\n 'items': [\n {'content': 'Nested ordered', 'items': [], 'task': None}\n ],\n 'task': None\n }\n ]\n },\n 'start_line': 6,\n 'end_line': 7\n }\n]\n```\n\n### Tables\n\n```python\ntables = '''\n| Header 1 | Header 2 |\n|----------|----------|\n| Value 1 | Value 2 |\n| Value 3 | Value 4 |\n'''\n\nmd = Markdown(tables)\nprint(md.md_list)\n```\n\nOutput:\n\n```python\n[\n {\n 'table': {\n 'Header 1': ['Value 1', 'Value 3'],\n 'Header 2': ['Value 2', 'Value 4']\n },\n 'start_line': 2,\n 'end_line': 5\n }\n]\n```\n\n### Code Blocks\n\n```python\ncode = '''\n\u00b4\u00b4\u00b4python\ndef example():\n return \"Hello\"\n\u00b4\u00b4\u00b4\n\n\u00b4\u00b4\u00b4javascript\nconsole.log(\"Hello\");\n\u00b4\u00b4\u00b4\n'''\n\nmd = Markdown(code)\nprint(md.md_list)\n```\n\nOutput:\n\n```python\n[\n {\n 'code': {\n 'language': 'python',\n 'content': 'def example():\\n return \"Hello\"'\n },\n 'start_line': 2,\n 'end_line': 5\n },\n {\n 'code': {'language': 'javascript', 'content': 'console.log(\"Hello\");'},\n 'start_line': 7,\n 'end_line': 9\n }\n]\n```\n\n### Blockquotes\n\n```python\nblockquotes = '''\n> Simple quote\n> Multiple lines\n\n> Nested quote\n>> Inner quote\n> Back to outer\n'''\n\nmd = Markdown(blockquotes)\nprint(md.md_list)\n```\n\nOutput:\n\n```python\n[\n {\n 'blockquote': [\n {'content': 'Simple quote', 'items': []},\n {'content': 'Multiple lines', 'items': []}\n ],\n 'start_line': 2,\n 'end_line': 3\n },\n {\n 'blockquote': [\n {\n 'content': 'Nested quote',\n 'items': [{'content': 'Inner quote', 'items': []}]\n },\n {'content': 'Back to outer', 'items': []}\n ],\n 'start_line': 5,\n 'end_line': 7\n }\n]\n```\n\n### Definition Lists\n\n```python\ndef_lists = '''\nTerm\n: Definition 1\n: Definition 2\n'''\n\nmd = Markdown(def_lists)\nprint(md.md_list)\n```\n\nOutput:\n\n```python\n[\n {\n 'def_list': {'term': 'Term', 'list': ['Definition 1', 'Definition 2']},\n 'start_line': 2,\n 'end_line': 4\n }\n]\n```\n\n## Limitations\n\n- Some extended markdown flavors might not be supported\n- Inline formatting (bold, italic, links) is currently not parsed\n- Table alignment specifications are not preserved\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request or open an issue.\n",
"bugtrack_url": null,
"license": null,
"summary": "Convert markdown and its elements (tables, lists, code, etc.) into structured, easily processable data formats like lists and hierarchical dictionaries (or JSON), with support for parsing back to markdown.",
"version": "2.0.0",
"project_urls": {
"Homepage": "https://github.com/lennartpollvogt/markdown-to-data",
"Repository": "https://github.com/lennartpollvogt/markdown-to-data"
},
"split_keywords": [
"json",
" lists",
" markdown",
" markdown-parser",
" markdown-to-data",
" markdown-to-json",
" md",
" parser",
" parsing",
" tables"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "4aaf93a2618678f76cd212ce4be8cf33e3f053f2049bcd29a77c5b0ebf30f24a",
"md5": "6b0d19f11e0335cdb9d05428605a0a77",
"sha256": "567a6cdee86e70a1b4adce3fe47d74a4b142def3fc8d3969794ba17f45d8ce7e"
},
"downloads": -1,
"filename": "markdown_to_data-2.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "6b0d19f11e0335cdb9d05428605a0a77",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 45387,
"upload_time": "2025-08-03T09:16:20",
"upload_time_iso_8601": "2025-08-03T09:16:20.679683Z",
"url": "https://files.pythonhosted.org/packages/4a/af/93a2618678f76cd212ce4be8cf33e3f053f2049bcd29a77c5b0ebf30f24a/markdown_to_data-2.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b4dfb5d6b28dcb4452a1bda5659f24e277ffccfa13d1afa1364ce0860fa2cdc6",
"md5": "a4360a58affb6187382d7a5ee1e41800",
"sha256": "819dedccc8fb215fd7c272d4e489ff2e5002ac4b7d310666bffc7f97d34a629e"
},
"downloads": -1,
"filename": "markdown_to_data-2.0.0.tar.gz",
"has_sig": false,
"md5_digest": "a4360a58affb6187382d7a5ee1e41800",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 50807,
"upload_time": "2025-08-03T09:16:22",
"upload_time_iso_8601": "2025-08-03T09:16:22.493402Z",
"url": "https://files.pythonhosted.org/packages/b4/df/b5d6b28dcb4452a1bda5659f24e277ffccfa13d1afa1364ce0860fa2cdc6/markdown_to_data-2.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-03 09:16:22",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "lennartpollvogt",
"github_project": "markdown-to-data",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "pytest",
"specs": [
[
"==",
"8.3.3"
]
]
},
{
"name": "rich",
"specs": [
[
"==",
"13.8.1"
]
]
},
{
"name": "pydantic",
"specs": [
[
">",
"2.7.1"
]
]
},
{
"name": "pyyaml",
"specs": [
[
"==",
"6.0.2"
]
]
},
{
"name": "dict2xml",
"specs": [
[
"==",
"1.7.6"
]
]
}
],
"lcname": "markdown-to-data"
}