dependabot[bot] opened a new pull request, #61604: URL: https://github.com/apache/airflow/pull/61604
Updates the requirements on [gitpython](https://github.com/gitpython-developers/GitPython), [hatchling](https://github.com/pypa/hatch), [packaging](https://github.com/pypa/packaging), [pathspec](https://github.com/cpburnz/python-pathspec), [trove-classifiers](https://github.com/pypa/trove-classifiers), [keyring](https://github.com/jaraco/keyring), [click](https://github.com/pallets/click) and [rich-click](https://github.com/ewels/rich-click) to permit the latest version. Updates `gitpython` from 3.1.45 to 3.1.46 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/gitpython-developers/GitPython/releases">gitpython's releases</a>.</em></p> <blockquote> <h2>3.1.46</h2> <h2>What's Changed</h2> <ul> <li>Prepare a new release by <a href="https://github.com/Byron"><code>@Byron</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2063">gitpython-developers/GitPython#2063</a></li> <li>Bump actions/checkout from 4 to 5 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2067">gitpython-developers/GitPython#2067</a></li> <li>Bump git/ext/gitdb from <code>335c0f6</code> to <code>39d7dbf</code> by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2068">gitpython-developers/GitPython#2068</a></li> <li>Bump actions/setup-python from 5 to 6 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2070">gitpython-developers/GitPython#2070</a></li> <li>Bump git/ext/gitdb from <code>39d7dbf</code> to <code>f8fdfec</code> by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2071">gitpython-developers/GitPython#2071</a></li> <li>Fix type hint for <code>SymbolicReference.reference</code> property by <a href="https://github.com/emmanuel-ferdman"><code>@emmanuel-ferdman</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2074">gitpython-developers/GitPython#2074</a></li> <li>feat: Add support for hasconfig git rule. by <a href="https://github.com/bvanelli"><code>@bvanelli</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2075">gitpython-developers/GitPython#2075</a></li> <li>Bump github/codeql-action from 3 to 4 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2076">gitpython-developers/GitPython#2076</a></li> <li>Use actual return type in annotation for method submodule_update by <a href="https://github.com/extrwi"><code>@extrwi</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2078">gitpython-developers/GitPython#2078</a></li> <li>Bump git/ext/gitdb from <code>f8fdfec</code> to <code>65321a2</code> by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2082">gitpython-developers/GitPython#2082</a></li> <li>Preliminary support for index format v3 by <a href="https://github.com/blahgeek"><code>@blahgeek</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2081">gitpython-developers/GitPython#2081</a></li> <li>Bump actions/checkout from 5 to 6 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2084">gitpython-developers/GitPython#2084</a></li> <li>Pin <code>mypy==1.18.2</code> by <a href="https://github.com/George-Ogden"><code>@George-Ogden</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2087">gitpython-developers/GitPython#2087</a></li> <li>Respect <code>os.Pathlike</code> by <a href="https://github.com/George-Ogden"><code>@George-Ogden</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2086">gitpython-developers/GitPython#2086</a></li> <li>Bump git/ext/gitdb from <code>65321a2</code> to <code>4c63ee6</code> by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2093">gitpython-developers/GitPython#2093</a></li> <li>Join <code>Pathlike</code> Object to Tree by <a href="https://github.com/George-Ogden"><code>@George-Ogden</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2094">gitpython-developers/GitPython#2094</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/emmanuel-ferdman"><code>@emmanuel-ferdman</code></a> made their first contribution in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2074">gitpython-developers/GitPython#2074</a></li> <li><a href="https://github.com/bvanelli"><code>@bvanelli</code></a> made their first contribution in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2075">gitpython-developers/GitPython#2075</a></li> <li><a href="https://github.com/extrwi"><code>@extrwi</code></a> made their first contribution in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2078">gitpython-developers/GitPython#2078</a></li> <li><a href="https://github.com/blahgeek"><code>@blahgeek</code></a> made their first contribution in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2081">gitpython-developers/GitPython#2081</a></li> <li><a href="https://github.com/George-Ogden"><code>@George-Ogden</code></a> made their first contribution in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2087">gitpython-developers/GitPython#2087</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/gitpython-developers/GitPython/compare/3.1.45...3.1.46">https://github.com/gitpython-developers/GitPython/compare/3.1.45...3.1.46</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/gitpython-developers/GitPython/commit/9e24eb6b72c1851e46e09133b83b48f2059037d7"><code>9e24eb6</code></a> Prepare next release</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/b8bb60e544a1f389120b5540c6e1e7505427c279"><code>b8bb60e</code></a> Merge pull request <a href="https://redirect.github.com/gitpython-developers/GitPython/issues/2094">#2094</a> from George-Ogden/join-pathlike</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/c8b58c09904dabe67222165e4d3eecf4c8f07490"><code>c8b58c0</code></a> Update test/test_tree.py</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/88e26141c738f6ac3beb1a433039611f88c2c30d"><code>88e2614</code></a> Allow joining path to tree</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/9fa28ae108dc39cfb13282cd18d4251d0118dd52"><code>9fa28ae</code></a> Add failing tests for joining paths</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/6d66a02d14929976d9d8409773054e2e022eae0e"><code>6d66a02</code></a> Merge pull request <a href="https://redirect.github.com/gitpython-developers/GitPython/issues/2093">#2093</a> from gitpython-developers/dependabot/submodules/git/...</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/f738029ab05fe8356022248e68f9119c46b2f1e5"><code>f738029</code></a> Bump git/ext/gitdb from <code>65321a2</code> to <code>4c63ee6</code></li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/eecc28d2e78d799105a2070acdb530ee5c81a9e8"><code>eecc28d</code></a> Merge pull request <a href="https://redirect.github.com/gitpython-developers/GitPython/issues/2086">#2086</a> from George-Ogden/true-pathlike</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/0cb55fb4adca4f2b26767e85ef8652ef13b834a1"><code>0cb55fb</code></a> Revert "Add tests with non-ascii characters"</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/171062655e24b6a6ca1a3beab3c7679278350ab5"><code>1710626</code></a> Add tests with non-ascii characters</li> <li>Additional commits viewable in <a href="https://github.com/gitpython-developers/GitPython/compare/3.1.45...3.1.46">compare view</a></li> </ul> </details> <br /> Updates `hatchling` from 1.27.0 to 1.28.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/pypa/hatch/releases">hatchling's releases</a>.</em></p> <blockquote> <h2>Hatchling v1.28.0</h2> <p><em><strong>Changed:</strong></em></p> <ul> <li>Drop support for Python 3.9</li> </ul> <p><em><strong>Added:</strong></em></p> <ul> <li>Add <code>sbom-files</code> option and <code>sbom_files</code> build data to the <code>wheel</code> build target for including Software Bill of Materials files.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/pypa/hatch/commit/8e1a709e49009ee25cf924c5a9da477a03149a75"><code>8e1a709</code></a> hatch-v1.16.x (<a href="https://redirect.github.com/pypa/hatch/issues/2106">#2106</a>)</li> <li><a href="https://github.com/pypa/hatch/commit/9d25ed03ee89a3e5c1b8faaa766a12c991ce60d2"><code>9d25ed0</code></a> Add User-Agent header with Hatch, Python and HTTPX versions (<a href="https://redirect.github.com/pypa/hatch/issues/1827">#1827</a>)</li> <li><a href="https://github.com/pypa/hatch/commit/8866ef018ca216e8d813e8eff3132d5fea6e0665"><code>8866ef0</code></a> Fix workspace option overrides (<a href="https://redirect.github.com/pypa/hatch/issues/2104">#2104</a>)</li> <li><a href="https://github.com/pypa/hatch/commit/4d8b5d5c84e11bfc20b12950893546da9d40a6b8"><code>4d8b5d5</code></a> Blog and doc updates for release of 1.16 (<a href="https://redirect.github.com/pypa/hatch/issues/2103">#2103</a>)</li> <li><a href="https://github.com/pypa/hatch/commit/61e342f4854b0a6cbc0fe129c8b227d478e16aa8"><code>61e342f</code></a> Use zstandard implementation from stdlib (PEP-784) (<a href="https://redirect.github.com/pypa/hatch/issues/2034">#2034</a>)</li> <li><a href="https://github.com/pypa/hatch/commit/8695db4ecdb60e48d809c5095358d076dc22ebf2"><code>8695db4</code></a> Add SBOM support - PEP770 (<a href="https://redirect.github.com/pypa/hatch/issues/2098">#2098</a>)</li> <li><a href="https://github.com/pypa/hatch/commit/b0609b3cec34346eb50e8defc53444ed3f9653c8"><code>b0609b3</code></a> GitHub Actions: macOS 13 runner image is closing down (<a href="https://redirect.github.com/pypa/hatch/issues/2070">#2070</a>)</li> <li><a href="https://github.com/pypa/hatch/commit/ff4b4040fe84c9a5911137791695380d976577dc"><code>ff4b404</code></a> Code clean up. (<a href="https://redirect.github.com/pypa/hatch/issues/2097">#2097</a>)</li> <li><a href="https://github.com/pypa/hatch/commit/c6189fcca34413d49724930a0a18c9f43335abf2"><code>c6189fc</code></a> Hatch environments support PEP735 dependency-groups (<a href="https://redirect.github.com/pypa/hatch/issues/1922">#1922</a>)</li> <li><a href="https://github.com/pypa/hatch/commit/09b200757f5a8437bb133e955c93623f1e74332c"><code>09b2007</code></a> Simplify and update workspace environment docs. (<a href="https://redirect.github.com/pypa/hatch/issues/2095">#2095</a>)</li> <li>Additional commits viewable in <a href="https://github.com/pypa/hatch/compare/hatchling-v1.27.0...hatchling-v1.28.0">compare view</a></li> </ul> </details> <br /> Updates `packaging` from 25.0 to 26.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/pypa/packaging/releases">packaging's releases</a>.</em></p> <blockquote> <h2>26.0</h2> <p>Read about the performance improvements here: <a href="https://iscinumpy.dev/post/packaging-faster">https://iscinumpy.dev/post/packaging-faster</a>.</p> <h2>What's Changed</h2> <p>Features:</p> <ul> <li>PEP 751: support pylock by <a href="https://github.com/sbidoul"><code>@sbidoul</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/900">pypa/packaging#900</a></li> <li>PEP 794: import name metadata by <a href="https://github.com/brettcannon"><code>@brettcannon</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/948">pypa/packaging#948</a></li> <li>Support writing metadata by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/846">pypa/packaging#846</a></li> <li>Support <code>__replace__</code> for <code>Version</code> by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/1003">pypa/packaging#1003</a></li> <li>Support positional pattern matching for <code>Version</code> and <code>Specifier</code> by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/1004">pypa/packaging#1004</a></li> </ul> <p>Behavior adaptations:</p> <ul> <li>PEP 440 handling of prereleases for <code>Specifier.contains</code>, <code>SpecifierSet.contains</code>, and <code>SpecifierSet.filter</code> by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/897">pypa/packaging#897</a></li> <li>Handle PEP 440 edge case in <code>SpecifierSet.filter</code> by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/942">pypa/packaging#942</a></li> <li>Adjust arbitrary equality intersection preservation in <code>SpecifierSet</code> by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/951">pypa/packaging#951</a></li> <li>Return <code>False</code> instead of raising for <code>.contains</code> with invalid version by <a href="https://github.com/Liam-DeVoe"><code>@Liam-DeVoe</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/932">pypa/packaging#932</a></li> <li>Support arbitrary equality on arbitrary strings for <code>Specifier</code> and <code>SpecifierSet</code>'s <code>filter</code> and <code>contains</code> method. by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/954">pypa/packaging#954</a></li> <li>Only try to parse as <code>Version</code> on certain marker keys, return <code>False</code> on unequal ordered comparsions by <a href="https://github.com/JP-Ellis"><code>@JP-Ellis</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/939">pypa/packaging#939</a></li> </ul> <p>Fixes:</p> <ul> <li>Update <code>_hash</code> when unpickling <code>Tag()</code> by <a href="https://github.com/dholth"><code>@dholth</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/860">pypa/packaging#860</a></li> <li>Correct comment and simplify implicit prerelease handling in <code>Specifier.prereleases</code> by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/896">pypa/packaging#896</a></li> <li>Use explicit <code>_GLibCVersion</code> <code>NamedTuple</code> in <code>_manylinux</code> by <a href="https://github.com/cthoyt"><code>@cthoyt</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/868">pypa/packaging#868</a></li> <li>Detect invalid license expressions containing <code>()</code> by <a href="https://github.com/bwoodsend"><code>@bwoodsend</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/879">pypa/packaging#879</a></li> <li>Correct regex for metadata <code>'name'</code> format by <a href="https://github.com/di"><code>@di</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/925">pypa/packaging#925</a></li> <li>Improve the message around expecting a semicolon by <a href="https://github.com/pradyunsg"><code>@pradyunsg</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/833">pypa/packaging#833</a></li> <li>Support nested parens in license expressions by <a href="https://github.com/Liam-DeVoe"><code>@Liam-DeVoe</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/931">pypa/packaging#931</a></li> <li>Add space before at symbol in <code>Requirements</code> string by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/953">pypa/packaging#953</a></li> <li>A root logger use found by ruff LOG, use <code>packaging</code> logger instead by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/965">pypa/packaging#965</a></li> <li>Better support for subclassing <code>Marker</code> and <code>Requirement</code> by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/1022">pypa/packaging#1022</a></li> <li>Normalize all extras, not just if it comes first by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/1024">pypa/packaging#1024</a></li> <li>Don't produce a broken repr if <code>Marker</code> fails to construct by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/1033">pypa/packaging#1033</a></li> </ul> <p>Performance:</p> <ul> <li>Avoid recompiling regexes in the tokenizer for a 3x speedup by <a href="https://github.com/hauntsaninja"><code>@hauntsaninja</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/1019">pypa/packaging#1019</a></li> <li>Improve performance in <code>_manylinux.py</code> by <a href="https://github.com/cthoyt"><code>@cthoyt</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/869">pypa/packaging#869</a></li> <li>Minor cleanups to <code>Version</code> by <a href="https://github.com/bearomorphism"><code>@bearomorphism</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/913">pypa/packaging#913</a></li> <li>Skip redundant creation of <code>Version</code>s in specifier comparison by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/986">pypa/packaging#986</a></li> <li>Cache <code>Specifier</code>'s Version by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/985">pypa/packaging#985</a></li> <li>Make <code>Version</code> a little faster by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/987">pypa/packaging#987</a></li> <li>Minor <code>Version</code> regex cleanup by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/990">pypa/packaging#990</a></li> <li>Faster regex on Python 3.11.5+ by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/988">pypa/packaging#988</a> and <a href="https://redirect.github.com/pypa/packaging/pull/1055">pypa/packaging#1055</a></li> <li>Lazily calculate <code>_key</code> in <code>Version</code> by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/989">pypa/packaging#989</a> and regression for <code>packaging_legacy</code> fixed by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/1048">pypa/packaging#1048</a></li> <li>Faster <code>canonicalize_version</code> by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/993">pypa/packaging#993</a></li> <li>Use <code>fullmatch</code> in a couple more places by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/992">pypa/packaging#992</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pypa/packaging/blob/main/CHANGELOG.rst">packaging's changelog</a>.</em></p> <blockquote> <p>26.0 - 2026-01-20</p> <pre><code> Features: <ul> <li>PEP 751: support pylock (:pull:<code>900</code>)</li> <li>PEP 794: import name metadata (:pull:<code>948</code>)</li> <li>Support for writing metadata to a file (:pull:<code>846</code>)</li> <li>Support <code>__replace__</code> on Version (:pull:<code>1003</code>)</li> <li>Support positional pattern matching for <code>Version</code> and <code>SpecifierSet</code> (:pull:<code>1004</code>)</li> </ul> <p>Behavior adaptations:</p> <ul> <li>PEP 440 handling of prereleases for <code>Specifier.contains</code>, <code>SpecifierSet.contains</code>, and <code>SpecifierSet.filter</code> (:pull:<code>897</code>)</li> <li>Handle PEP 440 edge case in <code>SpecifierSet.filter</code> (:pull:<code>942</code>)</li> <li>Adjust arbitrary equality intersection preservation in <code>SpecifierSet</code> (:pull:<code>951</code>)</li> <li>Return <code>False</code> instead of raising for <code>.contains</code> with invalid version (:pull:<code>932</code>)</li> <li>Support arbitrary equality on arbitrary strings for <code>Specifier</code> and <code>SpecifierSet</code>'s <code>filter</code> and <code>contains</code> method. (:pull:<code>954</code>)</li> <li>Only try to parse as <code>Version</code> on certain marker keys, return <code>False</code> on unequal ordered comparisons (:pull:<code>939</code>)</li> </ul> <p>Fixes:</p> <ul> <li>Update <code>_hash</code> when unpickling <code>Tag()</code> (:pull:<code>860</code>)</li> <li>Correct comment and simplify implicit prerelease handling in <code>Specifier.prereleases</code> (:pull:<code>896</code>)</li> <li>Use explicit <code>_GLibCVersion</code> <code>NamedTuple</code> in <code>_manylinux</code> (:pull:<code>868</code>)</li> <li>Detect invalid license expressions containing <code>()</code> (:pull:<code>879</code>)</li> <li>Correct regex for metadata <code>'name'</code> format (:pull:<code>925</code>)</li> <li>Improve the message around expecting a semicolon (:pull:<code>833</code>)</li> <li>Support nested parens in license expressions (:pull:<code>931</code>)</li> <li>Add space before at symbol in <code>Requirements</code> string (:pull:<code>953</code>)</li> <li>A root logger use found, use a <code>packaging</code> logger instead (:pull:<code>965</code>)</li> <li>Better support for subclassing <code>Marker</code> and <code>Requirement</code> (:pull:<code>1022</code>)</li> <li>Normalize all extras, not just if it comes first (:pull:<code>1024</code>)</li> <li>Don't produce a broken repr if <code>Marker</code> fails to construct (:pull:<code>1033</code>)</li> </ul> <p>Performance:</p> <ul> <li>Avoid recompiling regexes in the tokenizer for a 3x speedup (:pull:<code>1019</code>)</li> <li>Improve performance in <code>_manylinux.py</code> (:pull:<code>869</code>)</li> <li>Minor cleanups to <code>Version</code> (:pull:<code>913</code>)</li> <li>Skip redundant creation of <code>Version</code>'s in specifier comparison (:pull:<code>986</code>)</li> <li>Cache the <code>Specifier</code>'s <code>Version</code> (:pull:<code>985</code>)</li> <li>Make <code>Version</code> a little faster (:pull:<code>987</code>)</li> <li>Minor <code>Version</code> regex cleanup (:pull:<code>990</code>)</li> <li>Faster regex on Python 3.11.5+ for <code>Version</code> (:pull:<code>988</code>, :pull:<code>1055</code>)</li> <li>Lazily calculate <code>_key</code> in <code>Version</code> (:pull:<code>989</code>, :pull:<code>1048</code>)</li> <li>Faster <code>canonicalize_version</code> (:pull:<code>993</code>)</li> <li>Use <code>re.fullmatch</code> in a couple more places (:pull:<code>992</code>, :pull:<code>1029</code>)</li> <li>Use <code>map</code> instead of generator (:pull:<code>996</code>)</li> <li>Deprecate <code>._version</code> (<code>_Version</code>, a <code>NamedTuple</code>) (:pull:<code>995</code>, :pull:<code>1062</code>)<br /> </tr></table><br /> </code></pre></li> </ul> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/pypa/packaging/commit/3b77a26f5a27473ad3b08194d773f325d018a2d0"><code>3b77a26</code></a> Bump for release</li> <li><a href="https://github.com/pypa/packaging/commit/31371cce593d2bde0dd8c436ecfb7d53cb91cfb6"><code>31371cc</code></a> docs: prepare for 26.0 final (<a href="https://redirect.github.com/pypa/packaging/issues/1063">#1063</a>)</li> <li><a href="https://github.com/pypa/packaging/commit/9627a8821f09e4c55cd6e9daadb617b67c4741c2"><code>9627a88</code></a> perf: dual replace (<a href="https://redirect.github.com/pypa/packaging/issues/1064">#1064</a>)</li> <li><a href="https://github.com/pypa/packaging/commit/d5398b8bc19f3fad7b035ceb83023caf06d6e2da"><code>d5398b8</code></a> fix: restore ._version as a compat shim (<a href="https://redirect.github.com/pypa/packaging/issues/1062">#1062</a>)</li> <li><a href="https://github.com/pypa/packaging/commit/3a7b600a126d237b2ad3cd7e25d2cb5c176276af"><code>3a7b600</code></a> Bump for development</li> <li><a href="https://github.com/pypa/packaging/commit/d4eefdccf992e963c48011875301d93df6a7f2cc"><code>d4eefdc</code></a> Bump for release</li> <li><a href="https://github.com/pypa/packaging/commit/46189124fb43d8989d370902c80ab156eb83a45d"><code>4618912</code></a> docs: prepare for 26.0rc3 (<a href="https://redirect.github.com/pypa/packaging/issues/1060">#1060</a>)</li> <li><a href="https://github.com/pypa/packaging/commit/0cf1b41b4b321ae08cad7d3e49cfaff5578fe813"><code>0cf1b41</code></a> ci: test on first public release of CPythons (<a href="https://redirect.github.com/pypa/packaging/issues/1056">#1056</a>)</li> <li><a href="https://github.com/pypa/packaging/commit/716beb1c0a5d7a398bf57fbd80bc2501811e616b"><code>716beb1</code></a> perf: 10% faster stripping zeros (<a href="https://redirect.github.com/pypa/packaging/issues/1058">#1058</a>)</li> <li><a href="https://github.com/pypa/packaging/commit/350a2306700b738f487f251efa278f532b263dee"><code>350a230</code></a> fix: support CPython 3.11.0-3.11.4 and older PyPy3.11 (<a href="https://redirect.github.com/pypa/packaging/issues/1055">#1055</a>)</li> <li>Additional commits viewable in <a href="https://github.com/pypa/packaging/compare/25.0...26.0">compare view</a></li> </ul> </details> <br /> Updates `pathspec` from 0.12.1 to 1.0.4 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/cpburnz/python-pathspec/releases">pathspec's releases</a>.</em></p> <blockquote> <h2>v1.0.4</h2> <p>Release v1.0.4. See <a href="https://github.com/cpburnz/python-pathspec/blob/v1.0.4/CHANGES.rst">CHANGES.rst</a>.</p> <h2>v1.0.3</h2> <p>Release v1.0.3. See <a href="https://github.com/cpburnz/python-pathspec/blob/v1.0.3/CHANGES.rst">CHANGES.rst</a>.</p> <h2>v1.0.2</h2> <p>Release v1.0.2. See <a href="https://github.com/cpburnz/python-pathspec/blob/v1.0.2/CHANGES.rst">CHANGES.rst</a>.</p> <h2>v1.0.1</h2> <p>Release v1.0.1. See <a href="https://github.com/cpburnz/python-pathspec/blob/v1.0.1/CHANGES.rst">CHANGES.rst</a>.</p> <h2>v1.0.0</h2> <p>Release v1.0.0. See <a href="https://github.com/cpburnz/python-pathspec/blob/v1.0.0/CHANGES.rst">CHANGES.rst</a>.</p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/cpburnz/python-pathspec/blob/master/CHANGES.rst">pathspec's changelog</a>.</em></p> <blockquote> <h2>1.0.4 (2026-01-26)</h2> <ul> <li><code>Issue [#103](https://github.com/cpburnz/python-pathspec/issues/103)</code>_: Using re2 fails if pyre2 is also installed.</li> </ul> <p>.. _<code>Issue [#103](https://github.com/cpburnz/python-pathspec/issues/103)</code>: <a href="https://redirect.github.com/cpburnz/python-pathspec/issues/103">cpburnz/python-pathspec#103</a></p> <h2>1.0.3 (2026-01-09)</h2> <p>Bug fixes:</p> <ul> <li><code>Issue [#101](https://github.com/cpburnz/python-pathspec/issues/101)</code>_: pyright strict errors with pathspec >= 1.0.0.</li> <li><code>Issue [#102](https://github.com/cpburnz/python-pathspec/issues/102)</code>_: No module named 'tomllib'.</li> </ul> <p>.. _<code>Issue [#101](https://github.com/cpburnz/python-pathspec/issues/101)</code>: <a href="https://redirect.github.com/cpburnz/python-pathspec/issues/101">cpburnz/python-pathspec#101</a> .. _<code>Issue [#102](https://github.com/cpburnz/python-pathspec/issues/102)</code>: <a href="https://redirect.github.com/cpburnz/python-pathspec/issues/102">cpburnz/python-pathspec#102</a></p> <h2>1.0.2 (2026-01-07)</h2> <p>Bug fixes:</p> <ul> <li>Type hint <code>collections.abc.Callable</code> does not properly replace <code>typing.Callable</code> until Python 3.9.2.</li> </ul> <h2>1.0.1 (2026-01-06)</h2> <p>Bug fixes:</p> <ul> <li><code>Issue [#100](https://github.com/cpburnz/python-pathspec/issues/100)</code>_: ValueError(f"{patterns=!r} cannot be empty.") when using black.</li> </ul> <p>.. _<code>Issue [#100](https://github.com/cpburnz/python-pathspec/issues/100)</code>: <a href="https://redirect.github.com/cpburnz/python-pathspec/issues/100">cpburnz/python-pathspec#100</a></p> <h2>1.0.0 (2026-01-05)</h2> <p>Major changes:</p> <ul> <li><code>Issue [#91](https://github.com/cpburnz/python-pathspec/issues/91)</code>_: Dropped support of EoL Python 3.8.</li> <li>Added concept of backends to allow for faster regular expression matching. The backend can be controlled using the <code>backend</code> argument to <code>PathSpec()</code>, <code>PathSpec.from_lines()</code>, <code>GitIgnoreSpec()</code>, and <code>GitIgnoreSpec.from_lines()</code>.</li> <li>Renamed "gitwildmatch" pattern back to "gitignore". The "gitignore" pattern behaves slightly differently when used with <code>PathSpec</code> (<em>gitignore</em> as documented) than with <code>GitIgnoreSpec</code> (replicates <em>Git</em>'s edge cases).</li> </ul> <p>API changes:</p> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/cpburnz/python-pathspec/commit/39f02a9bd9de3b9b99bba5f794d63d2087a50fec"><code>39f02a9</code></a> Release v1.0.4</li> <li><a href="https://github.com/cpburnz/python-pathspec/commit/529c0f81b7ba4ed9ad88468f23181a6f74693c56"><code>529c0f8</code></a> Improve testpypi</li> <li><a href="https://github.com/cpburnz/python-pathspec/commit/01057ced620946879a84c2d78043c01fdf4fba38"><code>01057ce</code></a> Fix 103</li> <li><a href="https://github.com/cpburnz/python-pathspec/commit/593a85942f54a64269ff1d55969ff9bf1dd049c9"><code>593a859</code></a> Improve testpypi</li> <li><a href="https://github.com/cpburnz/python-pathspec/commit/db3f54e78f68824f641b186bf4a749d944e2153f"><code>db3f54e</code></a> Releasse v1.0.3</li> <li><a href="https://github.com/cpburnz/python-pathspec/commit/1b6bdda35a44cf48edc67a71d8020c26e84a40ec"><code>1b6bdda</code></a> Releasse v1.0.3</li> <li><a href="https://github.com/cpburnz/python-pathspec/commit/f9b556abd5eebe94ec70404f5c386bf4451f5437"><code>f9b556a</code></a> Fix docs</li> <li><a href="https://github.com/cpburnz/python-pathspec/commit/9867f1a954c68e8a4dc9cdcf8bfc5ad018a7951c"><code>9867f1a</code></a> Fix tests</li> <li><a href="https://github.com/cpburnz/python-pathspec/commit/85cb3cc18bf925bef3b00b74a8b11049826c0129"><code>85cb3cc</code></a> Fix docs</li> <li><a href="https://github.com/cpburnz/python-pathspec/commit/66281233ae20aa1de22345c1eb004dad9592b55d"><code>6628123</code></a> Fix 101 regression</li> <li>Additional commits viewable in <a href="https://github.com/cpburnz/python-pathspec/compare/v0.12.1...v1.0.4">compare view</a></li> </ul> </details> <br /> Updates `trove-classifiers` from 2025.9.9.12 to 2026.1.14.14 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/pypa/trove-classifiers/commit/05cc151733645d6fe075147ae47cf5cc11aaa84e"><code>05cc151</code></a> Update <strong>init</strong>.py to add Cygwin as a classifier (<a href="https://redirect.github.com/pypa/trove-classifiers/issues/232">#232</a>)</li> <li><a href="https://github.com/pypa/trove-classifiers/commit/b0c2d5851b4728f81a769598a13815efb0b483b0"><code>b0c2d58</code></a> Add support for Django CMS 5.1 (<a href="https://redirect.github.com/pypa/trove-classifiers/issues/231">#231</a>)</li> <li><a href="https://github.com/pypa/trove-classifiers/commit/acd10ae15e500aade0b5d3e536ac3e0a81f4b5b8"><code>acd10ae</code></a> - add classifier for Zope 6 (<a href="https://redirect.github.com/pypa/trove-classifiers/issues/229">#229</a>)</li> <li><a href="https://github.com/pypa/trove-classifiers/commit/116f1cbabf018908b6e1a9e153c6d3d6abd3986b"><code>116f1cb</code></a> Added Topic :: Scientific/Engineering :: Instrument Drivers :: IVI Conformant...</li> <li><a href="https://github.com/pypa/trove-classifiers/commit/48c3b326d7b8330c92b168262a4d8f36aef1af43"><code>48c3b32</code></a> Add support for Odoo 19.0 in classifiers (<a href="https://redirect.github.com/pypa/trove-classifiers/issues/225">#225</a>)</li> <li>See full diff in <a href="https://github.com/pypa/trove-classifiers/compare/2025.9.9.12...2026.1.14.14">compare view</a></li> </ul> </details> <br /> Updates `keyring` from 25.6.0 to 25.7.0 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/jaraco/keyring/blob/main/NEWS.rst">keyring's changelog</a>.</em></p> <blockquote> <h1>v25.7.0</h1> <h2>Features</h2> <ul> <li>Improved support for KWallet 6. (<a href="https://redirect.github.com/jaraco/keyring/issues/728">#728</a>)</li> </ul> <h2>Bugfixes</h2> <ul> <li>Removed cruft from Python 3.8. (<a href="https://redirect.github.com/jaraco/keyring/issues/722">#722</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/jaraco/keyring/commit/38c040133559682902f25fe96496756ee6849820"><code>38c0401</code></a> Finalize</li> <li><a href="https://github.com/jaraco/keyring/commit/e5b7d2a20931fa7f4d53e28eb5dffceb2e82ba6b"><code>e5b7d2a</code></a> Revert "Disable type checking on filter call. Fixes <a href="https://redirect.github.com/jaraco/keyring/issues/659">#659</a>."</li> <li><a href="https://github.com/jaraco/keyring/commit/2ce2d465050d73db8b1b7662c4e53c7b6fa7aafc"><code>2ce2d46</code></a> Add news fragment.</li> <li><a href="https://github.com/jaraco/keyring/commit/4bb5ece9a6959ee71ec464595f64e88951d00fb6"><code>4bb5ece</code></a> Merge pull request <a href="https://redirect.github.com/jaraco/keyring/issues/722">#722</a> from hugovk/rm-3.8</li> <li><a href="https://github.com/jaraco/keyring/commit/d7c0aa4e1dbfcde3064c1448dc1fd09c76e93d1d"><code>d7c0aa4</code></a> Merge branch 'main' into rm-3.8</li> <li><a href="https://github.com/jaraco/keyring/commit/ea1d763bfd80bf7cedd95fb040d38fc1d29c3e87"><code>ea1d763</code></a> Merge pull request <a href="https://redirect.github.com/jaraco/keyring/issues/721">#721</a> from hugovk/fix-tests</li> <li><a href="https://github.com/jaraco/keyring/commit/30eea9d7769b167be0667ea3aa3722c762e20659"><code>30eea9d</code></a> Merge <a href="https://github.com/jaraco/skeleton">https://github.com/jaraco/skeleton</a></li> <li><a href="https://github.com/jaraco/keyring/commit/fb6e52cf3f511242f0a9ff2441eb7e29c67f7268"><code>fb6e52c</code></a> Merge pull request <a href="https://redirect.github.com/jaraco/keyring/issues/724">#724</a> from dachucky/patch-1</li> <li><a href="https://github.com/jaraco/keyring/commit/9ff845920c4c72031343b17c6a3d605e6247f081"><code>9ff8459</code></a> Generalize the guidance around tox.</li> <li><a href="https://github.com/jaraco/keyring/commit/e7fbfa76a1f675bede0f5654e99add3a0cd66370"><code>e7fbfa7</code></a> Prefer imperative third-person voice.</li> <li>Additional commits viewable in <a href="https://github.com/jaraco/keyring/compare/v25.6.0...v25.7.0">compare view</a></li> </ul> </details> <br /> Updates `gitpython` from 3.1.45 to 3.1.46 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/gitpython-developers/GitPython/releases">gitpython's releases</a>.</em></p> <blockquote> <h2>3.1.46</h2> <h2>What's Changed</h2> <ul> <li>Prepare a new release by <a href="https://github.com/Byron"><code>@Byron</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2063">gitpython-developers/GitPython#2063</a></li> <li>Bump actions/checkout from 4 to 5 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2067">gitpython-developers/GitPython#2067</a></li> <li>Bump git/ext/gitdb from <code>335c0f6</code> to <code>39d7dbf</code> by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2068">gitpython-developers/GitPython#2068</a></li> <li>Bump actions/setup-python from 5 to 6 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2070">gitpython-developers/GitPython#2070</a></li> <li>Bump git/ext/gitdb from <code>39d7dbf</code> to <code>f8fdfec</code> by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2071">gitpython-developers/GitPython#2071</a></li> <li>Fix type hint for <code>SymbolicReference.reference</code> property by <a href="https://github.com/emmanuel-ferdman"><code>@emmanuel-ferdman</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2074">gitpython-developers/GitPython#2074</a></li> <li>feat: Add support for hasconfig git rule. by <a href="https://github.com/bvanelli"><code>@bvanelli</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2075">gitpython-developers/GitPython#2075</a></li> <li>Bump github/codeql-action from 3 to 4 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2076">gitpython-developers/GitPython#2076</a></li> <li>Use actual return type in annotation for method submodule_update by <a href="https://github.com/extrwi"><code>@extrwi</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2078">gitpython-developers/GitPython#2078</a></li> <li>Bump git/ext/gitdb from <code>f8fdfec</code> to <code>65321a2</code> by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2082">gitpython-developers/GitPython#2082</a></li> <li>Preliminary support for index format v3 by <a href="https://github.com/blahgeek"><code>@blahgeek</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2081">gitpython-developers/GitPython#2081</a></li> <li>Bump actions/checkout from 5 to 6 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2084">gitpython-developers/GitPython#2084</a></li> <li>Pin <code>mypy==1.18.2</code> by <a href="https://github.com/George-Ogden"><code>@George-Ogden</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2087">gitpython-developers/GitPython#2087</a></li> <li>Respect <code>os.Pathlike</code> by <a href="https://github.com/George-Ogden"><code>@George-Ogden</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2086">gitpython-developers/GitPython#2086</a></li> <li>Bump git/ext/gitdb from <code>65321a2</code> to <code>4c63ee6</code> by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2093">gitpython-developers/GitPython#2093</a></li> <li>Join <code>Pathlike</code> Object to Tree by <a href="https://github.com/George-Ogden"><code>@George-Ogden</code></a> in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2094">gitpython-developers/GitPython#2094</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/emmanuel-ferdman"><code>@emmanuel-ferdman</code></a> made their first contribution in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2074">gitpython-developers/GitPython#2074</a></li> <li><a href="https://github.com/bvanelli"><code>@bvanelli</code></a> made their first contribution in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2075">gitpython-developers/GitPython#2075</a></li> <li><a href="https://github.com/extrwi"><code>@extrwi</code></a> made their first contribution in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2078">gitpython-developers/GitPython#2078</a></li> <li><a href="https://github.com/blahgeek"><code>@blahgeek</code></a> made their first contribution in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2081">gitpython-developers/GitPython#2081</a></li> <li><a href="https://github.com/George-Ogden"><code>@George-Ogden</code></a> made their first contribution in <a href="https://redirect.github.com/gitpython-developers/GitPython/pull/2087">gitpython-developers/GitPython#2087</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/gitpython-developers/GitPython/compare/3.1.45...3.1.46">https://github.com/gitpython-developers/GitPython/compare/3.1.45...3.1.46</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/gitpython-developers/GitPython/commit/9e24eb6b72c1851e46e09133b83b48f2059037d7"><code>9e24eb6</code></a> Prepare next release</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/b8bb60e544a1f389120b5540c6e1e7505427c279"><code>b8bb60e</code></a> Merge pull request <a href="https://redirect.github.com/gitpython-developers/GitPython/issues/2094">#2094</a> from George-Ogden/join-pathlike</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/c8b58c09904dabe67222165e4d3eecf4c8f07490"><code>c8b58c0</code></a> Update test/test_tree.py</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/88e26141c738f6ac3beb1a433039611f88c2c30d"><code>88e2614</code></a> Allow joining path to tree</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/9fa28ae108dc39cfb13282cd18d4251d0118dd52"><code>9fa28ae</code></a> Add failing tests for joining paths</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/6d66a02d14929976d9d8409773054e2e022eae0e"><code>6d66a02</code></a> Merge pull request <a href="https://redirect.github.com/gitpython-developers/GitPython/issues/2093">#2093</a> from gitpython-developers/dependabot/submodules/git/...</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/f738029ab05fe8356022248e68f9119c46b2f1e5"><code>f738029</code></a> Bump git/ext/gitdb from <code>65321a2</code> to <code>4c63ee6</code></li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/eecc28d2e78d799105a2070acdb530ee5c81a9e8"><code>eecc28d</code></a> Merge pull request <a href="https://redirect.github.com/gitpython-developers/GitPython/issues/2086">#2086</a> from George-Ogden/true-pathlike</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/0cb55fb4adca4f2b26767e85ef8652ef13b834a1"><code>0cb55fb</code></a> Revert "Add tests with non-ascii characters"</li> <li><a href="https://github.com/gitpython-developers/GitPython/commit/171062655e24b6a6ca1a3beab3c7679278350ab5"><code>1710626</code></a> Add tests with non-ascii characters</li> <li>Additional commits viewable in <a href="https://github.com/gitpython-developers/GitPython/compare/3.1.45...3.1.46">compare view</a></li> </ul> </details> <br /> Updates `packaging` from 25.0 to 26.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/pypa/packaging/releases">packaging's releases</a>.</em></p> <blockquote> <h2>26.0</h2> <p>Read about the performance improvements here: <a href="https://iscinumpy.dev/post/packaging-faster">https://iscinumpy.dev/post/packaging-faster</a>.</p> <h2>What's Changed</h2> <p>Features:</p> <ul> <li>PEP 751: support pylock by <a href="https://github.com/sbidoul"><code>@sbidoul</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/900">pypa/packaging#900</a></li> <li>PEP 794: import name metadata by <a href="https://github.com/brettcannon"><code>@brettcannon</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/948">pypa/packaging#948</a></li> <li>Support writing metadata by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/846">pypa/packaging#846</a></li> <li>Support <code>__replace__</code> for <code>Version</code> by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/1003">pypa/packaging#1003</a></li> <li>Support positional pattern matching for <code>Version</code> and <code>Specifier</code> by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/1004">pypa/packaging#1004</a></li> </ul> <p>Behavior adaptations:</p> <ul> <li>PEP 440 handling of prereleases for <code>Specifier.contains</code>, <code>SpecifierSet.contains</code>, and <code>SpecifierSet.filter</code> by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/897">pypa/packaging#897</a></li> <li>Handle PEP 440 edge case in <code>SpecifierSet.filter</code> by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/942">pypa/packaging#942</a></li> <li>Adjust arbitrary equality intersection preservation in <code>SpecifierSet</code> by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/951">pypa/packaging#951</a></li> <li>Return <code>False</code> instead of raising for <code>.contains</code> with invalid version by <a href="https://github.com/Liam-DeVoe"><code>@Liam-DeVoe</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/932">pypa/packaging#932</a></li> <li>Support arbitrary equality on arbitrary strings for <code>Specifier</code> and <code>SpecifierSet</code>'s <code>filter</code> and <code>contains</code> method. by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/954">pypa/packaging#954</a></li> <li>Only try to parse as <code>Version</code> on certain marker keys, return <code>False</code> on unequal ordered comparsions by <a href="https://github.com/JP-Ellis"><code>@JP-Ellis</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/939">pypa/packaging#939</a></li> </ul> <p>Fixes:</p> <ul> <li>Update <code>_hash</code> when unpickling <code>Tag()</code> by <a href="https://github.com/dholth"><code>@dholth</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/860">pypa/packaging#860</a></li> <li>Correct comment and simplify implicit prerelease handling in <code>Specifier.prereleases</code> by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/896">pypa/packaging#896</a></li> <li>Use explicit <code>_GLibCVersion</code> <code>NamedTuple</code> in <code>_manylinux</code> by <a href="https://github.com/cthoyt"><code>@cthoyt</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/868">pypa/packaging#868</a></li> <li>Detect invalid license expressions containing <code>()</code> by <a href="https://github.com/bwoodsend"><code>@bwoodsend</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/879">pypa/packaging#879</a></li> <li>Correct regex for metadata <code>'name'</code> format by <a href="https://github.com/di"><code>@di</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/925">pypa/packaging#925</a></li> <li>Improve the message around expecting a semicolon by <a href="https://github.com/pradyunsg"><code>@pradyunsg</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/833">pypa/packaging#833</a></li> <li>Support nested parens in license expressions by <a href="https://github.com/Liam-DeVoe"><code>@Liam-DeVoe</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/931">pypa/packaging#931</a></li> <li>Add space before at symbol in <code>Requirements</code> string by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/953">pypa/packaging#953</a></li> <li>A root logger use found by ruff LOG, use <code>packaging</code> logger instead by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/965">pypa/packaging#965</a></li> <li>Better support for subclassing <code>Marker</code> and <code>Requirement</code> by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/1022">pypa/packaging#1022</a></li> <li>Normalize all extras, not just if it comes first by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/1024">pypa/packaging#1024</a></li> <li>Don't produce a broken repr if <code>Marker</code> fails to construct by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/1033">pypa/packaging#1033</a></li> </ul> <p>Performance:</p> <ul> <li>Avoid recompiling regexes in the tokenizer for a 3x speedup by <a href="https://github.com/hauntsaninja"><code>@hauntsaninja</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/1019">pypa/packaging#1019</a></li> <li>Improve performance in <code>_manylinux.py</code> by <a href="https://github.com/cthoyt"><code>@cthoyt</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/869">pypa/packaging#869</a></li> <li>Minor cleanups to <code>Version</code> by <a href="https://github.com/bearomorphism"><code>@bearomorphism</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/913">pypa/packaging#913</a></li> <li>Skip redundant creation of <code>Version</code>s in specifier comparison by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/986">pypa/packaging#986</a></li> <li>Cache <code>Specifier</code>'s Version by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/985">pypa/packaging#985</a></li> <li>Make <code>Version</code> a little faster by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/987">pypa/packaging#987</a></li> <li>Minor <code>Version</code> regex cleanup by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/990">pypa/packaging#990</a></li> <li>Faster regex on Python 3.11.5+ by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/988">pypa/packaging#988</a> and <a href="https://redirect.github.com/pypa/packaging/pull/1055">pypa/packaging#1055</a></li> <li>Lazily calculate <code>_key</code> in <code>Version</code> by <a href="https://github.com/notatallshaw"><code>@notatallshaw</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/989">pypa/packaging#989</a> and regression for <code>packaging_legacy</code> fixed by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/1048">pypa/packaging#1048</a></li> <li>Faster <code>canonicalize_version</code> by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/993">pypa/packaging#993</a></li> <li>Use <code>fullmatch</code> in a couple more places by <a href="https://github.com/henryiii"><code>@henryiii</code></a> in <a href="https://redirect.github.com/pypa/packaging/pull/992">pypa/packaging#992</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pypa/packaging/blob/main/CHANGELOG.rst">packaging's changelog</a>.</em></p> <blockquote> <p>26.0 - 2026-01-20</p> <pre><code> Features: <ul> <li>PEP 751: support pylock (:pull:<code>900</code>)</li> <li>PEP 794: import name metadata (:pull:<code>948</code>)</li> <li>Support for writing metadata to a file (:pull:<code>846</code>)</li> <li>Support <code>__replace__</code> on Version (:pull:<code>1003</code>)</li> <li>Support positional pattern matching for <code>Version</code> and <code>SpecifierSet</code> (:pull:<code>1004</code>)</li> </ul> <p>Behavior adaptations:</p> <ul> <li>PEP 440 handling of prereleases for <code>Specifier.contains</code>, <code>SpecifierSet.contains</code>, and <code>SpecifierSet.filter</code> (:pull:<code>897</code>)</li> <li>Handle PEP 440 edge case in <code>SpecifierSet.filter</code> (:pull:<code>942</code>)</li> <li>Adjust arbitrary equality intersection preservation in <code>SpecifierSet</code> (:pull:<code>951</code>)</li> <li>Return <code>False</code> instead of raising for <code>.contains</code> with invalid version (:pull:<code>932</code>)</li> <li>Support arbitrary equality on arbitrary strings for <code>Specifier</code> and <code>SpecifierSet</code>'s <code>filter</code> and <code>contains</code> method. (:pull:<code>954</code>)</li> <li>Only try to parse as <code>Version</code> on certain marker keys, return <code>False</code> on unequal ordered comparisons (:pull:<code>939</code>)</li> </ul> <p>Fixes:</p> <ul> <li>Update <code>_hash</code> when unpickling <code>Tag()</code> (:pull:<code>860</code>)</li> <li>Correct comment and simplify implicit prerelease handling in <code>Specifier.prereleases</code> (:pull:<code>896</code>)</li> <li>Use explicit <code>_GLibCVersion</code> <code>NamedTuple</code> in <code>_manylinux</code> (:pull:<code>868</code>)</li> <li>Detect invalid license expressions containing <code>()</code> (:pull:<code>879</code>)</li> <li>Correct regex for metadata <code>'name'</code> format (:pull:<code>925</code>)</li> <li>Improve the message around expecting a semicolon (:pull:<code>833</code>)</li> <li>Support nested parens in license expressions (:pull:<code>931</code>)</li> <li>Add space before at symbol in <code>Requirements</code> string (:pull:<code>953</code>)</li> <li>A root logger use found, use a <code>packaging</code> logger instead (:pull:<code>965</code>)</li> <li>Better support for subclassing <code>Marker</code> and <code>Requirement</code> (:pull:<code>1022</code>)</li> <li>Normalize all extras, not just if it comes first (:pull:<code>1024</code>)</li> <li>Don't produce a broken repr if <code>Marker</code> fails to construct (:pull:<code>1033</code>)</li> </ul> <p>Performance:</p> <ul> <li>Avoid recompiling regexes in the tokenizer for a 3x speedup (:pull:<code>1019</code>)</li> <li>Improve performance in <code>_manylinux.py</code> (:pull:<code>869</code>)</li> <li>Minor cleanups to <code>Version</code> (:pull:<code>913</code>)</li> <li>Skip redundant creation of <code>Version</code>'s in specifier comparison (:pull:<code>986</code>)</li> <li>Cache the <code>Specifier</code>'s <code>Version</code> (:pull:<code>985</code>)</li> <li>Make <code>Version</code> a little faster (:pull:<code>987</code>)</li> <li>Minor <code>Version</code> regex cleanup (:pull:<code>990</code>)</li> <li>Faster regex on Python 3.11.5+ for <code>Version</code> (:pull:<code>988</code>, :pull:<code>1055</code>)</li> <li>Lazily calculate <code>_key</code> in <code>Version</code> (:pull:<code>989</code>, :pull:<code>1048</code>)</li> <li>Faster <code>canonicalize_version</code> (:pull:<code>993</code>)</li> <li>Use <code>re.fullmatch</code> in a couple more places (:pull:<code>992</code>, :pull:<code>1029</code>)</li> <li>Use <code>map</code> instead of generator (:pull:<code>996</code>)</li> <li>Deprecate <code>._version</code> (<code>_Version</code>, a <code>NamedTuple</code>) (:pull:<code>995</code>, :pull:<code>1062</code>)<br /> </tr></table><br /> </code></pre></li> </ul> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/pypa/packaging/commit/3b77a26f5a27473ad3b08194d773f325d018a2d0"><code>3b77a26</code></a> Bump for release</li> <li><a href="https://github.com/pypa/packaging/commit/31371cce593d2bde0dd8c436ecfb7d53cb91cfb6"><code>31371cc</code></a> docs: prepare for 26.0 final (<a href="https://redirect.github.com/pypa/packaging/issues/1063">#1063</a>)</li> <li><a href="https://github.com/pypa/packaging/commit/9627a8821f09e4c55cd6e9daadb617b67c4741c2"><code>9627a88</code></a> perf: dual replace (<a href="https://redirect.github.com/pypa/packaging/issues/1064">#1064</a>)</li> <li><a href="https://github.com/pypa/packaging/commit/d5398b8bc19f3fad7b035ceb83023caf06d6e2da"><code>d5398b8</code></a> fix: restore ._version as a compat shim (<a href="https://redirect.github.com/pypa/packaging/issues/1062">#1062</a>)</li> <li><a href="https://github.com/pypa/packaging/commit/3a7b600a126d237b2ad3cd7e25d2cb5c176276af"><code>3a7b600</code></a> Bump for development</li> <li><a href="https://github.com/pypa/packaging/commit/d4eefdccf992e963c48011875301d93df6a7f2cc"><code>d4eefdc</code></a> Bump for release</li> <li><a href="https://github.com/pypa/packaging/commit/46189124fb43d8989d370902c80ab156eb83a45d"><code>4618912</code></a> docs: prepare for 26.0rc3 (<a href="https://redirect.github.com/pypa/packaging/issues/1060">#1060</a>)</li> <li><a href="https://github.com/pypa/packaging/commit/0cf1b41b4b321ae08cad7d3e49cfaff5578fe813"><code>0cf1b41</code></a> ci: test on first public release of CPythons (<a href="https://redirect.github.com/pypa/packaging/issues/1056">#1056</a>)</li> <li><a href="https://github.com/pypa/packaging/commit/716beb1c0a5d7a398bf57fbd80bc2501811e616b"><code>716beb1</code></a> perf: 10% faster stripping zeros (<a href="https://redirect.github.com/pypa/packaging/issues/1058">#1058</a>)</li> <li><a href="https://github.com/pypa/packaging/commit/350a2306700b738f487f251efa278f532b263dee"><code>350a230</code></a> fix: support CPython 3.11.0-3.11.4 and older PyPy3.11 (<a href="https://redirect.github.com/pypa/packaging/issues/1055">#1055</a>)</li> <li>Additional commits viewable in <a href="https://github.com/pypa/packaging/compare/25.0...26.0">compare view</a></li> </ul> </details> <br /> Updates `click` to 8.3.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/pallets/click/releases">click's releases</a>.</em></p> <blockquote> <h2>8.3.1</h2> <p>This is the Click 8.3.1 fix release, which fixes bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.</p> <p>PyPI: <a href="https://pypi.org/project/click/8.3.1/">https://pypi.org/project/click/8.3.1/</a> Changes: <a href="https://click.palletsprojects.com/page/changes/#version-8-3-1">https://click.palletsprojects.com/page/changes/#version-8-3-1</a> Milestone: <a href="https://github.com/pallets/click/milestone/28">https://github.com/pallets/click/milestone/28</a></p> <ul> <li>Don't discard pager arguments by correctly using <code>subprocess.Popen</code>. <a href="https://redirect.github.com/pallets/click/issues/3039">#3039</a> <a href="https://redirect.github.com/pallets/click/issues/3055">#3055</a></li> <li>Replace <code>Sentinel.UNSET</code> default values by <code>None</code> as they're passed through the <code>Context.invoke()</code> method. <a href="https://redirect.github.com/pallets/click/issues/3066">#3066</a> <a href="https://redirect.github.com/pallets/click/issues/3065">#3065</a> <a href="https://redirect.github.com/pallets/click/issues/3068">#3068</a></li> <li>Fix conversion of <code>Sentinel.UNSET</code> happening too early, which caused incorrect behavior for multiple parameters using the same name. <a href="https://redirect.github.com/pallets/click/issues/3071">#3071</a> <a href="https://redirect.github.com/pallets/click/issues/3079">#3079</a></li> <li>Fix rendering when <code>prompt</code> and <code>confirm</code> parameter <code>prompt_suffix</code> is empty. <a href="https://redirect.github.com/pallets/click/issues/3019">#3019</a> <a href="https://redirect.github.com/pallets/click/issues/3021">#3021</a></li> <li>When <code>Sentinel.UNSET</code> is found during parsing, it will skip calls to <code>type_cast_value</code>. <a href="https://redirect.github.com/pallets/click/issues/3069">#3069</a> <a href="https://redirect.github.com/pallets/click/issues/3090">#3090</a></li> <li>Hide <code>Sentinel.UNSET</code> values as <code>None</code> when looking up for other parameters through the context inside parameter callbacks. <a href="https://redirect.github.com/pallets/click/issues/3136">#3136</a> <a href="https://redirect.github.com/pallets/click/issues/3137">#3137</a></li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pallets/click/blob/main/CHANGES.rst">click's changelog</a>.</em></p> <blockquote> <h2>Version 8.3.1</h2> <p>Released 2025-11-15</p> <ul> <li>Don't discard pager arguments by correctly using <code>subprocess.Popen</code>. :issue:<code>3039</code> :pr:<code>3055</code></li> <li>Replace <code>Sentinel.UNSET</code> default values by <code>None</code> as they're passed through the <code>Context.invoke()</code> method. :issue:<code>3066</code> :issue:<code>3065</code> :pr:<code>3068</code></li> <li>Fix conversion of <code>Sentinel.UNSET</code> happening too early, which caused incorrect behavior for multiple parameters using the same name. :issue:<code>3071</code> :pr:<code>3079</code></li> <li>Hide <code>Sentinel.UNSET</code> values as <code>None</code> when looking up for other parameters through the context inside parameter callbacks. :issue:<code>3136</code> :pr:<code>3137</code></li> <li>Fix rendering when <code>prompt</code> and <code>confirm</code> parameter <code>prompt_suffix</code> is empty. :issue:<code>3019</code> :pr:<code>3021</code></li> <li>When <code>Sentinel.UNSET</code> is found during parsing, it will skip calls to <code>type_cast_value</code>. :issue:<code>3069</code> :pr:<code>3090</code></li> </ul> <h2>Version 8.3.0</h2> <p>Released 2025-09-17</p> <ul> <li> <p><strong>Improved flag option handling</strong>: Reworked the relationship between <code>flag_value</code> and <code>default</code> parameters for better consistency:</p> <ul> <li>The <code>default</code> parameter value is now preserved as-is and passed directly to CLI functions (no more unexpected transformations)</li> <li>Exception: flag options with <code>default=True</code> maintain backward compatibility by defaulting to their <code>flag_value</code></li> <li>The <code>default</code> parameter can now be any type (<code>bool</code>, <code>None</code>, etc.)</li> <li>Fixes inconsistencies reported in: :issue:<code>1992</code> :issue:<code>2514</code> :issue:<code>2610</code> :issue:<code>3024</code> :pr:<code>3030</code></li> </ul> </li> <li> <p>Allow <code>default</code> to be set on <code>Argument</code> for <code>nargs = -1</code>. :issue:<code>2164</code> :pr:<code>3030</code></p> </li> <li> <p>Show correct auto complete value for <code>nargs</code> option in combination with flag option :issue:<code>2813</code></p> </li> <li> <p>Fix handling of quoted and escaped parameters in Fish autocompletion. :issue:<code>2995</code> :pr:<code>3013</code></p> </li> <li> <p>Lazily import <code>shutil</code>. :pr:<code>3023</code></p> </li> <li> <p>Properly forward exception information to resources registered with <code>click.core.Context.with_resource()</code>. :issue:<code>2447</code> :pr:<code>3058</code></p> </li> <li> <p>Fix regression related to EOF handling in <code>CliRunner</code>. :issue:<code>2939</code> :pr:<code>2940</code></p> </li> </ul> <h2>Version 8.2.2</h2> <p>Released 2025-07-31</p> <ul> <li>Fix reconciliation of <code>default</code>, <code>flag_value</code> and ... _Description has been truncated_ -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
