Changing moodle activity handling
This commit is contained in:
46
MoodleClasses/MoodleCourseSection.py
Normal file
46
MoodleClasses/MoodleCourseSection.py
Normal file
@@ -0,0 +1,46 @@
|
||||
from urllib.parse import unquote
|
||||
from MoodleClasses.MoodleActivity import MoodleActivity
|
||||
from MoodleClasses.MoodleResource import MoodleResource
|
||||
from MoodleClasses.MoodleFolder import MoodleFolder
|
||||
from MoodleClasses.MoodleAssign import MoodleAssign
|
||||
from bs4 import BeautifulSoup
|
||||
from typing import Type
|
||||
import bs4
|
||||
import os
|
||||
|
||||
|
||||
class MoodleCourseSection:
|
||||
def __init__(self, soup: bs4.element.Tag):
|
||||
self.soup = soup
|
||||
self.title = self._get_title()
|
||||
self.activities = self._get_activities()
|
||||
|
||||
def __repr__(self):
|
||||
return f"{self.title}: {len(self.activities)} activities"
|
||||
|
||||
def _get_title(self) -> str:
|
||||
title = self.soup.find("h3", {"class": "sectionname"}).text.strip()
|
||||
return unquote(title)[:min(len(title), 50)]
|
||||
|
||||
def _get_activities(self) -> list[Type[MoodleActivity]]:
|
||||
activities_raw = self.soup.find_all("li", {"class": "activity"})
|
||||
activities = []
|
||||
for instance, soup in map(lambda x: (self._classify_activity(x), x), activities_raw):
|
||||
if instance is not None:
|
||||
activities.append(instance(soup))
|
||||
return activities
|
||||
|
||||
@staticmethod
|
||||
def _classify_activity(soup: BeautifulSoup) -> [None, MoodleActivity]:
|
||||
activitytype = soup["class"][2]
|
||||
if activitytype == "resource":
|
||||
return MoodleResource
|
||||
if activitytype == "folder":
|
||||
return MoodleFolder
|
||||
if activitytype == "assign":
|
||||
return MoodleAssign
|
||||
return None
|
||||
|
||||
def set_parent_dir(self, parent_dir: os.path, index: int) -> None:
|
||||
for act in self.activities:
|
||||
act.set_parent_dir(os.path.join(parent_dir, f"{index} - {self.title}"))
|
||||
Reference in New Issue
Block a user