from MoodleClasses.MoodleActivity import MoodleActivity from MoodleClasses.MoodleFile import MoodleFile from bs4 import BeautifulSoup from urllib.parse import unquote import requests class MoodleFolder(MoodleActivity): def __init__(self, soup: BeautifulSoup): super().__init__(soup) self.parent_dir = None self.file = None def _get_url(self) -> str: url = self.soup.find("a")["href"] if url in self.all_urls: self.all_urls.remove(url) return url def find(self, s: requests.Session) -> bool: try: form = self.soup.find("form") url = form["action"] + "?id=" + form.find("input")["value"] if not url.find("download_folder.php") > 0: return False else: self.file = MoodleFile(self, url) except: r = s.get(self._get_url(), allow_redirects=True) if not r.url.find("view.php?id=") > 0: return False else: url = r.url.replace("view.php", "download_folder.php") self.file = MoodleFile(self, url) with s.get(url, allow_redirects=True, stream=True) as rh: if 'Content-Disposition' not in rh.headers: return False else: self.file.filepath = self.file._get_filepath(filename=unquote(rh.headers['Content-Disposition'].split('\'')[-1])) return True def download(self, s: requests.Session, ignore_extension: list[str]) -> bool: return self.file.download(s, ignore_extension)