Ejemplo n.º 1
0
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")
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
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)))
Ejemplo n.º 7
0
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="Добавлено в архив")
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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}" добавлена в архив')
Ejemplo n.º 10
0
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}" удалена')
Ejemplo n.º 11
0
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
Ejemplo n.º 12
0
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)
Ejemplo n.º 13
0
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()
Ejemplo n.º 14
0
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
Ejemplo n.º 15
0
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("/")
Ejemplo n.º 16
0
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)
Ejemplo n.º 17
0
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)
Ejemplo n.º 18
0
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()
Ejemplo n.º 19
0
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)
Ejemplo n.º 20
0
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')
Ejemplo n.º 21
0
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 уже существует')
Ejemplo n.º 22
0
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