Skip to main content

A simple framework for interacting with Dune Analytics' unsupported API.

Project description

Dune Analytics API

Python 3.9 Code style: black License Build

A simple framework for interacting with Dune Analytics' unsupported API. The primary class (DuneAPI) of this repo is adapted from https://github.com/itzmestar/duneanalytics at commit bdccd5ba543a8f3679e2c81e18cee846af47bc52

Import as Project Dependency

pip install duneapi

Then you should be able to write python scripts similar to the following:

Example Usage

Fill out your Dune credentials in the .env file. The Dune user and password are straight-forward login credentials to Dune Analytics. The DUNE_QUERY_ID is an integer id found in the URL of a query when saved in the Dune interface. This should be created beforehand, but the same query id can be used everywhere throughout the program (as long as it is owned by the account corresponding to the user credentials provided).

You do not have to provide the query id as an environment variable, but doing so, will allow you to use the same id for all fetching needs. For dashboard management, you will need to have a unique id for each query.

Execute Query and Fetch Results from Dune

from duneapi.api import DuneAPI
from duneapi.query import DuneQuery
from duneapi.types import Network, QueryParameter, DuneRecord
from duneapi.util import open_query


def fetch_records(dune: DuneAPI) -> list[DuneRecord]:
    sample_query = DuneQuery.from_environment(
        raw_sql=open_query("PATH_TO_SOME_SQL_FILE"),
        name="Sample Query",
        network=Network.MAINNET,
        parameters=[
            QueryParameter.number_type("IntParam", 10),
            QueryParameter.text_type("TextParam", "aba"),
        ],
    )
    return dune.fetch(sample_query)


if __name__ == "__main__":
    dune_connection = DuneAPI.new_from_environment()
    records = fetch_records(dune_connection)
    print("First result:", records[0])

Dashboard Management

It will help to get aquainted with the Dashboard configuration file found in ./example/dashboard/my_dashboard.json. This essentially requires filepath and query id to existing dune queries. Generally it is expected that you will use the family of queries contained in an existing dashboard, but there is no actual validation. Technically one could put all queries here and refresh them with this tool.

from duneapi.dashboard import DuneDashboard

dashboard = DuneDashboard("./example/dashboard/_config.json")
dashboard.update()
print("Updated", dashboard)

To fetch some sample ethereum block data, run the sample script as:

python -m example.fetch

This will result in the following console logs:

got 10 records from last query
First record Record(
    string='0x255309e019abaf74bf2d58d4020547c89f875842abae1c874fb0d5ae8eac9859', 
    integer=14362177, 
    decimal=0.14785533, 
    time='2022-03-10T23:50:16+00:00'
)

To fetch your own data follow the code outline in fetch.py

Contributing and Local Development

Clone this Repo and install as follows.

python3 -m venv venv
source ./env/bin/activate
pip install -r requirements.txt
cp .env.sample .env       <----- Copy your Dune credentials here!

Deployment

  1. Bump the version number in setup.py
  2. Build the duneapi package python -m build
  3. Upload to pypi twine upload dist/*

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

duneapi-3.0.1.tar.gz (19.8 kB view details)

Uploaded Source

Built Distribution

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

duneapi-3.0.1-py3-none-any.whl (20.6 kB view details)

Uploaded Python 3

File details

Details for the file duneapi-3.0.1.tar.gz.

File metadata

  • Download URL: duneapi-3.0.1.tar.gz
  • Upload date:
  • Size: 19.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.10.2

File hashes

Hashes for duneapi-3.0.1.tar.gz
Algorithm Hash digest
SHA256 ef8ffd34f870671012dabcf72dc43927e9c2e93ccd173307c1f67e3a53f09cbd
MD5 5c6d17bab0d898df40af295eda0dec94
BLAKE2b-256 f669a203b51cd741ce76cb29dae2d2c066b293ba87c508f91969e665cd9ed8f6

See more details on using hashes here.

File details

Details for the file duneapi-3.0.1-py3-none-any.whl.

File metadata

  • Download URL: duneapi-3.0.1-py3-none-any.whl
  • Upload date:
  • Size: 20.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.10.2

File hashes

Hashes for duneapi-3.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8d20caec145ac2c08ec394f0ae0afc49ae53190bb956d46bd4aab03ac8d848ea
MD5 0cd7c95f285f0ca09ef83d4905b90140
BLAKE2b-256 d564c9d7719b0ae2ac0c4d535364e2856ffca55556a9f920344794b6377b5020

See more details on using hashes here.

Supported by

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