def __init__(self):
        current_subject = Subject().get_current()
        if current_subject is None:
            logging.error("Cannot find current subject!!!")

        now = datetime.datetime.now()
        if now <= current_subject.active_to:
            return

        # invalidate currect subject
        current_subject.is_current = False

        # new subject to pick
        new_subject = (
            Subject.all().filter("active_from =", datetime.datetime(now.year, now.month, now.day, 0, 0, 0)).get()
        )
        if new_subject is None:
            logging.error("Cannot find next subject!!!")
        new_subject.is_current = True

        s = SaveState().get_by_k("recalc_subject_id")
        if s is not None and s.v != "0":
            logging.error(
                "Cannot start recalculating new subject (%s), because old one (%s) is still active!!!"
                % (new_subject.key().id(), current_subject.key().id())
            )
            return

        # ready to go!
        current_subject.put()
        new_subject.put()

        s = SaveState().get_by_k("recalc_subject_id")
        if s is None:
            s = SaveState()
            s.k = "recalc_subject_id"
            s.v = str(current_subject.key().id())
            s.put()
        else:
            s.v = str(current_subject.key().id())
            s.put()

        s = SaveState().get_by_k("recalc_action")
        if s is None:
            s = SaveState()
            s.k = "recalc_action"
            s.v = "points"
            s.put()
        else:
            s.v = "points"
            s.put()
    def post(self):
        if self.request.get('name'):
            s = Subject()
            s.name = self.request.get('name')
            if len(self.request.get('tags')) == 0 or self.request.get('tags') == '[]':
                s.tags = []
            else:
                s.tags = self.request.get('tags').split(',')
            # active from
            f_y, f_m, f_d = self.request.get('active_from').split('-')
            s.active_from = datetime.datetime(int(f_y), int(f_m), int(f_d), 0, 0, 0)
            # active to
            t_y, t_m, t_d = self.request.get('active_to').split('-')
            s.active_to = datetime.datetime(int(t_y), int(t_m), int(t_d), 23, 59, 59)
            s.is_current = False
            s.put()

        self.redirect('/admin/subject')