示例#1
0
    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)
示例#2
0
文件: tagger.py 项目: stiell/hyde
    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))
示例#3
0
    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)
示例#4
0
    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))
示例#5
0
文件: tagger.py 项目: groundnuty/hyde
 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)
示例#6
0
文件: meta.py 项目: AlfiyaZi/hyde
 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()
示例#7
0
 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()
示例#8
0
文件: tagger.py 项目: benallard/hyde
    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))
示例#9
0
文件: meta.py 项目: jiivan/hyde
    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)
示例#10
0
文件: meta.py 项目: jiivan/hyde
    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)
示例#11
0
文件: meta.py 项目: AlfiyaZi/hyde
    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)
示例#12
0
文件: meta.py 项目: troyscott/hyde
    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)
示例#13
0
    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)
示例#14
0
文件: tagger.py 项目: groundnuty/hyde
    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
示例#15
0
文件: meta.py 项目: AlfiyaZi/hyde
    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])
示例#16
0
    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])