Ejemplo n.º 1
0
 def get(self):
     state = LearnerState(self.session)
     learner_error = state.learner_error()
     context = dict(show_prevnext=True,
                    boards=Board.all().order('priority'),
                    learner_error=learner_error,
                    state=state.as_string())
     jt = self.jinja_environment().get_template('learner.djt')
     self.response.write(jt.render(context))
Ejemplo n.º 2
0
    def persist_learner(self, name, board_id, date):
        """
        Check the learner info; if it's good, persist it in the session and App
        Engine storage.  This is a slight departure from previous MET versions
        b/c webapp2 sessions can't serialize datetime objects (!).
        """
        # perform sanity checks on the name, board, and date
        try:
            if len(name) == 0:
                raise
            board = Board.all().filter("priority =", int(board_id)).get().name
            if len(board) == 0:
                raise
            # date can be empty (typical usage) or contain a date string
            # ("cheater" mode)
            if date and not datetime.strptime(date, "%m/%d/%Y"):
                raise
        except:
            self.learner_error(True)
            msg = "name='%s' board_id='%s' date='%s'" % (name, board_id, date)
            logging.error(msg)
            raise InvalidLearnerException(msg)

        # persist the learner name and board in the session (to be used by the
        # certificate template)
        self.session['learner_name'] = name
        self.session['learner_board'] = board

        # if a date is supplied, use it, otherwise make sure it's clear so the
        # template can supply a default
        if date:
            self.session['learner_date'] = date
        elif 'learner_date' in self.session:
            del self.session['learner_date']

        # Persist the learner name, board, and a timestamp in appengine
        # storage.  The model includes its own timestamp.
        comp = Completion()
        comp.name = name
        comp.board = board
        comp.put()