Ejemplo n.º 1
0
def Message_not_found(message_id):
    if not str(message_id).isdigit():
        abort(404, error=f"{message_id} not int")
    db_sess = db_session.create_session()
    message = db_sess.query(Message).get(message_id)
    if not message:
        abort(404, error=f"Message {message_id} not found")
Ejemplo n.º 2
0
 def delete(self, message_id):
     Message_not_found(message_id)
     db_sess = db_session.create_session()
     message = db_sess.query(Message).get(message_id).first()
     db_sess.delete(message)
     db_sess.commit()
     return jsonify({'success': 'OK'})
Ejemplo n.º 3
0
def Discussion_not_found(discussion_id):
    if not str(discussion_id).isdigit():
        abort(404, error=f"{discussion_id} not int")
    db_sess = db_session.create_session()
    discussion = db_sess.query(Discussion).get(discussion_id)
    if not discussion:
        abort(404, error=f"Discussion {discussion_id} not found")
Ejemplo n.º 4
0
 def post(self):
     if not request.json:
         return jsonify({'error': 'Empty request'})
     args = parser_ms.parse_args()
     db_sess = db_session.create_session()
     a = ['user_id', 'content', 'answers_to_id', 'discussion_id']
     for i in a:
         if i not in request.json:
             return jsonify({'error': 'Bad info'})
         elif len(request.json.values()) != len(a):
             return jsonify({'error': 'Bad info'})
     if not db_sess.query(Discussion).filter(
             request.json['discussion_id'] == Discussion.id).first():
         return jsonify({'error': 'Discussion not found'})
     if not db_sess.query(User).filter(
             request.json['user_id'] == User.id).first():
         return jsonify({'error': 'user not found'})
     if not db_sess.query(User).filter(
             request.json['answers_to_id'] == User.id).first():
         return jsonify({'error': 'responds to not found'})
     message = Message(
         user_id=args['user_id'],
         content=args['content'],
         answers_to_id=args['answers_to_id'],
         discussion_id=args['discussion_id'],
     )
     db_sess.add(message)
     db_sess.commit()
     return jsonify({'success': 'OK'})
Ejemplo n.º 5
0
 def get(self):
     db_sess = db_session.create_session()
     forums = db_sess.query(Forum).all()
     return jsonify({
         'forum':
         [item.to_dict(only=('title', 'creator_id')) for item in forums]
     })
Ejemplo n.º 6
0
 def get(self, forum_id):
     Forum_not_found(forum_id)
     db_sess = db_session.create_session()
     forum = db_sess.query(Forum).get(forum_id)
     if not forum or forum is None:
         abort(404, error=f"Forum {forum_id} not found")
     return jsonify({'forum': forum.to_dict(only=('title', 'creator_id'))})
Ejemplo n.º 7
0
def User_not_found(user_id):
    if not str(user_id).isdigit():
        abort(404, error=f"{user_id} not int")
    db_sess = db_session.create_session()
    user = db_sess.query(User).get(user_id)
    if not user:
        abort(404, error=f"User {user_id} not found")
Ejemplo n.º 8
0
def private_page():
    s = db_session.create_session()
    s.add(current_user)
    s.merge(current_user)
    resp = render_template('private.html', title='Личный кабинет', len=len)
    s.close()
    return resp
Ejemplo n.º 9
0
 def post(self):
     if not request.json:
         return jsonify({'error': 'Empty request'})
     db_sess = db_session.create_session()
     a = ['uniq_name', 'lvl', 'is_banned', 'password']
     for i in a:
         if i not in request.json:
             return jsonify({'error': 'Bad info'})
     if db_sess.query(User).filter(
             request.json['uniq_name'] == User.uniq_name).first():
         return jsonify(
             {'error': 'Пользователь с таким uniq_name уже есть'})
     if db_sess.query(User).filter(
             request.json['vk_id'] == User.vk_id).first():
         return jsonify({'error': 'Пользователь с таким vk_id уже есть'})
     if request.json['vk_id'].isdigit():
         vk_id = requests.get(f'https://vk.com/id{request.json["vk_id"]}')
     else:
         vk_id = requests.get(f'https://vk.com/{request.json["vk_id"]}')
     if not vk_id:
         return jsonify({'error': 'Пользователь с таким vk_id нет'})
     password = generate_password_hash(request.json['password'])
     request.json['password'] = password
     args = parser_us.parse_args()
     user = User(uniq_name=args['uniq_name'],
                 name=args['name'],
                 about=args['about'],
                 vk_id=args['vk_id'],
                 lvl=args['lvl'],
                 is_banned=args['is_banned'],
                 hashed_password=args['password'])
     db_sess.add(user)
     db_sess.commit()
     return jsonify({'success': 'OK'})
Ejemplo n.º 10
0
def Forum_not_found(forum_id):
    if not str(forum_id).isdigit():
        abort(404, error=f"{forum_id} not int")
    db_sess = db_session.create_session()
    forum = db_sess.query(User).get(forum_id)
    if not forum or forum is None:
        abort(404, error=f"Forum {forum_id} not found")
Ejemplo n.º 11
0
def login():
    form = LoginForm()
    if form.validate_on_submit():
        auth_index = form.user_auth_index.data
        if auth_index.startswith('@') and len(auth_index) == 1:
            render_template('login.html',
                            title='Авторизация',
                            form=form,
                            message='VK_id пуст')

        db_sess = db_session.create_session()
        if auth_index.startswith('@'):
            user = db_sess.query(User).filter(
                User.vk_id == auth_index[1:]).first()
        else:
            user = db_sess.query(User).filter(
                User.uniq_name == auth_index).first()
        if user and user.check_password(form.password.data):
            login_user(user, remember=form.remember_me.data)
            return redirect("/")
        return render_template(
            'login.html',
            title='Авторизация',
            form=form,
            message='Пользователя с таким логином не существует')
    return render_template('login.html', title='Авторизация', form=form)
Ejemplo n.º 12
0
def create_task_page(group_id):
    s = db_session.create_session()
    group = s.query(Group).filter(Group.id == group_id).first()
    if not group:
        s.close()
        abort(404)
    form = forms.CreateTaskForm()
    form.performer_id.choices = [(user.id, f'{user.name} (id: {user.id})')
                                 for user in group.users
                                 if user.id != current_user.id]
    if form.validate_on_submit():
        task = Task(name=form.name.data,
                    author_id=current_user.id,
                    performer_id=form.performer_id.data,
                    group_id=group_id,
                    priority=form.priority.data,
                    description=form.description.data)
        s.add(task)
        s.commit()
        s.close()
        return redirect(f'/group/{group_id}')
    resp = render_template('private_create_edit_task.html',
                           title='Создание задачи',
                           group=group,
                           form=form,
                           edit=False)
    s.close()
    return resp
Ejemplo n.º 13
0
def register():
    form = RegisterForm()
    if form.validate_on_submit():
        if form.password.data != form.password_again.data:
            return render_template('register.html',
                                   title='Регистрация',
                                   form=form,
                                   message="Пароли не совпадают")
        if len(form.password.data) < 5:
            return render_template(
                'register.html',
                title='Регистрация',
                form=form,
                message="Пароль должен содержать 5 и более символов")

        if len(form.uniq_name.data) < 3:
            return render_template(
                'register.html',
                title='Регистрация',
                form=form,
                message="Ник должен содержать 3 и более символов")
        db_sess = db_session.create_session()
        if db_sess.query(User).filter(
                User.uniq_name == form.uniq_name.data).first():
            return render_template('register.html',
                                   title='Регистрация',
                                   form=form,
                                   message="Такой пользователь уже есть")
        if form.vk_id.data:
            if db_sess.query(User).filter(
                    User.vk_id == form.vk_id.data).first():
                return render_template('register.html',
                                       title='Регистрация',
                                       form=form,
                                       message="Такой vk_id уже есть")
            if form.vk_id.data.isdigit():
                vk_id = requests.get(f'https://vk.com/id{form.vk_id.data}')
            else:
                vk_id = requests.get(f'https://vk.com/{form.vk_id.data}')
            if not vk_id:
                return render_template('register.html',
                                       title='Регистрация',
                                       form=form,
                                       message="Такой vk_id не существует")

        user = User()
        user.uniq_name = form.uniq_name.data
        user.about = form.about.data
        user.vk_id = form.vk_id.data if form.vk_id.data else None
        user.name = form.name.data if form.name.data else form.uniq_name.data
        user.set_password(form.password.data)
        user.profile_picture = user.conver_to_binary(
            fr'{os.getcwd()}\static\img\default_image.jpg')
        db_sess.add(user)
        db_sess.commit()

        login_user(user, remember=form.remember_me.data)
        return redirect('/register/load_photo')
    return render_template('register.html', title='Reg', form=form)
Ejemplo n.º 14
0
 def get(self, discussion_id):
     Discussion_not_found(discussion_id)
     db_sess = db_session.create_session()
     discussion = db_sess.query(Discussion).get(discussion_id)
     return jsonify({
         'discussion':
         discussion.to_dict(only=('title', 'forum_id', 'creator_id'))
     })
Ejemplo n.º 15
0
 def delete(self, discussion_id):
     Discussion_not_found(discussion_id)
     db_sess = db_session.create_session()
     discussion = db_sess.query(Discussion).get(discussion_id)
     for j in db_sess.query(Discussion).filter(discussion.messages).all():
         db_sess.delete(j)
     db_sess.delete(discussion)
     db_sess.commit()
     return jsonify({'success': 'OK'})
Ejemplo n.º 16
0
    def get(self, user_id):
        User_not_found(user_id)
        db_sess = db_session.create_session()
        users = db_sess.query(User).get(user_id)

        return jsonify({
            'user':
            users.to_dict(only=('name', 'about', 'lvl', 'is_banned'))
        })
Ejemplo n.º 17
0
 def get(self):
     db_sess = db_session.create_session()
     discussions = db_sess.query(Discussion).all()
     return jsonify({
         'discussion': [
             item.to_dict(only=('title', 'creator_id'))
             for item in discussions
         ]
     })
Ejemplo n.º 18
0
 def get(self):
     db_sess = db_session.create_session()
     messages = db_sess.query(Message).all()
     return jsonify({
         'message': [
             item.to_dict(only=('surname', 'name', 'age', 'position'))
             for item in messages
         ]
     })
Ejemplo n.º 19
0
 def get(self):
     db_sess = db_session.create_session()
     users = db_sess.query(User).all()
     return jsonify({
         'user': [
             item.to_dict(only=('name', 'about', 'lvl', 'is_banned'))
             for item in users
         ]
     })
Ejemplo n.º 20
0
    def get(self, message_id):
        Message_not_found(message_id)
        db_sess = db_session.create_session()
        message = db_sess.query(Message).get(message_id)

        return jsonify({
            'message':
            message.to_dict(only=('user_id', 'content', 'answers_to_id',
                                  'discussion_id'))
        })
Ejemplo n.º 21
0
 def delete(self, forum_id):
     Forum_not_found(forum_id)
     db_sess = db_session.create_session()
     forum = db_sess.query(Forum).get(forum_id)
     if not forum or forum is None:
         abort(404, error=f"Forum {forum_id} not found")
     for j in db_sess.query(Forum).filter(forum.discussions).all():
         for z in j.messages:
             db_sess.delete(z)
         db_sess.delete(j)
     db_sess.delete(forum)
     db_sess.commit()
     return jsonify({'success': 'OK'})
Ejemplo n.º 22
0
def group_page(group_id):
    s = db_session.create_session()
    group = s.query(Group).filter(Group.id == group_id).first()
    if not group:
        s.close()
        abort(404)
    resp = render_template('private_group.html',
                           title=group.name,
                           group=group,
                           len=len,
                           STATUS_TO_STR=forms.STATUS_TO_STR)
    s.close()
    return resp
Ejemplo n.º 23
0
def task_page(group_id, task_id):
    s = db_session.create_session()
    group = s.query(Group).filter(Group.id == group_id).first()
    if not group or task_id not in set(task.id for task in group.tasks):
        s.close()
        abort(404)
    task = s.query(Task).filter(Task.id == task_id).first()
    resp = render_template('private_task.html',
                           title=f'Задача: {task.name}',
                           group=group,
                           task=task,
                           STATUS_TO_STR=forms.STATUS_TO_STR)
    s.close()
    return resp
Ejemplo n.º 24
0
 def delete(self, user_id):
     User_not_found(user_id)
     db_sess = db_session.create_session()
     user = db_sess.query(User).get(user_id)
     for i in db_sess.query(User).filter(User.forums).all():
         for j in i.forums:
             for k in j.discussions:
                 for p in k.messages:
                     db_sess.delete(p)
                 db_sess.delete(k)
             db_sess.delete(j)
     db_sess.delete(user)
     db_sess.commit()
     return jsonify({'success': 'OK'})
Ejemplo n.º 25
0
 def post(self):
     if not request.json:
         return jsonify({'error': 'Empty request'})
     args = parser_fr.parse_args()
     db_sess = db_session.create_session()
     if not db_sess.query(User).filter(
             request.json['creator_id'] == User.id).first():
         return jsonify({'error': 'user not found'})
     forum = Forum(
         title=args['title'],
         creator_id=args['creator_id'],
     )
     db_sess.add(forum)
     db_sess.commit()
     return jsonify({'success': 'OK'})
Ejemplo n.º 26
0
def join_group_page():
    form = forms.JoinGroupForm()
    s = db_session.create_session()
    if form.validate_on_submit():
        s.add(current_user)
        s.merge(current_user)
        if not form.id.data.isdigit():
            resp = render_template('private_join_group.html',
                                   title='Присоединиться к группе',
                                   form=form,
                                   message='ID должен быть целым числом!')
            s.close()
            return resp
        group = s.query(Group).filter(Group.id == int(form.id.data)).first()
        if not group:
            resp = render_template('private_join_group.html',
                                   title='Присоединиться к группе',
                                   form=form,
                                   message='Такой группы не существует!')
            s.close()
            return resp
        if len(group.users) == group.max_members:
            resp = render_template(
                'private_join_group.html',
                title='Присоединиться к группе',
                form=form,
                message=
                'В группе достигнуто максимальное количество участников!')
            s.close()
            return resp
        if current_user in group.users:
            resp = render_template('private_join_group.html',
                                   title='Присоединиться к группе',
                                   form=form,
                                   message='Вы уже состоите в этой группе!')
            s.close()
            return resp
        group.users.append(current_user)
        s.merge(group)
        s.commit()
        s.close()
        return redirect('/private')
    resp = render_template('private_join_group.html',
                           title='Присоединиться к группе',
                           form=form)
    s.close()
    return resp
Ejemplo n.º 27
0
def finish_task(group_id, task_id):
    s = db_session.create_session()
    group = s.query(Group).filter(Group.id == group_id).first()
    if not group or task_id not in set(task.id for task in group.tasks):
        s.close()
        abort(404)

    task = s.query(Task).filter(Task.id == task_id).first()
    if current_user.id != task.performer_id:
        s.close()
        abort(403)

    task.status = 2
    s.merge(task)
    s.commit()
    s.close()
    return redirect(f'/group/{group_id}')
Ejemplo n.º 28
0
def create_group_page():
    form = forms.CreateGroupForm()
    s = db_session.create_session()
    if form.validate_on_submit():
        group = Group(form.name.data, form.max_members.data, current_user.id)
        group.users.append(current_user)
        s.merge(group)
        s.commit()
        resp = redirect('/private')
        s.close()
        return resp
    s.add(current_user)
    s.merge(current_user)
    resp = render_template('private_create_group.html',
                           title='Создание группы',
                           form=form)
    s.close()
    return resp
Ejemplo n.º 29
0
def load():
    form = PhotoLoader()
    if form.submit.data:
        if form.image.data is not None:
            db_sess = db_session.create_session()
            f = form.image.data
            filename = secure_filename(f.filename)
            # os.remove(f'/static/img/{current_user.profile_picture_name}', dir_fd=None) надо как то удалить
            f.save(rf'{os.getcwd()}\static\img\{filename}')
            if current_user.profile_picture_name != 'default_image.jpg':
                os.remove(f'static/img/{current_user.profile_picture_name}')
            current_user.profile_picture_name = filename
            current_user.profile_picture = current_user.conver_to_binary(
                rf'{os.getcwd()}\static\img\{filename}')
            db_sess.merge(current_user)
            db_sess.commit()
            return render_template('LoadPhoto.html',
                                   title='Load Photo',
                                   form=form)
    return render_template('LoadPhoto.html', title='Load Photo', form=form)
Ejemplo n.º 30
0
def index():
    forum_form = ForumForm()
    discussion_form = DiscussionForm()
    db_sess = db_session.create_session()

    if request.method == 'POST':
        if request.form.get('delete_discussion'):
            delete_discussion(request.form['delete_discussion'], db_sess)
        elif request.form.get('delete_forum'):
            delete_forum(request.form['delete_forum'], db_sess)

    if forum_form.forum_submit.data and forum_form.validate():
        forum = Forum(title=forum_form.forum_title.data,
                      creator_id=current_user.id)
        db_sess.add(forum)
        db_sess.commit()
        forum_form.forum_title.data = None

    if discussion_form.discussion_submit.data and discussion_form.validate():
        discussion = Discussion(title=discussion_form.discussion_title.data,
                                forum_id=request.form['forum_id'],
                                creator_id=current_user.id)
        db_sess.add(discussion)
        db_sess.commit()
        message = Message(user_id=current_user.id,
                          content=discussion_form.message.data,
                          discussion_id=discussion.id)
        db_sess.add(message)
        db_sess.commit()

        discussion_form.discussion_title.data = None
        discussion_form.message.data = None
        return redirect(f'/discussion/{discussion.id}')

    forums = db_sess.query(Forum).all()
    forums_and_discussions = {forum: forum.discussions for forum in forums}

    return render_template("index.html",
                           slovar=forums_and_discussions,
                           discussion_form=discussion_form,
                           forum_form=forum_form)