{ "info": { "author": "Oleksandr Shepetko", "author_email": "a@shepetko.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# SemaVer\n\nSemaVer is a simple library for Python that helps to work with versions using \n[semantic versioning notation].\n\n\n## Build status\n\n[![Build Status](https://travis-ci.org/ashep/semaver.svg?branch=master)](https://travis-ci.org/ashep/semaver)\n[![Coverage](https://codecov.io/gh/ashep/semaver/branch/master/graph/badge.svg)](https://codecov.io/gh/ashep/semaver)\n\n\n## Requirements\n\n[Python] >=3.5\n\n\n## Installation\n\n```bash\npip install semaver\n```\n\n## Usage\n\n\n### Version objects\n\nTo create version, instantiate `Version` class passing version identifier as a \nconstructor argument: \n\n```python\nfrom semaver import Version\n\nv1_0_0 = Version('1.0.0')\n```\n\nValid version identifiers can be found as [https://semver.org/] except that \ncurrently *SemaVer* does not support [pre-release]\nand [build metadata] specs.\n\nAll non-specified parts of the version identifier counted as zeroes, i. e. \n`'1' == '1.0' == '1.0.0'`.\n\n\n### Compare versions\n\nYou may compare versions using regular [Python comparison operators]:\n\n```python\nfrom semaver import Version\n\nv1_0 = Version('1.0')\nv1_0_0 = Version('1.0.0')\nv1_0_1 = Version('1.0.1')\n\nassert v1_0 == v1_0_0 # True\nassert v1_0 != v1_0_0 # False\n\nassert v1_0 < v1_0_1 # True\nassert v1_0 <= v1_0_1 # True\nassert v1_0 > v1_0_1 # False\nassert v1_0 >= v1_0_1 # False\n\n# Or using plain strings\n\nassert v1_0 == '1' # True\nassert v1_0 == '1.0' # True\nassert v1_0 == '1.0.0' # True\n```\n\nAlso it is possible to compare versions against strings:\n\n```python\nfrom semaver import Version\n\nv1_0 = Version('1.0')\nv1_0_0 = Version('1.0.0')\nv1_0_1 = Version('1.0.1')\n```\n\n### Adding and subtracting versions\n\n```python\nfrom semaver import Version\n\nprint(Version('1.0.0') + Version('0.1.1')) # '1.1.1'\n```\n\n```python\nfrom semaver import Version\n\nprint(Version('2.0.1') - Version('1.0.1')) # '1.0.0'\n```\n\n\n### Version range objects\n\nInstance of `VersionRange` represents a version range. First argument of \nconstructor is a version range identifier. \n\n```python\nfrom semaver import VersionRange\n\nVersionRange('1.x')\n```\n\nFollowing formats are supported.\n\n- [PEP-440 version specifiers] except `~=` and `===` clauses.\n- [NPM version range syntax].\n\nFor example, each item of the following list shows equal version range \nidentifiers: \n\n- `1.x`, `1.*`, `^1`, `>=1,<2`.\n- `^1.1`, `>=1.1,<2`.\n- `1.0.x`, `1.0.*`, `~1`, `~1.0`.\n\n\n## Checking if a version is in a range\n\n```python\nfrom semaver import Version, VersionRange\n\nv1_2_3 = Version('1.2.3')\nv1_x = VersionRange('1.x')\nv2_x = VersionRange('2.x')\n\nassert v1_2_3 in v1_x # True\nassert v1_2_3 in v2_x # False\n\n# Or using plain strings\n\nassert '1.2.3' in v1_x # True\nassert '1.2.3' in v2_x # False\n```\n\n## Checking if a range is in a range\n\n```python\nfrom semaver import VersionRange\n\nv1_to_3 = VersionRange('>=1,<=3')\nv2_x = VersionRange('2.x')\n\nassert v2_x in v1_to_3 # True\nassert v1_to_3 in v2_x # False\n\n# Or using plain strings\n\nassert '2.x' in v1_to_3 # True\nassert '>=1,<=3' in v2_x # False\n```\n\n\n## Testing\n\n```bash\ntox\n```\n\n\n## Contributing\n\nSee the [CONTRIBUTING.md] file for details.\n\n\n## Changelog\n\nSee the [CHANGELOG.md] file for details.\n\n\n## Support\n\nIf you have any issues or enhancement proposals feel free to report them via \nproject's [Issue Tracker](https://github.com/ashep/semaver/issues). \n\n\n## Authors\n\n* [Oleksandr Shepetko](https://shepetko.com) -- initial work.\n\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE.md] \nfile for details.\n\n\n[semantic versioning notation]: https://semver.org/\n\n[Python]: https://python.org\n\n[pre-release]: https://semver.org/#spec-item-9\n\n[build-metadata]:\n https://semver.org/#spec-item-10\n\n[Python comparison operators]:\n https://docs.python.org/3/reference/expressions.html#comparisons\n\n[PEP-440 version specifiers]:\n https://www.python.org/dev/peps/pep-0440/#version-specifiers\n\n[NPM version range syntax]:\n https://docs.npmjs.com/about-semantic-versioning#using-semantic-versioning-\n to-specify-update-types-your-package-can-accept\n\n[CONTRIBUTING.md]: CONTRIBUTING.md\n\n[CHANGELOG.md]: CHANGELOG.md\n\n[LICENSE.md]: LICENSE.md\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/ashep/semaver/archive/master.zip", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ashep/semaver", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "semaver", "package_url": "https://pypi.org/project/semaver/", "platform": "", "project_url": "https://pypi.org/project/semaver/", "project_urls": { "Download": "https://github.com/ashep/semaver/archive/master.zip", "Homepage": "https://github.com/ashep/semaver" }, "release_url": "https://pypi.org/project/semaver/0.2.1/", "requires_dist": null, "requires_python": "", "summary": "Semantic Versioning Helper for Python", "version": "0.2.1" }, "last_serial": 5949875, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "857117cc18e7e9d70c63aeee4a329473", "sha256": "b854ca21b3246b0bd25f5ff9741b14f9d7d444b4962503c04a832197dae58ec7" }, "downloads": -1, "filename": "semaver-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "857117cc18e7e9d70c63aeee4a329473", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6567, "upload_time": "2019-07-12T02:22:53", "url": "https://files.pythonhosted.org/packages/d6/af/dcc79aabff3338158d41a916133e20df52aed9fdc1f2bfcbfea09fc795e1/semaver-0.1-py3-none-any.whl" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "aac784909521b1e89c5ef420ef30afba", "sha256": "3a06c2e0cae8fae8e7edd41dd709643e33d4171a6b9b19eb5a93a3ed97c9ec58" }, "downloads": -1, "filename": "semaver-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "aac784909521b1e89c5ef420ef30afba", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6616, "upload_time": "2019-07-12T02:50:05", "url": "https://files.pythonhosted.org/packages/eb/de/dfca798e2fd75ac900c7a5a66630d0333768a152d47d50a1465943c2616b/semaver-0.2-py3-none-any.whl" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "157d2fefe16c44edbd1a789d80ba720b", "sha256": "d04ddc59e14fbc36de6c26de0d06ab3d96292262da3e8952f54ccd3c8634374c" }, "downloads": -1, "filename": "semaver-0.2.1-1-py3-none-any.whl", "has_sig": false, "md5_digest": "157d2fefe16c44edbd1a789d80ba720b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7429, "upload_time": "2019-10-09T13:38:39", "url": "https://files.pythonhosted.org/packages/29/ac/42f8c6094a028f3a8387db279a41d9dc2b974cd1d6d89fd320afc6b66c8c/semaver-0.2.1-1-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "157d2fefe16c44edbd1a789d80ba720b", "sha256": "d04ddc59e14fbc36de6c26de0d06ab3d96292262da3e8952f54ccd3c8634374c" }, "downloads": -1, "filename": "semaver-0.2.1-1-py3-none-any.whl", "has_sig": false, "md5_digest": "157d2fefe16c44edbd1a789d80ba720b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7429, "upload_time": "2019-10-09T13:38:39", "url": "https://files.pythonhosted.org/packages/29/ac/42f8c6094a028f3a8387db279a41d9dc2b974cd1d6d89fd320afc6b66c8c/semaver-0.2.1-1-py3-none-any.whl" } ] }