From d24f7bcf7e164e587acfd506bd58406795f063a1 Mon Sep 17 00:00:00 2001 From: Joseph Friedrich Date: Tue, 27 Oct 2026 13:43:31 -0400 Subject: [PATCH] Make request optional when it has no required fields With methodArguments: require-security-and-request, operations whose only parameter is the hidden SHIPPO-API-VERSION global (service_groups.list, refunds.list, user_parcel_templates.list, get/delete_default_parcel_template) generate an empty but required request model, so callers must pass request={}. infer-optional-args (already used by the C# SDK) gives such requests a default. It only adds defaults; existing calls keep working. Co-Authored-By: Claude Opus 5.5 --- .speakeasy/gen.yaml | 2 +- MIGRATION.md | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 3501d854..d20b97df 100755 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -81,7 +81,7 @@ python: inputTypedDictSuffix: TypedDict license: MIT License maxMethodParams: 3 - methodArguments: require-security-and-request + methodArguments: infer-optional-args methodTimeoutArgument: timeout-ms methodTimeoutUnits: milliseconds moduleName: "" diff --git a/MIGRATION.md b/MIGRATION.md index 511c93a9..de172fcc 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -57,15 +57,16 @@ These methods used to take individual arguments. They now take a single `request | `tracking_status.create(carrier, tracking_number, metadata=None)` | `tracking_status.create(request={"carrier": ..., "tracking_number": ...})` | | `rates_at_checkout.update_default_parcel_template(object_id=...)` | `rates_at_checkout.update_default_parcel_template(request={"object_id": ...})` | -**Known issue in 5.0.0b1:** the following methods take no parameters but still require an empty -`request=` argument. We plan to remove this requirement before 5.0.0 is final. +**Methods with no required parameters.** In 5.0.0b1 and 5.0.0b2, these methods required an empty +`request={}` argument. From 5.0.0b3 the argument is optional, so you can call them with no arguments +(passing `request={}` still works): ```python -shippo_sdk.service_groups.list(request={}) -shippo_sdk.refunds.list(request={}) -shippo_sdk.user_parcel_templates.list(request={}) -shippo_sdk.rates_at_checkout.get_default_parcel_template(request={}) -shippo_sdk.rates_at_checkout.delete_default_parcel_template(request={}) +shippo_sdk.service_groups.list() +shippo_sdk.refunds.list() +shippo_sdk.user_parcel_templates.list() +shippo_sdk.rates_at_checkout.get_default_parcel_template() +shippo_sdk.rates_at_checkout.delete_default_parcel_template() ``` ## 4. Models are pydantic, not dataclasses