Bladeren bron

Add collection notion

jherve 1 jaar geleden
bovenliggende
commit
e9ec5c4e31

+ 6 - 0
src/de_quoi_parle_le_monde/article.py

@@ -28,3 +28,9 @@ class MainPage(ABC):
     @abstractmethod
     async def from_snapshot(cls, snapshot: InternetArchiveSnapshot):
         ...
+
+
+@frozen
+class ArchiveCollection:
+    url: str
+    MainPageClass: type[MainPage]

+ 10 - 5
src/de_quoi_parle_le_monde/le_monde.py

@@ -1,10 +1,15 @@
 from attrs import frozen
-from typing import ClassVar
 import asyncio
 from bs4 import BeautifulSoup
 
 from de_quoi_parle_le_monde.internet_archive import InternetArchiveSnapshot
-from de_quoi_parle_le_monde.article import TopArticle, MainArticle, MainPage
+from de_quoi_parle_le_monde.article import (
+    TopArticle,
+    MainArticle,
+    MainPage,
+    ArchiveCollection,
+)
+
 
 class LeMondeTopArticle(TopArticle):
     ...
@@ -38,6 +43,6 @@ class LeMondeMainPage(MainPage):
         return LeMondeMainPage(snapshot, soup, cls.get_top_articles(soup), cls.get_main_article(soup))
 
 
-@frozen
-class LeMondeArchive:
-    url: ClassVar[str] = "https://lemonde.fr"
+le_monde_collection = ArchiveCollection(
+    url="https://lemonde.fr", MainPageClass=LeMondeMainPage
+)

+ 5 - 3
src/de_quoi_parle_le_monde/main.py

@@ -4,7 +4,7 @@ from attrs import frozen
 
 from de_quoi_parle_le_monde.http import HttpClient
 from de_quoi_parle_le_monde.internet_archive import InternetArchiveClient
-from de_quoi_parle_le_monde.le_monde import LeMondeArchive, LeMondeMainPage
+from de_quoi_parle_le_monde.le_monde import le_monde_collection
 
 
 @frozen
@@ -23,9 +23,11 @@ class ArchiveDownloader:
             ia = InternetArchiveClient(session)
 
             async def handle_snap(dt):
-                id_closest = await ia.get_snapshot_id_closest_to(LeMondeArchive.url, dt)
+                id_closest = await ia.get_snapshot_id_closest_to(
+                    le_monde_collection.url, dt
+                )
                 closest = await ia.fetch(id_closest)
-                return await LeMondeMainPage.from_snapshot(closest)
+                return await le_monde_collection.MainPageClass.from_snapshot(closest)
 
             return await asyncio.gather(*[handle_snap(d) for d in dts])