{ "info": { "author": "Esteban Borai", "author_email": "estebanborai@outlook.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# semvercomp\n\ud83d\udc0d Semantic Version Comparison for Python\n\nImplementation of a `Version` object with comparison capabilities and tag validation following [semver](https://semver.org/) conventions.\n\n## Installation\n```bash\npip install semvercomp\n```\n\n## Usage\n- [Classes](https://github.com/estebanborai/semvercomp#classes)\n\t- [Version](https://github.com/estebanborai/semvercomp#versionmajor0--int-minor0--int-patch0--int-pre_release--str-patch--str-has_vfalse--str)\n- [Comparison of Version Objects](https://github.com/estebanborai/semvercomp#comparison-of-version-objects)\n\t- [Equal](https://github.com/estebanborai/semvercomp#equal)\n\t- [Greater](https://github.com/estebanborai/semvercomp#greater)\n\t- [Lower](https://github.com/estebanborai/semvercomp#lower)\n- [Validation](https://github.com/estebanborai/semvercomp#validation)\n\t- [validate_version](https://github.com/estebanborai/semvercomp#validate_versionversion-str-parts-dict-is_ok-bool)\n- [Utils](https://github.com/estebanborai/semvercomp#utils)\n\t- [to_version_list](https://github.com/estebanborai/semvercomp#to_version_listcoll-iterable-version)\n\n### Classes\n#### `Version(major=0 : int, minor=0 : int, patch=0 : int, pre_release=\"\" : str, patch=\"\" : str, has_v=False : str)`\n\nClass `Version` represents a version tag following *semver* conventions.\nA version tag is structured the following way:\n```\nX.Y.Z-pre+build\n```\n\nValue | Name | Description\n------------ | ------------- | -------------\n`X` | `Major` | Version when you make incompatible API changes\n`Y` | `Minor` | Version when you add functionality in a backwards-compatible manner\n`Z` | `Patch` | Version when you make backwards-compatible bug fixes\n`pre` | `Pre Release` | Version *pre-release* tag\n`build` | `Build` | Version *build* tag\n\nSource: [Semantic Versioning 2.0.0](https://semver.org/)\n\n- Public Properties\n\nKey | Value | Type\n------------ | ------------- | -------------\n`has_v` | `bool` | Flag for preceding `v` or `V` in version tag\n`major` | `int` | Major member\n`minor` | `int` | Minor member\n`patch` | `int` | Patch member\n`pre_release` | `str` | Pre Release member\n`build` | `str` | Build member\n\n- Instance of Version\n\n```python\nfrom semvercomp.Version import Version\n\nver = Version(1, 0, 0, 'beta', '20191224')\nprint(str(ver))\n# 1.0.0-beta+20191224\n```\n\n- Creating a Version object from a version string:\n\n```python\nfrom semvercomp.Version import Version\n\nstr_v = Version()\nstr_v.parse_version_number('v1.0.0-beta')\n# str_v.major == 1\n# str_v.minor == 0\n# str_v.patch == 0\n# str_v.has_v == True\n# str_v.pre_release == 'beta'\n```\n\n### Comparison of Version Objects\n`Version` class implements `__gt__`, `__lt__` and `__eq__` built-in methods to implement comparison.\n#### Equal\n```python\nfrom semvercomp.Version import Version\n\na = Version(1, 0, 0)\nb = Version(1, 0, 0)\nprint(a == b) # True\n```\n\n#### Greater\n```python\nfrom semvercomp.Version import Version\n\na = Version(1, 1, 0)\nb = Version(1, 0, 0)\nprint(a > b) # True\n```\n\n#### Lower\n```python\nfrom semvercomp.Version import Version\n\na = Version(0, 1, 0)\nb = Version(1, 0, 0)\nprint(a < b) # True\n```\n\n### Validation\nIt is possible to validate and gather the different members of a version tag using `validate version` from `semvercomp.validators`.\n\n#### `validate_version(version: str): (parts: dict(), is_ok: bool)`\nWill return a tuple where, the first element is a dictionary with the properties of the given version tag destructured.\n\nThe second element in the tuple is a boolean flag that stands as the validation result.\n\n```python\nfrom semvercomp.validators import validate_version\n\nver_str = 'v1.0.22'\n(parts, is_ok) = validate_version(ver_str)\nprint(parts) # {'has_v': True, 'major': 1, 'minor': 0, 'patch': 22, 'pre_release': None, 'build': None}\nprint(is_ok) # True\n```\n\n### Utils\n#### `to_version_list(coll: iterable): Version[]`\nCreate an array of Version objects from an iterable of version tags as strings.\n\n```python\nfrom semvercomp.utils import to_version_list\n\nall = [\n\t'1.0.0-beta',\n\t'0.1.0+1234',\n\t'33.22.3'\n]\n\nversions = to_version_list(all)\n```\n\n## Development\n### Requirements\n- [pyenv](https://github.com/pyenv/pyenv)\n- [pipenv](https://pipenv.readthedocs.io/en/latest/)\n- [Visual Studio Code](https://code.visualstudio.com/) **Recommended**\n\n### Debugging\n- Debugging tests\nTests for this package are written with `pytest`.\nThe following json, is an example of the `.vscode/settings.json`:\n```json\n{\n\t\"python.pythonPath\": /* Your Python Binary Address*/,\n\t\"python.testing.pytestArgs\": [\n\t\t\"tests\"\n\t],\n\t\"python.testing.unittestEnabled\": false,\n\t\"python.testing.nosetestsEnabled\": false,\n\t\"python.testing.pytestEnabled\": true\n}\n```\n\n### Testing\n- Running unit tests\n```bash\n# from repository root directory\npytest\n```\n\n- Running test coverage\n```bash\n# from repository root directory\npytest --cov=semvercomp tests/\n\n# or with html report\npytest --cov-report html --cov=semvercomp tests/\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/estebanborai/semvercomp", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "semvercomp", "package_url": "https://pypi.org/project/semvercomp/", "platform": "", "project_url": "https://pypi.org/project/semvercomp/", "project_urls": { "Homepage": "https://github.com/estebanborai/semvercomp" }, "release_url": "https://pypi.org/project/semvercomp/0.1.1/", "requires_dist": null, "requires_python": "", "summary": "Semantic Version Comparison for Python", "version": "0.1.1" }, "last_serial": 5531353, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "3cd3a5e20608d466c872fc64bd680f59", "sha256": "18fa2d68dc76df463749a058994be00ada44b7f0c2b52e03cd149f2c3e8264d0" }, "downloads": -1, "filename": "semvercomp-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3cd3a5e20608d466c872fc64bd680f59", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6178, "upload_time": "2019-07-14T14:53:11", "url": "https://files.pythonhosted.org/packages/95/2f/7e9e40ce2e083614c9a0f0e08e6e47ffbe51c4c95ebd40bf6e66996826b3/semvercomp-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b3d421049e5ad94a08e0e112fff216ef", "sha256": "a9ea00661f4f16e41e601f33b1c5b1ba03b737ce7b43368c9cbf736364e82a90" }, "downloads": -1, "filename": "semvercomp-0.1.0.tar.gz", "has_sig": false, "md5_digest": "b3d421049e5ad94a08e0e112fff216ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3794, "upload_time": "2019-07-14T14:53:14", "url": "https://files.pythonhosted.org/packages/7a/e5/e04fa038d253214b874375681e7051236ba2d012773a247479e54725d0f5/semvercomp-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "809f315a60db3d088314f9932a1cd12b", "sha256": "da647a950274e35689403ca41224f39e2dd81034913c170044e6f84ed0726e40" }, "downloads": -1, "filename": "semvercomp-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "809f315a60db3d088314f9932a1cd12b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7418, "upload_time": "2019-07-14T15:48:59", "url": "https://files.pythonhosted.org/packages/96/96/ec8b994e25baf057c18dd2e6f408b8016158f5ed19728508d79af3fdc2b9/semvercomp-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2d7240998dc514736078a9f284025dc5", "sha256": "ac3f42aa15d9b5e598d9d405f48e0f59169d1370ffed1c860f8f746f4b8a96b4" }, "downloads": -1, "filename": "semvercomp-0.1.1.tar.gz", "has_sig": false, "md5_digest": "2d7240998dc514736078a9f284025dc5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5345, "upload_time": "2019-07-14T15:49:01", "url": "https://files.pythonhosted.org/packages/98/58/807f0e08d17db529c15d8aba06dc25bb1ca4dd709e77ccd2a7013689173a/semvercomp-0.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "809f315a60db3d088314f9932a1cd12b", "sha256": "da647a950274e35689403ca41224f39e2dd81034913c170044e6f84ed0726e40" }, "downloads": -1, "filename": "semvercomp-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "809f315a60db3d088314f9932a1cd12b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7418, "upload_time": "2019-07-14T15:48:59", "url": "https://files.pythonhosted.org/packages/96/96/ec8b994e25baf057c18dd2e6f408b8016158f5ed19728508d79af3fdc2b9/semvercomp-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2d7240998dc514736078a9f284025dc5", "sha256": "ac3f42aa15d9b5e598d9d405f48e0f59169d1370ffed1c860f8f746f4b8a96b4" }, "downloads": -1, "filename": "semvercomp-0.1.1.tar.gz", "has_sig": false, "md5_digest": "2d7240998dc514736078a9f284025dc5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5345, "upload_time": "2019-07-14T15:49:01", "url": "https://files.pythonhosted.org/packages/98/58/807f0e08d17db529c15d8aba06dc25bb1ca4dd709e77ccd2a7013689173a/semvercomp-0.1.1.tar.gz" } ] }