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

Commit fb245ee

Browse files
committed
OpenAPI code now returns clean errors and version number. cli4 prints fetch errors cleanly
1 parent d6cd999 commit fb245ee

3 files changed

Lines changed: 33 additions & 21 deletions

File tree

CloudFlare/api_decode_from_openapi.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,21 +62,18 @@ def api_decode_from_openapi(content):
6262

6363
try:
6464
j = json.loads(content)
65-
except Exception as e:
66-
sys.stderr.write("OpenAPI json format issue: %s\n" % (e))
67-
return None
65+
except json.decoder.JSONDecodeError as e:
66+
raise SyntaxError('OpenAPI json decode failed: %s' % (e))
6867

6968
try:
7069
components = j['components']
7170
info = j['info']
72-
openapi = j['openapi']
71+
cloudflare_version = info['version']
72+
openapi_version = j['openapi']
7373
paths = j['paths']
7474
servers = ['servers']
7575
except Exception as e:
76-
sys.stderr.write("OpenAPI json format structure: %s\n" % (e))
77-
return None
78-
79-
sys.stderr.write("OpenAPI %s json file - version: %s\n" % (openapi, info['version']))
76+
raise SyntaxError('OpenAPI json missing standard OpenAPI values: %s' % (e))
8077

8178
all_cmds = []
8279
for path in paths:
@@ -85,4 +82,4 @@ def api_decode_from_openapi(content):
8582
continue
8683
all_cmds += do_path(path, paths[path])
8784

88-
return sorted(all_cmds, key=lambda v: v['cmd'])
85+
return sorted(all_cmds, key=lambda v: v['cmd']), openapi_version, cloudflare_version

CloudFlare/cloudflare.py

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from .read_configs import read_configs
1010
from .api_v4 import api_v4
1111
from .api_extras import api_extras
12-
#from .api_decode_from_web import api_decode_from_web # TODO - remove at some point
1312
from .api_decode_from_openapi import api_decode_from_openapi
1413
from .exceptions import CloudFlareError, CloudFlareAPIError, CloudFlareInternalError
1514

@@ -601,12 +600,29 @@ def _call_unwrapped(self, method, parts, identifiers, params, data_str, data_jso
601600
result = response_data
602601
return result
603602

604-
def api_from_openapi(self, url=None):
603+
def _api_from_openapi(self, url=None):
605604
""" Cloudflare v4 API"""
606605

607606
if url is None:
608607
url = self.openapi_url
609-
return self._read_from_web(url)
608+
609+
try:
610+
v = self._read_from_web(url)
611+
except Exception as e:
612+
if self.logger:
613+
self.logger.debug('OpenAPI read from web failed: %s', e)
614+
raise CloudFlareAPIError(0, 'OpenAPI read from web failed: %s' % (e)) from None
615+
616+
try:
617+
v, openapi_version, cloudflare_version = api_decode_from_openapi(v)
618+
except SyntaxError as e:
619+
if self.logger:
620+
self.logger.debug('OpenAPI bad json file: %s', e)
621+
raise CloudFlareAPIError(0, 'OpenAPI bad json file: %s' % (e)) from None
622+
623+
if self.logger:
624+
self.logger.debug('OpenAPI version: %s, Cloudflare API version: %s', openapi_version, cloudflare_version)
625+
return v
610626

611627
def _read_from_web(self, url):
612628
""" Cloudflare v4 API"""
@@ -619,7 +635,7 @@ def _read_from_web(self, url):
619635
except Exception as e:
620636
if self.logger:
621637
self.logger.debug('Call: exception! "%s"', e)
622-
raise CloudFlareAPIError(0, 'connection failed.')
638+
raise CloudFlareAPIError(0, 'connection failed.') from None
623639

624640
return response.text
625641

@@ -851,16 +867,10 @@ def _api_list(self, m=None, s=''):
851867
w = w + self._api_list(a, s + '/' + n)
852868
return w
853869

854-
# TODO - remove at some point
855-
#def api_from_web(self):
856-
# """ Cloudflare v4 API"""
857-
#
858-
# return api_decode_from_web(self._base.api_from_web())
859-
860870
def api_from_openapi(self, url=None):
861871
""" Cloudflare v4 API"""
862872

863-
return api_decode_from_openapi(self._base.api_from_openapi(url))
873+
return self._base._api_from_openapi(url)
864874

865875
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):
866876
""" Cloudflare v4 API"""

cli4/cli4.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -485,11 +485,16 @@ def do_it(args):
485485

486486
if do_dump:
487487
a = dump_commands(cf)
488+
# success - just dump results and exit
488489
sys.stdout.write(a)
489490
sys.exit(0)
490491

491492
if do_openapi:
492-
a = dump_commands_from_web(cf, openapi_url)
493+
try:
494+
a = dump_commands_from_web(cf, openapi_url)
495+
except CloudFlare.exceptions.CloudFlareAPIError as e:
496+
sys.exit('cli4: %s - Failed' % (e))
497+
# success - just dump results and exit
493498
sys.stdout.write(a)
494499
sys.exit(0)
495500

0 commit comments

Comments
 (0)