Django

Code

Ticket #8630: 8630_r9776.diff

File 8630_r9776.diff, 7.3 kB (added by carljm, 1 year ago)

updated patch with minor typo fixes

  • django/contrib/comments/admin.py

    old new  
    11from django.contrib import admin 
    22from django.contrib.comments.models import Comment 
    33from django.utils.translation import ugettext_lazy as _ 
     4from django.contrib.comments import get_model 
    45 
    56class CommentsAdmin(admin.ModelAdmin): 
    67    fieldsets = ( 
     
    2122    ordering = ('-submit_date',) 
    2223    search_fields = ('comment', 'user__username', 'user_name', 'user_email', 'user_url', 'ip_address') 
    2324 
    24 admin.site.register(Comment, CommentsAdmin) 
     25if get_model() is Comment: 
     26    admin.site.register(Comment, CommentsAdmin) 
  • django/contrib/comments/__init__.py

    old new  
    22from django.core import urlresolvers 
    33from django.core.exceptions import ImproperlyConfigured 
    44 
    5 # Attributes required in the top-level app for COMMENTS_APP 
    6 REQUIRED_COMMENTS_APP_ATTRIBUTES = ["get_model", "get_form", "get_form_target"] 
    7  
    85def get_comment_app(): 
    96    """ 
    107    Get the comment app (i.e. "django.contrib.comments") as defined in the settings 
     
    2219        raise ImproperlyConfigured("The COMMENTS_APP setting refers to "\ 
    2320                                   "a non-existing package.") 
    2421 
    25     # Make sure some specific attributes exist inside that package. 
    26     for attribute in REQUIRED_COMMENTS_APP_ATTRIBUTES: 
    27         if not hasattr(package, attribute): 
    28             raise ImproperlyConfigured("The COMMENTS_APP package %r does not "\ 
    29                                        "define the (required) %r function" % \ 
    30                                             (package, attribute)) 
    31  
    3222    return package 
    3323 
    3424def get_comment_app_name(): 
     
    3929    return getattr(settings, 'COMMENTS_APP', 'django.contrib.comments') 
    4030 
    4131def get_model(): 
     32    if get_comment_app_name() != __name__ and hasattr(get_comment_app(), "get_model"): 
     33        return get_comment_app().get_model() 
    4234    from django.contrib.comments.models import Comment 
    4335    return Comment 
    4436 
    4537def get_form(): 
     38    if get_comment_app_name() != __name__ and hasattr(get_comment_app(), "get_form"): 
     39        return get_comment_app().get_form() 
    4640    from django.contrib.comments.forms import CommentForm 
    4741    return CommentForm 
    4842 
    4943def get_form_target(): 
     44    if get_comment_app_name() != __name__ and hasattr(get_comment_app(), "get_form_target"): 
     45        return get_comment_app().get_form_target() 
    5046    return urlresolvers.reverse("django.contrib.comments.views.comments.post_comment") 
    5147 
    5248def get_flag_url(comment): 
     
    5551    """ 
    5652    if get_comment_app_name() != __name__ and hasattr(get_comment_app(), "get_flag_url"): 
    5753        return get_comment_app().get_flag_url(comment) 
    58     else: 
    59         return urlresolvers.reverse("django.contrib.comments.views.moderation.flag", args=(comment.id,)) 
     54    return urlresolvers.reverse("django.contrib.comments.views.moderation.flag", args=(comment.id,)) 
    6055 
    6156def get_delete_url(comment): 
    6257    """ 
    6358    Get the URL for the "delete this comment" view. 
    6459    """ 
    6560    if get_comment_app_name() != __name__ and hasattr(get_comment_app(), "get_delete_url"): 
    66         return get_comment_app().get_flag_url(get_delete_url) 
    67     else: 
    68         return urlresolvers.reverse("django.contrib.comments.views.moderation.delete", args=(comment.id,)) 
     61        return get_comment_app().get_delete_url(comment) 
     62    return urlresolvers.reverse("django.contrib.comments.views.moderation.delete", args=(comment.id,)) 
    6963 
    7064def get_approve_url(comment): 
    7165    """ 
     
    7367    """ 
    7468    if get_comment_app_name() != __name__ and hasattr(get_comment_app(), "get_approve_url"): 
    7569        return get_comment_app().get_approve_url(comment) 
    76     else: 
    77         return urlresolvers.reverse("django.contrib.comments.views.moderation.approve", args=(comment.id,)) 
     70    return urlresolvers.reverse("django.contrib.comments.views.moderation.approve", args=(comment.id,)) 
  • tests/regressiontests/comment_tests/tests/app_api_tests.py

    old new  
    2828        c = Comment(id=12345) 
    2929        self.assertEqual(comments.get_approve_url(c), "/approve/12345/") 
    3030 
     31 
     32class CustomCommentTest(CommentTestCase): 
     33    urls = 'regressiontests.comment_tests.urls' 
     34 
     35    def setUp(self): 
     36        self.old_comments_app   = getattr(settings, 'COMMENTS_APP', None) 
     37        settings.COMMENTS_APP   = 'regressiontests.comment_tests.custom_comments' 
     38        settings.INSTALLED_APPS = list(settings.INSTALLED_APPS) + [settings.COMMENTS_APP,] 
     39 
     40    def tearDown(self): 
     41        del settings.INSTALLED_APPS[-1] 
     42        settings.COMMENTS_APP = self.old_comments_app 
     43        if settings.COMMENTS_APP is None: 
     44            delattr(settings._target, 'COMMENTS_APP') 
     45 
     46    def testGetCommentApp(self): 
     47        from regressiontests.comment_tests import custom_comments 
     48        self.assertEqual(comments.get_comment_app(), custom_comments) 
     49 
     50    def testGetModel(self): 
     51        from regressiontests.comment_tests.custom_comments.models import CustomComment 
     52        self.assertEqual(comments.get_model(), CustomComment) 
     53 
     54    def testGetForm(self): 
     55        from regressiontests.comment_tests.custom_comments.forms import CustomCommentForm 
     56        self.assertEqual(comments.get_form(), CustomCommentForm) 
     57 
     58    def testGetFormTarget(self): 
     59        self.assertEqual(comments.get_form_target(), "/post/") 
     60 
     61    def testGetFlagURL(self): 
     62        c = Comment(id=12345) 
     63        self.assertEqual(comments.get_flag_url(c), "/flag/12345/") 
     64 
     65    def getGetDeleteURL(self): 
     66        c = Comment(id=12345) 
     67        self.assertEqual(comments.get_delete_url(c), "/delete/12345/") 
     68 
     69    def getGetApproveURL(self): 
     70        c = Comment(id=12345) 
     71        self.assertEqual(comments.get_approve_url(c), "/approve/12345/") 
  • docs/ref/contrib/comments/index.txt

    old new  
    164164considerations you'll need to make if you're using this aproach. 
    165165 
    166166.. templatetag:: comment_form_target 
     167.. _notes-on-the-comment-form: 
    167168 
    168169Getting the comment form target 
    169170~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    212213   settings 
    213214   signals 
    214215   upgrade 
    215  
     216   custom 
  • docs/ref/contrib/comments/settings.txt

    old new  
    2929COMMENTS_APP 
    3030------------ 
    3131 
    32 The app (i.e. entry in ``INSTALLED_APPS``) responsible for all "business logic." 
    33 You can change this to provide custom comment models and forms, though this is 
    34 currently undocumented. 
     32An app which provides :ref:`customization of the comments framework 
     33<ref-contrib-comments-custom>`.  Use the same dotted-string notation 
     34as in :setting:`INSTALLED_APPS`.  Your custom :setting:`COMMENTS_APP` 
     35must also be listed in :setting:`INSTALLED_APPS`.