diff --git a/bin/python-flask-petstore.sh b/bin/python-flask-petstore.sh index 633ffc8991a..7aea96fb2ed 100755 --- a/bin/python-flask-petstore.sh +++ b/bin/python-flask-petstore.sh @@ -26,7 +26,7 @@ fi # if you've executed sbt assembly previously it will use that instead. export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" -ags="$@ generate -t modules/openapi-generator/src/main/resources/flaskConnexion -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml -l python-flask -o samples/server/petstore/flaskConnexion -Dservice" +ags="generate -t modules/openapi-generator/src/main/resources/flaskConnexion -i modules/openapi-generator/src/test/resources/2_0/petstore.yaml -l python-flask -o samples/server/petstore/flaskConnexion -Dservice $@" rm -rf samples/server/petstore/flaskConnexion/* java $JAVA_OPTS -jar $executable $ags diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index 13378164aec..4d22244c239 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -4130,7 +4130,7 @@ public class DefaultCodegen implements CodegenConfig { codegenModel = fromModel(name, schema, schemas); } if (codegenModel != null && !codegenModel.emptyVars) { - codegenParameter.paramName = toParamName(codegenModel.name); + codegenParameter.paramName = toParamName(codegenModel.classname); codegenParameter.baseType = codegenModel.classname; codegenParameter.dataType = getTypeDeclaration(codegenModel.classname); codegenParameter.description = codegenModel.description; @@ -4141,6 +4141,7 @@ public class DefaultCodegen implements CodegenConfig { codegenParameter.baseType = codegenProperty.baseType; codegenParameter.dataType = codegenProperty.datatype; codegenParameter.description = codegenProperty.description; + codegenParameter.paramName = toParamName(codegenProperty.baseType); if (codegenProperty.complexType != null) { imports.add(codegenProperty.complexType); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFlaskConnexionServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFlaskConnexionServerCodegen.java index 9c854ff50ba..d29d77431e4 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFlaskConnexionServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/PythonFlaskConnexionServerCodegen.java @@ -405,18 +405,13 @@ public class PythonFlaskConnexionServerCodegen extends DefaultCodegen implements @Override public String toParamName(String name) { - // don't do name =removeNonNameElementToCamelCase(name); // this breaks connexion, which does not modify param names before sending them - if (reservedWords.contains(name)) { - return escapeReservedWord(name); + // to avoid conflicts with 'callback' parameter for async call + if ("callback".equals(name)) { + return "param_callback"; } - // sanitize the param name but don't underscore it since it's used for request mapping - String paramName = sanitizeName(name); - if (!paramName.equals(name)) { - LOGGER.warn(name + " (parameter name) cannot be used as parameter name with flask-connexion and was sanitized as " + paramName); - } - // Param name is already sanitized in openapi spec processing - return paramName; + // should be the same as variable name + return toVarName(name); } @Override diff --git a/samples/server/petstore/flaskConnexion/.swagger-codegen/VERSION b/samples/server/petstore/flaskConnexion/.swagger-codegen/VERSION index f9f7450d135..096bf47efe3 100644 --- a/samples/server/petstore/flaskConnexion/.swagger-codegen/VERSION +++ b/samples/server/petstore/flaskConnexion/.swagger-codegen/VERSION @@ -1 +1 @@ -2.3.0-SNAPSHOT \ No newline at end of file +3.0.0-SNAPSHOT \ No newline at end of file diff --git a/samples/server/petstore/flaskConnexion/README.md b/samples/server/petstore/flaskConnexion/README.md index 000d12df582..f623a2a02d8 100644 --- a/samples/server/petstore/flaskConnexion/README.md +++ b/samples/server/petstore/flaskConnexion/README.md @@ -27,7 +27,7 @@ http://localhost:8080/v2/ui/ Your Swagger definition lives here: ``` -http://localhost:8080/v2/swagger.json +http://localhost:8080/v2/openapi.json ``` To launch the integration tests, use tox: diff --git a/samples/server/petstore/flaskConnexion/setup.py b/samples/server/petstore/flaskConnexion/setup.py index be5dce52ab7..a7f6ac9e413 100644 --- a/samples/server/petstore/flaskConnexion/setup.py +++ b/samples/server/petstore/flaskConnexion/setup.py @@ -21,10 +21,10 @@ setup( description="Swagger Petstore", author_email="apiteam@swagger.io", url="", - keywords=["Swagger", "Swagger Petstore"], + keywords=["OpenAPI", "Swagger Petstore"], install_requires=REQUIRES, packages=find_packages(), - package_data={'': ['swagger/swagger.yaml']}, + package_data={'': ['openapi/openapi.yaml']}, include_package_data=True, entry_points={ 'console_scripts': ['swagger_server=swagger_server.__main__:main']}, diff --git a/samples/server/petstore/flaskConnexion/swagger_server/__main__.py b/samples/server/petstore/flaskConnexion/swagger_server/__main__.py index 734cc4b3dd2..a2a4e9b0311 100644 --- a/samples/server/petstore/flaskConnexion/swagger_server/__main__.py +++ b/samples/server/petstore/flaskConnexion/swagger_server/__main__.py @@ -6,9 +6,9 @@ from swagger_server import encoder def main(): - app = connexion.App(__name__, specification_dir='./swagger/') + app = connexion.App(__name__, specification_dir='./openapi/') app.app.json_encoder = encoder.JSONEncoder - app.add_api('swagger.yaml', arguments={'title': 'Swagger Petstore'}) + app.add_api('openapi.yaml', arguments={'title': 'Swagger Petstore'}) app.run(port=8080) diff --git a/samples/server/petstore/flaskConnexion/swagger_server/controllers/pet_controller.py b/samples/server/petstore/flaskConnexion/swagger_server/controllers/pet_controller.py index 5de865c908a..adedc37e1c8 100644 --- a/samples/server/petstore/flaskConnexion/swagger_server/controllers/pet_controller.py +++ b/samples/server/petstore/flaskConnexion/swagger_server/controllers/pet_controller.py @@ -6,28 +6,28 @@ from swagger_server.models.pet import Pet # noqa: E501 from swagger_server import util -def add_pet(body): # noqa: E501 +def add_pet(pet): # noqa: E501 """Add a new pet to the store # noqa: E501 - :param body: Pet object that needs to be added to the store - :type body: dict | bytes + :param pet: Pet object that needs to be added to the store + :type pet: dict | bytes :rtype: None """ if connexion.request.is_json: - body = Pet.from_dict(connexion.request.get_json()) # noqa: E501 + pet = Pet.from_dict(connexion.request.get_json()) # noqa: E501 return 'do some magic!' -def delete_pet(petId, api_key=None): # noqa: E501 +def delete_pet(pet_id, api_key=None): # noqa: E501 """Deletes a pet # noqa: E501 - :param petId: Pet id to delete - :type petId: int + :param pet_id: Pet id to delete + :type pet_id: int :param api_key: :type api_key: str @@ -62,41 +62,41 @@ def find_pets_by_tags(tags): # noqa: E501 return 'do some magic!' -def get_pet_by_id(petId): # noqa: E501 +def get_pet_by_id(pet_id): # noqa: E501 """Find pet by ID Returns a single pet # noqa: E501 - :param petId: ID of pet to return - :type petId: int + :param pet_id: ID of pet to return + :type pet_id: int :rtype: Pet """ return 'do some magic!' -def update_pet(body): # noqa: E501 +def update_pet(pet): # noqa: E501 """Update an existing pet # noqa: E501 - :param body: Pet object that needs to be added to the store - :type body: dict | bytes + :param pet: Pet object that needs to be added to the store + :type pet: dict | bytes :rtype: None """ if connexion.request.is_json: - body = Pet.from_dict(connexion.request.get_json()) # noqa: E501 + pet = Pet.from_dict(connexion.request.get_json()) # noqa: E501 return 'do some magic!' -def update_pet_with_form(petId, name=None, status=None): # noqa: E501 +def update_pet_with_form(pet_id, name=None, status=None): # noqa: E501 """Updates a pet in the store with form data # noqa: E501 - :param petId: ID of pet that needs to be updated - :type petId: int + :param pet_id: ID of pet that needs to be updated + :type pet_id: int :param name: Updated name of the pet :type name: str :param status: Updated status of the pet @@ -107,17 +107,17 @@ def update_pet_with_form(petId, name=None, status=None): # noqa: E501 return 'do some magic!' -def upload_file(petId, additionalMetadata=None, file=None): # noqa: E501 +def upload_file(pet_id, additional_metadata=None, file=None): # noqa: E501 """uploads an image # noqa: E501 - :param petId: ID of pet to update - :type petId: int - :param additionalMetadata: Additional data to pass to server - :type additionalMetadata: str + :param pet_id: ID of pet to update + :type pet_id: int + :param additional_metadata: Additional data to pass to server + :type additional_metadata: str :param file: file to upload - :type file: werkzeug.datastructures.FileStorage + :type file: str :rtype: ApiResponse """ diff --git a/samples/server/petstore/flaskConnexion/swagger_server/controllers/store_controller.py b/samples/server/petstore/flaskConnexion/swagger_server/controllers/store_controller.py index eae3546c21e..80c005edc0d 100644 --- a/samples/server/petstore/flaskConnexion/swagger_server/controllers/store_controller.py +++ b/samples/server/petstore/flaskConnexion/swagger_server/controllers/store_controller.py @@ -5,13 +5,13 @@ from swagger_server.models.order import Order # noqa: E501 from swagger_server import util -def delete_order(orderId): # noqa: E501 +def delete_order(order_id): # noqa: E501 """Delete purchase order by ID For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors # noqa: E501 - :param orderId: ID of the order that needs to be deleted - :type orderId: str + :param order_id: ID of the order that needs to be deleted + :type order_id: str :rtype: None """ @@ -29,29 +29,29 @@ def get_inventory(): # noqa: E501 return 'do some magic!' -def get_order_by_id(orderId): # noqa: E501 +def get_order_by_id(order_id): # noqa: E501 """Find purchase order by ID For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions # noqa: E501 - :param orderId: ID of pet that needs to be fetched - :type orderId: int + :param order_id: ID of pet that needs to be fetched + :type order_id: int :rtype: Order """ return 'do some magic!' -def place_order(body): # noqa: E501 +def place_order(order): # noqa: E501 """Place an order for a pet # noqa: E501 - :param body: order placed for purchasing the pet - :type body: dict | bytes + :param order: order placed for purchasing the pet + :type order: dict | bytes :rtype: Order """ if connexion.request.is_json: - body = Order.from_dict(connexion.request.get_json()) # noqa: E501 + order = Order.from_dict(connexion.request.get_json()) # noqa: E501 return 'do some magic!' diff --git a/samples/server/petstore/flaskConnexion/swagger_server/controllers/user_controller.py b/samples/server/petstore/flaskConnexion/swagger_server/controllers/user_controller.py index c7c3ee3519a..48cddf17a4f 100644 --- a/samples/server/petstore/flaskConnexion/swagger_server/controllers/user_controller.py +++ b/samples/server/petstore/flaskConnexion/swagger_server/controllers/user_controller.py @@ -5,48 +5,48 @@ from swagger_server.models.user import User # noqa: E501 from swagger_server import util -def create_user(body): # noqa: E501 +def create_user(user): # noqa: E501 """Create user This can only be done by the logged in user. # noqa: E501 - :param body: Created user object - :type body: dict | bytes + :param user: Created user object + :type user: dict | bytes :rtype: None """ if connexion.request.is_json: - body = User.from_dict(connexion.request.get_json()) # noqa: E501 + user = User.from_dict(connexion.request.get_json()) # noqa: E501 return 'do some magic!' -def create_users_with_array_input(body): # noqa: E501 +def create_users_with_array_input(user): # noqa: E501 """Creates list of users with given input array # noqa: E501 - :param body: List of user object - :type body: list | bytes + :param user: List of user object + :type user: list | bytes :rtype: None """ if connexion.request.is_json: - body = [User.from_dict(d) for d in connexion.request.get_json()] # noqa: E501 + user = [User.from_dict(d) for d in connexion.request.get_json()] # noqa: E501 return 'do some magic!' -def create_users_with_list_input(body): # noqa: E501 +def create_users_with_list_input(user): # noqa: E501 """Creates list of users with given input array # noqa: E501 - :param body: List of user object - :type body: list | bytes + :param user: List of user object + :type user: list | bytes :rtype: None """ if connexion.request.is_json: - body = [User.from_dict(d) for d in connexion.request.get_json()] # noqa: E501 + user = [User.from_dict(d) for d in connexion.request.get_json()] # noqa: E501 return 'do some magic!' @@ -68,7 +68,7 @@ def get_user_by_name(username): # noqa: E501 # noqa: E501 - :param username: The name that needs to be fetched. Use user1 for testing. + :param username: The name that needs to be fetched. Use user1 for testing. :type username: str :rtype: User @@ -102,18 +102,18 @@ def logout_user(): # noqa: E501 return 'do some magic!' -def update_user(username, body): # noqa: E501 +def update_user(username, user): # noqa: E501 """Updated user This can only be done by the logged in user. # noqa: E501 :param username: name that need to be deleted :type username: str - :param body: Updated user object - :type body: dict | bytes + :param user: Updated user object + :type user: dict | bytes :rtype: None """ if connexion.request.is_json: - body = User.from_dict(connexion.request.get_json()) # noqa: E501 + user = User.from_dict(connexion.request.get_json()) # noqa: E501 return 'do some magic!' diff --git a/samples/server/petstore/flaskConnexion/swagger_server/openapi/openapi.yaml b/samples/server/petstore/flaskConnexion/swagger_server/openapi/openapi.yaml new file mode 100644 index 00000000000..89e8be27058 --- /dev/null +++ b/samples/server/petstore/flaskConnexion/swagger_server/openapi/openapi.yaml @@ -0,0 +1,742 @@ +openapi: 3.0.1 +info: + title: Swagger Petstore + description: 'This is a sample server Petstore server. You can find out more about + Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For + this sample, you can use the api key `special-key` to test the authorization filters.' + termsOfService: http://swagger.io/terms/ + contact: + email: apiteam@swagger.io + license: + name: Apache-2.0 + url: http://www.apache.org/licenses/LICENSE-2.0.html + version: 1.0.0 +externalDocs: + description: Find out more about Swagger + url: http://swagger.io +servers: +- url: http://petstore.swagger.io/v2 +tags: +- name: pet + description: Everything about your Pets + externalDocs: + description: Find out more + url: http://swagger.io +- name: store + description: Access to Petstore orders +- name: user + description: Operations about user + externalDocs: + description: Find out more about our store + url: http://swagger.io +paths: + /pet: + put: + tags: + - pet + summary: Update an existing pet + operationId: update_pet + requestBody: + description: Pet object that needs to be added to the store + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + required: true + responses: + 400: + description: Invalid ID supplied + content: {} + 404: + description: Pet not found + content: {} + 405: + description: Validation exception + content: {} + security: + - petstore_auth: + - write:pets + - read:pets + x-swagger-router-controller: swagger_server.controllers.pet_controller + post: + tags: + - pet + summary: Add a new pet to the store + operationId: add_pet + requestBody: + description: Pet object that needs to be added to the store + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + required: true + responses: + 405: + description: Invalid input + content: {} + security: + - petstore_auth: + - write:pets + - read:pets + x-swagger-router-controller: swagger_server.controllers.pet_controller + /pet/findByStatus: + get: + tags: + - pet + summary: Finds Pets by status + description: Multiple status values can be provided with comma separated strings + operationId: find_pets_by_status + parameters: + - name: status + in: query + description: Status values that need to be considered for filter + required: true + explode: false + schema: + type: array + items: + type: string + default: available + enum: + - available + - pending + - sold + responses: + 200: + description: successful operation + content: + application/xml: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + 400: + description: Invalid status value + content: {} + security: + - petstore_auth: + - write:pets + - read:pets + x-swagger-router-controller: swagger_server.controllers.pet_controller + /pet/findByTags: + get: + tags: + - pet + summary: Finds Pets by tags + description: Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + operationId: find_pets_by_tags + parameters: + - name: tags + in: query + description: Tags to filter by + required: true + explode: false + schema: + type: array + items: + type: string + responses: + 200: + description: successful operation + content: + application/xml: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + 400: + description: Invalid tag value + content: {} + deprecated: true + security: + - petstore_auth: + - write:pets + - read:pets + x-swagger-router-controller: swagger_server.controllers.pet_controller + /pet/{petId}: + get: + tags: + - pet + summary: Find pet by ID + description: Returns a single pet + operationId: get_pet_by_id + parameters: + - name: petId + in: path + description: ID of pet to return + required: true + schema: + type: integer + format: int64 + responses: + 200: + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/json: + schema: + $ref: '#/components/schemas/Pet' + 400: + description: Invalid ID supplied + content: {} + 404: + description: Pet not found + content: {} + security: + - api_key: [] + x-swagger-router-controller: swagger_server.controllers.pet_controller + post: + tags: + - pet + summary: Updates a pet in the store with form data + operationId: update_pet_with_form + parameters: + - name: petId + in: path + description: ID of pet that needs to be updated + required: true + schema: + type: integer + format: int64 + requestBody: + content: + application/x-www-form-urlencoded: + schema: + properties: + name: + type: string + description: Updated name of the pet + status: + type: string + description: Updated status of the pet + responses: + 405: + description: Invalid input + content: {} + security: + - petstore_auth: + - write:pets + - read:pets + x-swagger-router-controller: swagger_server.controllers.pet_controller + delete: + tags: + - pet + summary: Deletes a pet + operationId: delete_pet + parameters: + - name: api_key + in: header + schema: + type: string + - name: petId + in: path + description: Pet id to delete + required: true + schema: + type: integer + format: int64 + responses: + 400: + description: Invalid pet value + content: {} + security: + - petstore_auth: + - write:pets + - read:pets + x-swagger-router-controller: swagger_server.controllers.pet_controller + /pet/{petId}/uploadImage: + post: + tags: + - pet + summary: uploads an image + operationId: upload_file + parameters: + - name: petId + in: path + description: ID of pet to update + required: true + schema: + type: integer + format: int64 + requestBody: + content: + multipart/form-data: + schema: + properties: + additionalMetadata: + type: string + description: Additional data to pass to server + file: + type: string + description: file to upload + format: binary + responses: + 200: + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/ApiResponse' + security: + - petstore_auth: + - write:pets + - read:pets + x-swagger-router-controller: swagger_server.controllers.pet_controller + /store/inventory: + get: + tags: + - store + summary: Returns pet inventories by status + description: Returns a map of status codes to quantities + operationId: get_inventory + responses: + 200: + description: successful operation + content: + application/json: + schema: + type: object + additionalProperties: + type: integer + format: int32 + security: + - api_key: [] + x-swagger-router-controller: swagger_server.controllers.store_controller + /store/order: + post: + tags: + - store + summary: Place an order for a pet + operationId: place_order + requestBody: + description: order placed for purchasing the pet + content: + '*/*': + schema: + $ref: '#/components/schemas/Order' + required: true + responses: + 200: + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Order' + application/json: + schema: + $ref: '#/components/schemas/Order' + 400: + description: Invalid Order + content: {} + x-swagger-router-controller: swagger_server.controllers.store_controller + /store/order/{orderId}: + get: + tags: + - store + summary: Find purchase order by ID + description: For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions + operationId: get_order_by_id + parameters: + - name: orderId + in: path + description: ID of pet that needs to be fetched + required: true + schema: + maximum: 5 + minimum: 1 + type: integer + format: int64 + responses: + 200: + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/Order' + application/json: + schema: + $ref: '#/components/schemas/Order' + 400: + description: Invalid ID supplied + content: {} + 404: + description: Order not found + content: {} + x-swagger-router-controller: swagger_server.controllers.store_controller + delete: + tags: + - store + summary: Delete purchase order by ID + description: For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + operationId: delete_order + parameters: + - name: orderId + in: path + description: ID of the order that needs to be deleted + required: true + schema: + type: string + responses: + 400: + description: Invalid ID supplied + content: {} + 404: + description: Order not found + content: {} + x-swagger-router-controller: swagger_server.controllers.store_controller + /user: + post: + tags: + - user + summary: Create user + description: This can only be done by the logged in user. + operationId: create_user + requestBody: + description: Created user object + content: + '*/*': + schema: + $ref: '#/components/schemas/User' + required: true + responses: + default: + description: successful operation + content: {} + x-swagger-router-controller: swagger_server.controllers.user_controller + /user/createWithArray: + post: + tags: + - user + summary: Creates list of users with given input array + operationId: create_users_with_array_input + requestBody: + description: List of user object + content: + '*/*': + schema: + type: array + items: + $ref: '#/components/schemas/User' + required: true + responses: + default: + description: successful operation + content: {} + x-swagger-router-controller: swagger_server.controllers.user_controller + /user/createWithList: + post: + tags: + - user + summary: Creates list of users with given input array + operationId: create_users_with_list_input + requestBody: + description: List of user object + content: + '*/*': + schema: + type: array + items: + $ref: '#/components/schemas/User' + required: true + responses: + default: + description: successful operation + content: {} + x-swagger-router-controller: swagger_server.controllers.user_controller + /user/login: + get: + tags: + - user + summary: Logs user into the system + operationId: login_user + parameters: + - name: username + in: query + description: The user name for login + required: true + schema: + type: string + - name: password + in: query + description: The password for login in clear text + required: true + schema: + type: string + responses: + 200: + description: successful operation + headers: + X-Rate-Limit: + description: calls per hour allowed by the user + schema: + type: integer + format: int32 + X-Expires-After: + description: date in UTC when toekn expires + schema: + type: string + format: date-time + content: + application/xml: + schema: + type: string + application/json: + schema: + type: string + 400: + description: Invalid username/password supplied + content: {} + x-swagger-router-controller: swagger_server.controllers.user_controller + /user/logout: + get: + tags: + - user + summary: Logs out current logged in user session + operationId: logout_user + responses: + default: + description: successful operation + content: {} + x-swagger-router-controller: swagger_server.controllers.user_controller + /user/{username}: + get: + tags: + - user + summary: Get user by user name + operationId: get_user_by_name + parameters: + - name: username + in: path + description: The name that needs to be fetched. Use user1 for testing. + required: true + schema: + type: string + responses: + 200: + description: successful operation + content: + application/xml: + schema: + $ref: '#/components/schemas/User' + application/json: + schema: + $ref: '#/components/schemas/User' + 400: + description: Invalid username supplied + content: {} + 404: + description: User not found + content: {} + x-swagger-router-controller: swagger_server.controllers.user_controller + put: + tags: + - user + summary: Updated user + description: This can only be done by the logged in user. + operationId: update_user + parameters: + - name: username + in: path + description: name that need to be deleted + required: true + schema: + type: string + requestBody: + description: Updated user object + content: + '*/*': + schema: + $ref: '#/components/schemas/User' + required: true + responses: + 400: + description: Invalid user supplied + content: {} + 404: + description: User not found + content: {} + x-swagger-router-controller: swagger_server.controllers.user_controller + delete: + tags: + - user + summary: Delete user + description: This can only be done by the logged in user. + operationId: delete_user + parameters: + - name: username + in: path + description: The name that needs to be deleted + required: true + schema: + type: string + responses: + 400: + description: Invalid username supplied + content: {} + 404: + description: User not found + content: {} + x-swagger-router-controller: swagger_server.controllers.user_controller +components: + schemas: + Order: + title: Pet Order + type: object + properties: + id: + type: integer + format: int64 + petId: + type: integer + format: int64 + quantity: + type: integer + format: int32 + shipDate: + type: string + format: date-time + status: + type: string + description: Order Status + enum: + - placed + - approved + - delivered + complete: + type: boolean + default: false + description: An order for a pets from the pet store + xml: + name: Order + Category: + title: Pet category + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + description: A category for a pet + xml: + name: Category + User: + title: a User + type: object + properties: + id: + type: integer + format: int64 + username: + type: string + firstName: + type: string + lastName: + type: string + email: + type: string + password: + type: string + phone: + type: string + userStatus: + type: integer + description: User Status + format: int32 + description: A User who is purchasing from the pet store + xml: + name: User + Tag: + title: Pet Tag + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + description: A tag for a pet + xml: + name: Tag + Pet: + title: a Pet + required: + - name + - photoUrls + type: object + properties: + id: + type: integer + format: int64 + category: + $ref: '#/components/schemas/Category' + name: + type: string + example: doggie + photoUrls: + type: array + xml: + name: photoUrl + wrapped: true + items: + type: string + tags: + type: array + xml: + name: tag + wrapped: true + items: + $ref: '#/components/schemas/Tag' + status: + type: string + description: pet status in the store + enum: + - available + - pending + - sold + description: A pet for sale in the pet store + xml: + name: Pet + ApiResponse: + title: An uploaded response + type: object + properties: + code: + type: integer + format: int32 + type: + type: string + message: + type: string + description: Describes the result of uploading an image resource + securitySchemes: + petstore_auth: + type: oauth2 + flows: + implicit: + authorizationUrl: http://petstore.swagger.io/api/oauth/dialog + scopes: + write:pets: modify pets in your account + read:pets: read your pets + api_key: + type: apiKey + name: api_key + in: header diff --git a/samples/server/petstore/flaskConnexion/swagger_server/swagger/swagger.yaml b/samples/server/petstore/flaskConnexion/swagger_server/swagger/swagger.yaml deleted file mode 100644 index 836d533de5c..00000000000 --- a/samples/server/petstore/flaskConnexion/swagger_server/swagger/swagger.yaml +++ /dev/null @@ -1,775 +0,0 @@ ---- -swagger: "2.0" -info: - description: "This is a sample server Petstore server. You can find out more about\ - \ Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).\ - \ For this sample, you can use the api key `special-key` to test the authorization\ - \ filters." - version: "1.0.0" - title: "Swagger Petstore" - termsOfService: "http://swagger.io/terms/" - contact: - email: "apiteam@swagger.io" - license: - name: "Apache-2.0" - url: "http://www.apache.org/licenses/LICENSE-2.0.html" -host: "petstore.swagger.io" -basePath: "/v2" -tags: -- name: "pet" - description: "Everything about your Pets" - externalDocs: - description: "Find out more" - url: "http://swagger.io" -- name: "store" - description: "Access to Petstore orders" -- name: "user" - description: "Operations about user" - externalDocs: - description: "Find out more about our store" - url: "http://swagger.io" -schemes: -- "http" -paths: - /pet: - post: - tags: - - "pet" - summary: "Add a new pet to the store" - description: "" - operationId: "add_pet" - consumes: - - "application/json" - - "application/xml" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "Pet object that needs to be added to the store" - required: true - schema: - $ref: "#/definitions/Pet" - responses: - 405: - description: "Invalid input" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - x-swagger-router-controller: "swagger_server.controllers.pet_controller" - put: - tags: - - "pet" - summary: "Update an existing pet" - description: "" - operationId: "update_pet" - consumes: - - "application/json" - - "application/xml" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "Pet object that needs to be added to the store" - required: true - schema: - $ref: "#/definitions/Pet" - responses: - 400: - description: "Invalid ID supplied" - 404: - description: "Pet not found" - 405: - description: "Validation exception" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - x-swagger-router-controller: "swagger_server.controllers.pet_controller" - /pet/findByStatus: - get: - tags: - - "pet" - summary: "Finds Pets by status" - description: "Multiple status values can be provided with comma separated strings" - operationId: "find_pets_by_status" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "status" - in: "query" - description: "Status values that need to be considered for filter" - required: true - type: "array" - items: - type: "string" - default: "available" - enum: - - "available" - - "pending" - - "sold" - collectionFormat: "csv" - responses: - 200: - description: "successful operation" - schema: - type: "array" - items: - $ref: "#/definitions/Pet" - 400: - description: "Invalid status value" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - x-swagger-router-controller: "swagger_server.controllers.pet_controller" - /pet/findByTags: - get: - tags: - - "pet" - summary: "Finds Pets by tags" - description: "Multiple tags can be provided with comma separated strings. Use\ - \ tag1, tag2, tag3 for testing." - operationId: "find_pets_by_tags" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "tags" - in: "query" - description: "Tags to filter by" - required: true - type: "array" - items: - type: "string" - collectionFormat: "csv" - responses: - 200: - description: "successful operation" - schema: - type: "array" - items: - $ref: "#/definitions/Pet" - 400: - description: "Invalid tag value" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - deprecated: true - x-swagger-router-controller: "swagger_server.controllers.pet_controller" - /pet/{petId}: - get: - tags: - - "pet" - summary: "Find pet by ID" - description: "Returns a single pet" - operationId: "get_pet_by_id" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "petId" - in: "path" - description: "ID of pet to return" - required: true - type: "integer" - format: "int64" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/Pet" - 400: - description: "Invalid ID supplied" - 404: - description: "Pet not found" - security: - - api_key: [] - x-swagger-router-controller: "swagger_server.controllers.pet_controller" - post: - tags: - - "pet" - summary: "Updates a pet in the store with form data" - description: "" - operationId: "update_pet_with_form" - consumes: - - "application/x-www-form-urlencoded" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "petId" - in: "path" - description: "ID of pet that needs to be updated" - required: true - type: "integer" - format: "int64" - - name: "name" - in: "formData" - description: "Updated name of the pet" - required: false - type: "string" - - name: "status" - in: "formData" - description: "Updated status of the pet" - required: false - type: "string" - responses: - 405: - description: "Invalid input" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - x-swagger-router-controller: "swagger_server.controllers.pet_controller" - delete: - tags: - - "pet" - summary: "Deletes a pet" - description: "" - operationId: "delete_pet" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "api_key" - in: "header" - required: false - type: "string" - - name: "petId" - in: "path" - description: "Pet id to delete" - required: true - type: "integer" - format: "int64" - responses: - 400: - description: "Invalid pet value" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - x-swagger-router-controller: "swagger_server.controllers.pet_controller" - /pet/{petId}/uploadImage: - post: - tags: - - "pet" - summary: "uploads an image" - description: "" - operationId: "upload_file" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "petId" - in: "path" - description: "ID of pet to update" - required: true - type: "integer" - format: "int64" - - name: "additionalMetadata" - in: "formData" - description: "Additional data to pass to server" - required: false - type: "string" - - name: "file" - in: "formData" - description: "file to upload" - required: false - type: "file" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/ApiResponse" - security: - - petstore_auth: - - "write:pets" - - "read:pets" - x-swagger-router-controller: "swagger_server.controllers.pet_controller" - /store/inventory: - get: - tags: - - "store" - summary: "Returns pet inventories by status" - description: "Returns a map of status codes to quantities" - operationId: "get_inventory" - produces: - - "application/json" - parameters: [] - responses: - 200: - description: "successful operation" - schema: - type: "object" - additionalProperties: - type: "integer" - format: "int32" - security: - - api_key: [] - x-swagger-router-controller: "swagger_server.controllers.store_controller" - /store/order: - post: - tags: - - "store" - summary: "Place an order for a pet" - description: "" - operationId: "place_order" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "order placed for purchasing the pet" - required: true - schema: - $ref: "#/definitions/Order" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/Order" - 400: - description: "Invalid Order" - x-swagger-router-controller: "swagger_server.controllers.store_controller" - /store/order/{orderId}: - get: - tags: - - "store" - summary: "Find purchase order by ID" - description: "For valid response try integer IDs with value <= 5 or > 10. Other\ - \ values will generated exceptions" - operationId: "get_order_by_id" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "orderId" - in: "path" - description: "ID of pet that needs to be fetched" - required: true - type: "integer" - maximum: 5 - minimum: 1 - format: "int64" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/Order" - 400: - description: "Invalid ID supplied" - 404: - description: "Order not found" - x-swagger-router-controller: "swagger_server.controllers.store_controller" - delete: - tags: - - "store" - summary: "Delete purchase order by ID" - description: "For valid response try integer IDs with value < 1000. Anything\ - \ above 1000 or nonintegers will generate API errors" - operationId: "delete_order" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "orderId" - in: "path" - description: "ID of the order that needs to be deleted" - required: true - type: "string" - responses: - 400: - description: "Invalid ID supplied" - 404: - description: "Order not found" - x-swagger-router-controller: "swagger_server.controllers.store_controller" - /user: - post: - tags: - - "user" - summary: "Create user" - description: "This can only be done by the logged in user." - operationId: "create_user" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "Created user object" - required: true - schema: - $ref: "#/definitions/User" - responses: - default: - description: "successful operation" - x-swagger-router-controller: "swagger_server.controllers.user_controller" - /user/createWithArray: - post: - tags: - - "user" - summary: "Creates list of users with given input array" - description: "" - operationId: "create_users_with_array_input" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "List of user object" - required: true - schema: - type: "array" - items: - $ref: "#/definitions/User" - responses: - default: - description: "successful operation" - x-swagger-router-controller: "swagger_server.controllers.user_controller" - /user/createWithList: - post: - tags: - - "user" - summary: "Creates list of users with given input array" - description: "" - operationId: "create_users_with_list_input" - produces: - - "application/xml" - - "application/json" - parameters: - - in: "body" - name: "body" - description: "List of user object" - required: true - schema: - type: "array" - items: - $ref: "#/definitions/User" - responses: - default: - description: "successful operation" - x-swagger-router-controller: "swagger_server.controllers.user_controller" - /user/login: - get: - tags: - - "user" - summary: "Logs user into the system" - description: "" - operationId: "login_user" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "query" - description: "The user name for login" - required: true - type: "string" - - name: "password" - in: "query" - description: "The password for login in clear text" - required: true - type: "string" - responses: - 200: - description: "successful operation" - schema: - type: "string" - headers: - X-Rate-Limit: - type: "integer" - format: "int32" - description: "calls per hour allowed by the user" - X-Expires-After: - type: "string" - format: "date-time" - description: "date in UTC when toekn expires" - 400: - description: "Invalid username/password supplied" - x-swagger-router-controller: "swagger_server.controllers.user_controller" - /user/logout: - get: - tags: - - "user" - summary: "Logs out current logged in user session" - description: "" - operationId: "logout_user" - produces: - - "application/xml" - - "application/json" - parameters: [] - responses: - default: - description: "successful operation" - x-swagger-router-controller: "swagger_server.controllers.user_controller" - /user/{username}: - get: - tags: - - "user" - summary: "Get user by user name" - description: "" - operationId: "get_user_by_name" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "path" - description: "The name that needs to be fetched. Use user1 for testing. " - required: true - type: "string" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/User" - 400: - description: "Invalid username supplied" - 404: - description: "User not found" - x-swagger-router-controller: "swagger_server.controllers.user_controller" - put: - tags: - - "user" - summary: "Updated user" - description: "This can only be done by the logged in user." - operationId: "update_user" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "path" - description: "name that need to be deleted" - required: true - type: "string" - - in: "body" - name: "body" - description: "Updated user object" - required: true - schema: - $ref: "#/definitions/User" - responses: - 400: - description: "Invalid user supplied" - 404: - description: "User not found" - x-swagger-router-controller: "swagger_server.controllers.user_controller" - delete: - tags: - - "user" - summary: "Delete user" - description: "This can only be done by the logged in user." - operationId: "delete_user" - produces: - - "application/xml" - - "application/json" - parameters: - - name: "username" - in: "path" - description: "The name that needs to be deleted" - required: true - type: "string" - responses: - 400: - description: "Invalid username supplied" - 404: - description: "User not found" - x-swagger-router-controller: "swagger_server.controllers.user_controller" -securityDefinitions: - petstore_auth: - type: "oauth2" - authorizationUrl: "http://petstore.swagger.io/api/oauth/dialog" - flow: "implicit" - scopes: - write:pets: "modify pets in your account" - read:pets: "read your pets" - api_key: - type: "apiKey" - name: "api_key" - in: "header" -definitions: - Order: - type: "object" - properties: - id: - type: "integer" - format: "int64" - petId: - type: "integer" - format: "int64" - quantity: - type: "integer" - format: "int32" - shipDate: - type: "string" - format: "date-time" - status: - type: "string" - description: "Order Status" - enum: - - "placed" - - "approved" - - "delivered" - complete: - type: "boolean" - default: false - title: "Pet Order" - description: "An order for a pets from the pet store" - example: - petId: 6 - quantity: 1 - id: 0 - shipDate: "2000-01-23T04:56:07.000+00:00" - complete: false - status: "placed" - xml: - name: "Order" - Category: - type: "object" - properties: - id: - type: "integer" - format: "int64" - name: - type: "string" - title: "Pet category" - description: "A category for a pet" - example: - name: "name" - id: 6 - xml: - name: "Category" - User: - type: "object" - properties: - id: - type: "integer" - format: "int64" - username: - type: "string" - firstName: - type: "string" - lastName: - type: "string" - email: - type: "string" - password: - type: "string" - phone: - type: "string" - userStatus: - type: "integer" - format: "int32" - description: "User Status" - title: "a User" - description: "A User who is purchasing from the pet store" - example: - firstName: "firstName" - lastName: "lastName" - password: "password" - userStatus: 6 - phone: "phone" - id: 0 - email: "email" - username: "username" - xml: - name: "User" - Tag: - type: "object" - properties: - id: - type: "integer" - format: "int64" - name: - type: "string" - title: "Pet Tag" - description: "A tag for a pet" - example: - name: "name" - id: 1 - xml: - name: "Tag" - Pet: - type: "object" - required: - - "name" - - "photoUrls" - properties: - id: - type: "integer" - format: "int64" - category: - $ref: "#/definitions/Category" - name: - type: "string" - example: "doggie" - photoUrls: - type: "array" - xml: - name: "photoUrl" - wrapped: true - items: - type: "string" - tags: - type: "array" - xml: - name: "tag" - wrapped: true - items: - $ref: "#/definitions/Tag" - status: - type: "string" - description: "pet status in the store" - enum: - - "available" - - "pending" - - "sold" - title: "a Pet" - description: "A pet for sale in the pet store" - example: - photoUrls: - - "photoUrls" - - "photoUrls" - name: "doggie" - id: 0 - category: - name: "name" - id: 6 - tags: - - name: "name" - id: 1 - - name: "name" - id: 1 - status: "available" - xml: - name: "Pet" - ApiResponse: - type: "object" - properties: - code: - type: "integer" - format: "int32" - type: - type: "string" - message: - type: "string" - title: "An uploaded response" - description: "Describes the result of uploading an image resource" - example: - code: 0 - type: "type" - message: "message" -externalDocs: - description: "Find out more about Swagger" - url: "http://swagger.io" diff --git a/samples/server/petstore/flaskConnexion/swagger_server/test/__init__.py b/samples/server/petstore/flaskConnexion/swagger_server/test/__init__.py index 644506301ce..60caf919dd1 100644 --- a/samples/server/petstore/flaskConnexion/swagger_server/test/__init__.py +++ b/samples/server/petstore/flaskConnexion/swagger_server/test/__init__.py @@ -10,7 +10,7 @@ class BaseTestCase(TestCase): def create_app(self): logging.getLogger('connexion.operation').setLevel('ERROR') - app = connexion.App(__name__, specification_dir='../swagger/') + app = connexion.App(__name__, specification_dir='../openapi/') app.app.json_encoder = JSONEncoder - app.add_api('swagger.yaml') + app.add_api('openapi.yaml') return app.app diff --git a/samples/server/petstore/flaskConnexion/swagger_server/test/test_pet_controller.py b/samples/server/petstore/flaskConnexion/swagger_server/test/test_pet_controller.py index fb4c34ea3e1..48420a9235a 100644 --- a/samples/server/petstore/flaskConnexion/swagger_server/test/test_pet_controller.py +++ b/samples/server/petstore/flaskConnexion/swagger_server/test/test_pet_controller.py @@ -18,11 +18,11 @@ class TestPetController(BaseTestCase): Add a new pet to the store """ - body = Pet() + pet = Pet() response = self.client.open( '/v2/pet', method='POST', - data=json.dumps(body), + data=json.dumps(pet), content_type='application/json') self.assert200(response, 'Response body is : ' + response.data.decode('utf-8')) @@ -34,7 +34,7 @@ class TestPetController(BaseTestCase): """ headers = [('api_key', 'api_key_example')] response = self.client.open( - '/v2/pet/{petId}'.format(petId=789), + '/v2/pet/{petId}'.format(pet_id=789), method='DELETE', headers=headers) self.assert200(response, @@ -72,7 +72,7 @@ class TestPetController(BaseTestCase): Find pet by ID """ response = self.client.open( - '/v2/pet/{petId}'.format(petId=789), + '/v2/pet/{petId}'.format(pet_id=789), method='GET') self.assert200(response, 'Response body is : ' + response.data.decode('utf-8')) @@ -82,11 +82,11 @@ class TestPetController(BaseTestCase): Update an existing pet """ - body = Pet() + pet = Pet() response = self.client.open( '/v2/pet', method='PUT', - data=json.dumps(body), + data=json.dumps(pet), content_type='application/json') self.assert200(response, 'Response body is : ' + response.data.decode('utf-8')) @@ -99,7 +99,7 @@ class TestPetController(BaseTestCase): data = dict(name='name_example', status='status_example') response = self.client.open( - '/v2/pet/{petId}'.format(petId=789), + '/v2/pet/{petId}'.format(pet_id=789), method='POST', data=data, content_type='application/x-www-form-urlencoded') @@ -111,10 +111,10 @@ class TestPetController(BaseTestCase): uploads an image """ - data = dict(additionalMetadata='additionalMetadata_example', + data = dict(additional_metadata='additional_metadata_example', file=(BytesIO(b'some file data'), 'file.txt')) response = self.client.open( - '/v2/pet/{petId}/uploadImage'.format(petId=789), + '/v2/pet/{petId}/uploadImage'.format(pet_id=789), method='POST', data=data, content_type='multipart/form-data') diff --git a/samples/server/petstore/flaskConnexion/swagger_server/test/test_store_controller.py b/samples/server/petstore/flaskConnexion/swagger_server/test/test_store_controller.py index 854e18600fc..0b51797541c 100644 --- a/samples/server/petstore/flaskConnexion/swagger_server/test/test_store_controller.py +++ b/samples/server/petstore/flaskConnexion/swagger_server/test/test_store_controller.py @@ -18,7 +18,7 @@ class TestStoreController(BaseTestCase): Delete purchase order by ID """ response = self.client.open( - '/v2/store/order/{orderId}'.format(orderId='orderId_example'), + '/v2/store/order/{orderId}'.format(order_id='order_id_example'), method='DELETE') self.assert200(response, 'Response body is : ' + response.data.decode('utf-8')) @@ -40,7 +40,7 @@ class TestStoreController(BaseTestCase): Find purchase order by ID """ response = self.client.open( - '/v2/store/order/{orderId}'.format(orderId=5), + '/v2/store/order/{orderId}'.format(order_id=5), method='GET') self.assert200(response, 'Response body is : ' + response.data.decode('utf-8')) @@ -50,12 +50,12 @@ class TestStoreController(BaseTestCase): Place an order for a pet """ - body = Order() + order = Order() response = self.client.open( '/v2/store/order', method='POST', - data=json.dumps(body), - content_type='application/json') + data=json.dumps(order), + content_type='*/*') self.assert200(response, 'Response body is : ' + response.data.decode('utf-8')) diff --git a/samples/server/petstore/flaskConnexion/swagger_server/test/test_user_controller.py b/samples/server/petstore/flaskConnexion/swagger_server/test/test_user_controller.py index 30e1885afab..10696f43607 100644 --- a/samples/server/petstore/flaskConnexion/swagger_server/test/test_user_controller.py +++ b/samples/server/petstore/flaskConnexion/swagger_server/test/test_user_controller.py @@ -17,12 +17,12 @@ class TestUserController(BaseTestCase): Create user """ - body = User() + user = User() response = self.client.open( '/v2/user', method='POST', - data=json.dumps(body), - content_type='application/json') + data=json.dumps(user), + content_type='*/*') self.assert200(response, 'Response body is : ' + response.data.decode('utf-8')) @@ -31,12 +31,12 @@ class TestUserController(BaseTestCase): Creates list of users with given input array """ - body = [User()] + user = [User()] response = self.client.open( '/v2/user/createWithArray', method='POST', - data=json.dumps(body), - content_type='application/json') + data=json.dumps(user), + content_type='*/*') self.assert200(response, 'Response body is : ' + response.data.decode('utf-8')) @@ -45,12 +45,12 @@ class TestUserController(BaseTestCase): Creates list of users with given input array """ - body = [User()] + user = [User()] response = self.client.open( '/v2/user/createWithList', method='POST', - data=json.dumps(body), - content_type='application/json') + data=json.dumps(user), + content_type='*/*') self.assert200(response, 'Response body is : ' + response.data.decode('utf-8')) @@ -106,12 +106,12 @@ class TestUserController(BaseTestCase): Updated user """ - body = User() + user = User() response = self.client.open( '/v2/user/{username}'.format(username='username_example'), method='PUT', - data=json.dumps(body), - content_type='application/json') + data=json.dumps(user), + content_type='*/*') self.assert200(response, 'Response body is : ' + response.data.decode('utf-8'))