Beispiel #1
0
def create_teacher():
    new = Teacher()
    try:
        new.name = request.form["key"]
        new.age = request.form["age"]
        new.school = request.form["school"]
        new.subject = request.form["phone_address"]
        new.ave_stars = request.form["ave_stars"]
        new.character = request.form["character"]
        new.comment = request.form["comment"]
    except KeyError:
        return jsonify({"result": "fail", "description": "create_teacher"}), 400

    new.ave_stars = None
    new.photo_url = request.args.get("photo_url", None)

    db.session.add(new)
    db.session.commit()
    return jsonify({"result": "success", "description": "create_teacher"})
    def post(self):
        teacher_name = self.request.get("teacher_name")
        department = int(self.request.get("department"))
        teaching_time = self.request.get("teaching_time")

        # sun = self.request.get('sun').replace(' ', '').split(',')
        # mon = self.request.get('mon')
        # tue = self.request.get('tue')
        # wed = self.request.get('wed')
        # thu = self.request.get('thu')
        # fri = self.request.get('fri')
        # class_courses = self.request.get('class_courses')

        teacher = Teacher(
            teacher_name=teacher_name,
            department=department,
            teaching_time=teaching_time,
            # class_courses = class_courses
        )

        teacher.put()
        self.response.write("Sucessfully")
 def getTeacher(self, TeacherID):
     return [
         Teacher(tuple) for tuple in self._db.execute(
             """select * from Teacher where TeacherID={id};""".format(
                 id=TeacherID)).fetchall()
     ][0]
 def getTeachers(self):
     return [
         Teacher(tuple)
         for tuple in self._db.execute("select * from Teacher;").fetchall()
     ]
    def get(self):
        teachers = db.GqlQuery("Select * from Teacher")
        teachers_timing = {}
        for teacher in teachers:
            teachers_timing[teacher.key().id()] = eval(teacher.teaching_time)

        print teachers_timing
        classCourses = db.GqlQuery("Select * from ClassCourse")

        classes = {}
        for classCourse in classCourses:
            classes[classCourse.key().id()] = {
                "routine": {"sunday": [], "monday": [], "tuesday": [], "wednesday": [], "thursday": [], "friday": []},
                "class_distribution": {},
                "details": {"faculty": classCourse.faculty, "year": classCourse.year, "semester": classCourse.semester},
            }

            eCourse = eval(classCourse.course)
            for course in eCourse:
                # l = Teacher.get_by_id(eCourse[course])
                l = {
                    "distribution": eval(Course.get_by_key_name(course).class_distribution),
                    "teacher": eCourse[course],
                    "teaching_time": eval(Teacher.get_by_id(eCourse[course]).teaching_time),
                    "possibilities": {
                        "sunday": {},
                        "monday": {},
                        "tuesday": {},
                        "wednesday": {},
                        "thursday": {},
                        "friday": {},
                    },
                }
                # print l
                classes[classCourse.key().id()]["class_distribution"][course] = l

        for class_ in classes:
            class_distribution = classes[class_]["class_distribution"]
            routine = classes[class_]["routine"]
            for subject in class_distribution:
                distribution = class_distribution[subject]["distribution"]
                for i in range(4, 0, -1):
                    if distribution[str(i)] != 0:
                        # print "found " + str(i) + " " + str(distribution[str(i)]) + subject
                        findTeachingTime(
                            subject=subject,
                            available_teaching_time=class_distribution[subject]["teaching_time"],
                            routine=routine,
                            class_duration=i,
                            total_classes=distribution[str(i)],
                            possibilities=class_distribution[subject]["possibilities"],
                        )

        total_tries = 0
        original_classes = copy.deepcopy(classes)
        inner_fail = True
        while total_tries < 50 and inner_fail == True:
            inner_fail = False
            total_tries += 1
            classes = copy.deepcopy(original_classes)
            # classes =
            for class_ in classes:
                class_distribution = classes[class_]["class_distribution"]
                routine = classes[class_]["routine"]
                for subject in class_distribution:
                    distribution = class_distribution[subject]["distribution"]
                    for i in range(4, 0, -1):
                        tries = 0
                        while distribution[str(i)] != 0:
                            if tries > 10:
                                print "giving up"
                                inner_fail = True
                                break

                            try:
                                randomday, randomtime = get_random_day_for_duration(
                                    class_distribution[subject]["possibilities"], i, routine
                                )
                            except:
                                tries += 1
                                continue
                            t = Teacher.get_by_id(class_distribution[subject]["teacher"])
                            routine[randomday].append(
                                {
                                    "subject": subject,
                                    "teacher": {"id": t.key().id(), "name": t.teacher_name},
                                    "timing": copy.deepcopy(randomtime),
                                }
                            )
                            class_distribution[subject]["possibilities"][randomday] = {}
                            # print "--"
                            print routine

                            distribution[str(i)] -= 1  # reduce total classes
        self.response.headers["Content-Type"] = "application/json"
        # self.write(json.dumps(original_classes,sort_keys=True, indent=4))
        self.write(json.dumps(classes, sort_keys=True, indent=4))