diff options
Diffstat (limited to 'src/pyssg/page.py')
-rw-r--r-- | src/pyssg/page.py | 77 |
1 files changed, 18 insertions, 59 deletions
diff --git a/src/pyssg/page.py b/src/pyssg/page.py index 26d2655..d39d8ef 100644 --- a/src/pyssg/page.py +++ b/src/pyssg/page.py @@ -7,37 +7,31 @@ log: Logger = getLogger(__name__) class Page: def __init__(self, name: str, - ctime: float, - mtime: float, + cts: float, + mts: float, html: str, toc: str, toc_tokens: list[str], meta: dict[str, Any], - config: dict[str, Any], - dir_config: dict[str, Any]) -> None: - log.debug('initializing a page object with name "%s"', name) + config: dict[str, Any]) -> None: # initial data - self.name: str = name - self.ctimestamp: float = ctime - self.mtimestamp: float = mtime + self.name: str = name.replace(".md", ".html") + self.cts: float = cts + self.mts: float = mts self.content: str = html self.toc: str = toc self.toc_tokens: list[str] = toc_tokens self.meta: dict[str, Any] = meta self.config: dict[str, Any] = config - self.dir_config: dict[str, Any] = dir_config # data from self.meta self.title: str self.author: list[str] self.summary: str self.lang: str - self.cdatetime: datetime - self.mdatetime: datetime | None = None - self.tags: list[tuple[str, str]] = [] + self.tags: tuple[str] # constructed - self.url: str self.cdate_rss: str self.cdate_sitemap: str self.mdate_rss: str | None = None @@ -52,7 +46,6 @@ class Page: def __get_meta(self, var: str, or_else: str | list[str] = ['']) -> str | list[str] | Any: if var in self.meta: - log.debug('getting metadata "%s"', var) return self.meta[var] else: log.debug('getting metadata "%s" failed, using optional value "%s"', @@ -61,7 +54,9 @@ class Page: # these date/cdate/mdate might be a bit overcomplicated - def __date(self, dt: datetime, format: str) -> str: + def date(self, ts: float, format: str) -> str: + dt: datetime = datetime.fromtimestamp(ts, tz=timezone.utc) + if format in self.config['fmt']: return dt.strftime(self.config['fmt'][format]) else: @@ -69,56 +64,20 @@ class Page: 'empty string', format) return '' - def cdate(self, format: str) -> str: - return self.__date(self.cdatetime, format) - - def mdate(self, format: str) -> str: - if self.mdatetime is None: - log.warning('no mdatetime found, can\'t return a formatted string') - return '' - return self.__date(self.mdatetime, format) - - def from_timestamp(self, timestamp: float) -> datetime: - return datetime.fromtimestamp(timestamp, tz=timezone.utc) - # parses meta from self.meta def parse_metadata(self): - log.debug('parsing metadata for file "%s"', self.name) self.title = str(self.__get_meta('title')[0]) self.author = list(self.__get_meta('author')) self.summary = str(self.__get_meta('summary')[0]) self.lang = str(self.__get_meta('lang', ['en'])[0]) - log.debug('parsing timestamp') - self.cdatetime = self.from_timestamp(self.ctimestamp) - self.cdate_rss = self.cdate('rss_date') - self.cdate_sitemap = self.cdate('sitemap_date') - - if self.mtimestamp != 0.0: - log.debug('parsing modified timestamp') - self.mdatetime = self.from_timestamp(self.mtimestamp) - self.mdate_rss = self.mdate('rss_date') - self.mdate_sitemap = self.mdate('sitemap_date') - else: - log.debug('not parsing modified timestamp, hasn\'t been modified') - - if self.dir_config['tags']: - log.debug('parsing tags') - tags_only: list[str] = list(self.__get_meta('tags', [])) - if tags_only: - tags_only.sort() + # probably add a way to sanitize tags + self.tags = tuple(set(sorted(self.__get_meta('tags', [])))) + log.debug('parsed tags %s', self.tags) - for t in tags_only: - # need to specify dir_config['url'] as it is - # a hardcoded tag url - tag_url: str = f'{self.dir_config["url"]}/tag/@{t}.html' - self.tags.append((t, tag_url)) - else: - log.debug('no tags to parse') + self.cdate_rss = self.date(self.cts, 'rss_date') + self.cdate_sitemap = self.date(self.cts, 'sitemap_date') + if self.mts != 0.0: + self.mdate_rss = self.date(self.mts, 'rss_date') + self.mdate_sitemap = self.date(self.mts, 'sitemap_date') - log.debug('parsing page url') - # no need to specify dir_config['url'] as self.name already - # contains the relative url - name_html: str = self.name.replace(".md", ".html") - self.url = f'{self.config["url"]["base"]}/{name_html}' - log.debug('final url "%s"', self.url) |