Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions generators/python/sdk/versions.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# yaml-language-server: $schema=../../../fern-versions-yml.schema.json
# For unreleased changes, use unreleased.yml
- version: 4.54.4
changelogEntry:
- summary: |
The `use_provided_defaults` config option no longer applies defaults to
inlined request body parameters.
type: fix
createdAt: "2026-02-05"
irVersion: 62

- version: 4.54.3
changelogEntry:
- summary: |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ def get_type_names_in_type_reference(self, type_reference: ir_types.TypeReferenc

@abstractmethod
def get_initializer_for_type_reference(
self, type_reference: ir_types.TypeReference
self, type_reference: ir_types.TypeReference, *, for_request_param: bool = False
) -> Optional[AST.Expression]: ...

@abstractmethod
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,13 +89,16 @@ def get_initializer_for_type_reference(
self,
type_reference: ir_types.TypeReference,
ignore_literals: bool = False,
*,
for_request_param: bool = False,
) -> Optional[AST.Expression]:
default_value = None
union = type_reference.get_as_union()

# Only populate primitive defaults if we're allowed to leverage them via config
# Otherwise we want to be able to generate defaults for literals, and aliases of literals
if union.type == "primitive" and self._allow_leveraging_defaults:
# AND this is for a request param (query param or header). Request body properties
# and Pydantic model fields should not get primitive defaults.
if union.type == "primitive" and self._allow_leveraging_defaults and for_request_param:
maybe_v2_scheme = union.primitive.v_2
if maybe_v2_scheme is not None:
default_value = maybe_v2_scheme.visit(
Expand All @@ -116,7 +119,9 @@ def get_initializer_for_type_reference(
elif union.type == "named":
type_declaration = self.get_declaration_for_type_id(union.type_id)
default_value = type_declaration.shape.visit(
alias=lambda a: self.get_initializer_for_type_reference(a.alias_of, ignore_literals=ignore_literals),
alias=lambda a: self.get_initializer_for_type_reference(
a.alias_of, ignore_literals=ignore_literals, for_request_param=for_request_param
),
enum=lambda _: None,
object=lambda _: None,
union=lambda _: None,
Expand All @@ -133,8 +138,12 @@ def get_initializer_for_type_reference(
list_=lambda _: None,
set_=lambda _: None,
# Ignore literal defaults when the wrapping type is optional
optional=lambda opt: self.get_initializer_for_type_reference(opt, ignore_literals=True),
nullable=lambda nullable: self.get_initializer_for_type_reference(nullable, ignore_literals=True),
optional=lambda opt: self.get_initializer_for_type_reference(
opt, ignore_literals=True, for_request_param=for_request_param
),
nullable=lambda nullable: self.get_initializer_for_type_reference(
nullable, ignore_literals=True, for_request_param=for_request_param
),
map_=lambda _: None,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ def _get_endpoint_named_parameters(
docs=query_parameter.docs,
type_hint=self._get_typehint_for_query_param(query_parameter, query_parameter_type_hint),
initializer=self._context.pydantic_generator_context.get_initializer_for_type_reference(
query_parameter.value_type
query_parameter.value_type, for_request_param=True
),
),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,6 @@ def get_parameters(self, names_to_deconflict: Optional[List[str]] = None) -> Lis
property.value_type,
in_endpoint=True,
)
maybe_default_value = self._context.pydantic_generator_context.get_initializer_for_type_reference(
property.value_type,
)
parameters.append(
AST.NamedFunctionParameter(
name=self._get_property_name(property),
Expand All @@ -50,9 +47,7 @@ def get_parameters(self, names_to_deconflict: Optional[List[str]] = None) -> Lis
property.value_type,
in_endpoint=True,
),
initializer=maybe_default_value
if maybe_default_value is not None
else AST.Expression(DEFAULT_BODY_PARAMETER_VALUE)
initializer=AST.Expression(DEFAULT_BODY_PARAMETER_VALUE)
if type_hint.is_optional
else None,
raw_type=property.value_type,
Expand Down
12 changes: 6 additions & 6 deletions seed/python-sdk/validation/with-defaults/src/seed/client.py

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions seed/python-sdk/validation/with-defaults/src/seed/raw_client.py

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading