|
def reqSP(cookie, root, subsite, opn, folder, file = ''): |
|
""" |
|
site - site or subsite |
|
opn - operation name {'FilesFolders, Folders, Files, FileData, Properties, ParentFolder'} |
|
folder - folder path from site/subsite level no slashes before or after |
|
file - file name no slashes, if not file - folder operation is assumed |
|
""" |
|
|
|
# constructing URL for the REST API request |
|
# as per: https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/get-to-know-the-sharepoint-rest-service |
|
ut = "{}/{}/_api/web/Get{}ByServerRelativeUrl('/sites/{}/{}{}'){}" # template |
|
|
|
ops = { |
|
'FilesFolders': '?$expand=Files,Folders', |
|
"Folders": '/Folders', |
|
'Files': '/Files?$select=Name', |
|
"Properties": '/Properties', |
|
'FileData': '/$value', |
|
|
|
'Activities': '/Activities', |
|
"ListItemAllFields": "/ListItemAllFields", |
|
"ParentFolder": '/ParentFolder', |
|
"StorageMetrics": '/StorageMetrics', |
|
|
|
None: "", "": "", |
|
} |
|
|
|
op = ops[opn] |
|
|
|
ff = ('File', 'Folder')[not file] # false = 0, true = 1 |
|
fn = ('/{}'.format(file), '')[not file] |
|
|
|
u = ut.format(root, site, ff, site, folder, fn, op) |
|
|
|
print(u) |
|
|
|
h = { |
|
'accept': 'application/json;odata=verbose', |
|
'cookie': cookie, |
|
'accept-encoding': 'gzip', |
|
} |
|
|
|
r = requests.get(u, headers = h, stream = True) |
|
return r |
|
|
|
# respects to: https://stackoverflow.com/a/16696317/678491 |
|
def saveFile(dest, r): |
|
""" |
|
dest - destination folder |
|
r - response of the request |
|
""" |
|
with open(dest, 'wb') as f: |
|
for chunk in r.iter_content(chunk_size=1024): |
|
if chunk: # filter out keep-alive new chunks |
|
f.write(chunk) |