Closed j08lue closed 7 years ago
usgs version 0.2.0 on Windows 10, Miniconda, Python 3 throws a TypeError when username and/or password are incorrect:
usgs
0.2.0
TypeError
import usgs.api api_key = usgs.api.login('hello', 'abc')
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-2-e66707556ded> in <module>() ----> 1 api_key = usgs.api.login('hello', 'abc') ~\AppData\Local\Continuum\Miniconda3\envs\usgs\lib\site-packages\usgs\api.py in login(username, password, save) 188 if save: 189 with open(TMPFILE, "w") as f: --> 190 f.write(api_key) 191 192 return response TypeError: write() argument must be str, not None
Seems like the server responds 200 despite the wrong credentials and returns a valid json response, just with None in data:
200
None
data
import usgs.api import usgs.payloads import requests username = 'abc' password = 'hello' url = r'https://earthexplorer.usgs.gov/inventory/json/login' payload = { "jsonRequest": usgs.payloads.login(username, password) } r = requests.post(url, payload) response = r.json()
where response becomes:
response
{'access_level': 'guest', 'api_version': '1.3.0', 'data': None, 'error': 'Invalid Login', 'errorCode': 'AUTH_INVALID', 'executionTime': 0.19619297981262}
Will you change the code to analyze the response or do you want me to submit a PR? I suggest checking whether data is None and, if the case, raising an USGSError with the error field of the response.
data is None
USGSError
error
@j08lue thanks again for catching this and the PR. I've release 0.2.1 to pypi, feel free to use that: https://pypi.python.org/pypi/usgs/0.2.1
usgs
version0.2.0
on Windows 10, Miniconda, Python 3 throws aTypeError
when username and/or password are incorrect:Seems like the server responds
200
despite the wrong credentials and returns a valid json response, just withNone
indata
:where
response
becomes:Will you change the code to analyze the response or do you want me to submit a PR? I suggest checking whether
data is None
and, if the case, raising anUSGSError
with theerror
field of theresponse
.