コード例 #1
0
                if isinstance(error_response, dict):
                    if error_response.get('error', None) == API_RATE_LIMITS_ERROR_MESSAGE:
                        if retries_left == 0:
                            msg = (
                                f'{self.name} {case} request failed after retrying '
                                f'{API_REQUEST_RETRY_TIMES} times.'
                            )
                            self.msg_aggregator.add_error(
                                f'Got remote error while querying {self.name} {case}: {msg}',
                            )
                            return []  # type: ignore # bug list nothing

                        # Trigger retry
                        log.debug(
                            f'{self.name} {case} request reached the rate limits. Backing off',
                            seconds=API_REQUEST_RETRY_AFTER_SECONDS,
                            options=call_options,
                        )
                        retries_left -= 1
                        gevent.sleep(API_REQUEST_RETRY_AFTER_SECONDS)
                        continue

                    # Unexpected JSON dict case, better to log it
                    msg = f'Unexpected {self.name} {case} unsuccessful response JSON'
                    log.error(msg, error_response=error_response)
                    self.msg_aggregator.add_error(
                        f'Got remote error while querying {self.name} {case}: {msg}',
                    )
                    return []  # type: ignore # bug list nothing

                return self._process_unsuccessful_response(
コード例 #2
0
            has_results = False
            is_result_timesamp_gt_end_ts = False
            result: Union[Trade, AssetMovement]
            for raw_result in response_list:
                if raw_result['type'] not in raw_result_type_filter:
                    continue
                try:
                    result_timestamp = deserialize_timestamp_from_bitstamp_date(
                        raw_result['datetime'], )

                    if result_timestamp > end_ts:
                        is_result_timesamp_gt_end_ts = True  # prevent extra request
                        break

                    log.debug(
                        f'Attempting to deserialize bitstamp {case_pretty}: {raw_result}'
                    )
                    result = deserialization_method(raw_result)

                except DeserializationError as e:
                    msg = str(e)
                    log.error(
                        f'Error processing a Bitstamp {case_pretty}.',
                        raw_result=raw_result,
                        error=msg,
                    )
                    self.msg_aggregator.add_error(
                        f'Failed to deserialize a Bitstamp {case_pretty}. '
                        f'Check logs for details. Ignoring it.', )
                    continue
コード例 #3
0
ファイル: kucoin.py プロジェクト: rotki/rotki
                    self.secret,
                    msg=message.encode('utf-8'),
                    digestmod=hashlib.sha256,
                ).digest(), ).decode('utf-8')
            passphrase = base64.b64encode(
                hmac.new(
                    self.secret,
                    self.api_passphrase.encode('utf-8'),
                    hashlib.sha256,
                ).digest()).decode('utf-8')
            self.session.headers.update({
                'KC-API-SIGN': signature,
                'KC-API-TIMESTAMP': timestamp,
                'KC-API-PASSPHRASE': passphrase,
            })
            log.debug('Kucoin API request', request_url=request_url)
            try:
                response = self.session.get(url=request_url,
                                            timeout=DEFAULT_TIMEOUT_TUPLE)
            except requests.exceptions.RequestException as e:
                raise RemoteError(
                    f'Kucoin {method} request at {request_url} connection error: {str(e)}.',
                ) from e

            log.debug('Kucoin API response', text=response.text)
            # Check request rate limit
            if response.status_code in (HTTPStatus.FORBIDDEN,
                                        HTTPStatus.TOO_MANY_REQUESTS):
                if retries_left == 0:
                    msg = (f'Kucoin {case} request failed after retrying '
                           f'{API_REQUEST_RETRY_TIMES} times.')
コード例 #4
0
ファイル: bitstamp.py プロジェクト: rotki/rotki
                self.msg_aggregator.add_error(
                    f'Got remote error while querying Bistamp trades: {msg}', )
                no_results: Union[List[Trade],
                                  List[AssetMovement]] = []  # type: ignore
                return no_results

            has_results = False
            is_result_timestamp_gt_end_ts = False
            result: Union[Trade, AssetMovement]
            for raw_result in response_list:
                try:
                    entry_type = deserialize_int_from_str(
                        raw_result['type'], 'bitstamp event')
                    if entry_type not in raw_result_type_filter:
                        log.debug(
                            f'Skipping entry {raw_result} due to type mismatch'
                        )
                        continue
                    result_timestamp = deserialize_timestamp_from_bitstamp_date(
                        raw_result['datetime'], )

                    if result_timestamp > end_ts:
                        is_result_timestamp_gt_end_ts = True  # prevent extra request
                        break

                    log.debug(
                        f'Attempting to deserialize bitstamp {case_pretty}: {raw_result}'
                    )
                    result = deserialization_method(raw_result)

                except DeserializationError as e: