Use the dataType if the baseType is not set (#5372)

* Use the dataType if the baseType is not set

* add tests for passing enum as parameter

* updated requirements file in samples

* Update spec to explicitly name objects and prevent `inline_object`

* use the correct scripts to generate samples (`bin/openapi3/python-flask*`)
This commit is contained in:
Justin 2020-02-28 18:46:57 +01:00 committed by GitHub
parent 4603061c17
commit 857a4bf5d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 1273 additions and 206 deletions

View File

@ -26,7 +26,7 @@ then
fi
# if you've executed sbt assembly previously it will use that instead.
input=modules/openapi-generator/src/test/resources/3_0/petstore.yaml
input=modules/openapi-generator/src/test/resources/3_0/petstore-with-object-as-parameter.yaml
out_folder=samples/openapi3/server/petstore/python-flask-python2
resources=modules/openapi-generator/src/main/resources/python-flask

View File

@ -26,7 +26,7 @@ then
fi
# if you've executed sbt assembly previously it will use that instead.
input=modules/openapi-generator/src/test/resources/3_0/petstore.yaml
input=modules/openapi-generator/src/test/resources/3_0/petstore-with-object-as-parameter.yaml
out_folder=samples/openapi3/server/petstore/python-flask
resources=modules/openapi-generator/src/main/resources/python-flask

View File

@ -69,7 +69,7 @@ def {{operationId}}({{#allParams}}{{paramName}}{{^required}}=None{{/required}}{{
{{^isFile}}
{{^isUuid}}
if connexion.request.is_json:
{{paramName}} = {{baseType}}.from_dict(connexion.request.get_json()) # noqa: E501
{{paramName}} = {{#baseType}}{{baseType}}{{/baseType}}{{^baseType}}{{#dataType}} {{dataType}}{{/dataType}}{{/baseType}}.from_dict(connexion.request.get_json()) # noqa: E501
{{/isUuid}}
{{/isFile}}
{{/isPrimitiveType}}

View File

@ -1,4 +1,4 @@
connexion >= 2.5.0; python_version>="3.6"
connexion >= 2.6.0; python_version>="3.6"
connexion >= 2.3.0; python_version=="3.5"
connexion >= 2.3.0; python_version=="3.4"
connexion == 2.4.0; python_version<="2.7"

View File

@ -0,0 +1,793 @@
openapi: 3.0.1
servers:
- url: 'http://petstore.swagger.io/v2'
info:
description: >-
This is a sample server Petstore server. For this sample, you can use the api key
`special-key` to test the authorization filters.
version: 1.0.0
title: OpenAPI Petstore
license:
name: Apache-2.0
url: 'https://www.apache.org/licenses/LICENSE-2.0.html'
tags:
- name: pet
description: Everything about your Pets
- name: store
description: Access to Petstore orders
- name: user
description: Operations about user
paths:
/pet:
post:
tags:
- pet
summary: Add a new pet to the store
description: ''
operationId: addPet
responses:
'405':
description: Invalid input
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
requestBody:
$ref: '#/components/requestBodies/Pet'
put:
tags:
- pet
summary: Update an existing pet
description: ''
operationId: updatePet
responses:
'400':
description: Invalid ID supplied
'404':
description: Pet not found
'405':
description: Validation exception
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
requestBody:
$ref: '#/components/requestBodies/Pet'
/pet/findByStatus:
get:
tags:
- pet
summary: Finds Pets by status
description: Multiple status values can be provided with comma separated strings
operationId: findPetsByStatus
parameters:
- name: status
in: query
description: Status values that need to be considered for filter
required: true
style: form
explode: false
schema:
type: array
items:
type: string
enum:
- available
- pending
- sold
default: available
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
security:
- petstore_auth:
- 'read:pets'
/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: findPetsByTags
parameters:
- name: tags
in: query
description: Tags to filter by
required: true
style: form
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
security:
- petstore_auth:
- 'read:pets'
deprecated: true
'/pet/{petId}':
get:
tags:
- pet
summary: Find pet by ID
description: Returns a single pet
operationId: getPetById
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
'404':
description: Pet not found
security:
- api_key: []
patch:
tags:
- pet
summary: Set the status of a pet in the store using an enum
description: ''
operationId: updatePetStatusWithEnum
parameters:
- name: petId
in: path
description: ID of pet to return
required: true
schema:
type: integer
format: int64
- $ref: '#/components/parameters/statusEnum'
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
'404':
description: Pet not found
post:
tags:
- pet
summary: Updates a pet in the store with form data
description: ''
operationId: updatePetWithForm
parameters:
- name: petId
in: path
description: ID of pet that needs to be updated
required: true
schema:
type: integer
format: int64
responses:
'405':
description: Invalid input
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
requestBody:
$ref: '#/components/requestBodies/PetForm'
delete:
tags:
- pet
summary: Deletes a pet
description: ''
operationId: deletePet
parameters:
- name: api_key
in: header
required: false
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
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
'/pet/{petId}/uploadImage':
post:
tags:
- pet
summary: uploads an image
description: ''
operationId: uploadFile
parameters:
- name: petId
in: path
description: ID of pet to update
required: true
schema:
type: integer
format: int64
responses:
'200':
description: successful operation
content:
application/json:
schema:
$ref: '#/components/schemas/ApiResponse'
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
requestBody:
$ref: '#/components/requestBodies/UploadForm'
/store/inventory:
get:
tags:
- store
summary: Returns pet inventories by status
description: Returns a map of status codes to quantities
operationId: getInventory
responses:
'200':
description: successful operation
content:
application/json:
schema:
type: object
additionalProperties:
type: integer
format: int32
security:
- api_key: []
/store/order:
post:
tags:
- store
summary: Place an order for a pet
description: ''
operationId: placeOrder
responses:
'200':
description: successful operation
content:
application/xml:
schema:
$ref: '#/components/schemas/Order'
application/json:
schema:
$ref: '#/components/schemas/Order'
'400':
description: Invalid Order
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
description: order placed for purchasing the pet
required: true
'/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: getOrderById
parameters:
- name: orderId
in: path
description: ID of pet that needs to be fetched
required: true
schema:
type: integer
format: int64
minimum: 1
maximum: 5
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
'404':
description: Order not found
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: deleteOrder
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
'404':
description: Order not found
/user:
post:
tags:
- user
summary: Create user
description: This can only be done by the logged in user.
operationId: createUser
responses:
default:
description: successful operation
security:
- auth_cookie: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/User'
description: Created user object
required: true
/user/createWithArray:
post:
tags:
- user
summary: Creates list of users with given input array
description: ''
operationId: createUsersWithArrayInput
responses:
default:
description: successful operation
security:
- auth_cookie: []
requestBody:
$ref: '#/components/requestBodies/UserArray'
/user/createWithList:
post:
tags:
- user
summary: Creates list of users with given input array
description: ''
operationId: createUsersWithListInput
responses:
default:
description: successful operation
security:
- auth_cookie: []
requestBody:
$ref: '#/components/requestBodies/UserArray'
/user/login:
get:
tags:
- user
summary: Logs user into the system
description: ''
operationId: loginUser
parameters:
- name: username
in: query
description: The user name for login
required: true
schema:
type: string
pattern: '^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$'
- name: password
in: query
description: The password for login in clear text
required: true
schema:
type: string
responses:
'200':
description: successful operation
headers:
Set-Cookie:
description: >-
Cookie authentication key for use with the `auth_cookie`
apiKey authentication.
schema:
type: string
example: AUTH_KEY=abcde12345; Path=/; HttpOnly
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
/user/logout:
get:
tags:
- user
summary: Logs out current logged in user session
description: ''
operationId: logoutUser
responses:
default:
description: successful operation
security:
- auth_cookie: []
'/user/{username}':
get:
tags:
- user
summary: Get user by user name
description: ''
operationId: getUserByName
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
'404':
description: User not found
put:
tags:
- user
summary: Updated user
description: This can only be done by the logged in user.
operationId: updateUser
parameters:
- name: username
in: path
description: name that need to be deleted
required: true
schema:
type: string
responses:
'400':
description: Invalid user supplied
'404':
description: User not found
security:
- auth_cookie: []
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/User'
description: Updated user object
required: true
delete:
tags:
- user
summary: Delete user
description: This can only be done by the logged in user.
operationId: deleteUser
parameters:
- name: username
in: path
description: The name that needs to be deleted
required: true
schema:
type: string
responses:
'400':
description: Invalid username supplied
'404':
description: User not found
security:
- auth_cookie: []
externalDocs:
description: Find out more about Swagger
url: 'http://swagger.io'
components:
requestBodies:
UserArray:
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/User'
description: List of user objects
required: true
Pet:
content:
application/json:
schema:
$ref: '#/components/schemas/Pet'
application/xml:
schema:
$ref: '#/components/schemas/Pet'
description: Pet object that needs to be added to the store
required: true
PetForm:
content:
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PetForm'
example:
name: fluffy
status: available
UploadForm:
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/UploadForm'
example:
additionalMetadata: additional metadata example
file: c29tZSB0ZXN0IGRhdGEK
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
auth_cookie:
type: apiKey
name: AUTH_KEY
in: cookie
schemas:
Order:
title: Pet Order
description: An order for a pets from the pet store
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
xml:
name: Order
Category:
title: Pet category
description: A category for a pet
type: object
properties:
id:
type: integer
format: int64
name:
type: string
pattern: '^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$'
xml:
name: Category
User:
title: a User
description: A User who is purchasing from the pet store
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
xml:
name: User
Tag:
title: Pet Tag
description: A tag for a pet
type: object
properties:
id:
type: integer
format: int64
name:
type: string
xml:
name: Tag
Pet:
title: a Pet
description: A pet for sale in the pet store
type: object
required:
- name
- photoUrls
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
xml:
name: Pet
PetForm:
title: A pet form
description: A form for updating a pet
type: object
required:
- name
- status
properties:
name:
description: Updated name of the pet
type: string
status:
description: Updated status of the pet
type: string
UploadForm:
title: An upload form
description: A form for attaching files to a pet
type: object
required:
- file
properties:
additionalMetadata:
description: Additional data to pass to server
type: string
file:
description: file to upload
type: string
format: binary
ApiResponse:
title: An uploaded response
description: Describes the result of uploading an image resource
type: object
properties:
code:
type: integer
format: int32
type:
type: string
message:
type: string
statusEnum:
type: string
description: pet status in the store
enum:
- available
- pending
- sold
parameters:
statusEnum:
description: The required status
explode: true
in: query
name: status
required: true
schema:
$ref: '#/components/schemas/statusEnum'
example:
pending
style: form

View File

@ -3,6 +3,9 @@ import six
from openapi_server.models.api_response import ApiResponse # noqa: E501
from openapi_server.models.pet import Pet # noqa: E501
from openapi_server.models.pet_form import PetForm # noqa: E501
from openapi_server.models.status_enum import StatusEnum # noqa: E501
from openapi_server.models.upload_form import UploadForm # noqa: E501
from openapi_server import util
@ -90,35 +93,52 @@ def update_pet(pet): # noqa: E501
return 'do some magic!'
def update_pet_with_form(pet_id, name=None, status=None): # noqa: E501
def update_pet_status_with_enum(pet_id, status): # noqa: E501
"""Set the status of a pet in the store using an enum
# noqa: E501
:param pet_id: ID of pet to return
:type pet_id: int
:param status: The required status
:type status: dict | bytes
:rtype: Pet
"""
if connexion.request.is_json:
status = StatusEnum.from_dict(connexion.request.get_json()) # noqa: E501
return 'do some magic!'
def update_pet_with_form(pet_id, pet_form=None): # noqa: E501
"""Updates a pet in the store with form data
# noqa: E501
: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
:type status: str
:param pet_form:
:type pet_form: dict | bytes
:rtype: None
"""
if connexion.request.is_json:
pet_form = PetForm.from_dict(connexion.request.get_json()) # noqa: E501
return 'do some magic!'
def upload_file(pet_id, additional_metadata=None, file=None): # noqa: E501
def upload_file(pet_id, upload_form=None): # noqa: E501
"""uploads an image
# noqa: E501
: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: str
:param upload_form:
:type upload_form: dict | bytes
:rtype: ApiResponse
"""
if connexion.request.is_json:
upload_form = UploadForm.from_dict(connexion.request.get_json()) # noqa: E501
return 'do some magic!'

View File

@ -25,7 +25,7 @@ def create_users_with_array_input(user): # noqa: E501
# noqa: E501
:param user: List of user object
:param user: List of user objects
:type user: list | bytes
:rtype: None
@ -40,7 +40,7 @@ def create_users_with_list_input(user): # noqa: E501
# noqa: E501
:param user: List of user object
:param user: List of user objects
:type user: list | bytes
:rtype: None

View File

@ -5,9 +5,10 @@ from __future__ import absolute_import
# import models into model package
from openapi_server.models.api_response import ApiResponse
from openapi_server.models.category import Category
from openapi_server.models.inline_object import InlineObject
from openapi_server.models.inline_object1 import InlineObject1
from openapi_server.models.order import Order
from openapi_server.models.pet import Pet
from openapi_server.models.pet_form import PetForm
from openapi_server.models.status_enum import StatusEnum
from openapi_server.models.tag import Tag
from openapi_server.models.upload_form import UploadForm
from openapi_server.models.user import User

View File

@ -9,18 +9,18 @@ from openapi_server.models.base_model_ import Model
from openapi_server import util
class InlineObject(Model):
class PetForm(Model):
"""NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
Do not edit the class manually.
"""
def __init__(self, name=None, status=None): # noqa: E501
"""InlineObject - a model defined in OpenAPI
"""PetForm - a model defined in OpenAPI
:param name: The name of this InlineObject. # noqa: E501
:param name: The name of this PetForm. # noqa: E501
:type name: str
:param status: The status of this InlineObject. # noqa: E501
:param status: The status of this PetForm. # noqa: E501
:type status: str
"""
self.openapi_types = {
@ -42,53 +42,57 @@ class InlineObject(Model):
:param dikt: A dict.
:type: dict
:return: The inline_object of this InlineObject. # noqa: E501
:rtype: InlineObject
:return: The PetForm of this PetForm. # noqa: E501
:rtype: PetForm
"""
return util.deserialize_model(dikt, cls)
@property
def name(self):
"""Gets the name of this InlineObject.
"""Gets the name of this PetForm.
Updated name of the pet # noqa: E501
:return: The name of this InlineObject.
:return: The name of this PetForm.
:rtype: str
"""
return self._name
@name.setter
def name(self, name):
"""Sets the name of this InlineObject.
"""Sets the name of this PetForm.
Updated name of the pet # noqa: E501
:param name: The name of this InlineObject.
:param name: The name of this PetForm.
:type name: str
"""
if name is None:
raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501
self._name = name
@property
def status(self):
"""Gets the status of this InlineObject.
"""Gets the status of this PetForm.
Updated status of the pet # noqa: E501
:return: The status of this InlineObject.
:return: The status of this PetForm.
:rtype: str
"""
return self._status
@status.setter
def status(self, status):
"""Sets the status of this InlineObject.
"""Sets the status of this PetForm.
Updated status of the pet # noqa: E501
:param status: The status of this InlineObject.
:param status: The status of this PetForm.
:type status: str
"""
if status is None:
raise ValueError("Invalid value for `status`, must not be `None`") # noqa: E501
self._status = status

View File

@ -0,0 +1,43 @@
# coding: utf-8
from __future__ import absolute_import
from datetime import date, datetime # noqa: F401
from typing import List, Dict # noqa: F401
from openapi_server.models.base_model_ import Model
from openapi_server import util
class StatusEnum(Model):
"""NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
Do not edit the class manually.
"""
"""
allowed enum values
"""
AVAILABLE = "available"
PENDING = "pending"
SOLD = "sold"
def __init__(self): # noqa: E501
"""StatusEnum - a model defined in OpenAPI
"""
self.openapi_types = {
}
self.attribute_map = {
}
@classmethod
def from_dict(cls, dikt):
"""Returns the dict as a model
:param dikt: A dict.
:type: dict
:return: The statusEnum of this StatusEnum. # noqa: E501
:rtype: StatusEnum
"""
return util.deserialize_model(dikt, cls)

View File

@ -9,18 +9,18 @@ from openapi_server.models.base_model_ import Model
from openapi_server import util
class InlineObject1(Model):
class UploadForm(Model):
"""NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
Do not edit the class manually.
"""
def __init__(self, additional_metadata=None, file=None): # noqa: E501
"""InlineObject1 - a model defined in OpenAPI
"""UploadForm - a model defined in OpenAPI
:param additional_metadata: The additional_metadata of this InlineObject1. # noqa: E501
:param additional_metadata: The additional_metadata of this UploadForm. # noqa: E501
:type additional_metadata: str
:param file: The file of this InlineObject1. # noqa: E501
:param file: The file of this UploadForm. # noqa: E501
:type file: file
"""
self.openapi_types = {
@ -42,29 +42,29 @@ class InlineObject1(Model):
:param dikt: A dict.
:type: dict
:return: The inline_object_1 of this InlineObject1. # noqa: E501
:rtype: InlineObject1
:return: The UploadForm of this UploadForm. # noqa: E501
:rtype: UploadForm
"""
return util.deserialize_model(dikt, cls)
@property
def additional_metadata(self):
"""Gets the additional_metadata of this InlineObject1.
"""Gets the additional_metadata of this UploadForm.
Additional data to pass to server # noqa: E501
:return: The additional_metadata of this InlineObject1.
:return: The additional_metadata of this UploadForm.
:rtype: str
"""
return self._additional_metadata
@additional_metadata.setter
def additional_metadata(self, additional_metadata):
"""Sets the additional_metadata of this InlineObject1.
"""Sets the additional_metadata of this UploadForm.
Additional data to pass to server # noqa: E501
:param additional_metadata: The additional_metadata of this InlineObject1.
:param additional_metadata: The additional_metadata of this UploadForm.
:type additional_metadata: str
"""
@ -72,23 +72,25 @@ class InlineObject1(Model):
@property
def file(self):
"""Gets the file of this InlineObject1.
"""Gets the file of this UploadForm.
file to upload # noqa: E501
:return: The file of this InlineObject1.
:return: The file of this UploadForm.
:rtype: file
"""
return self._file
@file.setter
def file(self, file):
"""Sets the file of this InlineObject1.
"""Sets the file of this UploadForm.
file to upload # noqa: E501
:param file: The file of this InlineObject1.
:param file: The file of this UploadForm.
:type file: file
"""
if file is None:
raise ValueError("Invalid value for `file`, must not be `None`") # noqa: E501
self._file = file

View File

@ -1,4 +1,4 @@
openapi: 3.0.0
openapi: 3.0.1
info:
description: This is a sample server Petstore server. For this sample, you can use
the api key `special-key` to test the authorization filters.
@ -220,6 +220,45 @@ paths:
tags:
- pet
x-openapi-router-controller: openapi_server.controllers.pet_controller
patch:
operationId: update_pet_status_with_enum
parameters:
- description: ID of pet to return
explode: false
in: path
name: petId
required: true
schema:
format: int64
type: integer
style: simple
- description: The required status
example: pending
explode: true
in: query
name: status
required: true
schema:
$ref: '#/components/schemas/statusEnum'
style: form
responses:
"200":
content:
application/xml:
schema:
$ref: '#/components/schemas/Pet'
application/json:
schema:
$ref: '#/components/schemas/Pet'
description: successful operation
"400":
description: Invalid ID supplied
"404":
description: Pet not found
summary: Set the status of a pet in the store using an enum
tags:
- pet
x-openapi-router-controller: openapi_server.controllers.pet_controller
post:
operationId: update_pet_with_form
parameters:
@ -233,18 +272,7 @@ paths:
type: integer
style: simple
requestBody:
$ref: '#/components/requestBodies/inline_object'
content:
application/x-www-form-urlencoded:
schema:
properties:
name:
description: Updated name of the pet
type: string
status:
description: Updated status of the pet
type: string
type: object
$ref: '#/components/requestBodies/PetForm'
responses:
"405":
description: Invalid input
@ -270,19 +298,7 @@ paths:
type: integer
style: simple
requestBody:
$ref: '#/components/requestBodies/inline_object_1'
content:
multipart/form-data:
schema:
properties:
additionalMetadata:
description: Additional data to pass to server
type: string
file:
description: file to upload
format: binary
type: string
type: object
$ref: '#/components/requestBodies/UploadForm'
responses:
"200":
content:
@ -605,6 +621,17 @@ paths:
- user
x-openapi-router-controller: openapi_server.controllers.user_controller
components:
parameters:
statusEnum:
description: The required status
example: pending
explode: true
in: query
name: status
required: true
schema:
$ref: '#/components/schemas/statusEnum'
style: form
requestBodies:
UserArray:
content:
@ -613,7 +640,7 @@ components:
items:
$ref: '#/components/schemas/User'
type: array
description: List of user object
description: List of user objects
required: true
Pet:
content:
@ -625,16 +652,22 @@ components:
$ref: '#/components/schemas/Pet'
description: Pet object that needs to be added to the store
required: true
inline_object:
PetForm:
content:
application/x-www-form-urlencoded:
example:
name: fluffy
status: available
schema:
$ref: '#/components/schemas/inline_object'
inline_object_1:
$ref: '#/components/schemas/PetForm'
UploadForm:
content:
multipart/form-data:
example:
additionalMetadata: additional metadata example
file: c29tZSB0ZXN0IGRhdGEK
schema:
$ref: '#/components/schemas/inline_object_1'
$ref: '#/components/schemas/UploadForm'
schemas:
Order:
description: An order for a pets from the pet store
@ -792,6 +825,34 @@ components:
type: object
xml:
name: Pet
PetForm:
description: A form for updating a pet
properties:
name:
description: Updated name of the pet
type: string
status:
description: Updated status of the pet
type: string
required:
- name
- status
title: A pet form
type: object
UploadForm:
description: A form for attaching files to a pet
properties:
additionalMetadata:
description: Additional data to pass to server
type: string
file:
description: file to upload
format: binary
type: string
required:
- file
title: An upload form
type: object
ApiResponse:
description: Describes the result of uploading an image resource
example:
@ -808,25 +869,13 @@ components:
type: string
title: An uploaded response
type: object
inline_object:
properties:
name:
description: Updated name of the pet
type: string
status:
description: Updated status of the pet
type: string
type: object
inline_object_1:
properties:
additionalMetadata:
description: Additional data to pass to server
type: string
file:
description: file to upload
format: binary
type: string
type: object
statusEnum:
description: pet status in the store
enum:
- available
- pending
- sold
type: string
securitySchemes:
petstore_auth:
flows:

View File

@ -8,6 +8,9 @@ from six import BytesIO
from openapi_server.models.api_response import ApiResponse # noqa: E501
from openapi_server.models.pet import Pet # noqa: E501
from openapi_server.models.pet_form import PetForm # noqa: E501
from openapi_server.models.status_enum import StatusEnum # noqa: E501
from openapi_server.models.upload_form import UploadForm # noqa: E501
from openapi_server.test import BaseTestCase
@ -156,23 +159,39 @@ class TestPetController(BaseTestCase):
self.assert200(response,
'Response body is : ' + response.data.decode('utf-8'))
def test_update_pet_status_with_enum(self):
"""Test case for update_pet_status_with_enum
Set the status of a pet in the store using an enum
"""
query_string = [('status', pending)]
headers = {
'Accept': 'application/json',
}
response = self.client.open(
'/v2/pet/{pet_id}'.format(pet_id=789),
method='PATCH',
headers=headers,
query_string=query_string)
self.assert200(response,
'Response body is : ' + response.data.decode('utf-8'))
@unittest.skip("application/x-www-form-urlencoded not supported by Connexion")
def test_update_pet_with_form(self):
"""Test case for update_pet_with_form
Updates a pet in the store with form data
"""
pet_form = {"name":"fluffy","status":"available"}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Bearer special-key',
}
data = dict(name='name_example',
status='status_example')
response = self.client.open(
'/v2/pet/{pet_id}'.format(pet_id=789),
method='POST',
headers=headers,
data=data,
data=json.dumps(pet_form),
content_type='application/x-www-form-urlencoded')
self.assert200(response,
'Response body is : ' + response.data.decode('utf-8'))
@ -183,18 +202,17 @@ class TestPetController(BaseTestCase):
uploads an image
"""
upload_form = {"additionalMetadata":"additional metadata example","file":"c29tZSB0ZXN0IGRhdGEK"}
headers = {
'Accept': 'application/json',
'Content-Type': 'multipart/form-data',
'Authorization': 'Bearer special-key',
}
data = dict(additional_metadata='additional_metadata_example',
file=(BytesIO(b'some file data'), 'file.txt'))
response = self.client.open(
'/v2/pet/{pet_id}/uploadImage'.format(pet_id=789),
method='POST',
headers=headers,
data=data,
data=json.dumps(upload_form),
content_type='multipart/form-data')
self.assert200(response,
'Response body is : ' + response.data.decode('utf-8'))

View File

@ -1,4 +1,4 @@
connexion >= 2.5.0; python_version>="3.6"
connexion >= 2.6.0; python_version>="3.6"
connexion >= 2.3.0; python_version=="3.5"
connexion >= 2.3.0; python_version=="3.4"
connexion == 2.4.0; python_version<="2.7"

View File

@ -3,6 +3,9 @@ import six
from openapi_server.models.api_response import ApiResponse # noqa: E501
from openapi_server.models.pet import Pet # noqa: E501
from openapi_server.models.pet_form import PetForm # noqa: E501
from openapi_server.models.status_enum import StatusEnum # noqa: E501
from openapi_server.models.upload_form import UploadForm # noqa: E501
from openapi_server import util
@ -90,35 +93,52 @@ def update_pet(pet): # noqa: E501
return 'do some magic!'
def update_pet_with_form(pet_id, name=None, status=None): # noqa: E501
def update_pet_status_with_enum(pet_id, status): # noqa: E501
"""Set the status of a pet in the store using an enum
# noqa: E501
:param pet_id: ID of pet to return
:type pet_id: int
:param status: The required status
:type status: dict | bytes
:rtype: Pet
"""
if connexion.request.is_json:
status = StatusEnum.from_dict(connexion.request.get_json()) # noqa: E501
return 'do some magic!'
def update_pet_with_form(pet_id, pet_form=None): # noqa: E501
"""Updates a pet in the store with form data
# noqa: E501
: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
:type status: str
:param pet_form:
:type pet_form: dict | bytes
:rtype: None
"""
if connexion.request.is_json:
pet_form = PetForm.from_dict(connexion.request.get_json()) # noqa: E501
return 'do some magic!'
def upload_file(pet_id, additional_metadata=None, file=None): # noqa: E501
def upload_file(pet_id, upload_form=None): # noqa: E501
"""uploads an image
# noqa: E501
: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: str
:param upload_form:
:type upload_form: dict | bytes
:rtype: ApiResponse
"""
if connexion.request.is_json:
upload_form = UploadForm.from_dict(connexion.request.get_json()) # noqa: E501
return 'do some magic!'

View File

@ -25,7 +25,7 @@ def create_users_with_array_input(user): # noqa: E501
# noqa: E501
:param user: List of user object
:param user: List of user objects
:type user: list | bytes
:rtype: None
@ -40,7 +40,7 @@ def create_users_with_list_input(user): # noqa: E501
# noqa: E501
:param user: List of user object
:param user: List of user objects
:type user: list | bytes
:rtype: None

View File

@ -5,9 +5,10 @@ from __future__ import absolute_import
# import models into model package
from openapi_server.models.api_response import ApiResponse
from openapi_server.models.category import Category
from openapi_server.models.inline_object import InlineObject
from openapi_server.models.inline_object1 import InlineObject1
from openapi_server.models.order import Order
from openapi_server.models.pet import Pet
from openapi_server.models.pet_form import PetForm
from openapi_server.models.status_enum import StatusEnum
from openapi_server.models.tag import Tag
from openapi_server.models.upload_form import UploadForm
from openapi_server.models.user import User

View File

@ -9,18 +9,18 @@ from openapi_server.models.base_model_ import Model
from openapi_server import util
class InlineObject(Model):
class PetForm(Model):
"""NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
Do not edit the class manually.
"""
def __init__(self, name=None, status=None): # noqa: E501
"""InlineObject - a model defined in OpenAPI
"""PetForm - a model defined in OpenAPI
:param name: The name of this InlineObject. # noqa: E501
:param name: The name of this PetForm. # noqa: E501
:type name: str
:param status: The status of this InlineObject. # noqa: E501
:param status: The status of this PetForm. # noqa: E501
:type status: str
"""
self.openapi_types = {
@ -37,58 +37,62 @@ class InlineObject(Model):
self._status = status
@classmethod
def from_dict(cls, dikt) -> 'InlineObject':
def from_dict(cls, dikt) -> 'PetForm':
"""Returns the dict as a model
:param dikt: A dict.
:type: dict
:return: The inline_object of this InlineObject. # noqa: E501
:rtype: InlineObject
:return: The PetForm of this PetForm. # noqa: E501
:rtype: PetForm
"""
return util.deserialize_model(dikt, cls)
@property
def name(self):
"""Gets the name of this InlineObject.
"""Gets the name of this PetForm.
Updated name of the pet # noqa: E501
:return: The name of this InlineObject.
:return: The name of this PetForm.
:rtype: str
"""
return self._name
@name.setter
def name(self, name):
"""Sets the name of this InlineObject.
"""Sets the name of this PetForm.
Updated name of the pet # noqa: E501
:param name: The name of this InlineObject.
:param name: The name of this PetForm.
:type name: str
"""
if name is None:
raise ValueError("Invalid value for `name`, must not be `None`") # noqa: E501
self._name = name
@property
def status(self):
"""Gets the status of this InlineObject.
"""Gets the status of this PetForm.
Updated status of the pet # noqa: E501
:return: The status of this InlineObject.
:return: The status of this PetForm.
:rtype: str
"""
return self._status
@status.setter
def status(self, status):
"""Sets the status of this InlineObject.
"""Sets the status of this PetForm.
Updated status of the pet # noqa: E501
:param status: The status of this InlineObject.
:param status: The status of this PetForm.
:type status: str
"""
if status is None:
raise ValueError("Invalid value for `status`, must not be `None`") # noqa: E501
self._status = status

View File

@ -0,0 +1,43 @@
# coding: utf-8
from __future__ import absolute_import
from datetime import date, datetime # noqa: F401
from typing import List, Dict # noqa: F401
from openapi_server.models.base_model_ import Model
from openapi_server import util
class StatusEnum(Model):
"""NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
Do not edit the class manually.
"""
"""
allowed enum values
"""
AVAILABLE = "available"
PENDING = "pending"
SOLD = "sold"
def __init__(self): # noqa: E501
"""StatusEnum - a model defined in OpenAPI
"""
self.openapi_types = {
}
self.attribute_map = {
}
@classmethod
def from_dict(cls, dikt) -> 'StatusEnum':
"""Returns the dict as a model
:param dikt: A dict.
:type: dict
:return: The statusEnum of this StatusEnum. # noqa: E501
:rtype: StatusEnum
"""
return util.deserialize_model(dikt, cls)

View File

@ -9,18 +9,18 @@ from openapi_server.models.base_model_ import Model
from openapi_server import util
class InlineObject1(Model):
class UploadForm(Model):
"""NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
Do not edit the class manually.
"""
def __init__(self, additional_metadata=None, file=None): # noqa: E501
"""InlineObject1 - a model defined in OpenAPI
"""UploadForm - a model defined in OpenAPI
:param additional_metadata: The additional_metadata of this InlineObject1. # noqa: E501
:param additional_metadata: The additional_metadata of this UploadForm. # noqa: E501
:type additional_metadata: str
:param file: The file of this InlineObject1. # noqa: E501
:param file: The file of this UploadForm. # noqa: E501
:type file: file
"""
self.openapi_types = {
@ -37,34 +37,34 @@ class InlineObject1(Model):
self._file = file
@classmethod
def from_dict(cls, dikt) -> 'InlineObject1':
def from_dict(cls, dikt) -> 'UploadForm':
"""Returns the dict as a model
:param dikt: A dict.
:type: dict
:return: The inline_object_1 of this InlineObject1. # noqa: E501
:rtype: InlineObject1
:return: The UploadForm of this UploadForm. # noqa: E501
:rtype: UploadForm
"""
return util.deserialize_model(dikt, cls)
@property
def additional_metadata(self):
"""Gets the additional_metadata of this InlineObject1.
"""Gets the additional_metadata of this UploadForm.
Additional data to pass to server # noqa: E501
:return: The additional_metadata of this InlineObject1.
:return: The additional_metadata of this UploadForm.
:rtype: str
"""
return self._additional_metadata
@additional_metadata.setter
def additional_metadata(self, additional_metadata):
"""Sets the additional_metadata of this InlineObject1.
"""Sets the additional_metadata of this UploadForm.
Additional data to pass to server # noqa: E501
:param additional_metadata: The additional_metadata of this InlineObject1.
:param additional_metadata: The additional_metadata of this UploadForm.
:type additional_metadata: str
"""
@ -72,23 +72,25 @@ class InlineObject1(Model):
@property
def file(self):
"""Gets the file of this InlineObject1.
"""Gets the file of this UploadForm.
file to upload # noqa: E501
:return: The file of this InlineObject1.
:return: The file of this UploadForm.
:rtype: file
"""
return self._file
@file.setter
def file(self, file):
"""Sets the file of this InlineObject1.
"""Sets the file of this UploadForm.
file to upload # noqa: E501
:param file: The file of this InlineObject1.
:param file: The file of this UploadForm.
:type file: file
"""
if file is None:
raise ValueError("Invalid value for `file`, must not be `None`") # noqa: E501
self._file = file

View File

@ -1,4 +1,4 @@
openapi: 3.0.0
openapi: 3.0.1
info:
description: This is a sample server Petstore server. For this sample, you can use
the api key `special-key` to test the authorization filters.
@ -220,6 +220,45 @@ paths:
tags:
- pet
x-openapi-router-controller: openapi_server.controllers.pet_controller
patch:
operationId: update_pet_status_with_enum
parameters:
- description: ID of pet to return
explode: false
in: path
name: petId
required: true
schema:
format: int64
type: integer
style: simple
- description: The required status
example: pending
explode: true
in: query
name: status
required: true
schema:
$ref: '#/components/schemas/statusEnum'
style: form
responses:
"200":
content:
application/xml:
schema:
$ref: '#/components/schemas/Pet'
application/json:
schema:
$ref: '#/components/schemas/Pet'
description: successful operation
"400":
description: Invalid ID supplied
"404":
description: Pet not found
summary: Set the status of a pet in the store using an enum
tags:
- pet
x-openapi-router-controller: openapi_server.controllers.pet_controller
post:
operationId: update_pet_with_form
parameters:
@ -233,18 +272,7 @@ paths:
type: integer
style: simple
requestBody:
$ref: '#/components/requestBodies/inline_object'
content:
application/x-www-form-urlencoded:
schema:
properties:
name:
description: Updated name of the pet
type: string
status:
description: Updated status of the pet
type: string
type: object
$ref: '#/components/requestBodies/PetForm'
responses:
"405":
description: Invalid input
@ -270,19 +298,7 @@ paths:
type: integer
style: simple
requestBody:
$ref: '#/components/requestBodies/inline_object_1'
content:
multipart/form-data:
schema:
properties:
additionalMetadata:
description: Additional data to pass to server
type: string
file:
description: file to upload
format: binary
type: string
type: object
$ref: '#/components/requestBodies/UploadForm'
responses:
"200":
content:
@ -605,6 +621,17 @@ paths:
- user
x-openapi-router-controller: openapi_server.controllers.user_controller
components:
parameters:
statusEnum:
description: The required status
example: pending
explode: true
in: query
name: status
required: true
schema:
$ref: '#/components/schemas/statusEnum'
style: form
requestBodies:
UserArray:
content:
@ -613,7 +640,7 @@ components:
items:
$ref: '#/components/schemas/User'
type: array
description: List of user object
description: List of user objects
required: true
Pet:
content:
@ -625,16 +652,22 @@ components:
$ref: '#/components/schemas/Pet'
description: Pet object that needs to be added to the store
required: true
inline_object:
PetForm:
content:
application/x-www-form-urlencoded:
example:
name: fluffy
status: available
schema:
$ref: '#/components/schemas/inline_object'
inline_object_1:
$ref: '#/components/schemas/PetForm'
UploadForm:
content:
multipart/form-data:
example:
additionalMetadata: additional metadata example
file: c29tZSB0ZXN0IGRhdGEK
schema:
$ref: '#/components/schemas/inline_object_1'
$ref: '#/components/schemas/UploadForm'
schemas:
Order:
description: An order for a pets from the pet store
@ -792,6 +825,34 @@ components:
type: object
xml:
name: Pet
PetForm:
description: A form for updating a pet
properties:
name:
description: Updated name of the pet
type: string
status:
description: Updated status of the pet
type: string
required:
- name
- status
title: A pet form
type: object
UploadForm:
description: A form for attaching files to a pet
properties:
additionalMetadata:
description: Additional data to pass to server
type: string
file:
description: file to upload
format: binary
type: string
required:
- file
title: An upload form
type: object
ApiResponse:
description: Describes the result of uploading an image resource
example:
@ -808,25 +869,13 @@ components:
type: string
title: An uploaded response
type: object
inline_object:
properties:
name:
description: Updated name of the pet
type: string
status:
description: Updated status of the pet
type: string
type: object
inline_object_1:
properties:
additionalMetadata:
description: Additional data to pass to server
type: string
file:
description: file to upload
format: binary
type: string
type: object
statusEnum:
description: pet status in the store
enum:
- available
- pending
- sold
type: string
securitySchemes:
petstore_auth:
flows:

View File

@ -8,6 +8,9 @@ from six import BytesIO
from openapi_server.models.api_response import ApiResponse # noqa: E501
from openapi_server.models.pet import Pet # noqa: E501
from openapi_server.models.pet_form import PetForm # noqa: E501
from openapi_server.models.status_enum import StatusEnum # noqa: E501
from openapi_server.models.upload_form import UploadForm # noqa: E501
from openapi_server.test import BaseTestCase
@ -156,23 +159,39 @@ class TestPetController(BaseTestCase):
self.assert200(response,
'Response body is : ' + response.data.decode('utf-8'))
def test_update_pet_status_with_enum(self):
"""Test case for update_pet_status_with_enum
Set the status of a pet in the store using an enum
"""
query_string = [('status', pending)]
headers = {
'Accept': 'application/json',
}
response = self.client.open(
'/v2/pet/{pet_id}'.format(pet_id=56),
method='PATCH',
headers=headers,
query_string=query_string)
self.assert200(response,
'Response body is : ' + response.data.decode('utf-8'))
@unittest.skip("application/x-www-form-urlencoded not supported by Connexion")
def test_update_pet_with_form(self):
"""Test case for update_pet_with_form
Updates a pet in the store with form data
"""
pet_form = {"name":"fluffy","status":"available"}
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Bearer special-key',
}
data = dict(name='name_example',
status='status_example')
response = self.client.open(
'/v2/pet/{pet_id}'.format(pet_id=56),
method='POST',
headers=headers,
data=data,
data=json.dumps(pet_form),
content_type='application/x-www-form-urlencoded')
self.assert200(response,
'Response body is : ' + response.data.decode('utf-8'))
@ -183,18 +202,17 @@ class TestPetController(BaseTestCase):
uploads an image
"""
upload_form = {"additionalMetadata":"additional metadata example","file":"c29tZSB0ZXN0IGRhdGEK"}
headers = {
'Accept': 'application/json',
'Content-Type': 'multipart/form-data',
'Authorization': 'Bearer special-key',
}
data = dict(additional_metadata='additional_metadata_example',
file=(BytesIO(b'some file data'), 'file.txt'))
response = self.client.open(
'/v2/pet/{pet_id}/uploadImage'.format(pet_id=56),
method='POST',
headers=headers,
data=data,
data=json.dumps(upload_form),
content_type='multipart/form-data')
self.assert200(response,
'Response body is : ' + response.data.decode('utf-8'))

View File

@ -1,4 +1,4 @@
connexion >= 2.5.0; python_version>="3.6"
connexion >= 2.6.0; python_version>="3.6"
connexion >= 2.3.0; python_version=="3.5"
connexion >= 2.3.0; python_version=="3.4"
connexion == 2.4.0; python_version<="2.7"

View File

@ -1,4 +1,4 @@
connexion >= 2.5.0; python_version>="3.6"
connexion >= 2.6.0; python_version>="3.6"
connexion >= 2.3.0; python_version=="3.5"
connexion >= 2.3.0; python_version=="3.4"
connexion == 2.4.0; python_version<="2.7"

View File

@ -1,4 +1,4 @@
connexion >= 2.5.0; python_version>="3.6"
connexion >= 2.6.0; python_version>="3.6"
connexion >= 2.3.0; python_version=="3.5"
connexion >= 2.3.0; python_version=="3.4"
connexion == 2.4.0; python_version<="2.7"