Files
inky-nextcloud/uNextcloud.py

67 lines
2.2 KiB
Python

import urequests
import ElementTree
class uNextcloud:
class File:
def __init__(self, url_path, mimetype):
self.url_path = url_path
self.mimetype = mimetype
def get_url(self):
return self.url_path
def get_mimetype(self):
return self.mimetype
def __init__(self, nextcloud_url):
self.url = nextcloud_url
self.username = None
self.password = None
def set_auth(self, username, password):
self.username = username
self.password = password
def get_folder_items(self, folder_path=""):
response = urequests.request("PROPFIND", self.url+"/remote.php/dav/files/"+self.username+"/"+folder_path, auth=(self.username, self.password))
if 200 <= response.status_code < 300:
file_list = []
try:
xml = ElementTree.fromstring(response.text)
for resp in xml:
href = resp.find_first_by_tag("href")
propstat = resp.find_first_by_tag("propstat")
prop = propstat.find_first_by_tag("prop")
content_type = prop.find_first_by_tag("getcontenttype")
if content_type != None:
file_list.append(self.File(href.text, content_type.text))
response.close()
return file_list
except AttributeError:
response.close()
return None
else:
response.close()
return None
def download_file_to_path(self, url_path, destination_path):
response = urequests.request("GET", self.url+url_path, auth=(self.username, self.password))
if 200 <= response.status_code < 300:
len = 0
with open(destination_path, 'wb') as dest:
data = bytearray(1024)
while True:
print(f"downloaded {len}")
if response.raw.readinto(data) == 0:
break
len += 1024
dest.write(data)
dest.flush()
response.close()
else:
response.close()
raise Exception()