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.17.tar.gz (53.9 kB view details)

Uploaded Source

Built Distribution

pythclient-0.1.17-py3-none-any.whl (31.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pythclient-0.1.17.tar.gz
  • Upload date:
  • Size: 53.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for pythclient-0.1.17.tar.gz
Algorithm Hash digest
SHA256 d592545e8b22b546e751f7704b515164bc2ef5390920327b394fa76dba58aaa3
MD5 07aef792bbd58b14a3f507da49f17824
BLAKE2b-256 93ee86360c902175331fae31b9bbe3f3a4f451ff412399edc188f23128b3f7ec

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pythclient-0.1.17-py3-none-any.whl
  • Upload date:
  • Size: 31.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for pythclient-0.1.17-py3-none-any.whl
Algorithm Hash digest
SHA256 780b6550577928f4f9e4c57891bb348a6fd0df3c033585d591975dcf04181b82
MD5 865ac3f5e119dc980e687e6b165927a3
BLAKE2b-256 f13163ae853a2ab71a4de7ed53a04d56671fa5385aadbb31ba8e949c9b48a5c7

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