Skip to main content

Python SDK for Everscale

Project description

Everscale Client

Everscale SDK Client library Python bindings. Works for Python 3.7+

PyPI - Python Version PyPI PyPI - Downloads GitHub Workflow Status (branch) Chat on Telegram RU Chat on Telegram EN

Installation

Check if Python 3.7+ is installed

MacOS/Linux
# Using pipenv
pipenv install ton-client-py

# Using pip
pip install ton-client-py
Windows
# Using pipenv
py -m pipenv install ton-client-py

# Using pip
py -m pip install ton-client-py

Tests

  • Clone repository
# Clone repository
git clone https://github.com/move-ton/ton-client-py.git

# Go to repo directory
cd ton-client-py
  • Install dev dependencies
MacOS/Linux
# Using pipenv
pipenv install --dev

# Using pip
pip install pytest
Windows
# Using pipenv
py -m pipenv install --dev

# Using pip
py -m pip install pytest
  • Running tests
MacOS/Linux
# Using pipenv
pipenv run pytest  # Display only module name while testing
pipenv run pytest -v  # Display module and method while testing
pipenv run pytest -v -s --log-cli-level=INFO  # Display methods logging while testing

# Without pipenv
python -m pytest
python -m pytest -v
python -m pytest -v -s --log-cli-level=INFO
Windows
# Using pipenv
py -m pipenv run pytest  # Display only module name while testing
py -m pipenv run pytest -v  # Display module and method while testing
py -m pipenv run pytest -v -s --log-cli-level=INFO  # Display methods logging while testing

# Without pipenv
py -m pytest
py -m pytest -v
py -m pytest -v -s --log-cli-level=INFO
  • Alternative running tests If you have problems with installing pytest package you can simply run
# For MacOS/Linux
python -m unittest -v

# For Windows
py -m unittest -v

Client

Core client library has sync and async request modes. Some core methods are available only in async request mode and this mode is more prefferable, so python client created with async core requests by default.

Create client

from tonclient.types import ClientConfig
from tonclient.client import TonClient

client = TonClient(config=ClientConfig())

# If you need sync core requests for some reason
client_sync_core = TonClient(config=ClientConfig(), is_core_async=False)

Client created with default config

from tonclient.types import NetworkConfig, CryptoConfig, AbiConfig, BocConfig, ProofsConfig, ClientConfig


# Default network config is below.
# `None` attributes are filled by core with defaults values:
#     `server_address=''`
#     `endpoints=[]`
#     `network_retries_count=5` (DEPRECATED)
#     `message_retries_count=5`
#     `max_reconnect_timeout=120000`
#     `message_processing_timeout=40000`
#     `wait_for_timeout=40000`
#     `out_of_sync_threshold=15000`
#     `sending_endpoint_count=2`
#     `reconnect_timeout=` (DEPRECATED)
#     `access_key=''`
#     `latency_detection_interval=60000`
#     `max_latency=60000`
#     `query_timeout=60000`
#     `queries_protocol='HTTP'`
network = NetworkConfig(
    server_address='http://localhost', endpoints=None, network_retries_count=None,
    message_retries_count=None, message_processing_timeout=None, reconnect_timeout=None,
    wait_for_timeout=None, out_of_sync_threshold=None, sending_endpoint_count=None,
    access_key=None, max_reconnect_timeout=None, latency_detection_interval=None,
    max_latency=None, query_timeout=None, queries_protocol=None)

# Default crypto config is below.
# `None` attributes are filled by core with defaults values:
#     `mnemonic_dictionary=1`
#     `mnemonic_word_count=12`
#     `hdkey_derivation_path="m/44'/396'/0'/0/0"`
crypto = CryptoConfig(
    mnemonic_dictionary=None, mnemonic_word_count=None, hdkey_derivation_path=None)

# Default abi config is below.
# `None` attributes are filled by core with defaults values:
#     `workchain=0`
#     `message_expiration_timeout=40000`
#     `message_expiration_timeout_grow_factor=1.5`
abi = AbiConfig(
    workchain=None, message_expiration_timeout=None,
    message_expiration_timeout_grow_factor=None)

# Default boc config is below.
# `None` attributes are filled by core with defaults values:
#     `cache_max_size=10000` (10MB)
boc = BocConfig(cache_max_size=None)

# Default proofs config is below.
# `None` attributes are filled by core with defaults values:
#     `cache_in_local_storage=True`
proofs = ProofsConfig(cache_in_local_storage=None)

# Then `ClientConfig` is created
config = ClientConfig(network=network, crypto=crypto, abi=abi, boc=boc, proofs=proofs, local_storage_path=None)

You can override initial config while creating a client

from tonclient.types import ClientConfig
from tonclient.client import TonClient, DEVNET_BASE_URLS

config = ClientConfig()
config.network.endpoints = DEVNET_BASE_URLS
config.abi.message_expiration_timeout = 30000

client = TonClient(config=config)
version = client.version()

Client contains all core modules and its methods. You can get full list of modules and methods here: https://github.com/tonlabs/TON-SDK/blob/master/docs/modules.md Module method called by template client.[module].[method]

from tonclient.types import ClientConfig, ParamsOfParse
from tonclient.client import TonClient, DEVNET_BASE_URLS

config = ClientConfig()
config.network.endpoints = DEVNET_BASE_URLS
client = TonClient(config=config)

# Generate random signing keys
keypair = client.crypto.generate_random_sign_keys()

# Parse account
parse_params = ParamsOfParse(boc='Account base64 BOC')
result = client.boc.parse_account(params=parse_params)

You always can get information about method and its arguments in method docstring.

Methods with callbacks

Some library methods accept callback argument to pass additional data to it. E.g. net.subscribe_collection

import time
from datetime import datetime

from tonclient.errors import TonException
from tonclient.types import ClientConfig, ClientError, SubscriptionResponseType, \
    ParamsOfSubscribeCollection, ResultOfSubscription
from tonclient.client import DEVNET_BASE_URLS, TonClient


config = ClientConfig()
config.network.endpoints = DEVNET_BASE_URLS
client = TonClient(config=config)


def __callback(response_data, response_type, loop):
    """
    `loop` in args is just for example.
    It will have value only with `asyncio` and may be replaced by `_` or `*args`
    in synchronous requests
    """
    if response_type == SubscriptionResponseType.OK:
        result = ResultOfSubscription(**response_data)
        results.append(result.result)
    if response_type == SubscriptionResponseType.ERROR:
        raise TonException(error=ClientError(**response_data))

results = []
now = int(datetime.now().timestamp())
q_params = ParamsOfSubscribeCollection(collection='messages', result='created_at', filter={'created_at': {'gt': now}})
subscription = client.net.subscribe_collection(params=q_params, callback=__callback)

while True:
    if len(results) > 0 or int(datetime.now().timestamp()) > now + 10:
        client.net.unsubscribe(params=subscription)
        break
    time.sleep(1)

Please, dig in tonclient/test/test_net.py, tonclient/test/test_processing.py, tonclient/test/test_crypto.py, tonclient/test/test_debot.py to get more examples.

Client and asyncio

from tonclient.types import ClientConfig
from tonclient.client import TonClient, DEVNET_BASE_URLS

# Create client with `is_async=True` argument.
config = ClientConfig()
config.network.endpoints = DEVNET_BASE_URLS
client = TonClient(config=config, is_async=True)

# Get version (simple method with result)
version = await client.version()

Please, dig in tonclient/test/test_async.py to get more info

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

ton-client-py-1.44.3.0.tar.gz (40.2 MB view details)

Uploaded Source

Built Distribution

ton_client_py-1.44.3.0-py3-none-any.whl (40.3 MB view details)

Uploaded Python 3

File details

Details for the file ton-client-py-1.44.3.0.tar.gz.

File metadata

  • Download URL: ton-client-py-1.44.3.0.tar.gz
  • Upload date:
  • Size: 40.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/37.3 requests/2.25.1 requests-toolbelt/1.0.0 urllib3/1.26.15 tqdm/4.65.0 importlib-metadata/6.6.0 keyring/23.13.1 rfc3986/1.5.0 colorama/0.4.6 CPython/3.11.5

File hashes

Hashes for ton-client-py-1.44.3.0.tar.gz
Algorithm Hash digest
SHA256 f8a9fd3c771cdc0b4025a945449afe842a9b00b3c3f2e8d44b3ddda5093efbbe
MD5 a00278e8a2568a39a2a42c7ecaede4bb
BLAKE2b-256 f298286650fb90974c6f970db43764c9f12cc14e9880576534d1e701ccc81567

See more details on using hashes here.

File details

Details for the file ton_client_py-1.44.3.0-py3-none-any.whl.

File metadata

  • Download URL: ton_client_py-1.44.3.0-py3-none-any.whl
  • Upload date:
  • Size: 40.3 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.9.6 readme-renderer/37.3 requests/2.25.1 requests-toolbelt/1.0.0 urllib3/1.26.15 tqdm/4.65.0 importlib-metadata/6.6.0 keyring/23.13.1 rfc3986/1.5.0 colorama/0.4.6 CPython/3.11.5

File hashes

Hashes for ton_client_py-1.44.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1790ba4c6e16cf9a4a9ed724e1dc2c381022b5994ebb527950217904939819df
MD5 eb797730900adede0eedbb6c78b44436
BLAKE2b-256 7de7552a8a0eda831a4f30a48f48e05f2aad8e2dc7c8e0a2b9a361defcd14ebd

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