diff --git a/openapi3/paths.py b/openapi3/paths.py index f8d0f2e..2a593dd 100644 --- a/openapi3/paths.py +++ b/openapi3/paths.py @@ -266,7 +266,7 @@ def _request_handle_parameters(self, parameters={}): self._request.url = self._request.url.format(**path_parameters) - def _request_handle_body(self, data): + def _request_handle_body(self, data, files): if "application/json" in self.requestBody.content: if isinstance(data, dict) or isinstance(data, list): body = json.dumps(data) @@ -280,10 +280,22 @@ def _request_handle_body(self, data): self._request.data = body self._request.headers["Content-Type"] = "application/json" + elif "multipart/form-data" in self.requestBody.content: + if issubclass(type(data), Model): + raise NotImplementedError("Passed Model for multipart body") + + multipart_schema = self.requestBody.content['multipart/form-data'] + if isinstance(files, dict) and len(files) > 0: + self._request.files = files + + if isinstance(data, dict) or isinstance(data, list): + body = json.dumps(data) + + self._request.headers["Content-Type"] = "multipart/form-data" else: - raise NotImplementedError() + raise NotImplementedError("Not implemented body content type") - def request(self, base_url, security={}, data=None, parameters={}, verify=True, session=None, raw_response=False): + def request(self, base_url, security={}, data=None, parameters={}, verify=True, session=None, raw_response=False, files={}): """ Sends an HTTP request as described by this Path @@ -333,7 +345,7 @@ def request(self, base_url, security={}, data=None, parameters={}, verify=True, err_msg = "Request Body is required but none was provided." raise ValueError(err_msg) - self._request_handle_body(data) + self._request_handle_body(data, files) self._request_handle_parameters(parameters)