def write_index(self, url, collection): """Write an auto-generated index.html file.""" check_doc_url = '/{}'.format(path.join(url, self.index_filename)) # make sure there exists no document at the index url if check_doc_url not in self.docs: # Ugly fix for issue #32: delete description var. This is called # for every index, instead of once for all, because write_index is # called in serve mode. Also there may remain other vars causing # future problems. # Emptying the vars dict does not work either, because the index # key is set in build_index and needed. if 'description' in self.template.vars: del self.template.vars['description'] title = self.index_title(url) self.template.vars['docs'] = collection.docs self.template.vars['title'] = title page = self.template.env.get_template(collection.template) content = page.render(self.template.vars) filename = path.target_file(self.dir_deploy, url) write(filename, content) # write directory RSS file self.write_rss(title, url, collection.docs)
def write_index(self, url, collection): """Write an auto-generated index.html file.""" check_doc_url = '/{}'.format(path.join(url, self.index_filename)) # make sure there exists no document at the index url if check_doc_url not in self.docs: # Ugly fix for issue #32: delete description var. This is called # for every index, instead of once for all, because write_index is # called in serve mode. Also there may remain other vars causing # future problems. # Emptying the vars dict does not work either, because the index # key is set in build_index and needed. if 'description' in self.template.vars: del self.template.vars['description'] title = self.index_title(url) self.template.vars['docs'] = collection.docs self.template.vars['title'] = title self.template.vars['canonical'] = '{:s}/{:s}/'.format(self.base_url, url) page = self.template.env.get_template(collection.template) content = page.render(self.template.vars) filename = path.target_file(self.dir_deploy, url) write(filename, content) # write directory RSS file self.write_rss(title, url, collection.docs)
def init_env(self): """Initialize the environment for generating the Web site to deploy. This function reads the Web site configuration, sets up the template environment and sets object properties. """ cwd = self.dir_site self.dir_content = path.join(cwd, 'content', required=True) self.config = config.load(path.join(cwd, 'site.yaml', required=True)) self.dir_templates = path.join(cwd, 'templates', required=True) self.template = Template(self) self.dir_bin = path.join(cwd, 'bin') # Make all settings in site section available to templates. self.template.vars.update(self.config['site']) # Optional directory with static files like css, js and images. self.dir_static = path.join(cwd, 'static') # Directory is created by the generate command. self.dir_deploy = path.join(cwd, 'deploy') self.base_url = self.config['site'].get('base_url') # base_url must be defined in settings if not self.base_url: raise Exception('base_url not set in site config.') # A dictionary of parsed documents indexed by resource paths. self.docs = {} # A dictionary of document collections. self.index = {} # A dictionary of collection names and distinct values. self.collections = {} # Set default templates once for a Logya instance. self.templates = { 'doc': self.config['content']['doc']['template'], 'index': self.config['content']['index']['template'], 'rss': self.config['content']['rss']['template'] } self.pages = {} # Set default pages for templates. for ctype, template in self.templates.items(): self.pages[ctype] = self.template.env.get_template(template) # Set languages if specified. if 'languages' in self.config: self.languages = self.config['languages'] # Map collection paths to config variables (vars) to make collection # settings accessible via index URLs. self.collection_index = { v['path']: k for k, v in self.config['collections'].items()}
def write_rss(self, feed_title, url, docs): """Write RSS 2.0 XML file in target directory""" self.template.vars['url'] = self.base_url self.template.vars['title'] = feed_title self.template.vars['description'] = feed_title self.template.vars['last_build'] = datetime.datetime.now() self.template.vars['docs'] = docs content = self.pages['rss'].render(self.template.vars) filename = path.target_file( self.dir_deploy, path.join(url, 'rss.xml')) write(filename, content)
def write_rss(self, feed_title, url, docs): """Write RSS 2.0 XML file in target directory""" self.template.vars['url'] = self.base_url self.template.vars['title'] = feed_title self.template.vars['description'] = feed_title self.template.vars['last_build'] = datetime.datetime.now() self.template.vars['docs'] = docs page = self.template.env.get_template(self.templates['rss']) content = page.render(self.template.vars) filename = path.target_file( self.dir_deploy, path.join(url, 'rss.xml')) write(filename, content)
def init_env(self): """Initialize the environment for generating the Web site to deploy. This function reads the Web site configuration, sets up the template environment and sets object properties. """ cwd = self.dir_site self.dir_content = path.join(cwd, 'content', required=True) self.config = config.load(path.join(cwd, 'site.yaml', required=True)) self.dir_templates = path.join(cwd, 'templates', required=True) self.template = Template(self) self.dir_bin = path.join(cwd, 'bin') # make all settings in site section available to templates self.template.vars.update(self.config['site']) # Optional directory with static files like css, js and images. self.dir_static = path.join(cwd, 'static') # Directory is created by the generate command. self.dir_deploy = path.join(cwd, 'deploy') self.base_url = self.config['site'].get('base_url') # base_url must be defined in settings if not self.base_url: raise Exception('base_url not set in site config.') # A dictionary of parsed documents indexed by resource paths. self.docs = {} # A dictionary of document collections. self.index = {} # Set default templates once for a Logya instance. self.templates = { 'doc': self.config['content']['doc']['template'], 'index': self.config['content']['index']['template'], 'rss': self.config['content']['rss']['template'] } # Set languages if specified. if 'languages' in self.config: self.languages = self.config['languages'] # Map collection paths to config variables (vars) to make collecion # settings accessible via index URLs. self.collection_index = { v['path']: k for k, v in self.config['collections'].items()}
def test_join_required_exists(self): self.assertEqual('tests', path.join('tests', required=True))
def test_join(self): self.assertEqual( 'dir/file.ext', path.join('dir', 'file.ext')) self.assertEqual( 'dir/subdir/file.ext', path.join('dir', 'subdir', 'file.ext'))
def test_join(self): self.assertEqual('dir/file.ext', path.join('dir', 'file.ext')) self.assertEqual('dir/subdir/file.ext', path.join('dir', 'subdir', 'file.ext'))