Office365-REST-Python-Client
Office365-REST-Python-Client copied to clipboard
[Question] 403 when trying to use `expand(["Files", "Folders"])`
When trying to work through the list files example, I am getting a 403 forbidden returned. I have confirmed that the authentication works, and I cannot find similar issues online.
I'm running python 3.8 on ubuntu 20.04, with Office365-REST-Python-Client==2.3.13.
Here is the slightly modified test script:
from office365.sharepoint.client_context import ClientContext
from office365.sharepoint.files.file import File
from office365.sharepoint.folders.folder import Folder
ctx = ClientContext(sharepoint_url).with_user_credentials(os.getenv('OFFICE365_USER'), os.getenv('OFFICE365_PSSWD'))
def enum_folder(parent_folder, fn):
"""
:type parent_folder: Folder
:type fn: (File)-> None
"""
parent_folder.expand(["Files", "Folders"]).get().execute_query()
for file in parent_folder.files: # type: File
fn(file)
for folder in parent_folder.folders: # type: Folder
enum_folder(folder, fn)
def print_file(f):
"""
:type f: File
"""
print(f.properties['ServerRelativeUrl'])
#print(f.server_relative_path)
target_folder_url = "/Shared Documents"
root_folder = ctx.web.get_folder_by_server_relative_url(target_folder_url)
enum_folder(root_folder, print_file)
And here is the full traceback (with some personal items redacted)
HTTPError Traceback (most recent call last)
File ~/.../python3.8/site-packages/office365/runtime/client_request.py:82, in ClientRequest.execute_query(self)
81 response = self.execute_request_direct(request)
---> 82 response.raise_for_status()
83 self.process_response(response)
File ~/.../python3.8/site-packages/requests/models.py:953, in Response.raise_for_status(self)
952 if http_error_msg:
--> 953 raise HTTPError(http_error_msg, response=self)
HTTPError: 403 Client Error: Forbidden for url: https://[***]-my.sharepoint.com/_api/Web/getFolderByServerRelativeUrl('%2FShared%20Documents')?$expand=Files,Folders
During handling of the above exception, another exception occurred:
ClientRequestException Traceback (most recent call last)
Input In [192], in <cell line: 31>()
29 target_folder_url = "/Shared Documents"
30 root_folder = ctx.web.get_folder_by_server_relative_url(target_folder_url)
---> 31 enum_folder(root_folder, print_file)
Input In [192], in enum_folder(parent_folder, fn)
9 def enum_folder(parent_folder, fn):
10 """
11 :type parent_folder: Folder
12 :type fn: (File)-> None
13 """
---> 14 parent_folder.expand(["Files", "Folders"]).get().execute_query()
15 for file in parent_folder.files: # type: File
16 fn(file)
File ~/.../python3.8/site-packages/office365/runtime/client_object.py:52, in ClientObject.execute_query(self)
46 def execute_query(self):
47 """
48 Submit request(s) to the server
49
50 :type self: T
51 """
---> 52 self.context.execute_query()
53 return self
File ~/.../python3.8/site-packages/office365/runtime/client_runtime_context.py:142, in ClientRuntimeContext.execute_query(self)
140 def execute_query(self):
141 """Submit request(s) to the server"""
--> 142 self.pending_request().execute_query()
File ~/.../python3.8/site-packages/office365/runtime/client_request.py:86, in ClientRequest.execute_query(self)
84 self.afterExecute.notify(response)
85 except HTTPError as e:
---> 86 raise ClientRequestException(*e.args, response=e.response)
ClientRequestException: ('-2147024891, System.UnauthorizedAccessException', 'Access denied.', "403 Client Error: Forbidden for url: https://[***]-my.sharepoint.com/_api/Web/getFolderByServerRelativeUrl('%2FShared%20Documents')?$expand=Files,Folders")