def handle_token(cls, parser, token):
     tokens = token.contents.split()
     if tokens[1] != 'for':
         raise template.TemplateSyntaxError("First argument in %r tag must be 'for'" % tokens[0])
         
     # {% get_anon_comment_form for obj as varname %}
     if len(tokens) == 5:
         if tokens[3] != 'as':
             raise template.TemplateSyntaxError("Third argument in %r tag must be 'as'" % tokens[0])
         return cls(
             object_expr = parser.compile_filter(tokens[2]),
             as_varname = tokens[4]
         )
         
     # {% get_anon_comment_form for app.model pk as varname %}
     if len(tokens) == 6:
         if tokens[4] != 'as':
             raise template.TemplateSyntaxError("Fourth argument in %r tag must be 'as'" % tokens[0])
         return cls(
             ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
             object_pk_expr = parser.compile_filter(tokens[3]),
             as_varname = tokens[5]
         )
     
     # {% get_anon_comment_form for obj replying to parent_comment as varname %}
     if len(tokens) == 8:
         if tokens[3] != 'replying':
             raise template.TemplateSyntaxError("Third argument in %r tag must be 'replying'" % tokens[0])
         if tokens[4] != 'to':
             raise template.TemplateSyntaxError("Fourth argument in %r tag must be 'to'" % tokens[0])
         if tokens[6] != 'as':
             raise template.TemplateSyntaxError("Sixth argument in %r tag must be 'as'" % tokens[0])
         return cls(
             object_expr = parser.compile_filter(tokens[2]),
             parent_comment = parser.compile_filter(tokens[5]),
             as_varname = tokens[7]
         )
         
     # {% get_anon_comment_form for app.model pk replying to parent_comment as varname %}
     if len(tokens) == 9:
         if tokens[4] != 'replying':
             raise template.TemplateSyntaxError("Fourth argument in %r tag must be 'replying'" % tokens[0])
         if tokens[5] != 'to':
             raise template.TemplateSyntaxError("Fifth argument in %r tag must be 'to'" % tokens[0])
         if tokens[7] != 'as':
             raise template.TemplateSyntaxError("Seventh argument in %r tag must be 'as'" % tokens[0])
         return cls(
             ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
             object_pk_expr = parser.compile_filter(tokens[3]),
             parent_comment = parser.compile_filter(tokens[6]),
             as_varname = tokens[8]
         )
     
     raise template.TemplateSyntaxError("%r tag requires 4, 5, 7, or 8 arguments" % tokens[0])
    def handle_token(cls, parser, token):
        """Class method to parse render_comment_form and return a Node."""
        tokens = token.contents.split()
        if tokens[1] != 'for':
            raise template.TemplateSyntaxError("Second argument in %r tag must be 'for'" % tokens[0])

        # {% render_comment_form for obj %}
        if len(tokens) == 3:
            return cls(object_expr=parser.compile_filter(tokens[2]))
        # {% render_comment_form for app.model object_pk %}
        elif len(tokens) == 4:
            return cls(
                ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
                object_pk_expr = parser.compile_filter(tokens[3])
                )
        # {% render_comment_form for obj with parent_id %}
        elif len(tokens) == 5:
            if tokens[-2] != u'with':
                raise template.TemplateSyntaxError("%r tag must have 'with' as the last but one argument" %tokens[0])
            return cls(
                object_expr=parser.compile_filter(tokens[2]),
                parent = parser.compile_filter(tokens[4])
                )
        # {% render_comment_form for app.model object_pk with parent_id %}
        elif len(tokens) == 6:
            if tokens[-2] != u'with':
                raise template.TemplateSyntaxError("%r tag must have 'with' as the last but one argument" %tokens[0])                
            return cls(
                ctype = BaseThreadedCommentNode.lookup_content_type(tokens[2], tokens[0]),
                object_pk_expr = parser.compile_filter(tokens[3]),
                parent = parser.compile_filter(tokens[5])
                )
        else:
            raise template.TemplateSyntaxError("%r tag takes 3 to 5 arguments" %tokens[0])
示例#3
0
    def handle_token(cls, parser, token):
        tokens = token.contents.split()
        if tokens[1] != 'for':
            raise template.TemplateSyntaxError(
                "Second argument in %r tag must be 'for'" % tokens[0])

        extra_kw = {}
        if tokens[-2] == 'limit':
            if tokens[-1].isdigit():
                extra_kw['limit'] = tokens.pop(-1)  # removes limit integer
                tokens.pop(-1)  # removes 'limit'
            else:
                raise template.TemplateSyntaxError(
                    "When using 'limit' with %r tag, it needs to be followed by a positive integer"
                    % (tokens[0], ))
        if tokens[-1] in ('flat', 'root_only', 'newest', 'admin'):
            extra_kw[str(tokens.pop())] = True

        if len(tokens) == 3:
            # {% render_comment_list for obj %}
            return cls(object_expr=parser.compile_filter(tokens[2]),
                       **extra_kw)
        elif len(tokens) == 4:
            # {% render_comment_list for app.models pk %}
            return cls(ctype=BaseCommentNode.lookup_content_type(
                tokens[2], tokens[0]),
                       object_pk_expr=parser.compile_filter(tokens[3]),
                       **extra_kw)
        else:
            raise template.TemplateSyntaxError(
                "%r tag takes either 2 or 3 arguments" % (tokens[0], ))
def get_comment_paginator_page(parser, token):
    """
    Gets a paginator for navigating through comment lists
    
    Syntax::
        
        {% get_comment_paginator_page for [object] as [varname] %}
        {% get_comment_paginator_page for [app].[model] [pk] as [varname] %}
    """
    
    tokens = token.contents.split()
    if tokens[1] != 'for':
        raise template.TemplateSyntaxError("First argument in %r tag must be 'for'" % tokens[0])
    if len(tokens) == 5:
        if tokens[3] != 'as':
            raise template.TemplateSyntaxError("Third argument in %r tag must be 'as'" % tokens[0])
        return CommentPaginationPageNode(
            object_expr = parser.compile_filter(tokens[2]),
            as_varname = tokens[4]
        )
    if len(tokens) == 6:
        if tokens[4] != 'as':
            raise template.TemplateSyntaxError("Fifth argument in %r tag must be 'as'" % tokens[0])
        return CommentPaginationPageNode(
            ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
            object_pk_expr = parser.compile_filter(tokens[3]),
            as_varname = tokens[5]
        )
    raise template.TemplateSyntaxError("%r tag requires 4 or 5 arguments" % tokens[0])
 def handle_token(cls, parser, token):
     tokens = token.contents.split()
     if tokens[1] != 'for':
         raise template.TemplateSyntaxError("First argument in %r tag must be 'for'" % tokens[0])
     
     # {% render_threaded_comment_list for obj with comments comments_enabled_field %}
     if len(tokens) == 6:
         if tokens[3] != 'with':
             raise template.TemplateSyntaxError("Third argument in %r tag must be 'with'" % tokens[0])
         if tokens[4] != 'comments':
             raise template.TemplateSyntaxError("Fourth argument in %r tag must be 'comments'" % tokens[0])
         return cls(
             object_expr = parser.compile_filter(tokens[2]),
             comments_enabled = parser.compile_filter(tokens[5])
         )
     
     # {% render_threaded_comment_list for app.model pk with comments comments_enabled_field %}
     if len(tokens) == 7:
         if tokens[4] != 'with':
             raise template.TemplateSyntaxError("Fourth argument in %r tag must be 'with'" % tokens[0])
         if tokens[5] != 'comments':
             raise template.TemplateSyntaxError("Fifth argument in %r tag must be 'comments'" % tokens[0])
         return cls(
             ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
             object_pk_expr = parser.compile_filter(tokens[3]),
             comments_enabled = parser.compile_filter(tokens[6])
         )
         
     raise template.TemplateSyntaxError("%r tags takes 5 or 6 arguments" % tokens[0])
    def handle_token(cls, parser, token):
        tokens = token.contents.split()
        if tokens[1] != 'for':
            raise template.TemplateSyntaxError("Second argument in %r tag must be 'for'" % tokens[0])

        # {% get_comment_list for obj as varname %}
        if len(tokens) == 5:
            if tokens[3] != 'as':
                raise template.TemplateSyntaxError("Third argument in %r must be 'as'" % tokens[0])
            return cls(
                object_expr = parser.compile_filter(tokens[2]),
                as_varname = tokens[4],
            )

        # {% get_comment_list for app.model pk as varname %}
        elif len(tokens) == 6:
            if tokens[4] != 'as':
                raise template.TemplateSyntaxError("Fourth argument in %r must be 'as'" % tokens[0])
            return cls(
                ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
                object_pk_expr = parser.compile_filter(tokens[3]),
                as_varname = tokens[5],
            )

        else:
            raise template.TemplateSyntaxError("%r tag requires 4 or 5 arguments" % tokens[0])
    def handle_token(cls, parser, token):
        """
            Class method to parse get_comment_list/count/form and return a Node.

            Forked from django.contrib.comments.templatetags. with_parent,
            root-only concepts borrowed from django-threadedcomments.
        """
        tokens = token.contents.split()

        with_parent = None
        extra_kw = {}
        extra_possible_kw = ("root_only", "flat", "reverse", "sort=mostcommented", "sort=mostrecentreplies")
        for dummy in extra_possible_kw:
            if tokens[-1] in extra_possible_kw:
                split = str(tokens.pop()).split("=")
                key = split[0]
                extra_kw[key] = len(split) > 1 and split[1] or True

        if tokens[1] != "for":
            raise template.TemplateSyntaxError("Second argument in %r tag must be 'for'" % tokens[0])

        # {% get_whatever for obj as varname %}
        # {% get_whatever for obj as varname with parent %}
        if len(tokens) == 5 or len(tokens) == 7:
            if tokens[3] != "as":
                raise template.TemplateSyntaxError("Third argument in %r must be 'as'" % tokens[0])
            if len(tokens) == 7:
                if tokens[5] != "with":
                    raise template.TemplateSyntaxError(
                        "When 6 arguments are given, fifth argument in %r must be 'with' followed by the parent commment wanted"
                        % tokens[0]
                    )
                with_parent = tokens[6]
            return cls(
                object_expr=parser.compile_filter(tokens[2]), as_varname=tokens[4], with_parent=with_parent, **extra_kw
            )

        # {% get_whatever for app.model pk as varname %}
        # {% get_whatever for app.model pk as varname with parent %}
        elif len(tokens) == 6 or len(tokens) == 8:
            if tokens[4] != "as":
                raise template.TemplateSyntaxError("Fourth argument in %r must be 'as'" % tokens[0])
            if len(tokens) == 8:
                if tokens[6] != "with":
                    raise template.TemplateSyntaxError(
                        "When 6 arguments are given, fifth argument in %r must be 'with' followed by the parent commment wanted"
                        % tokens[0]
                    )
                with_parent = tokens[7]
            return cls(
                ctype=BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
                object_pk_expr=parser.compile_filter(tokens[3]),
                as_varname=tokens[5],
                with_parent=with_parent,
                **extra_kw
            )

        else:
            raise template.TemplateSyntaxError("%r tag requires 4, 5, 6 or 7 arguments" % tokens[0])
    def handle_token(cls, parser, token):
        tokens = token.contents.split()
        if tokens[1] != 'for':
            raise template.TemplateSyntaxError("First argument in %r tag must be 'for'" % tokens[0])
            
        # {% render_anon_comment_form for obj %}
        if len(tokens) == 3:
            return cls(
                object_expr = parser.compile_filter(tokens[2])
            )
            
        # {% render_anon_comment_form for app.model pk %}
        if len(tokens) == 4:
            return cls(
                ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
                object_pk_expr = parser.compile_filter(tokens[3])
            )
        
        # {% render_anon_comment_form for obj replying to parent_comment %}
        if len(tokens) == 6:
            if tokens[3] != 'replying':
                raise template.TemplateSyntaxError("Third argument in %r tag must be 'replying'" % tokens[0])
            if tokens[4] != 'to':
                raise template.TemplateSyntaxError("Fourth argument in %r tag must be 'to'" % tokens[0])
            return cls(
                object_expr = parser.compile_filter(tokens[2]),
                parent_comment = parser.compile_filter(tokens[5])
            )
            
        # {% render_anon_comment_form for app.model pk replying to parent_comment %}
        if len(tokens) == 7:
            if tokens[4] != 'replying':
                raise template.TemplateSyntaxError("Fourth argument in %r tag must be 'replying'" % tokens[0])
            if tokens[5] != 'to':
                raise template.TemplateSyntaxError("Fifth argument in %r tag must be 'to'" % tokens[0])
            return cls(
                ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
                object_pk_expr = parser.compile_filter(tokens[3]),
                parent_comment = parser.compile_filter(tokens[6])
            )

        raise template.TemplateSyntaxError("%r tag requires 2, 3, 5, or 6 arguments" % tokens[0])
示例#9
0
    def handle_token(cls, parser, token):
        """Class method to parse render_comment_form and return a Node."""
        tokens = token.contents.split()
        if tokens[1] != 'for':
            raise template.TemplateSyntaxError("Second argument in %r tag must be 'for'" % tokens[0])

        # {% render_comment_form for obj %}
        if len(tokens) == 3:
            return cls(object_expr=parser.compile_filter(tokens[2]))

        # {% render_comment_form for app.models pk %}
        elif len(tokens) == 4:
            return cls(
                ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
                object_pk_expr = parser.compile_filter(tokens[3])
            )
示例#10
0
    def handle_token(cls, parser, token):
        """Class method to parse render_comment_form and return a Node."""
        tokens = token.contents.split()
        if tokens[1] != 'for':
            raise template.TemplateSyntaxError(
                "Second argument in %r tag must be 'for'" % tokens[0])

        # {% render_comment_form for obj %}
        if len(tokens) == 3:
            return cls(object_expr=parser.compile_filter(tokens[2]))

        # {% render_comment_form for app.models pk %}
        elif len(tokens) == 4:
            return cls(ctype=BaseCommentNode.lookup_content_type(
                tokens[2], tokens[0]),
                       object_pk_expr=parser.compile_filter(tokens[3]))
    def handle_token(cls, parser, token):
        tokens = token.contents.split()
        if tokens[1] != 'for':
            raise template.TemplateSyntaxError("Second argument in %r tag must be 'for'" % tokens[0])

        extra_kw = {}
        if tokens[-1] in ('flat', 'root_only', 'karma', 'tree'):
            extra_kw[str(tokens.pop())] = True

        if len(tokens) == 3:
            # {% render_comment_list for obj %}
            return cls(
                object_expr=parser.compile_filter(tokens[2]),
                **extra_kw
            )
        elif len(tokens) == 4:
            # {% render_comment_list for app.models pk %}
            return cls(
                ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
                object_pk_expr = parser.compile_filter(tokens[3]),
                **extra_kw
            )

        elif len(tokens) == 5:
            # {% render_list_form for obj with parent_id %}
            if tokens[-2] != u'with':
                raise template.TemplateSyntaxError("%r tag must have 'with' as the last but one argument" % (tokens[0],))
            return cls(
                object_expr=parser.compile_filter(tokens[2]),
                parent=parser.compile_filter(tokens[4]),
                **extra_kw
            )

        elif len(tokens) == 6:
            # {% render_list_form for app.model object_pk with parent_id %}
            if tokens[-2] != u'with':
                raise template.TemplateSyntaxError("%r tag must have 'with' as the last but one argument" % (tokens[0],))
            return cls(
                ctype=BaseThreadedCommentNode.lookup_content_type(tokens[2], tokens[0]),
                object_pk_expr=parser.compile_filter(tokens[3]),
                parent=parser.compile_filter(tokens[5]),
                **extra_kw
            )

        else:
            raise template.TemplateSyntaxError("%r tag takes either 2 or 3 arguments" % (tokens[0],))
示例#12
0
    def handle_token(cls, parser, token):
        """
        Class method to parse render_comment_form and return a Node.
        """
        tokens = token.contents.split()
        if tokens[1] != 'for':
            raise template.TemplateSyntaxError(
                "Second argument in %r tag must be 'for'" % tokens[0])

        if len(tokens) == 3:
            # {% render_comment_form for obj %}
            return cls(object_expr=parser.compile_filter(tokens[2]))
        elif len(tokens) == 4:
            # {% render_comment_form for app.model object_pk %}
            return cls(ctype=BaseCommentNode.lookup_content_type(
                tokens[2], tokens[0]),
                       object_pk_expr=parser.compile_filter(tokens[3]))
        elif len(tokens) == 5:
            # {% render_comment_form for obj with parent_id %}
            if tokens[-2] != u'with':
                raise template.TemplateSyntaxError(
                    "%r tag must have 'with' as the last but one argument" %
                    (tokens[0], ))
            return cls(object_expr=parser.compile_filter(tokens[2]),
                       parent=parser.compile_filter(tokens[4]))
        elif len(tokens) == 6:
            # {% render_comment_form for app.model object_pk with parent_id %}
            if tokens[-2] != u'with':
                raise template.TemplateSyntaxError(
                    "%r tag must have 'with' as the last but one argument" %
                    (tokens[0], ))
            return cls(ctype=BaseThreadedCommentNode.lookup_content_type(
                tokens[2], tokens[0]),
                       object_pk_expr=parser.compile_filter(tokens[3]),
                       parent=parser.compile_filter(tokens[5]))
        else:
            raise template.TemplateSyntaxError(
                "%r tag takes 2 to 5 arguments" % (tokens[0], ))
示例#13
0
    def handle_token(cls, parser, token):
        tokens = token.contents.split()
        if tokens[1] != 'for':
            raise template.TemplateSyntaxError(
                "Second argument in %r tag must be 'for'" % tokens[0])

        extra_kw = {}
        if tokens[-1] in ('flat', 'root_only'):
            extra_kw[str(tokens.pop())] = True

        if len(tokens) == 3:
            # {% render_comment_list for obj %}
            return cls(object_expr=parser.compile_filter(tokens[2]),
                       **extra_kw)
        elif len(tokens) == 4:
            # {% render_comment_list for app.models pk %}
            return cls(ctype=BaseCommentNode.lookup_content_type(
                tokens[2], tokens[0]),
                       object_pk_expr=parser.compile_filter(tokens[3]),
                       **extra_kw)
        else:
            raise template.TemplateSyntaxError(
                "%r tag takes either 2 or 3 arguments" % (tokens[0], ))
    def handle_token(cls, parser, token):
        tokens = token.contents.split()
        if tokens[1] != 'for':
            raise template.TemplateSyntaxError("Second argument in %r tag must be 'for'" % tokens[0])

        extra_kw = {}
        if tokens[-1] in ('flat', 'root_only'):
            extra_kw[str(tokens.pop())] = True

        if len(tokens) == 3:
            # {% render_comment_list for obj %}
            return cls(
                object_expr=parser.compile_filter(tokens[2]),
                **extra_kw
            )
        elif len(tokens) == 4:
            # {% render_comment_list for app.models pk %}
            return cls(
                ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
                object_pk_expr = parser.compile_filter(tokens[3]),
                **extra_kw
            )
        else:
            raise template.TemplateSyntaxError("%r tag takes either 2 or 3 arguments" % (tokens[0],))