txt
Some checks failed
Deploy on push / deploy (push) Failing after 10s

This commit is contained in:
2024-11-01 10:04:32 +03:00
parent 5a9a02d3a4
commit 600d52414e
4 changed files with 125 additions and 95 deletions

View File

@@ -15,6 +15,14 @@ from utils.logger import root_logger as logger
def apply_options(q, options, author_id: int):
"""
Применяет опции фильтрации и сортировки к запросу для данного автора.
:param q: Исходный запрос.
:param options: Опции фильтрации и сортировки.
:param author_id: Идентификатор автора.
:return: Запрос с примененными опциями.
"""
filters = options.get("filters")
if isinstance(filters, dict):
q = apply_filters(q, filters)
@@ -158,8 +166,7 @@ async def reacted_shouts_updates(info, follower_id: int, options) -> List[Shout]
Обновляет публикации, на которые подписан автор, с учетом реакций.
:param follower_id: Идентификатор подписчика.
:param limit: Колиество пукликаций для загрузки.
:param offset: Смещение для пагинации.
:param options: Опции фильтрации и сортировки.
:return: Список публикаций.
"""
shouts: List[Shout] = []
@@ -200,8 +207,7 @@ async def load_shouts_followed(_, info, options) -> List[Shout]:
Загружает публикации, на которые подписан пользователь.
:param info: Информация о контексте GraphQL.
:param limit: Количество публикаций для загрузки.
:param offset: Смещение для пагинации.
:param options: Опции фильтрации и сортировки.
:return: Список публикаций.
"""
user_id = info.context["user_id"]
@@ -224,8 +230,7 @@ async def load_shouts_followed_by(_, info, slug: str, options) -> List[Shout]:
:param info: Информация о контексте GraphQL.
:param slug: Slug автора.
:param limit: Количество публикаций для загрузки.
:param offset: Смещение для пагинации.
:param options: Опции фильтрации и сортировки.
:return: Список публикаций.
"""
with local_session() as session:

View File

@@ -16,7 +16,13 @@ from utils.logger import root_logger as logger
def has_field(info, fieldname: str) -> bool:
"""Проверяет, запрошено ли поле :fieldname: в GraphQL запросе"""
"""
Проверяет, запрошено ли поле :fieldname: в GraphQL запросе
:param info: Информация о контексте GraphQL
:param fieldname: Имя запрашиваемого поля
:return: True, если поле запрошено, False в противном случае
"""
field_node = info.field_nodes[0]
for selection in field_node.selection_set.selections:
if hasattr(selection, "name") and selection.name.value == fieldname:
@@ -25,7 +31,11 @@ def has_field(info, fieldname: str) -> bool:
def query_with_stat():
# Оптимизированный подзапрос статистики
"""
добавляет подзапрос статистики
:return: Запрос с подзапросом статистики.
"""
stats_subquery = (
select(
Reaction.shout.label("shout_id"),
@@ -277,6 +287,13 @@ async def get_shout(_, info, slug="", shout_id=0):
def apply_sorting(q, options):
"""
Применение сортировки к запросу.
:param q: Исходный запрос.
:param options: Опции фильтрации и сортировки.
:return: Запрос с примененной сортировкой.
"""
# Определение поля для сортировки
order_str = options.get("order_by")
@@ -298,6 +315,8 @@ async def load_shouts_by(_, info, options):
"""
Загрузка публикаций с фильтрацией, сортировкой и пагинацией.
:param _: Корневой объект запроса (не используется)
:param info: Информация о контексте GraphQL
:param options: Опции фильтрации и сортировки.
:return: Список публикаций, удовлетворяющих критериям.
"""
@@ -327,6 +346,8 @@ async def load_shouts_search(_, info, text, options):
"""
Поиск публикаций по тексту.
:param _: Корневой объект запроса (не используется)
:param info: Информация о контексте GraphQL
:param text: Строка поиска.
:param options: Опции фильтрации и сортировки.
:return: Список публикаций, найденных по тексту.
@@ -364,6 +385,11 @@ async def load_shouts_search(_, info, text, options):
async def load_shouts_unrated(_, info, options):
"""
Загрузка публикаций с менее чем 3 реакциями типа LIKE/DISLIKE
:param _: Корневой объект запроса (не используется)
:param info: Информация о контексте GraphQL
:param options: Опции фильтрации и сортировки.
:return: Список публикаций.
"""
rated_shouts = (
select(Reaction.shout)
@@ -439,7 +465,7 @@ async def load_shouts_random_topic(_, info, options):
Загрузка случайной темы и связанных с ней публикаций.
:param info: Информация о контексте GraphQL.
:param limit: Максимальное количество публикаций.
:param options: Опции фильтрации и сортировки.
:return: Тема и связанные публикации.
"""
[topic] = get_topics_random(None, None, 1)