Newer
Older
def __init__(self, config, context, factories):
def generate_context(self, pages, static_files):
# static_files
self.context['static_files'] = static_files
published_pages = []
for page in pages:
if page.status == "published":
published_pages.append(page)
# pages
all_pages = {}
for page in published_pages:
if page.lang not in all_pages:
all_pages[page.lang] = {}
if page.slug in all_pages[page.lang]:
raise Exception("duplicate language (",lang,") for slug '", slug ,"'")
all_pages[page.lang][page.slug] = page
self.context['pages'] = all_pages
# pages_modified
pages_modified = {}
for lang in self.config['lang']['supported']:
lang_pages = []
for page in published_pages:
if page.lang == lang:
lang_pages.append(page)
lang_pages.sort()
pages_modified[lang] = lang_pages
self.context['pages_modified'] = pages_modified
# TODO hidden pages
# TODO draft pages
# TODO authors
# tags
self.context['tags'] = self.factories['tag'].all()
# categories
self.context['categories'] = {}
for lang in self.config['lang']['supported']:
self.context['categories'][lang] = {}
for tag in self.context['tags'][lang].values():
if tag.is_category:
self.context['categories'][lang][tag.name] = tag
self.context['build_date'] = datatypes.Date("now", self.config)
# relevant_pages
relevant_pages_tuple = []
for page in published_pages:
if page.relevance['is_relevant']:
relevant_pages_tuple.append((page.relevance['prio'], page))
relevant_pages_tuple.sort(key=lambda x: x[0])
for prio, page in relevant_pages_tuple:
if page.lang not in relevant_pages:
relevant_pages[page.lang] = []
relevant_pages[page.lang].append(page)
self.context['relevant_pages'] = relevant_pages
self.context['relevant_pages_tuple'] = relevant_pages_tuple
def generate_homepage(self, writer, lang, path):
page = self.context['pages'][lang][self.config['theme']['homepage_slug']]
writer.write_template(page.template, path , lang, {'page': page})
def generate_output(self, writer):
for sf, raw in self.context['static_files'].items():
print ("writing binary file: ", sf)
writer.write_file(sf, raw, mode="wb")
for lang in self.config['lang']['supported']:
# all pages
for page in self.context['pages'][lang].values():
writer.write_template(page.template, page.link.path, lang, {'page': page})
for tag in self.context['tags'][lang].values():
writer.write_template('tag.html', tag.link.path, lang, {'tag': tag})