- 
                Notifications
    
You must be signed in to change notification settings  - Fork 230
 
Closed
Labels
Description
Versions
OS: Linux (Ubuntu 18.04)      
Python:  3.8.6
krakenex: 2.1.0
What are you trying to achieve?
I'm looking to record price data in a persistent session. I do this through a simple wrapper class
class KrakenSession(object):
    def __init__(self):
        self.k = krakenex.API()
        self.k.load_key('src/kraken.key')
    def get_current_asking_price(self):
        """queries kraken API for currency pair
        :note: don't query this too fast or you'll get request errors
            0.25 seconds per request or faster is too fast
        """
        pairstr='XXBTZUSD'
        query = self.k.query_public('Ticker', {'pair':pairstr})
        asking_price = query['result'][pairstr]['a'][0]What happens instead?
The above snippet works for a few hours, then inevitably crashes
Traceback (most recent call last):
  File "src/kraken.py", line 96, in <module>
    krs.record()
  File "src/kraken.py", line 84, in record
    price = self.get_current_asking_price(pairstr='XXBTZUSD')
  File "src/kraken.py", line 31, in get_current_asking_price
    query = self.k.query_public('Ticker', {'pair':pairstr})
  File "/home/foucartc/anaconda3/envs/ctrade_env/lib/python3.8/site-packages/krakenex/api.py", line 162, in query_public
    return self._query(urlpath, data, timeout = timeout)
  File "/home/foucartc/anaconda3/envs/ctrade_env/lib/python3.8/site-packages/krakenex/api.py", line 134, in _query
    self.response = self.session.post(url, data = data, headers = headers,
  File "/home/foucartc/anaconda3/envs/ctrade_env/lib/python3.8/site-packages/requests/sessions.py", line 590, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/home/foucartc/anaconda3/envs/ctrade_env/lib/python3.8/site-packages/requests/sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/foucartc/anaconda3/envs/ctrade_env/lib/python3.8/site-packages/requests/sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "/home/foucartc/anaconda3/envs/ctrade_env/lib/python3.8/site-packages/requests/adapters.py", line 498, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))I presume this could be a problem on the Kraken end (or perhaps with my internet connection), so I wrap the body of get_current_asking_price in a try/except:
    def get_current_asking_price(self):
        """queries kraken API for currency pair
        :note: don't query this too fast or you'll get request errors
            0.25 seconds per request or faster is too fast
        """
        pairstr='XXBTZUSD'
        try:
            query = self.k.query_public('Ticker', {'pair':pairstr})
            asking_price = query['result']['XXBTZUSD']['a'][0]
        except ConnectionError:
            print('encountered a server error. retrying...')
            time.sleep(60)
            query = self.k.query_public('Ticker', {'pair':pairstr})
            asking_price = query['result'][pairstr]['a'][0]
        return float(asking_price)which again runs for a few hours, but returns a different error (without printing 'encountered a server error. retrying...'):
Traceback (most recent call last):
  File "src/kraken.py", line 102, in <module>
    krs.record()
  File "src/kraken.py", line 90, in record
    price = self.get_current_asking_price(pairstr='XXBTZUSD')
  File "src/kraken.py", line 32, in get_current_asking_price
    query = self.k.query_public('Ticker', {'pair':pairstr})
  File "/home/foucartc/anaconda3/envs/ctrade_env/lib/python3.8/site-packages/krakenex/api.py", line 162, in query_public
    return self._query(urlpath, data, timeout = timeout)
  File "/home/foucartc/anaconda3/envs/ctrade_env/lib/python3.8/site-packages/krakenex/api.py", line 138, in _query
    self.response.raise_for_status()
  File "/home/foucartc/anaconda3/envs/ctrade_env/lib/python3.8/site-packages/requests/models.py", line 943, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 520 Server Error:  for url: https://api.kraken.com/0/public/Tickerwhich seems like a deeper error in requests. Before I make my try/except handling more elaborate, I want to understand what's going on here.
- Is this a problem on the kraken side?
 - Does it require resetting / opening a new connection through krakenex and closing the current session?
 - Something else?
 
Any pointers would be appreciated!