Fixes #10
[diaspy.git] / diaspy / errors.py
1 #!/usr/bin/env python3
2
3 """This module contains custom exceptions that are raised by diaspy.
4 These are not described by DIASPORA* protocol as exceptions that should be
5 raised by API implementations but are specific to this particular implementation.
6
7 If your program should catch all exceptions raised by diaspy and
8 does not need to handle them specifically you can use following code:
9
10 # this line imports all errors
11 from diaspy.errors import *
12
13 try:
14 # your code...
15 except DiaspyError as e:
16 # your error handling code...
17 finally:
18 # closing code...
19 """
20
21 import warnings
22
23
24 class DiaspyError(Exception):
25 """Base exception for all errors
26 raised by diaspy.
27 """
28 pass
29
30
31 class LoginError(DiaspyError):
32 """Exception raised when something
33 bad happens while performing actions
34 related to logging in.
35 """
36 pass
37
38
39 class TokenError(DiaspyError):
40 pass
41
42
43 class DataError(DiaspyError):
44 pass
45
46
47 class InvalidDataError(DataError):
48 pass
49
50
51 class KeyMissingFromFetchedData(InvalidDataError):
52 pass
53
54
55 class UserError(DiaspyError):
56 """Exception raised when something related to users goes wrong.
57 """
58 pass
59
60
61 class InvalidHandleError(DiaspyError):
62 """Raised when invalid handle is found.
63 """
64 pass
65
66
67 class SearchError(DiaspyError):
68 """Exception raised when something related to search goes wrong.
69 """
70 pass
71
72
73 class ConversationError(DiaspyError):
74 """Exception raised when something related to conversations goes wrong.
75 """
76 pass
77
78
79 class AspectError(DiaspyError):
80 """Exception raised when something related to aspects goes wrong.
81 """
82 pass
83
84
85 class PostError(DiaspyError):
86 """Exception raised when something related to posts goes wrong.
87 """
88 pass
89
90
91 class StreamError(DiaspyError):
92 """Exception raised when something related to streams goes wrong.
93 """
94 pass
95
96
97 class SettingsError(DiaspyError):
98 """Exception raised when something related to settings goes wrong.
99 """
100 pass
101
102
103 def react(r, message='', accepted=[200, 201, 202, 203, 204, 205, 206], exception=DiaspyError):
104 """This method tries to decide how to react
105 to a response code passed to it. If it's an
106 error code it will raise an exception (it will
107 call `throw()` method.
108
109 If response code is not accepted AND cannot
110 be matched to any exception, generic exception
111 (DiaspyError) is raised (provided that `exception`
112 param was left untouched).
113
114 By default `accepted` param contains all HTTP
115 success codes.
116
117 User can force type of exception to raise by passing
118 `exception` param.
119
120 :param r: response code
121 :type r: int
122 :param message: message for the exception
123 :type message: str
124 :param accepted: list of accepted error codes
125 :type accepted: list
126 :param exception: preferred exception to raise
127 :type exception: valid exception type (default: DiaspyError)
128 """
129 warnings.warn(DeprecationWarning)
130 if r in accepted: e = None
131 else: e = DiaspyError
132
133 if e is not None: e = exception
134 throw(e, message=message)
135
136
137 def throw(e, message=''):
138 """This function throws an error with given message.
139 If None is passed as `e` throw() will not raise
140 anything.
141
142 :param e: exception to throw
143 :type e: any valid exception type or None
144 :param message: message for exception
145 :type message: str
146 """
147 warnings.warn(DeprecationWarning)
148 if e is None: pass
149 else: raise e(message)