Skip to content

Commit 4d8ac88

Browse files
committed
Update code.
1 parent bafea19 commit 4d8ac88

File tree

1 file changed

+28
-12
lines changed

1 file changed

+28
-12
lines changed

xdmod_data/_http_requester.py

+28-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
from dotenv import load_dotenv
12
import json
23
import os
4+
from pathlib import Path
35
import re
46
import requests
57
from urllib.parse import urlencode
@@ -13,14 +15,10 @@ def __init__(self, xdmod_host):
1315
_validator._assert_str('xdmod_host', xdmod_host)
1416
xdmod_host = re.sub('/+$', '', xdmod_host)
1517
self.__xdmod_host = xdmod_host
16-
try:
18+
self.__api_token = None
19+
if 'XDMOD_API_TOKEN' in os.environ:
1720
self.__api_token = os.environ['XDMOD_API_TOKEN']
18-
except KeyError:
19-
raise KeyError(
20-
'`XDMOD_API_TOKEN` environment variable has not been set.',
21-
) from None
2221
self.__headers = {
23-
'Authorization': 'Bearer ' + self.__api_token,
2422
'User-Agent': __title__ + ' Python v' + __version__,
2523
}
2624
self.__requests_session = None
@@ -124,17 +122,35 @@ def __assert_connection_to_xdmod_host(self):
124122
def __request(self, path='', post_fields=None, stream=False):
125123
_validator._assert_runtime_context(self.__in_runtime_context)
126124
url = self.__xdmod_host + path
125+
token_error_msg = (
126+
'If running in JupyterHub connected with XDMoD, there is likely an'
127+
+ ' error with the JupyterHub. Otherwise, the '
128+
+ ' `XDMOD_API_TOKEN` environment variable should be set'
129+
+ ' to a valid API token obtained from the XDMoD web portal.',
130+
)
131+
if self.__api_token is not None:
132+
token = self.__api_token
133+
else:
134+
try:
135+
load_dotenv(Path(os.path.expanduser('~/.xdmod-jwt.env')))
136+
token = os.environ['XDMOD_JWT']
137+
# TODO: add test for file not existing.
138+
except KeyError:
139+
raise KeyError(token_error_msg) from None
140+
headers = {
141+
**self.__headers,
142+
**{
143+
'Authorization': 'Bearer ' + token,
144+
}
145+
}
127146
if post_fields:
128-
post_fields['Bearer'] = self.__api_token
129147
response = self.__requests_session.post(
130148
url,
131-
headers=self.__headers,
149+
headers=headers,
132150
data=post_fields,
133151
)
134152
else:
135-
url += '&' if '?' in url else '?'
136-
url += 'Bearer=' + self.__api_token
137-
response = self.__requests_session.get(url, headers=self.__headers)
153+
response = self.__requests_session.get(url, headers=headers)
138154
if response.status_code != 200:
139155
msg = ''
140156
try:
@@ -144,7 +160,7 @@ def __request(self, path='', post_fields=None, stream=False):
144160
pass
145161
if response.status_code == 401:
146162
msg = (
147-
': Make sure XDMOD_API_TOKEN is set to a valid API token.'
163+
': ' + token_error_msg
148164
)
149165
raise RuntimeError(
150166
'Error ' + str(response.status_code) + msg,

0 commit comments

Comments
 (0)