diff options
Diffstat (limited to 'rest_framework/generics.py')
| -rw-r--r-- | rest_framework/generics.py | 73 | 
1 files changed, 34 insertions, 39 deletions
| diff --git a/rest_framework/generics.py b/rest_framework/generics.py index aea636f1..77deb8e4 100644 --- a/rest_framework/generics.py +++ b/rest_framework/generics.py @@ -25,6 +25,7 @@ def strict_positive_int(integer_string, cutoff=None):          ret = min(ret, cutoff)      return ret +  def get_object_or_404(queryset, *filter_args, **filter_kwargs):      """      Same as Django's standard shortcut, but make sure to raise 404 @@ -127,11 +128,11 @@ class GenericAPIView(views.APIView):          deprecated_style = False          if page_size is not None:              warnings.warn('The `page_size` parameter to `paginate_queryset()` ' -                          'is due to be deprecated. ' +                          'is deprecated. '                            'Note that the return style of this method is also '                            'changed, and will simply return a page object '                            'when called without a `page_size` argument.', -                          PendingDeprecationWarning, stacklevel=2) +                          DeprecationWarning, stacklevel=2)              deprecated_style = True          else:              # Determine the required page size. @@ -142,10 +143,10 @@ class GenericAPIView(views.APIView):          if not self.allow_empty:              warnings.warn( -                'The `allow_empty` parameter is due to be deprecated. ' +                'The `allow_empty` parameter is deprecated. '                  'To use `allow_empty=False` style behavior, You should override '                  '`get_queryset()` and explicitly raise a 404 on empty querysets.', -                PendingDeprecationWarning, stacklevel=2 +                DeprecationWarning, stacklevel=2              )          paginator = self.paginator_class(queryset, page_size, @@ -162,10 +163,11 @@ class GenericAPIView(views.APIView):                  raise Http404(_("Page is not 'last', nor can it be converted to an int."))          try:              page = paginator.page(page_number) -        except InvalidPage as e: -            raise Http404(_('Invalid page (%(page_number)s): %(message)s') % { -                                'page_number': page_number, -                                'message': str(e) +        except InvalidPage as exc: +            error_format = _('Invalid page (%(page_number)s): %(message)s') +            raise Http404(error_format % { +                'page_number': page_number, +                'message': str(exc)              })          if deprecated_style: @@ -199,19 +201,17 @@ class GenericAPIView(views.APIView):          if not filter_backends and self.filter_backend:              warnings.warn(                  'The `filter_backend` attribute and `FILTER_BACKEND` setting ' -                'are due to be deprecated in favor of a `filter_backends` ' +                'are deprecated in favor of a `filter_backends` '                  'attribute and `DEFAULT_FILTER_BACKENDS` setting, that take '                  'a *list* of filter backend classes.', -                PendingDeprecationWarning, stacklevel=2 +                DeprecationWarning, stacklevel=2              )              filter_backends = [self.filter_backend]          return filter_backends - -    ######################## -    ### The following methods provide default implementations -    ### that you may want to override for more complex cases. +    # The following methods provide default implementations +    # that you may want to override for more complex cases.      def get_paginate_by(self, queryset=None):          """ @@ -224,8 +224,8 @@ class GenericAPIView(views.APIView):          """          if queryset is not None:              warnings.warn('The `queryset` parameter to `get_paginate_by()` ' -                          'is due to be deprecated.', -                          PendingDeprecationWarning, stacklevel=2) +                          'is deprecated.', +                          DeprecationWarning, stacklevel=2)          if self.paginate_by_param:              try: @@ -284,8 +284,8 @@ class GenericAPIView(views.APIView):          if self.model is not None:              return self.model._default_manager.all() -        raise ImproperlyConfigured("'%s' must define 'queryset' or 'model'" -                                    % self.__class__.__name__) +        error_format = "'%s' must define 'queryset' or 'model'" +        raise ImproperlyConfigured(error_format % self.__class__.__name__)      def get_object(self, queryset=None):          """ @@ -312,16 +312,16 @@ class GenericAPIView(views.APIView):              filter_kwargs = {self.lookup_field: lookup}          elif pk is not None and self.lookup_field == 'pk':              warnings.warn( -                'The `pk_url_kwarg` attribute is due to be deprecated. ' +                'The `pk_url_kwarg` attribute is deprecated. '                  'Use the `lookup_field` attribute instead', -                PendingDeprecationWarning +                DeprecationWarning              )              filter_kwargs = {'pk': pk}          elif slug is not None and self.lookup_field == 'pk':              warnings.warn( -                'The `slug_url_kwarg` attribute is due to be deprecated. ' +                'The `slug_url_kwarg` attribute is deprecated. '                  'Use the `lookup_field` attribute instead', -                PendingDeprecationWarning +                DeprecationWarning              )              filter_kwargs = {self.slug_field: slug}          else: @@ -339,12 +339,11 @@ class GenericAPIView(views.APIView):          return obj -    ######################## -    ### The following are placeholder methods, -    ### and are intended to be overridden. -    ### -    ### The are not called by GenericAPIView directly, -    ### but are used by the mixin methods. +    # The following are placeholder methods, +    # and are intended to be overridden. +    # +    # The are not called by GenericAPIView directly, +    # but are used by the mixin methods.      def pre_save(self, obj):          """ @@ -416,10 +415,8 @@ class GenericAPIView(views.APIView):          return ret -########################################################## -### Concrete view classes that provide method handlers ### -### by composing the mixin classes with the base view. ### -########################################################## +# Concrete view classes that provide method handlers +# by composing the mixin classes with the base view.  class CreateAPIView(mixins.CreateModelMixin,                      GenericAPIView): @@ -534,16 +531,14 @@ class RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin,          return self.destroy(request, *args, **kwargs) -########################## -### Deprecated classes ### -########################## +# Deprecated classes  class MultipleObjectAPIView(GenericAPIView):      def __init__(self, *args, **kwargs):          warnings.warn( -            'Subclassing `MultipleObjectAPIView` is due to be deprecated. ' +            'Subclassing `MultipleObjectAPIView` is deprecated. '              'You should simply subclass `GenericAPIView` instead.', -            PendingDeprecationWarning, stacklevel=2 +            DeprecationWarning, stacklevel=2          )          super(MultipleObjectAPIView, self).__init__(*args, **kwargs) @@ -551,8 +546,8 @@ class MultipleObjectAPIView(GenericAPIView):  class SingleObjectAPIView(GenericAPIView):      def __init__(self, *args, **kwargs):          warnings.warn( -            'Subclassing `SingleObjectAPIView` is due to be deprecated. ' +            'Subclassing `SingleObjectAPIView` is deprecated. '              'You should simply subclass `GenericAPIView` instead.', -            PendingDeprecationWarning, stacklevel=2 +            DeprecationWarning, stacklevel=2          )          super(SingleObjectAPIView, self).__init__(*args, **kwargs) | 
