浏览代码

Factorize out common code for snapshots

jherve 1 年之前
父节点
当前提交
89dfab54a9

+ 17 - 2
src/de_quoi_parle_le_monde/article.py

@@ -1,3 +1,4 @@
+import asyncio
 from abc import ABC, abstractmethod
 from attrs import frozen
 import cattrs
@@ -55,11 +56,25 @@ class MainPage(ABC):
     top_articles: list[TopArticle]
     main_article: MainArticle
 
-    @classmethod
+    @staticmethod
     @abstractmethod
-    async def from_snapshot(cls, snapshot: InternetArchiveSnapshot):
+    def get_top_articles(soup: BeautifulSoup) -> list[TopArticle]:
+        ...
+
+    @staticmethod
+    @abstractmethod
+    def get_main_article(soup: BeautifulSoup) -> MainArticle:
         ...
 
+    @classmethod
+    async def from_snapshot(cls, snapshot: InternetArchiveSnapshot):
+        loop = asyncio.get_event_loop()
+        soup = await loop.run_in_executor(None, BeautifulSoup, snapshot.text, "lxml")
+
+        return cls(
+            snapshot, soup, cls.get_top_articles(soup), cls.get_main_article(soup)
+        )
+
 
 @frozen
 class ArchiveCollection:

+ 0 - 11
src/de_quoi_parle_le_monde/medias/cnews.py

@@ -38,14 +38,3 @@ class CNewsMainPage(MainPage):
                 url=main.find("a")["href"],
             )
         )
-
-    @classmethod
-    async def from_snapshot(
-        cls, snapshot: InternetArchiveSnapshot
-    ) -> "CNewsMainPage":
-        loop = asyncio.get_event_loop()
-        soup = await loop.run_in_executor(None, BeautifulSoup, snapshot.text, "lxml")
-
-        return cls(
-            snapshot, soup, cls.get_top_articles(soup), cls.get_main_article(soup)
-        )

+ 0 - 10
src/de_quoi_parle_le_monde/medias/france_tv_info.py

@@ -46,13 +46,3 @@ class FranceTvInfoMainPage(MainPage):
                 url=main.find("a")["href"],
             )
         )
-
-    @classmethod
-    async def from_snapshot(
-        cls, snapshot: InternetArchiveSnapshot
-    ) -> "FranceTvInfoMainPage":
-        loop = asyncio.get_event_loop()
-        soup = await loop.run_in_executor(None, BeautifulSoup, snapshot.text, "lxml")
-        return FranceTvInfoMainPage(
-            snapshot, soup, cls.get_top_articles(soup), cls.get_main_article(soup)
-        )

+ 0 - 10
src/de_quoi_parle_le_monde/medias/le_monde.py

@@ -37,13 +37,3 @@ class LeMondeMainPage(MainPage):
                 url=main.find("a")["href"],
             )
         )
-
-    @classmethod
-    async def from_snapshot(
-        cls, snapshot: InternetArchiveSnapshot
-    ) -> "LeMondeMainPage":
-        loop = asyncio.get_event_loop()
-        soup = await loop.run_in_executor(None, BeautifulSoup, snapshot.text, "lxml")
-        return LeMondeMainPage(
-            snapshot, soup, cls.get_top_articles(soup), cls.get_main_article(soup)
-        )