Clean-up - Unnecessary trailing underscores in Python Flask, AIOHttp, BluePlanet (#16249)

* Remove trailing underscore in security_controller_.py and base_model_.py

* Regenerating sample files

* Clean-up files with trailing underscore in samples

* Update security extension to use the new security_controller

* Regenerate unmaintained samples
This commit is contained in:
Yassine Ilmi 2023-08-14 07:26:24 +02:00 committed by GitHub
parent 47020f10b7
commit 931197a1cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
91 changed files with 471 additions and 281 deletions

View File

@ -16,27 +16,28 @@
package org.openapitools.codegen.languages;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.PathItem.HttpMethod;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.parameters.Parameter;
import io.swagger.v3.oas.models.parameters.RequestBody;
import io.swagger.v3.oas.models.security.SecurityScheme;
import static org.openapitools.codegen.utils.StringUtils.camelize;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.*;
import org.openapitools.codegen.CliOption;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenOperation;
import org.openapitools.codegen.CodegenParameter;
import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.meta.features.DocumentationFeature;
import org.openapitools.codegen.model.ApiInfoMap;
import org.openapitools.codegen.model.ModelMap;
@ -47,11 +48,26 @@ import org.openapitools.codegen.utils.ModelUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.util.*;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import static org.openapitools.codegen.utils.StringUtils.camelize;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.PathItem;
import io.swagger.v3.oas.models.PathItem.HttpMethod;
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.oas.models.parameters.Parameter;
import io.swagger.v3.oas.models.parameters.RequestBody;
import io.swagger.v3.oas.models.security.SecurityScheme;
public abstract class AbstractPythonConnexionServerCodegen extends AbstractPythonCodegen implements CodegenConfig {
private static class PythonBooleanSerializer extends JsonSerializer<Boolean> {
@ -230,9 +246,9 @@ public abstract class AbstractPythonConnexionServerCodegen extends AbstractPytho
supportingFiles.add(new SupportingFile("util.mustache", packagePath(), "util.py"));
supportingFiles.add(new SupportingFile("typing_utils.mustache", packagePath(), "typing_utils.py"));
supportingFiles.add(new SupportingFile("__init__.mustache", packagePath() + File.separatorChar + packageToPath(controllerPackage), "__init__.py"));
supportingFiles.add(new SupportingFile("security_controller_.mustache", packagePath() + File.separatorChar + packageToPath(controllerPackage), "security_controller_.py"));
supportingFiles.add(new SupportingFile("security_controller.mustache", packagePath() + File.separatorChar + packageToPath(controllerPackage), "security_controller.py"));
supportingFiles.add(new SupportingFile("__init__model.mustache", packagePath() + File.separatorChar + packageToPath(modelPackage), "__init__.py"));
supportingFiles.add(new SupportingFile("base_model_.mustache", packagePath() + File.separatorChar + packageToPath(modelPackage), "base_model_.py"));
supportingFiles.add(new SupportingFile("base_model.mustache", packagePath() + File.separatorChar + packageToPath(modelPackage), "base_model.py"));
supportingFiles.add(new SupportingFile("openapi.mustache", packagePath() + File.separatorChar + "openapi", "openapi.yaml"));
addSupportingFiles();
@ -455,7 +471,7 @@ public abstract class AbstractPythonConnexionServerCodegen extends AbstractPytho
for (Map.Entry<String, SecurityScheme> securitySchemesEntry : securitySchemes.entrySet()) {
String securityName = securitySchemesEntry.getKey();
SecurityScheme securityScheme = securitySchemesEntry.getValue();
String baseFunctionName = controllerPackage + ".security_controller_.";
String baseFunctionName = controllerPackage + ".security_controller.";
switch (securityScheme.getType()) {
case APIKEY:
addSecurityExtension(securityScheme, "x-apikeyInfoFunc", baseFunctionName + "info_from_" + securityName);

View File

@ -15,15 +15,20 @@
*/
package org.openapitools.codegen.languages;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.meta.features.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.EnumSet;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.meta.features.DocumentationFeature;
import org.openapitools.codegen.meta.features.GlobalFeature;
import org.openapitools.codegen.meta.features.ParameterFeature;
import org.openapitools.codegen.meta.features.SchemaSupportFeature;
import org.openapitools.codegen.meta.features.SecurityFeature;
import org.openapitools.codegen.meta.features.WireFormatFeature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class PythonBluePlanetServerCodegen extends AbstractPythonConnexionServerCodegen {
private final Logger LOGGER = LoggerFactory.getLogger(PythonBluePlanetServerCodegen.class);
@ -145,7 +150,7 @@ public class PythonBluePlanetServerCodegen extends AbstractPythonConnexionServer
supportingFiles.add(new SupportingFile("app/{{packageName}}/controllers/__init__.mustache", CONTROLLER_PATH, "__init__.py"));
supportingFiles.add(new SupportingFile("app/{{packageName}}/models/__init__.mustache", MODEL_PATH, "__init__.py"));
supportingFiles.add(new SupportingFile("app/{{packageName}}/models/base_model_.mustache", MODEL_PATH, "base_model_.py"));
supportingFiles.add(new SupportingFile("app/{{packageName}}/models/base_model.mustache", MODEL_PATH, "base_model.py"));
supportingFiles.add(new SupportingFile("app/{{packageName}}/test/__init__.mustache", TEST_PATH, "__init__.py"));
@ -220,7 +225,7 @@ public class PythonBluePlanetServerCodegen extends AbstractPythonConnexionServer
supportingFiles.add(new SupportingFile("app/{{packageName}}/controllers/__init__.mustache", CONTROLLER_PATH, "__init__.py"));
supportingFiles.add(new SupportingFile("app/{{packageName}}/models/__init__.mustache", MODEL_PATH, "__init__.py"));
supportingFiles.add(new SupportingFile("app/{{packageName}}/models/base_model_.mustache", MODEL_PATH, "base_model_.py"));
supportingFiles.add(new SupportingFile("app/{{packageName}}/models/base_model.mustache", MODEL_PATH, "base_model.py"));
supportingFiles.add(new SupportingFile("app/{{packageName}}/test/__init__.mustache", TEST_PATH, "__init__.py"));

View File

@ -4,7 +4,7 @@ from datetime import date, datetime
from typing import List, Dict, Type
from {{modelPackage}}.base_model_ import Model
from {{modelPackage}}.base_model import Model
{{#models}}
{{#model}}
{{#pyImports}}

View File

@ -1,7 +1,7 @@
from connexion.apps.flask_app import FlaskJSONEncoder
import six
from {{modelPackage}}.base_model_ import Model
from {{modelPackage}}.base_model import Model
class JSONEncoder(FlaskJSONEncoder):

View File

@ -5,7 +5,7 @@ from datetime import date, datetime # noqa: F401
from typing import List, Dict # noqa: F401
from {{modelPackage}}.base_model_ import Model
from {{modelPackage}}.base_model import Model
{{#imports}}{{import}} # noqa: F401,E501
{{/imports}}
from {{packageName}} import util

View File

@ -1,7 +1,7 @@
from connexion.apps.flask_app import FlaskJSONEncoder
import six
from {{modelPackage}}.base_model_ import Model
from {{modelPackage}}.base_model import Model
class JSONEncoder(FlaskJSONEncoder):

View File

@ -5,7 +5,7 @@ from datetime import date, datetime # noqa: F401
from typing import List, Dict # noqa: F401
from {{modelPackage}}.base_model_ import Model
from {{modelPackage}}.base_model import Model
{{#models}}
{{#model}}
{{#pyImports}}

View File

@ -0,0 +1,31 @@
.dockerignore
.gitignore
.travis.yml
Dockerfile
README.md
git_push.sh
openapi_server/__init__.py
openapi_server/__main__.py
openapi_server/controllers/__init__.py
openapi_server/controllers/pet_controller.py
openapi_server/controllers/security_controller.py
openapi_server/controllers/store_controller.py
openapi_server/controllers/user_controller.py
openapi_server/encoder.py
openapi_server/models/__init__.py
openapi_server/models/api_response.py
openapi_server/models/base_model.py
openapi_server/models/category.py
openapi_server/models/order.py
openapi_server/models/pet.py
openapi_server/models/status_enum.py
openapi_server/models/tag.py
openapi_server/models/user.py
openapi_server/openapi/openapi.yaml
openapi_server/test/__init__.py
openapi_server/typing_utils.py
openapi_server/util.py
requirements.txt
setup.py
test-requirements.txt
tox.ini

View File

@ -1 +1 @@
5.0.0-SNAPSHOT
7.0.0-SNAPSHOT

View File

@ -1,7 +1,6 @@
# ref: https://docs.travis-ci.com/user/languages/python
language: python
python:
- "2.7"
- "3.2"
- "3.3"
- "3.4"

View File

@ -1,16 +1,16 @@
FROM python:2-alpine
FROM python:3-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
RUN pip3 install --no-cache-dir -r requirements.txt
COPY . /usr/src/app
EXPOSE 8080
ENTRYPOINT ["python"]
ENTRYPOINT ["python3"]
CMD ["-m", "openapi_server"]

View File

@ -8,14 +8,14 @@ is an example of building a OpenAPI-enabled Flask server.
This example uses the [Connexion](https://github.com/zalando/connexion) library on top of Flask.
## Requirements
Python 2.7+
Python 3.5.2+
## Usage
To run the server, please execute the following from the root directory:
```
pip install -r requirements.txt
python -m openapi_server
pip3 install -r requirements.txt
python3 -m openapi_server
```
and open your browser to here:

View File

@ -38,14 +38,14 @@ git add .
git commit -m "$release_note"
# Sets the new remote
git_remote=`git remote`
git_remote=$(git remote)
if [ "$git_remote" = "" ]; then # git remote not defined
if [ "$GIT_TOKEN" = "" ]; then
echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
else
git remote add origin https://${git_user_id}:${GIT_TOKEN}@${git_host}/${git_user_id}/${git_repo_id}.git
git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
fi
fi
@ -55,4 +55,3 @@ git pull origin master
# Pushes (Forces) the changes in the local repository up to the remote repository
echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
git push origin master 2>&1 | grep -v 'To https'

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
import connexion
@ -11,6 +11,7 @@ def main():
app.add_api('openapi.yaml',
arguments={'title': 'OpenAPI Petstore'},
pythonic_params=True)
app.run(port=8080)

View File

@ -1,5 +1,8 @@
import connexion
import six
from typing import Dict
from typing import Tuple
from typing import Union
from openapi_server.models.api_response import ApiResponse # noqa: E501
from openapi_server.models.pet import Pet # noqa: E501
@ -17,7 +20,7 @@ def add_pet(pet): # noqa: E501
:param pet: Pet object that needs to be added to the store
:type pet: dict | bytes
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
if connexion.request.is_json:
pet = Pet.from_dict(connexion.request.get_json()) # noqa: E501
@ -34,7 +37,7 @@ def delete_pet(pet_id, api_key=None): # noqa: E501
:param api_key:
:type api_key: str
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
return 'do some magic!'
@ -47,7 +50,7 @@ def find_pets_by_status(status): # noqa: E501
:param status: Status values that need to be considered for filter
:type status: List[str]
:rtype: List[Pet]
:rtype: Union[List[Pet], Tuple[List[Pet], int], Tuple[List[Pet], int, Dict[str, str]]
"""
return 'do some magic!'
@ -60,7 +63,7 @@ def find_pets_by_tags(tags): # noqa: E501
:param tags: Tags to filter by
:type tags: List[str]
:rtype: List[Pet]
:rtype: Union[List[Pet], Tuple[List[Pet], int], Tuple[List[Pet], int, Dict[str, str]]
"""
return 'do some magic!'
@ -73,7 +76,7 @@ def get_pet_by_id(pet_id): # noqa: E501
:param pet_id: ID of pet to return
:type pet_id: int
:rtype: Pet
:rtype: Union[Pet, Tuple[Pet, int], Tuple[Pet, int, Dict[str, str]]
"""
return 'do some magic!'
@ -86,7 +89,7 @@ def update_pet(pet): # noqa: E501
:param pet: Pet object that needs to be added to the store
:type pet: dict | bytes
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
if connexion.request.is_json:
pet = Pet.from_dict(connexion.request.get_json()) # noqa: E501
@ -103,7 +106,7 @@ def update_pet_status_with_enum(pet_id, status): # noqa: E501
:param status: The required status
:type status: dict | bytes
:rtype: Pet
:rtype: Union[Pet, Tuple[Pet, int], Tuple[Pet, int, Dict[str, str]]
"""
if connexion.request.is_json:
status = StatusEnum.from_dict(connexion.request.get_json()) # noqa: E501
@ -120,7 +123,7 @@ def update_pet_with_form(pet_id, pet_form=None): # noqa: E501
:param pet_form:
:type pet_form: dict | bytes
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
if connexion.request.is_json:
pet_form = PetForm.from_dict(connexion.request.get_json()) # noqa: E501
@ -137,7 +140,7 @@ def upload_file(pet_id, upload_form=None): # noqa: E501
:param upload_form:
:type upload_form: dict | bytes
:rtype: ApiResponse
:rtype: Union[ApiResponse, Tuple[ApiResponse, int], Tuple[ApiResponse, int, Dict[str, str]]
"""
if connexion.request.is_json:
upload_form = UploadForm.from_dict(connexion.request.get_json()) # noqa: E501

View File

@ -1,6 +1,35 @@
from typing import List
def info_from_petstore_auth(token):
"""
Validate and decode token.
Returned value will be passed in 'token_info' parameter of your operation function, if there is one.
'sub' or 'uid' will be set in 'user' parameter of your operation function, if there is one.
'scope' or 'scopes' will be passed to scope validation function.
:param token Token provided by Authorization header
:type token: str
:return: Decoded token information or None if token is invalid
:rtype: dict | None
"""
return {'scopes': ['read:pets', 'write:pets'], 'uid': 'user_id'}
def validate_scope_petstore_auth(required_scopes, token_scopes):
"""
Validate required scopes are included in token scope
:param required_scopes Required scope to access called API
:type required_scopes: List[str]
:param token_scopes Scope present in token
:type token_scopes: List[str]
:return: True if access to called API is allowed
:rtype: bool
"""
return set(required_scopes).issubset(set(token_scopes))
def info_from_api_key(api_key, required_scopes):
"""
Check and retrieve authentication information from api_key.
@ -32,33 +61,3 @@ def info_from_auth_cookie(api_key, required_scopes):
"""
return {'uid': 'user_id'}
def info_from_petstore_auth(token):
"""
Validate and decode token.
Returned value will be passed in 'token_info' parameter of your operation function, if there is one.
'sub' or 'uid' will be set in 'user' parameter of your operation function, if there is one.
'scope' or 'scopes' will be passed to scope validation function.
:param token Token provided by Authorization header
:type token: str
:return: Decoded token information or None if token is invalid
:rtype: dict | None
"""
return {'scopes': ['read:pets', 'write:pets'], 'uid': 'user_id'}
def validate_scope_petstore_auth(required_scopes, token_scopes):
"""
Validate required scopes are included in token scope
:param required_scopes Required scope to access called API
:type required_scopes: List[str]
:param token_scopes Scope present in token
:type token_scopes: List[str]
:return: True if access to called API is allowed
:rtype: bool
"""
return set(required_scopes).issubset(set(token_scopes))

View File

@ -1,5 +1,8 @@
import connexion
import six
from typing import Dict
from typing import Tuple
from typing import Union
from openapi_server.models.order import Order # noqa: E501
from openapi_server import util
@ -13,7 +16,7 @@ def delete_order(order_id): # noqa: E501
:param order_id: ID of the order that needs to be deleted
:type order_id: str
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
return 'do some magic!'
@ -24,7 +27,7 @@ def get_inventory(): # noqa: E501
Returns a map of status codes to quantities # noqa: E501
:rtype: Dict[str, int]
:rtype: Union[Dict[str, int], Tuple[Dict[str, int], int], Tuple[Dict[str, int], int, Dict[str, str]]
"""
return 'do some magic!'
@ -37,7 +40,7 @@ def get_order_by_id(order_id): # noqa: E501
:param order_id: ID of pet that needs to be fetched
:type order_id: int
:rtype: Order
:rtype: Union[Order, Tuple[Order, int], Tuple[Order, int, Dict[str, str]]
"""
return 'do some magic!'
@ -50,7 +53,7 @@ def place_order(order): # noqa: E501
:param order: order placed for purchasing the pet
:type order: dict | bytes
:rtype: Order
:rtype: Union[Order, Tuple[Order, int], Tuple[Order, int, Dict[str, str]]
"""
if connexion.request.is_json:
order = Order.from_dict(connexion.request.get_json()) # noqa: E501

View File

@ -1,5 +1,8 @@
import connexion
import six
from typing import Dict
from typing import Tuple
from typing import Union
from openapi_server.models.user import User # noqa: E501
from openapi_server import util
@ -13,7 +16,7 @@ def create_user(user): # noqa: E501
:param user: Created user object
:type user: dict | bytes
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
if connexion.request.is_json:
user = User.from_dict(connexion.request.get_json()) # noqa: E501
@ -28,7 +31,7 @@ def create_users_with_array_input(user): # noqa: E501
:param user: List of user objects
:type user: list | bytes
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
if connexion.request.is_json:
user = [User.from_dict(d) for d in connexion.request.get_json()] # noqa: E501
@ -43,7 +46,7 @@ def create_users_with_list_input(user): # noqa: E501
:param user: List of user objects
:type user: list | bytes
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
if connexion.request.is_json:
user = [User.from_dict(d) for d in connexion.request.get_json()] # noqa: E501
@ -58,7 +61,7 @@ def delete_user(username): # noqa: E501
:param username: The name that needs to be deleted
:type username: str
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
return 'do some magic!'
@ -71,7 +74,7 @@ def get_user_by_name(username): # noqa: E501
:param username: The name that needs to be fetched. Use user1 for testing.
:type username: str
:rtype: User
:rtype: Union[User, Tuple[User, int], Tuple[User, int, Dict[str, str]]
"""
return 'do some magic!'
@ -86,7 +89,7 @@ def login_user(username, password): # noqa: E501
:param password: The password for login in clear text
:type password: str
:rtype: str
:rtype: Union[str, Tuple[str, int], Tuple[str, int, Dict[str, str]]
"""
return 'do some magic!'
@ -97,7 +100,7 @@ def logout_user(): # noqa: E501
# noqa: E501
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
return 'do some magic!'
@ -112,7 +115,7 @@ def update_user(username, user): # noqa: E501
:param user: Updated user object
:type user: dict | bytes
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
if connexion.request.is_json:
user = User.from_dict(connexion.request.get_json()) # noqa: E501

View File

@ -1,7 +1,7 @@
from connexion.apps.flask_app import FlaskJSONEncoder
import six
from openapi_server.models.base_model_ import Model
from openapi_server.models.base_model import Model
class JSONEncoder(FlaskJSONEncoder):

View File

@ -7,8 +7,6 @@ from openapi_server.models.api_response import ApiResponse
from openapi_server.models.category import Category
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

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server import util
@ -42,7 +42,7 @@ class ApiResponse(Model):
self._message = message
@classmethod
def from_dict(cls, dikt):
def from_dict(cls, dikt) -> 'ApiResponse':
"""Returns the dict as a model
:param dikt: A dict.

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
import re
from openapi_server import util
@ -21,12 +21,12 @@ class Category(Model):
"""Category - a model defined in OpenAPI
:param id: The id of this Category. # noqa: E501
:type id: long
:type id: int
:param name: The name of this Category. # noqa: E501
:type name: str
"""
self.openapi_types = {
'id': long,
'id': int,
'name': str
}
@ -39,7 +39,7 @@ class Category(Model):
self._name = name
@classmethod
def from_dict(cls, dikt):
def from_dict(cls, dikt) -> 'Category':
"""Returns the dict as a model
:param dikt: A dict.
@ -55,7 +55,7 @@ class Category(Model):
:return: The id of this Category.
:rtype: long
:rtype: int
"""
return self._id
@ -65,7 +65,7 @@ class Category(Model):
:param id: The id of this Category.
:type id: long
:type id: int
"""
self._id = id

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server import util
@ -19,9 +19,9 @@ class Order(Model):
"""Order - a model defined in OpenAPI
:param id: The id of this Order. # noqa: E501
:type id: long
:type id: int
:param pet_id: The pet_id of this Order. # noqa: E501
:type pet_id: long
:type pet_id: int
:param quantity: The quantity of this Order. # noqa: E501
:type quantity: int
:param ship_date: The ship_date of this Order. # noqa: E501
@ -32,8 +32,8 @@ class Order(Model):
:type complete: bool
"""
self.openapi_types = {
'id': long,
'pet_id': long,
'id': int,
'pet_id': int,
'quantity': int,
'ship_date': datetime,
'status': str,
@ -57,7 +57,7 @@ class Order(Model):
self._complete = complete
@classmethod
def from_dict(cls, dikt):
def from_dict(cls, dikt) -> 'Order':
"""Returns the dict as a model
:param dikt: A dict.
@ -73,7 +73,7 @@ class Order(Model):
:return: The id of this Order.
:rtype: long
:rtype: int
"""
return self._id
@ -83,7 +83,7 @@ class Order(Model):
:param id: The id of this Order.
:type id: long
:type id: int
"""
self._id = id
@ -94,7 +94,7 @@ class Order(Model):
:return: The pet_id of this Order.
:rtype: long
:rtype: int
"""
return self._pet_id
@ -104,7 +104,7 @@ class Order(Model):
:param pet_id: The pet_id of this Order.
:type pet_id: long
:type pet_id: int
"""
self._pet_id = pet_id

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server.models.category import Category
from openapi_server.models.tag import Tag
from openapi_server import util
@ -23,7 +23,7 @@ class Pet(Model):
"""Pet - a model defined in OpenAPI
:param id: The id of this Pet. # noqa: E501
:type id: long
:type id: int
:param category: The category of this Pet. # noqa: E501
:type category: Category
:param name: The name of this Pet. # noqa: E501
@ -36,7 +36,7 @@ class Pet(Model):
:type status: str
"""
self.openapi_types = {
'id': long,
'id': int,
'category': Category,
'name': str,
'photo_urls': List[str],
@ -61,7 +61,7 @@ class Pet(Model):
self._status = status
@classmethod
def from_dict(cls, dikt):
def from_dict(cls, dikt) -> 'Pet':
"""Returns the dict as a model
:param dikt: A dict.
@ -77,7 +77,7 @@ class Pet(Model):
:return: The id of this Pet.
:rtype: long
:rtype: int
"""
return self._id
@ -87,7 +87,7 @@ class Pet(Model):
:param id: The id of this Pet.
:type id: long
:type id: int
"""
self._id = id

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server import util
@ -32,7 +32,7 @@ class StatusEnum(Model):
}
@classmethod
def from_dict(cls, dikt):
def from_dict(cls, dikt) -> 'StatusEnum':
"""Returns the dict as a model
:param dikt: A dict.

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server import util
@ -19,12 +19,12 @@ class Tag(Model):
"""Tag - a model defined in OpenAPI
:param id: The id of this Tag. # noqa: E501
:type id: long
:type id: int
:param name: The name of this Tag. # noqa: E501
:type name: str
"""
self.openapi_types = {
'id': long,
'id': int,
'name': str
}
@ -37,7 +37,7 @@ class Tag(Model):
self._name = name
@classmethod
def from_dict(cls, dikt):
def from_dict(cls, dikt) -> 'Tag':
"""Returns the dict as a model
:param dikt: A dict.
@ -53,7 +53,7 @@ class Tag(Model):
:return: The id of this Tag.
:rtype: long
:rtype: int
"""
return self._id
@ -63,7 +63,7 @@ class Tag(Model):
:param id: The id of this Tag.
:type id: long
:type id: int
"""
self._id = id

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server import util
@ -19,7 +19,7 @@ class User(Model):
"""User - a model defined in OpenAPI
:param id: The id of this User. # noqa: E501
:type id: long
:type id: int
:param username: The username of this User. # noqa: E501
:type username: str
:param first_name: The first_name of this User. # noqa: E501
@ -36,7 +36,7 @@ class User(Model):
:type user_status: int
"""
self.openapi_types = {
'id': long,
'id': int,
'username': str,
'first_name': str,
'last_name': str,
@ -67,7 +67,7 @@ class User(Model):
self._user_status = user_status
@classmethod
def from_dict(cls, dikt):
def from_dict(cls, dikt) -> 'User':
"""Returns the dict as a model
:param dikt: A dict.
@ -83,7 +83,7 @@ class User(Model):
:return: The id of this User.
:rtype: long
:rtype: int
"""
return self._id
@ -93,7 +93,7 @@ class User(Model):
:param id: The id of this User.
:type id: long
:type id: int
"""
self._id = id

View File

@ -1,7 +1,7 @@
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.
description: "This is a sample server Petstore server. For this sample, you can\
\ use the api key `special-key` to test the authorization filters."
license:
name: Apache-2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
@ -22,6 +22,7 @@ tags:
paths:
/pet:
post:
description: ""
operationId: add_pet
requestBody:
$ref: '#/components/requestBodies/Pet'
@ -37,6 +38,7 @@ paths:
- pet
x-openapi-router-controller: openapi_server.controllers.pet_controller
put:
description: ""
operationId: update_pet
requestBody:
$ref: '#/components/requestBodies/Pet'
@ -101,8 +103,8 @@ paths:
/pet/findByTags:
get:
deprecated: true
description: Multiple tags can be provided with comma separated strings. Use
tag1, tag2, tag3 for testing.
description: "Multiple tags can be provided with comma separated strings. Use\
\ tag1, tag2, tag3 for testing."
operationId: find_pets_by_tags
parameters:
- description: Tags to filter by
@ -140,6 +142,7 @@ paths:
x-openapi-router-controller: openapi_server.controllers.pet_controller
/pet/{petId}:
delete:
description: ""
operationId: delete_pet
parameters:
- explode: false
@ -203,6 +206,7 @@ paths:
- pet
x-openapi-router-controller: openapi_server.controllers.pet_controller
patch:
description: ""
operationId: update_pet_status_with_enum
parameters:
- description: ID of pet to return
@ -242,6 +246,7 @@ paths:
- pet
x-openapi-router-controller: openapi_server.controllers.pet_controller
post:
description: ""
operationId: update_pet_with_form
parameters:
- description: ID of pet that needs to be updated
@ -268,6 +273,7 @@ paths:
x-openapi-router-controller: openapi_server.controllers.pet_controller
/pet/{petId}/uploadImage:
post:
description: ""
operationId: upload_file
parameters:
- description: ID of pet to update
@ -318,6 +324,7 @@ paths:
x-openapi-router-controller: openapi_server.controllers.store_controller
/store/order:
post:
description: ""
operationId: place_order
requestBody:
content:
@ -421,6 +428,7 @@ paths:
x-openapi-router-controller: openapi_server.controllers.user_controller
/user/createWithArray:
post:
description: ""
operationId: create_users_with_array_input
requestBody:
$ref: '#/components/requestBodies/UserArray'
@ -435,6 +443,7 @@ paths:
x-openapi-router-controller: openapi_server.controllers.user_controller
/user/createWithList:
post:
description: ""
operationId: create_users_with_list_input
requestBody:
$ref: '#/components/requestBodies/UserArray'
@ -449,6 +458,7 @@ paths:
x-openapi-router-controller: openapi_server.controllers.user_controller
/user/login:
get:
description: ""
operationId: login_user
parameters:
- description: The user name for login
@ -457,7 +467,7 @@ paths:
name: username
required: true
schema:
pattern: ^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$
pattern: "^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$"
type: string
style: form
- description: The password for login in clear text
@ -509,6 +519,7 @@ paths:
x-openapi-router-controller: openapi_server.controllers.user_controller
/user/logout:
get:
description: ""
operationId: logout_user
responses:
default:
@ -544,6 +555,7 @@ paths:
- user
x-openapi-router-controller: openapi_server.controllers.user_controller
get:
description: ""
operationId: get_user_by_name
parameters:
- description: The name that needs to be fetched. Use user1 for testing.
@ -663,15 +675,19 @@ components:
properties:
id:
format: int64
title: id
type: integer
petId:
format: int64
title: petId
type: integer
quantity:
format: int32
title: quantity
type: integer
shipDate:
format: date-time
title: shipDate
type: string
status:
description: Order Status
@ -679,9 +695,11 @@ components:
- placed
- approved
- delivered
title: status
type: string
complete:
default: false
title: complete
type: boolean
title: Pet Order
type: object
@ -695,9 +713,11 @@ components:
properties:
id:
format: int64
title: id
type: integer
name:
pattern: ^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$
pattern: "^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$"
title: name
type: string
title: Pet category
type: object
@ -717,22 +737,30 @@ components:
properties:
id:
format: int64
title: id
type: integer
username:
title: username
type: string
firstName:
title: firstName
type: string
lastName:
title: lastName
type: string
email:
title: email
type: string
password:
title: password
type: string
phone:
title: phone
type: string
userStatus:
description: User Status
format: int32
title: userStatus
type: integer
title: a User
type: object
@ -746,8 +774,10 @@ components:
properties:
id:
format: int64
title: id
type: integer
name:
title: name
type: string
title: Pet Tag
type: object
@ -773,15 +803,18 @@ components:
properties:
id:
format: int64
title: id
type: integer
category:
$ref: '#/components/schemas/Category'
name:
example: doggie
title: name
type: string
photoUrls:
items:
type: string
title: photoUrls
type: array
xml:
name: photoUrl
@ -789,6 +822,7 @@ components:
tags:
items:
$ref: '#/components/schemas/Tag'
title: tags
type: array
xml:
name: tag
@ -799,6 +833,7 @@ components:
- available
- pending
- sold
title: status
type: string
required:
- name
@ -812,9 +847,11 @@ components:
properties:
name:
description: Updated name of the pet
title: name
type: string
status:
description: Updated status of the pet
title: status
type: string
required:
- name
@ -826,10 +863,12 @@ components:
properties:
additionalMetadata:
description: Additional data to pass to server
title: additionalMetadata
type: string
file:
description: file to upload
format: binary
title: file
type: string
required:
- file
@ -844,10 +883,13 @@ components:
properties:
code:
format: int32
title: code
type: integer
type:
title: type
type: string
message:
title: message
type: string
title: An uploaded response
type: object
@ -857,6 +899,7 @@ components:
- available
- pending
- sold
title: statusEnum
type: string
securitySchemes:
petstore_auth:
@ -867,15 +910,15 @@ components:
write:pets: modify pets in your account
read:pets: read your pets
type: oauth2
x-tokenInfoFunc: openapi_server.controllers.security_controller_.info_from_petstore_auth
x-scopeValidateFunc: openapi_server.controllers.security_controller_.validate_scope_petstore_auth
x-tokenInfoFunc: openapi_server.controllers.security_controller.info_from_petstore_auth
x-scopeValidateFunc: openapi_server.controllers.security_controller.validate_scope_petstore_auth
api_key:
in: header
name: api_key
type: apiKey
x-apikeyInfoFunc: openapi_server.controllers.security_controller_.info_from_api_key
x-apikeyInfoFunc: openapi_server.controllers.security_controller.info_from_api_key
auth_cookie:
in: cookie
name: AUTH_KEY
type: apiKey
x-apikeyInfoFunc: openapi_server.controllers.security_controller_.info_from_auth_cookie
x-apikeyInfoFunc: openapi_server.controllers.security_controller.info_from_auth_cookie

View File

@ -67,6 +67,9 @@ def deserialize_date(string):
:return: date.
:rtype: date
"""
if string is None:
return None
try:
from dateutil.parser import parse
return parse(string).date()
@ -84,6 +87,9 @@ def deserialize_datetime(string):
:return: datetime.
:rtype: datetime
"""
if string is None:
return None
try:
from dateutil.parser import parse
return parse(string)

View File

@ -1,16 +1,11 @@
connexion[swagger-ui] >= 2.6.0; python_version>="3.6"
# 2.3 is the last version that supports python 3.4-3.5
connexion[swagger-ui] <= 2.3.0; python_version=="3.5" or python_version=="3.4"
connexion[swagger-ui] == 2.4.0; python_version<="2.7"
# connexion requires werkzeug but connexion < 2.4.0 does not install werkzeug
# we must peg werkzeug versions below to fix connexion
# https://github.com/zalando/connexion/pull/1044
werkzeug == 0.16.1; python_version=="3.5" or python_version=="3.4"
swagger-ui-bundle >= 0.0.2
python_dateutil >= 2.6.0
typing >= 3.5.2.2
# For specs with timestamps, pyyaml 5.3 broke connexion's spec parsing in python 2.
# Connexion uses copy.deepcopy() on the spec, thus hitting this bug:
# https://github.com/yaml/pyyaml/issues/387
pyyaml < 5.3; python_version<="2.7"
setuptools >= 21.0.0
Flask == 2.1.1

View File

@ -16,8 +16,7 @@ VERSION = "1.0.0"
REQUIRES = [
"connexion>=2.0.2",
"swagger-ui-bundle>=0.0.2",
"python_dateutil>=2.6.0",
"typing>=3.5.2.2"
"python_dateutil>=2.6.0"
]
setup(

View File

@ -1,4 +1,4 @@
pytest~=4.6.7 # needed for python 2.7+3.4
pytest~=7.1.0
pytest-cov>=2.8.1
pytest-randomly==1.2.3 # needed for python 2.7+3.4
Flask-Testing==0.8.0
pytest-randomly>=1.2.3
Flask-Testing==0.8.1

View File

@ -1,5 +1,5 @@
[tox]
envlist = py27, py3
envlist = py3
skipsdist=True
[testenv]

View File

@ -0,0 +1,31 @@
.dockerignore
.gitignore
.travis.yml
Dockerfile
README.md
git_push.sh
openapi_server/__init__.py
openapi_server/__main__.py
openapi_server/controllers/__init__.py
openapi_server/controllers/pet_controller.py
openapi_server/controllers/security_controller.py
openapi_server/controllers/store_controller.py
openapi_server/controllers/user_controller.py
openapi_server/encoder.py
openapi_server/models/__init__.py
openapi_server/models/api_response.py
openapi_server/models/base_model.py
openapi_server/models/category.py
openapi_server/models/order.py
openapi_server/models/pet.py
openapi_server/models/status_enum.py
openapi_server/models/tag.py
openapi_server/models/user.py
openapi_server/openapi/openapi.yaml
openapi_server/test/__init__.py
openapi_server/typing_utils.py
openapi_server/util.py
requirements.txt
setup.py
test-requirements.txt
tox.ini

View File

@ -1 +1 @@
5.0.0-SNAPSHOT
7.0.0-SNAPSHOT

View File

@ -38,14 +38,14 @@ git add .
git commit -m "$release_note"
# Sets the new remote
git_remote=`git remote`
git_remote=$(git remote)
if [ "$git_remote" = "" ]; then # git remote not defined
if [ "$GIT_TOKEN" = "" ]; then
echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
else
git remote add origin https://${git_user_id}:${GIT_TOKEN}@${git_host}/${git_user_id}/${git_repo_id}.git
git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
fi
fi
@ -55,4 +55,3 @@ git pull origin master
# Pushes (Forces) the changes in the local repository up to the remote repository
echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
git push origin master 2>&1 | grep -v 'To https'

View File

@ -11,6 +11,7 @@ def main():
app.add_api('openapi.yaml',
arguments={'title': 'OpenAPI Petstore'},
pythonic_params=True)
app.run(port=8080)

View File

@ -1,5 +1,8 @@
import connexion
import six
from typing import Dict
from typing import Tuple
from typing import Union
from openapi_server.models.api_response import ApiResponse # noqa: E501
from openapi_server.models.pet import Pet # noqa: E501
@ -17,7 +20,7 @@ def add_pet(pet): # noqa: E501
:param pet: Pet object that needs to be added to the store
:type pet: dict | bytes
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
if connexion.request.is_json:
pet = Pet.from_dict(connexion.request.get_json()) # noqa: E501
@ -34,7 +37,7 @@ def delete_pet(pet_id, api_key=None): # noqa: E501
:param api_key:
:type api_key: str
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
return 'do some magic!'
@ -47,7 +50,7 @@ def find_pets_by_status(status): # noqa: E501
:param status: Status values that need to be considered for filter
:type status: List[str]
:rtype: List[Pet]
:rtype: Union[List[Pet], Tuple[List[Pet], int], Tuple[List[Pet], int, Dict[str, str]]
"""
return 'do some magic!'
@ -60,7 +63,7 @@ def find_pets_by_tags(tags): # noqa: E501
:param tags: Tags to filter by
:type tags: List[str]
:rtype: List[Pet]
:rtype: Union[List[Pet], Tuple[List[Pet], int], Tuple[List[Pet], int, Dict[str, str]]
"""
return 'do some magic!'
@ -73,7 +76,7 @@ def get_pet_by_id(pet_id): # noqa: E501
:param pet_id: ID of pet to return
:type pet_id: int
:rtype: Pet
:rtype: Union[Pet, Tuple[Pet, int], Tuple[Pet, int, Dict[str, str]]
"""
return 'do some magic!'
@ -86,7 +89,7 @@ def update_pet(pet): # noqa: E501
:param pet: Pet object that needs to be added to the store
:type pet: dict | bytes
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
if connexion.request.is_json:
pet = Pet.from_dict(connexion.request.get_json()) # noqa: E501
@ -103,7 +106,7 @@ def update_pet_status_with_enum(pet_id, status): # noqa: E501
:param status: The required status
:type status: dict | bytes
:rtype: Pet
:rtype: Union[Pet, Tuple[Pet, int], Tuple[Pet, int, Dict[str, str]]
"""
if connexion.request.is_json:
status = StatusEnum.from_dict(connexion.request.get_json()) # noqa: E501
@ -120,7 +123,7 @@ def update_pet_with_form(pet_id, pet_form=None): # noqa: E501
:param pet_form:
:type pet_form: dict | bytes
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
if connexion.request.is_json:
pet_form = PetForm.from_dict(connexion.request.get_json()) # noqa: E501
@ -137,7 +140,7 @@ def upload_file(pet_id, upload_form=None): # noqa: E501
:param upload_form:
:type upload_form: dict | bytes
:rtype: ApiResponse
:rtype: Union[ApiResponse, Tuple[ApiResponse, int], Tuple[ApiResponse, int, Dict[str, str]]
"""
if connexion.request.is_json:
upload_form = UploadForm.from_dict(connexion.request.get_json()) # noqa: E501

View File

@ -1,6 +1,35 @@
from typing import List
def info_from_petstore_auth(token):
"""
Validate and decode token.
Returned value will be passed in 'token_info' parameter of your operation function, if there is one.
'sub' or 'uid' will be set in 'user' parameter of your operation function, if there is one.
'scope' or 'scopes' will be passed to scope validation function.
:param token Token provided by Authorization header
:type token: str
:return: Decoded token information or None if token is invalid
:rtype: dict | None
"""
return {'scopes': ['read:pets', 'write:pets'], 'uid': 'user_id'}
def validate_scope_petstore_auth(required_scopes, token_scopes):
"""
Validate required scopes are included in token scope
:param required_scopes Required scope to access called API
:type required_scopes: List[str]
:param token_scopes Scope present in token
:type token_scopes: List[str]
:return: True if access to called API is allowed
:rtype: bool
"""
return set(required_scopes).issubset(set(token_scopes))
def info_from_api_key(api_key, required_scopes):
"""
Check and retrieve authentication information from api_key.
@ -32,33 +61,3 @@ def info_from_auth_cookie(api_key, required_scopes):
"""
return {'uid': 'user_id'}
def info_from_petstore_auth(token):
"""
Validate and decode token.
Returned value will be passed in 'token_info' parameter of your operation function, if there is one.
'sub' or 'uid' will be set in 'user' parameter of your operation function, if there is one.
'scope' or 'scopes' will be passed to scope validation function.
:param token Token provided by Authorization header
:type token: str
:return: Decoded token information or None if token is invalid
:rtype: dict | None
"""
return {'scopes': ['read:pets', 'write:pets'], 'uid': 'user_id'}
def validate_scope_petstore_auth(required_scopes, token_scopes):
"""
Validate required scopes are included in token scope
:param required_scopes Required scope to access called API
:type required_scopes: List[str]
:param token_scopes Scope present in token
:type token_scopes: List[str]
:return: True if access to called API is allowed
:rtype: bool
"""
return set(required_scopes).issubset(set(token_scopes))

View File

@ -1,5 +1,8 @@
import connexion
import six
from typing import Dict
from typing import Tuple
from typing import Union
from openapi_server.models.order import Order # noqa: E501
from openapi_server import util
@ -13,7 +16,7 @@ def delete_order(order_id): # noqa: E501
:param order_id: ID of the order that needs to be deleted
:type order_id: str
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
return 'do some magic!'
@ -24,7 +27,7 @@ def get_inventory(): # noqa: E501
Returns a map of status codes to quantities # noqa: E501
:rtype: Dict[str, int]
:rtype: Union[Dict[str, int], Tuple[Dict[str, int], int], Tuple[Dict[str, int], int, Dict[str, str]]
"""
return 'do some magic!'
@ -37,7 +40,7 @@ def get_order_by_id(order_id): # noqa: E501
:param order_id: ID of pet that needs to be fetched
:type order_id: int
:rtype: Order
:rtype: Union[Order, Tuple[Order, int], Tuple[Order, int, Dict[str, str]]
"""
return 'do some magic!'
@ -50,7 +53,7 @@ def place_order(order): # noqa: E501
:param order: order placed for purchasing the pet
:type order: dict | bytes
:rtype: Order
:rtype: Union[Order, Tuple[Order, int], Tuple[Order, int, Dict[str, str]]
"""
if connexion.request.is_json:
order = Order.from_dict(connexion.request.get_json()) # noqa: E501

View File

@ -1,5 +1,8 @@
import connexion
import six
from typing import Dict
from typing import Tuple
from typing import Union
from openapi_server.models.user import User # noqa: E501
from openapi_server import util
@ -13,7 +16,7 @@ def create_user(user): # noqa: E501
:param user: Created user object
:type user: dict | bytes
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
if connexion.request.is_json:
user = User.from_dict(connexion.request.get_json()) # noqa: E501
@ -28,7 +31,7 @@ def create_users_with_array_input(user): # noqa: E501
:param user: List of user objects
:type user: list | bytes
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
if connexion.request.is_json:
user = [User.from_dict(d) for d in connexion.request.get_json()] # noqa: E501
@ -43,7 +46,7 @@ def create_users_with_list_input(user): # noqa: E501
:param user: List of user objects
:type user: list | bytes
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
if connexion.request.is_json:
user = [User.from_dict(d) for d in connexion.request.get_json()] # noqa: E501
@ -58,7 +61,7 @@ def delete_user(username): # noqa: E501
:param username: The name that needs to be deleted
:type username: str
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
return 'do some magic!'
@ -71,7 +74,7 @@ def get_user_by_name(username): # noqa: E501
:param username: The name that needs to be fetched. Use user1 for testing.
:type username: str
:rtype: User
:rtype: Union[User, Tuple[User, int], Tuple[User, int, Dict[str, str]]
"""
return 'do some magic!'
@ -86,7 +89,7 @@ def login_user(username, password): # noqa: E501
:param password: The password for login in clear text
:type password: str
:rtype: str
:rtype: Union[str, Tuple[str, int], Tuple[str, int, Dict[str, str]]
"""
return 'do some magic!'
@ -97,7 +100,7 @@ def logout_user(): # noqa: E501
# noqa: E501
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
return 'do some magic!'
@ -112,7 +115,7 @@ def update_user(username, user): # noqa: E501
:param user: Updated user object
:type user: dict | bytes
:rtype: None
:rtype: Union[None, Tuple[None, int], Tuple[None, int, Dict[str, str]]
"""
if connexion.request.is_json:
user = User.from_dict(connexion.request.get_json()) # noqa: E501

View File

@ -1,7 +1,7 @@
from connexion.apps.flask_app import FlaskJSONEncoder
import six
from openapi_server.models.base_model_ import Model
from openapi_server.models.base_model import Model
class JSONEncoder(FlaskJSONEncoder):

View File

@ -7,8 +7,6 @@ from openapi_server.models.api_response import ApiResponse
from openapi_server.models.category import Category
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

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server import util

View File

@ -11,11 +11,11 @@ T = typing.TypeVar('T')
class Model(object):
# openapiTypes: The key is attribute name and the
# value is attribute type.
openapi_types = {}
openapi_types: typing.Dict[str, type] = {}
# attributeMap: The key is attribute name and the
# value is json key in definition.
attribute_map = {}
attribute_map: typing.Dict[str, str] = {}
@classmethod
def from_dict(cls: typing.Type[T], dikt) -> T:

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
import re
from openapi_server import util

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server import util

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server.models.category import Category
from openapi_server.models.tag import Tag
from openapi_server import util

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server import util

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server import util

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server import util

View File

@ -1,7 +1,7 @@
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.
description: "This is a sample server Petstore server. For this sample, you can\
\ use the api key `special-key` to test the authorization filters."
license:
name: Apache-2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
@ -22,6 +22,7 @@ tags:
paths:
/pet:
post:
description: ""
operationId: add_pet
requestBody:
$ref: '#/components/requestBodies/Pet'
@ -37,6 +38,7 @@ paths:
- pet
x-openapi-router-controller: openapi_server.controllers.pet_controller
put:
description: ""
operationId: update_pet
requestBody:
$ref: '#/components/requestBodies/Pet'
@ -101,8 +103,8 @@ paths:
/pet/findByTags:
get:
deprecated: true
description: Multiple tags can be provided with comma separated strings. Use
tag1, tag2, tag3 for testing.
description: "Multiple tags can be provided with comma separated strings. Use\
\ tag1, tag2, tag3 for testing."
operationId: find_pets_by_tags
parameters:
- description: Tags to filter by
@ -140,6 +142,7 @@ paths:
x-openapi-router-controller: openapi_server.controllers.pet_controller
/pet/{petId}:
delete:
description: ""
operationId: delete_pet
parameters:
- explode: false
@ -203,6 +206,7 @@ paths:
- pet
x-openapi-router-controller: openapi_server.controllers.pet_controller
patch:
description: ""
operationId: update_pet_status_with_enum
parameters:
- description: ID of pet to return
@ -242,6 +246,7 @@ paths:
- pet
x-openapi-router-controller: openapi_server.controllers.pet_controller
post:
description: ""
operationId: update_pet_with_form
parameters:
- description: ID of pet that needs to be updated
@ -268,6 +273,7 @@ paths:
x-openapi-router-controller: openapi_server.controllers.pet_controller
/pet/{petId}/uploadImage:
post:
description: ""
operationId: upload_file
parameters:
- description: ID of pet to update
@ -318,6 +324,7 @@ paths:
x-openapi-router-controller: openapi_server.controllers.store_controller
/store/order:
post:
description: ""
operationId: place_order
requestBody:
content:
@ -421,6 +428,7 @@ paths:
x-openapi-router-controller: openapi_server.controllers.user_controller
/user/createWithArray:
post:
description: ""
operationId: create_users_with_array_input
requestBody:
$ref: '#/components/requestBodies/UserArray'
@ -435,6 +443,7 @@ paths:
x-openapi-router-controller: openapi_server.controllers.user_controller
/user/createWithList:
post:
description: ""
operationId: create_users_with_list_input
requestBody:
$ref: '#/components/requestBodies/UserArray'
@ -449,6 +458,7 @@ paths:
x-openapi-router-controller: openapi_server.controllers.user_controller
/user/login:
get:
description: ""
operationId: login_user
parameters:
- description: The user name for login
@ -457,7 +467,7 @@ paths:
name: username
required: true
schema:
pattern: ^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$
pattern: "^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$"
type: string
style: form
- description: The password for login in clear text
@ -509,6 +519,7 @@ paths:
x-openapi-router-controller: openapi_server.controllers.user_controller
/user/logout:
get:
description: ""
operationId: logout_user
responses:
default:
@ -544,6 +555,7 @@ paths:
- user
x-openapi-router-controller: openapi_server.controllers.user_controller
get:
description: ""
operationId: get_user_by_name
parameters:
- description: The name that needs to be fetched. Use user1 for testing.
@ -663,15 +675,19 @@ components:
properties:
id:
format: int64
title: id
type: integer
petId:
format: int64
title: petId
type: integer
quantity:
format: int32
title: quantity
type: integer
shipDate:
format: date-time
title: shipDate
type: string
status:
description: Order Status
@ -679,9 +695,11 @@ components:
- placed
- approved
- delivered
title: status
type: string
complete:
default: false
title: complete
type: boolean
title: Pet Order
type: object
@ -695,9 +713,11 @@ components:
properties:
id:
format: int64
title: id
type: integer
name:
pattern: ^[a-zA-Z0-9]+[a-zA-Z0-9\.\-_]*[a-zA-Z0-9]+$
pattern: "^[a-zA-Z0-9]+[a-zA-Z0-9\\.\\-_]*[a-zA-Z0-9]+$"
title: name
type: string
title: Pet category
type: object
@ -717,22 +737,30 @@ components:
properties:
id:
format: int64
title: id
type: integer
username:
title: username
type: string
firstName:
title: firstName
type: string
lastName:
title: lastName
type: string
email:
title: email
type: string
password:
title: password
type: string
phone:
title: phone
type: string
userStatus:
description: User Status
format: int32
title: userStatus
type: integer
title: a User
type: object
@ -746,8 +774,10 @@ components:
properties:
id:
format: int64
title: id
type: integer
name:
title: name
type: string
title: Pet Tag
type: object
@ -773,15 +803,18 @@ components:
properties:
id:
format: int64
title: id
type: integer
category:
$ref: '#/components/schemas/Category'
name:
example: doggie
title: name
type: string
photoUrls:
items:
type: string
title: photoUrls
type: array
xml:
name: photoUrl
@ -789,6 +822,7 @@ components:
tags:
items:
$ref: '#/components/schemas/Tag'
title: tags
type: array
xml:
name: tag
@ -799,6 +833,7 @@ components:
- available
- pending
- sold
title: status
type: string
required:
- name
@ -812,9 +847,11 @@ components:
properties:
name:
description: Updated name of the pet
title: name
type: string
status:
description: Updated status of the pet
title: status
type: string
required:
- name
@ -826,10 +863,12 @@ components:
properties:
additionalMetadata:
description: Additional data to pass to server
title: additionalMetadata
type: string
file:
description: file to upload
format: binary
title: file
type: string
required:
- file
@ -844,10 +883,13 @@ components:
properties:
code:
format: int32
title: code
type: integer
type:
title: type
type: string
message:
title: message
type: string
title: An uploaded response
type: object
@ -857,6 +899,7 @@ components:
- available
- pending
- sold
title: statusEnum
type: string
securitySchemes:
petstore_auth:
@ -867,15 +910,15 @@ components:
write:pets: modify pets in your account
read:pets: read your pets
type: oauth2
x-tokenInfoFunc: openapi_server.controllers.security_controller_.info_from_petstore_auth
x-scopeValidateFunc: openapi_server.controllers.security_controller_.validate_scope_petstore_auth
x-tokenInfoFunc: openapi_server.controllers.security_controller.info_from_petstore_auth
x-scopeValidateFunc: openapi_server.controllers.security_controller.validate_scope_petstore_auth
api_key:
in: header
name: api_key
type: apiKey
x-apikeyInfoFunc: openapi_server.controllers.security_controller_.info_from_api_key
x-apikeyInfoFunc: openapi_server.controllers.security_controller.info_from_api_key
auth_cookie:
in: cookie
name: AUTH_KEY
type: apiKey
x-apikeyInfoFunc: openapi_server.controllers.security_controller_.info_from_auth_cookie
x-apikeyInfoFunc: openapi_server.controllers.security_controller.info_from_auth_cookie

View File

@ -67,6 +67,9 @@ def deserialize_date(string):
:return: date.
:rtype: date
"""
if string is None:
return None
try:
from dateutil.parser import parse
return parse(string).date()
@ -84,6 +87,9 @@ def deserialize_datetime(string):
:return: datetime.
:rtype: datetime
"""
if string is None:
return None
try:
from dateutil.parser import parse
return parse(string)

View File

@ -8,3 +8,4 @@ werkzeug == 0.16.1; python_version=="3.5" or python_version=="3.4"
swagger-ui-bundle >= 0.0.2
python_dateutil >= 2.6.0
setuptools >= 21.0.0
Flask == 2.1.1

View File

@ -1,4 +1,4 @@
pytest~=4.6.7 # needed for python 2.7+3.4
pytest~=7.1.0
pytest-cov>=2.8.1
pytest-randomly==1.2.3 # needed for python 2.7+3.4
Flask-Testing==0.8.0
pytest-randomly>=1.2.3
Flask-Testing==0.8.1

View File

@ -6,12 +6,12 @@ src/openapi_server/__init__.py
src/openapi_server/__main__.py
src/openapi_server/controllers/__init__.py
src/openapi_server/controllers/pet_controller.py
src/openapi_server/controllers/security_controller_.py
src/openapi_server/controllers/security_controller.py
src/openapi_server/controllers/store_controller.py
src/openapi_server/controllers/user_controller.py
src/openapi_server/models/__init__.py
src/openapi_server/models/api_response.py
src/openapi_server/models/base_model_.py
src/openapi_server/models/base_model.py
src/openapi_server/models/category.py
src/openapi_server/models/order.py
src/openapi_server/models/pet.py

View File

@ -4,7 +4,7 @@ from datetime import date, datetime
from typing import List, Dict, Type
from openapi_server.models.base_model_ import Model
from openapi_server.models.base_model import Model
from openapi_server import util

View File

@ -4,7 +4,7 @@ from datetime import date, datetime
from typing import List, Dict, Type
from openapi_server.models.base_model_ import Model
from openapi_server.models.base_model import Model
from openapi_server import util

View File

@ -4,7 +4,7 @@ from datetime import date, datetime
from typing import List, Dict, Type
from openapi_server.models.base_model_ import Model
from openapi_server.models.base_model import Model
from openapi_server import util

View File

@ -4,7 +4,7 @@ from datetime import date, datetime
from typing import List, Dict, Type
from openapi_server.models.base_model_ import Model
from openapi_server.models.base_model import Model
from openapi_server.models.category import Category
from openapi_server.models.tag import Tag
from openapi_server import util

View File

@ -4,7 +4,7 @@ from datetime import date, datetime
from typing import List, Dict, Type
from openapi_server.models.base_model_ import Model
from openapi_server.models.base_model import Model
from openapi_server import util

View File

@ -4,7 +4,7 @@ from datetime import date, datetime
from typing import List, Dict, Type
from openapi_server.models.base_model_ import Model
from openapi_server.models.base_model import Model
from openapi_server import util

View File

@ -819,11 +819,11 @@ components:
write:pets: modify pets in your account
read:pets: read your pets
type: oauth2
x-tokenInfoFunc: openapi_server.controllers.security_controller_.info_from_petstore_auth
x-scopeValidateFunc: openapi_server.controllers.security_controller_.validate_scope_petstore_auth
x-tokenInfoFunc: openapi_server.controllers.security_controller.info_from_petstore_auth
x-scopeValidateFunc: openapi_server.controllers.security_controller.validate_scope_petstore_auth
api_key:
in: header
name: api_key
type: apiKey
x-apikeyInfoFunc: openapi_server.controllers.security_controller_.info_from_api_key
x-apikeyInfoFunc: openapi_server.controllers.security_controller.info_from_api_key
x-original-swagger-version: "2.0"

View File

@ -24,8 +24,8 @@ app/openapi_server/encoder.py
app/openapi_server/models/__init__.py
app/openapi_server/models/__init__.py
app/openapi_server/models/api_response.py
app/openapi_server/models/base_model_.py
app/openapi_server/models/base_model_.py
app/openapi_server/models/base_model.py
app/openapi_server/models/base_model.py
app/openapi_server/models/category.py
app/openapi_server/models/order.py
app/openapi_server/models/pet.py

View File

@ -1,7 +1,7 @@
from connexion.apps.flask_app import FlaskJSONEncoder
import six
from app.openapi_server.models.base_model_ import Model
from app.openapi_server.models.base_model import Model
class JSONEncoder(FlaskJSONEncoder):

View File

@ -5,7 +5,7 @@ from datetime import date, datetime # noqa: F401
from typing import List, Dict # noqa: F401
from app.openapi_server.models.base_model_ import Model
from app.openapi_server.models.base_model import Model
from openapi_server import util

View File

@ -5,7 +5,7 @@ from datetime import date, datetime # noqa: F401
from typing import List, Dict # noqa: F401
from app.openapi_server.models.base_model_ import Model
from app.openapi_server.models.base_model import Model
from openapi_server import util

View File

@ -5,7 +5,7 @@ from datetime import date, datetime # noqa: F401
from typing import List, Dict # noqa: F401
from app.openapi_server.models.base_model_ import Model
from app.openapi_server.models.base_model import Model
from openapi_server import util

View File

@ -5,7 +5,7 @@ from datetime import date, datetime # noqa: F401
from typing import List, Dict # noqa: F401
from app.openapi_server.models.base_model_ import Model
from app.openapi_server.models.base_model import Model
from app.openapi_server.models.category import Category # noqa: F401,E501
from app.openapi_server.models.tag import Tag # noqa: F401,E501
from openapi_server import util

View File

@ -5,7 +5,7 @@ from datetime import date, datetime # noqa: F401
from typing import List, Dict # noqa: F401
from app.openapi_server.models.base_model_ import Model
from app.openapi_server.models.base_model import Model
from openapi_server import util

View File

@ -5,7 +5,7 @@ from datetime import date, datetime # noqa: F401
from typing import List, Dict # noqa: F401
from app.openapi_server.models.base_model_ import Model
from app.openapi_server.models.base_model import Model
from openapi_server import util

View File

@ -8,13 +8,13 @@ openapi_server/__init__.py
openapi_server/__main__.py
openapi_server/controllers/__init__.py
openapi_server/controllers/pet_controller.py
openapi_server/controllers/security_controller_.py
openapi_server/controllers/security_controller.py
openapi_server/controllers/store_controller.py
openapi_server/controllers/user_controller.py
openapi_server/encoder.py
openapi_server/models/__init__.py
openapi_server/models/api_response.py
openapi_server/models/base_model_.py
openapi_server/models/base_model.py
openapi_server/models/category.py
openapi_server/models/order.py
openapi_server/models/pet.py

View File

@ -1,7 +1,7 @@
from connexion.apps.flask_app import FlaskJSONEncoder
import six
from openapi_server.models.base_model_ import Model
from openapi_server.models.base_model import Model
class JSONEncoder(FlaskJSONEncoder):

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server import util

View File

@ -1,21 +1,24 @@
import pprint
import six
import typing
from openapi_server import util
T = typing.TypeVar('T')
class Model(object):
# openapiTypes: The key is attribute name and the
# value is attribute type.
openapi_types = {}
openapi_types: typing.Dict[str, type] = {}
# attributeMap: The key is attribute name and the
# value is json key in definition.
attribute_map = {}
attribute_map: typing.Dict[str, str] = {}
@classmethod
def from_dict(cls, dikt):
def from_dict(cls: typing.Type[T], dikt) -> T:
"""Returns the dict as a model"""
return util.deserialize_model(dikt, cls)

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server import util

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server import util

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server.models.category import Category
from openapi_server.models.tag import Tag
from openapi_server import util

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server import util

View File

@ -5,7 +5,7 @@ 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.models.base_model import Model
from openapi_server import util

View File

@ -808,11 +808,11 @@ components:
write:pets: modify pets in your account
read:pets: read your pets
type: oauth2
x-tokenInfoFunc: openapi_server.controllers.security_controller_.info_from_petstore_auth
x-scopeValidateFunc: openapi_server.controllers.security_controller_.validate_scope_petstore_auth
x-tokenInfoFunc: openapi_server.controllers.security_controller.info_from_petstore_auth
x-scopeValidateFunc: openapi_server.controllers.security_controller.validate_scope_petstore_auth
api_key:
in: header
name: api_key
type: apiKey
x-apikeyInfoFunc: openapi_server.controllers.security_controller_.info_from_api_key
x-apikeyInfoFunc: openapi_server.controllers.security_controller.info_from_api_key
x-original-swagger-version: "2.0"