def add_responses(swagger_operation, operation, ns, func): """ Add responses to an operation. """ # default error swagger_operation.responses["default"] = build_response( description="An error occcurred", resource=type_name(name_for(ErrorSchema())), ) if getattr(func, "__doc__", None): description = func.__doc__.strip().splitlines()[0] else: description = "{} {}".format(operation.value.name, ns.subject_name) # resource request request_resource = get_request_schema(func) if isinstance(request_resource, string_types): if not hasattr(swagger_operation, "consumes"): swagger_operation.consumes = [] swagger_operation.consumes.append(request_resource) # resources response response_resource = get_response_schema(func) if isinstance(response_resource, string_types): if not hasattr(swagger_operation, "produces"): swagger_operation.produces = [] swagger_operation.produces.append(response_resource) else: swagger_operation.responses[str(operation.value.default_code)] = build_response( description=description, resource=response_resource, )
def iter_definitions(definitions, operations): """ Generate definitions to be converted to swagger schema. """ # general error schema per errors.py for error_schema_class in [ErrorSchema, ErrorContextSchema, SubErrorSchema]: yield error_schema_class() # add all request and response schemas for operation, obj, rule, func in operations: yield get_request_schema(func) yield get_response_schema(func)
def iter_definitions(definitions, operations): """ Generate definitions to be converted to swagger schema. """ # general error schema per errors.py for error_schema_class in [ErrorSchema, ErrorContextSchema, SubErrorSchema]: yield error_schema_class(), RequestSide.BOTH # add all request and response schemas for operation, obj, rule, func in operations: yield get_request_schema(func), RequestSide.REQUEST yield get_response_schema(func), RequestSide.RESPONSE
def add_responses(swagger_operation, operation, ns, func): """ Add responses to an operation. """ # default error swagger_operation.responses["default"] = build_response( description="An error occurred", resource=type_name(name_for(ErrorSchema())), ) if getattr(func, "__doc__", None): description = func.__doc__.strip().splitlines()[0] else: description = "{} {}".format(operation.value.name, ns.subject_name) if operation in (Operation.Upload, Operation.UploadFor): swagger_operation.consumes = [ "multipart/form-data" ] # resource request request_resource = get_request_schema(func) if isinstance(request_resource, str): if not hasattr(swagger_operation, "consumes"): swagger_operation.consumes = [] swagger_operation.consumes.append(request_resource) # resources response response_resource = get_response_schema(func) if isinstance(response_resource, str): if not hasattr(swagger_operation, "produces"): swagger_operation.produces = [] swagger_operation.produces.append(response_resource) elif not response_resource: response_code = ( 204 if operation.value.default_code == 200 else operation.value.default_code ) swagger_operation.responses[str(response_code)] = build_response( description=description, ) else: swagger_operation.responses[str(operation.value.default_code)] = build_response( description=description, resource=response_resource, )
def build_operation(operation, ns, rule, func): """ Build an operation definition. """ swagger_operation = swagger.Operation( operationId=operation_name(operation, ns), parameters=swagger.ParametersList([ ]), responses=swagger.Responses(), tags=[ns.subject_name], ) # custom header parameter swagger_operation.parameters.append( header_param("X-Response-Skip-Null") ) # path parameters swagger_operation.parameters.extend([ path_param(argument, ns) for argument in rule.arguments ]) # query string parameters qs_schema = get_qs_schema(func) if qs_schema: swagger_operation.parameters.extend([ query_param(name, field) for name, field in qs_schema.fields.items() ]) # body parameter request_schema = get_request_schema(func) if request_schema: swagger_operation.parameters.append( body_param(request_schema) ) # sort parameters for predictable output swagger_operation.parameters.sort(key=lambda parameter: parameter["name"]) add_responses(swagger_operation, operation, ns, func) return swagger_operation
def build_operation(operation, ns, rule, func): """ Build an operation definition. """ swagger_operation = swagger.Operation( operationId=operation_name(operation, ns), parameters=swagger.ParametersList([ ]), responses=swagger.Responses(), tags=[ns.subject_name], ) # custom header parameter swagger_operation.parameters.append( header_param("X-Response-Skip-Null") ) # path parameters swagger_operation.parameters.extend([ # TODO: inject type information for parameters based on converter syntax path_param(argument) for argument in rule.arguments ]) # query string parameters qs_schema = get_qs_schema(func) if qs_schema: swagger_operation.parameters.extend([ query_param(name, field) for name, field in qs_schema.fields.items() ]) # body parameter request_schema = get_request_schema(func) if request_schema: swagger_operation.parameters.append( body_param(request_schema) ) add_responses(swagger_operation, operation, ns, func) return swagger_operation