def begin_text_resource(self, resource, text): """Event hook for processing an individual resource. If the input resource is a sphinx input file, this method will replace replace the text of the file with the sphinx-generated documentation. Sphinx itself is run lazily the first time this method is called. This means that if no sphinx-related resources need updating, then we entirely avoid running sphinx. """ suffix = self.sphinx_config.get("source_suffix", ".rst") if not resource.source_file.path.endswith(suffix): return text if self.sphinx_build_dir is None: self._run_sphinx() output = [] settings = self.settings sphinx_output = self._get_sphinx_output(resource) # If they're set up a block_map, use the specific blocks. # Otherwise, output just the body for use by default_block. if not settings.block_map: output.append(sphinx_output["body"]) else: for (nm, content) in iteritems(sphinx_output): try: block = getattr(settings.block_map, nm) except AttributeError: pass else: output.append("{%% block %s %%}" % (block, )) output.append(content) output.append("{% endblock %}") return "\n".join(output)
def begin_text_resource(self, resource, text): """Event hook for processing an individual resource. If the input resource is a sphinx input file, this method will replace replace the text of the file with the sphinx-generated documentation. Sphinx itself is run lazily the first time this method is called. This means that if no sphinx-related resources need updating, then we entirely avoid running sphinx. """ suffix = self.sphinx_config.get("source_suffix", ".rst") if not resource.source_file.path.endswith(suffix): return text if self.sphinx_build_dir is None: self._run_sphinx() output = [] settings = self.settings sphinx_output = self._get_sphinx_output(resource) # If they're set up a block_map, use the specific blocks. # Otherwise, output just the body for use by default_block. if not settings.block_map: output.append(sphinx_output["body"]) else: for (nm, content) in iteritems(sphinx_output): try: block = getattr(settings.block_map, nm) except AttributeError: pass else: output.append("{%% block %s %%}" % (block,)) output.append(content) output.append("{% endblock %}") return "\n".join(output)
def map_extensions(self): """ Maps extensions specified in the configuration. """ try: extensions = self.site.config.server.extensions.to_dict() except AttributeError: extensions = {} for extension, type in iteritems(extensions): ext = "." + extension if not extension == 'default' else '' HydeRequestHandler.extensions_map[ext] = type
def _generate_archives(self): """ Generates archives if the configuration demands. """ archive_config = None try: archive_config = attrgetter("tagger.archives")(self.site.config) except AttributeError: return self.logger.debug("Generating archives for tags") for name, config in iteritems(archive_config.to_dict()): self._create_tag_archive(config)
def _create_tag_archive(self, config): """ Generates archives for each tag based on the given configuration. """ if 'template' not in config: raise HydeException( "No Template specified in tagger configuration.") content = self.site.content.source_folder source = Folder(config.get('source', '')) target = content.child_folder(config.get('target', 'tags')) if not target.exists: target.make() # Write meta data for the configuration meta = config.get('meta', {}) meta_text = u'' if meta: import yaml meta_text = yaml.dump(meta, default_flow_style=False) extension = config.get('extension', 'html') template = config['template'] archive_text = u""" --- extends: false %(meta)s --- {%% set tag = site.tagger.tags['%(tag)s'] %%} {%% set source = site.content.node_from_relative_path('%(node)s') %%} {%% set walker = source['walk_resources_tagged_with_%(tag)s'] %%} {%% extends "%(template)s" %%} """ for tagname, tag in iteritems(self.site.tagger.tags.to_dict()): tag_data = { "tag": tagname, "node": source.name, "template": template, "meta": meta_text } text = archive_text % tag_data archive_file = File(target.child("%s.%s" % (tagname, extension))) archive_file.delete() archive_file.write(text.strip()) self.site.content.add_resource(archive_file)
def _create_tag_archive(self, config): """ Generates archives for each tag based on the given configuration. """ if 'template' not in config: raise HydeException( "No Template specified in tagger configuration.") content = self.site.content.source_folder source = Folder(config.get('source', '')) target = content.child_folder(config.get('target', 'tags')) if not target.exists: target.make() # Write meta data for the configuration meta = config.get('meta', {}) meta_text = '' if meta: import yaml meta_text = yaml.dump(meta, default_flow_style=False) extension = config.get('extension', 'html') template = config['template'] archive_text = """ --- extends: false %(meta)s --- {%% set tag = site.tagger.tags['%(tag)s'] %%} {%% set source = site.content.node_from_relative_path('%(node)s') %%} {%% set walker = source['walk_resources_tagged_with_%(tag)s'] %%} {%% extends "%(template)s" %%} """ for tagname, tag in iteritems(self.site.tagger.tags.to_dict()): tag_data = { "tag": tagname, "node": source.name, "template": template, "meta": meta_text } text = archive_text % tag_data archive_file = File(target.child("%s.%s" % (tagname, extension))) archive_file.delete() archive_file.write(text.strip()) self.site.content.add_resource(archive_file)
def _process_tag_metadata(self, tags): """ Parses and adds metadata to the tagger object, if the tagger configuration contains metadata. """ try: tag_meta = self.site.config.tagger.tags.to_dict() except AttributeError: tag_meta = {} for tagname, meta in iteritems(tag_meta): # Don't allow name and resources in meta if 'resources' in meta: del(meta['resources']) if 'name' in meta: del(meta['name']) if tagname in tags: tags[tagname].update(meta)
def _process_tag_metadata(self, tags): """ Parses and adds metadata to the tagger object, if the tagger configuration contains metadata. """ try: tag_meta = self.site.config.tagger.tags.to_dict() except AttributeError: tag_meta = {} for tagname, meta in iteritems(tag_meta): # Don't allow name and resources in meta if 'resources' in meta: del (meta['resources']) if 'name' in meta: del (meta['name']) if tagname in tags: tags[tagname].update(meta)
def __iter__(self): """ Returns an iterator for all the items in the dictionary as key value pairs. """ return iteritems(self.__dict__)