{ "info": { "author": "Mateusz Bysiek", "author_email": "mateusz.bysiek@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Education", "Topic :: Scientific/Engineering", "Topic :: Software Development :: Code Generators", "Topic :: Software Development :: Compilers", "Topic :: Software Development :: Pre-processors", "Topic :: Utilities" ], "description": ".. role:: python(code)\n :language: python\n\n\nhorast\n======\n\nHuman-oriented abstract syntax tree (AST) parser/unparser for Python 3 that doesn't discard comments.\n\n.. image:: https://img.shields.io/pypi/v/horast.svg\n :target: https://pypi.org/project/horast\n :alt: package version from PyPI\n\n.. image:: https://travis-ci.org/mbdevpl/horast.svg?branch=master\n :target: https://travis-ci.org/mbdevpl/horast\n :alt: build status from Travis CI\n\n.. image:: https://ci.appveyor.com/api/projects/status/github/mbdevpl/horast?svg=true\n :target: https://ci.appveyor.com/project/mbdevpl/horast\n :alt: build status from AppVeyor\n\n.. image:: https://api.codacy.com/project/badge/Grade/33195093bb1b448bb9a5368b3507d615\n :target: https://www.codacy.com/app/mbdevpl/horast\n :alt: grade from Codacy\n\n.. image:: https://codecov.io/gh/mbdevpl/horast/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/mbdevpl/horast\n :alt: test coverage from Codecov\n\n.. image:: https://img.shields.io/github/license/mbdevpl/horast.svg\n :target: https://github.com/mbdevpl/horast/blob/master/NOTICE\n :alt: license\n\nThis package provides new AST node types (Comment and Directive) which inherit from nodes in typed_ast.ast3 module.\nAdditionally, it provides implementation of parser and unparser for the extended AST allowing\nstraightforward readable code generation.\n\nSimple example of how to use this package:\n\n.. code:: python\n\n from horast import parse, unparse\n\n tree = parse(\"\"\"a = 1 # a equals one after this\"\"\")\n print(unparse(tree))\n # this will print the code with original comment\n\nMore examples in `examples.ipynb `_.\n\n\ntechnical details\n-----------------\n\nParser is based on built-in tokenize module, as well as community packages asttokens and typed_ast.\n\nUnparser is essentially an extension of Unparser class from static_typing package.\n\nNodes provided and handled by horast are listed below.\n\n\nComment\n~~~~~~~\n\nFull line as well as end-of-line comments are parsed/unparsed correctly when they are outside\nof multi-line expressions.\n\nCurrently, handling of comments within multi-line expressions is implemented only partially.\n\n\nBlockComment\n~~~~~~~~~~~~\n\n**Not implemented yet.**\n\nThis node type is intended to store consecutive full-line comments in a\nsingle AST node, therefore simplifying handling of large blocks of comments.\n\n\nDirective\n~~~~~~~~~\n\nSince Python doesn't offer a direct way to convey directives in code,\ncomments beginning with any of the following prefixes will not be classified\nas typical comments, but as directives:\n\n* if\n* else\n* endif\n* def\n* undef\n* ifdef\n* ifndef\n\nHowever in Python code they still remain as usual comments.\n\nFor example, the comments in the following code will all be classified as directives.\n\n.. code:: python\n\n #ifdef DEBUG\n debugging = True\n #else\n debugging = False\n #fi\n\nHowever, when executed as Python, ``debugging`` will always end up ``False``\nbecause directives are preserved as usual comments in Python and therefore\nthey are ignored.\n\nTherefore, the ``Directive`` node is not meant to enable preprocessing of\nPython, at least for now.\n\nNote: the prefix is checked exactly. See the following example:\n\n.. code:: python\n\n #if something\n # if some other thing\n\nThe comment in the first line will become ``Directive`` object, while the one\non the second like will become ``Comment`` object.\n\nCurrently, this node is meant to work towards AST compatibility between\nPython and other languages, to aide code generation from Python AST into code\nin other languages -- one such use case is\n`*transpyle* project `_.\n\n\nPragma\n~~~~~~\n\n``Pragma`` nodes follow the same general rules as ``Directive`` nodes, i.e. they are\nstored in Python code as comments, but a comment will be classified as a pragma\nwhen it's prefixed with a predefined prefix:\n\n* ``\" pragma:\"``\n\nAdditionally, two subclasses of Pragma are defined in horast, each with its\nown prefix that builds upon the generic pragma prefix:\n\n* ``OpenMpPragma`` class defines prefix ``\" pragma: omp\"`` and stores OpenMP pragmas.\n* ``OpenAccPragma`` class defines prefix ``\" pragma: acc\"`` and stores OpenACC pragmas.\n\nA code snippet below contains all 3 pragma types.\n\n.. code:: python\n\n # pragma: once\n use_openmp = True\n use_openacc = True\n ...\n a, b = np.ndarray(...)\n c = np.zeros(...)\n # pragma: acc parallel copyin(a,b) copyout(c)\n # pragma: acc loop gang\n for y in range(ymax): # type: np.int32\n # pragma: acc loop worker\n for i in range(imax): # type: np.int32\n # pragma: acc loop vector reduction(+: c[y][x])\n for x in range(xmax): # type: np.int32\n c[y, x] += a[y, i] * b[i, x]\n # pragma: acc end parallel\n ...\n # pragma: omp parallel do\n for i in range(input_data.size): # type: int\n # here we compute spam spam spam\n heavy_compute(input_data[i])\n ...\n\nAnd thus, in the example above:\n\n* all comments starting with ``\" pragma: omp\"`` become ``OpenMpPragma`` objects,\n* all comments starting with ``\" pragma: acc\"`` become ``OpenAccPragma`` objects,\n* all other comments starting with ``\" pragma:\"`` become ``Pragma`` objects,\n* type comments are ignored, and\n* all other comments become ``Comment`` objects.\n\n\nAdditionally, horast module provides an extensible infrastructure to define\ncustom ``Pragma`` subclasses, enabling user to define their own pragmas for\nexperimentation. The provided OpenMP and OpenACC pragma definitions serve\nas examples of how to use this feature.\n\n\nInclude\n~~~~~~~\n\nSimilarly to how pragmas are handled, if a comment begins with ``\" include:\"``\nprefix, it will be classified as a special kind of include directive.\n\nAgain, this will be preserved as comment in Python code, but it's useful\nfor enhancing syntactic compatibility between Python and other, especially\nstatically compiled languages.\n\n\nrequirements\n------------\n\nCPython 3.5 or later.\n\nPython libraries as specified in `requirements.txt `_.\n\nBuilding and running tests additionally requires packages listed in `test_requirements.txt `_.\n\n\n", "description_content_type": "text/x-rst; charset=UTF-8", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mbdevpl/horast", "keywords": "abstract syntax tree,ast,comments,directives,parsing,readability,type hints,unparsing", "license": "Apache License 2.0", "maintainer": "Mateusz Bysiek", "maintainer_email": "mateusz.bysiek@gmail.com", "name": "horast", "package_url": "https://pypi.org/project/horast/", "platform": "", "project_url": "https://pypi.org/project/horast/", "project_urls": { "Homepage": "https://github.com/mbdevpl/horast" }, "release_url": "https://pypi.org/project/horast/0.4.0/", "requires_dist": [ "asttokens (==1.*,>=1.1.13)", "static-typing (~=0.2.7)", "typed-ast (~=1.4)", "typed-astunparse (==2.*,>=2.1.4)", "version-query (==1.*,>=1.0.5)" ], "requires_python": ">=3.5", "summary": "human-oriented ast parser/unparser", "version": "0.4.0" }, "last_serial": 5734837, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "5f3618a019247bfa10c0233d4f0d9827", "sha256": "c7ee247213020bf0a05f7ffcf24fd8b872547f3f9b9b7c3ecce852b6b47d711e" }, "downloads": -1, "filename": "horast-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5f3618a019247bfa10c0233d4f0d9827", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12893, "upload_time": "2017-08-30T00:33:27", "url": "https://files.pythonhosted.org/packages/41/9c/b9cbbaed60331afbf424f1c6b1d6b6d5122b677f15038f664df8aff93bde/horast-0.1.0-py3-none-any.whl" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "6c32c6697bcad4a36d56d38e0a905bbc", "sha256": "5b66d9e9f36b72007dd4244646330d0e331fe322e08c1712fcb059c21fb18c6f" }, "downloads": -1, "filename": "horast-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6c32c6697bcad4a36d56d38e0a905bbc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 13429, "upload_time": "2017-10-17T09:35:13", "url": "https://files.pythonhosted.org/packages/70/5c/3115090622a855886c639010bb47ad875f0e836204c1b067d404511a85cb/horast-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38c3f226ca2124f8528872b3d8ddcd94", "sha256": "8ec80c441a89a385e08ab8ae8291bcaad5a376a193bb27fbf5c1ed012b882095" }, "downloads": -1, "filename": "horast-0.2.0.tar.gz", "has_sig": false, "md5_digest": "38c3f226ca2124f8528872b3d8ddcd94", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 20877, "upload_time": "2017-10-17T09:35:14", "url": "https://files.pythonhosted.org/packages/5d/e9/aedc739ac5f52130075594de10809231ebddd16ed42d49d63a25a34da18c/horast-0.2.0.tar.gz" } ], "0.2.0.dev1": [ { "comment_text": "", "digests": { "md5": "e2832e8d832a731c946b7660a1ec0d23", "sha256": "2f75269867cd1e3487c23d9049e7163df84c45780d068b50e39c1a7b36a21ad3" }, "downloads": -1, "filename": "horast-0.2.0.dev1-py3-none-any.whl", "has_sig": false, "md5_digest": "e2832e8d832a731c946b7660a1ec0d23", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 14695, "upload_time": "2017-09-04T07:30:58", "url": "https://files.pythonhosted.org/packages/d7/ae/8d943bca8db3e00d789c492a6bbabe169945ac5a26f33662c2beb4b29dd0/horast-0.2.0.dev1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ba7aecf2f0e966895147f87abc376f2", "sha256": "7f4f9567e34c3ea9364146c8ebf7e5dcc680cd6324adf42b5d7ed5332e29b85b" }, "downloads": -1, "filename": "horast-0.2.0.dev1.tar.gz", "has_sig": false, "md5_digest": "0ba7aecf2f0e966895147f87abc376f2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 20944, "upload_time": "2017-09-04T07:31:16", "url": "https://files.pythonhosted.org/packages/17/87/72f40b08a4f0f3ebc1af78124ce7fea6e109e13e1eea6a3dd197023dc021/horast-0.2.0.dev1.tar.gz" } ], "0.2.0.dev2": [ { "comment_text": "", "digests": { "md5": "5cf5ce6147b0bd1c82588fd8f58c28b5", "sha256": "b89dec34716f130564ba1153df7bde5b590c878fa69583118f5f83976c27c61b" }, "downloads": -1, "filename": "horast-0.2.0.dev2-py3-none-any.whl", "has_sig": false, "md5_digest": "5cf5ce6147b0bd1c82588fd8f58c28b5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 14956, "upload_time": "2017-09-15T16:13:42", "url": "https://files.pythonhosted.org/packages/f6/29/247b3557fead466c6bac7b858501d4bd84ab11716bc321ef742431530416/horast-0.2.0.dev2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6f8ce6b4abb5c7975d8fcfa0411dc7f7", "sha256": "5f6f0d2c0a83e8e164ff34b29d02ac3c3606dea31852ea9a6fb6d059c8316e1f" }, "downloads": -1, "filename": "horast-0.2.0.dev2.tar.gz", "has_sig": false, "md5_digest": "6f8ce6b4abb5c7975d8fcfa0411dc7f7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 21305, "upload_time": "2017-09-15T16:14:03", "url": "https://files.pythonhosted.org/packages/4f/cb/1861066b62d88e299a4dca2fdfa20d5ab9829dfb1c64c813e38cb1095a5b/horast-0.2.0.dev2.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "25a29573f12736bc766352ae581265a6", "sha256": "9d4c0f6d7d7ecc694ed005041dacb7ffc6ce0bf09d65bf2e3f89f9dc1c17d207" }, "downloads": -1, "filename": "horast-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "25a29573f12736bc766352ae581265a6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 13427, "upload_time": "2017-12-04T07:46:48", "url": "https://files.pythonhosted.org/packages/f4/d4/ac894df8c4c653c3ffa0af27ae6126d51718d834ec14122c5202583fc1cd/horast-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f0423c80e193fe99432339705435efa", "sha256": "03fa1d62471091b97b3d99ab2616c3fc37ba0b49bbb553fa7e62eb441ac7c69b" }, "downloads": -1, "filename": "horast-0.2.1.tar.gz", "has_sig": false, "md5_digest": "8f0423c80e193fe99432339705435efa", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 20878, "upload_time": "2017-12-04T07:46:49", "url": "https://files.pythonhosted.org/packages/2a/17/4d92c39050d8a79843275a8c64188919d94fe28d61b90fc16ee267d7b1fe/horast-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "8deccefafc7d9df7a8fb4e2e96df0383", "sha256": "838b8dede5d2557dffcfec7d5d222d899637f96ebca71b2b2084d7de5fcdd9a3" }, "downloads": -1, "filename": "horast-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "8deccefafc7d9df7a8fb4e2e96df0383", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 13473, "upload_time": "2018-01-30T04:42:48", "url": "https://files.pythonhosted.org/packages/c7/80/91608828c9d69b5ab0308ad29fc7a709227056ef6169db8461d19fcd1ffe/horast-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bdb1b4d2e36c0c10f5fd678aef60573e", "sha256": "fe24078f2c0e4ad0d3b3e5924b913f239dead3ce54808254e12fd18df34c73f0" }, "downloads": -1, "filename": "horast-0.2.2.tar.gz", "has_sig": false, "md5_digest": "bdb1b4d2e36c0c10f5fd678aef60573e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 19857, "upload_time": "2018-01-30T04:42:50", "url": "https://files.pythonhosted.org/packages/1f/cf/e84299ff66915ac385b45ec5e4a03444410bc1fbbfb221ed9986259acd03/horast-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "bf42d68cc327f2c1b12c2f65442db32f", "sha256": "92d3b4b93c4ec9046a9b57d5b76403632ccfb9206c82331aca0c3c2a426ef63c" }, "downloads": -1, "filename": "horast-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "bf42d68cc327f2c1b12c2f65442db32f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 11455, "upload_time": "2018-05-02T07:05:12", "url": "https://files.pythonhosted.org/packages/1f/7a/d316a294e99cff16cc75838e0df5cb267a266518dd669053d8aebea984ef/horast-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e569bda03b54485fe5900725cb3d778", "sha256": "9fb8eb9f7f45a166b1daf37e7b82f718e907aca683de663f441c96ce68871805" }, "downloads": -1, "filename": "horast-0.2.3.tar.gz", "has_sig": false, "md5_digest": "5e569bda03b54485fe5900725cb3d778", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 22388, "upload_time": "2018-05-02T07:05:13", "url": "https://files.pythonhosted.org/packages/31/7b/e100dd8324093bf8f4ed152d03ae75f9fc471d2c63b66b413439c95bf2f7/horast-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "f2d77e101bcd2b03ec154d58caa4a3dc", "sha256": "1c8101f6104c4b35ff20b2b708881f3de982816fa9db71d48ebb15d64a051c1e" }, "downloads": -1, "filename": "horast-0.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "f2d77e101bcd2b03ec154d58caa4a3dc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 16248, "upload_time": "2019-02-11T15:28:25", "url": "https://files.pythonhosted.org/packages/7d/dc/8c06ad98c2fa30bc638655ec8fd40ee42f9f6592b43f2870ab9bef4694e8/horast-0.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fffe947e73528e16c903dd0a7b37b9c0", "sha256": "e3aa0575586b992ea2f7675baf5c3b54393b18b4da7a24909f4ed772a8b3d3d6" }, "downloads": -1, "filename": "horast-0.2.4.tar.gz", "has_sig": false, "md5_digest": "fffe947e73528e16c903dd0a7b37b9c0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 21589, "upload_time": "2019-02-11T15:28:26", "url": "https://files.pythonhosted.org/packages/f6/41/d8fdc3e8e89e768dc951903b64595311c55b66101ba1a985070cec4ec61c/horast-0.2.4.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "9b00baf56a4437cdd6cba48f1bc2e14c", "sha256": "7314be9e3af52648c4ad3a601238d004da2b4e2a237cf580722740aebab02c4f" }, "downloads": -1, "filename": "horast-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9b00baf56a4437cdd6cba48f1bc2e14c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 16631, "upload_time": "2019-06-14T13:51:53", "url": "https://files.pythonhosted.org/packages/cc/2a/1f4fd709d788b003fd7ab039a4b3f555e997ad1adcefab5b8ad59ff97848/horast-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5c2f0570f932e9ec12bb45b56919e5db", "sha256": "0a8532d2cba905181ca1b9af39a8173d34aeec3aca02e2e967fd6949c913f7e5" }, "downloads": -1, "filename": "horast-0.3.0.tar.gz", "has_sig": false, "md5_digest": "5c2f0570f932e9ec12bb45b56919e5db", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 24568, "upload_time": "2019-06-14T13:51:55", "url": "https://files.pythonhosted.org/packages/dd/77/d456b19569f8f45f0910d0cd1c438ef04143af9c1985941070c67ecf2d6a/horast-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "b3e17bccc9df5db82706a4815325d055", "sha256": "556d1671034e7ce3597ce2d7f36073d0dd9494c894f541dd469ca14cbcb1bcf1" }, "downloads": -1, "filename": "horast-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b3e17bccc9df5db82706a4815325d055", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 16783, "upload_time": "2019-07-25T07:46:14", "url": "https://files.pythonhosted.org/packages/c8/bf/54bce9d8d743b90b26bcaa24dd140a4c7e0548bf8d3aefa33e71d8b6a77f/horast-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ec14a3954a13fa93762b4e84bbb30d96", "sha256": "ac308cea1feef116263875f6fc51a0cf3eb5306ba250c0ef24e0e97639f9a421" }, "downloads": -1, "filename": "horast-0.3.1.tar.gz", "has_sig": false, "md5_digest": "ec14a3954a13fa93762b4e84bbb30d96", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 23864, "upload_time": "2019-07-25T07:46:16", "url": "https://files.pythonhosted.org/packages/91/5e/8c008ce77c409c1499b6f2eb66dab47cb1ba1a2c07f34c1f1e9169ac0b8d/horast-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "fa150eccc2fa19bfd51c26ce3f6f2eae", "sha256": "6fce724ca517417e757587b5c29cf240bc9008c3b454e16eae051f4fb9d46e88" }, "downloads": -1, "filename": "horast-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fa150eccc2fa19bfd51c26ce3f6f2eae", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 19948, "upload_time": "2019-08-27T06:19:16", "url": "https://files.pythonhosted.org/packages/87/20/6d6c73299737139996244ab1cd5807ff9a2cb5b6eec84c7775b246e12d7c/horast-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "070ee7127db4f07c869c3b8459ec73f8", "sha256": "a5d7b05006f38e627c9a57a56c36c04d97061fc3716bb360f6802da2e2f4285f" }, "downloads": -1, "filename": "horast-0.4.0.tar.gz", "has_sig": false, "md5_digest": "070ee7127db4f07c869c3b8459ec73f8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 29254, "upload_time": "2019-08-27T06:19:19", "url": "https://files.pythonhosted.org/packages/b4/a2/7fbda8e22d3aa74fe6b04bf82ecea7a64e0b1a461904a4183f35d10c4fed/horast-0.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "fa150eccc2fa19bfd51c26ce3f6f2eae", "sha256": "6fce724ca517417e757587b5c29cf240bc9008c3b454e16eae051f4fb9d46e88" }, "downloads": -1, "filename": "horast-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fa150eccc2fa19bfd51c26ce3f6f2eae", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 19948, "upload_time": "2019-08-27T06:19:16", "url": "https://files.pythonhosted.org/packages/87/20/6d6c73299737139996244ab1cd5807ff9a2cb5b6eec84c7775b246e12d7c/horast-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "070ee7127db4f07c869c3b8459ec73f8", "sha256": "a5d7b05006f38e627c9a57a56c36c04d97061fc3716bb360f6802da2e2f4285f" }, "downloads": -1, "filename": "horast-0.4.0.tar.gz", "has_sig": false, "md5_digest": "070ee7127db4f07c869c3b8459ec73f8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 29254, "upload_time": "2019-08-27T06:19:19", "url": "https://files.pythonhosted.org/packages/b4/a2/7fbda8e22d3aa74fe6b04bf82ecea7a64e0b1a461904a4183f35d10c4fed/horast-0.4.0.tar.gz" } ] }