def get_task(id, user):
    db_sess = db_session.create_session()
    
    task = db_sess.query(Task).filter(Task.id == id,
                                      Task.user_id == user.id).first()
    
    return task
def get_task(user, task_id):
    abort_if_not_found(user, task_id)
    session = db_session.create_session()
    task = session.query(Task).filter(Task.user_id == user.id,
                                      Task.id == task_id).first()

    return jsonify({'tasks': TaskSchema().dump(task)})
def abort_if_not_found(user, task_id):
    session = db_session.create_session()
    tasks = session.query(Task).filter(Task.id == task_id,
                                       Task.user_id == user.id).first()

    if not tasks:
        return abort(404, f"Task with id {task_id} was not found!")
    def decorated(*args, **kwargs):
        token = None

        # При наличии токена в запросе, получаем его
        if "x-access-token" in request.headers:
            token = request.headers["x-access-token"]

            if not token:
                return make_response(jsonify({"message": "Token is missing!"}),
                                     401)

        try:
            # Декодируем токен и делаем запрос в базу данных,
            # чтобы получить пользователя с этим id
            data = jwt.decode(token, Config.SECRET_KEY, algorithms=["HS256"])
            db_sess = db_session.create_session()

            user = db_sess.query(User).filter(User.id == data["id"]).first()

            if not user:
                raise Exception
        except:
            return make_response(jsonify({"message": "Incorrect token!"}), 401)

        # Возвращаем текущего пользователя и аргументы, переданные в функцию
        return f(user, *args, **kwargs)
Exemple #5
0
def update_account():
    form = UpdateAccountForm()
    session["url"] = url_for("users.update_account")

    # Если пользователь получает данные, то заполняем форму текующими данными о профиле
    if request.method == "GET":
        form.name.data = current_user.name
        form.email.data = current_user.email

    # Если форма готова к отправке, обновляем информацию на актульную
    if form.validate_on_submit():
        user = get_user(user_id=current_user.id)
        db_sess = db_session.create_session()

        # Если пользователь заменил фотографию - меняем ее
        if form.image_file.data:
            picture = save_picture(form.image_file.data)
            user.image_file = picture

        user.name = form.name.data.strip()
        user.email = form.email.data.strip()

        db_sess.commit()
        flash("Account info has been successfully changed!", "success")
        # Перенаправляет на странице профиля
        return redirect(url_for("users.dashboard"))
    # Получаем путь к фотографии пользователя
    image_file = url_for('static',
                         filename='profile_pics/' + current_user.image_file)

    return render_template('update_account.html',
                           title='Edit Account Info',
                           form=form)
    def validate_email(self, email):
        db_sess = db_session.create_session()
        user = db_sess.query(User).filter(User.email == email.data).first()

        if user:
            raise ValidationError(
                'That email is taken. Please choose a different one.')
def login():
    auth = request.authorization
    db_sess = db_session.create_session()

    if not auth or not auth.username or not auth.password:
        return make_response(jsonify({"message": "Could not verify"}), 401)

    user = db_sess.query(User).filter(User.email == auth.username).first()

    if not user:
        return make_response(jsonify({"message": "Could not verify"}), 401)

    # Если пользователь зарегистрирован и ввел правильные данные,
    # генирируем уникальный токен и отправляем в теле ответа
    if user.check_password(auth.password):
        token = jwt.encode(
            {
                "id": user.id,
                "exp":
                datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
            },
            Config.SECRET_KEY,
            algorithm="HS256")

        return jsonify({"token": token})

    return make_response(jsonify({"message": "Could not verify"}), 401)
def create_task(user):
    session = db_session.create_session()

    data = request.get_json()
    title, priority, date = data["title"], data["priority"], data[
        "scheduled_date"]

    if not isinstance(priority, int) or priority not in range(1, 5):
        return make_response(
            jsonify({
                "message":
                "Priority field must be an integer in range from 1 to 4!"
            }), 400)

    try:
        date = datetime.datetime.strptime(date, "%Y-%m-%d")
    except:
        return make_response(
            jsonify({"message": "time data do not match format: YYYY-MM-DD"}),
            400)

    # Привести к единому формату даты
    task = Task(title=title,
                priority=priority,
                scheduled_date=date,
                user_id=user.id)
    session.add(task)
    session.commit()

    return jsonify({'message': 'New task created!'})
def get_all_completed(user):
    db_sess = db_session.create_session()

    # Запрашиваем завершенные задачи за все время
    tasks = db_sess.query(func.count(Task.id)).filter(
        Task.user_id == user.id, Task.done == 1).first()[0]

    return tasks
def delete_task(task_id):
    db_sess = db_session.create_session()
    task = get_task(task_id, current_user)

    db_sess.delete(task)
    db_sess.commit()
    flash("Task has been deleted!", "danger")
    # Перенаправляет на прошлую страницу
    return redirect(session["url"])
Exemple #11
0
def add_friend(friend_id):
    db_sess = db_session.create_session()
    friend = get_user(user_id=friend_id)
    user = get_user(user_id=current_user.id)

    user.add_friend(friend)
    db_sess.commit()
    flash("Request has been sent!", "success")
    return redirect(session["url"])
def delete_task(user, task_id):
    abort_if_not_found(user, task_id)
    session = db_session.create_session()
    task = session.query(Task).filter(Task.id == task_id,
                                      Task.user_id == user.id).first()

    session.delete(task)
    session.commit()

    return make_response(jsonify({"message": "Task has been deleted!"}), 200)
Exemple #13
0
def remove_friend(friend_id):
    db_sess = db_session.create_session()
    friend = get_user(user_id=friend_id)
    user = get_user(user_id=current_user.id)

    user.unfriend(friend)
    db_sess.commit()
    flash("Friend deleted!", "success")

    return redirect(session["url"])
Exemple #14
0
def get_pending(user):
    db_sess = db_session.create_session()

    # Возвращает список отношений, в которых пользователю была отправлена заявка
    pending = db_sess.query(friendship.c.user_id).filter(friendship.c.friend_id==user.id).all()
    
    # Преобразуем результат
    result = [get_user(user_id=user[0]) for user in pending]

    return result
def complete_task(user, task_id):
    abort_if_not_found(user, task_id)
    session = db_session.create_session()
    task = session.query(Task).filter(Task.id == task_id,
                                      Task.user_id == user.id).first()

    task.done = True
    task.completed_date = datetime.datetime.now().date()
    session.commit()

    return jsonify({"message": "Task has been completed!"})
Exemple #16
0
def get_user(user_id=None, email=None, friend_code=None):
    db_sess = db_session.create_session()

    if email:
        user = db_sess.query(User).filter(User.email == email).first()
    elif friend_code:
        user = db_sess.query(User).filter(User.friend_code == friend_code).first()
    else:
        user = db_sess.query(User).filter(User.id == user_id).first()

    return user
def get_weekly_completed_tasks(user, last_week_date):
    db_sess = db_session.create_session()

    # Запрашиваем количество выполненных задач за последнуюю неделю
    tasks = db_sess.query(Task.completed_date, func.count(Task.id)).\
        filter(Task.user_id == user.id,
               Task.completed_date.between(last_week_date, datetime.now().date())).\
        group_by(Task.completed_date).\
        order_by(Task.completed_date.desc()).all()

    return tasks
def complete_task():
    task_id = int(request.get_json())  # Получаем id, выполненной задачи

    db_sess = db_session.create_session()
    task = get_task(task_id, current_user)

    task.done = True
    task.completed_date = datetime.now().date()
    db_sess.commit()

    # Возвращаем адрес страницы, на которую надо будет отправить пользователя
    response = {"url": session["url"]}
    flash("Task has been completed!", "success")
    return make_response(jsonify(response), 200)
def add_task(form, user):
    db_sess = db_session.create_session()
    # Изменяем дату формы на выбранную в календаре
    date = request.form.get("calendar")
    form.scheduled_date.data = date


    tasks = Task()
    tasks.title = form.title.data.strip()
    tasks.priority = form.priority.data
    tasks.scheduled_date = datetime.strptime(form.scheduled_date.data, "%Y-%m-%d")
    tasks.user_id = user.id
    db_sess.add(tasks)
    db_sess.commit()
def get_upcoming_tasks(user, searchbox=None):
    db_sess = db_session.create_session()

    if searchbox:
        # Запрашиваем задачи, название которых входит в поисковую строку
        tasks = db_sess.query(Task).filter(Task.user_id == user.id,
                                           Task.title.like(f"%{searchbox}%"),
                                           Task.done == 0).order_by(Task.scheduled_date, Task.priority, Task.title).all()
    else:
        # Запрашиваем все задачи, добавленный этим пользователем,
        # отсортированные по приоритетности, алфавиту и дате
        tasks = db_sess.query(Task).filter(Task.user_id == user.id, Task.done == 0).\
            order_by(Task.scheduled_date, Task.priority, Task.title).all()

    return tasks
Exemple #21
0
def create_user(name, email, password, profile_image):
    db_sess = db_session.create_session()

    # Генерируем уникальный код пользователя для добавления в друзья 
    code, user_friend_codes = random_with_N_digits(8), db_sess.query(User.friend_code).all()
    codes = [int(code[0]) for code in user_friend_codes] if user_friend_codes else []

    while code in codes:
        code = random_with_N_digits(8)

    user = User(name=name, 
                email=email,
                image_file=profile_image,
                friend_code=code)
    user.set_password(password)
    db_sess.add(user)
    db_sess.commit()
def get_today_tasks(user, searchbox=None):
    db_sess = db_session.create_session()

    # Если пользователь ввел запрос в поисковую строку
    if searchbox:
        # Запрашиваем задачи, название которых входит в поисковую строку
        tasks = db_sess.query(Task).filter(Task.user_id == user.id,
                                           Task.scheduled_date == datetime.now().date(),
                                           Task.title.like(f"%{searchbox}%"),
                                           Task.done == 0).order_by(Task.priority, Task.title).all()
    else:
        # Запрашиваем только задачи, созданные этим пользователем
        # и дата которых совпадает с сегодняшним днем,
        # отсортированные по приоритету и алфавиту
        tasks = db_sess.query(Task).filter(Task.user_id == user.id,
                                        Task.scheduled_date == datetime.now().date(), Task.done == 0).order_by(Task.priority, Task.title).all()

    return tasks
def edit_task(task_id):
    # Если пользователь получает данные, то заполняем форму текующими данными о задаче
    if request.method == "GET":
        task = get_task(task_id, current_user)

        return make_response(jsonify(TaskSchema().dump(task)), 200)

    # Если пользователь отправил обновленные данные
    if request.method == "POST":
        data = request.form
        db_sess = db_session.create_session()
        task = get_task(task_id, current_user)

        if task:
            task.title = data.get("title")
            task.priority = data.get("priority")
            task.scheduled_date = datetime.strptime(data.get("calendar"),
                                                    "%Y-%m-%d")
            db_sess.commit()
            flash("Task has been successfully edited!", "success")
            return redirect(session["url"])
        else:
            abort(404)
Exemple #24
0
from todolist import db_session
from todolist.db_user_queries import create_user, get_pending
from todolist.models import User


db_session.global_init("todolist/db/TDLDataBase.db")
db_sess = db_session.create_session()

# print(db_sess.query(User.friend_code).all())
user1 = db_sess.query(User).filter(User.id==1).first()
user2 = db_sess.query(User).filter(User.id==2).first()

# print(user1.are_friends(user2))
# print(user1.are_friends(user2))
user2.add_friend(user1)
db_sess.commit()
def get_tasks(user):
    session = db_session.create_session()
    tasks = session.query(Task).filter(Task.user_id == user.id).all()

    return jsonify({'tasks': [TaskSchema().dump(item) for item in tasks]})
Exemple #26
0
def load_user(user_id):
    db_sess = db_session.create_session()
    return db_sess.query(User).get(user_id)