GearPlug / microsoftgraph-python

Microsoft Graph API wrapper written in Python
MIT License
96 stars 38 forks source link

OneDrive uploads #8

Open Pikamander2 opened 4 years ago

Pikamander2 commented 4 years ago

Does this library support uploading files to OneDrive? Are there any examples?

Here are the relevant API docs: https://docs.microsoft.com/en-us/graph/api/driveitem-createuploadsession?view=graph-rest-1.0

chrissyast commented 3 years ago

I am also having this problem. I can't see how the client functions in the docs of this repo correspond to the requests in the Microsoft docs.

Disruption commented 2 years ago

@Pikamander2 Uploading a file to drive, or updating an existing file should be handled properly now that #23 got merged I think

Pikamander2 commented 2 years ago

@Disruption - That's great to hear. Would it be possible to add a simple example of how to upload a file to the documentation?

Pikamander2 commented 2 years ago

Oh, I guess it would be this one?

response = client.files.drive_upload_new_file("/Pictures/upload.jpg", "/mnt/c/Users/i/Downloads/image1.jpg")
Disruption commented 2 years ago

@Pikamander2 I can try to provide a PR adding that, but it should be fairly straight-forward, like:

filename = "/pictures/my_image.png"
file_path = "/var/www/data/img/my_image.png"
client.files.drive_upload_new_file(filename, file_path)

Note: If you have a File instance you can use the associated methods along with os.path to get the right values Note2: If you have in-memory data, you can create a NamedTemporaryFile with that data and use it to perform the upload with it's path and name

Disruption commented 2 years ago

Oh, I guess it would be this one?

response = client.files.drive_upload_new_file("/Pictures/upload.jpg", "/mnt/c/Users/i/Downloads/image1.jpg")

Yes, that would be the one, filename is the full path it will have on remote, and file_path is the local path where your file is.

Pikamander2 commented 2 years ago

@Disruption - I'm trying to set up a simple example script right now, but looking through the "Usage" section, but it seems pretty light on detail in terms of getting things set up, so I'm struggling to get it working.

These first four lines appear to work without throwing any errors:

from microsoftgraph.client import Client #pip install microsoftgraph-python

client_id = 'my-client-id-from-portal-azure-com'
client_secret = 'my-client-secret-from-portal-azure-com'
client = Client(client_id, client_secret, account_type='common')

But after that, I'm not entirely sure what I need to do.


If I add this fifth line:

response = client.files.drive_upload_new_file("picture.png", "/mnt/c/Users/i/Downloads/picture.png")

Then I get this error:

AttributeError: 'Files' object has no attribute 'drive_upload_new_file'

If I add this fifth line:

response = client.users.get_me()

Then I get this error:

microsoftgraph.exceptions.TokenRequired: You must set the Token.

My goal here is just to automate the uploading of some files from my PC to my OneDrive folder.

Disruption commented 2 years ago

Hello @Pikamander2

Apart from the client id and client secret you need a token from outlook (a refresh token that comes from the login is the best) Then you need to call "refresh_token" with that token to get an actual token, and set that token as token to the client

Regarding files, that's because those methods (for uploading and updating files) are on the new release that hasn't come out yet

Cheers!