Statistics
| Branch: | Tag: | Revision:

root / snf-django-lib / snf_django / lib / api / faults.py @ 72bf812d

History | View | Annotate | Download (2.8 kB)

1
# Copyright 2012, 2013 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

    
34

    
35
"""Common API faults."""
36

    
37

    
38
def camelCase(s):
39
    return s[0].lower() + s[1:]
40

    
41

    
42
class Fault(Exception):
43
    def __init__(self, message='', details='', name=''):
44
        Exception.__init__(self, message, details, name)
45
        self.message = message
46
        self.details = details
47
        self.name = name or camelCase(self.__class__.__name__)
48

    
49

    
50
# 2xx
51
class NotModified(Fault):
52
    code = 304
53

    
54

    
55
# 4xx
56
class BadRequest(Fault):
57
    code = 400
58

    
59

    
60
class Unauthorized(Fault):
61
    code = 401
62

    
63

    
64
class ResizeNotAllowed(Fault):
65
    code = 403
66

    
67

    
68
class Forbidden(Fault):
69
    code = 403
70

    
71

    
72
class ResizeNotAllowed(Forbidden):
73
    pass
74

    
75

    
76
class ItemNotFound(Fault):
77
    code = 404
78

    
79

    
80
class Conflict(Fault):
81
    code = 409
82

    
83

    
84
class BuildInProgress(Conflict):
85
    pass
86

    
87

    
88
class LengthRequired(Fault):
89
    code = 411
90

    
91

    
92
class PreconditionFailed(Fault):
93
    code = 412
94

    
95

    
96
class RequestEntityTooLarge(Fault):
97
    code = 413
98

    
99

    
100
class OverLimit(RequestEntityTooLarge):
101
    pass
102

    
103

    
104
class BadMediaType(Fault):
105
    code = 415
106

    
107

    
108
class RangeNotSatisfiable(Fault):
109
    code = 416
110

    
111

    
112
class NetworkInUse(Fault):
113
    code = 421
114

    
115

    
116
class UnprocessableEntity(Fault):
117
    code = 422
118

    
119

    
120
# 5xx
121
class InternalServerError(Fault):
122
    code = 500
123

    
124

    
125
class NotImplemented(Fault):
126
    code = 501
127

    
128

    
129
class ServiceUnavailable(Fault):
130
    code = 503