Django

Code

Changeset 578

Show
Ignore:
Timestamp:
08/30/05 16:33:12 (3 years ago)
Author:
adrian
Message:

Refactored comment templatetags to remove redundant 'tag_name' parameter. Also added an 'extra_kwargs' hook to CommentListNode?

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/contrib/comments/templatetags/comments.py

    r549 r578  
    129129 
    130130class CommentListNode(template.Node): 
    131     def __init__(self, package, module, context_var_name, obj_id, var_name, free, ordering): 
     131    def __init__(self, package, module, context_var_name, obj_id, var_name, free, ordering, extra_kwargs=None): 
    132132        self.package, self.module = package, module 
    133133        self.context_var_name, self.obj_id = context_var_name, obj_id 
    134134        self.var_name, self.free = var_name, free 
    135135        self.ordering = ordering 
     136        self.extra_kwargs = extra_kwargs or {} 
    136137 
    137138    def render(self, context): 
     
    151152            'order_by': (self.ordering + 'submit_date',), 
    152153        } 
     154        kwargs.update(self.extra_kwargs) 
    153155        if not self.free and COMMENTS_BANNED_USERS_GROUP: 
    154156            kwargs['select'] = {'is_hidden': 'user_id IN (SELECT user_id FROM auth_users_groups WHERE group_id = %s)' % COMMENTS_BANNED_USERS_GROUP} 
     
    183185    ``[context_var_containing_obj_id]`` can be a hard-coded integer or a variable containing the ID. 
    184186    """ 
    185     def __init__(self, free, tag_name): 
    186         self.free, self.tag_name = free, tag_nam
     187    def __init__(self, free): 
     188        self.free = fre
    187189 
    188190    def __call__(self, parser, token): 
    189191        tokens = token.contents.split() 
    190192        if len(tokens) < 4: 
    191             raise template.TemplateSyntaxError, "'%s' tag requires at least 3 arguments" % self.tag_name 
     193            raise template.TemplateSyntaxError, "%r tag requires at least 3 arguments" % tokens[0] 
    192194        if tokens[1] != 'for': 
    193             raise template.TemplateSyntaxError, "Second argument in '%s' tag must be 'for'" % self.tag_name 
     195            raise template.TemplateSyntaxError, "Second argument in %r tag must be 'for'" % tokens[0] 
    194196        try: 
    195197            package, module = tokens[2].split('.') 
    196198        except ValueError: # unpack list of wrong size 
    197             raise template.TemplateSyntaxError, "Third argument in '%s' tag must be in the format 'package.module'" % self.tag_name 
     199            raise template.TemplateSyntaxError, "Third argument in %r tag must be in the format 'package.module'" % tokens[0] 
    198200        try: 
    199201            content_type = contenttypes.get_object(package__label__exact=package, python_module_name__exact=module) 
    200202        except contenttypes.ContentTypeDoesNotExist: 
    201             raise template.TemplateSyntaxError, "'%s' tag has invalid content-type '%s.%s'" % (self.tag_name, package, module) 
     203            raise template.TemplateSyntaxError, "%r tag has invalid content-type '%s.%s'" % (tokens[0], package, module) 
    202204        obj_id_lookup_var, obj_id = None, None 
    203205        if tokens[3].isdigit(): 
     
    206208                content_type.get_object_for_this_type(pk=obj_id) 
    207209            except ObjectDoesNotExist: 
    208                 raise template.TemplateSyntaxError, "'%s' tag refers to %s object with ID %s, which doesn't exist" % (self.tag_name, content_type.name, obj_id) 
     210                raise template.TemplateSyntaxError, "%r tag refers to %s object with ID %s, which doesn't exist" % (tokens[0], content_type.name, obj_id) 
    209211        else: 
    210212            obj_id_lookup_var = tokens[3] 
     
    212214        if len(tokens) > 4: 
    213215            if tokens[4] != 'with': 
    214                 raise template.TemplateSyntaxError, "Fourth argument in '%s' tag must be 'with'" % self.tag_name 
     216                raise template.TemplateSyntaxError, "Fourth argument in %r tag must be 'with'" % tokens[0] 
    215217            for option, args in zip(tokens[5::2], tokens[6::2]): 
    216218                if option in ('photos_optional', 'photos_required') and not self.free: 
     
    218220                    option_list = args.split(',') 
    219221                    if len(option_list) % 3 != 0: 
    220                         raise template.TemplateSyntaxError, "Incorrect number of comma-separated arguments to '%s' tag" % self.tag_name 
     222                        raise template.TemplateSyntaxError, "Incorrect number of comma-separated arguments to %r tag" % tokens[0] 
    221223                    for opt in option_list[::3]: 
    222224                        if not opt.isalnum(): 
    223                             raise template.TemplateSyntaxError, "Invalid photo directory name in '%s' tag: '%s'" % (self.tag_name, opt) 
     225                            raise template.TemplateSyntaxError, "Invalid photo directory name in %r tag: '%s'" % (tokens[0], opt) 
    224226                    for opt in option_list[1::3] + option_list[2::3]: 
    225227                        if not opt.isdigit() or not (comments.MIN_PHOTO_DIMENSION <= int(opt) <= comments.MAX_PHOTO_DIMENSION): 
    226                             raise template.TemplateSyntaxError, "Invalid photo dimension in '%s' tag: '%s'. Only values between %s and %s are allowed." % (self.tag_name, opt, comments.MIN_PHOTO_DIMENSION, comments.MAX_PHOTO_DIMENSION) 
     228                            raise template.TemplateSyntaxError, "Invalid photo dimension in %r tag: '%s'. Only values between %s and %s are allowed." % (tokens[0], opt, comments.MIN_PHOTO_DIMENSION, comments.MAX_PHOTO_DIMENSION) 
    227229                    # VALIDATION ENDS ######################################### 
    228230                    kwargs[option] = True 
     
    231233                    # VALIDATION ############################################## 
    232234                    if 2 < len(args.split('|')) > 9: 
    233                         raise template.TemplateSyntaxError, "Incorrect number of '%s' options in '%s' tag. Use between 2 and 8." % (option, self.tag_name
     235                        raise template.TemplateSyntaxError, "Incorrect number of '%s' options in %r tag. Use between 2 and 8." % (option, tokens[0]
    234236                    if re.match('^scale:\d+\-\d+\:$', args.split('|')[0]): 
    235                         raise template.TemplateSyntaxError, "Invalid 'scale' in '%s' tag's '%s' options" % (self.tag_name, option) 
     237                        raise template.TemplateSyntaxError, "Invalid 'scale' in %r tag's '%s' options" % (tokens[0], option) 
    236238                    # VALIDATION ENDS ######################################### 
    237239                    kwargs[option] = True 
     
    240242                    kwargs[option] = (args == 'true') 
    241243                else: 
    242                     raise template.TemplateSyntaxError, "'%s' tag got invalid parameter '%s'" % (self.tag_name, option) 
     244                    raise template.TemplateSyntaxError, "%r tag got invalid parameter '%s'" % (tokens[0], option) 
    243245        return CommentFormNode(content_type, obj_id_lookup_var, obj_id, self.free, **kwargs) 
    244246 
     
    261263        {% get_comment_count for lcom.eventtimes 23 as comment_count %} 
    262264    """ 
    263     def __init__(self, free, tag_name): 
    264         self.free, self.tag_name = free, tag_nam
     265    def __init__(self, free): 
     266        self.free = fre
    265267 
    266268    def __call__(self, parser, token): 
     
    269271        # ['get_comment_list', 'for', 'lcom.eventtimes', 'event.id', 'as', 'comment_list'] 
    270272        if len(tokens) != 6: 
    271             raise template.TemplateSyntaxError, "%s block tag requires 5 arguments" % self.tag_name 
     273            raise template.TemplateSyntaxError, "%r tag requires 5 arguments" % tokens[0] 
    272274        if tokens[1] != 'for': 
    273             raise template.TemplateSyntaxError, "Second argument in '%s' tag must be 'for'" % self.tag_name 
     275            raise template.TemplateSyntaxError, "Second argument in %r tag must be 'for'" % tokens[0] 
    274276        try: 
    275277            package, module = tokens[2].split('.') 
    276278        except ValueError: # unpack list of wrong size 
    277             raise template.TemplateSyntaxError, "Third argument in '%s' tag must be in the format 'package.module'" % self.tag_name 
     279            raise template.TemplateSyntaxError, "Third argument in %r tag must be in the format 'package.module'" % tokens[0] 
    278280        try: 
    279281            content_type = contenttypes.get_object(package__label__exact=package, python_module_name__exact=module) 
    280282        except contenttypes.ContentTypeDoesNotExist: 
    281             raise template.TemplateSyntaxError, "'%s' tag has invalid content-type '%s.%s'" % (self.tag_name, package, module) 
     283            raise template.TemplateSyntaxError, "%r tag has invalid content-type '%s.%s'" % (tokens[0], package, module) 
    282284        var_name, obj_id = None, None 
    283285        if tokens[3].isdigit(): 
     
    286288                content_type.get_object_for_this_type(pk=obj_id) 
    287289            except ObjectDoesNotExist: 
    288                 raise template.TemplateSyntaxError, "'%s' tag refers to %s object with ID %s, which doesn't exist" % (self.tag_name, content_type.name, obj_id) 
     290                raise template.TemplateSyntaxError, "%r tag refers to %s object with ID %s, which doesn't exist" % (tokens[0], content_type.name, obj_id) 
    289291        else: 
    290292            var_name = tokens[3] 
    291293        if tokens[4] != 'as': 
    292             raise template.TemplateSyntaxError, "Fourth argument in '%s' must be 'as'" % self.tag_name 
     294            raise template.TemplateSyntaxError, "Fourth argument in %r must be 'as'" % tokens[0] 
    293295        return CommentCountNode(package, module, var_name, obj_id, tokens[5], self.free) 
    294296 
     
    316318        {% get_comment_list for lcom.eventtimes event.id as comment_list reversed %} 
    317319    """ 
    318     def __init__(self, free, tag_name): 
    319         self.free, self.tag_name = free, tag_nam
     320    def __init__(self, free): 
     321        self.free = fre
    320322 
    321323    def __call__(self, parser, token): 
     
    323325        # Now tokens is a list like this: 
    324326        # ['get_comment_list', 'for', 'lcom.eventtimes', 'event.id', 'as', 'comment_list'] 
    325         if not 6 <= len(tokens) <= 7
    326             raise template.TemplateSyntaxError, "%s block tag requires 5 or 6 arguments" % self.tag_name 
     327        if not len(tokens) in (6, 7)
     328            raise template.TemplateSyntaxError, "%r tag requires 5 or 6 arguments" % tokens[0] 
    327329        if tokens[1] != 'for': 
    328             raise template.TemplateSyntaxError, "Second argument in '%s' tag must be 'for'" % self.tag_name 
     330            raise template.TemplateSyntaxError, "Second argument in %r tag must be 'for'" % tokens[0] 
    329331        try: 
    330332            package, module = tokens[2].split('.') 
    331333        except ValueError: # unpack list of wrong size 
    332             raise template.TemplateSyntaxError, "Third argument in '%s' tag must be in the format 'package.module'" % self.tag_name 
     334            raise template.TemplateSyntaxError, "Third argument in %r tag must be in the format 'package.module'" % tokens[0] 
    333335        try: 
    334336            content_type = contenttypes.get_object(package__label__exact=package, python_module_name__exact=module) 
    335337        except contenttypes.ContentTypeDoesNotExist: 
    336             raise template.TemplateSyntaxError, "'%s' tag has invalid content-type '%s.%s'" % (self.tag_name, package, module) 
     338            raise template.TemplateSyntaxError, "%r tag has invalid content-type '%s.%s'" % (tokens[0], package, module) 
    337339        var_name, obj_id = None, None 
    338340        if tokens[3].isdigit(): 
     
    341343                content_type.get_object_for_this_type(pk=obj_id) 
    342344            except ObjectDoesNotExist: 
    343                 raise template.TemplateSyntaxError, "'%s' tag refers to %s object with ID %s, which doesn't exist" % (self.tag_name, content_type.name, obj_id) 
     345                raise template.TemplateSyntaxError, "%r tag refers to %s object with ID %s, which doesn't exist" % (tokens[0], content_type.name, obj_id) 
    344346        else: 
    345347            var_name = tokens[3] 
    346348        if tokens[4] != 'as': 
    347             raise template.TemplateSyntaxError, "Fourth argument in '%s' must be 'as'" % self.tag_name 
     349            raise template.TemplateSyntaxError, "Fourth argument in %r must be 'as'" % tokens[0] 
    348350        if len(tokens) == 7: 
    349351            if tokens[6] != 'reversed': 
    350                 raise template.TemplateSyntaxError, "Final argument in '%s' must be 'reversed' if given" % self.tag_name 
     352                raise template.TemplateSyntaxError, "Final argument in %r must be 'reversed' if given" % tokens[0] 
    351353            ordering = "-" 
    352354        else: 
     
    355357 
    356358# registration comments 
    357 template.register_tag('get_comment_list',       DoGetCommentList(free=False, tag_name='get_comment_list')) 
    358 template.register_tag('comment_form',           DoCommentForm(free=False, tag_name='comment_form')) 
    359 template.register_tag('get_comment_count',      DoCommentCount(free=False, tag_name='get_comment_count')) 
     359template.register_tag('get_comment_list', DoGetCommentList(False)) 
     360template.register_tag('comment_form', DoCommentForm(False)) 
     361template.register_tag('get_comment_count', DoCommentCount(False)) 
    360362# free comments 
    361 template.register_tag('get_free_comment_list', DoGetCommentList(free=True, tag_name='get_free_comment_list')) 
    362 template.register_tag('free_comment_form',      DoCommentForm(free=True, tag_name='free_comment_form')) 
    363 template.register_tag('get_free_comment_count', DoCommentCount(free=True, tag_name='get_free_comment_count')) 
     363template.register_tag('get_free_comment_list', DoGetCommentList(True)) 
     364template.register_tag('free_comment_form', DoCommentForm(True)) 
     365template.register_tag('get_free_comment_count', DoCommentCount(True))