All notable changes should be documented in this file.
The format is based on Keep a Changelog, and this project adheres to semantic versioning.
- Nothing (yet).
- License classifier added to
setup.py
to aid automatic detection. (#145_)
- Public endpoints were still not working. They will now be URL-encoded as params instead of being sent as data. (#141_)
- Public endpoints will now use a
GET
method, because Kraken dropped support forPOST
. Previously, all endpoint calls usedPOST
.
- A
timeout
argument forAPI.query_public()
orAPI.query_private()
, to set a time-out period for that particular query. (#67) krakenex.API.json_options()
to set options to the JSON de-serialiser, to be used on query responses. (#87)- An
examples/json-options.py
example to demonstrate the above. (#88)
- Updated examples using
pandas
to post-v0.17.0 sorting. (#29)
For a detailed list of changes, refer to the same-number releases below.
- Everything network-related now handled by
requests
. See its docs if needed. (#11) krakenex.API
class no longer has aconn
attribute for connection manipulation. It has been replaced by asession
attribute, which is arequests.Session
. For custom networking setups, directly modifysession
attribute of akrakenex.API
object.krakenex.API
constructor no longer acceptsconn
argument as a means of re-using an existingkrakenex.Connection
object. Instead, modifykrakenex.API.session
if needed, same as above.- If you were previously calling
API.query_private()
orAPI.query_public()
in atry/except
block, be aware that these two may now throw arequests.exceptions.HTTPError
instead of the previoushttp.client.HTTPException
, if the underlyingConnection
returns a non-20x status code.
- The remote servers are unstable under high load, which is most of the time. No recovery mechanism is provided for failed queries. (#66)
Most importantly, queries that may seem to have failed due to a 502
HTTP error may in fact reach the trade execution engine, with an
unpredictable delay. See PSA for an example.
After encountering a 502
, a subsequent call to
krakenex.API.query_private()
will construct a new query, with an
increased nonce
. When used with an AddOrder
query, this may
have disastrous effects, placing a duplicate order.
To work around this, instead reuse the krakenex.API.response.request
object, which is a requests.PreparedRequest
, saved as part of
requests
' operation when submitting the first query. This request
can be re-sent using krakenex.API.session.send()
.
Release candidate. Not recommended for production use.
- Fixed bug with dependencies not getting installed when following installation instructions in a clean virtual environment.
Yanked due to clean-room pip
installation failing.
Internal alpha testing release! Not for general use. For that
reason, pip
package not provided.
krakenex.API.session
attribute, which is arequests.Session
.krakenex.API.response
attribute, which is arequests.Response
object for the previous query. It is available whether the query was successful or has failed.
- It is now recommended to install with
pip
in avirtualenv
. SeeREADME
for details.
krakenex.Connection
class. Obsoleted by use ofrequests.Session
.krakenex.API.conn
attribute, which was akrakenex.Connection
object.krakenex.API.set_connection()
method (deprecated sincev1.0.0
).
For a detailed list of changes, refer to the same-number releases below.
- If you were previously calling
API.query_private()
orAPI.query_public()
in atry/except
block, be aware that these two may now throw ahttp.client.HTTPException
, if the underlyingConnection
returns a non-20x status code. (#17)
krakenex.API.set_connection()
method. Accesskrakenex.API.conn
attribute directly.
- There is no straightforward way to reset the
krakenex.API
object's connectionkrakenex.API.conn
. (#53)
The recommended workaround for now, assuming k = krakenex.API()
:
k.conn.close()
k.conn = None
If a connection is not closed prior to the reference being removed, the connection may continue to linger, preventing removal of the object by the garbage collector.
Release candidate. Not recommended for production use.
- Minimal Travis CI integration. (#45)
Internal alpha testing release! Not for general use. For that
reason, pip
package not provided.
- Cleaned up examples.
Internal alpha testing release! Not for general use. For that
reason, pip
package not provided.
- More examples.
- Low-level
Connection._request
now raiseshttp.client.HTTPException
if response doesn't have20x
status code. This propagates all the way up, toAPI.query_{private,public}
. (#17)
- Fix new connection thrashing if one is not provided for reuse (as was described in the docs). (#27)
- Be explicit when using default arguments in functions that have optional ones. (#19)
- Renamed
NEWS
toCHANGELOG
.
krakenex.API.set_connection()
method. Accesskrakenex.API.conn
attribute directly.
- Properly release key file descriptor after reading in key. (#7)
- Verbose docs, served at
https://python3-krakenex.readthedocs.io/
.
- Single-source version and URL - used during setup and in
User-Agent
. (#5)
- Ship examples with PyPI package.
- Renamed README and LICENSE according to PyPI recommendations.
- Change versioning scheme to semantic versioning (recommended by PyPI).
- Basic documentation with sphinx.
- Classes sub-classed from
object
.
- Core license changed from GPLv3 to LGPLv3. Examples remain at Simplified BSD.
API.set_connection()
method to set default connection.
- Fixed
User-Agent
still reporting version0.0.3
.
conditional-close
example.- Examples licensed under the Simplified BSD license.
- Original Python 2 version ported to Python 3.
API.load_key()
method to allow loading key/secret pair from file.
- Basic implementation of
KrakenConnection
class. - Optional
conn
argument to query methods allows connection reuse.
- Basic
API
class withquery_{public,private}()
methods. - Licensed under GPLv3.