Skip to main content

Crypto WS API connector for ASYNC requests

Project description

Crypto WS API connector for ASYNC requests

Full coverage of all methods provided by the interface

Provides of connection management, keepalive and rate limits control


PyPI version DeepSource DeepSource sonarcloud Downloads


For :heavy_check_mark:Binance, :heavy_check_mark:OKX, :heavy_check_mark:Bitfinex, :heavy_check_mark:HTX


Features

Lightweight and efficient solution to utilize of all available methods** provided through the:

** Not for channel by one-way subscription, for request <-> response mode only

Session management layer for:

  • Credentials
  • Connection
  • Keepalive
  • Error handling
  • Limits control
  • Methods construction
    • Creating request on-the-fly from method name and params: {}
    • Generating signature if necessary
    • Response handling
  • logging

User interface layer

  • Start session instance
  • Send async request
  • Get response or raised exception
  • Reuse instance for different type requests
  • Stop session instance

Get started

Install use PIP

pip install crypto_ws_api

For upgrade to latest versions use:

pip install -U crypto_ws_api

After first install create environment by run

crypto_ws_api_init

in terminal window.

The config directory will be created. You get path to config:

ubuntu@ubuntu:~$ crypto_ws_api_init

Can't find config file! Creating it...

Before first run set account(s) API key into /home/ubuntu/.config/crypto_ws_api/ws_api.toml

Prepare exchange account

For OKX and Bitfinex, unlike Binance, a limited number of methods are implemented at the WS API level, such as creating, modifying, and deleting orders. There are no public get-time (), ping-pong, etc., so this demo script is limited to calling Binance to demonstrate capabilities.

  • Create API Key
  • After install and create environment specify api_key and api_secret to the config file

Start demo

  • Run in terminal window
crypto_ws_api_demo

Useful tips

crypto_ws_api/demo.py - complete and fully functional example

Get credentials and create user session

from crypto_ws_api.ws_session import UserWSSession

# Get credentials and create user session
# Can be omitted if you have credentials from other source
exchange, _test_net, api_key, api_secret, passphrase, ws_api_endpoint = get_credentials(account_name)

session = aiohttp.ClientSession()

trade_id = shortuuid.uuid()

user_session = UserWSSession(
    session,
    exchange,
    ws_api_endpoint,
    api_key,
    api_secret,
    passphrase
)

Method example

async def account_information(user_session: UserWSSession, _trade_id):
    # https://developers.binance.com/docs/binance-trading-api/websocket_api#account-information-user_data
    try:
        res = await user_session.handle_request(
            _trade_id,
            "account.status",
            _api_key=True,
            _signed=True
        )
        if res is None:
            logger.warning("Here handling state Out-of-Service")
    except asyncio.CancelledError:
        pass  # Task cancellation should not be logged as an error
    except Exception as _ex:
        logger.error(f"Handling exception: {_ex}")
    else:
        logger.info(f"Account information (USER_DATA) response: {res}")

Demo method's calling

await account_information(user_session, trade_id)

Stop user session and close aiohttp session

await user_session.stop()
await session.close()

Create limit order example

if self.exchange == 'binance':
    params = {
        "symbol": "BTCUSDT",
        "side": "SELL",
        "type": "LIMIT",
        "timeInForce": "GTC",
        "price": "23416.10000000",
        "quantity": "0.00847000",
    }
    binance_res = await user_session.handle_request(trade_id, "order.place", params, _api_key=True, _signed=True)

elif self.exchange == 'bitfinex':
    params = {
        "type": "EXCHANGE LIMIT",
        "symbol": "tBTCUSDT",
        "price": "23416.10000000",
        "amount": ('' if side == 'BUY' else '-') + "0.00847000",
    }
    bitfnex_res = await user_session.handle_request(trade_id, "on", params)

elif self.exchange == 'okx':
    params = {
        "instId": "BTC-USDT",
        "tdMode": "cash",
        "clOrdId": "client_order_id",
        "side": "buy",
        "ordType": "limit",
        "sz": "0.00847000",
        "px": "23416.10000000",
    }
    okx_res = await user_session.handle_request(trade_id, "order", params)

Logging setup

For configure logging in multi-module project use next snippet for yours main():

import logging.handlers

logger = logging.getLogger(__name__)
formatter = logging.Formatter(fmt="[%(asctime)s: %(levelname)s] %(message)s")
#
sh = logging.StreamHandler()
sh.setFormatter(formatter)
sh.setLevel(logging.DEBUG)
#
root_logger = logging.getLogger()
root_logger.setLevel(logging.DEBUG)
root_logger.addHandler(sh)

Limits control :link:

Upon reaching the limit threshold of each type, the session switches to the Out-of-Service state. If you send a request in this state, the answer will be None

In any case, you are protected from exceeding limits and blocking for this reason

Donate

USDT (TRC20) TU3kagV9kxbjuUmEi6bUym5MTXjeM7Tm8K

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

crypto_ws_api-2.1.7.tar.gz (17.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

crypto_ws_api-2.1.7-py3-none-any.whl (14.6 kB view details)

Uploaded Python 3

File details

Details for the file crypto_ws_api-2.1.7.tar.gz.

File metadata

  • Download URL: crypto_ws_api-2.1.7.tar.gz
  • Upload date:
  • Size: 17.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.31.0

File hashes

Hashes for crypto_ws_api-2.1.7.tar.gz
Algorithm Hash digest
SHA256 bb6aa582b5c3954730039a38893eaf6c99c9d2000a3e4f3c4d7ca89c20fe4fc6
MD5 d775fbe6d4f90bd2a387ad48b3dc8796
BLAKE2b-256 cededf08d863f07987bea85ddaf0113b79873af0e8a852e0f3efcc9cfa29c091

See more details on using hashes here.

File details

Details for the file crypto_ws_api-2.1.7-py3-none-any.whl.

File metadata

  • Download URL: crypto_ws_api-2.1.7-py3-none-any.whl
  • Upload date:
  • Size: 14.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.31.0

File hashes

Hashes for crypto_ws_api-2.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 fbda8f6617dda15aa2c3956e82c3af60f1e2ea649eb59efa8442127510f9caaa
MD5 d3b1d67d94f81f648b26932a634b2f04
BLAKE2b-256 0fa56b1e54a3186d237410cb022684ac6e054482cf3f6282b6fefa7b05c14e85

See more details on using hashes here.

Supported by

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