Skip to content

MPT-20330: Added endpoints and e2e tests for program terms variants#314

Merged
robcsegal merged 1 commit into
mainfrom
MPT-20330-add-endpoints-and-e-2-e-tests-for-program-terms-and-conditions-variant
Apr 20, 2026
Merged

MPT-20330: Added endpoints and e2e tests for program terms variants#314
robcsegal merged 1 commit into
mainfrom
MPT-20330-add-endpoints-and-e-2-e-tests-for-program-terms-and-conditions-variant

Conversation

@robcsegal

@robcsegal robcsegal commented Apr 20, 2026

Copy link
Copy Markdown
Contributor

This pull request introduces support for managing program term variants in the API client, including both synchronous and asynchronous services, comprehensive unit and end-to-end tests, and updates to test configurations. The changes add the ability to create, update, delete, retrieve, publish, and unpublish term variants, as well as to handle file uploads and online asset URLs.

Program Term Variant Service Implementation:

  • Added TermVariant model and both TermVariantService (sync) and AsyncTermVariantService (async) classes in programs_terms_variant.py, supporting CRUD, file upload/download, and publish/unpublish operations for program term variants.
  • Integrated the new variant services into TermService and AsyncTermService via a .variants(term_id) method, enabling access to term variants from the term services. [1] [2]

Testing Enhancements:

  • Added comprehensive unit tests for the new variant services and model in test_programs_terms_variant.py, verifying endpoints, methods, and model fields.
  • Introduced end-to-end test fixtures and test cases for both synchronous and asynchronous term variant operations, covering creation (by file and by URL), update, delete, retrieval, filtering, and publish/unpublish flows. [1] [2] [3]

Configuration and Integration:

  • Updated e2e_config.test.json to include a program.terms.variant.id for use in E2E tests.
  • Added imports and property tests for the new services in test_programs_terms.py, ensuring correct service instantiation and endpoint parameter handling. [1] [2]

These changes collectively provide a robust foundation for managing program term variants through the API client, with thorough test coverage and seamless integration into existing service structures.

Closes MPT-20330

  • Added TermVariant model representing term-variant metadata (name, type, language code, description, status, asset URL, file info, program_terms_and_conditions, audit)
  • Implemented TermVariantService (sync) and AsyncTermVariantService (async) with full CRUD, file upload/download, online asset (URL) handling, and publish/unpublish operations
  • Exposed variant services via .variants(term_id) on TermService and AsyncTermService
  • Added unit tests for service instantiation, endpoint routing, method availability, and model serialization/behavior
  • Added E2E tests (sync and async) covering create (file and URL), update, delete, retrieve, filter/select, and publish/unpublish flows; included fixtures and teardown handling
  • Updated e2e_config.test.json to include program.terms.variant.id for E2E tests

@robcsegal robcsegal requested a review from a team as a code owner April 20, 2026 15:13
@robcsegal robcsegal requested review from albertsola and d3rky April 20, 2026 15:13
@coderabbitai

coderabbitai Bot commented Apr 20, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 251ffd46-ea98-4c75-860f-f14a9e1f1ec0

📥 Commits

Reviewing files that changed from the base of the PR and between f763bef and 4fde121.

📒 Files selected for processing (8)
  • e2e_config.test.json
  • mpt_api_client/resources/program/programs_terms.py
  • mpt_api_client/resources/program/programs_terms_variant.py
  • tests/e2e/program/program/term/variant/conftest.py
  • tests/e2e/program/program/term/variant/test_async_variant.py
  • tests/e2e/program/program/term/variant/test_sync_variant.py
  • tests/unit/resources/program/test_programs_terms.py
  • tests/unit/resources/program/test_programs_terms_variant.py
✅ Files skipped from review due to trivial changes (3)
  • e2e_config.test.json
  • tests/e2e/program/program/term/variant/conftest.py
  • tests/unit/resources/program/test_programs_terms_variant.py
🚧 Files skipped from review as they are similar to previous changes (3)
  • mpt_api_client/resources/program/programs_terms.py
  • tests/unit/resources/program/test_programs_terms.py
  • mpt_api_client/resources/program/programs_terms_variant.py

📝 Walkthrough

Walkthrough

Adds TermVariant model and sync/async services, exposes .variants(term_id) on TermService/AsyncTermService, updates E2E config with a variant id, and introduces unit and E2E tests covering variant lifecycle and publish/unpublish behavior.

Changes

Cohort / File(s) Summary
Test Configuration
e2e_config.test.json
Added program.terms.variant.id with value PTV-9643-3741-0001-0001 (adjusted JSON to include new field).
Term Service Extension
mpt_api_client/resources/program/programs_terms.py
Added variants(term_id) accessor methods to TermService and AsyncTermService to return variant service instances with correct http_client and endpoint_params.
Variant Resource Module
mpt_api_client/resources/program/programs_terms_variant.py
Introduced TermVariant model, TermVariantServiceConfig, and both TermVariantService and AsyncTermVariantService (collection, file upload/download, modify, publish/unpublish behavior).
E2E Test Fixtures
tests/e2e/program/program/term/variant/conftest.py
Added fixtures: variant_id (reads new config key), invalid_variant_id, and variant_data_factory for generating payloads.
E2E Variant Tests
tests/e2e/program/program/term/variant/test_async_variant.py, tests/e2e/program/program/term/variant/test_sync_variant.py
Added flaky E2E test suites (async & sync) covering create (file and URL), update, delete, get, RQL filter/select, and publish/unpublish flows with teardown handling.
Unit Tests
tests/unit/resources/program/test_programs_terms.py, tests/unit/resources/program/test_programs_terms_variant.py
Added unit tests verifying variants() returns correct service type and endpoint params, variant service paths and methods, and TermVariant model serialization and nested field handling.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Jira Issue Key In Title ✅ Passed PR title contains the Jira issue key MPT-20330 in the required MPT-XXXX format.
Test Coverage Required ✅ Passed The PR modifies 3 code/config files and includes comprehensive changes across 5 test files, satisfying the test file requirement.
Single Commit Required ✅ Passed The pull request contains exactly one commit (4fde121 Added endpoints and e2e tests for program terms variants), meeting the requirement for a single commit.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@robcsegal robcsegal force-pushed the MPT-20330-add-endpoints-and-e-2-e-tests-for-program-terms-and-conditions-variant branch from f763bef to 4fde121 Compare April 20, 2026 15:22
@sonarqubecloud

Copy link
Copy Markdown

@robcsegal robcsegal merged commit 3acc285 into main Apr 20, 2026
4 checks passed
@robcsegal robcsegal deleted the MPT-20330-add-endpoints-and-e-2-e-tests-for-program-terms-and-conditions-variant branch April 20, 2026 15:35
d3rky added a commit that referenced this pull request May 20, 2026
Bumps the python-development group with 4 updates:
[mypy](https://github.com/python/mypy),
[pytest-rerunfailures](https://github.com/pytest-dev/pytest-rerunfailures),
[ruff](https://github.com/astral-sh/ruff) and
[types-python-dateutil](https://github.com/python/typeshed).

Updates `mypy` from 2.0.0 to 2.1.0
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/python/mypy/blob/master/CHANGELOG.md">mypy's
changelog</a>.</em></p>
<blockquote>
<h1>Mypy Release Notes</h1>
<h2>Next Release</h2>
<h2>Mypy 2.1</h2>
<p>We’ve just uploaded mypy 2.1.0 to the Python Package Index (<a
href="https://pypi.org/project/mypy/">PyPI</a>).
Mypy is a static type checker for Python. This release includes new
features, performance
improvements and bug fixes. You can install it as follows:</p>
<pre><code>python3 -m pip install -U mypy
</code></pre>
<p>You can read the full documentation for this release on <a
href="http://mypy.readthedocs.io">Read the Docs</a>.</p>
<h3>librt.vecs: Fast Growable Array Type for Mypyc</h3>
<p>The new <code>librt.vecs</code> module provides an efficient growable
array type <code>vec</code> that is
optimized for mypyc use. It provides fast, packed arrays with integer
and floating point
value types, which can be <strong>several times faster</strong> than
<code>list</code>, and tens of times faster
than <code>array.array</code> in code compiled using mypyc. It also
supports nested <code>vec</code> objects and
non-value-type items, such as <code>vec[vec[str]]</code>.</p>
<p>Refer to the <a
href="https://mypyc.readthedocs.io/en/latest/librt_vecs.html">documentation</a>
for
the details.</p>
<p>Contributed by Jukka Lehtosalo.</p>
<h3>librt.random: Fast Pseudo-Random Number Generation</h3>
<p>The new <code>librt.random</code> module provides fast pseudo-random
number generation that is
optimized for code compiled using mypyc. It can be 3x to 10x faster than
the stdlib
<code>random</code> module in compiled code.</p>
<p>Refer to the <a
href="https://mypyc.readthedocs.io/en/latest/librt_random.html">documentation</a>
for
the details.</p>
<p>Contributed by Jukka Lehtosalo (PR <a
href="https://redirect.github.com/python/mypy/pull/21433">21433</a>).</p>
<h3>Mypyc Improvements</h3>
<ul>
<li>Make compilation order with multiple files consistent (Piotr
Sawicki, PR <a
href="https://redirect.github.com/python/mypy/pull/21419">21419</a>)</li>
<li>Fix crash on accessing <code>StopAsyncIteration</code> (Piotr
Sawicki, PR <a
href="https://redirect.github.com/python/mypy/pull/21406">21406</a>)</li>
<li>Fix incremental compilation with <code>separate</code> flag
(Vaggelis Danias, PR <a
href="https://redirect.github.com/python/mypy/pull/21299">21299</a>)</li>
</ul>
<h3>Fixes to Crashes</h3>
<ul>
<li>Fix crash on partial type with <code>--allow-redefinition</code> and
<code>global</code> declaration (Jukka Lehtosalo, PR <a
href="https://redirect.github.com/python/mypy/pull/21428">21428</a>)</li>
<li>Fix broken awaitable generator patching (Ivan Levkivskyi, PR <a
href="https://redirect.github.com/python/mypy/pull/21435">21435</a>)</li>
</ul>
<h3>Changes to Messages</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/python/mypy/commit/c1c336d7e34eb313080c79b156518c58d27c7234"><code>c1c336d</code></a>
Remove +dev from version</li>
<li><a
href="https://github.com/python/mypy/commit/74df14b7cbf08140236aa45bbb7f42219b0b1df7"><code>74df14b</code></a>
Add changelog for mypy 2.1 (<a
href="https://redirect.github.com/python/mypy/issues/21464">#21464</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/022d9bc96f86c40f338a5cf150f1806cc8f300ff"><code>022d9bc</code></a>
Revert &quot;TypeForm: Enable by default (<a
href="https://redirect.github.com/python/mypy/issues/21262">#21262</a>)&quot;</li>
<li><a
href="https://github.com/python/mypy/commit/8826288214f1cb31496e610667481221e025359c"><code>8826288</code></a>
[mypyc] Document librt.random (<a
href="https://redirect.github.com/python/mypy/issues/21463">#21463</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/3f4067b699dbe52d08e42ef3b3ebfdebdc06bd96"><code>3f4067b</code></a>
Bump librt version to 0.11.0 (<a
href="https://redirect.github.com/python/mypy/issues/21458">#21458</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/2b1eb58a250c5f1eb4ef5fb1f312ff528c5a1d4e"><code>2b1eb58</code></a>
[mypyc] Enable incremental self-compilation (<a
href="https://redirect.github.com/python/mypy/issues/21369">#21369</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/8152f4af3f6c03beaf2660026240f0fdce7feecc"><code>8152f4a</code></a>
Respect file config comments for stale modules (<a
href="https://redirect.github.com/python/mypy/issues/21444">#21444</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/116d60bdd3fdfe8d97c6afe99370910db56f1b92"><code>116d60b</code></a>
Fix nondeterminism from nonassociativity of overload joins (<a
href="https://redirect.github.com/python/mypy/issues/21455">#21455</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/6c4af8e42110cea3f84bc02add2ca7b89c268210"><code>6c4af8e</code></a>
Fix function call message change for small number of args (<a
href="https://redirect.github.com/python/mypy/issues/21432">#21432</a>)</li>
<li><a
href="https://github.com/python/mypy/commit/4b8fdcaf24032592510e8f15421fb32d82a71800"><code>4b8fdca</code></a>
[mypyc] Add librt.random module (<a
href="https://redirect.github.com/python/mypy/issues/21433">#21433</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/python/mypy/compare/v2.0.0...v2.1.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `pytest-rerunfailures` from 16.1 to 16.2
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pytest-dev/pytest-rerunfailures/blob/master/CHANGES.rst">pytest-rerunfailures's
changelog</a>.</em></p>
<blockquote>
<h2>16.2 (2026-05-13)</h2>
<p>Breaking changes
++++++++++++++++</p>
<ul>
<li>Drop support for pytest 8.0. Minimum pytest version is now 8.1.</li>
</ul>
<p>Features
++++++++</p>
<ul>
<li>Add support for pytest 9.0.</li>
</ul>
<p>Bug fixes
+++++++++</p>
<ul>
<li>
<p>Fix missing teardown for session and module scoped fixtures when
fixture teardown fails.
Fixes
<code>[#314](pytest-dev/pytest-rerunfailures#314)
&lt;https://github.com/pytest-dev/pytest-rerunfailures/issues/314&gt;</code>_.</p>
</li>
<li>
<p>Clear fixture finalizers when removing cached results from failed
fixtures
to fix compatibility with pytest &gt;= 9, which asserts that
<code>_finalizers</code> is
empty before executing a fixture.
Fixes
<code>[#323](pytest-dev/pytest-rerunfailures#323)
&lt;https://github.com/pytest-dev/pytest-rerunfailures/issues/323&gt;</code>_.</p>
</li>
<li>
<p>Accept exception classes (not only regex strings) in the
<code>only_rerun</code> and
<code>rerun_except</code> marker keyword arguments instead of crashing
with an
internal error.
Fixes
<code>[#275](pytest-dev/pytest-rerunfailures#275)
&lt;https://github.com/pytest-dev/pytest-rerunfailures/issues/275&gt;</code>_.</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/88a84d8471219ae517dfd3752a181b22e51a2b8c"><code>88a84d8</code></a>
Preparing release 16.2</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/5e0ad6a3080d778f2d3de8975aceafed0c843b12"><code>5e0ad6a</code></a>
fix: accept exception classes in only_rerun and rerun_except markers (<a
href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/327">#327</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/928aa2bb654b18157e6614c15f22091e9997d540"><code>928aa2b</code></a>
Update minimum pytest version to 8.1 and add support for pytest 9.0 (<a
href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/325">#325</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/b53ef720219427c569bddee7e37d92cc3423e2c9"><code>b53ef72</code></a>
Fix support for pytest-main. (<a
href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/324">#324</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/d9ef70e5451f604dcc764861f4b0a65dc9dfd202"><code>d9ef70e</code></a>
Preserve session and module teardown when fixture teardown fails (<a
href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/319">#319</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/a22edc3de88eeb17f3dcdf482b3f5a13ea9af874"><code>a22edc3</code></a>
Bump actions/cache from 4 to 5 in the actions group (<a
href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/317">#317</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/365dc54ba3069f55a870cda2c3e1e3c33c68f326"><code>365dc54</code></a>
Bump actions/checkout from 5 to 6 in the actions group (<a
href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/316">#316</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/a484d569b55875c827f091c5f17b9087ab9169d9"><code>a484d56</code></a>
Update to current versions of pre-commit hooks. (<a
href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/312">#312</a>)</li>
<li><a
href="https://github.com/pytest-dev/pytest-rerunfailures/commit/3447ea8684e5b74656f0a2d6b3de34b046bab0ce"><code>3447ea8</code></a>
Back to development: 16.2</li>
<li>See full diff in <a
href="https://github.com/pytest-dev/pytest-rerunfailures/compare/16.1...16.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `ruff` from 0.15.12 to 0.15.13
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ruff/releases">ruff's
releases</a>.</em></p>
<blockquote>
<h2>0.15.13</h2>
<h2>Release Notes</h2>
<p>Released on 2026-05-14.</p>
<h3>Preview features</h3>
<ul>
<li>Add a rule to flag lazy imports that are eagerly evaluated (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25016">#25016</a>)</li>
<li>[<code>pylint</code>] Standardize diagnostic message
(<code>PLR0914</code>, <code>PLR0917</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24996">#24996</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Fix <code>F811</code> false positive for class methods (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24933">#24933</a>)</li>
<li>Fix setting selection for multi-folder workspace (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24819">#24819</a>)</li>
<li>[<code>eradicate</code>] Fix false positive for lines with leading
whitespace (<code>ERA001</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25122">#25122</a>)</li>
<li>[<code>flake8-pyi</code>] Fix false positive for f-string debug
specifier (<code>PYI016</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24098">#24098</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>Always include panic payload in panic diagnostic message (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24873">#24873</a>)</li>
<li>Restrict <code>PYI034</code> for in-place operations to enclosing
class (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24511">#24511</a>)</li>
<li>Improve error message for parameters that are declared
<code>global</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24902">#24902</a>)</li>
<li>Update known stdlib (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25103">#25103</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>[<code>isort</code>] Avoid constructing <code>glob::Pattern</code>s
for literal known modules (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25123">#25123</a>)</li>
</ul>
<h3>CLI</h3>
<ul>
<li>Add TOML examples to <code>--config</code> help text (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25013">#25013</a>)</li>
<li>Colorize ruff check 'All checks passed' (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25085">#25085</a>)</li>
</ul>
<h3>Configuration</h3>
<ul>
<li>Increase max allowed value of <code>line-length</code> setting (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24962">#24962</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Add <code>D203</code> to rules that conflict with the formatter (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25044">#25044</a>)</li>
<li>Clarify <code>COM819</code> and formatter interaction (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25045">#25045</a>)</li>
<li>Clarify that <code>NotImplemented</code> is a value, not an
exception (<code>F901</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25054">#25054</a>)</li>
<li>Update number of lint rules supported (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24942">#24942</a>)</li>
</ul>
<h3>Other changes</h3>
<ul>
<li>Simplify the playground's markdown template (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24924">#24924</a>)</li>
</ul>
<h3>Contributors</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md">ruff's
changelog</a>.</em></p>
<blockquote>
<h2>0.15.13</h2>
<p>Released on 2026-05-14.</p>
<h3>Preview features</h3>
<ul>
<li>Add a rule to flag lazy imports that are eagerly evaluated (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25016">#25016</a>)</li>
<li>[<code>pylint</code>] Standardize diagnostic message
(<code>PLR0914</code>, <code>PLR0917</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24996">#24996</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Fix <code>F811</code> false positive for class methods (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24933">#24933</a>)</li>
<li>Fix setting selection for multi-folder workspace (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24819">#24819</a>)</li>
<li>[<code>eradicate</code>] Fix false positive for lines with leading
whitespace (<code>ERA001</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25122">#25122</a>)</li>
<li>[<code>flake8-pyi</code>] Fix false positive for f-string debug
specifier (<code>PYI016</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24098">#24098</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>Always include panic payload in panic diagnostic message (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24873">#24873</a>)</li>
<li>Restrict <code>PYI034</code> for in-place operations to enclosing
class (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24511">#24511</a>)</li>
<li>Improve error message for parameters that are declared
<code>global</code> (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24902">#24902</a>)</li>
<li>Update known stdlib (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25103">#25103</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>[<code>isort</code>] Avoid constructing <code>glob::Pattern</code>s
for literal known modules (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25123">#25123</a>)</li>
</ul>
<h3>CLI</h3>
<ul>
<li>Add TOML examples to <code>--config</code> help text (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25013">#25013</a>)</li>
<li>Colorize ruff check 'All checks passed' (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25085">#25085</a>)</li>
</ul>
<h3>Configuration</h3>
<ul>
<li>Increase max allowed value of <code>line-length</code> setting (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24962">#24962</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Add <code>D203</code> to rules that conflict with the formatter (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25044">#25044</a>)</li>
<li>Clarify <code>COM819</code> and formatter interaction (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25045">#25045</a>)</li>
<li>Clarify that <code>NotImplemented</code> is a value, not an
exception (<code>F901</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25054">#25054</a>)</li>
<li>Update number of lint rules supported (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24942">#24942</a>)</li>
</ul>
<h3>Other changes</h3>
<ul>
<li>Simplify the playground's markdown template (<a
href="https://redirect.github.com/astral-sh/ruff/pull/24924">#24924</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/MichaReiser"><code>@​MichaReiser</code></a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/astral-sh/ruff/commit/2afb467ce397e4a89c13a0a814c62cfecb0e9e49"><code>2afb467</code></a>
Bump 0.15.13 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25157">#25157</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/300879600fa3af7cde1e675c63de6ad9d0797d1b"><code>3008796</code></a>
[ty] classify TypeVar semantic tokens as type parameters (<a
href="https://redirect.github.com/astral-sh/ruff/issues/24891">#24891</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/79470e31877acb6074f3bbff2a49e508822ae4e8"><code>79470e3</code></a>
[<code>isort</code>] Avoid constructing <code>glob::Pattern</code>s for
literal known modules (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25123">#25123</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/2522549901d50f18775999f0fb802b19229417f0"><code>2522549</code></a>
Remove shellcheck from prek (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25154">#25154</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/7db7170020f539d6d2bc01dbd0b0c09fab91dc06"><code>7db7170</code></a>
[ty] Support TypedDict key completions in incomplete, anonymous contexts
(<a
href="https://redirect.github.com/astral-sh/ruff/issues/25">#25</a>...</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/bb3dd535f1c5a83e2e56ac93a771fadbeeceebd0"><code>bb3dd53</code></a>
[ty] Run full iteration analysis on narrowed typevars (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25143">#25143</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/828cdb7732efcb16a53f4ee5f011cf653b834d1a"><code>828cdb7</code></a>
[ty] Isolate file-watching test environment (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25151">#25151</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/89e1d8670ea4d3af60c8143ee552dc750200718d"><code>89e1d86</code></a>
[ty] Preserve TypedDict keys through dict unpacking (<a
href="https://redirect.github.com/astral-sh/ruff/issues/24523">#24523</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/86f3064d6fffa5697d174f26b840bd6857b381da"><code>86f3064</code></a>
[ty] Avoid accessing <code>args[0]</code> for <code>static_assert</code>
(<a
href="https://redirect.github.com/astral-sh/ruff/issues/25149">#25149</a>)</li>
<li><a
href="https://github.com/astral-sh/ruff/commit/ed819f947dc27e36eac8bb3134153c4668d76a3a"><code>ed819f9</code></a>
[ty] Treat custom enum <code>__new__</code> values as dynamic (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25136">#25136</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.15.12...0.15.13">compare
view</a></li>
</ul>
</details>
<br />

Updates `types-python-dateutil` from 2.9.0.20260508 to 2.9.0.20260518
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/python/typeshed/commits">compare view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants