Skip to main content

Python IPFS HTTP CLIENT library

Project description

py-ipfs-http-client

Made by the IPFS Community IRC #py-ipfs on chat.freenode.net Matrix #py-ipfs:ninetailed.ninja Standard README Compliant Build Status

Python IPFS HTTP Client Library

Check out the HTTP Client reference for the full command reference.

Important: The ipfsapi PIP package and Python module have both been renamed to ipfshttpclient! See the relevant section of the README for details.

Note: This library occasionally has to change to stay compatible with the IPFS HTTP API. Currently, this library is tested against go-ipfs v0.5.0. We strive to support the last 5 releases of go-IPFS at any given time; go-IPFS v0.4.21 therefore being to oldest supported version at this time (version 0.4.20 was never supported due to major issues in the daemon itself).

Table of Contents

Install

Install with pip:

pip install ipfshttpclient

Development install from Source

# Clone the source repository
git clone https://github.com/ipfs/py-ipfs-http-client.git
cd py-ipfs-http-client

# Link ipfs-api-client into your Python Path
flit install --pth-file

Usage

Basic use-case (requires a running instance of IPFS daemon):

>>> import ipfshttpclient
>>> client = ipfshttpclient.connect('/ip4/127.0.0.1/tcp/5001/http')
>>> res = client.add('test.txt')
>>> res
{'Hash': 'QmWxS5aNTFEc9XbMX1ASvLET1zrqEaTssqt33rVZQCQb22', 'Name': 'test.txt'}
>>> client.cat(res['Hash'])
'fdsafkljdskafjaksdjf\n'

Please note: You should specify the address for an IPFS API server, using the address of a gateway (such as the public ipfs.io one at /dns/ipfs.io/tcp/443/https) will only give you extremely limited access and may not work at all. If you are only interested in downloading IPFS content through public gateway servers then this library is unlikely of being of much help.

For real-world scripts you can reuse TCP connections using a context manager or manually closing the session after use:

import ipfshttpclient

# Share TCP connections using a context manager
with ipfshttpclient.connect() as client:
	hash = client.add('test.txt')['Hash']
	print(client.stat(hash))

# Share TCP connections until the client session is closed
class SomeObject:
	def __init__(self):
		self._client = ipfshttpclient.connect(session=True)

	def do_something(self):
		hash = self._client.add('test.txt')['Hash']
		print(self._client.stat(hash))

	def close(self):  # Call this when your done
		self._client.close()

Administrative functions:

>>> client.id()
{'Addresses': ['/ip4/127.0.0.1/tcp/4001/ipfs/QmS2C4MjZsv2iP1UDMMLCYqJ4WeJw8n3vXx1VKxW1UbqHS',
               '/ip6/::1/tcp/4001/ipfs/QmS2C4MjZsv2iP1UDMMLCYqJ4WeJw8n3vXx1VKxW1UbqHS'],
 'AgentVersion': 'go-ipfs/0.4.10',
 'ID': 'QmS2C4MjZsv2iP1UDMMLCYqJ4WeJw8n3vXx1VKxW1UbqHS',
 'ProtocolVersion': 'ipfs/0.1.0',
 'PublicKey': 'CAASpgIwgg ... 3FcjAgMBAAE='}

Pass in API options:

>>> client.pin.ls(type='all')
{'Keys': {'QmNMELyizsfFdNZW3yKTi1SE2pErifwDTXx6vvQBfwcJbU': {'Count': 1,
                                                             'Type': 'indirect'},
          'QmNQ1h6o1xJARvYzwmySPsuv9L5XfzS4WTvJSTAWwYRSd8': {'Count': 1,
                                                             'Type': 'indirect'},
          

Add a directory and match against a filename pattern:

>>> client.add('photos', pattern='*.jpg')
[{'Hash': 'QmcqBstfu5AWpXUqbucwimmWdJbu89qqYmE3WXVktvaXhX',
  'Name': 'photos/photo1.jpg'},
 {'Hash': 'QmSbmgg7kYwkSNzGLvWELnw1KthvTAMszN5TNg3XQ799Fu',
  'Name': 'photos/photo2.jpg'},
 {'Hash': 'Qma6K85PJ8dN3qWjxgsDNaMjWjTNy8ygUWXH2kfoq9bVxH',
  'Name': 'photos/photo3.jpg'}]

Or add a directory recursively:

>>> client.add('fake_dir', recursive=True)
[{'Hash': 'QmQcCtMgLVwvMQGu6mvsRYLjwqrZJcYtH4mboM9urWW9vX',
  'Name': 'fake_dir/fsdfgh'},
 {'Hash': 'QmNuvmuFeeWWpxjCQwLkHshr8iqhGLWXFzSGzafBeawTTZ',
  'Name': 'fake_dir/test2/llllg'},
 {'Hash': 'QmX1dd5DtkgoiYRKaPQPTCtXArUu4jEZ62rJBUcd5WhxAZ',
  'Name': 'fake_dir/test2'},
 {'Hash': 'Qmenzb5J4fR9c69BbpbBhPTSp2Snjthu2hKPWGPPJUHb9M',
  'Name': 'fake_dir'}]

This module also contains some helper functions for adding strings and JSON to IPFS:

>>> lst = [1, 77, 'lol']
>>> client.add_json(lst)
'QmQ4R5cCUYBWiJpNL7mFe4LDrwD6qBr5Re17BoRAY9VNpd'
>>> client.get_json(_)
[1, 77, 'lol']

Use an IPFS server with basic auth (replace username and password with real creds):

>>> import ipfshttpclient
>>> api = ipfshttpclient.connect('/dns/ipfs-api.example.com/tcp/443/https', username="foo", password="bar")

Pass custom headers to your IPFS api with each request:

>>> import ipfshttpclient
>>> headers = {"CustomHeader": "foobar"}
>>> api = ipfshttpclient.connect('/dns/ipfs-api.example.com/tcp/443/https', headers=headers)

Documentation

Documentation (currently mostly API documentation unfortunately) is available on IPFS:

https://ipfs.io/ipns/12D3KooWEqnTdgqHnkkwarSrJjeMP2ZJiADWLYADaNvUb6SQNyPF/docs/

The ipfs command-line Client documentation may also be useful in some cases.

Important changes from ipfsapi 0.4.x

  • Tons of methods has been renamed, ensure that you code runs without warnings with the last version of ipfsapi before attempting to upgrade!
  • The Python package has been renamed from ipfsapi to ipfshttpclient
  • The PIP module has been renamed from ipfsapi to ipfshttpclient (please update your requirement files)
  • The client.*_pyobj family of functions has been dropped due to security concerns
  • The client.bitswap.unwant method has been dropped – it's endpoint has been removed by go-ipfs
  • The client.files.file_ls method has been dropped – deprecated for a long time, use client.ls instead
  • Passing a list of parameters to client.add will now fail, just pass several individual parameters instead
  • Some functions that may also return multiple items, will now also return a list when returning only a single item (don't worry about it unless it actually breaks for you)
  • The API deamon location is now described using Multiaddr, hence rather then doing ipfshttpclient.connect(host, port) to pass the network address parameters, use:
    • ipfshttpclient.connect("/dns/<host>/tcp/<port>/http") (for hostnames such as localhost)
    • ipfshttpclient.connect("/ip4/<IP-address>/tcp/<port>/http") (for IPv4 addresses)
    • ipfshttpclient.connect("/ip6/<IP-address>/tcp/<port>/http") (for IPv6 addresses)
    • Use …/https rather then …/http to connect to the API deamon using HTTPS
  • The client now supports keeping session contexts around between API calls, you probably should make use of this facility in your code

Thank you @AlibabasMerchant, @lordcirth and @radfish (in order of subjective contributions) for helping making this happen!

Featured Projects

Projects that currently use py-ipfs-http-client. If your project isn't here, feel free to submit a PR to add it!

Contribute

Chat (IRC/Matrix)

You can find us on #py-ipfs on chat.freenode.org or in our Matrix chat room. Oin us if you have any suggestions, questions or if you just want to discuss IPFS and Python in general.

Please note that the channel is not monitored all the time and hence you may only receive a reply to your message later that day. Using Matrix makes it easier to stay connected in the background, so please prefer the Matrix option or use an IRC bouncer.

Bug reports

You can submit bug reports using the GitHub issue tracker.

Pull requests

Pull requests are welcome. Before submitting a new pull request, please make sure that your code passes both the code formatting check:

$ tox -e codestyle

And the unit tests:

$ tox

You can arrange to run the code style tests automatically before each commit by installing a pre-commit hook:

$ ./tools/pre-commit --install

Please make sure to include new unit tests for new features or changes in behavior. We aim to bring coverage to 100% at some point.

License

This code is distributed under the terms of the MIT license. Details can be found in the file LICENSE in this repository.

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

ipfshttpclient4ipwb-0.6.0.tar.gz (92.1 kB view details)

Uploaded Source

Built Distribution

ipfshttpclient4ipwb-0.6.0-py3-none-any.whl (66.3 kB view details)

Uploaded Python 3

File details

Details for the file ipfshttpclient4ipwb-0.6.0.tar.gz.

File metadata

  • Download URL: ipfshttpclient4ipwb-0.6.0.tar.gz
  • Upload date:
  • Size: 92.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.22.0

File hashes

Hashes for ipfshttpclient4ipwb-0.6.0.tar.gz
Algorithm Hash digest
SHA256 2d0a349df35a7ae37fe1001f3b19260a65faf5fdb39cd945e71ba33a7c0dedf9
MD5 a9d8191ac0f74ccc5922007de7b6c089
BLAKE2b-256 b599e063fd3833180afeb446bb5110187138d42d4f7fb1e25c434e8a9413a67b

See more details on using hashes here.

File details

Details for the file ipfshttpclient4ipwb-0.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ipfshttpclient4ipwb-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 37a8609037bc29a8f8ca04f7d246f82873fb8bef47ccb49fc796a226eb9ecff1
MD5 8220078e5a251ad0714c8ec04f5f24de
BLAKE2b-256 ef5ea0d79b6db8d6e20d0dde9997c159974d58a877166ee3ec988a67780e3fc0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page