def getpostreqnode(name): name = name.upper() #if name in CourseMaster().potrees: # return CourseMaster().getpotree(name) node = Node(name) if name not in CourseMaster().postreqs: CourseMaster().loadpostreqs(name) for course in CourseMaster().postreqs[name]: print "\033[K", "\r", "loading: " + name, stdout.flush() node.addchild(getpostreqnode(course), "or") CourseMaster().setpotree(node, name) return node
def getprereqnode(name): name = name.upper() if name in CourseMaster().trees: return CourseMaster().gettree(name) try: parsed = parse_prereq(CourseMaster().getprereqs(name)) evaled = eval(tree_sub(parsed.strip(","))) evaled.setname(name) CourseMaster().settree(evaled, name) return evaled except ParseException: CourseMaster().settree(Node(name), name) return Node(name)
def loadpotree(self): try: self.potree = CourseMaster().getpotree(self.name) except MissingException: self.potree = getpostreqnode(self.name) CourseMaster().setpotree(self.name, self.potree)
def loadterm(self): self.term = CourseMaster().getterm(self.name)
def loaddescription(self): self.description = CourseMaster().getdescription(self.name)
def loadtitle(self): self.title = CourseMaster().gettitle(self.name)
def loadpostreqs(self): self.postreqs = CourseMaster().getpostreqs(self.name)
def loadcoreqs(self): self.coreqs = CourseMaster().getcoreqs(self.name)
def loadprereqs(self): self.prereqs = CourseMaster().getprereqs(self.name)
class Course(object): def __init__(self, name, lazy=True): self.name = name self.prereqs = None self.coreqs = None self.postreqs = None self.description = None self.title = None self.tree = None self.potree = None self.term = None self.delay = 0 if not lazy: self.loadinfo() def loadinfo(self): self.loadprereqs() self.loadcoreqs() self.loadtitle() self.loaddescription() self.loadpostreqs() self.loadterm() def meetsprereqs(self, courses=courses): meets = True if self.prereqs == None: self.loadprereqs() try: meets = eval(sub_prereq(parse_prereq(self.prereqs).strip(",").replace(",", ", "), courses)) >= 50 except ParseException: meets = True return meets def completed(self): return self.name in courses def loadprereqs(self): self.prereqs = CourseMaster().getprereqs(self.name) def loadcoreqs(self): self.coreqs = CourseMaster().getcoreqs(self.name) def loadpostreqs(self): self.postreqs = CourseMaster().getpostreqs(self.name) def loadtitle(self): self.title = CourseMaster().gettitle(self.name) def loaddescription(self): self.description = CourseMaster().getdescription(self.name) def loadterm(self): self.term = CourseMaster().getterm(self.name) def loadtree(self): try: self.tree = CourseMaster().gettree(self.name) except MissingException: self.tree = getprereqnode(self.name) CourseMaster().settree(self.name, self.tree) def loadpotree(self): try: self.potree = CourseMaster().getpotree(self.name) except MissingException: self.potree = getpostreqnode(self.name) CourseMaster().setpotree(self.name, self.potree) def printtree(self,year): try: self.tree.printtree(year=year) except TypeError: print "Tree unavailable." def printpotree(self): try: self.potree.printtree() except TypeError: print "Tree unavailable." def print_info(self): print self.title + ":" print self.description self.print_prereqs() print "Co-reqs: " + self.coreqs print "Post-reqs: " + ", ".join(self.postreqs) def print_prereqs(self): print "Pre-reqs: " + self.prereqs if self.completed(): print colored("You have completed this course", 'green') elif self.meetsprereqs(): print colored("You have the required pre-reqs", 'blue') else: print colored("You do not have the required pre-reqs", 'red') def print_term(self): if len(self.term) > 1: print "The following sections are available in the %s session:" % self.term[0] for t in self.term[1:]: print "Section available in term %s." % t else: print "No sections are available this session."