mirror of
https://github.com/LukeHagar/connexion.git
synced 2025-12-06 04:19:26 +00:00
* cache ConnexionRequest.json * add openapi3 enforcedefaults_aiohttp example Co-authored-by: Robbe Sneyders <robbe.sneyders@ml6.eu>
57 lines
1.6 KiB
Python
Executable File
57 lines
1.6 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import connexion
|
|
import jsonschema
|
|
import six
|
|
from connexion.decorators.validation import RequestBodyValidator
|
|
from connexion.json_schema import Draft4RequestValidator
|
|
|
|
|
|
async def echo(body):
|
|
return body
|
|
|
|
|
|
# via https://python-jsonschema.readthedocs.io/
|
|
def extend_with_set_default(validator_class):
|
|
validate_properties = validator_class.VALIDATORS['properties']
|
|
|
|
def set_defaults(validator, properties, instance, schema):
|
|
for property, subschema in six.iteritems(properties):
|
|
if 'default' in subschema:
|
|
instance.setdefault(property, subschema['default'])
|
|
|
|
for error in validate_properties(
|
|
validator, properties, instance, schema):
|
|
yield error
|
|
|
|
return jsonschema.validators.extend(
|
|
validator_class, {'properties': set_defaults})
|
|
|
|
DefaultsEnforcingDraft4Validator = extend_with_set_default(Draft4RequestValidator)
|
|
|
|
|
|
class DefaultsEnforcingRequestBodyValidator(RequestBodyValidator):
|
|
def __init__(self, *args, **kwargs):
|
|
super(DefaultsEnforcingRequestBodyValidator, self).__init__(
|
|
*args, validator=DefaultsEnforcingDraft4Validator, **kwargs)
|
|
|
|
|
|
validator_map = {
|
|
'body': DefaultsEnforcingRequestBodyValidator
|
|
}
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app = connexion.AioHttpApp(
|
|
__name__,
|
|
port=8080,
|
|
specification_dir='.',
|
|
options={'swagger_ui': True}
|
|
)
|
|
app.add_api(
|
|
'enforcedefaults-api.yaml',
|
|
arguments={'title': 'Hello World Example'},
|
|
validator_map=validator_map,
|
|
)
|
|
app.run()
|