Skip to content

Failed IBodyProducer coercion produces opaque TypeError on text mode files #286

@om26er

Description

@om26er

It seems the API to upload files is broken. Below is the code that I am using to upload a file to Infura's IPFS gateway

from twisted.internet.task import react

import treq


_IPFS_API_GATEWAY = 'https://ipfs.infura.io:5001/api/v0'
_IPFS_ADD_FILE_ENDPOINT = f'{_IPFS_API_GATEWAY}/add'


def _upload_to_infura():
    f = open('file.txt')
    return treq.post(_IPFS_ADD_FILE_ENDPOINT, files={'file': f})


def main(reactor, *args):
    d = _upload_to_infura()
    d.addCallback(lambda response: print(response))
    return d

react(main, [])

On running the code, this is what I see

Traceback (most recent call last):
  File "infura.py", line 20, in <module>
    react(main, [])
  File "/home/om26er/scm/crossbario/xbr-www/venv/lib/python3.8/site-packages/twisted/internet/task.py", line 909, in react
    finished = main(_reactor, *argv)
  File "infura.py", line 16, in main
    d = _upload_to_infura()
  File "infura.py", line 12, in _upload_to_infura
    return treq.post(_IPFS_ADD_FILE_ENDPOINT, files={'file': f})
  File "/home/om26er/scm/crossbario/xbr-www/venv/lib/python3.8/site-packages/treq/api.py", line 33, in post
    return _client(**kwargs).post(url, data=data, **kwargs)
  File "/home/om26er/scm/crossbario/xbr-www/venv/lib/python3.8/site-packages/treq/client.py", line 137, in post
    return self.request('POST', url, data=data, **kwargs)
  File "/home/om26er/scm/crossbario/xbr-www/venv/lib/python3.8/site-packages/treq/client.py", line 201, in request
    files = list(_convert_files(files))
  File "/home/om26er/scm/crossbario/xbr-www/venv/lib/python3.8/site-packages/treq/client.py", line 318, in _convert_files
    yield (param, (file_name, content_type, IBodyProducer(fobj)))
TypeError: ('Could not adapt', <_io.TextIOWrapper name='file.txt' mode='r' encoding='UTF-8'>, <InterfaceClass twisted.web.iweb.IBodyProducer>)

The library chickens out even before sending data on the wire.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions