(data: Any)
| 198 | |
| 199 | |
| 200 | def serialize_form_data(data: Any) -> Dict[str, Any]: |
| 201 | form: Dict[str, List[str]] = {} |
| 202 | |
| 203 | if isinstance(data, BaseModel): |
| 204 | data_fields: Dict[str, FieldInfo] = data.__class__.model_fields |
| 205 | data_field_types = get_type_hints(data.__class__) |
| 206 | for name in data_fields: |
| 207 | field = data_fields[name] |
| 208 | |
| 209 | val = getattr(data, name) |
| 210 | if not _is_set(val): |
| 211 | continue |
| 212 | |
| 213 | metadata = find_field_metadata(field, FormMetadata) |
| 214 | if metadata is None: |
| 215 | continue |
| 216 | |
| 217 | f_name = field.alias if field.alias is not None else name |
| 218 | |
| 219 | if metadata.json: |
| 220 | form[f_name] = [marshal_json(val, data_field_types[name])] |
| 221 | else: |
| 222 | if metadata.style == "form": |
| 223 | _populate_form( |
| 224 | f_name, |
| 225 | metadata.explode, |
| 226 | val, |
| 227 | ",", |
| 228 | form, |
| 229 | ) |
| 230 | else: |
| 231 | raise ValueError(f"Invalid form style for field {name}") |
| 232 | elif isinstance(data, Dict): |
| 233 | for key, value in data.items(): |
| 234 | if _is_set(value): |
| 235 | form[key] = [_val_to_string(value)] |
| 236 | else: |
| 237 | raise TypeError(f"Invalid request body type {type(data)} for form data") |
| 238 | |
| 239 | return form |
no test coverage detected