
Security News
NVD Quietly Sweeps 100K+ CVEs Into a “Deferred” Black Hole
NVD now marks all pre-2018 CVEs as "Deferred," signaling it will no longer enrich older vulnerabilities, further eroding trust in its data.
: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
.. 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]'
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'))
.. 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]))
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)]
.. 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'])
.. 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
....
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).
.. 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
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.
.. _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
aioipfs is offered under the GNU Lesser GPL3 (LGPL3) license.
FAQs
Asynchronous IPFS client library
We found that aioipfs demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Security News
NVD now marks all pre-2018 CVEs as "Deferred," signaling it will no longer enrich older vulnerabilities, further eroding trust in its data.
Research
Security News
Lazarus-linked threat actors expand their npm malware campaign with new RAT loaders, hex obfuscation, and over 5,600 downloads across 11 packages.
Security News
Safari 18.4 adds support for Iterator Helpers and two other TC39 JavaScript features, bringing full cross-browser coverage to key parts of the ECMAScript spec.