from dataclasses import dataclass
from .l10n.utils import ALLOWED_LANGS
import yaml
@dataclass
class SitemapEntry:
lastmod: str
priority: str
changefreq: str = "monthly"
__SITEMAP_ENTRIES: dict[str, SitemapEntry] = dict()
__XML_SITEMAP_CACHE = None
def reload_sitemap_entries(definition_file: str) -> None:
global __SITEMAP_ENTRIES
__SITEMAP_ENTRIES = dict()
with open(definition_file, 'r') as f:
raw_sitemap_entries: dict = yaml.safe_load(f)["sitemap"]
for allowed_lang in [""] + ALLOWED_LANGS:
for sitemap_entry_path in raw_sitemap_entries:
entry = SitemapEntry(**raw_sitemap_entries[sitemap_entry_path])
if not(allowed_lang == ""):
entry.priority = "0.0"
__SITEMAP_ENTRIES[
("/" + str(allowed_lang) + "/" + str(sitemap_entry_path))
.replace("//", "/")
.replace("//", "/")
] = entry
def get_sitemap_entries() -> list[str]:
return list(__SITEMAP_ENTRIES.keys())
def get_sitemap_xml(domain) -> str:
global __XML_SITEMAP_CACHE
if __XML_SITEMAP_CACHE is None:
__XML_SITEMAP_CACHE = (
"""\n""" +
"".join([
f"""
https://{domain}{k}
{v.lastmod}
{v.priority}
{v.changefreq}
"""
for k, v in __SITEMAP_ENTRIES.items()
]) +
"\n").replace(" 0.0\n ", "")
return __XML_SITEMAP_CACHE