canvasapi icon indicating copy to clipboard operation
canvasapi copied to clipboard

BadRequest exception while uploading file to user folder

Open Kienyew opened this issue 3 years ago • 0 comments

Describe the bug

when I call the Folder.upload method, the BadRequest exception always raised.

To Reproduce

Steps to reproduce the behavior:

  1. Get my user by Canvas.get_current_user
  2. Filter and get the desired folder by user.get_folders()
  3. Run folder.upload("filename.txt").
  4. BadRequest is raised.

Expected behavior

I wish the file in my local system to be successfully uploaded to the user folder on canvas.

Environment information

  • Python version: Python 3.9.2
  • CanvasAPI version : 2.1.0

Additional context

The codes are similar as following:

API_URL = ...
API_KEY = ...

canvas = Canvas(API_URL, API_KEY)
user = canvas.get_current_user()
root = 'my files'
target_folder = next(filter(lambda f: f.full_name == root folder.get_folders())))

# this raises the exception
root.upload('1.txt')

and this raises

---------------------------------------------------------------------------
BadRequest                                Traceback (most recent call last)
<ipython-input-27-f9f690c59d0c> in <module>
----> 1 f.upload('1.txt', name='1.txt')

~/.local/lib/python3.9/site-packages/canvasapi/folder.py in upload(self, file, **kwargs)
    134         """
    135         my_path = "folders/{}/files".format(self.id)
--> 136         return Uploader(self._requester, my_path, file, **kwargs).start()

~/.local/lib/python3.9/site-packages/canvasapi/upload.py in start(self)
     61         if self._using_filename:
     62             with open(self.file, "rb") as file:
---> 63                 return self.request_upload_token(file)
     64         else:
     65             return self.request_upload_token(self.file)

~/.local/lib/python3.9/site-packages/canvasapi/upload.py in request_upload_token(self, file)
     47         )
     48 
---> 49         return self.upload(response, file)
     50 
     51     def start(self):

~/.local/lib/python3.9/site-packages/canvasapi/upload.py in upload(self, response, file)
     85         kwargs = response.get("upload_params")
     86 
---> 87         response = self._requester.request(
     88             "POST",
     89             use_auth=False,

~/.local/lib/python3.9/site-packages/canvasapi/requester.py in request(self, method, endpoint, headers, use_auth, _url, _kwargs, json, **kwargs)
    235         # Raise for status codes
    236         if response.status_code == 400:
--> 237             raise BadRequest(response.text)
    238         elif response.status_code == 401:
    239             if "WWW-Authenticate" in response.headers:

BadRequest: 

Is the way I called the function wrong? Thanks in advance.

Kienyew avatar Mar 31 '21 11:03 Kienyew