{"id":22683750,"url":"https://github.com/wheelodex/wheel-filename","last_synced_at":"2025-04-12T18:30:24.991Z","repository":{"id":44600170,"uuid":"249541968","full_name":"wheelodex/wheel-filename","owner":"wheelodex","description":"Parse wheel filenames","archived":false,"fork":false,"pushed_at":"2023-12-11T13:05:23.000Z","size":51,"stargazers_count":14,"open_issues_count":8,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2023-12-21T10:42:08.963Z","etag":null,"topics":["available-on-pypi","filename","pep427","python","wheel"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wheelodex.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2020-03-23T20:54:42.000Z","updated_at":"2024-02-05T18:31:45.151Z","dependencies_parsed_at":"2023-01-31T01:55:12.966Z","dependency_job_id":"3cbf4b28-af7b-48b5-8dd4-fa4347ca69d0","html_url":"https://github.com/wheelodex/wheel-filename","commit_stats":{"total_commits":52,"total_committers":1,"mean_commits":52.0,"dds":0.0,"last_synced_commit":"54b784a51f206fcae73d9333d8529b53764887d7"},"previous_names":["wheelodex/wheel-filename","jwodder/wheel-filename"],"tags_count":6,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wheelodex%2Fwheel-filename","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wheelodex%2Fwheel-filename/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wheelodex%2Fwheel-filename/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wheelodex%2Fwheel-filename/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wheelodex","download_url":"https://codeload.github.com/wheelodex/wheel-filename/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248613053,"owners_count":21133430,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["available-on-pypi","filename","pep427","python","wheel"],"created_at":"2024-12-09T21:13:39.516Z","updated_at":"2025-04-12T18:30:24.970Z","avatar_url":"https://github.com/wheelodex.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"|repostatus| |ci-status| |coverage| |pyversions| |license|\n\n.. |repostatus| image:: https://www.repostatus.org/badges/latest/active.svg\n    :target: https://www.repostatus.org/#active\n    :alt: Project Status: Active — The project has reached a stable, usable\n          state and is being actively developed.\n\n.. |ci-status| image:: https://github.com/wheelodex/wheel-filename/actions/workflows/test.yml/badge.svg\n    :target: https://github.com/wheelodex/wheel-filename/actions/workflows/test.yml\n    :alt: CI Status\n\n.. |coverage| image:: https://codecov.io/gh/wheelodex/wheel-filename/branch/master/graph/badge.svg\n    :target: https://codecov.io/gh/wheelodex/wheel-filename\n\n.. |pyversions| image:: https://img.shields.io/pypi/pyversions/wheel-filename.svg\n    :target: https://pypi.org/project/wheel-filename/\n\n.. |license| image:: https://img.shields.io/github/license/wheelodex/wheel-filename.svg\n    :target: https://opensource.org/licenses/MIT\n    :alt: MIT License\n\n`GitHub \u003chttps://github.com/wheelodex/wheel-filename\u003e`_\n| `PyPI \u003chttps://pypi.org/project/wheel-filename/\u003e`_\n| `Issues \u003chttps://github.com/wheelodex/wheel-filename/issues\u003e`_\n| `Changelog \u003chttps://github.com/wheelodex/wheel-filename/blob/master/CHANGELOG.md\u003e`_\n\n``wheel-filename`` lets you verify wheel_ filenames and parse them into their\ncomponent fields.\n\n.. _wheel: https://packaging.python.org/en/latest/specifications\n           /binary-distribution-format/\n\nThis package adheres strictly to the standard, with the following exceptions:\n\n- Version components may be any sequence of the relevant set of characters;\n  they are not verified for PEP 440 compliance.\n\n- The ``.whl`` file extension is matched case-insensitively.\n\n\nInstallation\n============\n``wheel-filename`` requires Python 3.8 or higher.  Just use `pip\n\u003chttps://pip.pypa.io\u003e`_ for Python 3 (You have pip, right?) to install it::\n\n    python3 -m pip install wheel-filename\n\n\nExample\n=======\n\n\u003e\u003e\u003e from wheel_filename import parse_wheel_filename\n\u003e\u003e\u003e pwf = parse_wheel_filename('pip-18.0-py2.py3-none-any.whl')\n\u003e\u003e\u003e str(pwf)\n'pip-18.0-py2.py3-none-any.whl'\n\u003e\u003e\u003e pwf.project\n'pip'\n\u003e\u003e\u003e pwf.version\n'18.0'\n\u003e\u003e\u003e pwf.build is None\nTrue\n\u003e\u003e\u003e pwf.python_tags\n['py2', 'py3']\n\u003e\u003e\u003e pwf.abi_tags\n['none']\n\u003e\u003e\u003e pwf.platform_tags\n['any']\n\u003e\u003e\u003e list(pwf.tag_triples())\n['py2-none-any', 'py3-none-any']\n\n\nAPI\n===\n\n``parse_wheel_filename(filename)``\n   Parses a wheel filename (a ``str``, ``bytes``, or ``os.PathLike``) and\n   returns a ``ParsedWheelFilename`` instance.  Any leading directory\n   components are stripped from the argument before processing.  If the\n   filename is not a valid wheel filename, raises an ``InvalidFilenameError``.\n\n``ParsedWheelFilename``\n   A namedtuple representing the components of a wheel filename.  It has the\n   following attributes and methods:\n\n   ``project: str``\n      The name of the project distributed by the wheel\n\n   ``version: str``\n      The version of the project distributed by the wheel\n\n   ``build: Optional[str]``\n      The wheel's build tag (``None`` if not defined)\n\n   ``python_tags: List[str]``\n      A list of Python tags for the wheel\n\n   ``abi_tags: List[str]``\n      A list of ABI tags for the wheel\n\n   ``platform_tags: List[str]``\n      A list of platform tags for the wheel\n\n   ``str(pwf)``\n      Stringifying a ``ParsedWheelFilename`` returns the original filename\n\n   ``tag_triples() -\u003e Iterator[str]``\n      Returns an iterator of all simple tag triples formed from the\n      compatibility tags in the filename\n\n``InvalidFilenameError``\n   A subclass of ``ValueError`` raised when an invalid wheel filename is passed\n   to ``parse_wheel_filename()``.  It has a ``filename`` attribute containing\n   the basename of the invalid filename.\n\n\nCommand\n=======\n\n*New in version 1.4.0*\n\n``wheel-filename`` also provides a command of the same name that takes a wheel\nfilename (The actual wheel does not have to exist) and outputs the filename\ncomponents as JSON.\n\nExample::\n\n    $ wheel-filename pip-18.0-py2.py3-none-any.whl\n    {\n        \"project\": \"pip\",\n        \"version\": \"18.0\",\n        \"build\": null,\n        \"python_tags\": [\n            \"py2\",\n            \"py3\"\n        ],\n        \"abi_tags\": [\n            \"none\"\n        ],\n        \"platform_tags\": [\n            \"any\"\n        ]\n    }\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwheelodex%2Fwheel-filename","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwheelodex%2Fwheel-filename","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwheelodex%2Fwheel-filename/lists"}