2

I am trying to list files from a folder. It works with folder name with spaces but doesn't work when folder name contains '#'.

I am getting below error office365.runtime.client_request_exception.ClientRequestException: ('-1234456, System.IO.FileNotFoundException', 'File Not Found.', "404 Client Error)

from office365.sharepoint.files.file import File
from office365.sharepoint.folders.folder import Folder
from office365.runtime.auth.client_credential import ClientCredential

app_principal = {
    'id': 'xxxxxxxx',
    'secret_id': 'xxxxxxxx',
}

baseurl = 'xxxx.sharepoint.com'
basesite = '/xxx/xxx'
siteurl = baseurl + basesite

credentials = ClientCredential(app_principal['id'], app_principal['secret_id'])
ctx = ClientContext(siteurl).with_credentials(credentials)


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):
    print(f.properties['ServerRelativeUrl'])


target_folder_url = "Documents/Configs files/testfolder#123"
root_folder = ctx.web.get_folder_by_server_relative_url(target_folder_url)
enum_folder(root_folder, print_file)
code_rum
  • 872
  • 6
  • 21
  • You're using the method described in [this example](https://github.com/vgrem/Office365-REST-Python-Client/blob/master/examples/sharepoint/folders/list_files.py). Having a # symbol in a SharePoint folder name likely isn't the cause of this issue (regardless of whitespace). Are you still in need of help with this issue? – ChaddRobertson Apr 07 '22 at 19:04

1 Answers1

1

I didnt user credentials when using app principal try this:

from office365.sharepoint.client_context import AuthenticationContext
from office365.sharepoint.client_context import ClientContext


#datos de la APP solicitada
app_principal = {
    "client_id": 'YOUR_APP_CLIENT_ID',
    "client_secret": 'YOUR_APP_CLIENT_SECRET',
}



server_url = "https://XXXXXX.sharepoint.com/"
site_url = server_url + "sites/XXXXXX"

context_auth = AuthenticationContext(site_url)
context_auth.acquire_token_for_app(
    client_id=app_principal["client_id"], client_secret=app_principal["client_secret"]
)
# returns True

ctx = ClientContext(site_url, context_auth)
web = ctx.web
ctx.load(web)
ctx.execute_query()
print("Web title: {0}".format(web.properties['Title']))

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):
    print(f.properties['ServerRelativeUrl'])
    

target_folder_url= "NAME_OF_YOUR_FOLDER"
root_folder= ctx.web.get_folder_by_server_relative_url(target_folder_url)
enum_folder(root_folder, print_file)
Greyfox
  • 43
  • 7