Statistics
| Branch: | Tag: | Revision:

root / kamaki / cli / errors.py @ fd5db045

History | View | Annotate | Download (3.2 kB)

1
# Copyright 2011 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
class CLIError(Exception):
36
    def __init__(self, message, status=0, details='', importance=0):
37
        """importance is set by the raiser
38
        0 is the lowest possible importance
39
        Suggested values: 0, 1, 2, 3
40
        """
41
        super(CLIError, self).__init__(message, status, details)
42
        self.message = message
43
        self.status = status
44
        self.details = details
45
        self.importance = importance
46

    
47
    def __unicode__(self):
48
        return unicode(self.message)
49

    
50

    
51
class CLISyntaxError(CLIError):
52
    def __init__(self, message='Syntax Error', status=10, details=''):
53
        super(CLISyntaxError,
54
            self).__init__(message, status, details, importance=1)
55

    
56

    
57
class CLIUnknownCommand(CLIError):
58
    def __init__(self, message='Unknown Command', status=12, details=''):
59
        super(CLIUnknownCommand,
60
            self).__init__(message, status, details, importance=1)
61

    
62

    
63
class CLICmdSpecError(CLIError):
64
    def __init__(self,
65
        message='Command Specification Error',
66
        status=13,
67
        details='',
68
        importance=1):
69
        super(CLICmdSpecError,
70
            self).__init__(message, status, details, importance=0)
71

    
72

    
73
class CLICmdIncompleteError(CLICmdSpecError):
74
    def __init__(self,
75
        message='Incomplete Command Error',
76
        status=14,
77
        details=''):
78
        super(CLICmdSpecError,
79
            self).__init__(message, status, details, importance=1)
80

    
81

    
82
def raiseCLIError(err, importance=-1):
83
    if importance < 0:
84
        if err.status <= 0:
85
            importance = 0
86
        elif err.status <= 400:
87
            importance = 1
88
        elif err.status <= 500:
89
            importance = 2
90
        else:
91
            importance = 3
92
    raise CLIError(err.message, err.status, err.details, importance)