예제 #1
0
class Course(db.Document):
    # dept name might contain spaces
    dept = db.StringField(max_length=10)
    # cid in format ^[0-9]+[A-Z]*$
    cid = db.StringField(max_length=10)
    # name is a brief introduction to the course
    name = db.StringField(max_length=60)

    # a list of lists
    # each nested list contains a reference to a Course object
    prereq = db.ListField(db.ListField(db.ReferenceField('Course',
                                                         dbref=True)),
                          default=[])
    units = db.FloatField(default=4)
    quarters = db.ListField(db.ReferenceField('Quarter', dbref=True),
                            default=[])
    upperOnly = db.BooleanField(default=False)
    # for sample data in db right now, the pub_date is not correct
    # change the way we load data will fix this problem
    pub_date = db.DateTimeField(default=datetime.now)
    priority = db.IntField(default=0, min_value=0, max_value=5)
    meta = {
        'indexes': [('dept', 'cid')  # compound index
                    ]
    }

    def __unicode__(self):
        return self.dept + " " + self.cid
예제 #2
0
class Quarter(db.Document):
    name = db.StringField(max_length=40)
    code = db.IntField(min_value=0)
    YearTermCode = db.StringField(max_length=8)

    def __unicode__(self):
        return self.name
예제 #3
0
class User(db.Document, UserMixin):
    email = db.StringField(max_length=255)
    password = db.StringField(max_length=255)
    active = db.BooleanField(default=True)
    confirmed_at = db.DateTimeField(default=datetime.now())
    roles = db.ListField(db.ReferenceField(Role), default=[])

    def __unicode__(self):
        return self.email
예제 #4
0
class Requirement(db.Document):
    name = db.StringField(max_length=60)
    sub_reqs = db.ListField(db.EmbeddedDocumentField(SubReq))

    meta = {
        'indexes': [
            'name'  # compound idnex
        ]
    }

    def __unicode__(self):
        return self.name
예제 #5
0
class Major(db.Document):
    name = db.StringField(max_length=60, default="UNIVERSAL")
    requirements = db.ListField(db.ReferenceField(Requirement, dbref=True))
    # used to be DictField for better performance,
    # but admin doesn't work well with complex structure.
    specs = db.ListField(field=db.ReferenceField(Requirement, dbref=True))
    meta = {'indexes': ['name']}

    def prepareScheduling(self, spec=[], ge_filter={}):
        G, R, R_detail = dict(), dict(), dict()
        req = list(self.requirements)
        if len(spec):
            spec_req = [x for x in self.specs if x in spec]
            req.extend(spec_req)
            print('spec', spec_req)
        print('req', req)

        for r in req:
            R[r.name] = list()
            R_detail[r.name] = list()

            for subr in r.sub_reqs:
                c_set = set()

                # for ge requirement, simply apply the missing courses number as requirement number
                if r.name in ge_filter:
                    R[r.name].append(ge_filter[r.name])
                # otherwise, apply it as it is
                else:
                    R[r.name].append(subr.req_num)

                for c in subr.req_list:
                    c_name = c.dept + " " + c.cid
                    c_set.add(c_name)
                    G[c_name] = cs.Course(name=c.name,
                                          units=c.units,
                                          quarter_codes=convert_quarters(
                                              c.quarters),
                                          prereq=convert_prereq(c.prereq),
                                          is_upper_only=c.upperOnly)
                R_detail[r.name].append(c_set)
        return G, R, R_detail

    def __unicode__(self):
        return self.name
예제 #6
0
class Role(db.Document, RoleMixin):
    name = db.StringField(max_length=80, unique=True)
    description = db.StringField(max_length=255)

    def __unicode__(self):
        return self.name