Fix version pattern pre-releases#705
Fix version pattern pre-releases#705brettcannon merged 2 commits intopypa:mainfrom deathaxe:fix/version_pattern
Conversation
This commit fixes a precedence issue with version pre-release tags. Relational --- The `version` module exports `VERSION_PATTERN`. Directly using it, might not produce expected results for pre-releases. ```py >>> import re >>> from packaging.version import VERSION_PATTERN >>> re.match(VERSION_PATTERN, "1.0.0-alpha1") <re.Match object; span=(0, 7), match='1.0.0-a'> ``` Trailing `1` from `-alpha1` is not matched, because previous pattern preferred consuming only `a` instead of `alpha` due to missing word boundary checks. Simplest solution is to re-order tokens, so regexp prefers longer tokens over their abbreviation. ```py >>> import re >>> from packaging.version import VERSION_PATTERN >>> re.match(VERSION_PATTERN, "1.0.0-alpha1") <re.Match object; span=(0, 12), match='1.0.0-alpha1'> ``` Note: This commit also removes an unnecessary capture group.
|
Is there an open issue for this? |
|
Since packaging/src/packaging/version.py Lines 146 to 156 in 3030822 |
|
A public value wouldn't have any value for me as I can't use this package anyway, due to the need of supporting python 3.3 I just stumbled about the pattern not doing what I expected without explicit anchors being added. If the variable is not intented for public use, it should probably not be part of |
pradyunsg
left a comment
There was a problem hiding this comment.
Seems like a reasonable fix to me.
It's a part of the public API, but we don't want the entire regex string to be presented in the documentation: https://packaging.pypa.io/en/stable/version.html#packaging.version.VERSION_PATTERN |
|
An alternative would be to align the pattern with the ones from specifiers module. packaging/src/packaging/specifiers.py Line 154 in 3030822 |
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [packaging](https://togithub.com/pypa/packaging) | minor | `==23.1` -> `==23.2` | --- ### Release Notes <details> <summary>pypa/packaging (packaging)</summary> ### [`v23.2`](https://togithub.com/pypa/packaging/releases/tag/23.2) [Compare Source](https://togithub.com/pypa/packaging/compare/23.1...23.2) #### What's Changed - parse_marker should consume the entire source string by [@​mwerschy](https://togithub.com/mwerschy) in [https://github.com/pypa/packaging/pull/687](https://togithub.com/pypa/packaging/pull/687) - Create a Security Policy file by [@​joycebrum](https://togithub.com/joycebrum) in [https://github.com/pypa/packaging/pull/695](https://togithub.com/pypa/packaging/pull/695) - Add python 3.12 to CI by [@​mayeut](https://togithub.com/mayeut) in [https://github.com/pypa/packaging/pull/689](https://togithub.com/pypa/packaging/pull/689) - Remove URL validation from requirement parsing by [@​uranusjr](https://togithub.com/uranusjr) in [https://github.com/pypa/packaging/pull/684](https://togithub.com/pypa/packaging/pull/684) - Add types for packaging.version.\_Version by [@​hauntsaninja](https://togithub.com/hauntsaninja) in [https://github.com/pypa/packaging/pull/665](https://togithub.com/pypa/packaging/pull/665) - Add PyPy 3.10 to CI by [@​mayeut](https://togithub.com/mayeut) in [https://github.com/pypa/packaging/pull/699](https://togithub.com/pypa/packaging/pull/699) - Remove unused argument in `_manylinux._is_compatible` by [@​mayeut](https://togithub.com/mayeut) in [https://github.com/pypa/packaging/pull/700](https://togithub.com/pypa/packaging/pull/700) - Canonicalize names for requirements comparison by [@​astrojuanlu](https://togithub.com/astrojuanlu) in [https://github.com/pypa/packaging/pull/696](https://togithub.com/pypa/packaging/pull/696) - Add platform tag support for LoongArch by [@​loongson-zn](https://togithub.com/loongson-zn) in [https://github.com/pypa/packaging/pull/693](https://togithub.com/pypa/packaging/pull/693) - Ability to install `armv7l manylinux/musllinux` wheels on `armv8l` by [@​mayeut](https://togithub.com/mayeut) in [https://github.com/pypa/packaging/pull/690](https://togithub.com/pypa/packaging/pull/690) - Include CHANGELOG.rst in sdist by [@​astrojuanlu](https://togithub.com/astrojuanlu) in [https://github.com/pypa/packaging/pull/704](https://togithub.com/pypa/packaging/pull/704) - Update pyupgrade to Python 3.7+ by [@​fangchenli](https://togithub.com/fangchenli) in [https://github.com/pypa/packaging/pull/580](https://togithub.com/pypa/packaging/pull/580) - Fix version pattern pre-releases by [@​deathaxe](https://togithub.com/deathaxe) in [https://github.com/pypa/packaging/pull/705](https://togithub.com/pypa/packaging/pull/705) - Fix typos found by codespell by [@​DimitriPapadopoulos](https://togithub.com/DimitriPapadopoulos) in [https://github.com/pypa/packaging/pull/706](https://togithub.com/pypa/packaging/pull/706) - Support enriched metadata by [@​brettcannon](https://togithub.com/brettcannon) in [https://github.com/pypa/packaging/pull/686](https://togithub.com/pypa/packaging/pull/686) - Correct rST syntax in CHANGELOG.rst by [@​atugushev](https://togithub.com/atugushev) in [https://github.com/pypa/packaging/pull/709](https://togithub.com/pypa/packaging/pull/709) - fix: platform tag for GraalPy by [@​mayeut](https://togithub.com/mayeut) in [https://github.com/pypa/packaging/pull/711](https://togithub.com/pypa/packaging/pull/711) - Document that this library uses a calendar-based versioning scheme by [@​faph](https://togithub.com/faph) in [https://github.com/pypa/packaging/pull/717](https://togithub.com/pypa/packaging/pull/717) - fix: Update copyright date for docs by [@​garrypolley](https://togithub.com/garrypolley) in [https://github.com/pypa/packaging/pull/713](https://togithub.com/pypa/packaging/pull/713) - Bump pip version to avoid known vulnerabilities by [@​joycebrum](https://togithub.com/joycebrum) in [https://github.com/pypa/packaging/pull/720](https://togithub.com/pypa/packaging/pull/720) - Typing annotations fixed in version.py by [@​jolaf](https://togithub.com/jolaf) in [https://github.com/pypa/packaging/pull/723](https://togithub.com/pypa/packaging/pull/723) - parse\_{sdist,wheel}\_filename: don't raise InvalidVersion by [@​SpecLad](https://togithub.com/SpecLad) in [https://github.com/pypa/packaging/pull/721](https://togithub.com/pypa/packaging/pull/721) - Fix code blocks in CHANGELOG.md by [@​edmorley](https://togithub.com/edmorley) in [https://github.com/pypa/packaging/pull/724](https://togithub.com/pypa/packaging/pull/724) #### New Contributors - [@​mwerschy](https://togithub.com/mwerschy) made their first contribution in [https://github.com/pypa/packaging/pull/687](https://togithub.com/pypa/packaging/pull/687) - [@​joycebrum](https://togithub.com/joycebrum) made their first contribution in [https://github.com/pypa/packaging/pull/695](https://togithub.com/pypa/packaging/pull/695) - [@​astrojuanlu](https://togithub.com/astrojuanlu) made their first contribution in [https://github.com/pypa/packaging/pull/696](https://togithub.com/pypa/packaging/pull/696) - [@​loongson-zn](https://togithub.com/loongson-zn) made their first contribution in [https://github.com/pypa/packaging/pull/693](https://togithub.com/pypa/packaging/pull/693) - [@​fangchenli](https://togithub.com/fangchenli) made their first contribution in [https://github.com/pypa/packaging/pull/580](https://togithub.com/pypa/packaging/pull/580) - [@​deathaxe](https://togithub.com/deathaxe) made their first contribution in [https://github.com/pypa/packaging/pull/705](https://togithub.com/pypa/packaging/pull/705) - [@​DimitriPapadopoulos](https://togithub.com/DimitriPapadopoulos) made their first contribution in [https://github.com/pypa/packaging/pull/706](https://togithub.com/pypa/packaging/pull/706) - [@​atugushev](https://togithub.com/atugushev) made their first contribution in [https://github.com/pypa/packaging/pull/709](https://togithub.com/pypa/packaging/pull/709) - [@​faph](https://togithub.com/faph) made their first contribution in [https://github.com/pypa/packaging/pull/717](https://togithub.com/pypa/packaging/pull/717) - [@​garrypolley](https://togithub.com/garrypolley) made their first contribution in [https://github.com/pypa/packaging/pull/713](https://togithub.com/pypa/packaging/pull/713) - [@​jolaf](https://togithub.com/jolaf) made their first contribution in [https://github.com/pypa/packaging/pull/723](https://togithub.com/pypa/packaging/pull/723) - [@​SpecLad](https://togithub.com/SpecLad) made their first contribution in [https://github.com/pypa/packaging/pull/721](https://togithub.com/pypa/packaging/pull/721) - [@​edmorley](https://togithub.com/edmorley) made their first contribution in [https://github.com/pypa/packaging/pull/724](https://togithub.com/pypa/packaging/pull/724) **Full Changelog**: pypa/packaging@23.1...23.2 </details> --- ### Configuration 📅 **Schedule**: Branch creation - "before 4am on the first day of the month" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://togithub.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi4xMDkuNCIsInVwZGF0ZWRJblZlciI6IjM2LjEwOS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->
Update regex from packaging project See pypa/packaging#705 Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
Update regex from packaging project See pypa/packaging#705 Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
This commit fixes a precedence issue with version pre-release tags.
Relational
The
versionmodule exportsVERSION_PATTERN.Directly using it, might not produce expected results for pre-releases.
Trailing
1from-alpha1is not matched, because previous pattern preferred consuming onlyainstead ofalphadue to missing word boundary checks.Simplest solution is to re-order tokens, so regexp prefers longer tokens over their abbreviation.
Note: This commit also removes an unnecessary capture group.