Changing moodle activity handling
This commit is contained in:
47
MoodleClasses/MoodleFolder.py
Normal file
47
MoodleClasses/MoodleFolder.py
Normal file
@@ -0,0 +1,47 @@
|
||||
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)
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user