{ "info": { "author": "Mateusz Bysiek", "author_email": "mateusz.bysiek@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "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", "Topic :: Utilities" ], "description": ".. role:: bash(code)\n :language: bash\n\n.. role:: python(code)\n :language: python\n\n\n=============\nversion-query\n=============\n\nNo overhead package versioning for Python, based on git.\n\n.. image:: https://img.shields.io/pypi/v/version-query.svg\n :target: https://pypi.org/project/version-query\n :alt: package version from PyPI\n\n.. image:: https://travis-ci.org/mbdevpl/version-query.svg?branch=master\n :target: https://travis-ci.org/mbdevpl/version-query\n :alt: build status from Travis CI\n\n.. image:: https://ci.appveyor.com/api/projects/status/github/mbdevpl/version-query?branch=master&svg=true\n :target: https://ci.appveyor.com/project/mbdevpl/version-query\n :alt: build status from AppVeyor\n\n.. image:: https://api.codacy.com/project/badge/Grade/437ab82bd6324530847fe8ed833f8d78\n :target: https://www.codacy.com/app/mbdevpl/version-query\n :alt: grade from Codacy\n\n.. image:: https://codecov.io/gh/mbdevpl/version-query/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/mbdevpl/version-query\n :alt: test coverage from Codecov\n\n.. image:: https://img.shields.io/github/license/mbdevpl/version-query.svg\n :target: https://github.com/mbdevpl/version-query/blob/master/NOTICE\n :alt: license\n\nPackage versioning toolkit for Python which relies on git tags, git history traversal\nand status of git repository to generate a very fine-grained version number.\n\nAren't you tired hardcoding the version numbers when maintaining a Python package?!\n\nAnd wouldn't you like have fine-grained versioning scheme with version changing with each commit,\nfor easier development, testing and pre-release deployment?!\n\nSearch no more!\n\nAs long as you mark your releases using git tags, instead of hardcoding:\n\n.. code:: python\n\n __version__ = '1.5.0.dev2'\n\nYou can do:\n\n.. code:: python\n\n from version_query import predict_version_str\n\n __version__ = predict_version_str()\n\nIt's 21st century, stop hardcoding version numbers!\n\nThis will set the version to release version when you really release a new version,\nand it will automatically generate a suitable development version at development/pre-release phase.\n\n\n.. contents::\n :backlinks: none\n\n\nOverview\n========\n\nAt development time, the current version number is automatically generated based on:\n\n* tags\n* current commit SHA\n* index status\n\nin your git repository. Therefore the package can be built and shipped to PyPI based only on status\nof the git repository. When there is no git repository (this might be the case at installation time\nor at runtime) then the script relies on metadata generated at packaging time.\n\nThat's why, regardless if package is installed from PyPI (from source or wheel distribution)\nor cloned from GitHub, the version query will work.\n\nAdditionally, version numbers in version-query are mutable objects and they can be conveniently\nincremented, compared with each other, as well as converted to/from other popular\nversioning formats.\n\nVersioning scheme\n=================\n\nVersion scheme used by version-query is a relaxed mixture of:\n\n* `Semantic Versioning 2.0.0 `_ and\n\n* `PEP 440 -- Version Identification and Dependency Specification `_.\n\nThese two rulesets are mostly compatible. When they are not, a more relaxed approach of the two\nis used. Details follow.\n\nVersion has one of the following forms:\n\n* ````\n* ````\n* ``+``\n* ``+``\n\nA release version identifier ```` has one of the following forms:\n\n* ````\n* ``.``\n* ``..``\n\nAnd the pre-release version identifier ```` has one of the following forms:\n\n* ````\n* ````\n* ````\n* ````\n* ````\n* ... and any of these forms can be repeated arbitrary number of times.\n\nAnd finally the local version identifier ```` has one of the forms:\n\n* ````\n* ````\n* ````\n* ... and so on.\n\nEach version component has a meaning and constraints on its contents:\n\n* ```` - a non-negative integer, increments when backwards-incompatible changes are made\n* ```` - a non-negative integer, increments when backwards-compatible features are added\n* ```` - a non-negative integer, increments when backwards-compatible bugfixes are made\n\n* ```` - dot or dash, separates release version information from pre-release\n* ```` - a string of lower-case alphabetic characters, type of the pre-release\n* ```` - a non-negative integer, revision of the pre-release\n\n* ```` - a sequence of alphanumeric characters, stores arbitrary information\n* ```` - a dot or dash, separates parts of local version identifier\n\n\nHow exactly the version number is determined\n--------------------------------------------\n\nThe version-query package has two modes of operation:\n\n* *query* - only currently available explicit information is used to determine the version number\n* *prediction* - this applies only to determining version number from git repository, and means\n that in addition to explicit version information, git repository status can be used\n to get very fine-grained version number which will be unique for every repository snapshot\n\n\nVersion query from package metadata file\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe metadata file (``PKG-INFO`` or ``metadata.json`` or ``METADATA``) is automatically generated\nwhenever a Python distribution file is built.\nWhich one, depends on your method of building, but in any case, the file is then packaged into\ndistributions, and when uploaded to PyPI that metadata file is used to populate\nthe package page - therefore all Python packages on PyPI should have it.\n\nAdditionally, source code folder of any package using setuptools, in which ``setup.py build``\nwas executed, contains metadata file -- even if distribution file was not built.\n\nThe version identifier is contained verbatim in the metadata file, therefore version query\nin this case boils down to simply reading the metadata file.\n\nInformation about Python metadata files:\n\n* `PEP 345 -- Metadata for Python Software Packages 1.2 `_,\n which replaced `PEP 314 -- Metadata for Python Software Packages v1.1 `_,\n which in turn replaced `PEP 241 -- Metadata for Python Software Packages `_.\n According to PEP 345, version of package should conform to what has been defined in PEP 440.\n\n* `PEP 566 -- Metadata for Python Software Packages 2.1 `_\n which replaced the PEP 345. This new standard doesn't however modify the version handling\n in any way other than ensuring that requirements specification conforms with PEP 508,\n which is not related to Python package version querying.\n\n\nVersion query from git repository\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe version number is equal to the version contained in the most recent version tag.\n\nVersion tags\n````````````\n\nAny git tag that is a valid version (matching the rules above) is considered a version tag.\nVersion number can be prefixed with ``v`` or ``ver``. Other tags are ignored.\n\nExamples of valid version tags:\n\n* ``v1.0``\n* ``v0.16.0``\n* ``v1.0.dev3``\n* ``ver0.5.1-4.0.0+a1de3012``\n* ``42.0``\n* ``3.14-15``\n\n\nMost recent version tag\n```````````````````````\n\nThe most recent tag is found based on repository history and version precedence.\n\nSearch for version tags starts from current commit, and goes backwards in history (towards initial\ncommit). Therefore, commits after current one as well as not-merged branches are ignored in the\nversion tag search.\n\nIf there are several version tags on one commit, then highest version number is used.\n\nIf there are version tags on several merged branches, then the highest version number is used.\n\nIf there are no version tags in the repository, you'll get an error - so version cannot be queried\nfrom git repository without any version tags.\n\nBut in such case, version can still be *predicted*, as described below.\n\n\nVersion prediction from git repository\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIn version prediction mode, first of all, a most recent version tag is found, as above.\nIf there are no version tags in the repo, then the initial commit is assumed to have tag\n``v0.1.0.dev0``.\n\nThen, the new commits since the most recent version tag are counted.\nThen, the repository index status is queried. All the results are combined to form\nthe predicted version number. Procedure is described below in detail.\n\n\nCounting new commits\n````````````````````\n\nIf after the commit with the most recent tag there are any new commits, a suffix ``.dev#``\nis appended to the version identifier, where ``#`` is the number of commits between\nthe current commit and the most recent version tag.\n\nAdditionally, the ```` version component is incremented by ``1``.\n\nAdditionally, a plus (``+``) character and the first 8 characters of SHA of the latest commit\nare appended to version identifier, e.g. ``+a3014fe0``.\n\n\nRepository index status\n```````````````````````\n\nAdditionally, if there are any uncommitted changes in the repository (i.e. the repo is *dirty*),\nthe suffix ``.dirty`` followed by current date and time in format ``YYYYMMDDhhmmss`` are appended\nto the identifier.\n\nExample of how the final version identifier looks like, depending on various conditions\nof the repository:\n\n* Most recent version tag is ``v0.4.5``, there were 2 commits since,\n latest having SHA starting with ``812f12ea``.\n Version identifier will be ``0.4.6.dev2+812f12ea``.\n\n* Most recent version tag is ``ver6.0``, and there was 1 commit since\n having SHA starting with ``e10ac365``.\n Version identifier will be ``6.0.1.dev1+e10ac365``.\n\n* Most recent version tag is ``v9``, there were 40 commit since,\n latest having SHA starting with ``1ad22355``, the repository has uncommitted changes and\n version was queried at 19:52.20, 8th June 2017.\n the result is ``9.0.1.dev40+1ad22355.dirty20170608195220``.\n\n\nHow exactly version numbers are compared\n----------------------------------------\n\nThe base specification of the comparison scheme is:\n\n* `PEP 508 -- Dependency specification for Python Software Packages `_ as well as\n\n* `Semantic Versioning 2.0.0 `_.\n\nWith the notable difference to both that all version components are taken into account when\nestablishing version precedence.\n\nWhen being compared, ````, ```` and ```` are assumed equal to ``0`` if they\nare not present. In ````, the ```` is assumed to be ``0`` if not present.\n\nExamples of comparison results:\n\n* ``0.3-4.4-2.9`` < ``0.3-4.4-2.10``\n* ``0.3dev`` < ``0.3dev1``\n* ``0.3rc2`` < ``0.3``\n* ``0.3`` < ``0.3-2``\n* ``1.0.0`` < ``1.0.0+blahblah``\n* ``1.0.0+aa`` < ``1.0.0+aaa``\n* ``1.0.0`` = ``1.0.0``\n* ``1`` = ``1.0.0``\n* ``1.0`` = ``1.0.0.0``\n* ``1.0.0-0.0.DEV42`` = ``1.0.0.0.0.dev42``\n\n\nHow exactly version number is incremented\n-----------------------------------------\n\nSome version components have assumed value ``0`` if they are not present, please see section above\nfor details.\n\nIncrementing any version component clears all existing following components.\n\nExamples of how version is incremented:\n\n* for ``1.5``, incrementing ```` results in ``2.0``;\n* for ``1.5.1-2.4``, ````++ results in ``1.6``;\n* ``1.5.1-2.4``, ````++, ``1.5.2``;\n* ``1.5.1``, ````+=3, ``4.0.0``.\n\n\nAPI details\n===========\n\nAll functionality mentioned below is considered as the public API. Other functionality may change\nwithout notice.\n\n\nMain API\n--------\n\n.. code:: python\n\n import version_query\n\n version_str = version_query.query_version_str()\n\nThe version-query package will query the version string while operating in *query* mode.\n\n.. code:: python\n\n version_str = version_query.predict_version_str()\n\nThe version-query package will infer the version string while operating in *prediction* mode.\n\n.. code:: python\n\n version = version_query.Version(1, 0, 4)\n version = version_query.Version(major=1, patch=4)\n version = version_query.Version.from_str('1.0.4')\n\nThe Version class is used internally by version-query, but it can be also used explicitly.\n\n.. code:: python\n\n import packaging.version\n version = version_query.Version.from_py_version(packaging.version.Version())\n version.to_py_version()\n\n import semver\n version = version_query.Version.from_sem_version(semver.VersionInfo())\n version.to_sem_version()\n\nAlso, Version class interoperates with ``packaging`` and ``semver`` packages as well as selected\nbuilt-in types.\n\n.. code:: python\n\n assert version_query.Version(1, 0, 4).increment(version_query.VersionComponent.Patch, 2) \\\n == version_query.Version.from_str('1.0.6')\n assert version_query.Version.from_str('1.0.4') < version_query.Version.from_str('2.0.0')\n\nThe Version objects are mutable, hashable and comparable.\n\n.. code:: python\n\n version = version_query.query_folder(pathlib.Path('/my/project'), search_parent_directories=False)\n version = version_query.predict_git_repo(pathlib.Path('/my/git/versioned/project/subdir'), True)\n version = version_query.query_caller(stack_level=1)\n version = version_query.predict_caller(2)\n\nVersion object can be obtained for any supported path, as well as for any python code\ncurrently being executed -- as long as it is located in a supported location.\n\n\nCommand-line interface\n----------------------\n\n.. code:: bash\n\n python3 -m version_query --help\n python3 -m version_query /my/project -p\n\n.. code:: python\n\n version_query.__main__.main(args=['--help'])\n version_query.__main__.main(args=['/my/project', '-p'])\n\nVersion query can be also used as a command-line script, with the entry point also accessible\nas ``version_query.__main__.main`` from within Python.\n\n\nUtility functions\n-----------------\n\n.. code:: python\n\n assert version_query.git_query.preprocess_git_version_tag('v1.0.4') == '1.0.4'\n assert version_query.git_query.preprocess_git_version_tag('ver1.0.4') == '1.0.4'\n assert version_query.git_query.preprocess_git_version_tag('1.0.4') == '1.0.4'\n\nRemove ``v`` and ``ver`` prefix from a given string, and preform very crude checking whether\nthe tag is probably a version tag.\n\n\nLimitations\n===========\n\nEither git repository or metadata file must be present for the script to work. When, for example,\nzipped version of repository is downloaded from GitHub, the resulting archive contains neither\nmetadata files nor repository data.\n\nIt is unclear what happens if the queried repository is bare.\n\nThe implementation is not fully compatible with Python versioning. Especially,\nin current implementation at most one of:\nalpha ``a`` / beta ``b`` / release candidate ``rc`` / development ``dev`` suffixes\ncan be used in a version identifier.\n\nAnd the format in which\nalpha ``a``, beta ``b`` and release candidate ``rc`` suffixes\nare to be used does not match exactly the conditions defined in PEP 440.\n\nScript might feel a bit slow when attempting to find a version tag in a git repository with a very\nlarge history and no version tags. It is designed towards packages with short release cycles\n-- in long release cycles the overhead of manual versioning is small anyway.\n\nDespite above limitations, version-query itself (as well as growing number of other packages) are\nusing version-query without any issues.\n\n\nRequirements\n============\n\nPython version 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\nTested on Linux, OS X and Windows.\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/version-query", "keywords": "automation,continous integration,git,releasing,semantic versioning,tagging,versioning", "license": "Apache License 2.0", "maintainer": "Mateusz Bysiek", "maintainer_email": "mateusz.bysiek@gmail.com", "name": "version-query", "package_url": "https://pypi.org/project/version-query/", "platform": "", "project_url": "https://pypi.org/project/version-query/", "project_urls": { "Homepage": "https://github.com/mbdevpl/version-query" }, "release_url": "https://pypi.org/project/version-query/1.0.5/", "requires_dist": [ "GitPython", "packaging", "semver", "setuptools (>=41.0)" ], "requires_python": ">=3.5", "summary": "Package version query toolkit for Python", "version": "1.0.5" }, "last_serial": 5589351, "releases": { "0.0.1.dev1": [ { "comment_text": "", "digests": { "md5": "7a6755739133706e14217e16d3d02272", "sha256": "21e06eef9d5162c9e9fdc22127542f006d2c50eceeb55eba397118d3b3f1dec5" }, "downloads": -1, "filename": "version_query-0.0.1.dev1-py3-none-any.whl", "has_sig": false, "md5_digest": "7a6755739133706e14217e16d3d02272", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 10914, "upload_time": "2017-07-11T06:28:28", "url": "https://files.pythonhosted.org/packages/2a/d2/264f196401d532b4c818754773a247fc03a01fb7c356316ce0a67da84ecd/version_query-0.0.1.dev1-py3-none-any.whl" } ], "0.0.1.dev2": [ { "comment_text": "", "digests": { "md5": "6661acf3f88b20de6a35943717e4c583", "sha256": "f8132ef991a299510c53d02664041dfcc5c432402bd632a6038c1f1b4248c9e3" }, "downloads": -1, "filename": "version_query-0.0.1.dev2-py3-none-any.whl", "has_sig": false, "md5_digest": "6661acf3f88b20de6a35943717e4c583", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 13800, "upload_time": "2017-09-04T05:18:29", "url": "https://files.pythonhosted.org/packages/ad/2a/97b5d52aaa8c092d293bf35910edb5339e26e35f16bf0f06576d7704ca5a/version_query-0.0.1.dev2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "12650b405527a285f99e1f050efde9e7", "sha256": "ae119494cb40acb81917731a2fbc165f69be71bf27925ae2869f8e8b4f7104ca" }, "downloads": -1, "filename": "version-query-0.0.1.dev2.tar.gz", "has_sig": false, "md5_digest": "12650b405527a285f99e1f050efde9e7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 20585, "upload_time": "2017-09-04T05:19:00", "url": "https://files.pythonhosted.org/packages/ff/18/d9d396f5bec17320aae764eb34508871b7d6a0e889d6282a1d4eb6f084a4/version-query-0.0.1.dev2.tar.gz" } ], "0.0.1.dev3": [ { "comment_text": "", "digests": { "md5": "b1f06a2e62d2e50fcf1bdc1b74fad165", "sha256": "cf8ad8f5c49edbfe6da1dc0ba1aa2f4b3f471e877f5376fc6beb41fa9bec71fa" }, "downloads": -1, "filename": "version_query-0.0.1.dev3-py3-none-any.whl", "has_sig": false, "md5_digest": "b1f06a2e62d2e50fcf1bdc1b74fad165", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 13916, "upload_time": "2017-09-04T06:46:00", "url": "https://files.pythonhosted.org/packages/67/c4/19dbfb46d9f8d68b56c97ca6528c2f75c06ce34f022e1a7e5c918597454b/version_query-0.0.1.dev3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "68c397a69aef765aae652b57d5fa631a", "sha256": "617b5133323dca272c686d5df01ea4ab249caeb3037a1b9c7c7c8b39b90d2f8c" }, "downloads": -1, "filename": "version-query-0.0.1.dev3.tar.gz", "has_sig": false, "md5_digest": "68c397a69aef765aae652b57d5fa631a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 18847, "upload_time": "2017-09-04T06:46:27", "url": "https://files.pythonhosted.org/packages/ad/1b/6383e44a9a48341b5c359cb5a1047acb960b44e18a16968f5901ff5cd6ea/version-query-0.0.1.dev3.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "4dfa5851ec7619ddf57a309db6b20d96", "sha256": "10e8eb9fcce36077d2171821f64c31c036d35c0f74834c3b942ea66074a61167" }, "downloads": -1, "filename": "version_query-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4dfa5851ec7619ddf57a309db6b20d96", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 22089, "upload_time": "2017-10-04T02:10:33", "url": "https://files.pythonhosted.org/packages/ff/bd/09d55c44faee6593059fcd5d908a5568c8f088a081fbe45cc8f58addaef3/version_query-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "94c70b937136aa7bc45a187f202c6f1c", "sha256": "9dbc5478e390da5f0b7c72edfca9b33e4b47a25e5131c134c1f325e5490e57ab" }, "downloads": -1, "filename": "version-query-0.1.0.tar.gz", "has_sig": false, "md5_digest": "94c70b937136aa7bc45a187f202c6f1c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 26960, "upload_time": "2017-10-04T02:10:37", "url": "https://files.pythonhosted.org/packages/cb/e0/41dc6f45e6003edef6895672705e10921a7de340c1d98e8d30a4a1bdf7d4/version-query-0.1.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "f31974a7e4c7e42c1c1bc578abbebb7a", "sha256": "1b141390a28ce0cb0bdb91b77e0891e65df693633b4f9ba99be4cf92c7b6d698" }, "downloads": -1, "filename": "version_query-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f31974a7e4c7e42c1c1bc578abbebb7a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 24456, "upload_time": "2017-10-11T08:05:52", "url": "https://files.pythonhosted.org/packages/52/89/3577ed30a28af6bc232c854944cdb2502cbcddd113b0b731dd571e91cc4d/version_query-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b63c287d7130e1d73312293be64b3a71", "sha256": "65dd2482bda305e8261c1d4fd87f1adac0b1107d9ee28dbf591aad6a1cd3ed65" }, "downloads": -1, "filename": "version-query-0.3.0.tar.gz", "has_sig": false, "md5_digest": "b63c287d7130e1d73312293be64b3a71", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 27144, "upload_time": "2017-10-11T08:05:55", "url": "https://files.pythonhosted.org/packages/4d/51/9db40479585b71dd5ca76070d1588916089f53fcc82001a5b5619b2c18e0/version-query-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "2059b82adfe3b15e70b16a5616379e4e", "sha256": "3fb05829b9ed7e764183fe2fdf9b651e51c9f07ba80a85f1efeb3aba08283272" }, "downloads": -1, "filename": "version_query-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2059b82adfe3b15e70b16a5616379e4e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 17094, "upload_time": "2017-10-15T02:18:13", "url": "https://files.pythonhosted.org/packages/f4/52/212817b46c096817cae9451912ff241d8b8d60001b3c0a7bed6412ac0801/version_query-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0cb95067579e4e763b98b0493388c200", "sha256": "d0cd1295da8e740041a27a00e9105e0c85c5f3415d894f03a98f55d3416aa417" }, "downloads": -1, "filename": "version-query-0.3.1.tar.gz", "has_sig": false, "md5_digest": "0cb95067579e4e763b98b0493388c200", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 23606, "upload_time": "2017-10-15T02:18:15", "url": "https://files.pythonhosted.org/packages/df/bf/b45725276c828b9941fd5d59d6ad78ed08de89d04fb8bb64a59eb7e9318f/version-query-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "85233f8d83d7892dbb2b1e8df798b877", "sha256": "ed5e752de59ba50367789ca43f33a6a907592ccadbd40dd81dbd6a2c063de965" }, "downloads": -1, "filename": "version_query-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "85233f8d83d7892dbb2b1e8df798b877", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 17113, "upload_time": "2017-10-20T12:43:12", "url": "https://files.pythonhosted.org/packages/70/24/2fc4fbed846979be09e8cc8764ea196e0bcc7330f6398d57bd743168ca78/version_query-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1ed2e7bd5c42aa57c967b826109ed23c", "sha256": "8b1206cecee45a126c6f39cbf8a9e771d98948c9cd4e7b1d8bf91fcc4519c6bf" }, "downloads": -1, "filename": "version-query-0.3.2.tar.gz", "has_sig": false, "md5_digest": "1ed2e7bd5c42aa57c967b826109ed23c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 25142, "upload_time": "2017-10-20T12:43:13", "url": "https://files.pythonhosted.org/packages/f1/d0/95c3f0afaa6b231fbafda23c3ae2a19b228daad8f0f14c090c774e039f24/version-query-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "99529b54b51cfd4ed118fd5a420c3626", "sha256": "68edb37e4e3ee327222896a7053ee20711bfc85b3c6a1123ff76d4ee00d918fe" }, "downloads": -1, "filename": "version_query-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "99529b54b51cfd4ed118fd5a420c3626", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 24481, "upload_time": "2017-11-22T03:27:45", "url": "https://files.pythonhosted.org/packages/9d/39/6fe1f792c60b9550fe0678cef229634cd90b183a881279ee5ee6fdd38ca9/version_query-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "48cbb8c46340db1caea94c383fbc1d79", "sha256": "cc70dd4a67ad2bf9de5872efff24b28758c1276cf4fee597d20edcb668a520c2" }, "downloads": -1, "filename": "version-query-0.3.3.tar.gz", "has_sig": false, "md5_digest": "48cbb8c46340db1caea94c383fbc1d79", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 27708, "upload_time": "2017-11-22T03:27:46", "url": "https://files.pythonhosted.org/packages/fe/c9/0270bf7a659e9aecb299af128c1c7322a3f6f29aa839ad3c2f082433c0ab/version-query-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "f2bfcdd2d842976c825f1a6a3081190d", "sha256": "644e1991ec35802331cf371ae57ba45ff229849111f47f2177f157e87abc0a27" }, "downloads": -1, "filename": "version_query-0.3.4-py3-none-any.whl", "has_sig": false, "md5_digest": "f2bfcdd2d842976c825f1a6a3081190d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 24525, "upload_time": "2017-11-22T10:51:22", "url": "https://files.pythonhosted.org/packages/fd/23/ff18d0e0f31beac46fea9f3a9de8101ef1e4a6e643abbac86395a17a9a49/version_query-0.3.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5484f4bbb87f41b9a848b611e77d1b69", "sha256": "fbc1c31ed912c6e85c3583884f69b3ccc1eac30c778f63787eae43514f03fafd" }, "downloads": -1, "filename": "version-query-0.3.4.tar.gz", "has_sig": false, "md5_digest": "5484f4bbb87f41b9a848b611e77d1b69", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 27810, "upload_time": "2017-11-22T10:51:24", "url": "https://files.pythonhosted.org/packages/7e/05/ef0a29c55a1c08064dec37d91693dd2d875e67e812947a045201341e2691/version-query-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "ab10baa68463ee6eaebe0ff248a49e5b", "sha256": "da8f238b4e7060c49ba6ee99a9277611b595a5097f728fe8a88e0c7aa9095d00" }, "downloads": -1, "filename": "version_query-0.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "ab10baa68463ee6eaebe0ff248a49e5b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 17216, "upload_time": "2017-12-03T05:27:12", "url": "https://files.pythonhosted.org/packages/74/3d/3e9a14b03b3d1519caac73e42c7b676643bfa659a86780aacdb4c73d7dca/version_query-0.3.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "89f95444076168c6f141800f8f331af5", "sha256": "3cf27156c2808b591860a1cfc214b96317bc1514ce59228a2d2d67a48da8c358" }, "downloads": -1, "filename": "version-query-0.3.5.tar.gz", "has_sig": false, "md5_digest": "89f95444076168c6f141800f8f331af5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 26017, "upload_time": "2017-12-03T05:27:14", "url": "https://files.pythonhosted.org/packages/74/b6/2915c3d75f55435c23983c1338531c412b67d17cbe17237103c46426f7dc/version-query-0.3.5.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "54bd7a4f746bdd0c3d8c727a0cc3814e", "sha256": "d15d4d22493b1affc8f8030587810b57e2626e302e4ff135c7ac78daf359a42f" }, "downloads": -1, "filename": "version_query-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "54bd7a4f746bdd0c3d8c727a0cc3814e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 21008, "upload_time": "2018-02-06T01:28:54", "url": "https://files.pythonhosted.org/packages/9f/6a/58e350c29572ac0de758dd6e0f9e03e722c66710feee633b141a3fab1c06/version_query-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "84534f52f0cad0a96cdcbdfd89e78053", "sha256": "2319e33cc682683fbca5bbcfe87df8f6db87983faf125e489e7fa0e638bf018c" }, "downloads": -1, "filename": "version-query-0.4.0.tar.gz", "has_sig": false, "md5_digest": "84534f52f0cad0a96cdcbdfd89e78053", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 31844, "upload_time": "2018-02-06T01:28:56", "url": "https://files.pythonhosted.org/packages/46/3f/dec54eabd77ed01e2070b23732fc2654fc6f52ffc8e64718c9b786e3de38/version-query-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "f415a79d3359b2ce5b083f42f9fc1ad9", "sha256": "10eb1f90c179e35adb4f79c102b8f6d3d308950c1778b24a2a0f3168ab85a6ca" }, "downloads": -1, "filename": "version_query-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f415a79d3359b2ce5b083f42f9fc1ad9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 21114, "upload_time": "2018-03-20T08:41:39", "url": "https://files.pythonhosted.org/packages/3f/a6/521bda9dd2924bf2089809a76dc450124439231a702bee45a58895e71d5f/version_query-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "665052a2e69b0e6f7590bbcbdb2fa9ba", "sha256": "2f5ad439bf7b02729c5075e2ec2cad22f6567be07cb3c7c6a72b436664dc847e" }, "downloads": -1, "filename": "version-query-0.4.1.tar.gz", "has_sig": false, "md5_digest": "665052a2e69b0e6f7590bbcbdb2fa9ba", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 34170, "upload_time": "2018-03-20T08:41:41", "url": "https://files.pythonhosted.org/packages/c2/74/9e0f32e0108e0bd7ff4add53626d8d34aa25fe8ccae0dc4fb770401f5d90/version-query-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "f3f4b16f77f71f27e9b74455db10f7ac", "sha256": "aecbdaa1407220028f2aa45786a5c4a43d4d0d55c0c39f5e0de7035145e308a3" }, "downloads": -1, "filename": "version_query-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "f3f4b16f77f71f27e9b74455db10f7ac", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 15839, "upload_time": "2018-04-13T09:27:01", "url": "https://files.pythonhosted.org/packages/47/1c/59bf67da3ddee16716141b8268b89c33be6283fb2a20247d7e22a447fd91/version_query-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8cef68c13e10fec4f9658f7ca7413451", "sha256": "8609c90844d510b82e713c325314d8d956edcad955ca749f63d913b71925de0d" }, "downloads": -1, "filename": "version-query-0.4.2.tar.gz", "has_sig": false, "md5_digest": "8cef68c13e10fec4f9658f7ca7413451", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 34832, "upload_time": "2018-04-13T09:27:02", "url": "https://files.pythonhosted.org/packages/50/18/6703670ce1de633726fae0df553ea694f584b2b24b1fe3ba79ca45a6d3d5/version-query-0.4.2.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "c55f524b507207f0cbe73e1e18ebbd7d", "sha256": "1501804b0753f12fc59d3d627564030b79f47748ca4994d1c2114dcc54b78818" }, "downloads": -1, "filename": "version_query-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c55f524b507207f0cbe73e1e18ebbd7d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 17203, "upload_time": "2018-04-20T07:33:10", "url": "https://files.pythonhosted.org/packages/78/50/6577e8906aadc71ec31228781cf55c873c7f9f7035b291c416af187e32d2/version_query-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "66510dbf5333de2fd020df495603fde8", "sha256": "fd11316131187c4d307b099f885f4345fac0c907493ab70f745f3cf2a7e003b1" }, "downloads": -1, "filename": "version-query-1.0.0.tar.gz", "has_sig": false, "md5_digest": "66510dbf5333de2fd020df495603fde8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 38763, "upload_time": "2018-04-20T07:33:12", "url": "https://files.pythonhosted.org/packages/ab/cb/bbfc8dcf9ebc07963ac4856bdfdb0e929cb99c8103eae6d0839b85a16fa1/version-query-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "75675cb48b726653c6c80140f56659cf", "sha256": "d1f679cfa151ffcd5a81f0d5f17e76c0404436366e54765eec26ce31477ecbae" }, "downloads": -1, "filename": "version_query-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "75675cb48b726653c6c80140f56659cf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.4", "size": 17202, "upload_time": "2018-04-20T07:39:46", "url": "https://files.pythonhosted.org/packages/26/9f/060e395902e0fc5b581f8567222850267073ae5d9b066275e9dc17cc29b4/version_query-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e496451244678237ceed937e5097e606", "sha256": "8aece13649b0b6b88c9ad73456d5d3c65498072fd9d71b5a027c7095c55a588b" }, "downloads": -1, "filename": "version-query-1.0.1.tar.gz", "has_sig": false, "md5_digest": "e496451244678237ceed937e5097e606", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.4", "size": 38763, "upload_time": "2018-04-20T07:39:47", "url": "https://files.pythonhosted.org/packages/63/bb/60bd7c67d009d959e717f9b0b3d789909f39c1d7446b440bb4ab0e160df0/version-query-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "ba1838c5d870d41b92dbc602d3bec7e4", "sha256": "f41642a9c0792bd7ec810a7fc65808be840efff0ecc567410f398d7ddaf5e51d" }, "downloads": -1, "filename": "version_query-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "ba1838c5d870d41b92dbc602d3bec7e4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 22260, "upload_time": "2019-05-10T07:23:28", "url": "https://files.pythonhosted.org/packages/a7/51/ea091687c9d05fec60a7fa03c95adc9ab58805a766d28a5b77fe478677bb/version_query-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "feadb5640c14bbf57456bd1fe4eb000f", "sha256": "c4e613af141ff950eca58b62aec139491446fd67b406ccfdc47d7745a18665dc" }, "downloads": -1, "filename": "version-query-1.0.2.tar.gz", "has_sig": false, "md5_digest": "feadb5640c14bbf57456bd1fe4eb000f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 39002, "upload_time": "2019-05-10T07:23:30", "url": "https://files.pythonhosted.org/packages/0b/34/4096f7068cd700e6324ca1483cb69f2969bbe5bd69fc96511e60b4cd58b7/version-query-1.0.2.tar.gz" } ], "1.0.2.dev0": [ { "comment_text": "", "digests": { "md5": "d39537c32478d570687b7a2e5e668050", "sha256": "f1b238ae43c1bdf8e9315c35e73c6585093c6e6968727cab2cbfc539e5bf5764" }, "downloads": -1, "filename": "version_query-1.0.2.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "d39537c32478d570687b7a2e5e668050", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 21965, "upload_time": "2019-05-10T04:05:17", "url": "https://files.pythonhosted.org/packages/af/68/e639ac5e005eb8cdc1ece3e09940a17c3e8912d63174a6bb81632c21dfa9/version_query-1.0.2.dev0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "49864c634cd7fe8bd551c50ef93b2435", "sha256": "e9e61d65a389acc444e2f45c89881e03acad1428becb6921042ea83c5ae28bf1" }, "downloads": -1, "filename": "version-query-1.0.2.dev0.tar.gz", "has_sig": false, "md5_digest": "49864c634cd7fe8bd551c50ef93b2435", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 38645, "upload_time": "2019-05-10T04:05:19", "url": "https://files.pythonhosted.org/packages/1e/4a/bda99a2b15c3fc514a32b72deca92ecc47d30e2b0f587f41a4ebb6f0a3f8/version-query-1.0.2.dev0.tar.gz" } ], "1.0.2.dev1": [ { "comment_text": "", "digests": { "md5": "df69003b4bb807dc4272850527f0bcdc", "sha256": "cf277908abf3b3cb6b05192adf0df7a17c7ad84b7ebf6e57e0578705e5628c19" }, "downloads": -1, "filename": "version_query-1.0.2.dev1-py3-none-any.whl", "has_sig": false, "md5_digest": "df69003b4bb807dc4272850527f0bcdc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 22257, "upload_time": "2019-05-10T05:50:53", "url": "https://files.pythonhosted.org/packages/ce/62/aed55f1a5363888a7b74f68221ef26cae0b8232e642f9e602a2e3bdc5c0c/version_query-1.0.2.dev1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2d8923c8247365b65ca74519daea4898", "sha256": "dd3d1fd8132e373f4042e31494e25e12bd033b1bb4eab8de044244596128b8ad" }, "downloads": -1, "filename": "version-query-1.0.2.dev1.tar.gz", "has_sig": false, "md5_digest": "2d8923c8247365b65ca74519daea4898", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 38870, "upload_time": "2019-05-10T05:50:54", "url": "https://files.pythonhosted.org/packages/fe/62/adbe4eb01a1419b392227f58b8c69ba829e356d4e692408bd22dd7f58d13/version-query-1.0.2.dev1.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "2405a47b43a4a554604952a87ab98a67", "sha256": "6536dd3e22b665460f2cb57bf287088bdb561ef342fd967ad64071d1fdde4818" }, "downloads": -1, "filename": "version_query-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "2405a47b43a4a554604952a87ab98a67", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 22131, "upload_time": "2019-05-24T04:03:08", "url": "https://files.pythonhosted.org/packages/6c/f6/9fb525269bf00ce68dc012a6300aba246bee6a8cddd3f11f8072c3e43f01/version_query-1.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1787edc89fa7dc5cea17660d75f8c4c5", "sha256": "f2d04e126b243119a040d24dbc741d5921b7054e83260e95a13aa8bee57a41cb" }, "downloads": -1, "filename": "version-query-1.0.3.tar.gz", "has_sig": false, "md5_digest": "1787edc89fa7dc5cea17660d75f8c4c5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 39083, "upload_time": "2019-05-24T04:03:10", "url": "https://files.pythonhosted.org/packages/09/6a/0df9b2f8244d53c2bd85bcaba9b77e073ae0e6bda6e5abce5ca493a2aca9/version-query-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "19991b220baf29869ef9e5c7d28e0dfc", "sha256": "75dfcabeafe4fc77e356a3d4aa1b6a752d6f0e86e63ea14f521557c589f7c735" }, "downloads": -1, "filename": "version_query-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "19991b220baf29869ef9e5c7d28e0dfc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 22127, "upload_time": "2019-06-04T16:16:30", "url": "https://files.pythonhosted.org/packages/65/a7/6c9f21c538b1eff8858b37cf392a88c5bf209fa2c166a048daea4173035c/version_query-1.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "233f4d41b51128fa4246b7880270d78a", "sha256": "5434e9a280e8ab17804cf9e5caf1aacc4daec40425e3e902c0f94f982ccfe0ea" }, "downloads": -1, "filename": "version-query-1.0.4.tar.gz", "has_sig": false, "md5_digest": "233f4d41b51128fa4246b7880270d78a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 38419, "upload_time": "2019-06-04T16:16:32", "url": "https://files.pythonhosted.org/packages/72/29/841ea9825a4f07f02687242ab0dedb396bca9c47556991bba81dffa834f2/version-query-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "1bfe8515eab9f16b4a004d09bddcde9d", "sha256": "a4e061266c35e45b6873a545a95b68b595a7423be91ac71684bf193ab2e1b4d3" }, "downloads": -1, "filename": "version_query-1.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "1bfe8515eab9f16b4a004d09bddcde9d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 22380, "upload_time": "2019-07-26T14:44:03", "url": "https://files.pythonhosted.org/packages/19/01/38aed4de11d32656a02cb50c5b887d735d8c3e366b8246c14bffd65b5ca5/version_query-1.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe05b9c44fc51dad6c4f997dcdd17e91", "sha256": "bf26d676129782e54da6116b6b9977d0cdac1b1c90523bc027914df01e78de9f" }, "downloads": -1, "filename": "version-query-1.0.5.tar.gz", "has_sig": false, "md5_digest": "fe05b9c44fc51dad6c4f997dcdd17e91", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 37024, "upload_time": "2019-07-26T14:44:05", "url": "https://files.pythonhosted.org/packages/c8/26/686810ff496dd8b6137046d06003f1d44a23061c0f8a30e11d90b735f088/version-query-1.0.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1bfe8515eab9f16b4a004d09bddcde9d", "sha256": "a4e061266c35e45b6873a545a95b68b595a7423be91ac71684bf193ab2e1b4d3" }, "downloads": -1, "filename": "version_query-1.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "1bfe8515eab9f16b4a004d09bddcde9d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5", "size": 22380, "upload_time": "2019-07-26T14:44:03", "url": "https://files.pythonhosted.org/packages/19/01/38aed4de11d32656a02cb50c5b887d735d8c3e366b8246c14bffd65b5ca5/version_query-1.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe05b9c44fc51dad6c4f997dcdd17e91", "sha256": "bf26d676129782e54da6116b6b9977d0cdac1b1c90523bc027914df01e78de9f" }, "downloads": -1, "filename": "version-query-1.0.5.tar.gz", "has_sig": false, "md5_digest": "fe05b9c44fc51dad6c4f997dcdd17e91", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 37024, "upload_time": "2019-07-26T14:44:05", "url": "https://files.pythonhosted.org/packages/c8/26/686810ff496dd8b6137046d06003f1d44a23061c0f8a30e11d90b735f088/version-query-1.0.5.tar.gz" } ] }