Skip to main content

Python SDK for the VALR REST API

Project description

A Python SDK for VALR cryptocurrency exchange APIs.

Installation

pip install valr-python

You can also install the in-development version with:

pip install https://github.com/jonathanelscpt/valr-python/archive/master.zip

Authentication

Authenticating to VALR API private resources requires a valid API Key from the VALR exchange.

Synchronous REST API Client

To use the synchronous REST API client:

>>> from valr_python import Client
>>> from valr_python.exceptions import IncompleteOrderWarning
>>>
>>> c = Client(api_key='api_key', api_secret='api_secret')
>>> c.rate_limiting_support = True # honour HTTP 429 "Retry-After" header values
>>> limit_order = {
...     "side": "SELL",
...     "quantity": 0.1,
...     "price": 10000,
...     "pair": "BTCZAR",
...     "post_only": True,
... }
>>> try:
...    res = c.post_limit_order(**limit_order)
...    order_id = res['id']
...    print(order_id)
... except IncompleteOrderWarning as w:  # HTTP 202 Accepted handling for incomplete orders
...    order_id = w.data['id']
...    print(order_id)
... except Exception as e:
...    print(e)
"558f5e0a-ffd1-46dd-8fae-763d93fa2f25"

Asynchronous REST API Client

The asynchronous REST API client is still in development. Coming soon!

WebSocket API Client

To use the WebSocket API client:

>>> import asyncio
>>> from typing import Dict
>>> from pprint import pprint
>>> from valr_python import WebSocketClient
>>> from valr_python.enum import TradeEvent
>>> from valr_python.enum import WebSocketType
>>>
>>> def pretty_hook(data: Dict):
...    pprint(data)
>>>
>>> c = WebSocketClient(api_key='api_key', api_secret='api_secret', currency_pairs=['BTCZAR'],
...                     ws_type=WebSocketType.TRADE.name,
...                     trade_subscriptions=[TradeEvent.MARKET_SUMMARY_UPDATE.name],
...                     hooks={TradeEvent.MARKET_SUMMARY_UPDATE.name : pretty_hook})
>>> loop = asyncio.get_event_loop()
>>> loop.run_until_complete(c.run())
{'currencyPairSymbol': 'BTCZAR',
 'data': {'askPrice': '151601',
          'baseVolume': '314.7631144',
          'bidPrice': '151600',
          'changeFromPrevious': '2.14',
          'created': '2020-02-06T22:47:03.129Z',
          'currencyPairSymbol': 'BTCZAR',
          'highPrice': '152440',
          'lastTradedPrice': '151600',
          'lowPrice': '146765',
          'previousClosePrice': '148410',
          'quoteVolume': '47167382.04552981'},
 'type': 'MARKET_SUMMARY_UPDATE'}

This library leverages websockets and asyncio and is thus a coroutine-based API client. Both of VALR’s Account WebSocket connection and Trade WebSocket connection API endpoints are included. Furthermore, the SDK fully supports VALR’s subscription methods for both Account and Trade endpoints. Please see the VALR API documentation for further information.

For each subscription, a hook must be provided to process the WS responses. Failing to do so raises a HookNotFoundError exception. For ease of use, several Enum classes have been implemented (as showcased above) for client instantiation and hook consumption of API responses. However, client input is accepted in str format.

Although not completely minimalistic, please note that the SDK is implemented as a thin client and parsing of API streams response is left up to the application user.

Development

To execute all tests run:

tox

Note, to combine the coverage data from all the tox environments run:

Windows

set PYTEST_ADDOPTS=--cov-append
tox

Other

PYTEST_ADDOPTS=--cov-append tox

Changelog

0.1.7 (2020-01-11)

  • Standardised api attribute naming in Client

  • Updated doctest and readme for more detailed SDK description

0.1.6 (2020-01-11)

  • Added custom warning IncompleteOrderWarning on receiving 202 Accepted response to support custom handling of incomplete orders

  • Added custom warning TooManyRequestsWarning during 429 handling

  • Added class flag for enabling or disabling 429 handler

0.1.5 (2020-01-11)

  • Expanded test suites to unit, functional and live integration testing

  • Internal class refactoring

  • Added optional HTTP 429 handling by honouring the “Retry-After” header value sent in VALR responses

0.1.4 (2020-01-04)

  • Streamlined ordering api calls with decorators

  • Added typing support

  • Re-worked class design internals to support later async expansion

  • Fixed bugs with str ‘None’ insertion with f-strings

  • Expanded unit tests to cover all api endpoints for synchronous client

0.1.3 (2020-01-02)

  • Fixed defect with empty body signed signatures

  • Updated class importing

  • Added additional docstrings and unit tests

0.1.2 (2019-12-31)

  • Updated readme and documentation

0.1.1 (2019-12-31)

  • corrected build error issue in setup.py

0.1.0 (2019-12-29)

  • Initial PyPi release

0.0.0 (2019-12-27)

  • Alpha-only. Not released on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

valr-python-0.2.1.tar.gz (33.3 kB view details)

Uploaded Source

Built Distribution

valr_python-0.2.1-py2.py3-none-any.whl (21.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file valr-python-0.2.1.tar.gz.

File metadata

  • Download URL: valr-python-0.2.1.tar.gz
  • Upload date:
  • Size: 33.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.7

File hashes

Hashes for valr-python-0.2.1.tar.gz
Algorithm Hash digest
SHA256 db1497e2952f113e3ad21aa8e7ac07815b3f12192de28c251f6ad30c148744a3
MD5 597605ab5bf7ece7b21d3e98060eb4d7
BLAKE2b-256 dcc94da6669542cc60143fa99c5caacd2cf72c61d49029d2ca67f9747d816cfa

See more details on using hashes here.

File details

Details for the file valr_python-0.2.1-py2.py3-none-any.whl.

File metadata

  • Download URL: valr_python-0.2.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 21.3 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.4.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.7

File hashes

Hashes for valr_python-0.2.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 8c2cc88774aa53b39591cd8d0ec8768bb817f28323e1398bf6277654474f832c
MD5 04f018d6aee8352bbe2b3937420b0385
BLAKE2b-256 fd22f567707bc315852ea46618e963d70a1a298fe6fae5dd80c5004c2ffa05ed

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page