Skip to content

A pytest plugin to fetch test data from IPFS HTTP gateways during pytest execution.

License

Notifications You must be signed in to change notification settings

thewtex/pytest-web3-data

Repository files navigation

Pytest Web3 Data

PyPI - Version PyPI - Python Version test


A pytest plugin to fetch test data from IPFS HTTP gateways during pytest execution.

Table of Contents

Installation

pip install pytest-web3-data

Usage

Let's say we want to store our testing data at test/data/*.

Optionally, first add test/data/ to .gitignore.

Create example test data:

mkdir -p test/data/staging/
echo 'hello world!' > ./test/data/staging/hello.txt

Upload the data to the InterPlanetary File System (IPFS).

One option is to use web3.storage. Install Node/NPM, and install the w3 CLI:

npm install --location=global @web3-storage/w3

The set your upload token from https://web3.storage:

w3 token
# Paste in token from the web UI

Upload the testing data to IPFS:

w3 put ./test/data/staging --name pytest-web3-data-example --hidden --no-wrap

This outputs a reference to the Content Identifier (CID), e.g.:

# Packed 1 file (0.0MB)
# bafybeigvfmtttajzj5no3jt2xavkdncxy3xapw3rndvoxmao72vhwy4osu
⁂ Stored 1 file
⁂ https://w3s.link/ipfs/bafybeigvfmtttajzj5no3jt2xavkdncxy3xapw3rndvoxmao72vhwy4osu

When we create a test, e.g.:

# content of test_usage.py
def test_usage(web3_data):
    assert web3_data.exists()
    assert (web3_data / 'hello.txt').read_text() == "hello world!\n"

We can reference our CID either with a flag:

pytest --web3-data-dir=test/data/bafybeigvfmtttajzj5no3jt2xavkdncxy3xapw3rndvoxmao72vhwy4osu

or in the pytest.ini file:

# content of pytest.ini
[pytest]
web3_data_dir = test/data/bafybeigvfmtttajzj5no3jt2xavkdncxy3xapw3rndvoxmao72vhwy4osu

To add new data, copy the current web3_data directory into a staging directory, e.g. test/data/staging, add new data, and use this staging directory path for --web3-data-dir. Upload to IPFS before committing to Git.

For a robust and performant experience, we recommend running a local IPFS daemon, e.g. with ipfs-deskop.

Enjoy! 😊

License

pytest-web3-data is distributed under the terms of the MIT license.

About

A pytest plugin to fetch test data from IPFS HTTP gateways during pytest execution.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages