Beispiel #1
0
    def _validate_response(self, response):
        """ Ensures response from IEX server is valid.

        Parameters
        ----------
        response: requests.response
            A requests.response object

        Returns
        -------
        response: Parsed JSON
            A json-formatted response

        Raises
        ------
        ValueError
            If a single Share symbol is invalid
        IEXQueryError
            If the JSON response is empty or throws an error

        """
        if response.text == "Unknown symbol":
            raise IEXQueryError()
        try:
            json_response = response.json(parse_int=self.json_parse_int,
                                          parse_float=self.json_parse_float)
            if "Error Message" in json_response:
                raise IEXQueryError()
        except ValueError:
            raise IEXQueryError()
        return json_response
Beispiel #2
0
    def _execute_iex_query(self, url):
        """ Executes HTTP Request
        Given a URL, execute HTTP request from IEX server. If request is
        unsuccessful, attempt is made self.retry_count times with pause of
        self.pause in between.

        Parameters
        ----------
        url: str
            A properly-formatted url

        Returns
        -------
        response: requests.response
            Sends requests.response object to validator

        Raises
        ------
        IEXQueryError
            If problems arise when making the query
        """
        pause = self.pause
        for i in range(self.retry_count+1):
            response = self.session.get(url=url, params=self.params)
            if response.status_code == requests.codes.ok:
                return self._validate_response(response)
            time.sleep(pause)
        raise IEXQueryError()
Beispiel #3
0
    def _validate_response(self, response):
        """ Ensures response from IEX server is valid.

        Parameters
        ----------
        response: requests.response
            A requests.response object

        Returns
        -------
        response: Parsed JSON
            A json-formatted response

        Raises
        ------
        ValueError
            If a single Share symbol is invalid
        IEXQueryError
            If the JSON response is empty or throws an error

        """
        # log the number of messages used
        key = "iexcloud-messages-used"
        if key in response.headers:
            msg = response.headers[key]
        else:
            msg = ("N/A")
        logger.info("MESSAGES USED: %s" % msg)

        if response.text == "Unknown symbol":
            raise IEXQueryError(response.status_code, response.text)
        try:
            json_response = response.json(
                parse_int=self.json_parse_int,
                parse_float=self.json_parse_float)
            if isinstance(json_response, str) and ("Error Message" in
                                                   json_response):
                raise IEXQueryError(response.status_code, response.text)
        except ValueError:
            raise IEXQueryError(response.status_code, response.text)
        return json_response
Beispiel #4
0
 def _output_format(self, response):
     if self.output_format == 'json':
         return response
     elif self.output_format == 'pandas' and self.acc_pandas:
         try:
             df = pd.DataFrame(response)
             return df
         except ValueError:
             raise IEXQueryError()
     elif self.acc_pandas is False:
         raise ValueError("Pandas not accepted for this function.")
     else:
         raise ValueError("Please input valid output format")
Beispiel #5
0
def get_available_symbols(**kwargs):
    """
    MOVED to iexfinance.refdata.get_symbols
    """
    import warnings
    warnings.warn(WNG_MSG % ("get_available_symbols", "refdata.get_symbols"))
    _ALL_SYMBOLS_URL = "https://api.iextrading.com/1.0/ref-data/symbols"
    handler = _IEXBase(**kwargs)
    response = handler._execute_iex_query(_ALL_SYMBOLS_URL)
    if not response:
        raise IEXQueryError("Could not download all symbols")
    else:
        return response
Beispiel #6
0
    def _handle_error(self, response):
        """
        Handles all responses which return an error status code
        """
        auth_msg = "The query could not be completed. Invalid auth token."

        status_code = response.status_code
        if 400 <= status_code < 500:
            if status_code == 400:
                raise auth_error(auth_msg)
            else:
                raise IEXQueryError("The query could not be completed. "
                                    "There was a client-side error with your "
                                    "request.")
        elif 500 <= status_code < 600:
            raise auth_error("The query could not be completed. "
                             "There was a server-side error with "
                             "your request.")
        else:
            raise auth_error("The query could not be completed.")
Beispiel #7
0
def get_available_symbols(**kwargs):
    """
    Top-level function to obtain IEX available symbols

    Parameters
    ----------
    kwargs:
        Additional Request Parameters (see base class)

    Returns
    -------
    data: list
        List of dictionary reference items for each symbol
    """
    _ALL_SYMBOLS_URL = "https://api.iextrading.com/1.0/ref-data/symbols"
    handler = _IEXBase(**kwargs)
    response = handler._execute_iex_query(_ALL_SYMBOLS_URL)
    if not response:
        raise IEXQueryError("Could not download all symbols")
    else:
        return response
Beispiel #8
0
 def _handle_error(self, response):
     """
     Handles all responses which return an error status code
     """
     raise IEXQueryError(response.status_code, response.text)