Reputation: 922
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)
Upvotes: 2
Views: 1459
Reputation: 43
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)
Upvotes: 1