(
media_type: str, request: Any
)
| 120 | |
| 121 | |
| 122 | def serialize_multipart_form( |
| 123 | media_type: str, request: Any |
| 124 | ) -> Tuple[str, Dict[str, Any], List[Tuple[str, Any]]]: |
| 125 | form: Dict[str, Any] = {} |
| 126 | files: List[Tuple[str, Any]] = [] |
| 127 | |
| 128 | if not isinstance(request, BaseModel): |
| 129 | raise TypeError("invalid request body type") |
| 130 | |
| 131 | request_fields: Dict[str, FieldInfo] = request.__class__.model_fields |
| 132 | request_field_types = get_type_hints(request.__class__) |
| 133 | |
| 134 | for name in request_fields: |
| 135 | field = request_fields[name] |
| 136 | |
| 137 | val = getattr(request, name) |
| 138 | if not _is_set(val): |
| 139 | continue |
| 140 | |
| 141 | field_metadata = find_field_metadata(field, MultipartFormMetadata) |
| 142 | if not field_metadata: |
| 143 | continue |
| 144 | |
| 145 | f_name = field.alias if field.alias else name |
| 146 | |
| 147 | if field_metadata.file: |
| 148 | if isinstance(val, List): |
| 149 | # Handle array of files |
| 150 | array_field_name = f_name + "[]" |
| 151 | for file_obj in val: |
| 152 | if not _is_set(file_obj): |
| 153 | continue |
| 154 | |
| 155 | file_name, content, content_type = _extract_file_properties( |
| 156 | file_obj |
| 157 | ) |
| 158 | |
| 159 | if content_type is not None: |
| 160 | files.append( |
| 161 | (array_field_name, (file_name, content, content_type)) |
| 162 | ) |
| 163 | else: |
| 164 | files.append((array_field_name, (file_name, content))) |
| 165 | else: |
| 166 | # Handle single file |
| 167 | file_name, content, content_type = _extract_file_properties(val) |
| 168 | |
| 169 | if content_type is not None: |
| 170 | files.append((f_name, (file_name, content, content_type))) |
| 171 | else: |
| 172 | files.append((f_name, (file_name, content))) |
| 173 | elif field_metadata.json: |
| 174 | files.append( |
| 175 | ( |
| 176 | f_name, |
| 177 | ( |
| 178 | None, |
| 179 | marshal_json(val, request_field_types[name]), |
no test coverage detected