{"id":14956309,"url":"https://gitlab.com/cipres/aioipfs","last_synced_at":"2025-09-12T17:43:39.694Z","repository":{"id":57408980,"uuid":"6469574","full_name":"cipres/aioipfs","owner":"cipres","description":"Async python3 client library for IPFS (kubo) https://aioipfs.readthedocs.io","archived":false,"fork":false,"pushed_at":null,"size":null,"stargazers_count":5,"open_issues_count":2,"forks_count":3,"subscribers_count":null,"default_branch":"master","last_synced_at":"2025-01-14T12:00:35.663Z","etag":null,"topics":["api","asyncio","dweb","go-ipfs","http-api","ipfs","python","rest"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://gitlab.com/uploads/-/system/project/avatar/6469574/ipfs-logo-128-ice.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-05-23T16:25:14.161Z","updated_at":"2024-12-10T11:12:22.607Z","dependencies_parsed_at":"2022-09-03T00:32:41.109Z","dependency_job_id":null,"html_url":"https://gitlab.com/cipres/aioipfs","commit_stats":null,"previous_names":[],"tags_count":7,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/cipres%2Faioipfs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/cipres%2Faioipfs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/cipres%2Faioipfs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories/cipres%2Faioipfs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/owners/cipres","download_url":"https://gitlab.com/cipres/aioipfs/-/archive/master/aioipfs-master.zip","host":{"name":"gitlab.com","url":"https://gitlab.com","kind":"gitlab","repositories_count":4516889,"owners_count":6657,"icon_url":"https://github.com/gitlab.png","version":null,"created_at":"2022-05-30T11:31:42.605Z","updated_at":"2024-07-18T11:24:13.055Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/gitlab.com/owners"}},"keywords":["api","asyncio","dweb","go-ipfs","http-api","ipfs","python","rest"],"created_at":"2024-09-24T13:12:41.128Z","updated_at":"2025-01-20T03:15:47.060Z","avatar_url":"https://gitlab.com/uploads/-/system/project/avatar/6469574/ipfs-logo-128-ice.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"=======\naioipfs\n=======\n\n:info: Asynchronous IPFS_ client library\n\n**aioipfs** is a python3 library providing an asynchronous API for IPFS_.\nSupported python versions: *3.6*, *3.7*, *3.8*, *3.9*, *3.10*, *3.11*, *3.12*.\n\nThis library supports the\n`RPC API specifications \u003chttps://docs.ipfs.tech/reference/kubo/rpc\u003e`_\nfor kubo_ version *0.28.0*. Unit tests are run against\nmost major go-ipfs releases and all kubo_\nreleases, see the *CI* section below.\n\nSee the documentation `here \u003chttps://aioipfs.readthedocs.io/en/latest\u003e`_.\n\n.. image:: https://gitlab.com/cipres/aioipfs/badges/master/coverage.svg\n\nInstallation\n============\n\n.. code-block:: shell\n\n    pip install aioipfs\n\nTo install the requirements for `bohort \u003chttps://aioipfs.readthedocs.io/en/latest/bohort.html\u003e`_, a REPL tool for making RPC calls on kubo nodes:\n\n.. code-block:: shell\n\n    pip install 'aioipfs[bohort]'\n\nSupport for CAR (Content-Addressable Archives) decoding (with the\n`ipfs-car-decoder package \u003chttps://github.com/kralverde/py-ipfs-car-decoder/\u003e`_)\ncan be enabled with the *car* extra:\n\n.. code-block:: shell\n\n    pip install 'aioipfs[car]'\n\nBy default the *json* module from the standard Python library is used\nto decode JSON messages, but orjson_ will be used if it is installed:\n\n.. code-block:: shell\n\n    pip install 'aioipfs[orjson]'\n\nUsage\n=====\n\nClient instantiation\n--------------------\n\nThe recommended way to specify the kubo node's RPC API address is\nto pass a multiaddr_.\n\n.. code-block:: python\n\n    client = aioipfs.AsyncIPFS(maddr='/ip4/127.0.0.1/tcp/5001')\n\n    client = aioipfs.AsyncIPFS(maddr='/dns4/localhost/tcp/5001')\n\nYou can also pass a *multiaddr.Multiaddr* instance.\n\n.. code-block:: python\n\n    from multiaddr import Multiaddr\n\n    client = aioipfs.AsyncIPFS(maddr=Multiaddr('/ip4/127.0.0.1/tcp/5001'))\n\nOtherwise just pass *host* and *port* separately:\n\n.. code-block:: python\n\n    client = aioipfs.AsyncIPFS(host='localhost', port=5001)\n\n    client = aioipfs.AsyncIPFS(host='::1', port=5201)\n\nIf the kubo server requires authentication, you can pass the RPC authentication\ncredentials via the constructor's *auth* keyword argument:\n\n.. code-block:: python\n\n    client = aioipfs.AsyncIPFS(auth=aioipfs.BasicAuth('john', 'password123'))\n\n    client = aioipfs.AsyncIPFS(auth=aioipfs.BearerAuth('my-secret-token'))\n\nGet an IPFS resource\n--------------------\n\n.. code-block:: python\n\n    import sys\n    import asyncio\n\n    import aioipfs\n\n    async def get(cid: str):\n        client = aioipfs.AsyncIPFS()\n\n        await client.get(cid, dstdir='.')\n        await client.close()\n\n    loop = asyncio.get_event_loop()\n    loop.run_until_complete(get(sys.argv[1]))\n\nAdd some files\n--------------\n\nThis example will import all files and directories specified on the command\nline. Note that the **add** API function is an asynchronous generator and\ntherefore should be used with the *async for* syntax.\n\n.. code-block:: python\n\n    import sys\n    import asyncio\n\n    import aioipfs\n\n    async def add_files(files: list):\n        client = aioipfs.AsyncIPFS()\n\n        async for added_file in client.add(*files, recursive=True):\n            print('Imported file {0}, CID: {1}'.format(\n                added_file['Name'], added_file['Hash']))\n\n        await client.close()\n\n    loop = asyncio.get_event_loop()\n    loop.run_until_complete(add_files(sys.argv[1:]))\n\nYou can also use the async list generator syntax:\n\n.. code-block:: python\n\n    cids = [entry['Hash'] async for entry in client.add(dir_path)]\n\nPubsub service\n--------------\n\n.. code-block:: python\n\n    async def pubsub_serve(topic: str):\n        async with aioipfs.AsyncIPFS() as cli:\n            async for message in cli.pubsub.sub(topic):\n                print('Received message from', message['from'])\n\n                await cli.pubsub.pub(topic, message['data'])\n\n\nDialing a P2P service\n---------------------\n\n.. code-block:: python\n\n    async with aioipfs.AsyncIPFS() as client:\n        async with client.p2p.dial_service(peer_id, '/x/echo') as dial:\n            print(f'Dial host: {dial.maddr_host}, port: {dial.maddr_port}')\n\n            # Connect to the service now\n            ....\n\nCI\n==\n\nThe Gitlab CI workflow runs unit tests against the following\ngo-ipfs/kubo releases (`go here \u003chttps://gitlab.com/cipres/aioipfs/-/jobs\u003e`_\nfor the CI jobs overview).\n\n- go-ipfs \u003e=0.11.0,\u003c=0.13.0\n- kubo \u003e=0.14.0,\u003c=0.28.0\n\n.. image:: https://github.com/pinnaculum/aioipfs/workflows/aioipfs-build/badge.svg\n    :target: https://github.com/pinnaculum/aioipfs/actions\n\n.. image:: https://gitlab.com/cipres/aioipfs/badges/master/pipeline.svg\n    :target: https://gitlab.com/cipres/aioipfs/-/jobs\n\nFeatures\n========\n\nAsync file writing on get operations\n------------------------------------\n\nThe **aiofiles** library is used to asynchronously write data retrieved from\nthe IPFS daemon when using the */api/v0/get* API call, to avoid blocking the\nevent loop. TAR extraction is done in asyncio's threadpool.\n\nRequirements\n============\n\n- Python \u003e= 3.6, \u003c= 3.12\n- aiohttp_\n- aiofiles_\n- py-multibase_\n- yarl_\n\n.. _aiohttp: https://pypi.python.org/pypi/aiohttp\n.. _aiofiles: https://pypi.python.org/pypi/aiofiles\n.. _multiaddr: https://multiformats.io/multiaddr/\n.. _py-multibase: https://pypi.python.org/pypi/py-multibase\n.. _yarl: https://pypi.python.org/pypi/yarl\n.. _IPFS: https://ipfs.io\n.. _kubo: https://github.com/ipfs/kubo\n.. _orjson: https://github.com/ijl/orjson\n\nLicense\n=======\n\n**aioipfs** is offered under the GNU Lesser GPL3 (LGPL3) license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/gitlab.com%2Fcipres%2Faioipfs","html_url":"https://awesome.ecosyste.ms/projects/gitlab.com%2Fcipres%2Faioipfs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/gitlab.com%2Fcipres%2Faioipfs/lists"}