add course dataclass
This commit is contained in:
4 files changed
+74
-59
No files matched your search
+35
-26
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python3.11
|
||||
import json
|
||||
import csv
|
||||
from dataclasses import dataclass
|
||||
from dataclasses import dataclass, asdict
|
||||
from app.util.estimateGrade import getGrade
|
||||
|
||||
@dataclass
|
||||
@@ -10,45 +10,54 @@ class Request:
|
||||
Description: str
|
||||
Alt: bool
|
||||
|
||||
@dataclass
|
||||
class Course:
|
||||
CrsNo: str
|
||||
Description: str
|
||||
Grade: int
|
||||
Requests: int = 0 # number of requests for this
|
||||
Sem1: int = 0 # number of classes running in sem1
|
||||
Sem2: int = 0 # number of classes running in sem2
|
||||
Total: int = 0 # total number of classes running
|
||||
Seats: int = 0 # total number of seats
|
||||
Occupied: int = 0 # number of occupied seats
|
||||
|
||||
def coursesToDict(courses: dict[str: Course]) -> dict[str: dict]:
|
||||
return [asdict(courses[c]) for c in courses]
|
||||
|
||||
# Get all requested courses from data
|
||||
def getCourses(
|
||||
data_dir: str,
|
||||
log: int = False,
|
||||
log_dir: str = './output/raw/courses.json',
|
||||
) -> dict[dict[str: any]]:
|
||||
) -> dict[str: Course]:
|
||||
|
||||
courses = {}
|
||||
courses: dict[str: Course] = {}
|
||||
|
||||
with open(data_dir, newline='') as csvfile:
|
||||
reader = csv.DictReader(csvfile)
|
||||
for row in reader:
|
||||
exists = False
|
||||
for course in courses:
|
||||
exists = True if courses[course]["CrsNo"] == row["CrsNo"] else False
|
||||
exists = True if courses[course].CrsNo == row["CrsNo"] else False
|
||||
if exists: break
|
||||
if not exists:
|
||||
grade = getGrade(row["CrsNo"], row["Description"])
|
||||
courses[row["CrsNo"]] = {
|
||||
"CrsNo": row["CrsNo"],
|
||||
"Description": row["Description"],
|
||||
"Grade": grade,
|
||||
"Requests": 0,
|
||||
"Sem1": 0, # number of classes running in sem1
|
||||
"Sem2": 0, # number of classes running in sem2
|
||||
"Total": 0, # total number of classes running
|
||||
"Seats": 0, # total number of seats
|
||||
"Occupied": 0, # number of occupied seats
|
||||
}
|
||||
courses[row["CrsNo"]] = Course(
|
||||
row["CrsNo"],
|
||||
row["Description"],
|
||||
grade
|
||||
)
|
||||
|
||||
if log:
|
||||
with open(log_dir, "w") as outfile:
|
||||
json.dump(courses, outfile, indent=2)
|
||||
json.dump(coursesToDict(courses), outfile, indent=2)
|
||||
|
||||
return courses
|
||||
|
||||
# Writes all course data to csv file
|
||||
def writeCoursesToCSV(
|
||||
courses: dict,
|
||||
courses: dict[str: Course],
|
||||
output_dir: str = './output/raw/csv/courses.csv'
|
||||
) -> None:
|
||||
with open(output_dir, 'w') as file:
|
||||
@@ -69,14 +78,14 @@ def writeCoursesToCSV(
|
||||
|
||||
for course in courses:
|
||||
courseData = (
|
||||
courses[course]["CrsNo"],
|
||||
courses[course]["Description"],
|
||||
courses[course]["Grade"],
|
||||
courses[course]["Requests"],
|
||||
courses[course]["Sem1"],
|
||||
courses[course]["Sem2"],
|
||||
courses[course]["Total"],
|
||||
courses[course]["Seats"],
|
||||
courses[course]["Occupied"]
|
||||
courses[course].CrsNo,
|
||||
courses[course].Description,
|
||||
courses[course].Grade,
|
||||
courses[course].Requests,
|
||||
courses[course].Sem1,
|
||||
courses[course].Sem2,
|
||||
courses[course].Total,
|
||||
courses[course].Seats,
|
||||
courses[course].Occupied
|
||||
)
|
||||
writer.writerow(courseData)
|
||||
Reference in new issue
Block a user