From 61ab88ec449dbb602c38709c90b41db14919349b Mon Sep 17 00:00:00 2001
From: "jindra12.underdark" <jindra12.underdark@gmail.com>
Date: Sat, 15 Jul 2023 16:10:05 +0200
Subject: [PATCH] Add conversion

#210
---
 shared/models.py | 83 ++++++++++++++++++++++++++++++++++--------------
 1 file changed, 60 insertions(+), 23 deletions(-)

diff --git a/shared/models.py b/shared/models.py
index 40016870..187a4be4 100644
--- a/shared/models.py
+++ b/shared/models.py
@@ -421,31 +421,68 @@ class ArticlesMixin(models.Model):
 
         results = results.order_by("union_date")
 
-        evaluated = list(results)
-
-        mapped_to_real_values = list(
-            map(
-                lambda unioned: {
-                    "id": unioned["union_id"],
-                    "page_ptr_id": unioned["union_page_ptr_id"],
-                    "perex": unioned["union_perex"],
-                    "date": unioned["union_date"],
-                    "author": unioned["union_author"],
-                    "image_id": unioned["union_image_id"],
-                    "search_image_id": unioned["union_search_image_id"],
-                    "content": unioned["union_content"],
-                    "author_page_id": unioned["union_author_page_id"],
-                    "region": unioned["union_author_page_id"],
-                    "article_type": unioned["union_article_type"],
-                    "is_black": unioned["union_is_black"],
-                    "thumb_image_id": unioned["union_thumb_image_id"],
-                    "shared": unioned["shared"],
-                },
-                evaluated,
+        evaluated = list(
+            results
+        )  # We MUST eval here since we can't turn values() into concrete class instances in QuerySet after union
+
+        if source is SharedArticleTypes.DISTRICT:
+            return list(
+                map(
+                    lambda unioned: DistrictArticlePage(
+                        id=unioned["union_id"],
+                        page_ptr_id=unioned["union_page_ptr_id"],
+                        perex=unioned["union_perex"],
+                        date=unioned["union_date"],
+                        author=unioned["union_author"],
+                        image_id=unioned["union_image_id"],
+                        search_image_id=unioned["union_search_image_id"],
+                        content=unioned["union_content"],
+                        author_page_id=unioned["union_author_page_id"],
+                        is_black=unioned["union_is_black"],
+                        thumb_image_id=unioned["union_thumb_image_id"],
+                    ),
+                    evaluated,
+                )
             )
-        )
 
-        return mapped_to_real_values
+        if source is SharedArticleTypes.UNIWEB:
+            return list(
+                map(
+                    lambda unioned: UniwebArticlePage(
+                        id=unioned["union_id"],
+                        page_ptr_id=unioned["union_page_ptr_id"],
+                        perex=unioned["union_perex"],
+                        date=unioned["union_date"],
+                        author=unioned["union_author"],
+                        image_id=unioned["union_image_id"],
+                        search_image_id=unioned["union_search_image_id"],
+                        content=unioned["union_content"],
+                    ),
+                    evaluated,
+                )
+            )
+
+        if source is SharedArticleTypes.MAIN:
+            return list(
+                map(
+                    lambda unioned: MainArticlePage(
+                        id=unioned["union_id"],
+                        page_ptr_id=unioned["union_page_ptr_id"],
+                        perex=unioned["union_perex"],
+                        date=unioned["union_date"],
+                        author=unioned["union_author"],
+                        image_id=unioned["union_image_id"],
+                        search_image_id=unioned["union_search_image_id"],
+                        content=unioned["union_content"],
+                        author_page_id=unioned["union_author_page_id"],
+                        region=unioned["union_author_page_id"],
+                        article_type=unioned["union_article_type"],
+                        is_black=unioned["union_is_black"],
+                        thumb_image_id=unioned["union_thumb_image_id"],
+                    ),
+                    evaluated,
+                )
+            )
 
     def get_article_page_by_slug(self, slug: str):
         articles = self.append_all_shared_articles()
-- 
GitLab