def json_timetable(): if current_user.is_authenticated: start = request.args.get('start') end = request.args.get('end') result = [] db_sess = db_session.create_session() for obj in db_sess.query(Tables).filter( Tables.day.between(start, end), Tables.owner_id == current_user.id): print(type(obj.day)) a = { 'title': f' - {obj.title}', 'start': f"{obj.day}T{obj.time}", 'end': f"{obj.day}T{obj.time}", 'url': url_for('school_schedule_num', number=obj.id) } if obj.completed: a['color'] = 'green' else: a['color'] = 'red' result.append(a) return jsonify(result) else: return redirect("/welcome")
def get(self): db_sess = db_session.create_session() try: data = loads(request.get_data()) validate(instance=data, schema=LIST_SCHEMA) token = data.pop('token') user = db_sess.query(User).filter(User.token == token)[0] start = dt.strptime(data['start'], "%d-%m-%Y").date() end = dt.strptime(data['end'], "%d-%m-%Y").date() assert user except AssertionError: data = dumps({"error": "Неверный токен"}) response = Flask.response_class(status=403, mimetype="application/json", response=data) return response except Exception as e: data = dumps({"error": str(e)}) response = Flask.response_class(status=400, mimetype="application/json", response=data) return response response = list() for obj in db_sess.query(Tables).filter(Tables.day.between(start, end)): response.append(obj.to_dict()) print(response) response = dumps(response) response = Flask.response_class(status=400, mimetype="application/json", response=response) return response
def random_homework(update, context): user_name = update.message.chat.id db_sess = db_session.create_session() user = list(db_sess.query(User).filter(User.connection == user_name))[0] print(user.id) lst = list(user.table.filter(Tables.completed == False)) schedule = [] if len(lst) > 3: for i in sample(lst, 3): print(i.id) schedule.append([ InlineKeyboardButton(f"{i.title}", callback_data=f'{i.id} {user_name}') ]) elif 0 < len(lst) <= 3: for i in sample(lst, len(lst)): schedule.append([ InlineKeyboardButton(f"{i.title}", callback_data=f'{i.id} {user_name}') ]) if len(lst) == 0: update.message.reply_text("Тут пока-что пусто") else: keyboard = InlineKeyboardMarkup(schedule) update.message.reply_text("Выберите запись:", reply_markup=keyboard)
def connection(name): db_sess = db_session.create_session() for user in db_sess.query(User).filter(User.connection == str(name)): if user.connection == str(name): db_sess.close() return True return False
def post(self): db_sess = db_session.create_session() try: data = loads(request.get_data()) validate(instance=data, schema=ADD_SCHEMA) token = data.pop('token') user = db_sess.query(User).filter(User.token == token)[0] data['time'] = dt.strptime(data['time'], "%H:%M").time() data['day'] = dt.strptime(data['day'], "%m-%d-%Y").date() assert user except AssertionError: data = dumps({"error": "Неверный токен"}) response = Flask.response_class(status=403, mimetype="application/json", response=data) return response except Exception as e: data = dumps({"error": str(e)}) response = Flask.response_class(status=400, mimetype="application/json", response=data) return response data['owner_id'] = user.id table = Tables(**data) db_sess.add(table) db_sess.commit() db_sess.close() response = Flask.response_class(status=200) return response
def school_schedule(): form = CheckoutForm() n = int(request.args.get('num', 1)) if request.method == "GET": return render_template( "school_schedule.html", title="Расписание", form=form, n=n, user=current_user, table=list(current_user.table.filter(Tables.completed == False))) if request.method == "POST": db_sess = db_session.create_session() record = current_user.table.filter(Tables.id == form.id.data)[0] record.completed = True db_sess.commit() return render_template("school_schedule.html", title="Расписание", user=current_user, n=n, form=form, table=list( current_user.table.filter( Tables.completed == False, Tables.active == True)))
def school_schedule_num(number): form = CheckoutForm() db_sess = db_session.create_session() if request.method == "GET": table = db_sess.query(Tables).get(number) if not table: abort(404) elif table.owner_id == current_user.id: return render_template("homework.html", title=table.title, user=current_user, table=table, form=form) else: abort(403) if request.method == "POST": if form.id.data == "delete": table = db_sess.query(Tables).get(number) db_sess.delete(table) db_sess.commit() return render_template("delete.html", title="Запись удалена") if form.id.data == "hide": table = db_sess.query(Tables).get(number) table.completed = True db_sess.commit() return render_template("text_archive.html", title="Добавлено в архив")
def user_bot(text, user_name): db_sess = db_session.create_session() for user in db_sess.query(User).filter(User.token == str(text)): if user.token == text: user.connection = user_name db_sess.commit() db_sess.close() return True return False
def done(update, context): query = update.callback_query _, user = query.data.split() db_sess = db_session.create_session() table = db_sess.query(Tables).get(int(user)) title = table.title table.completed = True db_sess.commit() db_sess.close() query.edit_message_text(f'Запись: "{title}" добавлена в архив')
def record_delete(update, context): query = update.callback_query _, user = query.data.split() db_sess = db_session.create_session() table = db_sess.query(Tables).get(int(user)) title = table.title db_sess.delete(table) db_sess.commit() db_sess.close() query.edit_message_text(f'Запись: "{title}" удалена')
def login(mail, password): password = sha256(password.encode('utf-8')).hexdigest() db_sess = db_session.create_session() if len(list(db_sess.query(User).filter(User.email == mail))) > 0: user = db_sess.query(User).filter(User.email == mail)[0] if user.is_ban: return 'BAN' if user.password == password: login_user(user, remember=True) return True return False
def registration(): if current_user.is_authenticated: return redirect("/user") form = RegisterForm() if form.validate_on_submit(): db_sess = db_session.create_session() count = len( list(db_sess.query(User).filter(User.email == form.email.data))) db_sess.close() reg(form) login(form.email.data, form.password.data) return redirect('/') return render_template('registration.html', form=form)
def homework_form(form, user): db_sess = db_session.create_session() record = Tables() record.day = form.day.data record.time = form.time.data record.title = form.title.data record.homework_text = form.text.data record.owner_id = user.id db_sess.add(record) db_sess.commit() f = form.file.data if f.filename: load_img(f, user.id, record.id, db_sess) db_sess.close()
def reg(form): password = form.password.data form.password.data = sha256(form.password.data.encode('utf-8')).hexdigest() token = token_urlsafe(16) db_sess = db_session.create_session() user = User() user.name = form.name.data user.surname = form.surname.data user.email = form.email.data user.password = form.password.data user.token = token db_sess.add(user) db_sess.commit() db_sess.close() form.password.data = password
def user(): if current_user.is_authenticated: new_token = int(request.args.get('token', 0)) if new_token: db_sess = db_session.create_session() current_user.connection = None current_user.token = token_urlsafe(16) db_sess.commit() return redirect("/user") else: return render_template("user_cabinet.html", title="Личный кабинет", user=current_user) else: return redirect("/")
def edit(id): db_sess = db_session.create_session() form = HomeworkForm() table = db_sess.query(Tables).get(id) if table and table.owner_id == current_user.id: if request.method == "GET": record = table return render_template("edit_homework.html", title="Редактирование", form=form, table=record) if request.method == "POST": record = db_sess.query(Tables).get(id) homework_edit(form, record, current_user) return redirect(f"/school_schedule/{id}") abort(403)
def tomorrow(update, context): user_name = update.message.chat.id db_sess = db_session.create_session() user = list(db_sess.query(User).filter(User.connection == user_name))[0] lst = list(user.table.filter(Tables.completed == False))[0:6] schedule = [] for homework in lst: print(homework.id) schedule.append([ InlineKeyboardButton(f"{homework.title}", callback_data=f'{homework.id} {user_name}') ]) reply_keyboard = InlineKeyboardMarkup(schedule) if len(lst) == 0: update.message.reply_text("Тут пока-что пусто") else: update.message.reply_text("Выберите запись:", reply_markup=reply_keyboard)
def homework_edit(form, record, user): db_sess = db_session.create_session() if form.day.data: record.day = form.day.data if form.time.data: record.time = form.time.data if form.title.data: record.title = form.title.data if form.text.data: record.homework_text = form.text.data db_sess.commit() f = form.file.data if f.filename: for i in record.homework_img: os.remove(f"static/images/{record.owner_id}/{i.hash}") db_sess.delete(i) load_img(f, user.id, record.id, db_sess) db_sess.close()
def homework(update, context): query = update.callback_query text, user = query.data.split(" ") db_sess = db_session.create_session() table = db_sess.query(Tables).get(int(text)) schedule = [[(InlineKeyboardButton("Удалить", callback_data=f'Удалить {text}')), (InlineKeyboardButton("Выполнить", callback_data=f'Выполнено {text}'))]] keyboard = InlineKeyboardMarkup(schedule) query.edit_message_text(f"{table.title}" f"\nТекст: {table.homework_text}" f"\nДедлайн: {table.day} {table.time}") for i in table.homework_img: img = open(f"static/images/{table.owner_id}/{i.hash}", mode='rb') bot.send_photo(chat_id=int(user), photo=img) bot.send_message(chat_id=int(user), text="Выберите действие", reply_markup=keyboard)
def admin(): if current_user.is_authenticated: if current_user.is_admin: db_sess = db_session.create_session() n = int(request.args.get('page', 1)) admin = int(request.args.get('admin', 0)) ban = int(request.args.get('ban', 0)) if admin: new_admin = db_sess.query(User).get(admin) new_admin.is_admin = not new_admin.is_admin db_sess.commit() elif ban: banned = db_sess.query(User).get(ban) banned.is_ban = not banned.is_ban db_sess.commit() users = list(db_sess.query(User)) return render_template("admin.html", admin=current_user, users=users, n=n) return render_template('welcome.html')
def validate_email(form, field): db_sess = db_session.create_session() user = list(db_sess.query(User).filter(User.email == field.data)) if user: raise ValidationError('Аккаунт с таким email уже существует')
def load_user(user_id): db_sess = db_session.create_session() user = db_sess.query(User).get(user_id) if user.is_ban: return return user