Files
school-management-api/test/tinker.py
T
2022-02-19 16:31:18 -08:00

132 lines
4.4 KiB
Python

#!/usr/bin/python3
import random
from courses import courses, activeCourses
'''
I will be using python to test and
develop course selection / schedule
generation
this is honestly terrible code but
this is not an easy task for me to
do
'''
'''
schedule example:
schedule: {
"semester1": {
"block1": "className",
"block2": "className",
"block3": "className",
"block4": "className"
},
"semester2": {
"block1": "className",
"block2": "className",
"block3": "className",
"block4": "className"
}
}
'''
'''
running example:
running: {
"semester1": {
"block1": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}},
"block2": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}},
"block3": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}},
"block4": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}}
},
"semester2": {
"block1": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}},
"block2": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}},
"block3": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}},
"block4": {classCode:{"className":name,"remaining":number},classCode:{"className":name,"remaining":number}}
]
}
'''
minReq, classCap, blockClassLimit = 18, 30, 15
mockStudents = []
running = []
# Generate n students for mock data
def generateMockStudents(n):
for _ in range(n):
newStudent = {
"name": "someName",
"requests": [],
"schedule": {}
}
# Get list of random class choices with no repeats
# 8 primary choices, 2 secondary choices
courseSelection = random.sample(range(0, len(courses), 10))
for courseNum in courseSelection:
newStudent["requests"] = courses[courseNum]["code"]
mockStudents.append(newStudent)
def generateSchedule():
# Collect data and calculate schedules
for student in mockStudents:
# Tally class request
for request in student["requests"]:
courses[request]["totalrequests"] += 1
courses[request]["studentindexes"].append(i)
# Add course to active list if enough requests
if courses[request]["totalRequests"] > minReq and courses[request] not in activeCourses: activeCourses.append(courses[request])
for student in mockStudents:
blockIndex = 0
semesterIndex = 0
for i in range(len(student["requests"])-2): # Subtract last 2 classes as they are alternatives
currentClass = student
if student["requests"][i] in activeCourses:
pass
elif student["requests"][i] not in activeCourses:
# Get first alternative
student["requests"][len(student["requests"])-2]
# for course in courses:
# blockIndex = 0
# semesterIndex = 0
# if course["totalrequests"] > minReq:
# # Create course query
# q = {
# "name": course["name"],
# "remaining": classCap
# }
# # Generate x amount of courses based on requests number
# for j in range(len(course["studentindexes"])):
# classRunCount = course["totalrequests"] % 30
# if ((course["totalrequests"] / 30) - classRunCount) > minReq:
# pass
# # Add one student to class
# q["remaining"] -= 1
# if q["remaining"] == 0 and (len(course["studentindexes"])-classCap) > minReq:
# if course["code"] in running[semesterIndex][blockIndex]:
# blockIndex += 1
# # courseIndex = list(running[semesterIndex][blockIndex]).index(course["code"])
# running[semesterIndex][blockIndex][course["code"]] = q
# mockStudents[i]["schedule"][f"semester{semesterIndex+1}"][f"block{blockIndex+1}"] = course["name"]
# course["totalRequests"] -= minReq
# while True:
# if q in running["semester1"]["block1"]:
# running["semester1"][blockIndex][running["semester1"]["block1"].index(q)][]
# else:
# running["semester1"][blockIndex].append(q)
# for studentIndex in course["studentindexs"]:
# if studentIndex == i:
# pass
generateMockStudents(400)