Skip to content

Commit bf45916

Browse files
committed
Python 3.x porting
1 parent 423120c commit bf45916

8 files changed

Lines changed: 644 additions & 456 deletions

File tree

CloudFlare/__init__.py

Lines changed: 251 additions & 187 deletions
Large diffs are not rendered by default.

CloudFlare/api_extras.py

Lines changed: 47 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,54 @@
1+
""" API extras for CloudFlare API"""
12

23
import re
34

45
def api_extras(self, extras=None):
5-
for extra in extras:
6-
if extra == '':
7-
continue
8-
extra = re.sub(r"^.*/client/v4/", '/', extra)
9-
extra = re.sub(r"^.*/v4/", '/', extra)
10-
extra = re.sub(r"^/", '', extra)
6+
""" API extras for CloudFlare API"""
117

12-
# build parts of the extra command
13-
parts = []
14-
nn = 0
15-
for element in extra.split('/'):
16-
if element[0] == ':':
17-
nn += 1
18-
continue
19-
try:
20-
parts[nn]
21-
except:
22-
parts.append([])
23-
parts[nn].append(element)
8+
for extra in extras:
9+
if extra == '':
10+
continue
11+
extra = re.sub(r"^.*/client/v4/", '/', extra)
12+
extra = re.sub(r"^.*/v4/", '/', extra)
13+
extra = re.sub(r"^/", '', extra)
2414

25-
# insert extra command into class
26-
element_path = []
27-
current = self
28-
for element in parts[0]:
29-
element_path.append(element)
30-
try:
31-
m = getattr(current, element)
32-
# exists - but still add it there's a second part
33-
if element == parts[0][-1] and len(parts) > 1:
34-
setattr(m, parts[1][0], self._client_with_auth(self.base, '/'.join(element_path), '/'.join(parts[1])))
35-
current = m
36-
continue
37-
except:
38-
pass
39-
# does not exist
40-
if element == parts[0][-1] and len(parts) > 1:
41-
# last element
42-
setattr(current, element, self._client_with_auth(self.base, '/'.join(element_path), '/'.join(parts[1])))
43-
else:
44-
setattr(current, element, self._client_with_auth(self.base, '/'.join(element_path)))
45-
current = getattr(current, element)
15+
# build parts of the extra command
16+
parts = []
17+
nn = 0
18+
for element in extra.split('/'):
19+
if element[0] == ':':
20+
nn += 1
21+
continue
22+
try:
23+
parts[nn]
24+
except IndexError:
25+
parts.append([])
26+
parts[nn].append(element)
27+
28+
# insert extra command into class
29+
element_path = []
30+
current = self
31+
for element in parts[0]:
32+
element_path.append(element)
33+
try:
34+
m = getattr(current, element)
35+
# exists - but still add it there's a second part
36+
if element == parts[0][-1] and len(parts) > 1:
37+
api_call_part1 = '/'.join(element_path)
38+
api_call_part2 = '/'.join(parts[1])
39+
setattr(m, parts[1][0], self._client_with_auth(self.base, api_call_part1, api_call_part2))
40+
current = m
41+
continue
42+
except:
43+
pass
44+
# does not exist
45+
if element == parts[0][-1] and len(parts) > 1:
46+
# last element
47+
api_call_part1 = '/'.join(element_path)
48+
api_call_part2 = '/'.join(parts[1])
49+
setattr(current, element, self._client_with_auth(self.base, api_call_part1, api_call_part2))
50+
else:
51+
api_call_part1 = '/'.join(element_path)
52+
setattr(current, element, self._client_with_auth(self.base, api_call_part1))
53+
current = getattr(current, element)
4654

CloudFlare/api_v4.py

Lines changed: 195 additions & 111 deletions
Large diffs are not rendered by default.

CloudFlare/exceptions.py

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,31 @@
1+
""" errors for CloudFlare API"""
12

23
class CloudFlareError(Exception):
3-
def __init__(self, code, message):
4-
self.code = code
5-
self.message = message
4+
""" errors for CloudFlare API"""
65

7-
def __int__(self):
8-
return self.code
6+
def __init__(self, code, message):
7+
""" errors for CloudFlare API"""
98

10-
def __str__(self):
11-
return self.message
9+
self.code = code
10+
self.message = message
11+
12+
def __int__(self):
13+
""" errors for CloudFlare API"""
14+
15+
return self.code
16+
17+
def __str__(self):
18+
""" errors for CloudFlare API"""
19+
20+
return self.message
1221

1322
class CloudFlareAPIError(CloudFlareError):
14-
pass
23+
""" errors for CloudFlare API"""
24+
25+
pass
1526

1627
class CloudFlareInternalError(CloudFlareError):
17-
pass
28+
""" errors for CloudFlare API"""
29+
30+
pass
1831

CloudFlare/logger.py

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,43 @@
1-
1+
""" Logging for CloudFlare API"""
22
import logging
33

44
DEBUG = 0
55
INFO = 1
66

7-
class Logger:
8-
def __init__(self, level):
9-
self.logger_level = self._get_logging_level(level)
10-
#logging.basicConfig(level=self.logger_level)
11-
request_logger = logging.getLogger("requests.packages.urllib3")
12-
request_logger.setLevel(self.logger_level)
13-
request_logger.propagate = level
7+
class Logger(object):
8+
""" Logging for CloudFlare API"""
9+
10+
def __init__(self, level):
11+
""" Logging for CloudFlare API"""
12+
self.logger_level = self._get_logging_level(level)
13+
#logging.basicConfig(level=self.logger_level)
14+
request_logger = logging.getLogger("requests.packages.urllib3")
15+
request_logger.setLevel(self.logger_level)
16+
request_logger.propagate = level
1417

15-
def getLogger(self):
16-
# create logger
17-
logger = logging.getLogger('Python CloudFlare API v4')
18-
logger.setLevel(self.logger_level)
18+
def getLogger(self):
19+
""" Logging for CloudFlare API"""
20+
# create logger
21+
logger = logging.getLogger('Python CloudFlare API v4')
22+
logger.setLevel(self.logger_level)
1923

20-
ch = logging.StreamHandler()
21-
ch.setLevel(self.logger_level)
24+
ch = logging.StreamHandler()
25+
ch.setLevel(self.logger_level)
2226

23-
# create formatter
24-
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
27+
# create formatter
28+
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
2529

26-
# add formatter to ch
27-
ch.setFormatter(formatter)
30+
# add formatter to ch
31+
ch.setFormatter(formatter)
2832

29-
# add ch to logger
30-
logger.addHandler(ch)
33+
# add ch to logger
34+
logger.addHandler(ch)
3135

32-
return logger
36+
return logger
3337

34-
def _get_logging_level(self, level):
35-
if level == True:
36-
return logging.DEBUG
37-
else:
38-
return logging.INFO
38+
def _get_logging_level(self, level):
39+
""" Logging for CloudFlare API"""
40+
if level is True:
41+
return logging.DEBUG
42+
else:
43+
return logging.INFO

CloudFlare/read_configs.py

Lines changed: 43 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,50 @@
1+
""" reading the config file for CloudFlare API"""
12

23
import os
34
import re
45
import ConfigParser
56

67
def read_configs():
7-
8-
# envioronment variables override config files
9-
email = os.getenv('CF_API_EMAIL')
10-
token = os.getenv('CF_API_KEY')
11-
certtoken = os.getenv('CF_API_CERTKEY')
12-
13-
# grab values from config files
14-
config = ConfigParser.RawConfigParser()
15-
config.read(['.cloudflare.cfg', os.path.expanduser('~/.cloudflare.cfg'), os.path.expanduser('~/.cloudflare/cloudflare.cfg')])
16-
17-
if email is None:
18-
try:
19-
email = re.sub(r"\s+", '', config.get('CloudFlare', 'email'))
20-
except:
21-
email = None
22-
23-
if token is None:
24-
try:
25-
token = re.sub(r"\s+", '', config.get('CloudFlare', 'token'))
26-
except:
27-
token = None
28-
29-
if certtoken is None:
30-
try:
31-
certtoken = re.sub(r"\s+", '', config.get('CloudFlare', 'certtoken'))
32-
except:
33-
certtoken = None
34-
35-
try:
36-
extras = re.sub(r"\s+", ' ', config.get('CloudFlare', 'extras'))
37-
except:
38-
extras = None
39-
40-
if extras:
41-
extras = extras.split(' ')
42-
43-
return [ email, token, certtoken, extras ]
8+
""" reading the config file for CloudFlare API"""
9+
10+
# envioronment variables override config files
11+
email = os.getenv('CF_API_EMAIL')
12+
token = os.getenv('CF_API_KEY')
13+
certtoken = os.getenv('CF_API_CERTKEY')
14+
15+
# grab values from config files
16+
config = ConfigParser.RawConfigParser()
17+
config.read([
18+
'.cloudflare.cfg',
19+
os.path.expanduser('~/.cloudflare.cfg'),
20+
os.path.expanduser('~/.cloudflare/cloudflare.cfg')
21+
])
22+
23+
if email is None:
24+
try:
25+
email = re.sub(r"\s+", '', config.get('CloudFlare', 'email'))
26+
except:
27+
email = None
28+
29+
if token is None:
30+
try:
31+
token = re.sub(r"\s+", '', config.get('CloudFlare', 'token'))
32+
except:
33+
token = None
34+
35+
if certtoken is None:
36+
try:
37+
certtoken = re.sub(r"\s+", '', config.get('CloudFlare', 'certtoken'))
38+
except:
39+
certtoken = None
40+
41+
try:
42+
extras = re.sub(r"\s+", ' ', config.get('CloudFlare', 'extras'))
43+
except:
44+
extras = None
45+
46+
if extras:
47+
extras = extras.split(' ')
48+
49+
return [email, token, certtoken, extras]
4450

CloudFlare/utils.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1+
""" misc utilities for CloudFlare API"""
12

23
def sanitize_secrets(secrets):
3-
redacted_phrase = 'REDACTED'
4+
""" misc utilities for CloudFlare API"""
5+
redacted_phrase = 'REDACTED'
46

5-
if secrets is None:
6-
return None
7+
if secrets is None:
8+
return None
79

8-
secrets_copy = secrets.copy()
9-
if 'password' in secrets_copy:
10-
secrets_copy['password'] = redacted_phrase
11-
elif 'X-Auth-Key' in secrets_copy:
12-
secrets_copy['X-Auth-Key'] = redacted_phrase
13-
elif 'X-Auth-User-Service-Key' in secrets_copy:
14-
secrets_copy['X-Auth-User-Service-Key'] = redacted_phrase
10+
secrets_copy = secrets.copy()
11+
if 'password' in secrets_copy:
12+
secrets_copy['password'] = redacted_phrase
13+
elif 'X-Auth-Key' in secrets_copy:
14+
secrets_copy['X-Auth-Key'] = redacted_phrase
15+
elif 'X-Auth-User-Service-Key' in secrets_copy:
16+
secrets_copy['X-Auth-User-Service-Key'] = redacted_phrase
1517

16-
return secrets_copy
18+
return secrets_copy

0 commit comments

Comments
 (0)