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)
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"])
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)
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"])
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!"})
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
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)
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]})
def load_user(user_id): db_sess = db_session.create_session() return db_sess.query(User).get(user_id)