Statistics
| Branch: | Tag: | Revision:

root / snf-django-lib / snf_django / lib / api / faults.py @ 420c24ee

History | View | Annotate | Download (2.7 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 camel_case(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 camel_case(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 Forbidden(Fault):
65
    code = 403
66

    
67

    
68
class ResizeNotAllowed(Forbidden):
69
    pass
70

    
71

    
72
class ItemNotFound(Fault):
73
    code = 404
74

    
75

    
76
class Conflict(Fault):
77
    code = 409
78

    
79

    
80
class BuildInProgress(Conflict):
81
    pass
82

    
83

    
84
class LengthRequired(Fault):
85
    code = 411
86

    
87

    
88
class PreconditionFailed(Fault):
89
    code = 412
90

    
91

    
92
class RequestEntityTooLarge(Fault):
93
    code = 413
94

    
95

    
96
class OverLimit(RequestEntityTooLarge):
97
    pass
98

    
99

    
100
class BadMediaType(Fault):
101
    code = 415
102

    
103

    
104
class RangeNotSatisfiable(Fault):
105
    code = 416
106

    
107

    
108
class NetworkInUse(Fault):
109
    code = 421
110

    
111

    
112
class UnprocessableEntity(Fault):
113
    code = 422
114

    
115

    
116
# 5xx
117
class InternalServerError(Fault):
118
    code = 500
119

    
120

    
121
class NotImplemented(Fault):
122
    code = 501
123

    
124

    
125
class ServiceUnavailable(Fault):
126
    code = 503