class Generator: def __init__(self, config, context): self.config = config self.context = context 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 # categories categories = {} for page in published_pages: if page.category not in categories: categories[page.category] = {} if page.lang not in categories[page.category]: categories[page.category][page.lang] = [] categories[page.category][page.lang].append(page) self.context['categories'] = categories # tags tags = {} for page in published_pages: for tag in page.tags: if tag not in tags: tags[tag] = {} if page.lang not in tags[tag]: tags[tag][page.lang] = [] tags[tag][page.lang].append(page) self.context['tags'] = tags 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.url, lang, {'page': page}) # homepages for languages self.generate_homepage(writer, lang, lang + "/index.html") # homepage self.generate_homepage(writer, self.config['lang']['default'], "index.html")