From d798b943f5b47e19c517609644824c467debb36e Mon Sep 17 00:00:00 2001 From: geekerzp Date: Fri, 15 May 2015 14:38:06 +0800 Subject: [PATCH] added python 2.7 and python 3.4 test environments --- .../languages/PythonClientCodegen.java | 1 + .../src/main/resources/python/README.mustache | 19 +- .../resources/python/__init__api.mustache | 14 +- .../resources/python/__init__model.mustache | 14 +- .../resources/python/__init__package.mustache | 22 +- .../src/main/resources/python/api.mustache | 47 ++-- .../src/main/resources/python/model.mustache | 20 +- .../src/main/resources/python/setup.mustache | 8 + .../src/main/resources/python/util.mustache | 17 ++ .../python/SwaggerPetstore-python/Makefile | 35 +++ .../python/SwaggerPetstore-python/README.md | 18 +- .../SwaggerPetstore/__init__.py | 24 +- .../SwaggerPetstore/apis/__init__.py | 14 +- .../SwaggerPetstore/apis/pet_api.py | 222 +++++++----------- .../SwaggerPetstore/apis/store_api.py | 108 ++++----- .../SwaggerPetstore/apis/user_api.py | 206 +++++++--------- .../SwaggerPetstore/models/__init__.py | 16 +- .../SwaggerPetstore/models/category.py | 23 +- .../SwaggerPetstore/models/order.py | 60 ++--- .../SwaggerPetstore/models/pet.py | 60 ++--- .../SwaggerPetstore/models/tag.py | 23 +- .../SwaggerPetstore/models/user.py | 78 ++---- .../SwaggerPetstore/util.py | 17 ++ .../dev-requirements.txt | 4 + .../python/SwaggerPetstore-python/pom.xml | 19 +- .../python/SwaggerPetstore-python/setup.cfg | 10 + .../python/SwaggerPetstore-python/setup.py | 8 + .../tests/test_pet_api.py | 96 ++++---- .../python/SwaggerPetstore-python/tox.ini | 10 + 29 files changed, 551 insertions(+), 662 deletions(-) create mode 100644 modules/swagger-codegen/src/main/resources/python/util.mustache create mode 100644 samples/client/petstore/python/SwaggerPetstore-python/Makefile create mode 100644 samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/util.py create mode 100644 samples/client/petstore/python/SwaggerPetstore-python/dev-requirements.txt create mode 100644 samples/client/petstore/python/SwaggerPetstore-python/setup.cfg create mode 100644 samples/client/petstore/python/SwaggerPetstore-python/tox.ini diff --git a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PythonClientCodegen.java b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PythonClientCodegen.java index 7a866dd13b3..bab41e227c2 100755 --- a/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PythonClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/com/wordnik/swagger/codegen/languages/PythonClientCodegen.java @@ -70,6 +70,7 @@ public class PythonClientCodegen extends DefaultCodegen implements CodegenConfig supportingFiles.add(new SupportingFile("setup.mustache", eggPackage, "setup.py")); supportingFiles.add(new SupportingFile("swagger.mustache", invokerPackage, "swagger.py")); supportingFiles.add(new SupportingFile("rest.mustache", invokerPackage, "rest.py")); + supportingFiles.add(new SupportingFile("util.mustache", invokerPackage, "util.py")); supportingFiles.add(new SupportingFile("__init__package.mustache", invokerPackage, "__init__.py")); supportingFiles.add(new SupportingFile("__init__model.mustache", modelPackage.replace('.', File.separatorChar), "__init__.py")); supportingFiles.add(new SupportingFile("__init__api.mustache", apiPackage.replace('.', File.separatorChar), "__init__.py")); diff --git a/modules/swagger-codegen/src/main/resources/python/README.mustache b/modules/swagger-codegen/src/main/resources/python/README.mustache index 3b69aba0f82..8cfb970d0de 100644 --- a/modules/swagger-codegen/src/main/resources/python/README.mustache +++ b/modules/swagger-codegen/src/main/resources/python/README.mustache @@ -38,5 +38,22 @@ TODO ## Tests -TODO +We use some external dependencies, multiple interpreters and code coverage analysis while running test suite. +Our Makefile handles much of this for you as long as you're running it inside of a [virtualenv](http://docs.python-guide.org/en/latest/dev/virtualenvs/): + +```sh +$ make test +[... magically installs dependencies and runs tests on your virtualenv] +Ran 182 tests in 1.633s +OK (SKIP=6) +``` + +You can test in various python versions using: + +```sh +$ make test-all +[... tox creates a virtualenv for every platform and runs tests inside of each] +py27: commands succeeded +py34: commands succeeded +``` diff --git a/modules/swagger-codegen/src/main/resources/python/__init__api.mustache b/modules/swagger-codegen/src/main/resources/python/__init__api.mustache index 1597be6991a..b4442b736ff 100644 --- a/modules/swagger-codegen/src/main/resources/python/__init__api.mustache +++ b/modules/swagger-codegen/src/main/resources/python/__init__api.mustache @@ -1,15 +1,5 @@ -#!/usr/bin/env python -"""Add all of the modules in the current directory to __all__""" from __future__ import absolute_import -import os - -{{#apiInfo}}{{#apis}} -from .{{classVarName}} import {{classname}} +# import apis into api package +{{#apiInfo}}{{#apis}}from .{{classVarName}} import {{classname}} {{/apis}}{{/apiInfo}} - -__all__ = [] - -for module in os.listdir(os.path.dirname(__file__)): - if module != '__init__.py' and module[-3:] == '.py': - __all__.append(module[:-3]) diff --git a/modules/swagger-codegen/src/main/resources/python/__init__model.mustache b/modules/swagger-codegen/src/main/resources/python/__init__model.mustache index 202879d39fd..7a3f1866ea7 100644 --- a/modules/swagger-codegen/src/main/resources/python/__init__model.mustache +++ b/modules/swagger-codegen/src/main/resources/python/__init__model.mustache @@ -1,15 +1,5 @@ -#!/usr/bin/env python -"""Add all of the modules in the current directory to __all__""" from __future__ import absolute_import -import os - -{{#models}}{{#model}} -from .{{classVarName}} import {{classname}} +# import models into model package +{{#models}}{{#model}}from .{{classVarName}} import {{classname}} {{/model}}{{/models}} - -__all__ = [] - -for module in os.listdir(os.path.dirname(__file__)): - if module != '__init__.py' and module[-3:] == '.py': - __all__.append(module[:-3]) diff --git a/modules/swagger-codegen/src/main/resources/python/__init__package.mustache b/modules/swagger-codegen/src/main/resources/python/__init__package.mustache index 704aceb176a..7b48136d3a9 100644 --- a/modules/swagger-codegen/src/main/resources/python/__init__package.mustache +++ b/modules/swagger-codegen/src/main/resources/python/__init__package.mustache @@ -1,24 +1,10 @@ -#!/usr/bin/env python -"""Add all of the modules in the current directory to __all__""" from __future__ import absolute_import -import os - -# import models into package -{{#models}}{{#model}} -from .models.{{classVarName}} import {{classname}} +# import models into sdk package +{{#models}}{{#model}}from .models.{{classVarName}} import {{classname}} {{/model}}{{/models}} - -# import apis into package -{{#apiInfo}}{{#apis}} -from .apis.{{classVarName}} import {{classname}} +# import apis into sdk package +{{#apiInfo}}{{#apis}}from .apis.{{classVarName}} import {{classname}} {{/apis}}{{/apiInfo}} - # import ApiClient from .swagger import ApiClient - -__all__ = [] - -for module in os.listdir(os.path.dirname(__file__)): - if module != '__init__.py' and module[-3:] == '.py': - __all__.append(module[:-3]) diff --git a/modules/swagger-codegen/src/main/resources/python/api.mustache b/modules/swagger-codegen/src/main/resources/python/api.mustache index e7902c25fc6..b853cbc9c95 100644 --- a/modules/swagger-codegen/src/main/resources/python/api.mustache +++ b/modules/swagger-codegen/src/main/resources/python/api.mustache @@ -19,31 +19,36 @@ Copyright 2015 Reverb Technologies, Inc. NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. """ +from __future__ import absolute_import + import sys import os # python 2 and python 3 compatibility library from six import iteritems +from ..util import remove_none + {{#operations}} class {{classname}}(object): def __init__(self, api_client): - self.api_client = api_client - + self.api_client = api_client {{#operation}} - def {{nickname}}(self, {{#requiredParams}}{{paramName}}{{#defaultValue}} = None{{/defaultValue}}, {{/requiredParams}}**kwargs): + def {{nickname}}(self, {{#allParams}}{{#required}}{{paramName}}, {{/required}}{{/allParams}}**kwargs): """ {{{summary}}} {{{notes}}} - {{#allParams}} - :param {{dataType}} {{paramName}}: {{{description}}} {{^optional}}(required){{/optional}}{{#optional}}(optional){{/optional}} + {{#allParams}}:param {{dataType}} {{paramName}}: {{{description}}} {{#required}}(required){{/required}}{{#optional}}(optional){{/optional}} {{/allParams}} - :return: {{#returnType}}{{returnType}}{{/returnType}}{{^returnType}}None{{/returnType}} """ - + {{#allParams}}{{#required}} + # verify the required parameter '{{paramName}}' is set + if {{paramName}} is None: + raise ValueError("Missing the required parameter `{{paramName}}` when calling `{{nickname}}`") + {{/required}}{{/allParams}} all_params = [{{#allParams}}'{{paramName}}'{{#hasMore}}, {{/hasMore}}{{/allParams}}] params = locals() @@ -56,16 +61,11 @@ class {{classname}}(object): resource_path = '{{path}}'.replace('{format}', 'json') method = '{{httpMethod}}' - path_params = dict({{#pathParams}}{{baseName}}=params.get('{{paramName}}'){{#hasMore}}, {{/hasMore}}{{/pathParams}}) - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict({{#queryParams}}{{baseName}}=params.get('{{paramName}}'){{#hasMore}}, {{/hasMore}}{{/queryParams}}) - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict({{#headerParams}}{{baseName}}=params.get('{{paramName}}'){{#hasMore}}, {{/hasMore}}{{/headerParams}}) - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict({{#formParams}}{{^isFile}}{{baseName}}=params.get('{{paramName}}'){{#hasMore}}, {{/hasMore}}{{/isFile}}{{/formParams}}) - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict({{#formParams}}{{#isFile}}{{baseName}}=params.get('{{paramName}}'){{#hasMore}}, {{/hasMore}}{{/isFile}}{{/formParams}}) - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict({{#pathParams}}{{baseName}}=params.get('{{paramName}}'){{#hasMore}}, {{/hasMore}}{{/pathParams}})) + query_params = remove_none(dict({{#queryParams}}{{baseName}}=params.get('{{paramName}}'){{#hasMore}}, {{/hasMore}}{{/queryParams}})) + header_params = remove_none(dict({{#headerParams}}{{baseName}}=params.get('{{paramName}}'){{#hasMore}}, {{/hasMore}}{{/headerParams}})) + form_params = remove_none(dict({{#formParams}}{{^isFile}}{{baseName}}=params.get('{{paramName}}'){{#hasMore}}, {{/hasMore}}{{/isFile}}{{/formParams}})) + files = remove_none(dict({{#formParams}}{{#isFile}}{{baseName}}=params.get('{{paramName}}'){{#hasMore}}, {{/hasMore}}{{/isFile}}{{/formParams}})) body_params = {{#bodyParam}}params.get('{{paramName}}'){{/bodyParam}}{{^bodyParam}}None{{/bodyParam}} accepts = [{{#produces}}'{{mediaType}}'{{#hasMore}}, {{/hasMore}}{{/produces}}] @@ -79,7 +79,14 @@ class {{classname}}(object): response={{#returnType}}'{{returnType}}'{{/returnType}}{{^returnType}}None{{/returnType}}) {{#returnType}} return response - {{/returnType}} - {{/operation}} + {{/returnType}}{{/operation}} {{/operations}} -{{newline}} + + + + + + + + + diff --git a/modules/swagger-codegen/src/main/resources/python/model.mustache b/modules/swagger-codegen/src/main/resources/python/model.mustache index 9e41e78af7f..62a5d12a04f 100644 --- a/modules/swagger-codegen/src/main/resources/python/model.mustache +++ b/modules/swagger-codegen/src/main/resources/python/model.mustache @@ -25,7 +25,6 @@ class {{classname}}(object): Do not edit the class manually. """ - def __init__(self): """ Swagger model @@ -34,22 +33,19 @@ class {{classname}}(object): :param dict attributeMap: The key is attribute name and the value is json key in definition. """ self.swagger_types = { - {{#vars}} - '{{name}}': '{{{datatype}}}'{{#hasMore}}, - {{/hasMore}} - {{/vars}}{{newline}} + {{#vars}}'{{name}}': '{{{datatype}}}'{{#hasMore}}, + {{/hasMore}}{{/vars}} } self.attribute_map = { - {{#vars}} - '{{name}}': '{{baseName}}'{{#hasMore}},{{/hasMore}} - {{/vars}} + {{#vars}}'{{name}}': '{{baseName}}'{{#hasMore}}, + {{/hasMore}}{{/vars}} } - {{#vars}} - {{#description}}#{{description}} - {{/description}} - self.{{name}} = None # {{{datatype}}} + {{#description}}# {{description}}{{/description}} + self.{{name}} = None # {{{datatype}}} {{/vars}} {{/model}} {{/models}} + + diff --git a/modules/swagger-codegen/src/main/resources/python/setup.mustache b/modules/swagger-codegen/src/main/resources/python/setup.mustache index 64609c37dd1..a049057c920 100644 --- a/modules/swagger-codegen/src/main/resources/python/setup.mustache +++ b/modules/swagger-codegen/src/main/resources/python/setup.mustache @@ -30,3 +30,11 @@ setup( ) {{/hasMore}}{{/apis}}{{/apiInfo}} + + + + + + + + diff --git a/modules/swagger-codegen/src/main/resources/python/util.mustache b/modules/swagger-codegen/src/main/resources/python/util.mustache new file mode 100644 index 00000000000..1137a5d2d23 --- /dev/null +++ b/modules/swagger-codegen/src/main/resources/python/util.mustache @@ -0,0 +1,17 @@ +from six import iteritems + +def remove_none(obj): + if isinstance(obj, (list, tuple, set)): + return type(obj)(remove_none(x) for x in obj if x is not None) + elif isinstance(obj, dict): + return type(obj)((remove_none(k), remove_none(v)) + for k, v in iteritems(obj) if k is not None and v is not None) + else: + return obj + + +def inspect_vars(obj): + if not hasattr(obj, '__dict__'): + return obj + else: + return {k: inspect_vars(getattr(obj, k)) for k in dir(obj)} diff --git a/samples/client/petstore/python/SwaggerPetstore-python/Makefile b/samples/client/petstore/python/SwaggerPetstore-python/Makefile new file mode 100644 index 00000000000..8acdd7cc5ac --- /dev/null +++ b/samples/client/petstore/python/SwaggerPetstore-python/Makefile @@ -0,0 +1,35 @@ +REQUIREMENTS_FILE=dev-requirements.txt +REQUIREMENTS_OUT=dev-requirements.txt.log +SETUP_OUT=*.egg-info + +virtualenv: +ifndef VIRTUAL_ENV + $(error Must be run inside of a virtualenv\ + http://docs.python-guide.org/en/latest/dev/virtualenvs/) +endif + +setup: virtualenv $(SETUP_OUT) + +$(SETUP_OUT): setup.py setup.cfg + python setup.py develop + touch $(SETUP_OUT) + +$(REQUIREMENTS_OUT): $(REQUIREMENTS_FILE) + pip install -r $(REQUIREMENTS_FILE) | tee -a $(REQUIREMENTS_OUT) + python setup.py develop + +clean: + find . -name "*.py[oc]" -delete + find . -name "__pycache__" -delete + rm -f $(REQUIREMENTS_OUT) + rm -rf $(SETUP_OUT) + +requirements: setup $(REQUIREMENTS_OUT) + +test: requirements + nosetests + +test-all: requirements + tox + + diff --git a/samples/client/petstore/python/SwaggerPetstore-python/README.md b/samples/client/petstore/python/SwaggerPetstore-python/README.md index 3b69aba0f82..833151c5769 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/README.md +++ b/samples/client/petstore/python/SwaggerPetstore-python/README.md @@ -38,5 +38,21 @@ TODO ## Tests -TODO +We use some external dependencies, multiple interpreters and code coverage analysis while running test suite. +Our Makefile handles much of this for you as long as you're running it inside of a [virtualenv](http://docs.python-guide.org/en/latest/dev/virtualenvs/): +```sh +$ make test +[... magically installs dependencies and runs tests on your virtualenv] +Ran 182 tests in 1.633s +OK (SKIP=6) +``` + +You can test in various python versions using: + +```sh +$ make test-all +[... tox creates a virtualenv for every platform and runs tests inside of each] +py27: commands succeeded +py34: commands succeeded +``` diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/__init__.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/__init__.py index 91427e9d686..9d4b2db3de5 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/__init__.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/__init__.py @@ -1,36 +1,16 @@ -#!/usr/bin/env python -"""Add all of the modules in the current directory to __all__""" from __future__ import absolute_import -import os - -# import models into package - +# import models into sdk package from .models.user import User - from .models.category import Category - from .models.pet import Pet - from .models.tag import Tag - from .models.order import Order - -# import apis into package - +# import apis into sdk package from .apis.user_api import UserApi - from .apis.pet_api import PetApi - from .apis.store_api import StoreApi - # import ApiClient from .swagger import ApiClient - -__all__ = [] - -for module in os.listdir(os.path.dirname(__file__)): - if module != '__init__.py' and module[-3:] == '.py': - __all__.append(module[:-3]) diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/__init__.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/__init__.py index e4f2bbde841..128b25dad82 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/__init__.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/__init__.py @@ -1,19 +1,7 @@ -#!/usr/bin/env python -"""Add all of the modules in the current directory to __all__""" from __future__ import absolute_import -import os - - +# import apis into api package from .user_api import UserApi - from .pet_api import PetApi - from .store_api import StoreApi - -__all__ = [] - -for module in os.listdir(os.path.dirname(__file__)): - if module != '__init__.py' and module[-3:] == '.py': - __all__.append(module[:-3]) diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py index 8a21d3900d1..e6bd35514f4 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/pet_api.py @@ -19,30 +19,31 @@ Copyright 2015 Reverb Technologies, Inc. NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. """ +from __future__ import absolute_import + import sys import os # python 2 and python 3 compatibility library from six import iteritems +from ..util import remove_none + class PetApi(object): def __init__(self, api_client): - self.api_client = api_client - + self.api_client = api_client def update_pet(self, **kwargs): """ Update an existing pet + :param Pet body: Pet object that needs to be added to the store - :param Pet body: Pet object that needs to be added to the store (required) - - :return: None """ - + all_params = ['body'] params = locals() @@ -55,16 +56,11 @@ class PetApi(object): resource_path = '/pet'.replace('{format}', 'json') method = 'PUT' - path_params = dict() - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict()) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = params.get('body') accepts = ['application/json', 'application/xml'] @@ -77,19 +73,16 @@ class PetApi(object): body=body_params, post_params=form_params, files=files, response=None) - def add_pet(self, **kwargs): """ Add a new pet to the store + :param Pet body: Pet object that needs to be added to the store - :param Pet body: Pet object that needs to be added to the store (required) - - :return: None """ - + all_params = ['body'] params = locals() @@ -102,16 +95,11 @@ class PetApi(object): resource_path = '/pet'.replace('{format}', 'json') method = 'POST' - path_params = dict() - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict()) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = params.get('body') accepts = ['application/json', 'application/xml'] @@ -124,19 +112,16 @@ class PetApi(object): body=body_params, post_params=form_params, files=files, response=None) - def find_pets_by_status(self, **kwargs): """ Finds Pets by status Multiple status values can be provided with comma seperated strings + :param list[str] status: Status values that need to be considered for filter - :param list[str] status: Status values that need to be considered for filter (required) - - :return: list[Pet] """ - + all_params = ['status'] params = locals() @@ -149,16 +134,11 @@ class PetApi(object): resource_path = '/pet/findByStatus'.replace('{format}', 'json') method = 'GET' - path_params = dict() - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict(status=params.get('status')) - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict()) + query_params = remove_none(dict(status=params.get('status'))) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = None accepts = ['application/json', 'application/xml'] @@ -173,19 +153,16 @@ class PetApi(object): return response - def find_pets_by_tags(self, **kwargs): """ Finds Pets by tags Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. + :param list[str] tags: Tags to filter by - :param list[str] tags: Tags to filter by (required) - - :return: list[Pet] """ - + all_params = ['tags'] params = locals() @@ -198,16 +175,11 @@ class PetApi(object): resource_path = '/pet/findByTags'.replace('{format}', 'json') method = 'GET' - path_params = dict() - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict(tags=params.get('tags')) - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict()) + query_params = remove_none(dict(tags=params.get('tags'))) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = None accepts = ['application/json', 'application/xml'] @@ -222,19 +194,20 @@ class PetApi(object): return response - - def get_pet_by_id(self, **kwargs): + def get_pet_by_id(self, pet_id, **kwargs): """ Find pet by ID Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions - :param int pet_id: ID of pet that needs to be fetched (required) - :return: Pet """ - + + # verify the required parameter 'pet_id' is set + if pet_id is None: + raise ValueError("Missing the required parameter `pet_id` when calling `get_pet_by_id`") + all_params = ['pet_id'] params = locals() @@ -247,16 +220,11 @@ class PetApi(object): resource_path = '/pet/{petId}'.replace('{format}', 'json') method = 'GET' - path_params = dict(petId=params.get('pet_id')) - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict(petId=params.get('pet_id'))) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = None accepts = ['application/json', 'application/xml'] @@ -271,23 +239,22 @@ class PetApi(object): return response - - def update_pet_with_form(self, **kwargs): + def update_pet_with_form(self, pet_id, **kwargs): """ Updates a pet in the store with form data - :param str pet_id: ID of pet that needs to be updated (required) + :param str name: Updated name of the pet + :param str status: Updated status of the pet - :param str name: Updated name of the pet (required) - - :param str status: Updated status of the pet (required) - - :return: None """ - + + # verify the required parameter 'pet_id' is set + if pet_id is None: + raise ValueError("Missing the required parameter `pet_id` when calling `update_pet_with_form`") + all_params = ['pet_id', 'name', 'status'] params = locals() @@ -300,16 +267,11 @@ class PetApi(object): resource_path = '/pet/{petId}'.replace('{format}', 'json') method = 'POST' - path_params = dict(petId=params.get('pet_id')) - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict(name=params.get('name'), status=params.get('status')) - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict(petId=params.get('pet_id'))) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict(name=params.get('name'), status=params.get('status'))) + files = remove_none(dict()) body_params = None accepts = ['application/json', 'application/xml'] @@ -322,21 +284,21 @@ class PetApi(object): body=body_params, post_params=form_params, files=files, response=None) - - def delete_pet(self, **kwargs): + def delete_pet(self, pet_id, **kwargs): """ Deletes a pet - - :param str api_key: (required) - + :param str api_key: :param int pet_id: Pet id to delete (required) - :return: None """ - + + # verify the required parameter 'pet_id' is set + if pet_id is None: + raise ValueError("Missing the required parameter `pet_id` when calling `delete_pet`") + all_params = ['api_key', 'pet_id'] params = locals() @@ -349,16 +311,11 @@ class PetApi(object): resource_path = '/pet/{petId}'.replace('{format}', 'json') method = 'DELETE' - path_params = dict(petId=params.get('pet_id')) - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict(api_key=params.get('api_key')) - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict(petId=params.get('pet_id'))) + query_params = remove_none(dict()) + header_params = remove_none(dict(api_key=params.get('api_key'))) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = None accepts = ['application/json', 'application/xml'] @@ -371,23 +328,22 @@ class PetApi(object): body=body_params, post_params=form_params, files=files, response=None) - - def upload_file(self, **kwargs): + def upload_file(self, pet_id, **kwargs): """ uploads an image - :param int pet_id: ID of pet to update (required) + :param str additional_metadata: Additional data to pass to server + :param file file: file to upload - :param str additional_metadata: Additional data to pass to server (required) - - :param file file: file to upload (required) - - :return: None """ - + + # verify the required parameter 'pet_id' is set + if pet_id is None: + raise ValueError("Missing the required parameter `pet_id` when calling `upload_file`") + all_params = ['pet_id', 'additional_metadata', 'file'] params = locals() @@ -400,16 +356,11 @@ class PetApi(object): resource_path = '/pet/{petId}/uploadImage'.replace('{format}', 'json') method = 'POST' - path_params = dict(petId=params.get('pet_id')) - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict(additionalMetadata=params.get('additional_metadata'), ) - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict(file=params.get('file')) - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict(petId=params.get('pet_id'))) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict(additionalMetadata=params.get('additional_metadata'), )) + files = remove_none(dict(file=params.get('file'))) body_params = None accepts = ['application/json', 'application/xml'] @@ -422,5 +373,12 @@ class PetApi(object): body=body_params, post_params=form_params, files=files, response=None) - + + + + + + + + diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/store_api.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/store_api.py index 37cfb524ad0..0df9a84fe75 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/store_api.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/store_api.py @@ -19,17 +19,20 @@ Copyright 2015 Reverb Technologies, Inc. NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. """ +from __future__ import absolute_import + import sys import os # python 2 and python 3 compatibility library from six import iteritems +from ..util import remove_none + class StoreApi(object): def __init__(self, api_client): - self.api_client = api_client - + self.api_client = api_client def get_inventory(self, **kwargs): """ @@ -37,10 +40,9 @@ class StoreApi(object): Returns a map of status codes to quantities - :return: map(String, int) """ - + all_params = [] params = locals() @@ -53,16 +55,11 @@ class StoreApi(object): resource_path = '/store/inventory'.replace('{format}', 'json') method = 'GET' - path_params = dict() - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict()) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = None accepts = ['application/json', 'application/xml'] @@ -77,19 +74,16 @@ class StoreApi(object): return response - def place_order(self, **kwargs): """ Place an order for a pet + :param Order body: order placed for purchasing the pet - :param Order body: order placed for purchasing the pet (required) - - :return: Order """ - + all_params = ['body'] params = locals() @@ -102,16 +96,11 @@ class StoreApi(object): resource_path = '/store/order'.replace('{format}', 'json') method = 'POST' - path_params = dict() - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict()) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = params.get('body') accepts = ['application/json', 'application/xml'] @@ -126,19 +115,20 @@ class StoreApi(object): return response - - def get_order_by_id(self, **kwargs): + def get_order_by_id(self, order_id, **kwargs): """ Find purchase order by ID For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - :param str order_id: ID of pet that needs to be fetched (required) - :return: Order """ - + + # verify the required parameter 'order_id' is set + if order_id is None: + raise ValueError("Missing the required parameter `order_id` when calling `get_order_by_id`") + all_params = ['order_id'] params = locals() @@ -151,16 +141,11 @@ class StoreApi(object): resource_path = '/store/order/{orderId}'.replace('{format}', 'json') method = 'GET' - path_params = dict(orderId=params.get('order_id')) - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict(orderId=params.get('order_id'))) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = None accepts = ['application/json', 'application/xml'] @@ -175,19 +160,20 @@ class StoreApi(object): return response - - def delete_order(self, **kwargs): + def delete_order(self, order_id, **kwargs): """ Delete purchase order by ID For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - :param str order_id: ID of the order that needs to be deleted (required) - :return: None """ - + + # verify the required parameter 'order_id' is set + if order_id is None: + raise ValueError("Missing the required parameter `order_id` when calling `delete_order`") + all_params = ['order_id'] params = locals() @@ -200,16 +186,11 @@ class StoreApi(object): resource_path = '/store/order/{orderId}'.replace('{format}', 'json') method = 'DELETE' - path_params = dict(orderId=params.get('order_id')) - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict(orderId=params.get('order_id'))) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = None accepts = ['application/json', 'application/xml'] @@ -222,5 +203,12 @@ class StoreApi(object): body=body_params, post_params=form_params, files=files, response=None) - + + + + + + + + diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/user_api.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/user_api.py index 158a03f14d2..720843bd508 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/user_api.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/apis/user_api.py @@ -19,30 +19,31 @@ Copyright 2015 Reverb Technologies, Inc. NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. """ +from __future__ import absolute_import + import sys import os # python 2 and python 3 compatibility library from six import iteritems +from ..util import remove_none + class UserApi(object): def __init__(self, api_client): - self.api_client = api_client - + self.api_client = api_client def create_user(self, **kwargs): """ Create user This can only be done by the logged in user. + :param User body: Created user object - :param User body: Created user object (required) - - :return: None """ - + all_params = ['body'] params = locals() @@ -55,16 +56,11 @@ class UserApi(object): resource_path = '/user'.replace('{format}', 'json') method = 'POST' - path_params = dict() - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict()) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = params.get('body') accepts = ['application/json', 'application/xml'] @@ -77,19 +73,16 @@ class UserApi(object): body=body_params, post_params=form_params, files=files, response=None) - def create_users_with_array_input(self, **kwargs): """ Creates list of users with given input array + :param list[User] body: List of user object - :param list[User] body: List of user object (required) - - :return: None """ - + all_params = ['body'] params = locals() @@ -102,16 +95,11 @@ class UserApi(object): resource_path = '/user/createWithArray'.replace('{format}', 'json') method = 'POST' - path_params = dict() - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict()) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = params.get('body') accepts = ['application/json', 'application/xml'] @@ -124,19 +112,16 @@ class UserApi(object): body=body_params, post_params=form_params, files=files, response=None) - def create_users_with_list_input(self, **kwargs): """ Creates list of users with given input array + :param list[User] body: List of user object - :param list[User] body: List of user object (required) - - :return: None """ - + all_params = ['body'] params = locals() @@ -149,16 +134,11 @@ class UserApi(object): resource_path = '/user/createWithList'.replace('{format}', 'json') method = 'POST' - path_params = dict() - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict()) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = params.get('body') accepts = ['application/json', 'application/xml'] @@ -171,21 +151,17 @@ class UserApi(object): body=body_params, post_params=form_params, files=files, response=None) - def login_user(self, **kwargs): """ Logs user into the system + :param str username: The user name for login + :param str password: The password for login in clear text - :param str username: The user name for login (required) - - :param str password: The password for login in clear text (required) - - :return: str """ - + all_params = ['username', 'password'] params = locals() @@ -198,16 +174,11 @@ class UserApi(object): resource_path = '/user/login'.replace('{format}', 'json') method = 'GET' - path_params = dict() - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict(username=params.get('username'), password=params.get('password')) - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict()) + query_params = remove_none(dict(username=params.get('username'), password=params.get('password'))) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = None accepts = ['application/json', 'application/xml'] @@ -222,17 +193,15 @@ class UserApi(object): return response - def logout_user(self, **kwargs): """ Logs out current logged in user session - :return: None """ - + all_params = [] params = locals() @@ -245,16 +214,11 @@ class UserApi(object): resource_path = '/user/logout'.replace('{format}', 'json') method = 'GET' - path_params = dict() - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict()) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = None accepts = ['application/json', 'application/xml'] @@ -267,19 +231,20 @@ class UserApi(object): body=body_params, post_params=form_params, files=files, response=None) - - def get_user_by_name(self, **kwargs): + def get_user_by_name(self, username, **kwargs): """ Get user by user name - :param str username: The name that needs to be fetched. Use user1 for testing. (required) - :return: User """ - + + # verify the required parameter 'username' is set + if username is None: + raise ValueError("Missing the required parameter `username` when calling `get_user_by_name`") + all_params = ['username'] params = locals() @@ -292,16 +257,11 @@ class UserApi(object): resource_path = '/user/{username}'.replace('{format}', 'json') method = 'GET' - path_params = dict(username=params.get('username')) - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict(username=params.get('username'))) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = None accepts = ['application/json', 'application/xml'] @@ -316,21 +276,21 @@ class UserApi(object): return response - - def update_user(self, **kwargs): + def update_user(self, username, **kwargs): """ Updated user This can only be done by the logged in user. - :param str username: name that need to be deleted (required) + :param User body: Updated user object - :param User body: Updated user object (required) - - :return: None """ - + + # verify the required parameter 'username' is set + if username is None: + raise ValueError("Missing the required parameter `username` when calling `update_user`") + all_params = ['username', 'body'] params = locals() @@ -343,16 +303,11 @@ class UserApi(object): resource_path = '/user/{username}'.replace('{format}', 'json') method = 'PUT' - path_params = dict(username=params.get('username')) - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict(username=params.get('username'))) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = params.get('body') accepts = ['application/json', 'application/xml'] @@ -365,19 +320,20 @@ class UserApi(object): body=body_params, post_params=form_params, files=files, response=None) - - def delete_user(self, **kwargs): + def delete_user(self, username, **kwargs): """ Delete user This can only be done by the logged in user. - :param str username: The name that needs to be deleted (required) - :return: None """ - + + # verify the required parameter 'username' is set + if username is None: + raise ValueError("Missing the required parameter `username` when calling `delete_user`") + all_params = ['username'] params = locals() @@ -390,16 +346,11 @@ class UserApi(object): resource_path = '/user/{username}'.replace('{format}', 'json') method = 'DELETE' - path_params = dict(username=params.get('username')) - path_params = {k: v for k, v in iteritems(path_params) if v} - query_params = dict() - query_params = {k: v for k, v in iteritems(query_params) if v} - header_params = dict() - header_params = {k: v for k, v in iteritems(header_params) if v} - form_params = dict() - form_params = {k: v for k, v in iteritems(form_params) if v} - files = dict() - files = {k: v for k, v in iteritems(files) if v} + path_params = remove_none(dict(username=params.get('username'))) + query_params = remove_none(dict()) + header_params = remove_none(dict()) + form_params = remove_none(dict()) + files = remove_none(dict()) body_params = None accepts = ['application/json', 'application/xml'] @@ -412,5 +363,12 @@ class UserApi(object): body=body_params, post_params=form_params, files=files, response=None) - + + + + + + + + diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/__init__.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/__init__.py index 96d0a37ec60..de307a26503 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/__init__.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/__init__.py @@ -1,23 +1,9 @@ -#!/usr/bin/env python -"""Add all of the modules in the current directory to __all__""" from __future__ import absolute_import -import os - - +# import models into model package from .user import User - from .category import Category - from .pet import Pet - from .tag import Tag - from .order import Order - -__all__ = [] - -for module in os.listdir(os.path.dirname(__file__)): - if module != '__init__.py' and module[-3:] == '.py': - __all__.append(module[:-3]) diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/category.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/category.py index c9c009dd68f..cfa9811c487 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/category.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/category.py @@ -23,7 +23,6 @@ class Category(object): Do not edit the class manually. """ - def __init__(self): """ Swagger model @@ -32,26 +31,20 @@ class Category(object): :param dict attributeMap: The key is attribute name and the value is json key in definition. """ self.swagger_types = { - 'id': 'int', - - 'name': 'str' - } self.attribute_map = { - 'id': 'id', - 'name': 'name' - } + + + self.id = None # int + + + self.name = None # str + + - - - self.id = None # int - - - self.name = None # str - diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/order.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/order.py index ab5384ee270..25c6e8f5462 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/order.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/order.py @@ -23,7 +23,6 @@ class Order(object): Do not edit the class manually. """ - def __init__(self): """ Swagger model @@ -32,59 +31,40 @@ class Order(object): :param dict attributeMap: The key is attribute name and the value is json key in definition. """ self.swagger_types = { - 'id': 'int', - - 'pet_id': 'int', - - 'quantity': 'int', - - 'ship_date': 'DateTime', - - 'status': 'str', - - 'complete': 'bool' - } self.attribute_map = { - 'id': 'id', - 'pet_id': 'petId', - 'quantity': 'quantity', - 'ship_date': 'shipDate', - 'status': 'status', - 'complete': 'complete' - } + + + self.id = None # int + + + self.pet_id = None # int + + + self.quantity = None # int + + + self.ship_date = None # DateTime + + # Order Status + self.status = None # str + + + self.complete = None # bool + + - - - self.id = None # int - - - self.pet_id = None # int - - - self.quantity = None # int - - - self.ship_date = None # DateTime - - #Order Status - - self.status = None # str - - - self.complete = None # bool - diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/pet.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/pet.py index 8266556946d..021dc00d0fd 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/pet.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/pet.py @@ -23,7 +23,6 @@ class Pet(object): Do not edit the class manually. """ - def __init__(self): """ Swagger model @@ -32,59 +31,40 @@ class Pet(object): :param dict attributeMap: The key is attribute name and the value is json key in definition. """ self.swagger_types = { - 'id': 'int', - - 'category': 'Category', - - 'name': 'str', - - 'photo_urls': 'list[str]', - - 'tags': 'list[Tag]', - - 'status': 'str' - } self.attribute_map = { - 'id': 'id', - 'category': 'category', - 'name': 'name', - 'photo_urls': 'photoUrls', - 'tags': 'tags', - 'status': 'status' - } + + + self.id = None # int + + + self.category = None # Category + + + self.name = None # str + + + self.photo_urls = None # list[str] + + + self.tags = None # list[Tag] + + # pet status in the store + self.status = None # str + + - - - self.id = None # int - - - self.category = None # Category - - - self.name = None # str - - - self.photo_urls = None # list[str] - - - self.tags = None # list[Tag] - - #pet status in the store - - self.status = None # str - diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/tag.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/tag.py index dd8f0c0057a..474aa1f03c9 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/tag.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/tag.py @@ -23,7 +23,6 @@ class Tag(object): Do not edit the class manually. """ - def __init__(self): """ Swagger model @@ -32,26 +31,20 @@ class Tag(object): :param dict attributeMap: The key is attribute name and the value is json key in definition. """ self.swagger_types = { - 'id': 'int', - - 'name': 'str' - } self.attribute_map = { - 'id': 'id', - 'name': 'name' - } + + + self.id = None # int + + + self.name = None # str + + - - - self.id = None # int - - - self.name = None # str - diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/user.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/user.py index 2fd47ee47e5..a37ad9f0879 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/user.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/models/user.py @@ -23,7 +23,6 @@ class User(object): Do not edit the class manually. """ - def __init__(self): """ Swagger model @@ -32,75 +31,50 @@ class User(object): :param dict attributeMap: The key is attribute name and the value is json key in definition. """ self.swagger_types = { - 'id': 'int', - - 'username': 'str', - - 'first_name': 'str', - - 'last_name': 'str', - - 'email': 'str', - - 'password': 'str', - - 'phone': 'str', - - 'user_status': 'int' - } self.attribute_map = { - 'id': 'id', - 'username': 'username', - 'first_name': 'firstName', - 'last_name': 'lastName', - 'email': 'email', - 'password': 'password', - 'phone': 'phone', - 'user_status': 'userStatus' - } + + + self.id = None # int + + + self.username = None # str + + + self.first_name = None # str + + + self.last_name = None # str + + + self.email = None # str + + + self.password = None # str + + + self.phone = None # str + + # User Status + self.user_status = None # int + + - - - self.id = None # int - - - self.username = None # str - - - self.first_name = None # str - - - self.last_name = None # str - - - self.email = None # str - - - self.password = None # str - - - self.phone = None # str - - #User Status - - self.user_status = None # int - diff --git a/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/util.py b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/util.py new file mode 100644 index 00000000000..1137a5d2d23 --- /dev/null +++ b/samples/client/petstore/python/SwaggerPetstore-python/SwaggerPetstore/util.py @@ -0,0 +1,17 @@ +from six import iteritems + +def remove_none(obj): + if isinstance(obj, (list, tuple, set)): + return type(obj)(remove_none(x) for x in obj if x is not None) + elif isinstance(obj, dict): + return type(obj)((remove_none(k), remove_none(v)) + for k, v in iteritems(obj) if k is not None and v is not None) + else: + return obj + + +def inspect_vars(obj): + if not hasattr(obj, '__dict__'): + return obj + else: + return {k: inspect_vars(getattr(obj, k)) for k in dir(obj)} diff --git a/samples/client/petstore/python/SwaggerPetstore-python/dev-requirements.txt b/samples/client/petstore/python/SwaggerPetstore-python/dev-requirements.txt new file mode 100644 index 00000000000..01a2e25f1c7 --- /dev/null +++ b/samples/client/petstore/python/SwaggerPetstore-python/dev-requirements.txt @@ -0,0 +1,4 @@ +nose +tox +coverage +randomize diff --git a/samples/client/petstore/python/SwaggerPetstore-python/pom.xml b/samples/client/petstore/python/SwaggerPetstore-python/pom.xml index c06d3a1cdf6..3ff908ed770 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/pom.xml +++ b/samples/client/petstore/python/SwaggerPetstore-python/pom.xml @@ -26,21 +26,6 @@ exec-maven-plugin 1.2.1 - - nose-install - pre-integration-test - - exec - - - pip - - install - nose - --user - - - nose-test integration-test @@ -48,9 +33,9 @@ exec - nosetests + make - -v + test-all diff --git a/samples/client/petstore/python/SwaggerPetstore-python/setup.cfg b/samples/client/petstore/python/SwaggerPetstore-python/setup.cfg new file mode 100644 index 00000000000..f1ef0cc4d0f --- /dev/null +++ b/samples/client/petstore/python/SwaggerPetstore-python/setup.cfg @@ -0,0 +1,10 @@ +[nosetests] +logging-clear-handlers=true +verbosity=2 +randomize=true +with-coverage=true +cover-package=SwaggerPetstore +cover-erase=true + +[flake8] +max-line-length=99 diff --git a/samples/client/petstore/python/SwaggerPetstore-python/setup.py b/samples/client/petstore/python/SwaggerPetstore-python/setup.py index 946274c5acd..fd0b786efa3 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/setup.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/setup.py @@ -30,3 +30,11 @@ setup( ) + + + + + + + + diff --git a/samples/client/petstore/python/SwaggerPetstore-python/tests/test_pet_api.py b/samples/client/petstore/python/SwaggerPetstore-python/tests/test_pet_api.py index 92b4e70dbce..88a19f61d3c 100644 --- a/samples/client/petstore/python/SwaggerPetstore-python/tests/test_pet_api.py +++ b/samples/client/petstore/python/SwaggerPetstore-python/tests/test_pet_api.py @@ -31,15 +31,15 @@ class PetApiTests(unittest.TestCase): def setUpModels(self): self.category = SwaggerPetstore.Category() - self.category.id = 1010 + self.category.id = int(time.time()) self.category.name = "dog" self.tag = SwaggerPetstore.Tag() - self.tag.id = 1010 + self.tag.id = int(time.time()) self.tag.name = "blank" self.pet = SwaggerPetstore.Pet() - self.pet.id = 1010 + self.pet.id = int(time.time()) self.pet.name = "hello kity" - self.pet.photo_urls = ["sample urls"] + self.pet.photo_urls = ["http://foo.bar.com/1", "http://foo.bar.com/2"] self.pet.status = "sold" self.pet.category = self.category self.pet.tags = [self.tag] @@ -49,48 +49,55 @@ class PetApiTests(unittest.TestCase): self.test_file_dir = os.path.realpath(self.test_file_dir) self.foo = os.path.join(self.test_file_dir, "foo.png") - def test_1_add_pet(self): - try: - self.pet_api.add_pet(body=self.pet) - except ErrorResponse as e: - self.fail("add_pet() raised {0} unexpectedly".format(type(e))) + def test_add_pet_and_get_pet_by_id(self): + self.pet_api.add_pet(body=self.pet) - def test_2_get_pet_by_id(self): - self.assertEqual( - dir(self.pet_api.get_pet_by_id(pet_id=self.pet.id)), - dir(self.pet) - ) + fetched = self.pet_api.get_pet_by_id(pet_id=self.pet.id) + self.assertIsNotNone(fetched) + self.assertEqual(self.pet.id, fetched.id) + self.assertIsNotNone(fetched.category) + self.assertEqual(self.pet.category.name, fetched.category.name) - def test_3_update_pet(self): - try: - self.pet.name = "hello kity with updated" - self.pet_api.update_pet(body=self.pet) - except ErrorResponse as e: - self.fail("update_pet() raised {0} unexpectedly".format(type(e))) + def test_update_pet(self): + self.pet.name = "hello kity with updated" + self.pet_api.update_pet(body=self.pet) - def test_4_find_pets_by_status(self): + fetched = self.pet_api.get_pet_by_id(pet_id=self.pet.id) + self.assertIsNotNone(fetched) + self.assertEqual(self.pet.id, fetched.id) + self.assertEqual(self.pet.name, fetched.name) + self.assertIsNotNone(fetched.category) + self.assertEqual(fetched.category.name, self.pet.category.name) + + def test_find_pets_by_status(self): + self.pet_api.add_pet(body=self.pet) + self.assertIn( - dir(self.pet), - list(map(dir, self.pet_api.find_pets_by_status(status=["sold"]))) + self.pet.id, + list(map(lambda x: getattr(x, 'id'), self.pet_api.find_pets_by_status(status=[self.pet.status]))) ) - def test_5_find_pets_by_tags(self): + def test_find_pets_by_tags(self): + self.pet_api.add_pet(body=self.pet) + self.assertIn( - dir(self.pet), - list(map(dir, self.pet_api.find_pets_by_tags(tags=["blank"]))) + self.pet.id, + list(map(lambda x: getattr(x, 'id'), self.pet_api.find_pets_by_tags(tags=[self.tag.name]))) ) - def test_6_update_pet_with_form(self): - try: - name = "hello kity with form updated" - status = "pending" - self.pet_api.update_pet_with_form( - pet_id=self.pet.id, name=name, status=status - ) - except ErrorResponse as e: - self.fail("update_pet_with_form() raised {0} unexpectedly".format(type(e))) + def test_update_pet_with_form(self): + self.pet_api.add_pet(body=self.pet) + + name = "hello kity with form updated" + status = "pending" + self.pet_api.update_pet_with_form(pet_id=self.pet.id, name=name, status=status) - def test_7_upload_file(self): + fetched = self.pet_api.get_pet_by_id(pet_id=self.pet.id) + self.assertEqual(self.pet.id, fetched.id) + self.assertEqual(self.pet.name, fetched.name) + self.assertEqual(self.pet.status, fetched.status) + + def test_upload_file(self): try: additional_metadata = "special" self.pet_api.upload_file( @@ -101,13 +108,20 @@ class PetApiTests(unittest.TestCase): except ErrorResponse as e: self.fail("upload_file() raised {0} unexpectedly".format(type(e))) - def test_8_delete_pet(self): + def test_delete_pet(self): + self.pet_api.add_pet(body=self.pet) + self.pet_api.delete_pet(pet_id=self.pet.id, api_key="special-key") + try: - api_key = "special-key" - self.pet_api.delete_pet(pet_id=self.pet.id, api_key=api_key) + self.pet_api.get_pet_by_id(pet_id=self.pet.id) + raise "expected an error" except ErrorResponse as e: - self.fail("delete_pet() raised {0} unexpectedly".format(type(e))) - + self.assertEqual(404, e.status) if __name__ == '__main__': unittest.main() + + + + + diff --git a/samples/client/petstore/python/SwaggerPetstore-python/tox.ini b/samples/client/petstore/python/SwaggerPetstore-python/tox.ini new file mode 100644 index 00000000000..9f62f3845bf --- /dev/null +++ b/samples/client/petstore/python/SwaggerPetstore-python/tox.ini @@ -0,0 +1,10 @@ +[tox] +envlist = py27, py34 + +[testenv] +deps= -r{toxinidir}/dev-requirements.txt +commands= + nosetests \ + [] +setenv = + PYTHONWARNINGS=always::DeprecationWarning