示例#1
0
文件: api.py 项目: kapadia/usgs
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
示例#2
0
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))
示例#3
0
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
示例#4
0
文件: api.py 项目: EOFarm/usgs
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
示例#5
0
文件: api.py 项目: kapadia/usgs
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))
示例#6
0
文件: api.py 项目: danlopez00/usgs
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))
示例#7
0
文件: api.py 项目: danlopez00/usgs
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