From 5ac630f7ff2f919e39384e955794145932ece4e4 Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Thu, 4 Feb 2016 14:16:08 +0000 Subject: [PATCH 1/6] Fix for issue #2036, python client wont upload list of files --- .../java/io/swagger/codegen/DefaultCodegen.java | 2 ++ .../src/main/resources/python/api_client.mustache | 15 ++++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java index a66ef6db810..64516dc748f 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/DefaultCodegen.java @@ -1366,6 +1366,8 @@ public class DefaultCodegen { } else if (param instanceof FormParameter) { if ("file".equalsIgnoreCase(((FormParameter) param).getType())) { p.isFile = true; + } else if("file".equals(p.baseType)){ + p.isFile = true; } else { p.notFile = true; } diff --git a/modules/swagger-codegen/src/main/resources/python/api_client.mustache b/modules/swagger-codegen/src/main/resources/python/api_client.mustache index 57ada23fb32..fd954edde7d 100644 --- a/modules/swagger-codegen/src/main/resources/python/api_client.mustache +++ b/modules/swagger-codegen/src/main/resources/python/api_client.mustache @@ -395,13 +395,14 @@ class ApiClient(object): for k, v in iteritems(files): if not v: continue - - with open(v, 'rb') as f: - filename = os.path.basename(f.name) - filedata = f.read() - mimetype = mimetypes.\ - guess_type(filename)[0] or 'application/octet-stream' - params[k] = tuple([filename, filedata, mimetype]) + all_files = v if type(v) is list else [v] + for n in all_files: + with open(n, 'rb') as f: + filename = os.path.basename(f.name) + filedata = f.read() + mimetype = mimetypes.\ + guess_type(filename)[0] or 'application/octet-stream' + params[k] = tuple([filename, filedata, mimetype]) return params From 833ce25cab0d35514785839a11c539c1e100d805 Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Fri, 5 Feb 2016 00:14:59 +0000 Subject: [PATCH 2/6] Change post_param from dict to list of tuples to allow list of files --- .../src/main/resources/python/api_client.mustache | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/python/api_client.mustache b/modules/swagger-codegen/src/main/resources/python/api_client.mustache index fd954edde7d..73f33a0e2e8 100644 --- a/modules/swagger-codegen/src/main/resources/python/api_client.mustache +++ b/modules/swagger-codegen/src/main/resources/python/api_client.mustache @@ -386,10 +386,10 @@ class ApiClient(object): :param files: File parameters. :return: Form parameters with files. """ - params = {} + params = [] if post_params: - params.update(post_params) + params = post_params if files: for k, v in iteritems(files): @@ -402,7 +402,7 @@ class ApiClient(object): filedata = f.read() mimetype = mimetypes.\ guess_type(filename)[0] or 'application/octet-stream' - params[k] = tuple([filename, filedata, mimetype]) + params.append(tuple[k, tuple([filename, filedata, mimetype])]) return params From 2407c494e7fc557e3fa6e80f3bbc3fbabe918dd6 Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Fri, 5 Feb 2016 00:18:49 +0000 Subject: [PATCH 3/6] Change post_param from dict to list of tuples to allow list of files --- .../src/main/resources/python/api_client.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/swagger-codegen/src/main/resources/python/api_client.mustache b/modules/swagger-codegen/src/main/resources/python/api_client.mustache index 73f33a0e2e8..3ee9e7cc004 100644 --- a/modules/swagger-codegen/src/main/resources/python/api_client.mustache +++ b/modules/swagger-codegen/src/main/resources/python/api_client.mustache @@ -402,7 +402,7 @@ class ApiClient(object): filedata = f.read() mimetype = mimetypes.\ guess_type(filename)[0] or 'application/octet-stream' - params.append(tuple[k, tuple([filename, filedata, mimetype])]) + params.append(tuple([k, tuple([filename, filedata, mimetype])])) return params From b43e1e2c8f062cd1890fe1475981803143170998 Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Fri, 5 Feb 2016 00:39:22 +0000 Subject: [PATCH 4/6] Change form_param to list of tuples from dict --- .../swagger-codegen/src/main/resources/python/api.mustache | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/python/api.mustache b/modules/swagger-codegen/src/main/resources/python/api.mustache index 77ece14d44b..9b0559fb6d1 100644 --- a/modules/swagger-codegen/src/main/resources/python/api.mustache +++ b/modules/swagger-codegen/src/main/resources/python/api.mustache @@ -117,11 +117,11 @@ class {{classname}}(object): header_params['{{baseName}}'] = params['{{paramName}}'] {{/headerParams}} - form_params = {} + form_params = [] files = {} {{#formParams}} if '{{paramName}}' in params: - {{#notFile}}form_params['{{baseName}}'] = params['{{paramName}}']{{/notFile}}{{#isFile}}files['{{baseName}}'] = params['{{paramName}}']{{/isFile}} + {{#notFile}}form_params.append(('{{baseName}}', params['{{paramName}}'])){{/notFile}}{{#isFile}}files['{{baseName}}'] = params['{{paramName}}']{{/isFile}} {{/formParams}} body_params = None From 57f38e4433c6544b61ace3405b1680d31d03c5e1 Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Fri, 5 Feb 2016 09:46:41 +0000 Subject: [PATCH 5/6] Update pet-store python client files --- .../python/swagger_client/__init__.py | 2 +- .../python/swagger_client/api_client.py | 19 +++++------ .../python/swagger_client/apis/__init__.py | 2 +- .../python/swagger_client/apis/pet_api.py | 32 +++++++++---------- .../python/swagger_client/apis/store_api.py | 8 ++--- .../python/swagger_client/apis/user_api.py | 16 +++++----- 6 files changed, 40 insertions(+), 39 deletions(-) diff --git a/samples/client/petstore/python/swagger_client/__init__.py b/samples/client/petstore/python/swagger_client/__init__.py index f61c5d55262..6e7b59f36fd 100644 --- a/samples/client/petstore/python/swagger_client/__init__.py +++ b/samples/client/petstore/python/swagger_client/__init__.py @@ -9,8 +9,8 @@ from .models.order import Order # import apis into sdk package from .apis.user_api import UserApi -from .apis.pet_api import PetApi from .apis.store_api import StoreApi +from .apis.pet_api import PetApi # import ApiClient from .api_client import ApiClient diff --git a/samples/client/petstore/python/swagger_client/api_client.py b/samples/client/petstore/python/swagger_client/api_client.py index 00b901f3c4a..2b74f7ec8e5 100644 --- a/samples/client/petstore/python/swagger_client/api_client.py +++ b/samples/client/petstore/python/swagger_client/api_client.py @@ -386,22 +386,23 @@ class ApiClient(object): :param files: File parameters. :return: Form parameters with files. """ - params = {} + params = [] if post_params: - params.update(post_params) + params = post_params if files: for k, v in iteritems(files): if not v: continue - - with open(v, 'rb') as f: - filename = os.path.basename(f.name) - filedata = f.read() - mimetype = mimetypes.\ - guess_type(filename)[0] or 'application/octet-stream' - params[k] = tuple([filename, filedata, mimetype]) + all_files = v if type(v) is list else [v] + for n in all_files: + with open(n, 'rb') as f: + filename = os.path.basename(f.name) + filedata = f.read() + mimetype = mimetypes.\ + guess_type(filename)[0] or 'application/octet-stream' + params.append(tuple([k, tuple([filename, filedata, mimetype])])) return params diff --git a/samples/client/petstore/python/swagger_client/apis/__init__.py b/samples/client/petstore/python/swagger_client/apis/__init__.py index 592a56e282d..c0e09458f95 100644 --- a/samples/client/petstore/python/swagger_client/apis/__init__.py +++ b/samples/client/petstore/python/swagger_client/apis/__init__.py @@ -2,5 +2,5 @@ from __future__ import absolute_import # import apis into api package from .user_api import UserApi -from .pet_api import PetApi from .store_api import StoreApi +from .pet_api import PetApi diff --git a/samples/client/petstore/python/swagger_client/apis/pet_api.py b/samples/client/petstore/python/swagger_client/apis/pet_api.py index c3171760ddf..f5fc842a263 100644 --- a/samples/client/petstore/python/swagger_client/apis/pet_api.py +++ b/samples/client/petstore/python/swagger_client/apis/pet_api.py @@ -89,7 +89,7 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -165,7 +165,7 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -243,7 +243,7 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -319,7 +319,7 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -398,7 +398,7 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -479,12 +479,12 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} if 'name' in params: - form_params['name'] = params['name'] + form_params.append(('name', params['name'])) if 'status' in params: - form_params['status'] = params['status'] + form_params.append(('status', params['status'])) body_params = None @@ -565,7 +565,7 @@ class PetApi(object): if 'api_key' in params: header_params['api_key'] = params['api_key'] - form_params = {} + form_params = [] files = {} body_params = None @@ -646,10 +646,10 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} if 'additional_metadata' in params: - form_params['additionalMetadata'] = params['additional_metadata'] + form_params.append(('additionalMetadata', params['additional_metadata'])) if 'file' in params: files['file'] = params['file'] @@ -696,7 +696,7 @@ class PetApi(object): :param callback function: The callback function for asynchronous request. (optional) :param int pet_id: ID of pet that needs to be fetched (required) - :return: Binary + :return: str If the method is called asynchronously, returns the request thread. """ @@ -729,7 +729,7 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -754,7 +754,7 @@ class PetApi(object): body=body_params, post_params=form_params, files=files, - response_type='Binary', + response_type='str', auth_settings=auth_settings, callback=params.get('callback')) return response @@ -774,7 +774,7 @@ class PetApi(object): :param callback function: The callback function for asynchronous request. (optional) - :param Binary body: Pet object in the form of byte array + :param str body: Pet object in the form of byte array :return: None If the method is called asynchronously, returns the request thread. @@ -803,7 +803,7 @@ class PetApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None diff --git a/samples/client/petstore/python/swagger_client/apis/store_api.py b/samples/client/petstore/python/swagger_client/apis/store_api.py index af6e56d6928..961123bc8fa 100644 --- a/samples/client/petstore/python/swagger_client/apis/store_api.py +++ b/samples/client/petstore/python/swagger_client/apis/store_api.py @@ -88,7 +88,7 @@ class StoreApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -162,7 +162,7 @@ class StoreApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -243,7 +243,7 @@ class StoreApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -322,7 +322,7 @@ class StoreApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None diff --git a/samples/client/petstore/python/swagger_client/apis/user_api.py b/samples/client/petstore/python/swagger_client/apis/user_api.py index 98111a84d9d..4e87823398e 100644 --- a/samples/client/petstore/python/swagger_client/apis/user_api.py +++ b/samples/client/petstore/python/swagger_client/apis/user_api.py @@ -89,7 +89,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -165,7 +165,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -241,7 +241,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -322,7 +322,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -395,7 +395,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -474,7 +474,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -554,7 +554,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None @@ -635,7 +635,7 @@ class UserApi(object): header_params = {} - form_params = {} + form_params = [] files = {} body_params = None From a6fe87a52af45a5edd6b32b41ddb481ad110818e Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Sun, 7 Feb 2016 14:38:33 +0000 Subject: [PATCH 6/6] Use more appropriate variable name --- .../src/main/resources/python/api_client.mustache | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/swagger-codegen/src/main/resources/python/api_client.mustache b/modules/swagger-codegen/src/main/resources/python/api_client.mustache index 3ee9e7cc004..7aac36e1a20 100644 --- a/modules/swagger-codegen/src/main/resources/python/api_client.mustache +++ b/modules/swagger-codegen/src/main/resources/python/api_client.mustache @@ -395,8 +395,8 @@ class ApiClient(object): for k, v in iteritems(files): if not v: continue - all_files = v if type(v) is list else [v] - for n in all_files: + file_names = v if type(v) is list else [v] + for n in file_names: with open(n, 'rb') as f: filename = os.path.basename(f.name) filedata = f.read()