33
44import json
55import keyword
6- import requests
6+ from requests import RequestException as requests_RequestException , ConnectionError as requests_ConnectionError , exceptions as requests_exceptions , codes as requests_codes
77
88from .network import CFnetwork
99from .logging_helper import CFlogger
1212from .api_v4 import api_v4
1313from .api_extras import api_extras
1414from .api_decode_from_web import api_decode_from_web
15+ from .api_decode_from_openapi import api_decode_from_openapi
1516from .exceptions import CloudFlareError , CloudFlareAPIError , CloudFlareInternalError
1617
1718BASE_URL = 'https://api.cloudflare.com/client/v4'
@@ -199,15 +200,15 @@ def _call_network(self, method, headers, parts, identifiers, params, data, files
199200
200201 try :
201202 response = self .network (method , url , headers , params , data , files )
202- except requests . RequestException as e :
203+ except requests_RequestException as e :
203204 if self .logger :
204205 self .logger .debug ('Call: requests exception! "%s"' , e )
205206 raise CloudFlareAPIError (0 , e )
206- except requests . ConnectionError as e :
207+ except requests_ConnectionError as e :
207208 if self .logger :
208209 self .logger .debug ('Call: requests connection exception! "%s"' , e )
209210 raise CloudFlareAPIError (0 , 'connection error' )
210- except requests . exceptions .Timeout as e :
211+ except requests_exceptions .Timeout as e :
211212 if self .logger :
212213 self .logger .debug ('Call: requests timeout exception! "%s"' , e )
213214 raise CloudFlareAPIError (0 , 'connection timeout' )
@@ -297,7 +298,7 @@ def _raw(self, method, headers, parts, identifiers, params, data, files):
297298 except ValueError :
298299 if response_data == '' :
299300 # This should really be 'null' but it isn't. Even then, it's wrong!
300- if response_code == requests . codes .ok :
301+ if response_code == requests_codes .ok :
301302 # 200 ok
302303 response_data = {'success' : True ,
303304 'result' : None }
@@ -320,7 +321,7 @@ def _raw(self, method, headers, parts, identifiers, params, data, files):
320321 self .logger .debug ('Response data not JSON: %r' , response_data )
321322 raise CloudFlareAPIError (0 , 'JSON parse failed - report to Cloudflare.' )
322323
323- if response_code == requests . codes .ok :
324+ if response_code == requests_codes .ok :
324325 # 200 ok - so nothing needs to be done
325326 pass
326327 else :
@@ -329,7 +330,7 @@ def _raw(self, method, headers, parts, identifiers, params, data, files):
329330 pass
330331 elif response_type == 'application/octet-stream' and isinstance (response_data , (int , float )):
331332 # It's binary data
332- if response_code == requests . codes .ok :
333+ if response_code == requests_codes .ok :
333334 # 200 ok
334335 response_data = {'success' : True ,
335336 'result' : response_data }
@@ -345,7 +346,7 @@ def _raw(self, method, headers, parts, identifiers, params, data, files):
345346 try :
346347 response_data = json .loads (response_data )
347348 if not isinstance (response_data , (dict )) or 'success' not in response_data :
348- if response_code == requests . codes .ok :
349+ if response_code == requests_codes .ok :
349350 # 200 ok
350351 response_data = {'success' : True ,
351352 'result' : response_data }
@@ -357,7 +358,7 @@ def _raw(self, method, headers, parts, identifiers, params, data, files):
357358 except ValueError :
358359 # So it wasn't JSON - moving on as if it's text!
359360 # A single value is returned (vs an array or object)
360- if response_code == requests . codes .ok :
361+ if response_code == requests_codes .ok :
361362 # 200 ok
362363 response_data = {'success' : True , 'result' : response_data }
363364 else :
@@ -377,7 +378,7 @@ def _raw(self, method, headers, parts, identifiers, params, data, files):
377378 except ValueError :
378379 # So it wasn't JSON - moving on as if it's text!
379380 # A single value is returned (vs an array or object)
380- if response_code == requests . codes .ok :
381+ if response_code == requests_codes .ok :
381382 # 200 ok
382383 response_data = {'success' : True , 'result' : response_data }
383384 else :
@@ -387,7 +388,7 @@ def _raw(self, method, headers, parts, identifiers, params, data, files):
387388 'result' : response_data }
388389 elif response_type in ['text/javascript' , 'application/javascript' ]:
389390 # used by Cloudflare workers
390- if response_code == requests . codes .ok :
391+ if response_code == requests_codes .ok :
391392 # 200 ok
392393 response_data = {'success' : True ,
393394 'result' : str (response_data )}
@@ -398,7 +399,7 @@ def _raw(self, method, headers, parts, identifiers, params, data, files):
398399 'result' : str (response_data )}
399400 elif response_type == 'text/html' :
400401 # used by media for preview
401- if response_code == requests . codes .ok :
402+ if response_code == requests_codes .ok :
402403 # 200 ok
403404 response_data = {'success' : True ,
404405 'result' : str (response_data )}
@@ -411,7 +412,7 @@ def _raw(self, method, headers, parts, identifiers, params, data, files):
411412 else :
412413 # Assuming nothing - but continuing anyway
413414 # A single value is returned (vs an array or object)
414- if response_code == requests . codes .ok :
415+ if response_code == requests_codes .ok :
415416 # 200 ok
416417 response_data = {'success' : True ,
417418 'result' : str (response_data )}
@@ -535,7 +536,15 @@ def api_from_web(self):
535536
536537 # base url isn't enough; we need less
537538 url = '/' .join (self .base_url .split ('/' )[0 :3 ])
539+ return self ._read_from_web (url )
538540
541+ def api_from_openapi (self , url ):
542+ """ Cloudflare v4 API"""
543+
544+ return self ._read_from_web (url )
545+
546+ def _read_from_web (self , url ):
547+ """ Cloudflare v4 API"""
539548 try :
540549 if self .logger :
541550 self .logger .debug ('Call: doit!' )
@@ -894,6 +903,11 @@ def api_from_web(self):
894903
895904 return api_decode_from_web (self ._base .api_from_web ())
896905
906+ def api_from_openapi (self , url ):
907+ """ Cloudflare v4 API"""
908+
909+ return api_decode_from_openapi (self ._base .api_from_openapi (url ))
910+
897911 def __init__ (self , email = None , key = None , token = None , certtoken = None , debug = False , raw = False , use_sessions = True , profile = None , base_url = None ):
898912 """ Cloudflare v4 API"""
899913
0 commit comments