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

Commit e7cc964

Browse files
committed
moved all requests code/exceptions into network where it belongs, import cleanup, exception handling cleanup
1 parent dbaf7d6 commit e7cc964

2 files changed

Lines changed: 35 additions & 32 deletions

File tree

CloudFlare/cloudflare.py

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
""" Cloudflare v4 API"""
22
import json
33
import keyword
4-
from requests import RequestException as requests_RequestException, ConnectionError as requests_ConnectionError, exceptions as requests_exceptions
54

6-
from .network import CFnetwork
5+
from .network import CFnetwork, CFnetworkError
76
from .logging_helper import CFlogger
87
from .utils import user_agent, build_curl
98
from .read_configs import read_configs, ReadConfigError
@@ -299,22 +298,14 @@ def _call_network(self, method, headers, parts, identifiers, params, data_str, d
299298

300299
try:
301300
response = self.network(method, url, headers, params, data_str, data_json, files)
302-
except requests_ConnectionError as e:
301+
except CFnetworkError as e:
303302
if self.logger:
304-
self.logger.debug('Call: requests connection exception! "%s"', e)
305-
raise CloudFlareAPIError(0, 'connection error') from None
306-
except requests_exceptions.Timeout as e:
307-
if self.logger:
308-
self.logger.debug('Call: requests timeout exception! "%s"', e)
309-
raise CloudFlareAPIError(0, 'connection timeout') from None
310-
except requests_RequestException as e:
311-
if self.logger:
312-
self.logger.debug('Call: requests exception! "%s"', e)
313-
raise CloudFlareAPIError(0, e) from None
303+
self.logger.debug('Call: network error: %s', e)
304+
raise CloudFlareAPIError(0, str(e)) from None
314305
except Exception as e:
315306
if self.logger:
316-
self.logger.debug('Call: exception! "%s"', e)
317-
raise
307+
self.logger.debug('Call: network exception! %s', e)
308+
raise CloudFlareAPIError(0, 'network exception: %s' % (e)) from None
318309

319310
# Create response_{type|code|data}
320311
try:

CloudFlare/network.py

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,40 +2,52 @@
22

33
from urllib.parse import urlparse
44

5-
import requests
5+
from requests import Session, RequestException, ConnectionError
6+
from requests.exceptions import Timeout
67
from requests.adapters import HTTPAdapter
78

8-
from .exceptions import CloudFlareAPIError
9+
class CFnetworkError(Exception):
10+
""" errors for network calls """
911

1012
class CFnetwork():
11-
"""Network for Cloudflare API"""
13+
""" CFnetwork """
1214

13-
def __init__(
14-
self, use_sessions=True, global_request_timeout=5, max_request_retries=5
15-
):
16-
"""Network for Cloudflare API"""
15+
def __init__(self, use_sessions=True, global_request_timeout=5, max_request_retries=5):
16+
""" CFnetwork """
1717

1818
self.use_sessions = use_sessions
1919
self.global_request_timeout = global_request_timeout
2020
self.max_request_retries = max_request_retries
2121
self.session = None
2222

2323
def __call__(self, method, url, headers=None, params=None, data_str=None, data_json=None, files=None):
24-
"""Network for Cloudflare API"""
24+
""" __call__ """
2525

2626
if self.use_sessions:
2727
if self.session is None:
28-
s = requests.Session()
28+
s = Session()
2929
if self.max_request_retries is not None:
30-
hostname = urlparse(url).netloc
31-
s.mount(
32-
f"https://{hostname}",
33-
HTTPAdapter(max_retries=self.max_request_retries),
34-
)
30+
prefix = 'https://%s' % (urlparse(url).netloc),
31+
s.mount(prefix, HTTPAdapter(max_retries=self.max_request_retries))
3532
self.session = s
3633
else:
34+
# only now do we import all of requests ... it's a rare case
35+
import requests
3736
self.session = requests
3837

38+
try:
39+
r = self._do_network(method, url, headers, params, data_str, data_json, files)
40+
except RequestException as e:
41+
raise CFnetworkError('network request exception error: %s' % (e)) from None
42+
except Timeout as e:
43+
raise CFnetworkError('network request timeout error: %s' % (e)) from None
44+
except ConnectionError as e:
45+
raise CFnetworkError('network request connection error: %s' % (e)) from None
46+
47+
return r
48+
49+
def _do_network(self, method, url, headers, params, data_str, data_json, files):
50+
""" _do_network """
3951
method = method.upper()
4052

4153
# https://docs.python-requests.org/en/latest/user/quickstart/#post-a-multipart-encoded-file
@@ -91,12 +103,12 @@ def __call__(self, method, url, headers=None, params=None, data_str=None, data_j
91103
)
92104
else:
93105
# should never happen
94-
raise CloudFlareAPIError(0, 'method not supported')
95-
106+
raise CFnetworkError('internal error - http method invalid: %s' % (method))
107+
# success!
96108
return r
97109

98110
def __del__(self):
99-
"""Network for Cloudflare API"""
111+
""" __del__ """
100112

101113
if self.use_sessions and self.session:
102114
self.session.close()

0 commit comments

Comments
 (0)