Skip to content

Commit

Permalink
Add search_classes
Browse files Browse the repository at this point in the history
  • Loading branch information
abarichello committed Mar 24, 2022
1 parent 0d3748f commit cb6f9a4
Showing 1 changed file with 64 additions and 6 deletions.
70 changes: 64 additions & 6 deletions cagrex/cagr.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from bs4 import BeautifulSoup

CAGR_URL = "http://cagr.sistemas.ufsc.br/modules/comunidade/cadastroTurmas/"
SEARCH_URL = "http://forum.cagr.ufsc.br/formularioBusca.jsf"


class InvalidCredentials(Exception):
Expand Down Expand Up @@ -126,8 +127,24 @@ def _table_to_dicts(table: bs4.Tag) -> List[Dict[str, str]]:
return dicts


def _table_to_classlist(table: bs4.Tag) -> List[Class]:
return [_make_class(_dict) for _dict in _table_to_dicts(table)]
# Helper functions to get column data from search page results
def _class_search_subject_name(element):
return element.find("span").get_text(strip=True)


def _class_search_subject_id(element):
return element.find("td", attrs={"class": "coluna2_listar_salas"}).get_text(strip=True)


def _class_search_class_id(element):
return element.find("td", attrs={"class": "coluna3_listar_salas"}).get_text(strip=True)


def _class_search_subject_semester(element):
return element.find("td", attrs={"class": "coluna4_listar_salas"}).get_text(strip=True)


# ---


def _load_name_and_syllabus(subject_id: str) -> Tuple[str, str]:
Expand All @@ -151,7 +168,7 @@ def __init__(self):

def _memberlist_html_from_forum(self, room_id):
url = "http://forum.cagr.ufsc.br/listarMembros.jsf"
params = {"salaId": forum_program_id(room_id)}
params = {"salaId": room_id}
self._browser.open(url, params=params)
page = self._browser.get_current_page()

Expand Down Expand Up @@ -312,8 +329,7 @@ def students_from_class(
class_id: str,
semester: str,
) -> List[Student]:
url = "http://forum.cagr.ufsc.br/formularioBusca.jsf"
self._browser.open(url)
self._browser.open(SEARCH_URL)
form = self._browser.select_form("form#buscaSala")

params = {
Expand All @@ -339,10 +355,52 @@ def students_from_class(

student_id = row.find("td", class_="coluna2_listar_membros").get_text()
student_name = row.find("td", class_="coluna4_listar_membros").get_text()
students.append(Student(student_id, student_name))
students.append(Student(student_id, student_name, "", []))

return students

def search_classes(self, subject_id: str, semester: str) -> List[Student]:
if not self._logged_in:
raise NotLoggedIn()

self._browser.open(SEARCH_URL)
form = self._browser.select_form("form#buscaSala")

params = {
"buscaSala:salaCodigo": subject_id,
"buscaSala:salaTurma": "",
"buscaSala:salaSemestre": semester,
"buscaSala:j_id_jsp_632900747_29": "disciplinas",
}

for param, value in params.items():
self._browser[param] = value

page = BeautifulSoup(self._browser.submit_selected().text, "html.parser")
tr = page.find_all("tr", attrs={"class": "cor1_celula_forum"})
tr.extend(page.find_all("tr", attrs={"class": "cor2_celula_forum"}))
classes = [
{
"name": _class_search_subject_name(x),
"code": _class_search_subject_id(x),
"class": _class_search_class_id(x),
"semester": _class_search_subject_semester(x),
"students": [
{
"name": s.name,
"student_id": s.student_id,
}
for s in self.students_from_class(
_class_search_subject_id(x),
_class_search_class_id(x),
_class_search_subject_semester(x),
)
],
}
for x in tr
]
return classes

def total_students(self, program_id):
if not self._logged_in:
raise NotLoggedIn()
Expand Down

0 comments on commit cb6f9a4

Please sign in to comment.