Ejemplo n.º 1
0
 def list_reviews(self, author, subject):
     result = review_repo.get_subject(subject).first()
     if not result:
         result = review_repo.get_subject(f"tv-{subject}").first()
         if not result:
             return None
     reviews = review_repo.get_subject_reviews(result.shortcut)
     tier_cnt = reviews.count()
     name = review_repo.get_subject_details(result.shortcut)
     if tier_cnt == 0:
         if name:
             description = f"{name.name}\n*No reviews*"
         else:
             description = "*No reviews*"
         review = None
         page = "1/1"
     else:
         review = reviews[0].Review
         if name:
             description = f"{name.name}\n**Average tier:** {round(reviews[0].avg_tier)}"
         else:
             description = f"**Average tier:** {round(reviews[0].avg_tier)}"
         page = f"1/{tier_cnt}"
     return self.make_embed(author, review, result.shortcut, description,
                            page)
Ejemplo n.º 2
0
 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")
Ejemplo n.º 3
0
 def add_review(self, author_id, subject, tier, anonym, text):
     """Add new review, if review with same author and subject exists -> update"""
     if not review_repo.get_subject(subject).first():
         return False
     update = review_repo.get_review_by_author_subject(author_id, subject)
     if update:
         review_repo.update_review(update.id, tier, anonym, text)
     else:
         review_repo.add_review(author_id, subject, tier, anonym, text)
     return True
Ejemplo n.º 4
0
 def list_reviews(self, subject):
     result = review_repo.get_subject(subject).first()
     if not result:
         return None
     reviews = review_repo.get_subject_reviews(subject)
     tier_cnt = reviews.count()
     name = review_repo.get_subject_details(subject).name
     if tier_cnt == 0:
         description = f"{name}\n*No reviews*"
         review = None
         page = "1/1"
     else:
         review = reviews[0].Review
         description = f"{name}\n**Average tier:** {round(reviews[0].avg_tier)}"
         page = f"1/{tier_cnt}"
     return self.make_embed(review, subject, description, page)
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
 async def subject_remove(self, ctx, *subjects):
     """Manually removing subjects to DB"""
     for subject in subjects:
         subject = subject.lower()
         review_repo.get_subject(subject).delete()
     await ctx.send(f"Zkratky `{subjects}` byli odebrány.")