{ "info": { "author": "Jack Gaino", "author_email": "md2cf@jackgaino.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# md2cf\n\nA tool and library to convert documents written in Markdown to Confluence Storage\nformat, and optionally upload them to a Confluence Server instance.\n\n## Features\n\n - **Convert Markdown documents.** The library implements a\n [Mistune](https://github.com/lepture/mistune) renderer that outputs\n Confluence Storage Format.\n - **Basic Confluence API support.** Embedded micro-implementation of\n the [Confluence Server REST\n API](https://developer.atlassian.com/server/confluence/confluence-server-rest-api/)\n with basic support for creating and updating pages.\n - **Upload automation.** Includes a small script that can automate the\n upload process for you.\n\n## Installation\n\n```bash\npip install md2cf\n```\n\n## Upload script\n\n```text\nusage: md2cf [-h] [-o HOST] [-u USERNAME] [-p PASSWORD] [--token TOKEN]\n [--insecure] -s SPACE [-a PARENT_TITLE | -A PARENT_ID] [-t TITLE]\n [-m MESSAGE] [-i PAGE_ID] [--prefix PREFIX]\n [--preface-markdown [PREFACE_MARKDOWN] | --preface-file\n PREFACE_FILE] [--collapse-single-pages]\n [--beautify-folders | --use-pages-file]\n [--collapse-empty | --skip-empty] [--dry-run] [--only-changed]\n [file_list [file_list ...]]\n```\n\nIn order to upload a document, you'll need to supply at least the\nfollowing five parameters:\n\n - The **hostname** of your Confluence instance, including the path to\n the REST API (e.g. `http://confluence.example.com/rest/api`)\n - Either\n - The **username** and **password** to use for logging into the instance, or\n - a **personal access token**\n - The **space** in which to publish the page\n - The **files or directories** to be uploaded -- or standard input if the list is\n missing\n\nExample basic usage:\n\n```bash\nmd2cf --host 'https://confluence.example.com/rest/api' --username foo --password bar --space TEST document.md\n```\n\nOr, if using a token:\n\n```bash\nmd2cf --host 'https://confluence.example.com/rest/api' --bearer-token '2104v3ryl0ngt0k3n720' --space TEST document.md\n```\n\nNote that entering the password as a parameter on the command line is\ngenerally a bad idea. If you're running the script interactively, you\ncan omit the `--password` parameter and the script will prompt for it.\n\nFor the security conscious out there or those who plan on\nusing this as part of a pipeline, you can also supply the hostname,\nusername, password, and token as **environment variables**: `CONFLUENCE_HOST`,\n`CONFLUENCE_USERNAME`, `CONFLUENCE_PASSWORD`, and `CONFLUENCE_TOKEN`.\n\nIf you're using self-signed certificates and/or want to ignore SSL errors, add the `--insecure` option.\n\nYou can specify multiple files and/or entire folders. If you specify a folder, it will be traversed recursively and all files ending in `.md` will be uploaded. See [Uploading folders](#uploading-folders) for more information.\n\nIf you just want to get a preview of what `md2cf` would do, the `--dry-run` option will print a list of page data but leave Confluence untouched.\n\n### Page title\n\nThe **title** of the page can come from a few sources, in order of priority from highest to lowest:\n* the `--title` command line parameter\n* a `title` entry in your document's front matter, i.e. a YAML block delimited by `---` lines at the top of the file\n ```yaml\n ---\n title: This is a title\n ---\n # Rest of the document here\n ```\n* the first top-level header found in the document (i.e. the first `#` header)\n* the filename if there are no top-level headers.\n\nNote that if you're reading from standard input, you must either specify the title through the command line or have a title in the content as a header or in the front matter.\n\nIf you're uploading entire folders, you might want to add a prefix to each page title in order to avoid collisions. You can do this using the `--prefix` parameter.\n\n### Adding a preface\n\nThe `--preface-markdown` and `--preface-file` commands allow you to add some text at the top of each page. This is useful\nif you're mirroring documentation to Confluence and want people to know that it's going to be overwritten in an automated\nfashion.\n\nThe first option allows you to specify markdown text right on the command line, and defaults to a paragraph saying\n\n**Contents are auto-generated, do not edit.**\n\nThe second option takes a path to a markdown file and will prepend its contents to every page. Note that this is parsed separately and added to the body after the main page has been parsed, so it won't influence behaviour tied to the page contents such as title or front matter detection.\n\n### Parent page\n\nIf you want to upload the page under **a specific parent**, you can supply the parent's page ID as the `--parent-id` parameter, or its title through the `--parent-title` parameter.\n\n### Update message\n\nYou can also optionally specify an **update message** to describe the\nchange you just made by using the `--message` parameter. Note that if you're using the `--only-changed` option there will also be a hash of the page/attachment contents at the end of the version update message.\n\n### Updating an existing page\n\nUploading a page with the same title twice will update the existing one.\n\nIf you want to update a page by page ID, use the `--page-id` option. This allows you to change the page's title, or to update a page with a title that is annoying to use as a parameter.\n\n### Avoiding uploading content that hasn't changed\n\nIf you want to avoid redundant uploads (and the corresponding update emails) when your content hasn't changed, you can add the `--only-changed` option. Note that this will store a hash of the page/attachment contents at the end of the version update message.\n\n### Uploading folders\n\n`md2cf` can upload entire folders for you. This can be useful if you want to mirror some in-repo documentation to Confluence.\n\nWhen uploading entire folders, `md2cf` will recursively traverse all subdirectories and upload any `.md` file it encounters. Folders will be represented by empty pages in the final upload, since Confluence can only nest pages under other pages. You can modify this behaviour through three command line parameters.\n\n#### Customizing folder names\n\nFolder names like `interesting-subsection` or `dir1` are not particularly nice. If you pass the `--beautify-folders` option,\nall spaces and hyphens in folder names will be replaced with spaces and the first letter will be capitalized, producing\n`Interesting subsection` and `Dir1`.\n\nAlternatively, you can create a YAML file called `.pages` with the following format in every folder you wish to rename.\nIf you pass the `--use-pages-file`, the folder will be given that title.\n\n```yaml\ntitle: \"This is a fantastic title!\"\n```\n\n#### Collapse single pages\n\nYou can collapse directories that only contain one document by passing the `--collapse-single-pages` parameter. This means that a folder layout like this:\n\n```text\ndocument.md\nfolder1/\n documentA.md\n documentB.md\nfolder2/\n other-document.md\n```\n\nwill be uploaded to Confluence like this:\n\n```text\ndocument\nfolder1/\n documentA\n documentB\nother-document\n```\n\n#### Dealing with empty folders\n\nYou can also modify the behaviour for empty folders. If you specify `--skip-empty`, this tree layout:\n\n```text\ndocument.md\nfolder1/\n folder2/\n folder3/\n other-document.md\nfolderA/\n interesting-document.md\n folderB/\n folderC/\n lonely-document.md\n```\n\nwill be uploaded as:\n\n```text\ndocument\nfolder3/\n other-document\nfolderA/\n interesting-document\n folderC/\n lonely-document\n```\n\nAlternatively, you can specify `--collapse-empty` to merge empty folders together with the following result:\n\n```text\ndocument\nfolder1/folder2/folder3/\n other-document\nfolderA/\n interesting-document\n folderB/folderC/\n lonely-document\n```\n\n## Library usage\n\n`md2cf` can of course be used as a Python library. It exposes two useful modules: the renderer and the API wrapper.\n\n### Renderer\n\nUse the `ConfluenceRenderer` class to generate Confluence Storage Format\noutput from a markdown document.\n\n```python\nimport mistune\nfrom md2cf.confluence_renderer import ConfluenceRenderer\n\nmarkdown_text = \"# Page title\\n\\nInteresting *content* here!\"\n\nrenderer = ConfluenceRenderer(use_xhtml=True)\nconfluence_mistune = mistune.Markdown(renderer=renderer)\nconfluence_body = confluence_mistune(markdown_text)\n```\n\n### API\n\nmd2cf embeds a teeny-tiny implementation of the Confluence Server REST\nAPI that allows you to create, read, and update pages.\n\n```python\nfrom md2cf.api import MinimalConfluence\n\nconfluence = MinimalConfluence(host='http://example.com/rest/api', username='foo', password='bar')\n\nconfluence.create_page(space='TEST', title='Test page', body='
Nothing
', update_message='Created page')\n\npage = confluence.get_page(title='Test page', space_key='TEST')\nconfluence.update_page(page=page, body='New content', update_message='Changed page contents')\n```\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/iamjackg/md2cf", "keywords": "markdown confluence", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "md2cf", "package_url": "https://pypi.org/project/md2cf/", "platform": null, "project_url": "https://pypi.org/project/md2cf/", "project_urls": { "Homepage": "https://github.com/iamjackg/md2cf" }, "release_url": "https://pypi.org/project/md2cf/1.3.1/", "requires_dist": [ "mistune (==0.8.4)", "tortilla (==0.5.0)", "PyYAML (==6.0)" ], "requires_python": ">=3.6", "summary": "Convert Markdown documents to Confluence", "version": "1.3.1", "yanked": false, "yanked_reason": null }, "last_serial": 13677728, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "bf2fb50d2b79103b456c75e750c37cfb", "sha256": "a6a5af80405d02d0e39803b5bec74f89b5e76c3a76dc02a66ec3b6726a26d086" }, "downloads": -1, "filename": "md2cf-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "bf2fb50d2b79103b456c75e750c37cfb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 7371, "upload_time": "2018-12-13T14:37:56", "upload_time_iso_8601": "2018-12-13T14:37:56.198366Z", "url": "https://files.pythonhosted.org/packages/b9/75/96f8f52874b4bc041f265957c4b2bd32344a8d7614e7b36ae402c116fa3c/md2cf-0.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5a6a39de3cd64e59fa1632c4ef696d16", "sha256": "4cd62aef8af122068757ab7b4ee33303169fa82ecf46a709ef1f80eeda06e1a0" }, "downloads": -1, "filename": "md2cf-0.1.0.tar.gz", "has_sig": false, "md5_digest": "5a6a39de3cd64e59fa1632c4ef696d16", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 5679, "upload_time": "2018-12-13T14:37:58", "upload_time_iso_8601": "2018-12-13T14:37:58.010110Z", "url": "https://files.pythonhosted.org/packages/79/19/410cfdd0967125999652514609374e80ab36d2b911fc87f5a83d85965780/md2cf-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "91e50ddeac1ec40f818f0c9ef464b947", "sha256": "75643f67933884a089814af15350c2a2596324e7db1f29d405f79f56537a6884" }, "downloads": -1, "filename": "md2cf-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "91e50ddeac1ec40f818f0c9ef464b947", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 7372, "upload_time": "2019-05-19T22:14:46", "upload_time_iso_8601": "2019-05-19T22:14:46.422966Z", "url": "https://files.pythonhosted.org/packages/5a/6c/d76d86c848dd40ef57238debc740edf758842202f6eed25b0ac9d3d0b7b1/md2cf-0.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7e1ba2aa835e1bf221ad2ad3757efc8e", "sha256": "9df515dd4d623c4435350154e18b6eb7b95427d25c0ee4fa7a195f55b1c1ad24" }, "downloads": -1, "filename": "md2cf-0.1.1.tar.gz", "has_sig": false, "md5_digest": "7e1ba2aa835e1bf221ad2ad3757efc8e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 5683, "upload_time": "2019-05-19T22:14:47", "upload_time_iso_8601": "2019-05-19T22:14:47.615011Z", "url": "https://files.pythonhosted.org/packages/7a/6a/35f7fd1ad22d657430ba4771aa839d12ce4a7c77269a3e3ae67016baab43/md2cf-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "a28818c51c28c2dd54a249350881da18", "sha256": "58e7c7e064e0ecbd25e52d16ee5e78a2260040c2ccfce7465086b5e612cd8b84" }, "downloads": -1, "filename": "md2cf-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a28818c51c28c2dd54a249350881da18", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 7413, "upload_time": "2019-10-08T20:42:07", "upload_time_iso_8601": "2019-10-08T20:42:07.343621Z", "url": "https://files.pythonhosted.org/packages/88/12/e4cc15809cd29b672830ca82873afdb96cd6293b657465d346539168af64/md2cf-0.1.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "184b60861a5c7304a3721138613e2c85", "sha256": "1fac7de5853c3895e57ce012fcebbde74935ee82c46fb18c8406df33408dbec4" }, "downloads": -1, "filename": "md2cf-0.1.2.tar.gz", "has_sig": false, "md5_digest": "184b60861a5c7304a3721138613e2c85", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 5722, "upload_time": "2019-10-08T20:42:09", "upload_time_iso_8601": "2019-10-08T20:42:09.016150Z", "url": "https://files.pythonhosted.org/packages/96/ca/2dc5828597ba9ced7e3159a471ccd27ab57491ea8c072af649efc9b88d2b/md2cf-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "40b357b83fc0e65848fa16bb523c2825", "sha256": "4712d630062f2e5eb4dd912acc1a07296c341678e55bbfe30e67f7f64dfb1928" }, "downloads": -1, "filename": "md2cf-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "40b357b83fc0e65848fa16bb523c2825", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 7415, "upload_time": "2019-10-08T20:51:52", "upload_time_iso_8601": "2019-10-08T20:51:52.426562Z", "url": "https://files.pythonhosted.org/packages/c0/99/6ddf23a23c98e927e26a17aaa46cc9cabf740b2fe3ce9d034250b53279f3/md2cf-0.1.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "469a86589eebbbeb526d69d09c027d04", "sha256": "e095dfb07b509854878fb16ffdd335c3403cdeb1bdc98e8a2256e4419cdb0d1d" }, "downloads": -1, "filename": "md2cf-0.1.3.tar.gz", "has_sig": false, "md5_digest": "469a86589eebbbeb526d69d09c027d04", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 5725, "upload_time": "2019-10-08T20:51:54", "upload_time_iso_8601": "2019-10-08T20:51:54.016384Z", "url": "https://files.pythonhosted.org/packages/53/81/9f8471fc377ae9636852a046d7be42f37f748a85718e7193d64e4b5aedc1/md2cf-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "9c4858b8344755aef41bf324f6bf6e04", "sha256": "1d704e66e306ec9266adfe42b38dd0bcdf6d4f4e6a117a09397e688c37507f3b" }, "downloads": -1, "filename": "md2cf-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9c4858b8344755aef41bf324f6bf6e04", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 7567, "upload_time": "2019-10-12T01:24:18", "upload_time_iso_8601": "2019-10-12T01:24:18.533675Z", "url": "https://files.pythonhosted.org/packages/29/cc/277f9414a90a70c1074eaf00d6f680c320524ddfe5e18623c164d9e5619b/md2cf-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "278a0398ebf7ce09edd21454706c9906", "sha256": "50dea762e93fc790a095bfa4c27c8ef7fe8e678f7d8679bb6cb14b3441a7348a" }, "downloads": -1, "filename": "md2cf-0.2.0.tar.gz", "has_sig": false, "md5_digest": "278a0398ebf7ce09edd21454706c9906", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 5877, "upload_time": "2019-10-12T01:24:20", "upload_time_iso_8601": "2019-10-12T01:24:20.028941Z", "url": "https://files.pythonhosted.org/packages/8e/28/85f6408cfd73c4c709eafc1ff1367db538e67888b5919594831f25258af0/md2cf-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "db103e871d34fade7679b6fa48cf4e37", "sha256": "aa12ba5c01b21a86523342af37aa46113a339be5c988e16f0849f81efdfa490e" }, "downloads": -1, "filename": "md2cf-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "db103e871d34fade7679b6fa48cf4e37", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 7555, "upload_time": "2019-10-16T19:03:58", "upload_time_iso_8601": "2019-10-16T19:03:58.183580Z", "url": "https://files.pythonhosted.org/packages/2a/8b/73c7bb322f48c4244fec076459922a8e6dbc8356effa50aaa3a9b5192761/md2cf-0.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ffa936b851f2d601598ec9bc713160c2", "sha256": "f496085225b5c32db5a9f9de27593bc609e1802086f188ad70e9b30f325a005f" }, "downloads": -1, "filename": "md2cf-0.2.1.tar.gz", "has_sig": false, "md5_digest": "ffa936b851f2d601598ec9bc713160c2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 5872, "upload_time": "2019-10-16T19:03:59", "upload_time_iso_8601": "2019-10-16T19:03:59.463323Z", "url": "https://files.pythonhosted.org/packages/a2/4e/3b81d52eb195cac837d55cb724de88db289e936ec67d93795ecba127a043/md2cf-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "a95d2696e744f60ed32428c51888888e", "sha256": "2e02765f2b81260c45526d07dd92904b722b78015c48fcf3b8a4ba43702680ed" }, "downloads": -1, "filename": "md2cf-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a95d2696e744f60ed32428c51888888e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 7562, "upload_time": "2019-10-21T22:08:59", "upload_time_iso_8601": "2019-10-21T22:08:59.754781Z", "url": "https://files.pythonhosted.org/packages/ef/11/774c25cc03f55cdf52c0696ec2cd1c119ed94faeac2d5bdf460726f482a6/md2cf-0.2.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ecd90c2035fd62124c21d611d06b682c", "sha256": "b679be2652e8c9369b34d0ea6a6afe0b55309990b51e6bb4c87c6583afe3cd5b" }, "downloads": -1, "filename": "md2cf-0.2.2.tar.gz", "has_sig": false, "md5_digest": "ecd90c2035fd62124c21d611d06b682c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 5877, "upload_time": "2019-10-21T22:09:02", "upload_time_iso_8601": "2019-10-21T22:09:02.453774Z", "url": "https://files.pythonhosted.org/packages/0e/3e/4d3c460f13e3a6e7a92d5fa24c0ab4a77f69e4a00a1cb53f7d7a3c75efcd/md2cf-0.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "56d29e846bfceb9e9ca1c25eea17a060", "sha256": "a957a481f274b8581456718568d2b3c8ccc12462d4f7cce1e6223d8b9695af80" }, "downloads": -1, "filename": "md2cf-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "56d29e846bfceb9e9ca1c25eea17a060", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 12845, "upload_time": "2020-07-19T19:57:05", "upload_time_iso_8601": "2020-07-19T19:57:05.646136Z", "url": "https://files.pythonhosted.org/packages/aa/ce/45171a6af7d37b24bf9ebb59e172dec6408568f10b3b0b90fa4f6cf2a000/md2cf-1.0.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9c0baed70afa1d1e3adb8846e57da592", "sha256": "04823099ba26c5281ec7c50850a96222483ad4768ae95a54ed3a2f2a2546b418" }, "downloads": -1, "filename": "md2cf-1.0.0.tar.gz", "has_sig": false, "md5_digest": "9c0baed70afa1d1e3adb8846e57da592", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 11033, "upload_time": "2020-07-19T19:57:06", "upload_time_iso_8601": "2020-07-19T19:57:06.750213Z", "url": "https://files.pythonhosted.org/packages/a7/d0/6b754bd337d3d8620d467fabfbf04aaf07304e1ce3a79e7b45c0af67caec/md2cf-1.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "d051475c577766b4f944c033981846b2", "sha256": "f674765e8e356375a4a2e1d79029ce59c2b6c329e96d885dd34d16146cc88b71" }, "downloads": -1, "filename": "md2cf-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d051475c577766b4f944c033981846b2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 12884, "upload_time": "2020-07-19T20:07:09", "upload_time_iso_8601": "2020-07-19T20:07:09.374425Z", "url": "https://files.pythonhosted.org/packages/8a/2d/3635511b538e7dd5ee60feb96c0b9b4ef2e1c3338caa08cdff690af5b777/md2cf-1.0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ab4dec81866749863880c3e58e38e310", "sha256": "5b80809ac307e57ecd31978f4ec347798cc0bbe9286700e82c29faae33c270d9" }, "downloads": -1, "filename": "md2cf-1.0.1.tar.gz", "has_sig": false, "md5_digest": "ab4dec81866749863880c3e58e38e310", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 11081, "upload_time": "2020-07-19T20:07:10", "upload_time_iso_8601": "2020-07-19T20:07:10.629447Z", "url": "https://files.pythonhosted.org/packages/4a/f7/900a6b4412936ca93ee6a26c26f7a873bd0b0183ccd7189adda494843ebc/md2cf-1.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "6d6759e511fce71896b7381bf3909a18", "sha256": "f07cf0ee371a25b17155a1c7559048f3e1e8055858ed5b82d1cfc9a6d4a8139d" }, "downloads": -1, "filename": "md2cf-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "6d6759e511fce71896b7381bf3909a18", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 12886, "upload_time": "2020-07-19T20:13:09", "upload_time_iso_8601": "2020-07-19T20:13:09.725161Z", "url": "https://files.pythonhosted.org/packages/63/37/6308347ec2f0af934b20b2d2398bb3553ce9f21f59bf85feb3de2fadde9c/md2cf-1.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "406e3e0661794ebebfffc7451023c646", "sha256": "a3c5833d5b28bc52f607c323332995ed44ac358050161d9e3b8acf1f83fcb31e" }, "downloads": -1, "filename": "md2cf-1.0.2.tar.gz", "has_sig": false, "md5_digest": "406e3e0661794ebebfffc7451023c646", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 11087, "upload_time": "2020-07-19T20:13:10", "upload_time_iso_8601": "2020-07-19T20:13:10.727217Z", "url": "https://files.pythonhosted.org/packages/a0/06/dbca353e3ecc16a5db4caaf7edfbb91f0cfab13079c5b775f7ef281c05b3/md2cf-1.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "2329d2d1f3ae050a4f04d17b1420f893", "sha256": "51dbfa1896ec440053c241b0086c6877cc8ce6d639a78fb389e80f0c9d65917f" }, "downloads": -1, "filename": "md2cf-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "2329d2d1f3ae050a4f04d17b1420f893", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 12912, "upload_time": "2021-08-27T13:03:01", "upload_time_iso_8601": "2021-08-27T13:03:01.730789Z", "url": "https://files.pythonhosted.org/packages/6c/48/21deeee0f9b25424ea37905bca34a46566ebe619529ea47a76defda6e33e/md2cf-1.0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "392640638ae007173335a4bee0ad7171", "sha256": "1be95c11388c9b5afd09ab55711b16d214bb3d814ab0878b9bed7f3493edd5eb" }, "downloads": -1, "filename": "md2cf-1.0.3.tar.gz", "has_sig": false, "md5_digest": "392640638ae007173335a4bee0ad7171", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 11113, "upload_time": "2021-08-27T13:03:03", "upload_time_iso_8601": "2021-08-27T13:03:03.370917Z", "url": "https://files.pythonhosted.org/packages/ff/a6/83364cdfdc92e65cba7e4a8cd166d5d45a4e097510cb55532fecddaf33ac/md2cf-1.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "a2b597a0bb4fd439932675dac5084c1d", "sha256": "34e0f8a41b422073a9762eded5a619d855190bcb58c3b0c20a3a523a2008a168" }, "downloads": -1, "filename": "md2cf-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "a2b597a0bb4fd439932675dac5084c1d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 12986, "upload_time": "2021-11-25T21:23:27", "upload_time_iso_8601": "2021-11-25T21:23:27.718382Z", "url": "https://files.pythonhosted.org/packages/a0/90/feed64efd47ec93c39a5ff5f0f7f9640111b4736fa9d087494b6145991f1/md2cf-1.0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "11e84b5f784d59e691bdfc428d2739ab", "sha256": "5ad154edb8447a66128ea1a73ece5c4291a39dc3db9af542ae794e7261127d26" }, "downloads": -1, "filename": "md2cf-1.0.4.tar.gz", "has_sig": false, "md5_digest": "11e84b5f784d59e691bdfc428d2739ab", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 11203, "upload_time": "2021-11-25T21:23:28", "upload_time_iso_8601": "2021-11-25T21:23:28.940122Z", "url": "https://files.pythonhosted.org/packages/b8/29/b8d5696d5b3d380cff0b836a7d8335512c3387672cba6a165a778e0afc80/md2cf-1.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "cc53878f18e8347985409138674da99c", "sha256": "88fe2b9edccdb2383b63a3be7ce47ab9b03c993ae6d514496c3cd8e251f417e3" }, "downloads": -1, "filename": "md2cf-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "cc53878f18e8347985409138674da99c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14132, "upload_time": "2022-01-19T03:38:17", "upload_time_iso_8601": "2022-01-19T03:38:17.688755Z", "url": "https://files.pythonhosted.org/packages/3f/ae/775dbb6de4c7e91511660f1345e8154d9f86909df4cb1ec1310fe82195be/md2cf-1.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "549a90cdd9ca73f7100c5a91733862de", "sha256": "1ac1665d37516a7a9603ae5ee91ae8dd781711b84ae9caa1bff3ca206c7c97c2" }, "downloads": -1, "filename": "md2cf-1.1.0.tar.gz", "has_sig": false, "md5_digest": "549a90cdd9ca73f7100c5a91733862de", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 12398, "upload_time": "2022-01-19T03:38:19", "upload_time_iso_8601": "2022-01-19T03:38:19.438489Z", "url": "https://files.pythonhosted.org/packages/f2/96/f48420530a9971154b42cd2859b9435392e8a95ad2792b2245599c594443/md2cf-1.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "01bb700aced91a85e143c4d3585870a0", "sha256": "517dd87b244d0e973064703aaf45c810fadb4671afc712d51dde19b0d1948319" }, "downloads": -1, "filename": "md2cf-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "01bb700aced91a85e143c4d3585870a0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14132, "upload_time": "2022-01-19T04:02:26", "upload_time_iso_8601": "2022-01-19T04:02:26.412749Z", "url": "https://files.pythonhosted.org/packages/2e/72/7943c772773fb7bdbbbd840b91110f08c3247de4f8ac5bb90c5af044cf8b/md2cf-1.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "fb987154fbbb452511b0f546bce45aaf", "sha256": "e82ac559b8b63223668f39d245553290ffd7d965bef7e3b6e17ed0ebdfeeb7b7" }, "downloads": -1, "filename": "md2cf-1.1.1.tar.gz", "has_sig": false, "md5_digest": "fb987154fbbb452511b0f546bce45aaf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 12400, "upload_time": "2022-01-19T04:02:28", "upload_time_iso_8601": "2022-01-19T04:02:28.056506Z", "url": "https://files.pythonhosted.org/packages/c3/4f/907404c87f808dbc91d1bbd6b01b492bd6ff795bb63dbab6531c616f2387/md2cf-1.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "3c75d538b03ba49a592c74d924e011ff", "sha256": "bd8a8df361c0aab275e24939e47a95633a16ba0ffd624e142f444386a0ff2f62" }, "downloads": -1, "filename": "md2cf-1.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "3c75d538b03ba49a592c74d924e011ff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14136, "upload_time": "2022-01-25T14:13:17", "upload_time_iso_8601": "2022-01-25T14:13:17.017894Z", "url": "https://files.pythonhosted.org/packages/fc/83/55e8cb4380d58fbe246475f901f89abd1640d560d3ac19afdd306baf56b2/md2cf-1.1.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "64050fad6bc91510aa3e656eeaf1dce4", "sha256": "e12e69172cf37606a74ac007860ea12264d89d2fbe31b523a98317d0aa908a1a" }, "downloads": -1, "filename": "md2cf-1.1.2.tar.gz", "has_sig": false, "md5_digest": "64050fad6bc91510aa3e656eeaf1dce4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 12420, "upload_time": "2022-01-25T14:13:18", "upload_time_iso_8601": "2022-01-25T14:13:18.296772Z", "url": "https://files.pythonhosted.org/packages/01/1f/d27cbae4214d5a86c84d4316e521f2a26cba0e874884d41b16d166bf6721/md2cf-1.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "20158d1aacb8502f75acfea7ef5e4bb0", "sha256": "cd0873a1392c6a0e63d56bb50a2ee70c98ca8e61bb9a8279400c5c84cefc495a" }, "downloads": -1, "filename": "md2cf-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "20158d1aacb8502f75acfea7ef5e4bb0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14304, "upload_time": "2022-04-24T15:17:57", "upload_time_iso_8601": "2022-04-24T15:17:57.530145Z", "url": "https://files.pythonhosted.org/packages/29/02/923a4d58b32979f9c891bf7116537603f3472593180ea6de9274a45591e5/md2cf-1.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a9ae239661687f6fb4c7e5c0e0ce6fb9", "sha256": "dede69669d331f04d6bb382e430537128dcf00cc9432038c9da04e872ed46746" }, "downloads": -1, "filename": "md2cf-1.2.0.tar.gz", "has_sig": false, "md5_digest": "a9ae239661687f6fb4c7e5c0e0ce6fb9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 12597, "upload_time": "2022-04-24T15:17:59", "upload_time_iso_8601": "2022-04-24T15:17:59.169119Z", "url": "https://files.pythonhosted.org/packages/54/78/ef45350cdbfded4fb3ed4108d30b4a5beec978d68ccc26d8c7676be9da68/md2cf-1.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "8b71ab783b0db5a34f729a03c480b7eb", "sha256": "252dc432ef3eefc60e90f88c2f264f02d9a8f158716b9f90bfecef5f6d178da3" }, "downloads": -1, "filename": "md2cf-1.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8b71ab783b0db5a34f729a03c480b7eb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14512, "upload_time": "2022-04-26T00:55:10", "upload_time_iso_8601": "2022-04-26T00:55:10.371088Z", "url": "https://files.pythonhosted.org/packages/92/ce/6f278e9f7a3fe1de50db4e64cb2728b5e0797956256a4cef21f99175129a/md2cf-1.3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "264b4c52d324b9001f3c8ce57fb8f4c0", "sha256": "bd3506c75c24bdc8575eeb2a1717a0a1d3c839feb0fdfce88d477ea18c64a914" }, "downloads": -1, "filename": "md2cf-1.3.0.tar.gz", "has_sig": false, "md5_digest": "264b4c52d324b9001f3c8ce57fb8f4c0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 12786, "upload_time": "2022-04-26T00:55:11", "upload_time_iso_8601": "2022-04-26T00:55:11.888867Z", "url": "https://files.pythonhosted.org/packages/75/2c/d7c35f87613036f1f61e2eea6cdb560c797ca341765f98e104e0cda6a1ab/md2cf-1.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "8d043118a2b428f11d260a3c270289df", "sha256": "776c6abea5c4e4c957c44ba883844d0c1ed30a0fbfd671d8bc1e74bc64fb6a88" }, "downloads": -1, "filename": "md2cf-1.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8d043118a2b428f11d260a3c270289df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14435, "upload_time": "2022-05-01T01:46:55", "upload_time_iso_8601": "2022-05-01T01:46:55.802406Z", "url": "https://files.pythonhosted.org/packages/0b/ef/58f3582f84b804ff199f2345658d31c686baa7248c4e3c2feb562fa86469/md2cf-1.3.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7c85f12f93b250a685fdc1675ed17c8a", "sha256": "6d3937e831292d2d29b8ae432ffdda04ede8d2e217a5f48d7a959eb936561edf" }, "downloads": -1, "filename": "md2cf-1.3.1.tar.gz", "has_sig": false, "md5_digest": "7c85f12f93b250a685fdc1675ed17c8a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 15031, "upload_time": "2022-05-01T01:46:57", "upload_time_iso_8601": "2022-05-01T01:46:57.211371Z", "url": "https://files.pythonhosted.org/packages/12/be/961c77a582a117089aca1b2524f5f93ae6a0e748762d9480a5839881889d/md2cf-1.3.1.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8d043118a2b428f11d260a3c270289df", "sha256": "776c6abea5c4e4c957c44ba883844d0c1ed30a0fbfd671d8bc1e74bc64fb6a88" }, "downloads": -1, "filename": "md2cf-1.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8d043118a2b428f11d260a3c270289df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14435, "upload_time": "2022-05-01T01:46:55", "upload_time_iso_8601": "2022-05-01T01:46:55.802406Z", "url": "https://files.pythonhosted.org/packages/0b/ef/58f3582f84b804ff199f2345658d31c686baa7248c4e3c2feb562fa86469/md2cf-1.3.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7c85f12f93b250a685fdc1675ed17c8a", "sha256": "6d3937e831292d2d29b8ae432ffdda04ede8d2e217a5f48d7a959eb936561edf" }, "downloads": -1, "filename": "md2cf-1.3.1.tar.gz", "has_sig": false, "md5_digest": "7c85f12f93b250a685fdc1675ed17c8a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 15031, "upload_time": "2022-05-01T01:46:57", "upload_time_iso_8601": "2022-05-01T01:46:57.211371Z", "url": "https://files.pythonhosted.org/packages/12/be/961c77a582a117089aca1b2524f5f93ae6a0e748762d9480a5839881889d/md2cf-1.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }