Skip to content

Commit

Permalink
Removed code in Ndex2 constructor that changes hostname if localhost …
Browse files Browse the repository at this point in the history
…is in the value passed in by the user. Fix for issue #69. Bumped version to 4.0.0.a1
  • Loading branch information
coleslaw481 committed Feb 12, 2020
1 parent 099a7a4 commit d9d76f2
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 78 deletions.
67 changes: 32 additions & 35 deletions ndex2/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,49 +86,46 @@ def __init__(self, host=None, username=None, password=None,
elif 'http' not in host:
host = 'http://' + host

if "localhost" in host:
self.host = "http://localhost:8080/ndexbio-rest"
else:
status_url = "/rest/admin/status"
status_url = "/rest/admin/status"

try:
version_url = urljoin(host, status_url)

response = requests.get(version_url,
headers={Ndex2.USER_AGENT_KEY:
userAgent + self.user_agent})
response.raise_for_status()
data = response.json()

prop = data.get('properties')
if prop is not None:
pv = prop.get('ServerVersion')
if pv is not None:
if not pv.startswith('2.'):
raise Exception("This release only supports NDEx 2.x server.")
else:
self.version = pv
self.host = host + "/v2"
try:
version_url = urljoin(host, status_url)

response = requests.get(version_url,
headers={Ndex2.USER_AGENT_KEY:
userAgent + self.user_agent})
response.raise_for_status()
data = response.json()

prop = data.get('properties')
if prop is not None:
pv = prop.get('ServerVersion')
if pv is not None:
if not pv.startswith('2.'):
raise Exception("This release only supports NDEx 2.x server.")
else:
self.logger.warning("Warning: This release doesn't fully "
"support 1.3 version of NDEx")
self.version = "1.3"
self.host = host + "/rest"
self.version = pv
self.host = host + "/v2"
else:
self.logger.warning("Warning: No properties found. "
"This release doesn't fully "
self.logger.warning("Warning: This release doesn't fully "
"support 1.3 version of NDEx")
self.version = "1.3"
self.host = host + "/rest"

except req_except.HTTPError as he:
self.logger.warning("Can't determine server version. " + host +
' Server returned error -- ' + str(he) +
' will assume 1.3 version of NDEx which' +
' is not fully supported by this release')
else:
self.logger.warning("Warning: No properties found. "
"This release doesn't fully "
"support 1.3 version of NDEx")
self.version = "1.3"
self.host = host + "/rest"
# TODO - how to handle errors getting server version...

except req_except.HTTPError as he:
self.logger.warning("Can't determine server version. " + host +
' Server returned error -- ' + str(he) +
' will assume 1.3 version of NDEx which' +
' is not fully supported by this release')
self.version = "1.3"
self.host = host + "/rest"
# TODO - how to handle errors getting server version...

# create a session for this Ndex
self.s = requests.session()
Expand Down
2 changes: 1 addition & 1 deletion ndex2/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '3.3.1'
__version__ = '4.0.0.a1'
100 changes: 58 additions & 42 deletions tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,11 @@ def get_rest_admin_status_dict(self, version='2.1'):
def get_rest_admin_v1_empty_dict(self):
return {}

def get_rest_admin_status_url(self):
return client.DEFAULT_SERVER + '/rest/admin/status'
def get_rest_admin_status_url(self, altserver=None):
urlprefix = client.DEFAULT_SERVER
if altserver is not None:
urlprefix = altserver
return urlprefix + '/rest/admin/status'

def setUp(self):
"""Set up test fixtures, if any."""
Expand Down Expand Up @@ -81,33 +84,39 @@ def test_ndex2_constructor_with_localhost(self):
# this is invasive, but there isn't really a good way
# to test the constructor
# try with nothing set
ndex = Ndex2(host='localhost')
self.assertEqual(ndex.debug, False)
self.assertEqual(ndex.version, 1.3)
self.assertEqual(ndex.status, {})
self.assertEqual(ndex.username, None)
self.assertEqual(ndex.password, None)
self.assertEqual(ndex.user_agent, '')
self.assertEqual(ndex.host, 'http://localhost:8080/ndexbio-rest')
self.assertTrue(ndex.s is not None)
self.assertTrue(ndex.timeout, 30)
ndex.set_request_timeout(10)
self.assertTrue(ndex.timeout, 30)
with requests_mock.mock() as m:
m.get(self.get_rest_admin_status_url(altserver='http://localhost'),
json=self.get_rest_admin_status_dict())
ndex = Ndex2(host='localhost')
self.assertEqual(ndex.debug, False)
self.assertEqual(ndex.version, '2.1')
self.assertEqual(ndex.status, {})
self.assertEqual(ndex.username, None)
self.assertEqual(ndex.password, None)
self.assertEqual(ndex.user_agent, '')
self.assertEqual(ndex.host, 'http://localhost/v2')
self.assertTrue(ndex.s is not None)
self.assertTrue(ndex.timeout, 30)
ndex.set_request_timeout(10)
self.assertTrue(ndex.timeout, 30)

# try with user, pass and user_agent set oh and host
# with extra text prepended to localhost
ndex = Ndex2(host='xxxlocalhost', username='bob',
password='smith', user_agent='yo', debug=True,
timeout=1)
self.assertEqual(ndex.debug, True)
self.assertEqual(ndex.version, 1.3)
self.assertEqual(ndex.status, {})
self.assertEqual(ndex.username, 'bob')
self.assertEqual(ndex.password, 'smith')
self.assertEqual(ndex.user_agent, ' yo')
self.assertEqual(ndex.host, 'http://localhost:8080/ndexbio-rest')
self.assertTrue(ndex.s is not None)
self.assertTrue(ndex.timeout, 1)
with requests_mock.mock() as m:
m.get(self.get_rest_admin_status_url(altserver='http://xxxlocalhost'),
json=self.get_rest_admin_status_dict())
ndex = Ndex2(host='xxxlocalhost', username='bob',
password='smith', user_agent='yo', debug=True,
timeout=1)
self.assertEqual(ndex.debug, True)
self.assertEqual(ndex.version, '2.1')
self.assertEqual(ndex.status, {})
self.assertEqual(ndex.username, 'bob')
self.assertEqual(ndex.password, 'smith')
self.assertEqual(ndex.user_agent, ' yo')
self.assertEqual(ndex.host, 'http://xxxlocalhost/v2')
self.assertTrue(ndex.s is not None)
self.assertTrue(ndex.timeout, 1)

# try with user_agent set to None Issue #34
with requests_mock.mock() as m:
Expand Down Expand Up @@ -198,24 +207,31 @@ def test_ndex2_constructor_with_defaulthost_thatisversiontwo(self):
self.assertTrue(ndex.s is not None)

def test_ndex2_require_auth(self):
ndex = Ndex2(host='localhost')
try:
ndex._require_auth()
self.fail('Expected exception')
except Exception as e:
self.assertEqual(str(e),
'This method requires user authentication')
with requests_mock.mock() as m:
m.get(self.get_rest_admin_status_url(altserver='http://localhost'),
json=self.get_rest_admin_status_dict())
ndex = Ndex2(host='localhost')
try:
ndex._require_auth()
self.fail('Expected exception')
except Exception as e:
self.assertEqual(str(e),
'This method requires '
'user authentication')

def test_ndex2_get_user_agent(self):
ndex = Ndex2(host='localhost')
# try with default
res = ndex._get_user_agent()
self.assertEqual(res, 'NDEx2-Python/' + __version__)

ndex = Ndex2(host='localhost', user_agent='hi')
# try with user_agent set
res = ndex._get_user_agent()
self.assertEqual(res, 'NDEx2-Python/' + __version__ + ' hi')
with requests_mock.mock() as m:
m.get(self.get_rest_admin_status_url(altserver='http://localhost'),
json=self.get_rest_admin_status_dict())
ndex = Ndex2(host='localhost')
# try with default
res = ndex._get_user_agent()
self.assertEqual(res, 'NDEx2-Python/' + __version__)

ndex = Ndex2(host='localhost', user_agent='hi')
# try with user_agent set
res = ndex._get_user_agent()
self.assertEqual(res, 'NDEx2-Python/' + __version__ + ' hi')

def test_ndex2_put_no_json_empty_resp_code_204(self):
with requests_mock.mock() as m:
Expand Down

0 comments on commit d9d76f2

Please sign in to comment.