Skip to content

Commit

Permalink
handle QA SSL errors
Browse files Browse the repository at this point in the history
  • Loading branch information
Guts committed Apr 1, 2018
1 parent 7b6d8f8 commit 6de3744
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 41 deletions.
70 changes: 37 additions & 33 deletions isogeo_pysdk/isogeo_sdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ def __init__(self, client_id, client_secret, proxy=None, auth_mode="group",
pass

# platform to request
self.platform, self.base_url = utils.set_base_url(platform)
self.platform, self.base_url, self.ssl = utils.set_base_url(platform)

# setting language
if lang.lower() not in ("fr", "en"):
Expand Down Expand Up @@ -206,16 +206,11 @@ def connect(self, client_id=None, client_secret=None):
auth=(client_id, client_secret),
headers=head,
data=payload,
proxies=self.proxies)
except requests.exceptions.ConnectionError:
return "No internet connection"
except requests.exceptions.SSLError as e:
logging.error(e)
conn = requests.post(id_url,
auth=(client_id, client_secret),
data=payload,
proxies=self.proxies,
verify=False)
verify=self.ssl)
except requests.exceptions.ConnectionError as e:
raise requests.exceptions.ConnectionError("Connection to Isogeo ID"
"failed: {}".format(e))

# just a fast check
check_params = checker.check_api_response(conn)
Expand Down Expand Up @@ -369,17 +364,15 @@ def search(self,
search_url = "{}://v1.{}.isogeo.com/resources/search".format(prot,
self.base_url)
try:
search_req = requests.get(search_url,
headers=head,
params=payload,
proxies=self.proxies)
except requests.exceptions.SSLError as e:
logging.error(e)
search_req = requests.get(search_url,
headers=head,
params=payload,
proxies=self.proxies,
verify=False)
verify=self.ssl)
except Exception as e:
logging.error(e)
raise Exception

# fast response check
checker.check_api_response(search_req)

Expand All @@ -399,7 +392,8 @@ def search(self,
search_req = requests.get(search_url,
headers=head,
params=payload,
proxies=self.proxies)
proxies=self.proxies,
verify=self.ssl)
# storing results by addition
metadatas.extend(search_req.json().get("results"))
search_rez["results"] = metadatas
Expand Down Expand Up @@ -458,8 +452,8 @@ def resource(self, token, id_resource, sub_resources=[], prot="https"):
resource_req = requests.get(md_url,
headers=head,
params=payload,
proxies=self.proxies
)
proxies=self.proxies,
verify=self.ssl)
checker.check_api_response(resource_req)

# end of method
Expand All @@ -475,7 +469,9 @@ def shares(self, token, prot="https"):
(use it only for dev and tracking needs).
"""
# checking bearer validity
token = checker.check_bearer_validity(token, self.connect(self.app_id, self.ct))
token = checker.check_bearer_validity(token,
self.connect(self.app_id,
self.ct))

# passing auth parameter
head = {"Authorization": "Bearer " + token[0],
Expand All @@ -484,7 +480,8 @@ def shares(self, token, prot="https"):
self.base_url)
shares_req = requests.get(shares_url,
headers=head,
proxies=self.proxies)
proxies=self.proxies,
verify=self.ssl)

# checking response
checker.check_api_response(shares_req)
Expand All @@ -511,7 +508,8 @@ def share(self, token, share_id, prot="https"):
share_id)
share_req = requests.get(share_url,
headers=head,
proxies=self.proxies)
proxies=self.proxies,
verify=self.ssl)

# checking response
checker.check_api_response(share_req)
Expand Down Expand Up @@ -546,7 +544,8 @@ def licenses(self, token, owner_id, prot="https"):
licenses_req = requests.get(licenses_url,
headers=head,
params=payload,
proxies=self.proxies)
proxies=self.proxies,
verify=self.ssl)

# checking response
req_check = checker.check_api_response(licenses_req)
Expand Down Expand Up @@ -582,7 +581,8 @@ def license(self, token, license_id, prot="https"):
license_req = requests.get(license_url,
headers=head,
params=payload,
proxies=self.proxies)
proxies=self.proxies,
verify=self.ssl)

# checking response
checker.check_api_response(license_req)
Expand Down Expand Up @@ -611,7 +611,8 @@ def thesauri(self, token, prot="https"):
self.base_url)
thez_req = requests.get(thez_url,
headers=head,
proxies=self.proxies)
proxies=self.proxies,
verify=self.ssl)

# checking response
checker.check_api_response(thez_req)
Expand Down Expand Up @@ -643,7 +644,8 @@ def thesaurus(self, token, thez_id="1616597fbc4348c8b11ef9d59cf594c8", prot="htt
thez_req = requests.get(thez_url,
headers=head,
params=payload,
proxies=self.proxies)
proxies=self.proxies,
verify=self.ssl)

# checking response
checker.check_api_response(thez_req)
Expand Down Expand Up @@ -735,7 +737,8 @@ def keywords(self,
kwds_req = requests.get(keywords_url,
headers=head,
params=payload,
proxies=self.proxies)
proxies=self.proxies,
verify=self.ssl)

# checking response
checker.check_api_response(kwds_req)
Expand Down Expand Up @@ -795,8 +798,8 @@ def dl_hosted(self, token, id_resource, resource_link,
headers=head,
stream=True,
params=payload,
proxies=self.proxies
)
proxies=self.proxies,
verify=self.ssl)

# get filename from header
content_disposition = hosted_req.headers.get("Content-Disposition")
Expand Down Expand Up @@ -848,8 +851,8 @@ def xml19139(self, token, id_resource, proxy_url=None, prot="https"):
headers=head,
stream=True,
params=payload,
proxies=self.proxies
)
proxies=self.proxies,
verify=self.ssl)

# end of method
return xml_req
Expand Down Expand Up @@ -947,11 +950,12 @@ def get_app_properties(self, token, prot="https"):
client_secret=share_token,
auth_mode="group",
lang="fr",
# platform="qa"
platform="qa"
)

# getting a token
token = isogeo.connect()
print(token)

# let's search for metadatas!
search = isogeo.search(token,
Expand Down
6 changes: 4 additions & 2 deletions isogeo_pysdk/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def __init__(self, proxies=dict()):
:param dict proxies: dictionary of proxy settings as described in
requests. See: http://docs.python-requests.org/en/master/user/advanced/#proxies
"""
self.platform, self.base_url = self.set_base_url()
self.platform, self.base_url, self.ssl = self.set_base_url()
self.proxies = proxies
super(IsogeoUtils, self).__init__()

Expand Down Expand Up @@ -164,17 +164,19 @@ def set_base_url(self, platform="prod"):
self.platform = platform
if platform == "prod":
base_url = self.API_URLS.get(platform)
ssl = True
logging.debug("Using production platform.")
elif platform == "qa":
base_url = self.API_URLS.get(platform)
ssl = False
logging.debug("Using Quality Assurance platform (reduced perfs).")
else:
logging.error("Platform must be one of: {}"
.format(" | ".join(self.API_URLS.keys())))
raise ValueError(3, "Platform must be one of: {}"
.format(" | ".join(self.API_URLS.keys())))
# method ending
return platform.lower(), base_url
return platform.lower(), base_url, ssl

# -- URLs builders -------------------------------------------------------
def get_edit_url(self, md_id=str, md_type=str, owner_id=str, tab="identification"):
Expand Down
13 changes: 12 additions & 1 deletion tests/test_authentication.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ def test_bad_proxy(self):
proxy="this_is_my_string_proxy",
)

def test_successed_auth(self):
def test_successed_auth_prod(self):
"""When a search works, check the response structure."""
isogeo = Isogeo(client_id=app_id,
client_secret=app_token)
Expand All @@ -116,6 +116,17 @@ def test_successed_auth(self):
self.assertIsInstance(bearer[0], string_types)
self.assertIsInstance(bearer[1], int)

def test_successed_auth_qa(self):
"""Try to connect to QA platform."""
isogeo = Isogeo(client_id=app_id,
client_secret=app_token,
platform="qa"
)
bearer = isogeo.connect()
self.assertIsInstance(bearer, tuple)
self.assertEqual(len(bearer), 2)
self.assertIsInstance(bearer[0], string_types)
self.assertIsInstance(bearer[1], int)

# #############################################################################
# ######## Standalone ##############
Expand Down
14 changes: 9 additions & 5 deletions tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ def test_get_isogeo_version_api(self):
version_api_prod = self.utils.get_isogeo_version(component="api")
version_api_naive_prod = self.utils.get_isogeo_version()
# qa
platform, base_url = self.utils.set_base_url(platform="qa")
platform, base_url, ssl = self.utils.set_base_url(platform="qa")
version_api_qa = self.utils.get_isogeo_version(component="api")
version_api_naive_qa = self.utils.get_isogeo_version()
# check
Expand All @@ -74,7 +74,7 @@ def test_get_isogeo_version_app(self):
# prod
version_app_prod = self.utils.get_isogeo_version(component="app")
# qa
platform, base_url = self.utils.set_base_url(platform="qa")
platform, base_url, ssl = self.utils.set_base_url(platform="qa")
version_app_qa = self.utils.get_isogeo_version(component="app")
# check
self.assertIsInstance(version_app_prod, str)
Expand All @@ -85,7 +85,7 @@ def test_get_isogeo_version_db(self):
# prod
version_db_prod = self.utils.get_isogeo_version(component="db")
# qa
platform, base_url = self.utils.set_base_url(platform="qa")
platform, base_url, ssl = self.utils.set_base_url(platform="qa")
version_db_qa = self.utils.get_isogeo_version(component="db")
# check
self.assertIsInstance(version_db_prod, str)
Expand All @@ -100,17 +100,21 @@ def test_get_isogeo_version_bad_parameter(self):
def test_set_base_url(self):
"""Set base URLs"""
# by default platform = prod
platform, base_url = self.utils.set_base_url()
platform, base_url, ssl = self.utils.set_base_url()
self.assertIsInstance(platform, str)
self.assertIsInstance(base_url, str)
self.assertIsInstance(ssl, bool)
self.assertEqual(platform, "prod")
self.assertEqual(base_url, self.utils.API_URLS.get("prod"))
self.assertEqual(ssl, True)
# qa
platform, base_url = self.utils.set_base_url(platform="qa")
platform, base_url, ssl = self.utils.set_base_url(platform="qa")
self.assertIsInstance(platform, str)
self.assertIsInstance(base_url, str)
self.assertIsInstance(ssl, bool)
self.assertEqual(platform, "qa")
self.assertEqual(base_url, self.utils.API_URLS.get("qa"))
self.assertEqual(ssl, False)

def test_set_base_url_bad_parameter(self):
"""Raise error if platform parameter is bad."""
Expand Down

0 comments on commit 6de3744

Please sign in to comment.