예제 #1
0
def save_todo(context: 'micro_context',
              description: str,
              done: datetime=None,
              todo_id: int=None) -> dict:
    '''
        creates or updates a todo
        broadcasts: SAVED_TODO
        returns: {
            id: int,
            person_id: int,
            description: str,
            created: datetime,
            done: datetime
        }
    '''
    with context.session as session:
        user = context.get_user(session)
        assert user, 'login required'
        if todo_id:
            todo = session.query(model.ToDo).get(todo_id)
        else:
            todo = model.ToDo(person=user,
                              created=datetime.datetime.now())
            session.add(todo)
        todo.description = description
        todo.done = parse_date(done)
        session.commit()
        return context.broadcast("SAVED_TODO",
                                 todo_view(todo))