def login(username, password, save=True): """ Log in, creating a temporary API key and optionally storing it for later use. :param str username: Username of the USGS account to log in with. :param str password: Password of the USGS account to log in with. :param bool save: If true, the API key will be stored in a local file (~/.usgs) until `api.logout` is called to remove it. The stored key will be used by other functions to authenticate requests whenever an API key is not explicitly provided. """ url = '{}/login'.format(USGS_API) payload = payloads.login(username, password) session = _create_session(api_key=None) created = datetime.now().isoformat() r = session.post(url, payload) response = r.json() _check_for_usgs_error(response) api_key = response["data"] if api_key is None: raise USGSError(response.get("errorMessage", "Authentication failed")) if save: with open(TMPFILE, "w") as f: json.dump({"apiKey": api_key, "created": created}, f) return response
def _check_for_usgs_error(data): error_code = data['errorCode'] if error_code is None: return error = data['error'] raise USGSError('%s: %s' % (error_code, error))
def login(username, password, save=True): url = '{}/login'.format(USGS_API) payload = {"jsonRequest": payloads.login(username, password)} r = requests.post(url, payload) if r.status_code is not 200: raise USGSError(r.text) response = r.json() api_key = response["data"] if api_key is None: raise USGSError(response["error"]) if save: with open(TMPFILE, "w") as f: f.write(api_key) return response
def login(username, password, save=True): url = '{}/login'.format(USGS_API) payload = payloads.login(username, password) session = _create_session(api_key=None) created = datetime.now().isoformat() r = session.post(url, payload) if r.status_code != 200: raise USGSError(r.text) response = r.json() api_key = response["data"] if api_key is None: raise USGSError(response.get("errorMessage", "Authentication failed")) if save: with open(TMPFILE, "w") as f: json.dump({"apiKey": api_key, "created": created}, f) return response
def _check_for_usgs_error(data): error_code = data['errorCode'] if error_code is None: return error = data['errorMessage'] if error_code == 'AUTH_EXPIRED': raise USGSAuthExpiredError( "API key has expired. Try logging out and logging back in.") raise USGSError('%s: %s' % (error_code, error))
def _check_for_usgs_error(root): fault_code_el = root.find("SOAP-ENV:Body/SOAP-ENV:Fault/faultcode", NAMESPACES) if fault_code_el is None: return fault_string_el = root.find("SOAP-ENV:Body/SOAP-ENV:Fault/faultstring", NAMESPACES) fault_code = fault_code_el.text fault_string = fault_string_el.text raise USGSError('%s: %s' % (fault_code, fault_string))
def login(username, password, save=True): xml = soap.login(username, password) r = requests.post(USGS_API, xml) if r.status_code is not 200: raise USGSError(r.text) root = ElementTree.fromstring(r.text) _check_for_usgs_error(root) element = root.find("SOAP-ENV:Body/ns1:loginResponse/return", NAMESPACES) api_key = element.text if save: with open(TMPFILE, "w") as f: f.write(api_key) return api_key