Пример #1
0
async def increment_comment_counter(post_id):
    try:
        query = 'UPDATE "Posts" SET comments_counter = comments_counter+1 where id=:post_id'
        values = dict(post_id=post_id)
        await database.execute(query=query, values=values)
    except:
        print(get_exception_info())
Пример #2
0
async def delete_post(post_id):
    try:
        query = 'DELETE FROM "Posts" WHERE id=:post_id'
        values = dict(post_id=post_id)
        await database.execute(query=query, values=values)
    except:
        print(get_exception_info())
Пример #3
0
async def delete_previous_token(user_id):
    try:
        query = 'DELETE FROM "Sessions" WHERE user_id = :user_id'
        value = {'user_id': user_id}
        await database.execute(query=query, values=value)
    except:
        print(get_exception_info())
Пример #4
0
async def get_user(**kwargs):
    """
    gets users from database sorted by given arguments
    e.g.
    get_user(id=228)
    get_user([email protected])
    get_user(registration_confirmed=False)
    get_user(token="a_token_here")
    """
    try:
        if not kwargs:
            raise NoArgumentsPassedError

        if "token" in kwargs.keys():
            return await get_user_by_token(kwargs['token'])

        query = 'SELECT * FROM "Users" WHERE'
        query_value = dict()

        for key, value in kwargs.items():
            query += f' {key} = :{key}'
            query_value[key] = value

        user = await database.fetch_one(query=query, values=query_value)
        return user

    except:
        print(get_exception_info())
Пример #5
0
async def print_all_users():
    try:
        query = Users.select()
        users = await database.fetch_all(query)
        for user in users:
            print(user['email'], user['password'])
    except:
        print(get_exception_info())
Пример #6
0
async def update_post_content(post_id, content_to_add):
    try:
        # query = 'UPDATE "Posts" SET content=content||E\':content_to_add\' WHERE id=:post_id'
        query = 'UPDATE "Posts" SET content=content||:content_to_add WHERE id=:post_id'
        # добавить счетчик апдейтов
        values = dict(content_to_add=f"\nUPD : {content_to_add}", post_id=post_id)
        await database.execute(query=query, values=values)

    except:
        print(get_exception_info())
Пример #7
0
async def get_user_by_token(token):
    # TODO Сделать проверку на время жизни куки
    try:
        token = uuid.UUID(token)
        query = 'SELECT * FROM "Sessions" WHERE token = :token'
        value = {"token": token}
        session = await database.fetch_one(query=query, values=value)
        # DO NOT GET USER BY TOKEN IN HERE
        return await get_user(id=session['user_id'])
    except:
        print(get_exception_info())
Пример #8
0
async def render_about_template(request, session_id):
    try:
        values = dict(request=request)

        if session_id:
            user = await get_user(token=session_id)
            values['user'] = user

        return templates.TemplateResponse("about.html", values)
    except:
        print(get_exception_info())
Пример #9
0
async def create_new_token(user_id, days_to_expire):
    try:
        new_token = uuid.uuid4()
        query = Sessions.insert().values(
            user_id=user_id,
            token=new_token,
            expires=datetime.now() + timedelta(days=days_to_expire)
        )
        await database.execute(query)
        return new_token
    except:
        print(get_exception_info())
Пример #10
0
async def create_post(author, content):
    try:
        # TODO добавить экранирование и проверку содержания поста
        query = Posts.insert().values(
            author_id=author["id"],
            content=content,
            likes_counter=0,
            dislikes_counter=0,
            comments_counter=0,
        )
        await database.execute(query)
    except:
        print(get_exception_info())
Пример #11
0
async def create_comment(author, post_id, text):
    try:
        await increment_comment_counter(post_id)
        query = Comments.insert().values(
            post_id=post_id,
            author_id=author['id'],
            content=text,
            likes_counter=0,
            dislikes_counter=0,
        )
        await database.execute(query)
    except:
        print(get_exception_info())
Пример #12
0
async def create_user(user_to_create):
    try:
        if user_to_create:
            query = Users.insert().values(
                username=user_to_create.username,
                email=user_to_create.email,
                password=user_to_create.password
            )
            await database.execute(query)

        else:
            raise NoArgumentsPassedError
    except:
        print(get_exception_info())
Пример #13
0
async def create_comment_view(request: Request,
                              post_id: int,
                              comment_text: str = Form(...),
                              session_id: Optional[str] = Cookie(None)):
    try:
        # TODO проверка на существование поста
        # TODO фильтр текста

        if not session_id:
            return redirect(f"/enter")  # добавить сообщение об авторизации

        comment_author = await get_user(token=session_id)
        await create_comment(comment_author, post_id, comment_text)

        return redirect(f"/post/{post_id}")
    except:
        print(get_exception_info())
Пример #14
0
async def render_user_view_template(request, user_id, session_id):
    try:
        values = dict(request=request)

        if session_id:
            user = await get_user(token=session_id)
            values['user'] = user

        posts = await get_data_from_table("Posts", author_id=user_id)
        values['posts'] = posts

        author = await get_user(id=user_id)
        values['author'] = author

        return templates.TemplateResponse("user_view.html", values)

    except:
        print(get_exception_info())
Пример #15
0
async def get_data_from_table(table_name, fetch_one=False, **kwargs):
    try:
        if not kwargs:
            raise NoArgumentsPassedError

        query = f'SELECT * FROM "{table_name}" WHERE'
        query_value = dict()

        for key, value in kwargs.items():
            query += f' {key} = :{key}'
            query_value[key] = value

        if fetch_one:
            return await database.fetch_one(query=query, values=query_value)

        return await database.fetch_all(query=query, values=query_value)

    except:
        print(get_exception_info())
Пример #16
0
async def render_edit_post_template(request, post_id, session_id):
    try:
        values = dict(request=request)

        post = await get_data_from_table("Posts", fetch_one=True, id=post_id)
        values['post'] = post

        if session_id:
            user = await get_user(token=session_id)
            values['user'] = user
            if user['id'] != post['author_id']:
                return redirect("/enter")
        else:
            # юзверь не залогинился
            return redirect("/enter")

        return templates.TemplateResponse("edit_post.html", values)
    except:
        print(get_exception_info())
Пример #17
0
async def get_comment_by_post_id(post_id):
    try:
        query = 'SELECT * FROM "Comments" WHERE post_id = :id'
        values = dict(id=post_id)
        # these comments are lonely because of them not having authors yet
        lonely_comments = await database.fetch_all(query=query, values=values)

        happy_comments = list()

        for comment in lonely_comments:
            comment_author = await get_user(id=comment['author_id'])

            happy_comment = dict(comment)
            happy_comment['author'] = comment_author
            happy_comments.append(happy_comment)

        return happy_comments

    except:
        print(get_exception_info())
Пример #18
0
async def render_post_template(request, post_id, session_id):
    try:
        values = {"request": request}
        if session_id:
            user = await get_user(token=session_id)
            values['user'] = user

        post = await get_post_by_id(post_id)
        values['post'] = post

        author = await get_user(id=post['author_id'])
        values['author'] = author

        comments = await get_comment_by_post_id(post_id)
        values['comments'] = comments

        return templates.TemplateResponse("post_view.html", values)

    except:
        print(get_exception_info())
Пример #19
0
async def recover_password(request):
    try:
        values = dict(request=request)
        return templates.TemplateResponse("recover_password.html", values)
    except:
        print(get_exception_info())