import os from datetime import datetime, timezone from .page import Page from .configuration import Configuration DFORMAT = '%Y-%m-%d' class SitemapBuilder: def __init__(self, config: Configuration, template: str, pages: list[Page], tags: list[str]): self.config: Configuration = config self.sitemap: str = template self.pages: list[Page] = pages self.tags: list[str] = tags def build(self): # initial base replacements urls_formatted: str = self.__get_urls_formatted() self.sitemap = self.sitemap.replace('$$URLS', urls_formatted) with open(os.path.join(self.config.dst, 'sitemap.xml'), 'w') as f: f.write(self.sitemap) def __get_urls_formatted(self) -> str: # u_f=items formatted for short u_f: str = '' for p in self.pages: url: str = f'{self.config.base_url}/{p.name.replace(".md", ".html")}' if p.m_datetime is not None: date: str = p.m_datetime.strftime(DFORMAT) else: date: str = p.c_datetime.strftime(DFORMAT) u_f = f'{u_f} \n' u_f = f'{u_f} {url}\n' u_f = f'{u_f} {date}\n' u_f = f'{u_f} weekly\n' u_f = f'{u_f} 1.0\n' u_f = f'{u_f} \n' for t in self.tags: url: str = f'{self.config.base_url}/tag/@{t}.html' date: str = datetime.now(tz=timezone.utc).strftime(DFORMAT) u_f = f'{u_f} \n' u_f = f'{u_f} {url}\n' u_f = f'{u_f} {date}\n' u_f = f'{u_f} daily\n' u_f = f'{u_f} 0.5\n' u_f = f'{u_f} \n' return u_f