diff --git a/src/zona/builder.py b/src/zona/builder.py index 549abbd..703bc2d 100644 --- a/src/zona/builder.py +++ b/src/zona/builder.py @@ -1,5 +1,5 @@ import shutil -from datetime import date +from datetime import date, datetime from pathlib import Path from feedgen.feed import FeedGenerator @@ -101,11 +101,9 @@ class ZonaBuilder: items.append(item) self.items = items - def generate_feed(self) -> bytes: + def generate_feed(self) -> str: post_list = self._get_post_list() config = self.config.feed - if config.link.endswith("/"): - config.link = config.link[:-2] fg = FeedGenerator() fg.id(config.link) fg.title(config.title) @@ -114,11 +112,7 @@ class ZonaBuilder: "email": config.author.email, } fg.author(author) - fg.link( - href=f"{config.link}/{config.path}", - rel="self", - type="application/rss+xml", - ) + fg.link(href=config.link, rel="self") fg.language(config.language) fg.description(config.description) @@ -126,18 +120,14 @@ class ZonaBuilder: assert post.metadata fe = fg.add_entry() # pyright: ignore[reportUnknownVariableType] fe.id(f"{config.link}{util.normalize_url(post.url)}") # pyright: ignore[reportUnknownMemberType] - fe.link( # pyright: ignore[reportUnknownMemberType] - href=f"{config.link}{util.normalize_url(post.url)}" - ) fe.title(post.metadata.title) # pyright: ignore[reportUnknownMemberType] fe.author(author) # pyright: ignore[reportUnknownMemberType] - desc = post.metadata.description - fe.description(desc) # pyright: ignore[reportUnknownMemberType] + fe.description(post.metadata.description) # pyright: ignore[reportUnknownMemberType] date = post.metadata.date - fe.pubDate(date) # pyright: ignore[reportUnknownMemberType] - out: bytes = fg.rss_str(pretty=True) # pyright: ignore[reportUnknownVariableType] - assert isinstance(out, bytes) - return out + # ISSUE: lack of timezone causes an error, need to add TZ config option + dt = datetime.combine(date, datetime.min.time()) + fe.pubDate(dt) # pyright: ignore[reportUnknownMemberType] + return fg.rss_str(pretty=True) # pyright: ignore[reportUnknownVariableType] def _get_post_list(self) -> list[Item]: assert self.items @@ -228,4 +218,4 @@ class ZonaBuilder: logger.debug("Building...") self._build() self.fresh = False - print(self.generate_feed().decode()) + # print(self.generate_feed()) diff --git a/src/zona/config.py b/src/zona/config.py index 84844c7..712158d 100644 --- a/src/zona/config.py +++ b/src/zona/config.py @@ -1,7 +1,7 @@ from __future__ import annotations from dataclasses import dataclass, field -from datetime import datetime, tzinfo +from datetime import tzinfo from pathlib import Path from typing import Any from zoneinfo import ZoneInfo @@ -10,6 +10,7 @@ import yaml from dacite import Config as DaciteConfig from dacite import from_dict +from zona import util from zona.log import get_logger logger = get_logger() @@ -31,17 +32,9 @@ def find_config(start: Path | None = None) -> Path | None: SitemapConfig = dict[str, str] -@dataclass -class PostDefaultsConfig: - description: str = "A blog post" - - @dataclass class BlogConfig: dir: str = "blog" - defaults: PostDefaultsConfig = field( - default_factory=PostDefaultsConfig - ) @dataclass @@ -93,7 +86,7 @@ class AuthorConfig: class FeedConfig: enabled: bool = True timezone: tzinfo = field(default_factory=lambda: ZoneInfo("UTC")) - path: str = "rss.xml" + path: str = "feed.xml" link: str = "https://example.com" title: str = "Zona Website" description: str = "My zona website." diff --git a/src/zona/metadata.py b/src/zona/metadata.py index 4551117..9f0ada6 100644 --- a/src/zona/metadata.py +++ b/src/zona/metadata.py @@ -17,7 +17,7 @@ from zona.config import ZonaConfig class Metadata: title: str date: datetime - description: str + description: str | None show_title: bool = True show_date: bool = True show_nav: bool = True @@ -70,7 +70,6 @@ def parse_metadata( defaults = { "title": zona.util.filename_to_title(path), "date": datetime.fromtimestamp(path.stat().st_ctime), - "description": config.blog.defaults.description, } meta = {**defaults, **raw_meta} meta["date"] = parse_date(meta.get("date"), config.feed.timezone)