src/aaz_dev/swagger/model/schema/security_scheme.py (44 lines of code) (raw):

from schematics.models import Model from schematics.types import StringType, URLType, PolyModelType from .fields import ScopesField class _SecuritySchemeBase(Model): """Allows the definition of a security scheme that can be used by the operations. Supported schemes are basic authentication, an API key (either as a header or as a query parameter) and OAuth2's common flows (implicit, password, application and access code).""" TYPE_VALUE = None type = StringType(choices=("basic", "apiKey", "oauth2"), required=True) description = StringType() @classmethod def _claim_polymorphic(cls, data): if isinstance(data, dict): type_value = data.get('type', None) return type_value is not None and type_value == cls.TYPE_VALUE elif isinstance(data, _SecuritySchemeBase): return data.TYPE_VALUE == cls.TYPE_VALUE return False class BasicSecurityScheme(_SecuritySchemeBase): TYPE_VALUE = "basic" class APIKeySecurityScheme(_SecuritySchemeBase): TYPE_VALUE = "apiKey" name = StringType(required=True) # The name of the header or query parameter to be used. in_ = StringType( choices=("query", "header"), required=True, serialized_name="in", deserialize_from="in" ) # The location of the API key. Valid values are "query" or "header". class OAuth2SecurityScheme(_SecuritySchemeBase): TYPE_VALUE = "oauth2" flow = StringType(choices=("implicit", "password", "application", "accessCode"), required=True) # The flow used by the OAuth2 security scheme. authorization_url = URLType( serialized_name="authorizationUrl", deserialize_from="authorizationUrl" ) # The authorization URL to be used for this flow. oauth2 ("implicit", "accessCode") token_url = URLType( serialized_name="tokenUrl", deserialize_from="tokenUrl" ) # The token URL to be used for this flow. oauth2 ("password", "application", "accessCode") scopes = ScopesField() # The available scopes for the OAuth2 security scheme. class SecuritySchemeField(PolyModelType): def __init__(self, **kwargs): model_spec = [ BasicSecurityScheme, APIKeySecurityScheme, OAuth2SecurityScheme ] super(SecuritySchemeField, self).__init__(model_spec=model_spec, **kwargs)