]> danix's work - publisher.git/commitdiff
feat: add meta_type, meta_tags, meta_categories, meta_date properties to Article
authorDanilo M. <redacted>
Sun, 3 May 2026 10:56:09 +0000 (12:56 +0200)
committerDanilo M. <redacted>
Sun, 3 May 2026 10:56:09 +0000 (12:56 +0200)
core/models.py
tests/test_models.py

index 3df20887f80cb39bfa69f0a4fb7c0bd0ed09359b..9a7cff554f780976d13f5e4b8ea0c39021ab78c4 100644 (file)
@@ -13,3 +13,32 @@ class Article:
     frontmatter: dict
     has_translation: bool
     translation_path: Path | None
+
+    @property
+    def draft(self) -> bool:
+        return bool(self.frontmatter.get("draft", False))
+
+    @property
+    def meta_type(self) -> str:
+        return str(self.frontmatter.get("type", ""))
+
+    @property
+    def meta_tags(self) -> str:
+        tags = self.frontmatter.get("tags", [])
+        if isinstance(tags, list):
+            return ", ".join(str(t) for t in tags)
+        return str(tags) if tags else ""
+
+    @property
+    def meta_categories(self) -> str:
+        cats = self.frontmatter.get("categories", [])
+        if isinstance(cats, list):
+            return ", ".join(str(c) for c in cats)
+        return str(cats) if cats else ""
+
+    @property
+    def meta_date(self) -> str:
+        raw = self.frontmatter.get("date", "")
+        if not raw:
+            return ""
+        return str(raw)[:10]  # ISO date → "YYYY-MM-DD"
index 858ce21b215ccad17bce7a0e6b49c8bd5d30a048..3d83653b55cee184fb1c637702bf39d7d1cca025 100644 (file)
@@ -34,3 +34,48 @@ def test_article_with_translation():
     )
     assert a.has_translation is True
     assert a.translation_path is not None
+
+
+def test_article_draft_property():
+    fm = {"draft": True, "type": "Tech", "tags": ["linux"], "categories": ["DIY"], "date": "2024-01-15T10:00:00+00:00"}
+    a = Article(slug="test", lang="it", path=Path("/tmp/test"), frontmatter=fm, has_translation=False, translation_path=None)
+    assert a.draft is True
+
+
+def test_article_meta_type():
+    fm = {"type": "Tech"}
+    a = Article(slug="test", lang="it", path=Path("/tmp/test"), frontmatter=fm, has_translation=False, translation_path=None)
+    assert a.meta_type == "Tech"
+
+
+def test_article_meta_type_missing():
+    a = Article(slug="test", lang="it", path=Path("/tmp/test"), frontmatter={}, has_translation=False, translation_path=None)
+    assert a.meta_type == ""
+
+
+def test_article_meta_tags():
+    fm = {"tags": ["linux", "python"]}
+    a = Article(slug="test", lang="it", path=Path("/tmp/test"), frontmatter=fm, has_translation=False, translation_path=None)
+    assert a.meta_tags == "linux, python"
+
+
+def test_article_meta_tags_empty():
+    a = Article(slug="test", lang="it", path=Path("/tmp/test"), frontmatter={}, has_translation=False, translation_path=None)
+    assert a.meta_tags == ""
+
+
+def test_article_meta_categories():
+    fm = {"categories": ["DIY", "Tech"]}
+    a = Article(slug="test", lang="it", path=Path("/tmp/test"), frontmatter=fm, has_translation=False, translation_path=None)
+    assert a.meta_categories == "DIY, Tech"
+
+
+def test_article_meta_date():
+    fm = {"date": "2024-01-15T10:00:00+00:00"}
+    a = Article(slug="test", lang="it", path=Path("/tmp/test"), frontmatter=fm, has_translation=False, translation_path=None)
+    assert a.meta_date == "2024-01-15"
+
+
+def test_article_meta_date_missing():
+    a = Article(slug="test", lang="it", path=Path("/tmp/test"), frontmatter={}, has_translation=False, translation_path=None)
+    assert a.meta_date == ""