Office365-REST-Python-Client icon indicating copy to clipboard operation
Office365-REST-Python-Client copied to clipboard

[Question] 403 when trying to use `expand(["Files", "Folders"])`

Open charelstoncrabb opened this issue 3 years ago • 0 comments

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")

charelstoncrabb avatar Jun 30 '22 02:06 charelstoncrabb