Skip to content
Advertisement

upload file with slackclient 2.x

I’m upgrading from slackclient 1.3.1 to 2.9.3 using this guide.

before I had this function:

     def upload_file(self, file, filename, title, channel):
         return self.slack_client.api_call(
             "files.upload",
             channels=channel,
             filename=filename,
             title=title,
             file=file)

which I tried to migrate to:

    def upload_file(self, file, filename, title, channel):
    return self.web_client.api_call(
        "files.upload",
        json={'channels': channel,
              'filename': filename,
              'title': title,
              'file': file})

the function is called with something like this:

with open("/vm-root/app/" + log, 'rb') as f:
    instance.upload_file(f, log, log, channel)

However, I get:

Object of type ‘BufferedReader’ is not JSON serializable

I am guessing it is related to the way I pass the file parameter. How should I be doing it?

Advertisement

Answer

Solved, the parameters were wrong:

    def upload_file(self, file, filename, title, channel):
    return self.web_client.api_call(
        "files.upload",
        files={'file': file},
        data={'channels': channel,
              'filename': filename,
              'title': title})
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement