def get_operation(self, operation_keys): consumes = self.get_consumes() body = self.get_request_body_parameters(consumes) query = self.get_query_parameters() parameters = body + query parameters = [param for param in parameters if param is not None] parameters = self.add_manual_parameters(parameters) operation_id = self.get_operation_id(operation_keys) summary, description = self.get_summary_and_description() remove_keys = [ 'create', 'update', 'delete', 'list', 'read', 'partial_update' ] operation_keys = [ key for key in operation_keys if key not in remove_keys ] if len(operation_keys) >= 2: tags = ["/".join([item for item in operation_keys])] else: tags = [operation_keys[-1]] responses = self.get_responses() return openapi.Operation( operation_id=operation_id, description=description, responses=responses, parameters=parameters, consumes=consumes, tags=tags, )
def get_operation(self, operation_keys=None): consumes = self.get_consumes() produces = self.get_produces() body = self.get_request_body_parameters(consumes) query = self.get_query_parameters() parameters = body + query parameters = [param for param in parameters if param is not None] parameters = self.add_manual_parameters(parameters) operation_id = self.get_operation_id(operation_keys) summary, description = self.get_summary_and_description() security = self.get_security() assert security is None or isinstance( security, list), "security must be a list of securiy requirement objects" deprecated = self.is_deprecated() tags = self.get_tags(operation_keys) responses = self.get_responses() operation = openapi.Operation( operation_id=operation_id, description=force_real_str(description), summary=force_real_str(summary), responses=responses, parameters=parameters, consumes=consumes, produces=produces, tags=tags, security=security, deprecated=deprecated, ) return self.set_x_code_samples(operation)
def get_operation(self, operation_keys=None): operation_keys = operation_keys or self.operation_keys consumes = self.get_consumes() produces = self.get_produces() body = self.get_request_body_parameters(consumes) query = self.get_query_parameters() parameters = body + query parameters = filter_none(parameters) parameters = self.add_manual_parameters(parameters) operation_id = self.get_operation_id(operation_keys) summary, description = self.get_summary_and_description() security = self.get_security() assert security is None or isinstance(security, list), \ "security must be a list of security requirement objects" deprecated = self.is_deprecated() tags = self.get_tags(operation_keys) responses = self.get_responses() return openapi.Operation( operation_id=operation_id, description=force_real_str(description), summary=force_real_str(summary), responses=responses, parameters=parameters, consumes=consumes, produces=produces, tags=tags, security=security, deprecated=deprecated, **{'x-code-samples': self.overrides.get('code_examples')})
def get_operation(self, operation_keys): route = self._get_route() if route is None: return super().get_operation(operation_keys) method = route.method consumes = self._get_consumes(route) produces = self._get_produces(route) body = self._get_request_body_parameters(route) manual_parameters = build_method_parameters(route) parameters = merge_params(body, manual_parameters) operation_id = method.full_name description = method.docstring.short_description deprecated = self.is_deprecated() responses = self._get_responses(route) tags = self.get_tags(operation_keys) return openapi.Operation( operation_id=operation_id, description=description, responses=responses, parameters=parameters, consumes=consumes, produces=produces, deprecated=deprecated, tags=tags, )
def get_operation(self, operation_keys): return openapi.Operation( operation_id='media_embed', responses=openapi.Responses( {302: openapi.Response(description='Media embed page')}), tags=['media'], )
def get_operation(self, operation_keys=None): operation = super().get_operation(operation_keys) return openapi.Operation( operation.operation_id, **{k: v for k,v in operation.items() if k != operation.operation_id}, **{'x-code-samples': self.overrides.get('code_examples')} )
def test_get_operation_with_serializer(): view = View() route = get_route(Controller.post_with_serializer) View.post.route = route reference_resolver = openapi.ReferenceResolver('definitions', 'parameters', force_init=True) auto_schema = SwaggerAutoSchema(view, 'path', route.http_method, reference_resolver, 'request', {}) operation = auto_schema.get_operation(['test_app', 'post']) schema_ref = openapi.SchemaRef( resolver=reference_resolver, schema_name='User', ) parameters = [ openapi.Parameter( name='data', in_=openapi.IN_BODY, required=True, schema=schema_ref, ), ] responses = openapi.Responses({ '200': openapi.Response( description='', schema=openapi.Schema( type=openapi.TYPE_OBJECT, properties={ 'name': { 'type': 'string', }, }, ), ), }) assert operation == openapi.Operation( operation_id='Controller.post_with_serializer', responses=responses, consumes=['application/json'], produces=['application/json'], tags=['test_app'], parameters=parameters, ) del View.post.route
def get_operation(self, operation_keys): consumes = self.get_consumes() produces = self.get_produces() multipart = ['multipart/form-data', 'application/x-www-form-urlencoded'] if 'file' in [param['type'] for param in self.get_request_body_parameters(multipart)]: # automatically set the media type to form data if there's a file # needed due to https://github.com/axnsan12/drf-yasg/issues/386 consumes = multipart body = self.get_request_body_parameters(consumes) query = self.get_query_parameters() parameters = body + query parameters = filter_none(parameters) parameters = self.add_manual_parameters(parameters) if 'bindings' in self.request.query_params: operation_id = self.overrides.get('operation_id', '') if not operation_id: operation_id = operation_keys[-1] else: operation_id = self.get_operation_id(operation_keys) summary, description = self.get_summary_and_description() security = self.get_security() assert security is None or isinstance(security, list), "security must be a list of " \ "security requirement objects" deprecated = self.is_deprecated() tags = self.get_tags(operation_keys) responses = self.get_responses() if 'operation_summary' not in self.overrides: summary = self.get_summary(operation_keys) return openapi.Operation( operation_id=operation_id, description=force_real_str(description), summary=force_real_str(summary), responses=responses, parameters=parameters, consumes=consumes, produces=produces, tags=tags, security=security, deprecated=deprecated )
def get_operation(self, operation_keys): return openapi.Operation( operation_id='media_source', responses=openapi.Responses( {302: openapi.Response(description='Media source stream')}), parameters=[ openapi.Parameter(name='mimeType', in_=openapi.IN_QUERY, description='MIME type of media source', type=openapi.TYPE_STRING), openapi.Parameter(name='width', in_=openapi.IN_QUERY, description='Width of media source', type=openapi.TYPE_INTEGER), openapi.Parameter(name='height', in_=openapi.IN_QUERY, description='Height of media source', type=openapi.TYPE_INTEGER), ], tags=['media'], )
def test_get_operation_without_route(): view = View() reference_resolver = openapi.ReferenceResolver('definitions', 'parameters', force_init=True) auto_schema = SwaggerAutoSchema(view, 'path', 'get', reference_resolver, 'request', {}) operation = auto_schema.get_operation(['test_app', 'post']) parameters = [] responses = openapi.Responses({ '200': openapi.Response(description=''), }) assert operation == openapi.Operation( description='', operation_id='test_app_post', responses=responses, consumes=['application/json'], produces=['application/json'], tags=['test_app'], parameters=parameters, )
def get_operation(self, operation_keys): return openapi.Operation( operation_id='media_poster', responses=openapi.Responses( {302: openapi.Response(description='Media poster image')}), parameters=[ openapi.Parameter( name='width', in_=openapi.IN_PATH, description='Desired width of image.', type=openapi.TYPE_INTEGER, enum=POSTER_IMAGE_VALID_WIDTHS, ), openapi.Parameter( name='extension', in_=openapi.IN_PATH, description='Desired format of image.', type=openapi.TYPE_STRING, enum=POSTER_IMAGE_VALID_EXTENSIONS, ), ], tags=['media'], )
def get_operation(self, operation_keys): consumes = self.get_consumes() produces = self.get_produces() multipart = [ 'multipart/form-data', 'application/x-www-form-urlencoded' ] if self.method != 'GET': request_params = self.get_request_body_parameters(multipart) type_list = [param['type'] for param in request_params if param] if 'file' in type_list: # automatically set the media type to form data if there's a file # needed due to https://github.com/axnsan12/drf-yasg/issues/386 consumes = multipart body = self.get_request_body_parameters(consumes) query = self.get_query_parameters() if self.method == 'GET': fields_paramenter = Parameter( name="fields", in_="query", description="A list of fields to include in the response.", required=False, type="string", ) query.append(fields_paramenter) not_fields_paramenter = Parameter( name="exclude_fields", in_="query", description="A list of fields to exclude from the response.", required=False, type="string", ) query.append(not_fields_paramenter) parameters = body + query parameters = filter_none(parameters) parameters = self.add_manual_parameters(parameters) if 'bindings' in self.request.query_params: operation_id = self.overrides.get('operation_id', '') if not operation_id: operation_id = operation_keys[-1] else: operation_id = self.get_operation_id(operation_keys) summary, description = self.get_summary_and_description() if "include_html" not in self.request.query_params: description = strip_tags(description) security = self.get_security() assert security is None or isinstance(security, list), "security must be a list of " \ "security requirement objects" deprecated = self.is_deprecated() tags = self.get_tags(operation_keys) responses = self.get_responses() if 'operation_summary' not in self.overrides: summary = self.get_summary(operation_keys) return openapi.Operation(operation_id=operation_id, description=force_real_str(description), summary=force_real_str(summary), responses=responses, parameters=parameters, consumes=consumes, produces=produces, tags=tags, security=security, deprecated=deprecated)
def get_operation(self, operation_keys): consumes = self.get_consumes() produces = self.get_produces() multipart = [ "multipart/form-data", "application/x-www-form-urlencoded" ] if self.method != "GET": contains_file_field = False serializer = self.get_request_serializer() for field_name, field in getattr(serializer, "fields", {}).items(): if isinstance(field, serializers.FileField): contains_file_field = True break if contains_file_field: # automatically set the media type to form data if there's a file # needed due to https://github.com/axnsan12/drf-yasg/issues/386 consumes = multipart body = self.get_request_body_parameters(consumes) query = self.get_query_parameters() if self.method == "GET": fields_paramenter = Parameter( name="fields", in_="query", description="A list of fields to include in the response.", required=False, type="string", ) query.append(fields_paramenter) not_fields_paramenter = Parameter( name="exclude_fields", in_="query", description="A list of fields to exclude from the response.", required=False, type="string", ) query.append(not_fields_paramenter) parameters = body + query parameters = filter_none(parameters) parameters = self.add_manual_parameters(parameters) if "bindings" in self.request.query_params: operation_id = self.overrides.get("operation_id", "") if not operation_id: operation_id = operation_keys[-1] else: operation_id = self.get_operation_id(operation_keys) summary, description = self.get_summary_and_description() if "include_html" not in self.request.query_params: description = strip_tags(description) security = self.get_security() assert security is None or isinstance( security, list), ("security must be a list of " "security requirement objects") deprecated = self.is_deprecated() tags = self.get_tags(operation_keys) responses = self.get_responses() if "operation_summary" not in self.overrides: summary = self.get_summary(operation_keys) return openapi.Operation( operation_id=operation_id, description=force_real_str(description), summary=force_real_str(summary), responses=responses, parameters=parameters, consumes=consumes, produces=produces, tags=tags, security=security, deprecated=deprecated, )
def test_get_operation(): view = View() route = get_route(Controller.post) View.post.route = route auto_schema = SwaggerAutoSchema(view, 'path', route.http_method, 'components', 'request', {}) operation = auto_schema.get_operation(['test_app', 'post']) parameters = [ openapi.Parameter( name='data', in_=openapi.IN_BODY, required=True, schema=openapi.Schema( title='UserDTO', type=openapi.TYPE_OBJECT, properties={ 'name': { 'type': openapi.TYPE_STRING, }, }, ), ), openapi.Parameter( name='path_param', in_=openapi.IN_PATH, description='', required=True, type=openapi.TYPE_INTEGER, ), openapi.Parameter( name='query_param', in_=openapi.IN_QUERY, description='', required=True, type=openapi.TYPE_INTEGER, ), ] responses = openapi.Responses({ '200': openapi.Response( description='', schema=openapi.Schema( type=openapi.TYPE_OBJECT, properties={ 'name': { 'type': 'string', }, }, ), ), }) assert operation == openapi.Operation( operation_id='Controller.post', responses=responses, consumes=['application/json; charset=utf-8'], produces=['application/json; charset=utf-8'], description='This is post method', tags=['test_app'], parameters=parameters, )