Explorar el Código

Add FeaturedArticle class

jherve hace 1 año
padre
commit
4a6f5b5072
Se han modificado 2 ficheros con 15 adiciones y 12 borrados
  1. 14 11
      src/de_quoi_parle_le_monde/article.py
  2. 1 1
      src/de_quoi_parle_le_monde/storage.py

+ 14 - 11
src/de_quoi_parle_le_monde/article.py

@@ -10,24 +10,27 @@ from de_quoi_parle_le_monde.internet_archive import InternetArchiveSnapshot
 cattrs.register_structure_hook(URL, lambda v, _: URL(v))
 
 
+@frozen
+class FeaturedArticle:
+    url: URL
+
+    @classmethod
+    def from_internet_archive_url(cls, url_str: str) -> "FeaturedArticle":
+        url = URL(url_str)
+        original_str = url.path.split("/", 3)[-1]
+        return cattrs.structure({"url": original_str}, cls)
+
+
 @frozen
 class FeaturedArticleSnapshot(ABC):
     title: str
     url: str
-    original: URL
-
-    @staticmethod
-    def to_original_url(url: str) -> URL:
-        url = URL(url)
-        original_str = url.path.split("/", 3)[-1]
-        original = URL(original_str)
-        assert original.is_absolute(), f"{original}"
-        return original
+    original: FeaturedArticle
 
     @classmethod
     def create(cls, title, url):
-        attrs = dict(title=title, url=url, original=cls.to_original_url(url))
-        return cattrs.structure(attrs, cls)
+        attrs = dict(title=title, url=url, original=FeaturedArticle.from_internet_archive_url(url))
+        return cls(**attrs)
 
 
 @frozen

+ 1 - 1
src/de_quoi_parle_le_monde/storage.py

@@ -221,7 +221,7 @@ class Storage:
         async with self.conn as conn:
             (id_,) = await conn.execute_insert(
                 self._insert_stmt("featured_article_snapshots", ["title", "url", "original_url"]),
-                [article.title, article.url, str(article.original)],
+                [article.title, article.url, str(article.original.url)],
             )
 
             if id_ == 0: