{ "info": { "author": "Stephen McDowell", "author_email": "exhale.hosted@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Framework :: Sphinx :: Extension", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Documentation :: Sphinx", "Topic :: Software Development :: Documentation" ], "description": "\nExhale is a `Sphinx `_ extension that depends on\nthe excellent `Breathe`_ extension which enables parsing Doxygen documentation into the\nSphinx domain. Exhale provides a layer of automation, enabling launching Doxygen and\ngenerating the full website all from your ``conf.py``. Exhale will execute these\nactions by way of ``sphinx-build`` being invoked, allowing you to use it for hosting on\n`Read the Docs `_. Exhale was designed for generating html\noutput, and may not be appropriate for other builders provided by Sphinx.\n\n.. _Breathe: http://breathe.readthedocs.io/en/latest\n\n.. end_exhale_long_desc\n\nSee it in Action\n----------------------------------------------------------------------------------------\n\n.. begin_in_action\n\nThe `ExhaleCompanion `_ repository has three builds to demonstrate the\ndifferent options with respect to creating a Tree View, as well as details of specific\nHTML Theme choices:\n\n+------------------------------+------------------+----------------------+\n| HTML Theme Choice | TreeView Created | ExhaleCompanion Docs |\n+==============================+==================+======================+\n| `RTD Theme `_ | Yes | |rtd-docs| |\n+------------------------------+------------------+----------------------+\n| `Bootstrap Theme `_ | Yes | |bootstrap-docs| |\n+------------------------------+------------------+----------------------+\n| `Alabaster`_ | No | |alabaster-docs| |\n+------------------------------+------------------+----------------------+\n\n.. _companion: https://github.com/svenevs/exhale-companion\n\n.. _rtd: http://sphinx-rtd-theme.readthedocs.io/en/latest/\n.. _bstrap: https://ryan-roemer.github.io/sphinx-bootstrap-theme/\n.. _alabaster: http://alabaster.readthedocs.io/en/latest/\n\n.. |rtd-docs| image:: https://readthedocs.org/projects/my-favorite-documentation-test/badge/?version=latest\n :target: http://my-favorite-documentation-test.readthedocs.io/en/latest/\n\n.. |bootstrap-docs| image:: https://readthedocs.org/projects/my-favorite-documentation-test/badge/?version=bootstrap\n :target: http://my-favorite-documentation-test.readthedocs.io/en/bootstrap\n\n.. |alabaster-docs| image:: https://readthedocs.org/projects/my-favorite-documentation-test/badge/?version=alabaster\n :target: http://my-favorite-documentation-test.readthedocs.io/en/alabaster\n\n.. end_in_action\n\n.. begin_installation\n\nInstallation\n----------------------------------------------------------------------------------------\n\nExhale is a `Sphinx Extension`__ that depends on `Breathe`_ for access to the Doxygen\nreStructuredText directives, and both `BeautifulSoup`_ and `lxml`_ for parsing the\ngenerated Doxygen XML documentation. Exhale also uses `six`_ help account for the\nPython 2 unicode dilemma. The easiest way to install Exhale is:\n\n__ http://www.sphinx-doc.org/en/stable/extensions.html\n\n.. _BeautifulSoup: https://www.crummy.com/software/BeautifulSoup/bs4/doc/\n.. _lxml: http://lxml.de/\n.. _six: https://pythonhosted.org/six/\n\n.. code-block:: bash\n\n # NOTE: see version compatibility notes below.\n $ pip install exhale\n\nThis will install Exhale, as well as all of its dependencies.\n\n.. note::\n\n If you fail ``pip install exhale`` and it is failing on ``lxml``, you will likely\n need to install the proper development libraries. See the\n `lxml installation instructions`__ for possible fixes.\n\n ``lxml`` **is readily available for Read The Docs** and generally installs\n seamlessly for Unix systems, but my understanding is Windows users may need to put a\n little more effort in to get it to install.\n\n __ http://lxml.de/installation.html\n\n.. end_installation\n\n.. begin_version_compatibility\n\n.. _version_compatibility:\n\nExhale Version Compatibility with Python, Sphinx, and Breathe\n----------------------------------------------------------------------------------------\n\n+----------------+----------------+----------------+-----------------+\n| Exhale Version | Python Version | Sphinx Version | Breathe Version |\n+================+================+================+=================+\n| 0.2.1-0.2.3 | 2.7, 3.3+ | >=1.6.1 | \"Any\" |\n+----------------+----------------+----------------+-----------------+\n| <=0.2.0 | 2.7, 3.3+ | >=1.0 | \"Any\" |\n+----------------+----------------+----------------+-----------------+\n\nSphinx 2.0 requires Python 3.5+. Breathe 4.13.0 drops support for Sphinx<2.0 in better\nsupport of the Sphinx C++ domain.\n\nImplications:\n\n- **Unless you have a genuine need for Python 2.7**, you will be better served by\n pinning ``sphinx>=2.0`` and ``breathe>=4.13.0``. It has many important improvements.\n\n- For Python 3.5+, you should pin your documentation requirements to::\n\n sphinx>=2.0\n breathe>=4.13.0\n exhale\n\n- For Python 2.7, you should pin your documentation requirements to::\n\n sphinx==1.8.5\n breathe==4.12.0\n exhale\n\n**Order matters**, namely that ``sphinx`` and ``breathe`` appear / are installed before\n``exhale``. Exhale 0.* releases will continue support Python 2.7, but users need to be\naware of the dependencies between Python, Sphinx, and Breathe versions.\n\n.. end_version_compatibility\n\nUsage\n----------------------------------------------------------------------------------------\n\nSee the `full documentation and usage guide`__.\n\n__ http://exhale.readthedocs.io/en/latest\n\n.. begin_exhale_is_it_for_me\n\nExhale might **not** be the tool you are looking for! It was designed to be as\nintuitive and flexible as possible, but it does require more machinery to get\neverything started.\n\n**Why use it?**\n You would use Exhale if you want to have beautiful Sphinx generated websites, but\n also see the value of the Class and File hierarchies provided by Doxygen. From\n running Doxygen for you, to organizing your full API every time, you won't need to\n worry about your documentation getting out of sync with the code --- it's\n regenerated on the fly every time.\n\n**Why not use it?**\n It may be more involved than you need. Check out the ``breathe-apidoc`` tool\n that comes with your installation of ``breathe``. It is quite similar to the\n `Sphinx API doc tool `_,\n and that may be all you are looking for to get your documentation displayed.\n\n If you are working with a small enough framework, you may also be satisfied with\n just using the ``.. autodoxygenindex::`` directive from ``breathe``. It works very\n well!\n\n**The Main Difference**\n The Class and File hierarchies are only available in Sphinx via Exhale \ud83d\ude0a\n\n Depending on the size and complexity of your project, ``breathe-apidoc`` or\n ``autodoxygenindex`` may be more appropriate.\n\n.. end_exhale_is_it_for_me\n\n.. begin_quickstart_guide\n\nQuickstart Guide\n----------------------------------------------------------------------------------------\n\nYou will need to edit **2** files: ``conf.py`` to configure the extensions, and\n``index.rst`` (or whatever document you choose) to include the generated api in a\n``toctree`` directive.\n\nSetup the Extensions in ``conf.py``\n****************************************************************************************\n\nAssuming your Doxygen documentation is in order, and you already have your Sphinx\nproject ready to go, we need to configure the Breathe and Exhale extensions. For this\nguide I assume the following directory structure::\n\n my_project/\n \u2502\n \u251c\u2500\u2500 docs/\n \u2502 \u251c\u2500\u2500 conf.py\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 index.rst\n \u2502\n \u251c\u2500\u2500 include/\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 common.hpp\n \u2502\n \u2514\u2500\u2500 src/\n \u2514\u2500\u2500 common.cpp\n\nThis structure is not required, but you'll need to change values accordingly.\n\n.. warning::\n\n When using *relative* paths, these are always relative to ``conf.py``. In the above\n structure I do **not** have a \"separate source and build directory\" from Sphinx. If\n you do, make sure you are using the correct paths.\n\n.. code-block:: py\n\n # The `extensions` list should already be in here from `sphinx-quickstart`\n extensions = [\n # there may be others here already, e.g. 'sphinx.ext.mathjax'\n 'breathe',\n 'exhale'\n ]\n\n # Setup the breathe extension\n breathe_projects = {\n \"My Project\": \"./doxyoutput/xml\"\n }\n breathe_default_project = \"My Project\"\n\n # Setup the exhale extension\n exhale_args = {\n # These arguments are required\n \"containmentFolder\": \"./api\",\n \"rootFileName\": \"library_root.rst\",\n \"rootFileTitle\": \"Library API\",\n \"doxygenStripFromPath\": \"..\",\n # Suggested optional arguments\n \"createTreeView\": True,\n # TIP: if using the sphinx-bootstrap-theme, you need\n # \"treeViewIsBootstrap\": True,\n \"exhaleExecutesDoxygen\": True,\n \"exhaleDoxygenStdin\": \"INPUT = ../include\"\n }\n\n # Tell sphinx what the primary language being documented is.\n primary_domain = 'cpp'\n\n # Tell sphinx what the pygments highlight language should be.\n highlight_language = 'cpp'\n\nWith the above settings, Exhale would produce the ``docs/api`` folder, the file\n``docs/api/library_root.rst`` (among many others), and it would use Doxygen to parse\n``docs/../include`` and save the output in ``docs/doxyoutput``. Meaning the following\nstructure would be created::\n\n my_project/\n \u251c\u2500\u2500 docs/\n \u2502\u00a0\u00a0 \u251c\u2500\u2500 api/\n \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 library_root.rst\n \u2502 \u2502\n \u2502\u00a0\u00a0 \u251c\u2500\u2500 conf.py\n \u2502 \u251c\u2500\u2500 index.rst\n \u2502 \u2502\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 doxyoutput/\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 xml/\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 index.xml\n \u2502\n \u251c\u2500\u2500 include/\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 common.hpp\n \u2502\n \u2514\u2500\u2500 src/\n \u2514\u2500\u2500 common.cpp\n\n.. note::\n\n You are by no means required to use Exhale to generate Doxygen. If you choose not to\n I assume you have the wherewithal to figure it out on your own.\n\nMake Your Documentation Link to the Generated API\n****************************************************************************************\n\nSo the final step is, in your ``index.rst`` or some other ``toctree`` directive, tell\nSphinx to link in the generated ``\"{containmentFolder}/{rootFileName}\"`` document:\n\n.. code-block:: rst\n\n .. toctree::\n :maxdepth: 2\n\n about\n api/library_root\n\n\n.. _quickstart_clean_target:\n\nOptional: Create a Proper Clean Target\n****************************************************************************************\n\nThe ``sphinx-quickstart`` utility will create a ``Makefile`` for you, you are advised\nto create an *explicit* ``clean`` target that removes the generated utilities.\n\n1. You can just as easily specify to ``breathe_projects`` a path such as\n ``_build/doxyoutput/xml``, or ``../build/doxyoutput/xml`` if you have separate source\n and build directories. This will ensure that a ``make clean`` will delete these.\n\n To avoid confusing users who are new to Sphinx, I encourage something in the same\n directory as ``conf.py`` for simplicity.\n\n2. The generated API **must** appear in the Sphinx source directory. If you put it\n under ``_build``, it will not get parsed.\n\nSo bust out the ``Makefile`` provided by Sphinx Quickstart and add ``clean`` to the\n``.PHONY`` line, and the ``clean`` target as shown below (assuming you've been using\nthe paths specified above):\n\n.. code-block:: make\n\n .PHONY: help Makefile clean\n\n clean:\n rm -rf doxyoutput/ api/\n @$(SPHINXBUILD) -M clean \"$(SOURCEDIR)\" \"$(BUILDDIR)\" $(SPHINXOPTS) $(O)\n\n.. danger::\n\n ``make`` **requires** ``TAB`` characters! If you just copy-pasted that, **you got\n space characters** (sorry).\n\n.. note::\n\n The above code **must** appear **before** the ``%: Makefile`` \"catch-all\" target that\n Sphinx produced by default. Otherwise...well the catch-all target catches all!\n\n.. end_quickstart_guide\n\nParticipate\n----------------------------------------------------------------------------------------\n\nIf you find a problem or think there is something that should change, please submit an\nissue (or pull request!) explaining what should change. I made this because it was\nsomething I really wanted, and felt the community at large could benefit from as well.\nI put a lot of effort into making it flexible, but it is by no means perfect.\n\nCredit\n----------------------------------------------------------------------------------------\n\n.. begin_credit\n\nThis project could not exist without the already excellent tools available: Doxygen,\nSphinx, Breathe, and many others. In particular, though, for the Tree View hierarchies\nto be successful, I vendor copies of two excellent libraries that I make no claims to.\nThey are vendored with your installation of Exhale, in accordance with each project's\nlicense:\n\n1. For non-bootstrap, I used Kate Morley's excellent and lightweight collapsibleLists_\n including the sample CSS / images on that post. She includes a generous\n `CC0 1.0 license `_ for these files, as well as the rest of\n her website.\n\n For every HTML Theme I have tried, except for ones using bootstrap, this library\n works reliably and consistently. It matches the Sphinx RTD theme quite well, too!\n\n2. For bootstrap, I used Jon Miles' comprehensive `bootstrap-treeview`__ library. Jon\n Miles hosts this library using the\n `Apache v2 license `_.\n\n This library is exceptionally well thought out and enables an impressive amount of\n customization. At this time, Exhale does not expose any of the available\n customizations. If there is a specific one you'd like to see, please join the\n `discussion here `_.\n\nBoth of these libraries and copies of their licenses can be found in the\n`data folder of the source code `_.\n\n.. _collapsibleLists: http://code.iamkate.com/javascript/collapsible-lists/\n\n__ https://github.com/jonmiles/bootstrap-treeview\n\n.. end_credit\n\nLicense\n----------------------------------------------------------------------------------------\n\nThis project uses a BSD 3-clause license, in hopes that it will be accessible to most\nprojects. If you require a different license, please raise an issue and I will consider\na dual license.\n\nThe full license is\n`available here `_.\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/svenevs/exhale", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "exhale", "package_url": "https://pypi.org/project/exhale/", "platform": "", "project_url": "https://pypi.org/project/exhale/", "project_urls": { "Homepage": "https://github.com/svenevs/exhale" }, "release_url": "https://pypi.org/project/exhale/0.2.3/", "requires_dist": [ "bs4", "lxml", "sphinx (>=1.6.1)", "breathe", "six" ], "requires_python": "", "summary": "Automatic C++ library API documentation generator using Doxygen, Sphinx, and Breathe. Exhale revives Doxygen's class / file hierarchies using reStructuredText for superior markup syntax / websites.", "version": "0.2.3" }, "last_serial": 5361174, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "440ce9707e56f5e077a6a830b270b110", "sha256": "ee33f1ad794609b50c75996d581ee4ab628280bb6458979bed2eea3b2a11d9a1" }, "downloads": -1, "filename": "exhale-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "440ce9707e56f5e077a6a830b270b110", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 94655, "upload_time": "2017-09-13T03:44:31", "url": "https://files.pythonhosted.org/packages/53/c9/863bfb7f6ed20b53743fdee5ec1e4160b8b255b2ccf25a32d77197826527/exhale-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2ca84ada6c5f5b9c807e841cdafcb929", "sha256": "0cd20eee5ecc70aeb1bccb855b35f1150f50c637a30b6f25168385e15a8c1e2e" }, "downloads": -1, "filename": "exhale-0.1.2.tar.gz", "has_sig": false, "md5_digest": "2ca84ada6c5f5b9c807e841cdafcb929", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83835, "upload_time": "2017-09-13T03:44:33", "url": "https://files.pythonhosted.org/packages/c5/86/1e52acc0c7b99abd882c34d815a42a7fcfa1fcbd9d6abdf1d46f7b5b8a08/exhale-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "9df4432aa22b53e2de5b66a0b431494c", "sha256": "b8fec2059ec6f97d4f4e07668c058213ebc0b40819102a9212fabc230590d67b" }, "downloads": -1, "filename": "exhale-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9df4432aa22b53e2de5b66a0b431494c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 94530, "upload_time": "2017-09-13T05:12:29", "url": "https://files.pythonhosted.org/packages/f8/78/a98ab433334830eecb51c8400a61a67840df503691ca872bc2397eee48fc/exhale-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "337458dbf0cb944e11d49465c6f08901", "sha256": "846d938371afba00d38236909590c637efceee105e4ec77b553a74f44f3e4609" }, "downloads": -1, "filename": "exhale-0.1.3.tar.gz", "has_sig": false, "md5_digest": "337458dbf0cb944e11d49465c6f08901", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83777, "upload_time": "2017-09-13T05:12:31", "url": "https://files.pythonhosted.org/packages/33/82/01661246bb0c4787bb68cf4b47cae5ac3ff5de92e50871492503a0a23c79/exhale-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "584e2072e9b7de2aad93022a1c6a6252", "sha256": "a57b582330c3cce5c54ff5c6260bf10a8e8a36369fa721e78ef9eedb25dce671" }, "downloads": -1, "filename": "exhale-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "584e2072e9b7de2aad93022a1c6a6252", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 94431, "upload_time": "2017-09-13T05:32:34", "url": "https://files.pythonhosted.org/packages/cc/c8/19a0229f79165e7655f79a19bb5bd58843d801447565f127dc0638db0b35/exhale-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "29cda2a916f12b80d35db921113d53c6", "sha256": "ae9dc755deaf5d634b1e00f7a2d6d8e75e258f903dec5cb86ef7e6c667ee2e81" }, "downloads": -1, "filename": "exhale-0.1.4.tar.gz", "has_sig": false, "md5_digest": "29cda2a916f12b80d35db921113d53c6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 84072, "upload_time": "2017-09-13T05:32:36", "url": "https://files.pythonhosted.org/packages/4a/3b/bf079ca8484cda9b8c205e5b29b3e51ef467db5250afd4121c750bf7b331/exhale-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "962cf03d50491e3c2ad17c3b27b42912", "sha256": "4b5a3b22c15c9a87246c6bb5c58f3ed679bda28bad0e4b0c81d06e594bb38d2a" }, "downloads": -1, "filename": "exhale-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "962cf03d50491e3c2ad17c3b27b42912", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 94481, "upload_time": "2017-09-14T16:58:03", "url": "https://files.pythonhosted.org/packages/93/11/782930f41e31d49b20177c22b22e83f1074999a2e3cb0445042f4cb21d3a/exhale-0.1.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "16f3478f25e93e4023bb469f9b12075a", "sha256": "0b4346ba7cc876cb62f36b0258bcf66d57189acee636ffdb83b31c73ecc51142" }, "downloads": -1, "filename": "exhale-0.1.5.tar.gz", "has_sig": false, "md5_digest": "16f3478f25e93e4023bb469f9b12075a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 84191, "upload_time": "2017-09-14T16:58:06", "url": "https://files.pythonhosted.org/packages/b4/e5/11abcd877c7a84d523159b21f8cf1b60db8b72ed96a804e5fadd0351c19b/exhale-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "0458f276048d7fd810125d0c706d1501", "sha256": "ea8d6f24ccdadf7e50ee545f49c7ece25acff96b54bb85f6985f1a436117558f" }, "downloads": -1, "filename": "exhale-0.1.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0458f276048d7fd810125d0c706d1501", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 95375, "upload_time": "2018-02-04T08:58:37", "url": "https://files.pythonhosted.org/packages/25/f0/d5363f2246d73dfee333b5de933999404c7de0d85a483f9fd6f545686e2f/exhale-0.1.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "07236a021bdbc9263c46c725f412f490", "sha256": "acf11c54165633a517f468301f3fdd268f582cf09295dd2b82acaf734a99b84a" }, "downloads": -1, "filename": "exhale-0.1.6.tar.gz", "has_sig": false, "md5_digest": "07236a021bdbc9263c46c725f412f490", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85104, "upload_time": "2018-02-04T08:58:39", "url": "https://files.pythonhosted.org/packages/c8/38/a3f4abf8120e443725a7101d69d980415ecfe47a5ed74014d5b76042dd7a/exhale-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "8c1e9dcce9f95b061dca61be222a706c", "sha256": "cca46749c409f172c1205b27307fbcc7a69e818fae932cb175f78e793632f0b7" }, "downloads": -1, "filename": "exhale-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8c1e9dcce9f95b061dca61be222a706c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 95741, "upload_time": "2018-02-16T22:33:01", "url": "https://files.pythonhosted.org/packages/93/8a/b603c18dbf2f6814642a50a614152f1eeb39182b86b7e121b2c0ecc25db7/exhale-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "39f34913af82325b33e6340f5e1b2d26", "sha256": "a7ed128dcf95b19f97e8c3fd57dede90e15875b1fdf64b923a46291a7c5afd77" }, "downloads": -1, "filename": "exhale-0.1.7.tar.gz", "has_sig": false, "md5_digest": "39f34913af82325b33e6340f5e1b2d26", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85463, "upload_time": "2018-02-16T22:33:03", "url": "https://files.pythonhosted.org/packages/0d/9a/c1a17063f742656d5314b55af90da64bef39728f85d6aeca5479b0f95e70/exhale-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "4f7fcf451f24949546f20c01548529ce", "sha256": "48dbb718eb5d16741a54b70e2b88ba7faa1a995c0c1e9a5334d199b905607277" }, "downloads": -1, "filename": "exhale-0.1.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4f7fcf451f24949546f20c01548529ce", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 95834, "upload_time": "2018-02-28T10:31:34", "url": "https://files.pythonhosted.org/packages/12/f4/e6ee0efc784304b3b91a039583867a75bd967b0d437a375e10ebd5690f7b/exhale-0.1.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4092c11852f41af9ef3a578bbbcc75d7", "sha256": "ddb3af70cf0154e7d5985d348615d1645bea4cd1cea27610ecaa992adf007054" }, "downloads": -1, "filename": "exhale-0.1.8.tar.gz", "has_sig": false, "md5_digest": "4092c11852f41af9ef3a578bbbcc75d7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85552, "upload_time": "2018-02-28T10:31:38", "url": "https://files.pythonhosted.org/packages/d5/6f/bae2f9e6a2ff0646fb2cd181a81b2a6d8a0afe491d892106f15080c12346/exhale-0.1.8.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ba3f5306f0613071bcb700d019162f54", "sha256": "eded1755f29874649640a99a9845fbcd2c71cdc35de5af727ca5cc7161cb2a15" }, "downloads": -1, "filename": "exhale-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ba3f5306f0613071bcb700d019162f54", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 116328, "upload_time": "2018-08-01T13:10:15", "url": "https://files.pythonhosted.org/packages/9a/59/66284a59241407b62a60160ab63617b6cf0072ae6d80e7f8df5563c21fdd/exhale-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "669588d8c4bb88ce7b6b7d5cbd961ebb", "sha256": "fa1d7af10f1c96750243434bbe9b57d8611b3c3a6332e9e3507d79bc5da14ad5" }, "downloads": -1, "filename": "exhale-0.2.0.tar.gz", "has_sig": false, "md5_digest": "669588d8c4bb88ce7b6b7d5cbd961ebb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 87707, "upload_time": "2018-08-01T13:10:17", "url": "https://files.pythonhosted.org/packages/8c/37/c98d9bccd0acd644dcddcec05d7d4101240ac43aa0791f5d7a8f5acb7431/exhale-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "be108fe7ad473250966162ab030a4a24", "sha256": "8e58b726b566decfeec61eca06d332d8aa00ba94e9192664923ae6129db12a68" }, "downloads": -1, "filename": "exhale-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "be108fe7ad473250966162ab030a4a24", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 102081, "upload_time": "2018-10-20T16:59:02", "url": "https://files.pythonhosted.org/packages/43/cf/2cdb5ac59f552f166385da155fdc5475e0f7b6b51f013f3b933b6d34cfb1/exhale-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bd4d1d5552050e6573f67b41c141f59c", "sha256": "1c4ef0e1f0451f746cd770eb1059f4bebaab2d87e93a95d098f70812fad43b60" }, "downloads": -1, "filename": "exhale-0.2.1.tar.gz", "has_sig": false, "md5_digest": "bd4d1d5552050e6573f67b41c141f59c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 97572, "upload_time": "2018-10-20T16:59:04", "url": "https://files.pythonhosted.org/packages/c2/b5/ac807e37f595c335e628bec8c355a0facbeb43f8824f954f4f0df7fb8d5f/exhale-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "c023bdbb8d0ef31a4b3eab29ad1ab46f", "sha256": "c76b7463e45f2143f1e8aaaed86a05fc672e189567d67d1c0cf2cb1538ed307b" }, "downloads": -1, "filename": "exhale-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c023bdbb8d0ef31a4b3eab29ad1ab46f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 102072, "upload_time": "2019-02-03T08:12:44", "url": "https://files.pythonhosted.org/packages/a5/f5/2b8e71640c4e8eab9b2258e08435ff53913e73f3996b5ef2f65c30442783/exhale-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7a6f7081d730254e8d51f04fc7721aef", "sha256": "16f8ca9c63fd35eb1c7d4b52e182b04f3275ec6cc3176d89e5b5d0a37bb0fe63" }, "downloads": -1, "filename": "exhale-0.2.2.tar.gz", "has_sig": false, "md5_digest": "7a6f7081d730254e8d51f04fc7721aef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 97535, "upload_time": "2019-02-03T08:12:46", "url": "https://files.pythonhosted.org/packages/51/86/860eaa6e375e4cdf41e405576269f399d6a826ac991778391970c53abc2c/exhale-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "fbfd1be64a8fcb249672debbde79981a", "sha256": "8f974a48fa02b50b2b96fa35221c056a7099af1660fe4734b967bd0304afb7bc" }, "downloads": -1, "filename": "exhale-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fbfd1be64a8fcb249672debbde79981a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 103072, "upload_time": "2019-06-05T06:16:43", "url": "https://files.pythonhosted.org/packages/14/7e/e05fa60e009a9d457f916132296bb702324f773ad41296b77199149439be/exhale-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e91456236a745c4f5cf5b5a9af3abe9", "sha256": "ce936be4330db0d3ea96dbda8144cda202d2e57cd52f50f89c7b0393b528e6c5" }, "downloads": -1, "filename": "exhale-0.2.3.tar.gz", "has_sig": false, "md5_digest": "9e91456236a745c4f5cf5b5a9af3abe9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 102875, "upload_time": "2019-06-05T06:16:46", "url": "https://files.pythonhosted.org/packages/c7/fe/ad364f54e7c7c11449ae4ec8a5c545969c65bbdaa4a1723c387a7cdd9b32/exhale-0.2.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "fbfd1be64a8fcb249672debbde79981a", "sha256": "8f974a48fa02b50b2b96fa35221c056a7099af1660fe4734b967bd0304afb7bc" }, "downloads": -1, "filename": "exhale-0.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fbfd1be64a8fcb249672debbde79981a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 103072, "upload_time": "2019-06-05T06:16:43", "url": "https://files.pythonhosted.org/packages/14/7e/e05fa60e009a9d457f916132296bb702324f773ad41296b77199149439be/exhale-0.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e91456236a745c4f5cf5b5a9af3abe9", "sha256": "ce936be4330db0d3ea96dbda8144cda202d2e57cd52f50f89c7b0393b528e6c5" }, "downloads": -1, "filename": "exhale-0.2.3.tar.gz", "has_sig": false, "md5_digest": "9e91456236a745c4f5cf5b5a9af3abe9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 102875, "upload_time": "2019-06-05T06:16:46", "url": "https://files.pythonhosted.org/packages/c7/fe/ad364f54e7c7c11449ae4ec8a5c545969c65bbdaa4a1723c387a7cdd9b32/exhale-0.2.3.tar.gz" } ] }