def begin_site(self): """ Initialize plugin. Add a sort and match method for every configuration mentioned in site settings """ config = self.site.config if not hasattr(config, 'sorter'): return for name, settings in config.sorter.__dict__.items(): sort_method_name = 'walk_resources_sorted_by_%s' % name self.logger.debug("Adding sort methods for [%s]" % name) add_method(Node, sort_method_name, sort_method, settings=settings) match_method_name = 'is_%s' % name add_method(Resource, match_method_name, filter_method, settings) prev_att = 'prev_by_%s' % name next_att = 'next_by_%s' % name setattr(Resource, prev_att, None) setattr(Resource, next_att, None) walker = getattr(self.site.content, sort_method_name, self.site.content.walk_resources) for prev, next in pairwalk(walker()): setattr(prev, next_att, next) setattr(next, prev_att, prev)
def begin_site(self): """ Initialize plugin. Add tag to the site context variable and methods for walking tagged resources. """ self.logger.debug("Adding tags from metadata") config = self.site.config content = self.site.content tags = {} add_method(Node, 'walk_resources_tagged_with', walk_resources_tagged_with) walker = get_tagger_sort_method(self.site) for resource in walker(): try: taglist = attrgetter("meta.tags")(resource) except AttributeError: continue for tag in taglist: if not tag in tags: tags[tag] = [resource] add_method(Node, 'walk_resources_tagged_with_%s' % tag, walk_resources_tagged_with, tag=tag) else: tags[tag].append(resource) self.site.tagger = Expando(dict(tags=tags))
def _create_tag_relations(self,tag,tags,relations): for relation_name in relations.keys(): related_tag_name=relations[relation_name] if not related_tag_name in tags: related_tag=Tag(related_tag_name) tags[relation_name]=related_tag else: related_tag=tags[related_tag_name] add_method(Node, 'walk_resources_tagged_with_%s' % related_tag_name, walk_resources_tagged_with, tag=tag) tag.relate_to_tag(related_tag,relation_name)
def begin_site(self): """ Initialize plugin. Add tag to the site context variable and methods for walking tagged resources. """ self.logger.debug("Adding tags from metadata") config = self.site.config content = self.site.content tags = {} add_method(Node, 'walk_resources_tagged_with', walk_resources_tagged_with) walker = get_tagger_sort_method(self.site) for resource in walker(): self._process_tags_in_resource(resource, tags) self._process_tag_metadata(tags) self.site.tagger = Expando(dict(tags=tags)) self._generate_archives()
def begin_site(self): """ Initialize plugin. Add tag to the site context variable and methods for walking tagged resources. """ self.logger.debug("Adding tags from metadata") config = self.site.config content = self.site.content tags = {} add_method(Node, 'walk_resources_tagged_with', walk_resources_tagged_with) walker = get_tagger_sort_method(self.site) for resource in walker(): try: taglist = attrgetter("meta.tags")(resource) except AttributeError: continue for tagname in taglist: if not tagname in tags: tag = Tag(tagname) tags[tagname] = tag tag.resources.append(resource) add_method(Node, 'walk_resources_tagged_with_%s' % tagname, walk_resources_tagged_with, tag=tag) else: tags[tagname].resources.append(resource) if not hasattr(resource, 'tags'): setattr(resource, 'tags', []) resource.tags.append(tags[tagname]) try: tag_meta = self.site.config.tagger.tags.to_dict() except AttributeError: tag_meta = {} for tagname, meta in tag_meta.iteritems(): # 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) self.site.tagger = Expando(dict(tags=tags))
def begin_site(self): """ Initialize plugin. Add a sort and match method for every configuration mentioned in site settings """ config = self.site.config if not hasattr(config, 'sorter'): return for name, settings in list(config.sorter.__dict__.items()): sort_method_name = 'walk_resources_sorted_by_%s' % name self.logger.debug("Adding sort methods for [%s]" % name) add_method(Node, sort_method_name, sort_method, settings=settings) match_method_name = 'is_%s' % name add_method(Resource, match_method_name, filter_method, settings) prev_att = 'prev_by_%s' % name next_att = 'next_by_%s' % name setattr(Resource, prev_att, None) setattr(Resource, next_att, None) walker = getattr(self.site.content, sort_method_name, self.site.content.walk_resources) first, last = None, None for prev, next in pairwalk(walker()): if not first: first = prev last = next setattr(prev, next_att, next) setattr(next, prev_att, prev) try: circular = settings.circular except AttributeError: circular = False if circular and first: setattr(first, prev_att, last) setattr(last, next_att, first)
def __init__(self, grouping, parent=None): self.name = 'groups' self.parent = parent self.root = self self.root = parent.root if parent else self self.groups = [] self.sorter = getattr(grouping, 'sorter', None) if hasattr(parent, 'sorter'): self.sorter = parent.sorter super(Group, self).__init__(grouping) add_method(Node, 'walk_%s_groups' % self.name, Group.walk_groups_in_node, group=self) add_method(Node, 'walk_resources_grouped_by_%s' % self.name, Group.walk_resources, group=self) add_property(Resource, '%s_group' % self.name, Group.get_resource_group, group=self) add_method(Resource, 'walk_%s_groups' % self.name, Group.walk_resource_groups, group=self)
def __init__(self, grouping, parent=None): self.name = 'groups' self.parent = parent self.root = self self.root = parent.root if parent else self self.groups = [] self.sorter = getattr(grouping, 'sorter', None) self.archives = getattr(grouping, 'archives', None).to_dict() if getattr(grouping, 'archives', None) else None #NOT_HAPPY: but conversion to dict from expando is required if hasattr(parent, 'sorter'): self.sorter = parent.sorter super(Group, self).__init__(grouping) if hasattr(parent, 'archives'): self.archives = parent.archives add_method(Node, 'walk_%s_groups' % self.name, Group.walk_groups_in_node, group=self) add_method(Node, 'walk_resources_grouped_by_%s' % self.name, Group.walk_resources, group=self) add_property(Resource, '%s_group' % self.name, Group.get_resource_group, group=self) add_method(Resource, 'walk_%s_groups' % self.name, Group.walk_resource_groups, group=self)
def _process_tags_in_resource(self, resource, tags): """ Reads the tags associated with this resource and adds them to the tag list if needed. """ try: taglist = attrgetter("meta.tags")(resource) except AttributeError: return new_tag_list=[] for tagname in taglist: if not type(tagname) is str: tagname,relations=self._parse_tag_relations(tagname,tags) else: relations=None new_tag_list.append(tagname) if not tagname in tags: tag = Tag(tagname) tags[tagname] = tag tag.resources.append(resource) add_method(Node, 'walk_resources_tagged_with_%s' % tagname, walk_resources_tagged_with, tag=tag) else: tags[tagname].resources.append(resource) if relations: self._create_tag_relations(tags[tagname],tags,relations) if not hasattr(resource, 'tags'): setattr(resource, 'tags', []) resource.tags.append(tags[tagname]) resource.meta.tags=new_tag_list
def _process_tags_in_resource(self, resource, tags): """ Reads the tags associated with this resource and adds them to the tag list if needed. """ try: taglist = attrgetter("meta.tags")(resource) except AttributeError: return for tagname in taglist: if not tagname in tags: tag = Tag(tagname) tags[tagname] = tag tag.resources.append(resource) add_method(Node, 'walk_resources_tagged_with_%s' % tagname, walk_resources_tagged_with, tag=tag) else: tags[tagname].resources.append(resource) if not hasattr(resource, 'tags'): setattr(resource, 'tags', []) resource.tags.append(tags[tagname])