Skip to content
This repository was archived by the owner on Nov 22, 2024. It is now read-only.

Commit eeb1355

Browse files
committed
Issue182 triggered some rethink of the exception code plus some longstanding cleanup
1 parent 9f8fe7a commit eeb1355

File tree

1 file changed

+41
-24
lines changed

1 file changed

+41
-24
lines changed

CloudFlare/exceptions.py

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,75 +3,92 @@
33
class CloudFlareError(Exception):
44
""" errors for Cloudflare API"""
55

6-
class CodeMessage():
6+
class _CodeMessage():
77
""" a small class to save away an interger and string (the code and the message)"""
88

99
def __init__(self, code, message):
10-
self.code = code
11-
self.message = message
10+
self._code = code
11+
self._message = message
1212

1313
def __int__(self):
14-
return self.code
14+
return self._code
1515

1616
def __str__(self):
17-
return self.message
17+
return self._message
1818

1919
def __init__(self, code=0, message=None, error_chain=None, e=None):
2020
""" errors for Cloudflare API"""
2121

2222
if e and isinstance(e, CloudFlareAPIError):
23-
self.evalue = e.evalue
24-
self.error_chain = e.error_chain
23+
# create fresh values (i.e copies)
24+
self._evalue = CloudFlareError._CodeMessage(int(e), str(e))
25+
if getattr(e, '_error_chain', False):
26+
self._error_chain = [CloudFlareError._CodeMessage(int(v), str(v)) for v in e._error_chain]
2527
return
2628

27-
self.evalue = CloudFlareError.CodeMessage(int(code), str(message))
28-
self.error_chain = None
29+
self._evalue = CloudFlareError._CodeMessage(int(code), str(message))
2930
if error_chain is not None:
30-
self.error_chain = []
31+
self._error_chain = []
3132
for evalue in error_chain:
32-
if isinstance(evalue, CloudFlareError.CodeMessage):
33+
if isinstance(evalue, CloudFlareError._CodeMessage):
3334
v = evalue
3435
else:
35-
v = CloudFlareError.CodeMessage(int(evalue['code']), str(evalue['message']))
36-
self.error_chain.append(v)
37-
# self.error_chain.append({'code': self.code, 'message': str(self.message)})
36+
v = CloudFlareError._CodeMessage(int(evalue['code']), str(evalue['message']))
37+
self._error_chain.append(v)
3838
# As we are built off Exception, we need to get our superclass all squared away
3939
# super().__init__(message)
4040

41+
def __bool__(self):
42+
""" bool value for Cloudflare API errors"""
43+
44+
# required because there's a len() function below that can return 0
45+
# see https://docs.python.org/3/library/stdtypes.html#truth-value-testing
46+
return True
47+
4148
def __int__(self):
4249
""" integer value for Cloudflare API errors"""
4350

44-
return int(self.evalue)
51+
return int(self._evalue)
4552

4653
def __str__(self):
4754
""" string value for Cloudflare API errors"""
4855

49-
return str(self.evalue)
56+
return str(self._evalue)
57+
58+
def __repr__(self):
59+
""" string value for Cloudflare API errors"""
60+
61+
s = '[%d:"%s"]' % (int(self._evalue), str(self._evalue))
62+
if getattr(self, '_error_chain', False):
63+
for evalue in self._error_chain:
64+
s += ' [%d:"%s"]' % (int(evalue), str(evalue))
65+
return s
5066

5167
def __len__(self):
5268
""" Cloudflare API errors can contain a chain of errors"""
5369

54-
if self.error_chain is None:
70+
try:
71+
return len(getattr(self, '_error_chain'))
72+
except AttributeError:
5573
return 0
56-
return len(self.error_chain)
5774

5875
def __getitem__(self, ii):
5976
""" Cloudflare API errors can contain a chain of errors"""
6077

61-
return self.error_chain[ii]
78+
return self._error_chain[ii]
6279

6380
def __iter__(self):
6481
""" Cloudflare API errors can contain a chain of errors"""
6582

66-
if self.error_chain is None:
67-
return
68-
for evalue in self.error_chain:
69-
yield evalue
83+
if getattr(self, '_error_chain', False):
84+
for evalue in self._error_chain:
85+
yield evalue
86+
return
7087

7188
def next(self):
7289
""" Cloudflare API errors can contain a chain of errors"""
7390

74-
if self.error_chain is None:
91+
if getattr(self, '_error_chain', False) is False:
7592
raise StopIteration
7693

7794
class CloudFlareAPIError(CloudFlareError):

0 commit comments

Comments
 (0)