From 3d4bb4b5533fa281c2f11c12ceb0a9ae61aa0d54 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 21 Jun 2013 22:03:07 +0100 Subject: Ensure action kwargs properly handdled. Refs #940. --- htmlcov/rest_framework_exceptions.html | 257 +++++++++++++++++++++++++++++++++ 1 file changed, 257 insertions(+) create mode 100644 htmlcov/rest_framework_exceptions.html (limited to 'htmlcov/rest_framework_exceptions.html') diff --git a/htmlcov/rest_framework_exceptions.html b/htmlcov/rest_framework_exceptions.html new file mode 100644 index 00000000..d975a848 --- /dev/null +++ b/htmlcov/rest_framework_exceptions.html @@ -0,0 +1,257 @@ + + + + + + + + Coverage for rest_framework/exceptions: 96% + + + + + + + + + + + +
+ +

Hot-keys on this page

+
+

+ r + m + x + p   toggle line displays +

+

+ j + k   next/prev highlighted chunk +

+

+ 0   (zero) top of page +

+

+ 1   (one) first highlighted chunk +

+
+
+ +
+ + + + + +
+

1

+

2

+

3

+

4

+

5

+

6

+

7

+

8

+

9

+

10

+

11

+

12

+

13

+

14

+

15

+

16

+

17

+

18

+

19

+

20

+

21

+

22

+

23

+

24

+

25

+

26

+

27

+

28

+

29

+

30

+

31

+

32

+

33

+

34

+

35

+

36

+

37

+

38

+

39

+

40

+

41

+

42

+

43

+

44

+

45

+

46

+

47

+

48

+

49

+

50

+

51

+

52

+

53

+

54

+

55

+

56

+

57

+

58

+

59

+

60

+

61

+

62

+

63

+

64

+

65

+

66

+

67

+

68

+

69

+

70

+

71

+

72

+

73

+

74

+

75

+

76

+

77

+

78

+

79

+

80

+

81

+

82

+

83

+

84

+

85

+

86

+

87

+

88

+ +
+

""" 

+

Handled exceptions raised by REST framework. 

+

 

+

In addition Django's built in 403 and 404 exceptions are handled. 

+

(`django.http.Http404` and `django.core.exceptions.PermissionDenied`) 

+

""" 

+

from __future__ import unicode_literals 

+

from rest_framework import status 

+

 

+

 

+

class APIException(Exception): 

+

    """ 

+

    Base class for REST framework exceptions. 

+

    Subclasses should provide `.status_code` and `.detail` properties. 

+

    """ 

+

    pass 

+

 

+

 

+

class ParseError(APIException): 

+

    status_code = status.HTTP_400_BAD_REQUEST 

+

    default_detail = 'Malformed request.' 

+

 

+

    def __init__(self, detail=None): 

+

        self.detail = detail or self.default_detail 

+

 

+

 

+

class AuthenticationFailed(APIException): 

+

    status_code = status.HTTP_401_UNAUTHORIZED 

+

    default_detail = 'Incorrect authentication credentials.' 

+

 

+

    def __init__(self, detail=None): 

+

        self.detail = detail or self.default_detail 

+

 

+

 

+

class NotAuthenticated(APIException): 

+

    status_code = status.HTTP_401_UNAUTHORIZED 

+

    default_detail = 'Authentication credentials were not provided.' 

+

 

+

    def __init__(self, detail=None): 

+

        self.detail = detail or self.default_detail 

+

 

+

 

+

class PermissionDenied(APIException): 

+

    status_code = status.HTTP_403_FORBIDDEN 

+

    default_detail = 'You do not have permission to perform this action.' 

+

 

+

    def __init__(self, detail=None): 

+

        self.detail = detail or self.default_detail 

+

 

+

 

+

class MethodNotAllowed(APIException): 

+

    status_code = status.HTTP_405_METHOD_NOT_ALLOWED 

+

    default_detail = "Method '%s' not allowed." 

+

 

+

    def __init__(self, method, detail=None): 

+

        self.detail = (detail or self.default_detail) % method 

+

 

+

 

+

class NotAcceptable(APIException): 

+

    status_code = status.HTTP_406_NOT_ACCEPTABLE 

+

    default_detail = "Could not satisfy the request's Accept header" 

+

 

+

    def __init__(self, detail=None, available_renderers=None): 

+

        self.detail = detail or self.default_detail 

+

        self.available_renderers = available_renderers 

+

 

+

 

+

class UnsupportedMediaType(APIException): 

+

    status_code = status.HTTP_415_UNSUPPORTED_MEDIA_TYPE 

+

    default_detail = "Unsupported media type '%s' in request." 

+

 

+

    def __init__(self, media_type, detail=None): 

+

        self.detail = (detail or self.default_detail) % media_type 

+

 

+

 

+

class Throttled(APIException): 

+

    status_code = status.HTTP_429_TOO_MANY_REQUESTS 

+

    default_detail = "Request was throttled." 

+

    extra_detail = "Expected available in %d second%s." 

+

 

+

    def __init__(self, wait=None, detail=None): 

+

        import math 

+

        self.wait = wait and math.ceil(wait) or None 

+

        if wait is not None: 

+

            format = detail or self.default_detail + self.extra_detail 

+

            self.detail = format % (self.wait, self.wait != 1 and 's' or '') 

+

        else: 

+

            self.detail = detail or self.default_detail 

+ +
+
+ + + + + -- cgit v1.2.3