Skip to content

Commit 23643f1

Browse files
Improving external SDK for function
1 parent 5c6c576 commit 23643f1

1 file changed

Lines changed: 28 additions & 18 deletions

File tree

src/datacustomcode/function_utils.py

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,30 @@ def get_request_type(entrypoint_path: str) -> Optional[Any]:
165165
return request_type
166166

167167

168+
def _generate_model_sample_data(model_type):
169+
"""Generate sample data for all fields in a Pydantic model.
170+
171+
Args:
172+
model_type: A Pydantic model class
173+
174+
Returns:
175+
Dictionary with sample data for all fields
176+
"""
177+
from pydantic_core import PydanticUndefined
178+
179+
sample_data = {}
180+
for field_name, field_info in model_type.model_fields.items():
181+
# Check if field has a real default value
182+
if field_info.default is not PydanticUndefined:
183+
sample_data[field_name] = field_info.default
184+
else:
185+
# Required field or field without default - generate sample
186+
sample_data[field_name] = generate_sample_value(
187+
field_info.annotation, field_name
188+
)
189+
return sample_data
190+
191+
168192
def generate_sample_value(field_type, field_name: str):
169193
"""Generate a sample value based on field type.
170194
@@ -197,14 +221,8 @@ def generate_sample_value(field_type, field_name: str):
197221
elif field_type is bool:
198222
return True
199223
elif hasattr(field_type, "model_fields"):
200-
# Nested Pydantic model
201-
nested_data = {}
202-
for nested_field_name, nested_field_info in field_type.model_fields.items():
203-
if nested_field_info.is_required():
204-
nested_data[nested_field_name] = generate_sample_value(
205-
nested_field_info.annotation, nested_field_name
206-
)
207-
return nested_data
224+
# Nested Pydantic model - use shared helper
225+
return _generate_model_sample_data(field_type)
208226
else:
209227
return None
210228

@@ -228,16 +246,8 @@ def generate_test_json(entrypoint_path: str, output_path: str) -> None:
228246
if not hasattr(request_type, "model_fields"):
229247
raise ValueError(f"Request parameter type must be a Pydantic model")
230248

231-
# Generate sample data
232-
sample_data = {}
233-
for field_name, field_info in request_type.model_fields.items():
234-
if field_info.is_required():
235-
sample_data[field_name] = generate_sample_value(
236-
field_info.annotation, field_name
237-
)
238-
elif field_info.default is not None:
239-
sample_data[field_name] = field_info.default
240-
249+
# Generate sample data for ALL fields (use defaults where available)
250+
sample_data = _generate_model_sample_data(request_type)
241251
sample_instance = request_type(**sample_data)
242252

243253
# Write to file

0 commit comments

Comments
 (0)