Example #1
0
    def field_to_swagger_object(self, field, swagger_object_type, **kwargs):
        if not isinstance(field, serializers.IntegerField) or not is_json_api(
                self.view):
            return inspectors.NotHandled

        stringify_id = False
        integer_format = None

        parent_serializer = get_parent_serializer(field)
        serializer_meta = getattr(parent_serializer, 'Meta', None)
        model = getattr(serializer_meta, 'model', None)
        if model is not None:
            field_name = getattr(field, 'source', None) or field.field_name
            model_field = get_model_field(model, field_name)
            # Check for primary key only if sure it is pure Field (not FieldCacheMixin or anything)
            if (model_field is not None
                    and isinstance(model_field,
                                   (models.IntegerField, models.AutoField))
                    and model_field.primary_key):
                stringify_id = True
                integer_format = self.get_format(model_field)

        elif field.field_name == 'id' and isinstance(field,
                                                     serializers.IntegerField):
            stringify_id = True

        if not stringify_id:
            return inspectors.NotHandled

        SwaggerType, ChildSwaggerType = self._get_partial_types(
            field, swagger_object_type, **kwargs)
        return SwaggerType(type=openapi.TYPE_STRING, format=integer_format)
Example #2
0
    def field_to_swagger_object(self, field, **kwargs):

        if not isinstance(
                field, serializers.IntegerField) or not is_json_api_response(
                    self.view.renderer_classes):
            return inspectors.NotHandled

        parent_serializer = get_parent_serializer(field)
        serializer_meta = getattr(parent_serializer, 'Meta', None)
        model = getattr(serializer_meta, 'model', None)

        if model is None:
            return inspectors.NotHandled

        source = getattr(field, 'source', '') or field.field_name

        # Use source but mean field_name
        model_field = get_model_field(model, source)

        if (isinstance(model_field, models.IntegerField) and model_field.primary_key) or \
                isinstance(model_field, models.AutoField):
            SwaggerType, ChildSwaggerType = self._get_partial_types(
                field, **kwargs)
            return SwaggerType(type=openapi.TYPE_STRING,
                               format=openapi.FORMAT_INT32)

        return inspectors.NotHandled
Example #3
0
    def field_to_swagger_object(self, field, **kwargs):

        if not isinstance(field.parent, serializers.ManyRelatedField) or \
                not is_json_api_response(self.view.renderer_classes):
            return inspectors.NotHandled

        parent_serializer = get_parent_serializer(field)
        serializer_meta = getattr(parent_serializer, 'Meta', None)
        model = getattr(serializer_meta, 'model', None)

        if model is None:
            return inspectors.NotHandled

        source = getattr(field.parent, 'source', '') or field.parent.field_name

        field_model = get_related_model(model, source)
        if field_model is None:
            return inspectors.NotHandled

        model_field = get_model_field(field_model, 'pk')

        if isinstance(model_field, (models.IntegerField, models.AutoField)):
            SwaggerType, ChildSwaggerType = self._get_partial_types(
                field, **kwargs)
            return SwaggerType(type=openapi.TYPE_STRING,
                               format=openapi.FORMAT_INT32)

        return inspectors.NotHandled
Example #4
0
 def _get_model_type_info(self, name, model, model_field=None, query_name=None):
     if model_field:
         return None
     _query_name, field_name = self._get_subname(name)
     query_name = query_name or _query_name
     related_model = field_insp.get_related_model(model, query_name)
     related_field = field_insp.get_model_field(related_model, field_name)
     if related_field is None:
         return None
     type_info = field_insp.get_basic_type_info(related_field)
     if type_info is None:
         return None  # nocv
     type_info.update({
         'description':
             ('A unique {} value identifying '
              'instance of this {} sublist.').format(type_info['type'], query_name),
     })
     return type_info
Example #5
0
    def field_to_swagger_object(self, field, swagger_object_type, **kwargs):
        if not isinstance(
                field, serializers.PrimaryKeyRelatedField) or not is_json_api(
                    self.view):
            return inspectors.NotHandled

        if is_many_related_field(field):
            return inspectors.NotHandled

        related_model = get_field_related_model(field)
        if related_model:
            related_model_pk_field = get_model_field(related_model, 'pk')
            if isinstance(related_model_pk_field,
                          (models.IntegerField, models.AutoField)):
                SwaggerType, ChildSwaggerType = self._get_partial_types(
                    field, swagger_object_type, **kwargs)
                return SwaggerType(
                    type=openapi.TYPE_STRING,
                    format=self.get_format(related_model_pk_field))

        return inspectors.NotHandled