Skip to main content

A library to retrieve Pyth account structures off the Solana blockchain.

Project description

Pyth Client in Python

pytest

A Python library to retrieve data from Pyth account structures off the Solana blockchain.

NOTE: This library requires Python 3.7 or greater due to from __future__ import annotations.

Usage

Install the library:

pip install pythclient

You can then read the current Pyth price using the following:

from pythclient.pythclient import PythClient
from pythclient.pythaccounts import PythPriceAccount
from pythclient.utils import get_key

solana_network="devnet"
async with PythClient(
    first_mapping_account_key=get_key(solana_network, "mapping"),
    program_key=get_key(solana_network, "program") if use_program else None,
) as c:
    await c.refresh_all_prices()
    products = await c.get_products()
    for p in products:
        print(p.attrs)
        prices = await p.get_prices()
        for _, pr in prices.items():
            print(
                pr.price_type,
                pr.aggregate_price_status,
                pr.aggregate_price,
                "p/m",
                pr.aggregate_price_confidence_interval,
            )

This code snippet lists the products on pyth and the price for each product. Sample output is:

{'symbol': 'Crypto.ETH/USD', 'asset_type': 'Crypto', 'quote_currency': 'USD', 'description': 'ETH/USD', 'generic_symbol': 'ETHUSD', 'base': 'ETH'}
PythPriceType.PRICE PythPriceStatus.TRADING 4390.286 p/m 2.4331
{'symbol': 'Crypto.SOL/USD', 'asset_type': 'Crypto', 'quote_currency': 'USD', 'description': 'SOL/USD', 'generic_symbol': 'SOLUSD', 'base': 'SOL'}
PythPriceType.PRICE PythPriceStatus.TRADING 192.27550000000002 p/m 0.0485
{'symbol': 'Crypto.SRM/USD', 'asset_type': 'Crypto', 'quote_currency': 'USD', 'description': 'SRM/USD', 'generic_symbol': 'SRMUSD', 'base': 'SRM'}
PythPriceType.PRICE PythPriceStatus.UNKNOWN None p/m None
...

The examples directory includes some example applications that demonstrate how to use this library:

  • examples/dump.py is a detailed usage example that demonstrates the asynchronous API to update prices using a websocket subscription or account polling.
  • examples/read_one_price_feed.py shows how to read the price of a single price feed using its account key.

Developer Setup

Using python 3.7 or newer, create, and activate a virtual environment:

python3 -m venv ve
. ve/bin/activate

To install this library in editable mode with test dependencies:

pip install -e '.[testing]'

To run the unit tests:

pytest

If html based test coverage is more your jam:

pytest --cov-report=html

The coverage webpages will be in the htmlcov directory.

Distribution

To build the package for distribution to pypi, first install dependencies:

python3 -m pip install --upgrade twine build

Next, edit setup.py and bump the version field. Then build the package by running:

python3 -m build

This command will produce packages in the dist/ directory. Upload these packages to pypi by running:

python3 -m twine upload --repository pypi dist/*

This command will require you to log in to a pypi account.

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

pythclient-0.1.0.tar.gz (22.3 kB view details)

Uploaded Source

Built Distribution

pythclient-0.1.0-py3-none-any.whl (23.4 kB view details)

Uploaded Python 3

File details

Details for the file pythclient-0.1.0.tar.gz.

File metadata

  • Download URL: pythclient-0.1.0.tar.gz
  • Upload date:
  • Size: 22.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2

File hashes

Hashes for pythclient-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a21dbbbc108148f655e3169191dc8e7545c75dd86fa2a4be9786ce133c6fdb88
MD5 d0fe5901e08ff493cdbf3e246edcdcf4
BLAKE2b-256 41bf778d58bdf078a8324cfae0d3cbb3a2ecf21b9a8198f4648a9212f4ba66fd

See more details on using hashes here.

File details

Details for the file pythclient-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pythclient-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 23.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2

File hashes

Hashes for pythclient-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0775d251955ca7fcfd9b4069f8873b9e6eb37b44dfcaac343fce68664eacfac9
MD5 3eb16324e61fc691df2cd9973a6ee09f
BLAKE2b-256 98ce93687c38766940264bbf9125a4ff9da79a2cd5a2ccb41c1742281ec3b473

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