def _custom_get_parameters(link, encoding): """ Generates Swagger Parameter Item object. """ if not link.action in link._api_docs: api_docs_fields = [] else: api_docs_fields = link._api_docs[link.action]['fields'] parameters = [] for field in api_docs_fields: parameter = { 'name': field['name'], 'required': field['required'] if 'required' in field else False, 'in': field['paramType'] if 'paramType' in field else 'formData', 'description': field['description'], 'type': field['type'] or 'string', } parameters.append(parameter) for field in link.fields: location = get_location(link, field) parameter = { 'name': field.name, 'required': field.required, 'in': location, 'description': field.description, 'type': field.type or 'string', } parameters.append(parameter) return parameters
def _get_parameters(link, encoding): """ Generates Swagger Parameter Item object. """ parameters = [] properties = {} required = [] for field in link.fields: location = get_location(link, field) field_description = _get_field_description(field) field_type = _get_field_type(field) if location == 'form': if encoding in ('multipart/form-data', 'application/x-www-form-urlencoded'): # 'formData' in swagger MUST be one of these media types. parameter = { 'name': field.name, 'required': field.required, 'in': 'formData', 'description': field_description, 'type': field_type, } if field_type == 'array': parameter['items'] = {'type': 'string'} parameters.append(parameter) else: # Expand coreapi fields with location='form' into a single swagger # parameter, with a schema containing multiple properties. schema_property = { 'description': field_description, 'type': field_type, } if field_type == 'array': schema_property['items'] = {'type': 'string'} properties[field.name] = schema_property if field.required: required.append(field.name) elif location == 'body': if encoding == 'application/octet-stream': # https://github.com/OAI/OpenAPI-Specification/issues/50#issuecomment-112063782 schema = {'type': 'string', 'format': 'binary'} else: schema = {} parameter = { 'name': field.name, 'required': field.required, 'in': location, 'description': field_description, 'schema': schema } parameters.append(parameter) else: parameter = { 'name': field.name, 'required': field.required, 'in': location, 'description': field_description, 'type': field_type or 'string', } if field_type == 'array': parameter['items'] = {'type': 'string'} parameters.append(parameter) if properties: parameter = { 'name': 'data', 'in': 'body', 'schema': { 'type': 'object', 'properties': properties } } if required: parameter['schema']['required'] = required parameters.append(parameter) return parameters
def _get_parameters(link, encoding): """ Generates Swagger Parameter Item object. """ parameters = [] properties = {} required = [] for field in link.fields: location = get_location(link, field) field_description = _get_field_description(field) field_type = _get_field_type(field) if location == 'form': if encoding in ('multipart/form-data', 'application/x-www-form-urlencoded'): # 'formData' in swagger MUST be one of these media types. parameter = { 'name': field.name, 'required': field.required, 'in': 'formData', 'description': field_description, 'type': field_type, } if field_type == 'array': parameter['items'] = {'type': 'string'} parameters.append(parameter) else: # Expand coreapi fields with location='form' into a single swagger # parameter, with a schema containing multiple properties. schema_property = { 'description': field_description, 'type': field_type, } if field_type == 'array': schema_property['items'] = {'type': 'string'} # ----------------- zw start --------------------- if hasattr(field, "schema") and hasattr(field.schema, "properties"): schema_property['properties'] = {k: vars(v) for k, v in dict(field.schema.properties).items()} for k, v in schema_property['properties'].items(): pro = {} for kk, vv in v.items(): if vv: pro[kk] = vv pro['type'] = "string" schema_property['properties'][k] = pro if hasattr(field, "schema") and hasattr(field.schema, "items") and hasattr(field.schema.items, "properties"): schema_property = { 'type': 'array', 'items': { 'type': 'object', 'properties': {} }} schema_property['items']['properties'] = {k: vars(v) for k, v in dict(field.schema.items.properties).items()} for k, v in schema_property['items']['properties'].items(): pro = {} pro['type'] = "string" for kk, vv in v.items(): if vv: pro[kk] = vv if kk == 'items': vv = { 'type': 'array', 'items': { 'type': 'string', }} pro = vv schema_property['items']['properties'][k] = pro # ----------------- zw end --------------------- properties[field.name] = schema_property if field.required: required.append(field.name) elif location == 'body': if encoding == 'application/octet-stream': # https://github.com/OAI/OpenAPI-Specification/issues/50#issuecomment-112063782 schema = {'type': 'string', 'format': 'binary'} else: schema = {} parameter = { 'name': field.name, 'required': field.required, 'in': location, 'description': field_description, 'schema': schema } parameters.append(parameter) else: parameter = { 'name': field.name, 'required': field.required, 'in': location, 'description': field_description, 'type': field_type or 'string', } if field_type == 'array': parameter['items'] = {'type': 'string'} parameters.append(parameter) if properties: parameter = { 'name': 'data', 'in': 'body', 'schema': { 'type': 'object', 'properties': properties } } if required: parameter['schema']['required'] = required parameters.append(parameter) return parameters