update: file organization, README; fix: showing averages with grades; add: Makefile

This commit is contained in:
mnjx
2023-04-13 12:36:08 +02:00
parent 80fbd8b946
commit 90568dfddd
13 changed files with 571 additions and 514 deletions
+151
View File
@@ -0,0 +1,151 @@
from lib import networking as nw
from bs4 import BeautifulSoup
not_login = 0
F_not_anymore = 0
def fetch_locally() -> list:
global not_login, F_not_anymore
if not_login == 1 and F_not_anymore == 0:
F_not_anymore = 1
not_login = 0
print("Could not sign in (you may have entered invalid login credentials)")
print("Fetching locally\n")
grades = grades_from_file()
return grades
def get_avg(grades: list) -> str:
if len(grades) < 1:
return ""
sum_ = 0
for i in grades:
sum_ += int(i)
avg = round(sum_ / len(grades), 2)
avg = str(avg)
if len(avg) == 3:
avg += "0"
return avg
def get_grades(url: str):
html = nw.get_html_from(url)
soup = BeautifulSoup(html.text, "lxml")
rows = soup.find("table", id="G_ctl00xmainxCCADynamicUWGrid").find_all("tr")
for i in range(3):
r = soup.find("table", id="G_ctl00xmainxCCADynamicUWGrid").find("tr")
r.decompose()
grades = []
for i in range(1, len(rows)):
if rows[i].find("td") is not None:
subject = rows[i].find("td").text
temp_dict = {}
temp_dict["SUBJECT"] = subject
cell = rows[i].find_all("span", class_="VHVysl")
temp = []
for j in range(len(cell)):
temp.append(cell[j].text)
temp_dict["GRADES"] = temp
grades.append(temp_dict)
return grades
def show_grades():
if nw.is_connected() == True:
grades = get_grades("/SOL/App/Hodnoceni/KZH001_HodnVypisStud.aspx")
grades_to_file(grades)
else:
grades = grades_from_file()
whitespace = ""
max_len_of_subject = 0
subjects = [grades[j]["SUBJECT"] for j in range(len(grades))]
for i in subjects:
if len(i) > max_len_of_subject:
max_len_of_subject = len(i)
max_len_of_subject += 1
print("--------")
print(" Známky ")
print("--------\n")
if grades == []:
print("N/A\n")
import os
if os.path.exists("src/lib/data/grades.csv"):
os.remove("src/lib/data/grades.csv")
return
for i in range(len(grades)):
if grades[i]["GRADES"] != []:
whitespace = " " * (max_len_of_subject - len(grades[i]["SUBJECT"]))
print(grades[i]["SUBJECT"] + whitespace + "|", end=" ")
print(get_avg(grades[i]["GRADES"]), "|", end=" ")
print("".join([grades[i]["GRADES"][j]+" " for j in range(len(grades[i]["GRADES"]))]), end=" ")
print("")
print("")
def grades_to_file(grades=None): # !!! make sure the format of the grades list is saved correctly !!!
import csv
if grades is None:
try:
grades = get_grades("/SOL/App/Hodnoceni/KZH001_HodnVypisStud.aspx")
except Exception:
print("An error occured, you probably can't access the internet right now")
return
data = []
with open("src/lib/data/grades.csv", mode="w", newline="") as f:
for i in range(len(grades)):
temp = {}
temp["SUBJECT"] = grades[i]["SUBJECT"]
temp_grades = []
for j in range(len(grades[i]["GRADES"])):
temp_grades.append(grades[i]["GRADES"][j])
temp["GRADES"] = temp_grades
data.append(temp)
writer = csv.writer(f)
for row in data:
_row = []
_row.append(row["SUBJECT"])
for i in row["GRADES"]:
_row.append(i)
writer.writerow(_row)
def grades_from_file() -> list:
import csv
grades = []
try:
with open("src/lib/data/grades.csv", mode="r") as f:
reader = csv.reader(f)
rows = []
for row in reader:
rows.append(row)
for row in range(len(rows)):
temp = {}
temp["SUBJECT"] = rows[row][0]
temp_lst = []
for i in range(1, len(rows[row])):
temp_lst.append(rows[row][i])
temp["GRADES"] = temp_lst
grades.append(temp)
except FileNotFoundError:
print("No grades.csv file found\n")
return grades