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