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
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
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
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
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.")
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.")
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
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
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.")