예제 #1
0
    def __init__(self, url, dest_dir=None):
        self._request = None
        # make connection
        self._request = requests.get(
            url,
            stream=True,
            headers={"User-Agent": app.get_user_agent()},
            verify=sys.version_info >= (2, 7, 9),
        )
        if self._request.status_code != 200:
            raise FDUnrecognizedStatusCode(self._request.status_code, url)

        disposition = self._request.headers.get("content-disposition")
        if disposition and "filename=" in disposition:
            self._fname = (
                disposition[disposition.index("filename=") + 9 :]
                .replace('"', "")
                .replace("'", "")
            )
        else:
            self._fname = [p for p in url.split("/") if p][-1]
        self._fname = str(self._fname)
        self._destination = self._fname
        if dest_dir:
            self.set_destination(join(dest_dir, self._fname))
예제 #2
0
def get_pypi_latest_version():
    r = requests.get(
        "https://pypi.org/pypi/platformio/json",
        headers={"User-Agent": app.get_user_agent()},
    )
    r.raise_for_status()
    return r.json()["info"]["version"]
예제 #3
0
 def __next__(self):
     base_url = next(self.endpoints_iter)
     session = EndpointSession(base_url)
     session.headers.update({"User-Agent": app.get_user_agent()})
     adapter = requests.adapters.HTTPAdapter(max_retries=self.retry)
     session.mount(base_url, adapter)
     return session
예제 #4
0
def fetch_remote_content(*args, **kwargs):
    kwargs["headers"] = kwargs.get("headers", {})
    if "User-Agent" not in kwargs["headers"]:
        kwargs["headers"]["User-Agent"] = app.get_user_agent()

    if "timeout" not in kwargs:
        kwargs["timeout"] = __default_requests_timeout__

    r = requests.get(*args, **kwargs)
    r.raise_for_status()
    return r.text
예제 #5
0
 def load_manifest(url):
     r = None
     try:
         r = requests.get(url, headers={"User-Agent": app.get_user_agent()})
         r.raise_for_status()
         return r.json()
     except:  # pylint: disable=bare-except
         pass
     finally:
         if r:
             r.close()
     return None
예제 #6
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
예제 #7
0
 def __init__(
     self, api_base_url=__pioaccount_api__, retries=3,
 ):
     if api_base_url.endswith("/"):
         api_base_url = api_base_url[:-1]
     self.api_base_url = api_base_url
     self._session = requests.Session()
     self._session.headers.update({"User-Agent": app.get_user_agent()})
     retry = Retry(
         total=retries,
         read=retries,
         connect=retries,
         backoff_factor=2,
         method_whitelist=list(Retry.DEFAULT_METHOD_WHITELIST) + ["POST"],
     )
     adapter = requests.adapters.HTTPAdapter(max_retries=retry)
     self._session.mount(api_base_url, adapter)
예제 #8
0
 def _send_data(self, data):
     if self._http_offline:
         return False
     try:
         r = self._http_session.post(
             "https://ssl.google-analytics.com/collect",
             data=data,
             headers={"User-Agent": app.get_user_agent()},
             timeout=1,
         )
         r.raise_for_status()
         return True
     except requests.exceptions.HTTPError as e:
         # skip Bad Request
         if 400 >= e.response.status_code < 500:
             return True
     except:  # pylint: disable=W0702
         pass
     self._http_offline = True
     return False
예제 #9
0
def get_develop_latest_version():
    version = None
    r = requests.get(
        "https://raw.githubusercontent.com/platformio/platformio"
        "/develop/platformio/__init__.py",
        headers={"User-Agent": app.get_user_agent()},
    )
    r.raise_for_status()
    for line in r.text.split("\n"):
        line = line.strip()
        if not line.startswith("VERSION"):
            continue
        match = re.match(r"VERSION\s*=\s*\(([^\)]+)\)", line)
        if not match:
            continue
        version = match.group(1)
        for c in (" ", "'", '"'):
            version = version.replace(c, "")
        version = ".".join(version.split(","))
    assert version
    return version
예제 #10
0
    def __init__(self, url, dest_dir=None):
        self._request = None
        # make connection
        self._request = requests.get(
            url,
            stream=True,
            headers={"User-Agent": app.get_user_agent()},
            timeout=__default_requests_timeout__,
        )
        if self._request.status_code != 200:
            raise PackageException(
                "Got the unrecognized status code '{0}' when downloaded {1}".
                format(self._request.status_code, url))

        disposition = self._request.headers.get("content-disposition")
        if disposition and "filename=" in disposition:
            self._fname = (disposition[disposition.index("filename=") +
                                       9:].replace('"', "").replace("'", ""))
        else:
            self._fname = [p for p in url.split("/") if p][-1]
        self._fname = str(self._fname)
        self._destination = self._fname
        if dest_dir:
            self.set_destination(join(dest_dir, self._fname))
예제 #11
0
 def _prefill_appinfo(self):
     self["av"] = __version__
     self["an"] = app.get_user_agent()