Skip to content
Snippets Groups Projects
generator.py 2.86 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jake's avatar
    Jake committed
    
    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")