Skip to main content

A simple framework for interacting with Dune Analytics official API service.

Project description

Python 3.11 Code style: black License Build

Dune Client

A python framework for interacting with Dune Analytics' officially supported API service.

Installation

Import as a project dependency

pip install dune-client

Example Usage

Quickstart: run_query

Export your DUNE_API_KEY (or place it in a .env file - as in here .env.sample and source .env).

from dune_client.types import QueryParameter
from dune_client.client import DuneClient
from dune_client.query import QueryBase

query = QueryBase(
    name="Sample Query",
    query_id=1215383,
    params=[
        QueryParameter.text_type(name="TextField", value="Word"),
        QueryParameter.number_type(name="NumberField", value=3.1415926535),
        QueryParameter.date_type(name="DateField", value="2022-05-04 00:00:00"),
        QueryParameter.enum_type(name="ListField", value="Option 1"),
    ],
)
print("Results available at", query.url())

dune = DuneClient.from_env()
results = dune.run_query(query)

# or as CSV
# results_csv = dune.run_query_csv(query)

# or as Pandas Dataframe
# results_df = dune.run_query_dataframe(query)

Further Examples

Get Latest Results

Use get_latest_results to get the most recent query results without using execution credits. You can specify a max_age_hours to re-run the query if the data is too outdated.

from dune_client.client import DuneClient

dune = DuneClient.from_env()
results = dune.get_latest_result(1215383, max_age_hours=8)

Paid Subscription Features

CRUD Operations

If you're writing scripts that rely on Dune query results and want to ensure that your local, peer-reviewed, queries are being used at runtime, you can call update_query before run_query!

Here is a fictitious example making use of this functionality;

from dune_client.types import QueryParameter
from dune_client.client import DuneClient

sql = """
    SELECT block_time, hash,
    FROM ethereum.transactions
    ORDER BY CAST(gas_used as uint256) * CAST(gas_price AS uint256) DESC
    LIMIT {{N}}
    """

dune = DuneClient.from_env()
query = dune.create_query(
    name="Top {N} Most Expensive Transactions on Ethereum",
    query_sql=sql,
    # Optional fields
    params=[QueryParameter.number_type(name="N", value=10)],
    is_private=False  # default
)
query_id = query.base.query_id
print(f"Created query with id {query.base.query_id}")
# Could retrieve using 
# dune.get_query(query_id)

dune.update_query(
    query_id, 
    # All parameters below are optional
    name="Top {N} Most Expensive Transactions on {Blockchain}",
    query_sql=sql.replace("ethereum", "{{Blockchain}}"),
    params=query.base.parameters() + [QueryParameter.text_type("Blockchain", "ethereum")],
    description="Shows time and hash of the most expensive transactions",
    tags=["XP€N$IV $H1T"]
)

dune.archive_query(query_id)
dune.unarchive_query(query_id)

dune.make_private(query_id)
dune.make_public(query_id)

Developer Usage & Deployment

Makefile

This project's makefile comes equipped with sufficient commands for local development.

Installation

make install

Format, Lint & Types

make check

can also be run individually with fmt, lint and types respectively.

Testing

make test-unit  # Unit tests 
make test-e2e   # Requires valid `DUNE_API_KEY`

can also run both with make test-all

Deployment

Publishing releases to PyPi is configured automatically via github actions (cf. ./.github/workflows/py-publish.yaml). Any time a branch is tagged for release this workflow is triggered and published with the same version name.

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

dune_client-1.7.9.tar.gz (43.3 kB view details)

Uploaded Source

Built Distribution

dune_client-1.7.9-py3-none-any.whl (37.8 kB view details)

Uploaded Python 3

File details

Details for the file dune_client-1.7.9.tar.gz.

File metadata

  • Download URL: dune_client-1.7.9.tar.gz
  • Upload date:
  • Size: 43.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for dune_client-1.7.9.tar.gz
Algorithm Hash digest
SHA256 1d904a56f21b5b07c3b373c9bbbbb8a1ce175bda337d8c53e4291a11f078a4aa
MD5 5280416496bb76e3389458cfdd11b23d
BLAKE2b-256 cc5671d4e5eb32e628306a31c2748691e9998a378c17a118412f9cfd61785aff

See more details on using hashes here.

Provenance

The following attestation bundles were made for dune_client-1.7.9.tar.gz:

Publisher: py-publish.yaml on duneanalytics/dune-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dune_client-1.7.9-py3-none-any.whl.

File metadata

  • Download URL: dune_client-1.7.9-py3-none-any.whl
  • Upload date:
  • Size: 37.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for dune_client-1.7.9-py3-none-any.whl
Algorithm Hash digest
SHA256 80e24bc21167687b12e50e488b5cb352926df62cdd939e3fc3cf20e2f1637e0d
MD5 4efcd9c5740dafe5a95ec3cabb090ff1
BLAKE2b-256 b141835137748e9db1930fa4e0ce72e46ce7229e0cbb638f2662778833281472

See more details on using hashes here.

Provenance

The following attestation bundles were made for dune_client-1.7.9-py3-none-any.whl:

Publisher: py-publish.yaml on duneanalytics/dune-client

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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