Skip to main content

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.

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

Uploaded Source

Built Distribution

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

pythclient-0.2.2-py3-none-any.whl (34.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pythclient-0.2.2.tar.gz
  • Upload date:
  • Size: 65.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for pythclient-0.2.2.tar.gz
Algorithm Hash digest
SHA256 11992c56870f07be347b55a290dd774c5ee35f592bfab065256b4aed2adff99c
MD5 70759740b82d185bb19a9802d0b7d8f1
BLAKE2b-256 6b463c5a924a94ebfb750b05fdaf0741ec76c6fbe8a282ff2bdd27581d3d5243

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pythclient-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 34.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for pythclient-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 47f09a403b0caae5dd3ed6fda424ce93adeb2a26d59662a1c16c952343deda45
MD5 3c7c572966d734ebca380cb2d9f336d9
BLAKE2b-256 6faf9cc9717007bb371119d4d316a044f28e528cec748c179d7bdae3d94e2ebb

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 files

0.2.1

2 files

0.2.0

2 files

0.1.24

2 files

0.1.23

2 files

0.1.22

2 files

0.1.21

2 files

0.1.20

2 files

0.1.19

2 files

0.1.18

2 files

0.1.17

2 files

0.1.16

2 files

0.1.15

2 files

0.1.14

2 files

0.1.13

2 files

0.1.12

2 files

0.1.11

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

0.0.2

3 files

Supported by

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