New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

aioipfs

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

aioipfs

Asynchronous IPFS client library

0.7.1
PyPI
Maintainers
1

======= aioipfs

:info: Asynchronous IPFS_ client library

aioipfs is a python3 library providing an asynchronous API for IPFS_. Supported python versions: 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.

This library supports the RPC API specifications <https://docs.ipfs.tech/reference/kubo/rpc>_ for kubo_ version 0.28.0. Unit tests are run against most major go-ipfs releases and all kubo_ releases, see the CI section below.

See the documentation here <https://aioipfs.readthedocs.io/en/latest>_.

.. image:: https://gitlab.com/cipres/aioipfs/badges/master/coverage.svg

Installation

.. code-block:: shell

pip install aioipfs

To install the requirements for bohort <https://aioipfs.readthedocs.io/en/latest/bohort.html>_, a REPL tool for making RPC calls on kubo nodes:

.. code-block:: shell

pip install 'aioipfs[bohort]'

Support for CAR (Content-Addressable Archives) decoding (with the ipfs-car-decoder package <https://github.com/kralverde/py-ipfs-car-decoder/>_) can be enabled with the car extra:

.. code-block:: shell

pip install 'aioipfs[car]'

By default the json module from the standard Python library is used to decode JSON messages, but orjson_ will be used if it is installed:

.. code-block:: shell

pip install 'aioipfs[orjson]'

Usage

Client instantiation

The recommended way to specify the kubo node's RPC API address is to pass a multiaddr_.

.. code-block:: python

client = aioipfs.AsyncIPFS(maddr='/ip4/127.0.0.1/tcp/5001')

client = aioipfs.AsyncIPFS(maddr='/dns4/localhost/tcp/5001')

You can also pass a multiaddr.Multiaddr instance.

.. code-block:: python

from multiaddr import Multiaddr

client = aioipfs.AsyncIPFS(maddr=Multiaddr('/ip4/127.0.0.1/tcp/5001'))

Otherwise just pass host and port separately:

.. code-block:: python

client = aioipfs.AsyncIPFS(host='localhost', port=5001)

client = aioipfs.AsyncIPFS(host='::1', port=5201)

If the kubo server requires authentication, you can pass the RPC authentication credentials via the constructor's auth keyword argument:

.. code-block:: python

client = aioipfs.AsyncIPFS(auth=aioipfs.BasicAuth('john', 'password123'))

client = aioipfs.AsyncIPFS(auth=aioipfs.BearerAuth('my-secret-token'))

Get an IPFS resource

.. code-block:: python

import sys
import asyncio

import aioipfs

async def get(cid: str):
    client = aioipfs.AsyncIPFS()

    await client.get(cid, dstdir='.')
    await client.close()

loop = asyncio.get_event_loop()
loop.run_until_complete(get(sys.argv[1]))

Add some files

This example will import all files and directories specified on the command line. Note that the add API function is an asynchronous generator and therefore should be used with the async for syntax.

.. code-block:: python

import sys
import asyncio

import aioipfs

async def add_files(files: list):
    client = aioipfs.AsyncIPFS()

    async for added_file in client.add(*files, recursive=True):
        print('Imported file {0}, CID: {1}'.format(
            added_file['Name'], added_file['Hash']))

    await client.close()

loop = asyncio.get_event_loop()
loop.run_until_complete(add_files(sys.argv[1:]))

You can also use the async list generator syntax:

.. code-block:: python

cids = [entry['Hash'] async for entry in client.add(dir_path)]

Pubsub service

.. code-block:: python

async def pubsub_serve(topic: str):
    async with aioipfs.AsyncIPFS() as cli:
        async for message in cli.pubsub.sub(topic):
            print('Received message from', message['from'])

            await cli.pubsub.pub(topic, message['data'])

Dialing a P2P service

.. code-block:: python

async with aioipfs.AsyncIPFS() as client:
    async with client.p2p.dial_service(peer_id, '/x/echo') as dial:
        print(f'Dial host: {dial.maddr_host}, port: {dial.maddr_port}')

        # Connect to the service now
        ....

CI

The Gitlab CI workflow runs unit tests against the following go-ipfs/kubo releases (go here <https://gitlab.com/cipres/aioipfs/-/jobs>_ for the CI jobs overview).

  • go-ipfs >=0.11.0,<=0.13.0
  • kubo >=0.14.0,<=0.28.0

.. image:: https://github.com/pinnaculum/aioipfs/workflows/aioipfs-build/badge.svg :target: https://github.com/pinnaculum/aioipfs/actions

.. image:: https://gitlab.com/cipres/aioipfs/badges/master/pipeline.svg :target: https://gitlab.com/cipres/aioipfs/-/jobs

Features

Async file writing on get operations

The aiofiles library is used to asynchronously write data retrieved from the IPFS daemon when using the /api/v0/get API call, to avoid blocking the event loop. TAR extraction is done in asyncio's threadpool.

Requirements

  • Python >= 3.6, <= 3.12
  • aiohttp_
  • aiofiles_
  • py-multibase_
  • yarl_

.. _aiohttp: https://pypi.python.org/pypi/aiohttp .. _aiofiles: https://pypi.python.org/pypi/aiofiles .. _multiaddr: https://multiformats.io/multiaddr/ .. _py-multibase: https://pypi.python.org/pypi/py-multibase .. _yarl: https://pypi.python.org/pypi/yarl .. _IPFS: https://ipfs.io .. _kubo: https://github.com/ipfs/kubo .. _orjson: https://github.com/ijl/orjson

License

aioipfs is offered under the GNU Lesser GPL3 (LGPL3) license.

Keywords

asyncio

FAQs

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts