Skip to main content

A Python package that provides IPFSDict and IPFSDictChain objects, which are dictionary-like data structures that store their state on IPFS and keep track of changes.

Project description

ipfs_dict_chain

Tests Documentation codecov License

ipfs_dict_chain is a Python package that provides IPFSDict and IPFSDictChain objects, which are dictionary-like data structures that store their state on IPFS and keep track of changes, basically creating a mini-blockchain of dicts on IPFS for efficient and secure data management.

Requirements

  • Python >= 3.10
  • An IPFS node
  • aioipfs >= 0.6.3
  • multiaddr >= 0.0.9

Installation

To install the ipfs_dict_chain package, run the following command:

pip install ipfs-dict-chain

Usage

By default, ipfs_dict_chain will attempt to connect to an IPFS node running on localhost (127.0.0.1) on port 5001. If your IPFS node is running with these default settings, you can start using the package immediately.

If your IPFS node is running on a different host or port, you must first connect to it using the connect() function:

from ipfs_dict_chain.IPFS import connect

# Connect to a local IPFS node on a different port
connect(host='127.0.0.1', port=8080)

# Or connect to a remote IPFS node
connect(host='192.168.1.100', port=5001)

The connect() function will test the connection by attempting to add a small test object to IPFS. If the connection fails, it will raise an IPFSError with details about the connection failure.

IPFSDict

IPFSDict is a dictionary-like object that stores its data on IPFS. Here's an example of how to use IPFSDict:

from ipfs_dict_chain.IPFSDict import IPFSDict

my_dict = IPFSDict()

# Add data to the dictionary, you can use both dot notation and bracket notation
my_dict.my_key1 = 'value1'
my_dict['my_key2'] = 'value2'

# Save the dictionary to IPFS
cid = my_dict.save()

# Load the dictionary from IPFS
loaded_dict = IPFSDict(cid=cid)

# Access the data
print(loaded_dict.my_key1)  # Output: 'value1'

IPFSDictChain

IPFSDictChain is a dictionary-like data structure that stores its state on IPFS and keeps track of changes. Here's an example of how to use IPFSDictChain:

from ipfs_dict_chain.IPFSDictChain import IPFSDictChain

my_chain = IPFSDictChain()

# Add data to the dictionary, you can use both dot notation and bracket notation
my_chain.my_key1 = 'value1'
my_chain['my_key2'] = 'value2'

# Save the current state of the dictionary to IPFS
cid1 = my_chain.save()

my_chain.my_key1 = 'value1_changed'
cid2 = my_chain.save()

# Load the dictionary from IPFS
loaded_chain = IPFSDictChain(cid=cid2)

# Access the data
print(loaded_chain.my_key1)  # Output: 'value1_changed'

# Get the changes between the current state and the previous state
changes = loaded_chain.changes()
print(changes)  # Output: {'previous_cid': {'old': None, 'new': 'QmSdydVMD2E7taf42gwQNhakBAc379u8y9X4Kbyoig36Fs'}, 'my_key1': {'old': 'value1', 'new': 'value1_changed'}}

# Get the previous states of the dictionary
previous_states = loaded_chain.get_previous_states()
print(previous_states)  # Output: [{'previous_cid': None, 'my_key1': 'value1', 'my_key2': 'value2'}]

# Get the previous CIDs of the dictionary
previous_cids = loaded_chain.get_previous_cids()
print(previous_cids)  # Output: ['QmSdydVMD2E7taf42gwQNhakBAc379u8y9X4Kbyoig36Fs']

Development and Testing

To install development dependencies:

pip install -e ".[dev]"

To run tests with coverage:

pytest

This will:

  • Run all tests in the tests directory
  • Generate a coverage report in the terminal
  • Create an HTML coverage report in the htmlcov directory

To view specific test coverage details:

# View coverage in terminal with missing lines
pytest --cov=ipfs_dict_chain --cov-report=term-missing

# Generate HTML coverage report
pytest --cov=ipfs_dict_chain --cov-report=html

Documentation

The documentation is built using Sphinx and can be found at GitHub Pages.

To build the documentation locally:

  1. Install the documentation dependencies:

    pip install sphinx sphinx-rtd-theme
    
  2. Build the documentation:

    cd docs
    python -m sphinx.cmd.build -b html source build/html
    

The documentation will be available in docs/build/html/index.html.

Contributing

If you'd like to contribute to the ipfs_dict_chain package, please submit a pull request, issue, or feature request on the project's GitHub repository.

License

This package is released under the MIT License.

Authors

  • Wouter Glorieux - Twitter
  • Serendipity - AI Assistant

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

ipfs_dict_chain-1.0.10.tar.gz (15.2 kB view details)

Uploaded Source

Built Distribution

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

ipfs_dict_chain-1.0.10-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file ipfs_dict_chain-1.0.10.tar.gz.

File metadata

  • Download URL: ipfs_dict_chain-1.0.10.tar.gz
  • Upload date:
  • Size: 15.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.9

File hashes

Hashes for ipfs_dict_chain-1.0.10.tar.gz
Algorithm Hash digest
SHA256 35ea4b57b1b9614fe66fed33138333b4dccaf50c57d342c5abe53b74a19bb20e
MD5 6d411f252dcadc1520fc7751f2f4f4f0
BLAKE2b-256 fab84132c4fb5775170091714aae3b06d1c8f72bd0541744a8080a93dc3a2b1d

See more details on using hashes here.

File details

Details for the file ipfs_dict_chain-1.0.10-py3-none-any.whl.

File metadata

File hashes

Hashes for ipfs_dict_chain-1.0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 b1e13e6f7706fdf78ffdce9ca612cf2d83965ec6107281af00da0f782efef326
MD5 62f538321f29de522ae5bc68119d5180
BLAKE2b-256 64dc0461f89709c3184f4c5b72b77ee8933311dc8ae8a9e5b0f675049cdf7e2b

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