parse-agregated-string
Some checks failed
Deploy on push / deploy (push) Failing after 11s

This commit is contained in:
Untone 2024-08-07 17:52:23 +03:00
parent 9c374d789e
commit 1ce12c0980

View File

@ -30,7 +30,6 @@ def query_shouts():
Базовый запрос для получения публикаций с подзапросами статистики, авторов и тем, Базовый запрос для получения публикаций с подзапросами статистики, авторов и тем,
с агрегацией в строку вместо JSON. с агрегацией в строку вместо JSON.
:param session: Сессия SQLAlchemy для выполнения запроса.
:return: Запрос для получения публикаций. :return: Запрос для получения публикаций.
""" """
# Создаем алиасы для таблиц для избежания конфликтов имен # Создаем алиасы для таблиц для избежания конфликтов имен
@ -102,6 +101,24 @@ def query_shouts():
return q, aliased_reaction return q, aliased_reaction
def parse_aggregated_string(aggregated_str):
"""
Преобразует строку, полученную из string_agg, обратно в список словарей.
:param aggregated_str: Строка, содержащая агрегированные данные.
:return: Список словарей с данными.
"""
if not aggregated_str:
return []
items = []
for item_str in aggregated_str.split(", "):
item_data = dict(field.split(":", 1) for field in item_str.split(";"))
items.append(item_data)
return items
def get_shouts_with_stats(q, limit, offset=0, author_id=None): def get_shouts_with_stats(q, limit, offset=0, author_id=None):
""" """
Получение публикаций со статистикой, и подзапросами авторов и тем. Получение публикаций со статистикой, и подзапросами авторов и тем.
@ -128,8 +145,8 @@ def get_shouts_with_stats(q, limit, offset=0, author_id=None):
# Формирование списка публикаций с их данными # Формирование списка публикаций с их данными
shouts = [] shouts = []
for shout, comments_stat, rating_stat, last_reacted_at, authors, topics in results: for shout, comments_stat, rating_stat, last_reacted_at, authors, topics in results:
shout.authors = authors or [] shout.authors = parse_aggregated_string(authors)
shout.topics = topics or [] shout.topics = parse_aggregated_string(topics)
shout.stat = { shout.stat = {
"viewed": ViewedStorage.get_shout(shout.id), "viewed": ViewedStorage.get_shout(shout.id),
"followers": 0, # FIXME: implement followers_stat "followers": 0, # FIXME: implement followers_stat