Exemplo n.º 1
0
def get_api_result(path, params=None, data=None):
    import requests
    result = None
    r = None

    try:
        if data:
            r = requests.post(__apiurl__ + path, params=params, data=data,
                              headers=get_request_defheaders())
        else:
            r = requests.get(__apiurl__ + path, params=params,
                             headers=get_request_defheaders())
        result = r.json()
        r.raise_for_status()
    except requests.exceptions.HTTPError as e:
        if result and "errors" in result:
            raise exception.APIRequestError(result['errors'][0]['title'])
        else:
            raise exception.APIRequestError(e)
    except requests.exceptions.ConnectionError:
        raise exception.APIRequestError(
            "Could not connect to PlatformIO Registry Service. "
            "Please try later.")
    except ValueError:
        raise exception.APIRequestError(
            "Invalid response: %s" % r.text.encode("utf-8"))
    finally:
        if r:
            r.close()
    return result
Exemplo n.º 2
0
def get_api_result(path, params=None, data=None):
    result = None
    r = None

    try:
        headers = {
            "User-Agent":
            "PlatformIO/%s %s" %
            (__version__, requests.utils.default_user_agent())
        }

        if data:
            r = requests.post(__apiurl__ + path,
                              params=params,
                              data=data,
                              headers=headers)
        else:
            r = requests.get(__apiurl__ + path, params=params, headers=headers)
        result = r.json()
        r.raise_for_status()
    except requests.exceptions.HTTPError as e:
        if result and "errors" in result:
            raise exception.APIRequestError(result['errors'][0]['title'])
        else:
            raise exception.APIRequestError(e)
    except requests.exceptions.ConnectionError:
        raise exception.APIRequestError(
            "Could not connect to PlatformIO Registry Service")
    except ValueError:
        raise exception.APIRequestError("Invalid response: %s" %
                                        r.text.encode("utf-8"))
    finally:
        if r:
            r.close()
    return result
Exemplo n.º 3
0
def _get_api_result(
        url,
        params=None,
        data=None,
        auth=None  # pylint: disable=too-many-branches
):
    # pylint: disable=import-outside-toplevel
    from platformio.app import get_user_agent, get_setting

    result = {}
    r = None
    verify_ssl = sys.version_info >= (2, 7, 9)

    if not url.startswith("http"):
        url = __apiurl__ + url
        if not get_setting("strict_ssl"):
            url = url.replace("https://", "http://")

    headers = {"User-Agent": get_user_agent()}
    try:
        if data:
            r = _api_request_session().post(
                url,
                params=params,
                data=data,
                headers=headers,
                auth=auth,
                verify=verify_ssl,
            )
        else:
            r = _api_request_session().get(url,
                                           params=params,
                                           headers=headers,
                                           auth=auth,
                                           verify=verify_ssl)
        result = r.json()
        r.raise_for_status()
        return r.text
    except requests.exceptions.HTTPError as e:
        if result and "message" in result:
            raise exception.APIRequestError(result["message"])
        if result and "errors" in result:
            raise exception.APIRequestError(result["errors"][0]["title"])
        raise exception.APIRequestError(e)
    except ValueError:
        raise exception.APIRequestError("Invalid response: %s" %
                                        r.text.encode("utf-8"))
    finally:
        if r:
            r.close()
    return None
Exemplo n.º 4
0
def _get_api_result(
        url,  # pylint: disable=too-many-branches
        params=None,
        data=None,
        auth=None):
    from platformio.app import get_setting

    result = None
    r = None
    verify_ssl = sys.version_info >= (2, 7, 9)

    headers = get_request_defheaders()
    if not url.startswith("http"):
        url = __apiurl__ + url
        if not get_setting("enable_ssl"):
            url = url.replace("https://", "http://")

    try:
        if data:
            r = _api_request_session().post(
                url,
                params=params,
                data=data,
                headers=headers,
                auth=auth,
                verify=verify_ssl)
        else:
            r = _api_request_session().get(
                url,
                params=params,
                headers=headers,
                auth=auth,
                verify=verify_ssl)
        result = r.json()
        r.raise_for_status()
        return r.text
    except requests.exceptions.HTTPError as e:
        if result and "message" in result:
            raise exception.APIRequestError(result['message'])
        elif result and "errors" in result:
            raise exception.APIRequestError(result['errors'][0]['title'])
        else:
            raise exception.APIRequestError(e)
    except ValueError:
        raise exception.APIRequestError(
            "Invalid response: %s" % r.text.encode("utf-8"))
    finally:
        if r:
            r.close()
    return None
Exemplo n.º 5
0
def get_api_result(url, params=None, data=None, auth=None, cache_valid=None):
    from platformio.app import ContentCache
    total = 0
    max_retries = 5
    cache_key = (ContentCache.key_from_args(url, params, data, auth)
                 if cache_valid else None)
    while total < max_retries:
        try:
            with ContentCache() as cc:
                if cache_key:
                    result = cc.get(cache_key)
                    if result is not None:
                        return json.loads(result)

            # check internet before and resolve issue with 60 seconds timeout
            internet_on(raise_exception=True)

            result = _get_api_result(url, params, data)
            if cache_valid:
                with ContentCache() as cc:
                    cc.set(cache_key, result, cache_valid)
            return json.loads(result)
        except (requests.exceptions.ConnectionError,
                requests.exceptions.Timeout) as e:
            total += 1
            if not PlatformioCLI.in_silence():
                click.secho(
                    "[API] ConnectionError: {0} (incremented retry: max={1}, "
                    "total={2})".format(e, max_retries, total),
                    fg="yellow")
            time.sleep(2 * total)

    raise exception.APIRequestError(
        "Could not connect to PlatformIO API Service. "
        "Please try later.")
Exemplo n.º 6
0
def get_api_result(url, params=None, data=None, auth=None, cache_valid=None):
    from platformio.app import ContentCache
    total = 0
    max_retries = 5
    cache_key = (ContentCache.key_from_args(url, params, data, auth)
                 if cache_valid else None)
    while total < max_retries:
        try:
            with ContentCache() as cc:
                if cache_key:
                    result = cc.get(cache_key)
                    if result is not None:
                        return result
            result = _get_api_result(url, params, data)
            if cache_valid:
                with ContentCache() as cc:
                    cc.set(cache_key, result, cache_valid)
            return result
        except (requests.exceptions.ConnectionError,
                requests.exceptions.Timeout) as e:
            if not internet_on():
                raise exception.InternetIsOffline()
            from platformio.maintenance import in_silence
            total += 1
            if not in_silence():
                click.secho(
                    "[API] ConnectionError: {0} (incremented retry: max={1}, "
                    "total={2})".format(e, max_retries, total),
                    fg="yellow")
            sleep(2 * total)

    raise exception.APIRequestError(
        "Could not connect to PlatformIO API Service. "
        "Please try later.")
Exemplo n.º 7
0
def get_api_result(path, params=None, data=None, skipdns=False):
    import requests
    result = None
    r = None

    headers = get_request_defheaders()
    url = __apiurl__
    if skipdns:
        url = "http://%s" % __apiip__
        headers['host'] = __apiurl__[__apiurl__.index("://") + 3:]

    try:
        if data:
            r = requests.post(url + path,
                              params=params,
                              data=data,
                              headers=headers,
                              timeout=(5, 13))
        else:
            r = requests.get(url + path,
                             params=params,
                             headers=headers,
                             timeout=(5, 13))
        result = r.json()
        r.raise_for_status()
    except requests.exceptions.HTTPError as e:
        if result and "errors" in result:
            raise exception.APIRequestError(result['errors'][0]['title'])
        else:
            raise exception.APIRequestError(e)
    except (requests.exceptions.ConnectionError,
            requests.exceptions.ConnectTimeout):
        if not skipdns:
            return get_api_result(path, params, data, skipdns=True)
        raise exception.APIRequestError(
            "Could not connect to PlatformIO Registry Service. "
            "Please try later.")
    except ValueError:
        raise exception.APIRequestError("Invalid response: %s" %
                                        r.text.encode("utf-8"))
    finally:
        if r:
            r.close()
    return result
Exemplo n.º 8
0
def _get_api_result(
        path,  # pylint: disable=too-many-branches
        params=None,
        data=None):
    from platformio.app import get_setting

    result = None
    r = None

    headers = get_request_defheaders()
    url = __apiurl__

    if not get_setting("enable_ssl"):
        url = url.replace("https://", "http://")

    try:
        if data:
            r = _api_request_session().post(url + path,
                                            params=params,
                                            data=data,
                                            headers=headers)
        else:
            r = _api_request_session().get(url + path,
                                           params=params,
                                           headers=headers)
        result = r.json()
        r.raise_for_status()
    except requests.exceptions.HTTPError as e:
        if result and "errors" in result:
            raise exception.APIRequestError(result['errors'][0]['title'])
        else:
            raise exception.APIRequestError(e)
    except ValueError:
        raise exception.APIRequestError("Invalid response: %s" %
                                        r.text.encode("utf-8"))
    finally:
        if r:
            r.close()
    return result
Exemplo n.º 9
0
def get_api_result(path, params=None, data=None):
    max_retries = 5
    total = 0
    while total < max_retries:
        try:
            return _get_api_result(path, params, data)
        except (requests.exceptions.ConnectionError,
                requests.exceptions.Timeout) as e:
            total += 1
            click.secho(
                "[API] ConnectionError: {0} (incremented retry: max={1}, "
                "total={2})".format(e, max_retries, total),
                fg="yellow")
            sleep(2 * total)

    raise exception.APIRequestError(
        "Could not connect to PlatformIO Registry Service. "
        "Please try later.")