parse_aggregated_string-fix
Some checks failed
Deploy on push / deploy (push) Failing after 9s

This commit is contained in:
Untone 2024-08-08 17:39:37 +03:00
parent e46de27ba9
commit 5bd9c9750d

View File

@ -106,18 +106,18 @@ def query_shouts():
return q, aliased_reaction return q, aliased_reaction
def parse_aggregated_string(aggregated_str): def parse_aggregated_string(aggregated_str, model_class):
""" """
Преобразует строку, полученную из string_agg, обратно в список словарей. Преобразует строку, полученную из string_agg, обратно в список объектов.
:param aggregated_str: Строка, содержащая агрегированные данные. :param aggregated_str: Строка, содержащая агрегированные данные.
:return: Список словарей с данными. :param model_class: Класс модели, экземпляры которой нужно создать.
:return: Список объектов модели.
""" """
if not aggregated_str: if not aggregated_str:
return [] return []
items = [] items = []
# Изменяем разделитель на символ |, соответствующий используемому в агрегации
for item_str in aggregated_str.split(" | "): for item_str in aggregated_str.split(" | "):
item_data = {} item_data = {}
for field in item_str.split(";"): for field in item_str.split(";"):
@ -125,10 +125,11 @@ def parse_aggregated_string(aggregated_str):
key, value = field.split(":", 1) key, value = field.split(":", 1)
item_data[key] = value item_data[key] = value
else: else:
# Лог или обработка случаев, когда разделитель отсутствует
logger.error(f"Некорректный формат поля: {field}") logger.error(f"Некорректный формат поля: {field}")
continue continue
items.append(item_data) # Создание экземпляра модели на основе словаря
item_object = model_class(**item_data)
items.append(item_object)
return items return items
@ -167,8 +168,8 @@ def get_shouts_with_stats(q, limit, offset=0, author_id=None):
authors, authors,
topics, topics,
) in results: ) in results:
shout.authors = parse_aggregated_string(authors) shout.authors = parse_aggregated_string(authors, Author)
shout.topics = parse_aggregated_string(topics) shout.topics = parse_aggregated_string(topics, Topic)
shout.stat = { shout.stat = {
"viewed": ViewedStorage.get_shout(shout.id), "viewed": ViewedStorage.get_shout(shout.id),
"followers": followers_stat or 0, "followers": followers_stat or 0,