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

Commit 142a01b

Browse files
committed
timeout values now work from config or api call, added support for image binary results, fixed logging if binary
1 parent 453fed3 commit 142a01b

File tree

3 files changed

+36
-7
lines changed

3 files changed

+36
-7
lines changed

CloudFlare/cloudflare.py

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515

1616
BASE_URL = 'https://api.cloudflare.com/client/v4'
1717

18+
DEFAULT_GLOBAL_REQUEST_TIMEOUT = 5
19+
DEFAULT_MAX_REQUEST_RETRIES = 5
20+
1821
class CloudFlare():
1922
""" Cloudflare v4 API"""
2023

@@ -24,6 +27,7 @@ class _v4base():
2427
def __init__(self, config):
2528
""" Cloudflare v4 API"""
2629

30+
self.network = None
2731
self.config = config
2832

2933
self.api_email = config['email'] if 'email' in config else None
@@ -36,8 +40,16 @@ def __init__(self, config):
3640

3741
self.raw = config['raw']
3842
self.use_sessions = config['use_sessions']
39-
self.global_request_timeout = config['global_request_timeout'] if 'global_request_timeout' in config else None
40-
self.max_request_retries = config['max_request_retries'] if 'max_request_retries' in config else None
43+
self.global_request_timeout = config['global_request_timeout'] if 'global_request_timeout' in config else DEFAULT_GLOBAL_REQUEST_TIMEOUT
44+
self.max_request_retries = config['max_request_retries'] if 'max_request_retries' in config else DEFAULT_MAX_REQUEST_RETRIES
45+
try:
46+
self.global_request_timeout = int(self.global_request_timeout)
47+
except (TypeError, ValueError):
48+
self.global_request_timeout = DEFAULT_GLOBAL_REQUEST_TIMEOUT
49+
try:
50+
self.max_request_retries = int(self.max_request_retries)
51+
except (TypeError, ValueError):
52+
self.max_request_retries = DEFAULT_MAX_REQUEST_RETRIES
4153
self.profile = config['profile']
4254
self.network = CFnetwork(
4355
use_sessions=self.use_sessions,
@@ -245,7 +257,10 @@ def _call_network(self, method, headers, parts, identifiers, params, data, files
245257
response_data = response_data.decode("utf-8")
246258

247259
if self.logger:
248-
self.logger.debug('Response: %d, %s, %s', response_code, response_type, response_data)
260+
if 'text/' == response_type[0:5] or response_type in ['application/javascript', 'application/json']:
261+
self.logger.debug('Response: %d, %s, %s', response_code, response_type, response_data[0:100])
262+
else:
263+
self.logger.debug('Response: %d, %s, %s', response_code, response_type, '...')
249264

250265
if response_code >= 500 and response_code <= 599:
251266
# 500 Internal Server Error
@@ -421,6 +436,14 @@ def _raw(self, method, headers, parts, identifiers, params, data, files):
421436
'code': response_code,
422437
'result': str(response_data)}
423438

439+
elif response_type[0:6] in ['audio/', 'image/', 'video/']:
440+
# raw - just pass thru
441+
if response_code == requests_codes.ok:
442+
response_data = {'success': True, 'result': response_data}
443+
else:
444+
response_data = {'success': False,
445+
'code': response_code,
446+
'result': response_data}
424447
else:
425448
# Assuming nothing - but continuing anyway
426449
# A single value is returned (vs an array or object)
@@ -531,7 +554,10 @@ def _call(self, method, headers, parts, identifiers, params, data, files):
531554
except:
532555
result = response_data
533556
if self.logger:
534-
self.logger.debug('Response: %s', result)
557+
if isinstance(result, str):
558+
self.logger.debug('Response: %s', result[0:100])
559+
else:
560+
self.logger.debug('Response: %s', '...')
535561
return result
536562

537563
def _call_unwrapped(self, method, headers, parts, identifiers, params, data, files):
@@ -913,7 +939,7 @@ def api_from_openapi(self, url):
913939

914940
return api_decode_from_openapi(self._base.api_from_openapi(url))
915941

916-
def __init__(self, email=None, key=None, token=None, certtoken=None, debug=False, raw=False, use_sessions=True, profile=None, base_url=None, global_request_timeout=5, max_request_retries=5):
942+
def __init__(self, email=None, key=None, token=None, certtoken=None, debug=False, raw=False, use_sessions=True, profile=None, base_url=None, global_request_timeout=None, max_request_retries=None):
917943
""" Cloudflare v4 API"""
918944

919945
self._base = None

CloudFlare/network.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class CFnetwork:
1212
"""Network for Cloudflare API"""
1313

1414
def __init__(
15-
self, max_request_retries, use_sessions=True, global_request_timeout=5,
15+
self, use_sessions=True, global_request_timeout=5, max_request_retries=5
1616
):
1717
"""Network for Cloudflare API"""
1818

CloudFlare/read_configs.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ def read_configs(profile=None):
2121
config['extras'] = os.getenv('CLOUDFLARE_API_EXTRAS') if os.getenv('CLOUDFLARE_API_EXTRAS') is not None else os.getenv('CF_API_EXTRAS')
2222
config['base_url'] = os.getenv('CLOUDFLARE_API_URL') if os.getenv('CLOUDFLARE_API_URL') is not None else os.getenv('CF_API_URL')
2323

24+
config['global_request_timeout'] = os.getenv('CLOUDFLARE_GLOBAL_REQUEST_TIMEOUT')
25+
config['max_request_retries'] = os.getenv('CLOUDFLARE_MAX_REQUEST_RETRIES')
26+
2427
# grab values from config files
2528
cp = configparser.ConfigParser()
2629
try:
@@ -55,7 +58,7 @@ def read_configs(profile=None):
5558
if not cp.has_section(profile):
5659
raise Exception("%s: configuration section missing - configuration file only has these sections: %s" % (profile, ','.join(cp.sections())))
5760

58-
for option in ['email', 'key', 'token', 'certtoken', 'extras', 'base_url']:
61+
for option in ['email', 'key', 'token', 'certtoken', 'extras', 'base_url', 'global_request_timeout', 'max_request_retries']:
5962
try:
6063
config_value = cp.get(profile, option)
6164
if option == 'extras':

0 commit comments

Comments
 (0)