[MPT-16319] Added commerce orders assets endpoints#156
Conversation
WalkthroughAdds a new OrdersAsset resource: a model and parallel sync/async service implementations, plus Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (4)
🚧 Files skipped from review as they are similar to previous changes (2)
🧰 Additional context used🧬 Code graph analysis (2)mpt_api_client/resources/commerce/orders.py (2)
mpt_api_client/resources/commerce/orders_asset.py (5)
🪛 Ruff (0.14.8)mpt_api_client/resources/commerce/orders_asset.py23-23: Unused Remove unused (RUF100) 48-48: Unused Remove unused (RUF100) ⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
🔇 Additional comments (3)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
✅ Found Jira issue key in the title: MPT-16319 Tests mirroring check (created files only)
|
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
tests/unit/resources/commerce/test_orders_asset.py (1)
49-82: Optionally assert respx route invocation in render testsThe render tests verify returned markdown content, but they don’t assert that the mocked
respx.getroute was actually hit. You could capture the route into a variable and assertcall_count == 1(similar to other tests) to make the tests more robust against future refactors.- with respx.mock: - respx.get( - "https://api.example.com/public/v1/commerce/orders/ORD-123/assets/ASSET-456/render" - ).mock( + with respx.mock: + mock_route = respx.get( + "https://api.example.com/public/v1/commerce/orders/ORD-123/assets/ASSET-456/render" + ).mock( return_value=httpx.Response( @@ - result = asset_service.render("ORD-123", "ASSET-456") - - assert result == template_content + result = asset_service.render("ORD-123", "ASSET-456") + + assert mock_route.call_count == 1 + assert result == template_content(Same pattern could be applied to
test_async_render.)mpt_api_client/resources/commerce/orders_asset.py (1)
23-28: Clean up unused# noqa: WPS215directivesRuff flags these
# noqa: WPS215comments as unknown/unused (RUF100). Unless you still run a separate linter that depends onWPS215, it’s simpler to drop them from both service classes.-class OrdersAssetService( # noqa: WPS215 +class OrdersAssetService( @@ -class AsyncOrdersAssetService( # noqa: WPS215 +class AsyncOrdersAssetService(Also applies to: 49-55
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
mpt_api_client/resources/commerce/orders.py(3 hunks)mpt_api_client/resources/commerce/orders_asset.py(1 hunks)tests/unit/resources/commerce/test_orders.py(2 hunks)tests/unit/resources/commerce/test_orders_asset.py(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
mpt_api_client/resources/commerce/orders_asset.py (4)
mpt_api_client/http/async_service.py (1)
AsyncService(12-80)mpt_api_client/http/service.py (1)
Service(12-80)mpt_api_client/models/model.py (1)
Model(65-125)mpt_api_client/http/types.py (1)
text(36-38)
tests/unit/resources/commerce/test_orders_asset.py (4)
mpt_api_client/resources/commerce/orders_asset.py (3)
OrdersAssetService(23-46)render(31-46)render(57-72)tests/unit/conftest.py (2)
http_client(17-18)async_http_client(22-23)mpt_api_client/http/base_service.py (1)
path(28-30)mpt_api_client/http/types.py (1)
Response(27-42)
🪛 Ruff (0.14.8)
mpt_api_client/resources/commerce/orders_asset.py
23-23: Unused noqa directive (unknown: WPS215)
Remove unused noqa directive
(RUF100)
31-31: Unused method argument: order_id
(ARG002)
49-49: Unused noqa directive (unknown: WPS215)
Remove unused noqa directive
(RUF100)
57-57: Unused method argument: order_id
(ARG002)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (8)
mpt_api_client/resources/commerce/orders.py (3)
12-15: Asset service imports wired correctlyImporting
AsyncOrdersAssetServiceandOrdersAssetServicehere cleanly exposes the new assets functionality for both sync and async order services; placement and usage are consistent with existing subscription imports.
122-134: Syncassets()factory mirrors existingsubscriptions()pattern
OrdersService.assets()correctly constructs anOrdersAssetServicewithhttp_clientandendpoint_params={"order_id": order_id}, matching howsubscriptions()scopes child resources to an order.
240-252: Asyncassets()factory is consistent with sync API
AsyncOrdersService.assets()returnsAsyncOrdersAssetServicewith the expectedendpoint_params, giving a symmetric async surface to the syncassets()helper.tests/unit/resources/commerce/test_orders_asset.py (1)
11-47: Service fixtures and basic capability tests look solidThe fixtures, mixin presence checks, and endpoint path assertions correctly validate that both sync and async asset services are scoped to
order_idand expose the expected CRUD+render surface.tests/unit/resources/commerce/test_orders.py (3)
6-9: Asset service imports align with new Orders APIImporting
OrdersAssetServiceandAsyncOrdersAssetServicehere matches the newassets()helpers on the orders services; this keeps tests in sync with the production API surface.
251-258: Syncassets()factory test correctly validates wiring
test_asset_serviceasserts both the returned type andendpoint_params == {"order_id": "ORD-123"}, which is exactly what we want to guarantee fromOrdersService.assets().
260-266: Asyncassets()factory test mirrors the sync coverage
test_async_asset_serviceprovides the same checks for the async variant, ensuringAsyncOrdersService.assets()is wired identically.mpt_api_client/resources/commerce/orders_asset.py (1)
11-21: Model and service config follow existing resource conventions
OrdersAssetplusOrdersAssetServiceConfig(endpoint, model, collection key) are in line with other commerce resources and correctly encode the nested/orders/{order_id}/assetspath.
36a63cd to
3e6f9ff
Compare
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (2)
tests/unit/resources/commerce/test_orders.py (1)
6-9: Assets tests correctly validate service wiringThe new tests exercise
OrdersService.assets()/AsyncOrdersService.assets()as expected, asserting both the concrete service type andendpoint_params={"order_id": "ORD-123"}, which matches the production implementations. This gives good coverage of the new entry points. If you ever want to DRY things up, you could mirror the subscription tests by reusing theorders_service/async_orders_servicefixtures here too, but that’s purely optional.Also applies to: 251-267
mpt_api_client/resources/commerce/orders_asset.py (1)
1-70: OrdersAsset services and render endpoints are wired correctly; consider cleaning upnoqamarkersThe model, config, and sync/async services follow the established pattern in this client: the endpoint template, mixins, and
render()/async render()calls into_resource_do_request(..., "render")are all consistent and should produce the expected/orders/{order_id}/assets/{asset_id}/renderURLs returning markdown text.The only minor clean-up is the
# noqa: WPS215on the two service class definitions: if you’re no longer relying on that rule from your style checker, you can drop those comments to avoid “unused noqa” noise:-class OrdersAssetService( # noqa: WPS215 +class OrdersAssetService( @@ -class AsyncOrdersAssetService( # noqa: WPS215 +class AsyncOrdersAssetService(
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
mpt_api_client/resources/commerce/orders.py(3 hunks)mpt_api_client/resources/commerce/orders_asset.py(1 hunks)tests/unit/resources/commerce/test_orders.py(2 hunks)tests/unit/resources/commerce/test_orders_asset.py(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- tests/unit/resources/commerce/test_orders_asset.py
🧰 Additional context used
🧬 Code graph analysis (2)
tests/unit/resources/commerce/test_orders.py (3)
mpt_api_client/resources/commerce/orders_asset.py (2)
AsyncOrdersAssetService(48-70)OrdersAssetService(23-45)tests/unit/conftest.py (2)
http_client(17-18)async_http_client(22-23)mpt_api_client/resources/commerce/orders.py (2)
assets(122-134)assets(240-252)
mpt_api_client/resources/commerce/orders_asset.py (5)
mpt_api_client/http/async_service.py (1)
AsyncService(12-80)mpt_api_client/http/service.py (1)
Service(12-80)mpt_api_client/http/mixins.py (4)
AsyncCollectionMixin(538-605)AsyncManagedResourceMixin(622-625)CollectionMixin(469-535)ManagedResourceMixin(618-619)mpt_api_client/models/model.py (1)
Model(65-125)mpt_api_client/http/types.py (1)
text(36-38)
🪛 Ruff (0.14.8)
mpt_api_client/resources/commerce/orders_asset.py
23-23: Unused noqa directive (unknown: WPS215)
Remove unused noqa directive
(RUF100)
48-48: Unused noqa directive (unknown: WPS215)
Remove unused noqa directive
(RUF100)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (1)
mpt_api_client/resources/commerce/orders.py (1)
12-15: Assets accessors mirror existing subscriptions pattern and look correctThe sync and async
assets(order_id)methods cleanly constructOrdersAssetService/AsyncOrdersAssetServicewithendpoint_params={"order_id": order_id}, consistent with the subscriptions helpers and theOrdersAssetServiceConfigendpoint template. The imports and type hints line up with the new module. No issues from my side.Also applies to: 122-135, 240-252
3e6f9ff to
8d31267
Compare
|
Bumps the python-development group with 3 updates: [pytest-rerunfailures](https://github.com/pytest-dev/pytest-rerunfailures), [responses](https://github.com/getsentry/responses) and [ruff](https://github.com/astral-sh/ruff). Updates `pytest-rerunfailures` from 16.2 to 16.3 <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.3 (2026-05-22)</h2> <p>Features ++++++++</p> <ul> <li> <p>Add <code>--reruns-mode</code> option (<code>strict</code> or <code>append</code>). With <code>append</code>, marker reruns and the global <code>--reruns</code> / <code>reruns</code> ini setting are summed instead of the marker taking strict priority. Default is <code>strict</code> so existing behaviour is unchanged. Fixes <code>[#321](pytest-dev/pytest-rerunfailures#321) <https://github.com/pytest-dev/pytest-rerunfailures/issues/321></code>_.</p> </li> <li> <p>Add <code>--rerun-show-tracebacks</code> option to display tracebacks from failed attempts that were retried, including tests that eventually passed. The rerun summary section is emitted automatically when the flag is set, so <code>-rR</code> is no longer required to see the tracebacks. Fixes <code>[#156](pytest-dev/pytest-rerunfailures#156) <https://github.com/pytest-dev/pytest-rerunfailures/issues/156></code>_.</p> </li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/pytest-dev/pytest-rerunfailures/commit/4b3a2200b07b357cecfe192f4997f35764869c6f"><code>4b3a220</code></a> Preparing release 16.3</li> <li><a href="https://github.com/pytest-dev/pytest-rerunfailures/commit/d17f3be1c8cc257c29cd7d7e815d3c52867b1276"><code>d17f3be</code></a> feat: add --reruns-mode option to sum marker and global reruns (<a href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/321">#321</a>) (<a href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/328">#328</a>)</li> <li><a href="https://github.com/pytest-dev/pytest-rerunfailures/commit/4a00facae37246c00801390039286d322df6e322"><code>4a00fac</code></a> Add --rerun-show-tracebacks to surface retried failures (<a href="https://redirect.github.com/pytest-dev/pytest-rerunfailures/issues/329">#329</a>)</li> <li><a href="https://github.com/pytest-dev/pytest-rerunfailures/commit/9f792d9efe6bf0218e7ba2734257af2d5165ca3f"><code>9f792d9</code></a> Back to development: 16.3</li> <li>See full diff in <a href="https://github.com/pytest-dev/pytest-rerunfailures/compare/16.2...16.3">compare view</a></li> </ul> </details> <br /> Updates `responses` from 0.26.0 to 0.26.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/getsentry/responses/releases">responses's releases</a>.</em></p> <blockquote> <h2>0.26.1</h2> <ul> <li>Added Spanish translation of the README (<code>README.es.rst</code>)</li> <li>When both <code>content_type</code> and <code>headers['content-type']</code> are in a response mock file, <code>content_type</code> is now used.</li> <li>Added strict_match to urlencoded_params_matcher, enabling partial request parameter matching.</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/getsentry/responses/blob/master/CHANGES">responses's changelog</a>.</em></p> <blockquote> <h2>0.26.1</h2> <ul> <li>Added Spanish translation of the README (<code>README.es.rst</code>)</li> <li>When both <code>content_type</code> and <code>headers['content-type']</code> are in a response mock file, <code>content_type</code> is now used.</li> <li>Added strict_match to urlencoded_params_matcher, enabling partial request parameter matching.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/getsentry/responses/commit/7a80232a3716cadde4b0aa36b34cc56006366179"><code>7a80232</code></a> release: 0.26.1</li> <li><a href="https://github.com/getsentry/responses/commit/1fda8978e1c927706f82c1baafe30d9c013972ca"><code>1fda897</code></a> Add strict_match parameter to urlencoded_params_matcher (<a href="https://redirect.github.com/getsentry/responses/issues/796">#796</a>)</li> <li><a href="https://github.com/getsentry/responses/commit/ab8d4808bf973aa968757755bf9ea38621a4d070"><code>ab8d480</code></a> chore: Fix lint build and update changes (<a href="https://redirect.github.com/getsentry/responses/issues/795">#795</a>)</li> <li><a href="https://github.com/getsentry/responses/commit/71be9a2f9718f0f4d5c3feb28ba7e3797b7bdfc0"><code>71be9a2</code></a> fix: remove content-type from headers in _add_from_file to avoid RuntimeError...</li> <li><a href="https://github.com/getsentry/responses/commit/84c2b081402f61eaf25ef9b27b0bc425bb48479e"><code>84c2b08</code></a> Add Spanish translation of the README documentation (<a href="https://redirect.github.com/getsentry/responses/issues/790">#790</a>)</li> <li><a href="https://github.com/getsentry/responses/commit/3da192e3253c57eb69bc9b46d09154e37abcd8aa"><code>3da192e</code></a> chore: pin GitHub Actions to full-length commit SHAs (<a href="https://redirect.github.com/getsentry/responses/issues/789">#789</a>)</li> <li><a href="https://github.com/getsentry/responses/commit/cc53d778e2adf7a060f1eb04bc5c107d49d4d1a9"><code>cc53d77</code></a> Merge branch 'release/0.26.0'</li> <li>See full diff in <a href="https://github.com/getsentry/responses/compare/0.26.0...0.26.1">compare view</a></li> </ul> </details> <br /> Updates `ruff` from 0.15.13 to 0.15.14 <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.14</h2> <h2>Release Notes</h2> <p>Released on 2026-05-21.</p> <h3>Preview features</h3> <ul> <li>[<code>airflow</code>] Implement <code>airflow-task-implicit-multiple-outputs</code> (<code>AIR202</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/25152">#25152</a>)</li> <li>[<code>flake8-use-pathlib</code>] Mark <code>PTH101</code> fix as unsafe when first argument is a class attribute annotated as <code>int</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/25086">#25086</a>)</li> <li>[<code>pylint</code>] Implement <code>too-many-try-statements</code> (<code>W0717</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/23970">#23970</a>)</li> <li>[<code>ruff</code>] Add <code>incorrect-decorator-order</code> (<code>RUF074</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/23461">#23461</a>)</li> <li>[<code>ruff</code>] Add <code>fallible-context-manager</code> (<code>RUF075</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/22844">#22844</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>Fix lambda formatting in interpolated string expressions (<a href="https://redirect.github.com/astral-sh/ruff/pull/25144">#25144</a>)</li> <li>Treat generic <code>frozenset</code> annotations as immutable (<a href="https://redirect.github.com/astral-sh/ruff/pull/25251">#25251</a>)</li> <li>[<code>flake8-type-checking</code>] Avoid <code>strict</code> behavior when <code>future-annotations</code> are enabled (<code>TC001</code>, <code>TC002</code>, <code>TC003</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/25035">#25035</a>)</li> <li>[<code>pylint</code>] Avoid false positives in <code>else</code> clause (<code>PLR1733</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/25177">#25177</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>[<code>flake8-comprehensions</code>] Skip <code>C417</code> for lambdas with positional-only parameters (<a href="https://redirect.github.com/astral-sh/ruff/pull/25272">#25272</a>)</li> <li>[<code>flake8-simplify</code>] Preserve f-string source verbatim in <code>SIM101</code> fix (<a href="https://redirect.github.com/astral-sh/ruff/pull/25061">#25061</a>)</li> </ul> <h3>Performance</h3> <ul> <li>Avoid unnecessary parser lookahead for operators (<a href="https://redirect.github.com/astral-sh/ruff/pull/25290">#25290</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Update code example setting Neovim LSP log level (<a href="https://redirect.github.com/astral-sh/ruff/pull/25284">#25284</a>)</li> </ul> <h3>Other changes</h3> <ul> <li>Add full PEP 798 support (<a href="https://redirect.github.com/astral-sh/ruff/pull/25104">#25104</a>)</li> <li>Add a parser recursion limit (<a href="https://redirect.github.com/astral-sh/ruff/pull/24810">#24810</a>)</li> <li>Update various <code>ruff_python_stdlib</code> APIs (<a href="https://redirect.github.com/astral-sh/ruff/pull/25273">#25273</a>)</li> </ul> <h3>Contributors</h3> <ul> <li><a href="https://github.com/ocaballeror"><code>@ocaballeror</code></a></li> <li><a href="https://github.com/lerebear"><code>@lerebear</code></a></li> <li><a href="https://github.com/samuelcolvin"><code>@samuelcolvin</code></a></li> <li><a href="https://github.com/baltasarblanco"><code>@baltasarblanco</code></a></li> <li><a href="https://github.com/aconal-com"><code>@aconal-com</code></a></li> <li><a href="https://github.com/anishgirianish"><code>@anishgirianish</code></a></li> <li><a href="https://github.com/JelleZijlstra"><code>@JelleZijlstra</code></a></li> <li><a href="https://github.com/AlexWaygood"><code>@AlexWaygood</code></a></li> <li><a href="https://github.com/ntBre"><code>@ntBre</code></a></li> </ul> <!-- 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.14</h2> <p>Released on 2026-05-21.</p> <h3>Preview features</h3> <ul> <li>[<code>airflow</code>] Implement <code>airflow-task-implicit-multiple-outputs</code> (<code>AIR202</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/25152">#25152</a>)</li> <li>[<code>flake8-use-pathlib</code>] Mark <code>PTH101</code> fix as unsafe when first argument is a class attribute annotated as <code>int</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/25086">#25086</a>)</li> <li>[<code>pylint</code>] Implement <code>too-many-try-statements</code> (<code>W0717</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/23970">#23970</a>)</li> <li>[<code>ruff</code>] Add <code>incorrect-decorator-order</code> (<code>RUF074</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/23461">#23461</a>)</li> <li>[<code>ruff</code>] Add <code>fallible-context-manager</code> (<code>RUF075</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/22844">#22844</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>Fix lambda formatting in interpolated string expressions (<a href="https://redirect.github.com/astral-sh/ruff/pull/25144">#25144</a>)</li> <li>Treat generic <code>frozenset</code> annotations as immutable (<a href="https://redirect.github.com/astral-sh/ruff/pull/25251">#25251</a>)</li> <li>[<code>flake8-type-checking</code>] Avoid <code>strict</code> behavior when <code>future-annotations</code> are enabled (<code>TC001</code>, <code>TC002</code>, <code>TC003</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/25035">#25035</a>)</li> <li>[<code>pylint</code>] Avoid false positives in <code>else</code> clause (<code>PLR1733</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/25177">#25177</a>)</li> </ul> <h3>Rule changes</h3> <ul> <li>[<code>flake8-comprehensions</code>] Skip <code>C417</code> for lambdas with positional-only parameters (<a href="https://redirect.github.com/astral-sh/ruff/pull/25272">#25272</a>)</li> <li>[<code>flake8-simplify</code>] Preserve f-string source verbatim in <code>SIM101</code> fix (<a href="https://redirect.github.com/astral-sh/ruff/pull/25061">#25061</a>)</li> </ul> <h3>Performance</h3> <ul> <li>Avoid unnecessary parser lookahead for operators (<a href="https://redirect.github.com/astral-sh/ruff/pull/25290">#25290</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Update code example setting Neovim LSP log level (<a href="https://redirect.github.com/astral-sh/ruff/pull/25284">#25284</a>)</li> </ul> <h3>Other changes</h3> <ul> <li>Add full PEP 798 support (<a href="https://redirect.github.com/astral-sh/ruff/pull/25104">#25104</a>)</li> <li>Add a parser recursion limit (<a href="https://redirect.github.com/astral-sh/ruff/pull/24810">#24810</a>)</li> <li>Update various <code>ruff_python_stdlib</code> APIs (<a href="https://redirect.github.com/astral-sh/ruff/pull/25273">#25273</a>)</li> </ul> <h3>Contributors</h3> <ul> <li><a href="https://github.com/ocaballeror"><code>@ocaballeror</code></a></li> <li><a href="https://github.com/lerebear"><code>@lerebear</code></a></li> <li><a href="https://github.com/samuelcolvin"><code>@samuelcolvin</code></a></li> <li><a href="https://github.com/baltasarblanco"><code>@baltasarblanco</code></a></li> <li><a href="https://github.com/aconal-com"><code>@aconal-com</code></a></li> <li><a href="https://github.com/anishgirianish"><code>@anishgirianish</code></a></li> <li><a href="https://github.com/JelleZijlstra"><code>@JelleZijlstra</code></a></li> <li><a href="https://github.com/AlexWaygood"><code>@AlexWaygood</code></a></li> <li><a href="https://github.com/ntBre"><code>@ntBre</code></a></li> <li><a href="https://github.com/adityasingh2400"><code>@adityasingh2400</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/9ad2da3015e5faf73bdc5f1d09df3e47238e3edf"><code>9ad2da3</code></a> Bump 0.15.14 (<a href="https://redirect.github.com/astral-sh/ruff/issues/25295">#25295</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/c714e84952510696c05ec21b0158a3548898f594"><code>c714e84</code></a> [ty] Modernize setup of union types in mdtests (<a href="https://redirect.github.com/astral-sh/ruff/issues/25291">#25291</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/8a8e35ebfe318e2467a0f276e5d1a3a9032a55ad"><code>8a8e35e</code></a> [<code>flake8-comprehensions</code>] Skip <code>C417</code> for lambdas with positional-only parame...</li> <li><a href="https://github.com/astral-sh/ruff/commit/aea5ed4d278017057c2e842c6c3a2e92ad71495f"><code>aea5ed4</code></a> Avoid unnecessary parser lookahead for operators (<a href="https://redirect.github.com/astral-sh/ruff/issues/25290">#25290</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/e9d72bb420f26c23e6660bfce4dfa0028b931bff"><code>e9d72bb</code></a> [ty] Allow enum member accesses on <code>self</code> (<a href="https://redirect.github.com/astral-sh/ruff/issues/25077">#25077</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/6cbd59b511a92d5f408db57bde33367c0d47b672"><code>6cbd59b</code></a> Set <code>exclude-newer = "7 days"</code> in our PEP-723 scripts (<a href="https://redirect.github.com/astral-sh/ruff/issues/25285">#25285</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/9999a3967ae28fe3295131e8883b6947f272a076"><code>9999a39</code></a> Update code example on how to update Neovim LSP log level (<a href="https://redirect.github.com/astral-sh/ruff/issues/25284">#25284</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/67d8c544f0d1c526a2fc60d4bb1358fd7956d178"><code>67d8c54</code></a> [ty] Retain recursively-defined state in binary expressions (<a href="https://redirect.github.com/astral-sh/ruff/issues/25277">#25277</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/25a3191140dc0467f9d196f35c128fefde269261"><code>25a3191</code></a> [ty] Refine Callable class-decorator fallback for unknown results (<a href="https://redirect.github.com/astral-sh/ruff/issues/25250">#25250</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/c423054dc09e5b644c926b6b527b6accfbe693e9"><code>c423054</code></a> Add a recursion limit to the parser (<a href="https://redirect.github.com/astral-sh/ruff/issues/24810">#24810</a>)</li> <li>Additional commits viewable in <a href="https://github.com/astral-sh/ruff/compare/0.15.13...0.15.14">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>



Added commerce orders assets endpoints
https://softwareone.atlassian.net/browse/MPT-16319
Summary by CodeRabbit
New Features
Tests
✏️ Tip: You can customize this high-level summary in your review settings.