def update_sport_subjects(self): sports_list = sports.VutSports().get_sports() for item in sports_list: if not review_repo.get_subject(item.shortcut.lower()).first(): review_repo.add_subject(item.shortcut.lower()) review_repo.set_subject_details(item.shortcut, item.name, 1, item.semester.value, "Za", item.subject_id, "V", "VBIT, VMIT", "BIT, MIT")
def update_subject_types(self, link, MIT): """Send request to `link`, parse page and find all subjects. Add new subjects to DB, if subject already exists update its years. For MITAI links please set `MIT` to True. If update succeeded return True, otherwise False """ response = requests.get(link) if response.status_code != 200: return False soup = BeautifulSoup(response.content, "html.parser") tables = soup.select("table") # remove last table with information about PVT and PVA subjects (applicable mainly for BIT) if len(tables) % 2: tables = tables[:-1] # specialization shortcut for correct year definition in DB specialization = soup.select("main p strong")[0].get_text() full_specialization = soup.select("h1")[0].get_text() if not review_repo.get_programme(specialization): review_repo.set_programme(specialization, full_specialization, link) sem = 1 year = 1 for table in tables: rows = table.select("tbody tr") for row in rows: shortcut = row.find_all("th")[0].get_text() # update subject DB if not review_repo.get_subject(shortcut.lower()).first(): review_repo.add_subject(shortcut.lower()) columns = row.find_all("td") type = columns[2].get_text() degree = "BIT" for_year = "VBIT" if type == "P": if MIT and year > 2: # any year for_year = f"L{specialization}" else: for_year = f"{year}{specialization}" else: if MIT: for_year = "VMIT" if MIT: degree = "MIT" detail = review_repo.get_subject_details(shortcut.lower()) semester = "Z" if sem == 2: semester = "L" if detail: type_list = detail.type.split(", ") # remove duplicated types -> bug fix if type_list.count(type) != 1: type_list.append(type) type_list = list(dict.fromkeys(type_list)) review_repo.update_subject_type(shortcut, ", ".join(type_list), detail.year) if not detail: # subject not in DB review_repo.set_subject_details( shortcut, columns[0].get_text(), # name columns[1].get_text(), # credits semester, columns[3].get_text(), # end columns[0].find("a").attrs["href"], # link type, for_year, degree, ) elif for_year not in detail.year.split(", "): # subject already in DB with different year (applicable mainly for MIT) if type not in type_list: type += f", {detail.type}" if detail.year: for_year += f", {detail.year}" review_repo.update_subject_type(shortcut, type, for_year) elif semester not in detail.semester.split(", "): # subject already in DB with different semester (e.g. RET) semester += f", {detail.semester}" review_repo.update_subject_sem(shortcut, semester) elif degree not in detail.degree.split(", "): # subject already in DB with different degree (e.g. RET) degree += f", {detail.degree}" review_repo.update_subject_degree(shortcut, degree) sem += 1 if sem == 3: year += 1 sem = 1 return True
async def subject_add(self, ctx, *subjects): """Manually adding subjects to DB""" for subject in subjects: subject = subject.lower() review_repo.add_subject(subject) await ctx.send(f"Zkratky `{subjects}` byli přidány.")