Commit 74c3e3b5e5adf20c4d2a8fe3c98be82454332231
1 parent
a457ae4b
Stubbed out a setup.py and a test runner.
Showing
40 changed files
with
211 additions
and
82 deletions
.gitignore
0 → 100644
| 1 | +*.pyc | ... | ... |
.travis.yml
0 → 100644
LICENSE.txt
0 → 100644
| 1 | +Copyright (c) 2013, Django Software Foundation and individual contributors | |
| 2 | + | |
| 3 | +All rights reserved. | |
| 4 | + | |
| 5 | +Redistribution and use in source and binary forms, with or without modification, | |
| 6 | +are permitted provided that the following conditions are met: | |
| 7 | + | |
| 8 | + * Redistributions of source code must retain the above copyright notice, | |
| 9 | + this list of conditions and the following disclaimer. | |
| 10 | + * Redistributions in binary form must reproduce the above copyright notice, | |
| 11 | + this list of conditions and the following disclaimer in the documentation | |
| 12 | + and/or other materials provided with the distribution. | |
| 13 | + * Neither the name of django-contrib-comments nor the names of its contributors | |
| 14 | + may be used to endorse or promote products derived from this software | |
| 15 | + without specific prior written permission. | |
| 16 | + | |
| 17 | +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
| 18 | +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
| 19 | +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
| 20 | +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |
| 21 | +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | |
| 22 | +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | |
| 23 | +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
| 24 | +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
| 25 | +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |
| 26 | +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
| 27 | +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ... | ... |
README.txt
0 → 100644
| 1 | +FIXME | ... | ... |
| 1 | -import warnings | |
| 2 | 1 | from django.conf import settings |
| 3 | 2 | from django.core import urlresolvers |
| 4 | 3 | from django.core.exceptions import ImproperlyConfigured |
| 5 | -from django.contrib.comments.models import Comment | |
| 6 | -from django.contrib.comments.forms import CommentForm | |
| 7 | 4 | from django.utils.importlib import import_module |
| 8 | 5 | |
| 9 | -warnings.warn("django.contrib.comments is deprecated and will be removed before Django 1.8.", DeprecationWarning) | |
| 6 | +from django_comments.models import Comment | |
| 7 | +from django_comments.forms import CommentForm | |
| 10 | 8 | |
| 11 | -DEFAULT_COMMENTS_APP = 'django.contrib.comments' | |
| 9 | +DEFAULT_COMMENTS_APP = 'django_comments' | |
| 12 | 10 | |
| 13 | 11 | def get_comment_app(): |
| 14 | 12 | """ |
| 15 | - Get the comment app (i.e. "django.contrib.comments") as defined in the settings | |
| 13 | + Get the comment app (i.e. "django_comments") as defined in the settings | |
| 16 | 14 | """ |
| 17 | 15 | # Make sure the app's in INSTALLED_APPS |
| 18 | 16 | comments_app = get_comment_app_name() |
| ... | ... | @@ -61,7 +59,7 @@ def get_form_target(): |
| 61 | 59 | if get_comment_app_name() != DEFAULT_COMMENTS_APP and hasattr(get_comment_app(), "get_form_target"): |
| 62 | 60 | return get_comment_app().get_form_target() |
| 63 | 61 | else: |
| 64 | - return urlresolvers.reverse("django.contrib.comments.views.comments.post_comment") | |
| 62 | + return urlresolvers.reverse("django_comments.views.comments.post_comment") | |
| 65 | 63 | |
| 66 | 64 | def get_flag_url(comment): |
| 67 | 65 | """ |
| ... | ... | @@ -70,7 +68,7 @@ def get_flag_url(comment): |
| 70 | 68 | if get_comment_app_name() != DEFAULT_COMMENTS_APP and hasattr(get_comment_app(), "get_flag_url"): |
| 71 | 69 | return get_comment_app().get_flag_url(comment) |
| 72 | 70 | else: |
| 73 | - return urlresolvers.reverse("django.contrib.comments.views.moderation.flag", | |
| 71 | + return urlresolvers.reverse("django_comments.views.moderation.flag", | |
| 74 | 72 | args=(comment.id,)) |
| 75 | 73 | |
| 76 | 74 | def get_delete_url(comment): |
| ... | ... | @@ -80,7 +78,7 @@ def get_delete_url(comment): |
| 80 | 78 | if get_comment_app_name() != DEFAULT_COMMENTS_APP and hasattr(get_comment_app(), "get_delete_url"): |
| 81 | 79 | return get_comment_app().get_delete_url(comment) |
| 82 | 80 | else: |
| 83 | - return urlresolvers.reverse("django.contrib.comments.views.moderation.delete", | |
| 81 | + return urlresolvers.reverse("django_comments.views.moderation.delete", | |
| 84 | 82 | args=(comment.id,)) |
| 85 | 83 | |
| 86 | 84 | def get_approve_url(comment): |
| ... | ... | @@ -90,5 +88,5 @@ def get_approve_url(comment): |
| 90 | 88 | if get_comment_app_name() != DEFAULT_COMMENTS_APP and hasattr(get_comment_app(), "get_approve_url"): |
| 91 | 89 | return get_comment_app().get_approve_url(comment) |
| 92 | 90 | else: |
| 93 | - return urlresolvers.reverse("django.contrib.comments.views.moderation.approve", | |
| 91 | + return urlresolvers.reverse("django_comments.views.moderation.approve", | |
| 94 | 92 | args=(comment.id,)) | ... | ... |
| ... | ... | @@ -2,11 +2,11 @@ from __future__ import unicode_literals |
| 2 | 2 | |
| 3 | 3 | from django.contrib import admin |
| 4 | 4 | from django.contrib.auth import get_user_model |
| 5 | -from django.contrib.comments.models import Comment | |
| 6 | 5 | from django.utils.translation import ugettext_lazy as _, ungettext, ungettext_lazy |
| 7 | -from django.contrib.comments import get_model | |
| 8 | 6 | from django.contrib.comments.views.moderation import perform_flag, perform_approve, perform_delete |
| 9 | 7 | |
| 8 | +from django_comments import get_model | |
| 9 | +from django_comments.models import Comment | |
| 10 | 10 | |
| 11 | 11 | class UsernameSearch(object): |
| 12 | 12 | """The User object may not be auth.User, so we need to provide | ... | ... |
| 1 | 1 | from django.contrib.syndication.views import Feed |
| 2 | 2 | from django.contrib.sites.models import get_current_site |
| 3 | -from django.contrib import comments | |
| 4 | 3 | from django.utils.translation import ugettext as _ |
| 5 | 4 | |
| 5 | +import django_comments | |
| 6 | + | |
| 6 | 7 | class LatestCommentFeed(Feed): |
| 7 | 8 | """Feed of latest comments on the current site.""" |
| 8 | 9 | |
| ... | ... | @@ -20,7 +21,7 @@ class LatestCommentFeed(Feed): |
| 20 | 21 | return _("Latest comments on %(site_name)s") % dict(site_name=self.site.name) |
| 21 | 22 | |
| 22 | 23 | def items(self): |
| 23 | - qs = comments.get_model().objects.filter( | |
| 24 | + qs = django_comments.get_model().objects.filter( | |
| 24 | 25 | site__pk = self.site.pk, |
| 25 | 26 | is_public = True, |
| 26 | 27 | is_removed = False, | ... | ... |
| ... | ... | @@ -3,13 +3,14 @@ from django import forms |
| 3 | 3 | from django.forms.util import ErrorDict |
| 4 | 4 | from django.conf import settings |
| 5 | 5 | from django.contrib.contenttypes.models import ContentType |
| 6 | -from django.contrib.comments.models import Comment | |
| 7 | 6 | from django.utils.crypto import salted_hmac, constant_time_compare |
| 8 | 7 | from django.utils.encoding import force_text |
| 9 | 8 | from django.utils.text import get_text_list |
| 10 | 9 | from django.utils import timezone |
| 11 | 10 | from django.utils.translation import ungettext, ugettext, ugettext_lazy as _ |
| 12 | 11 | |
| 12 | +from django_comments.models import Comment | |
| 13 | + | |
| 13 | 14 | COMMENT_MAX_LENGTH = getattr(settings,'COMMENT_MAX_LENGTH', 3000) |
| 14 | 15 | |
| 15 | 16 | class CommentSecurityForm(forms.Form): | ... | ... |
| 1 | 1 | from django.conf import settings |
| 2 | -from django.contrib.comments.managers import CommentManager | |
| 3 | 2 | from django.contrib.contenttypes import generic |
| 4 | 3 | from django.contrib.contenttypes.models import ContentType |
| 5 | 4 | from django.contrib.sites.models import Site |
| ... | ... | @@ -9,6 +8,8 @@ from django.utils.translation import ugettext_lazy as _ |
| 9 | 8 | from django.utils import timezone |
| 10 | 9 | from django.utils.encoding import python_2_unicode_compatible |
| 11 | 10 | |
| 11 | +from django_comments.managers import CommentManager | |
| 12 | + | |
| 12 | 13 | COMMENT_MAX_LENGTH = getattr(settings, 'COMMENT_MAX_LENGTH', 3000) |
| 13 | 14 | |
| 14 | 15 | ... | ... |
| ... | ... | @@ -29,7 +29,7 @@ a Weblog:: |
| 29 | 29 | Then we create a ``CommentModerator`` subclass specifying some |
| 30 | 30 | moderation options:: |
| 31 | 31 | |
| 32 | - from django.contrib.comments.moderation import CommentModerator, moderator | |
| 32 | + from django_comments.moderation import CommentModerator, moderator | |
| 33 | 33 | |
| 34 | 34 | class EntryModerator(CommentModerator): |
| 35 | 35 | email_notification = True |
| ... | ... | @@ -58,13 +58,14 @@ import datetime |
| 58 | 58 | |
| 59 | 59 | from django.conf import settings |
| 60 | 60 | from django.core.mail import send_mail |
| 61 | -from django.contrib.comments import signals | |
| 62 | 61 | from django.db.models.base import ModelBase |
| 63 | 62 | from django.template import Context, loader |
| 64 | -from django.contrib import comments | |
| 65 | 63 | from django.contrib.sites.models import get_current_site |
| 66 | 64 | from django.utils import timezone |
| 67 | 65 | |
| 66 | +import django_comments | |
| 67 | +from django_comments import signals | |
| 68 | + | |
| 68 | 69 | class AlreadyModerated(Exception): |
| 69 | 70 | """ |
| 70 | 71 | Raised when a model which is already registered for moderation is |
| ... | ... | @@ -286,8 +287,8 @@ class Moderator(object): |
| 286 | 287 | from the comment models. |
| 287 | 288 | |
| 288 | 289 | """ |
| 289 | - signals.comment_will_be_posted.connect(self.pre_save_moderation, sender=comments.get_model()) | |
| 290 | - signals.comment_was_posted.connect(self.post_save_moderation, sender=comments.get_model()) | |
| 290 | + signals.comment_will_be_posted.connect(self.pre_save_moderation, sender=django_comments.get_model()) | |
| 291 | + signals.comment_was_posted.connect(self.post_save_moderation, sender=django_comments.get_model()) | |
| 291 | 292 | |
| 292 | 293 | def register(self, model_or_iterable, moderation_class): |
| 293 | 294 | """ | ... | ... |
| ... | ... | @@ -2,11 +2,12 @@ from django import template |
| 2 | 2 | from django.template.loader import render_to_string |
| 3 | 3 | from django.conf import settings |
| 4 | 4 | from django.contrib.contenttypes.models import ContentType |
| 5 | -from django.contrib import comments | |
| 6 | 5 | from django.utils import six |
| 7 | 6 | from django.utils.deprecation import RenameMethodsBase |
| 8 | 7 | from django.utils.encoding import smart_text |
| 9 | 8 | |
| 9 | +import django_comments | |
| 10 | + | |
| 10 | 11 | register = template.Library() |
| 11 | 12 | |
| 12 | 13 | |
| ... | ... | @@ -65,7 +66,7 @@ class BaseCommentNode(six.with_metaclass(RenameBaseCommentNodeMethods, template. |
| 65 | 66 | def __init__(self, ctype=None, object_pk_expr=None, object_expr=None, as_varname=None, comment=None): |
| 66 | 67 | if ctype is None and object_expr is None: |
| 67 | 68 | raise template.TemplateSyntaxError("Comment nodes must be given either a literal object or a ctype and object pk.") |
| 68 | - self.comment_model = comments.get_model() | |
| 69 | + self.comment_model = django_comments.get_model() | |
| 69 | 70 | self.as_varname = as_varname |
| 70 | 71 | self.ctype = ctype |
| 71 | 72 | self.object_pk_expr = object_pk_expr |
| ... | ... | @@ -130,7 +131,7 @@ class CommentFormNode(BaseCommentNode): |
| 130 | 131 | def get_form(self, context): |
| 131 | 132 | obj = self.get_object(context) |
| 132 | 133 | if obj: |
| 133 | - return comments.get_form()(obj) | |
| 134 | + return django_comments.get_form()(obj) | |
| 134 | 135 | else: |
| 135 | 136 | return None |
| 136 | 137 | |
| ... | ... | @@ -323,7 +324,7 @@ def comment_form_target(): |
| 323 | 324 | |
| 324 | 325 | <form action="{% comment_form_target %}" method="post"> |
| 325 | 326 | """ |
| 326 | - return comments.get_form_target() | |
| 327 | + return django_comments.get_form_target() | |
| 327 | 328 | |
| 328 | 329 | @register.simple_tag |
| 329 | 330 | def get_comment_permalink(comment, anchor_pattern=None): | ... | ... |
| 1 | 1 | from django.conf.urls import patterns, url |
| 2 | 2 | |
| 3 | -urlpatterns = patterns('django.contrib.comments.views', | |
| 3 | +urlpatterns = patterns('django_comments.views', | |
| 4 | 4 | url(r'^post/$', 'comments.post_comment', name='comments-post-comment'), |
| 5 | 5 | url(r'^posted/$', 'comments.comment_done', name='comments-comment-done'), |
| 6 | 6 | url(r'^flag/(\d+)/$', 'moderation.flag', name='comments-flag'), | ... | ... |
| ... | ... | @@ -2,9 +2,6 @@ from __future__ import absolute_import |
| 2 | 2 | |
| 3 | 3 | from django import http |
| 4 | 4 | from django.conf import settings |
| 5 | -from django.contrib import comments | |
| 6 | -from django.contrib.comments import signals | |
| 7 | -from django.contrib.comments.views.utils import next_redirect, confirmation_view | |
| 8 | 5 | from django.core.exceptions import ObjectDoesNotExist, ValidationError |
| 9 | 6 | from django.db import models |
| 10 | 7 | from django.shortcuts import render_to_response |
| ... | ... | @@ -14,6 +11,9 @@ from django.utils.html import escape |
| 14 | 11 | from django.views.decorators.csrf import csrf_protect |
| 15 | 12 | from django.views.decorators.http import require_POST |
| 16 | 13 | |
| 14 | +import django_comments | |
| 15 | +from django_comments import signals | |
| 16 | +from django_comments.views.utils import next_redirect, confirmation_view | |
| 17 | 17 | |
| 18 | 18 | class CommentPostBadRequest(http.HttpResponseBadRequest): |
| 19 | 19 | """ |
| ... | ... | @@ -72,7 +72,7 @@ def post_comment(request, next=None, using=None): |
| 72 | 72 | preview = "preview" in data |
| 73 | 73 | |
| 74 | 74 | # Construct the comment form |
| 75 | - form = comments.get_form()(target, data=data) | |
| 75 | + form = django_comments.get_form()(target, data=data) | |
| 76 | 76 | |
| 77 | 77 | # Check security information |
| 78 | 78 | if form.security_errors(): | ... | ... |
| ... | ... | @@ -2,13 +2,13 @@ from __future__ import absolute_import |
| 2 | 2 | |
| 3 | 3 | from django import template |
| 4 | 4 | from django.conf import settings |
| 5 | -from django.contrib import comments | |
| 6 | 5 | from django.contrib.auth.decorators import login_required, permission_required |
| 7 | -from django.contrib.comments import signals | |
| 8 | -from django.contrib.comments.views.utils import next_redirect, confirmation_view | |
| 9 | 6 | from django.shortcuts import get_object_or_404, render_to_response |
| 10 | 7 | from django.views.decorators.csrf import csrf_protect |
| 11 | 8 | |
| 9 | +import django_comments | |
| 10 | +from django_comments import signals | |
| 11 | +from django_comments.views.utils import next_redirect, confirmation_view | |
| 12 | 12 | |
| 13 | 13 | @csrf_protect |
| 14 | 14 | @login_required |
| ... | ... | @@ -21,7 +21,7 @@ def flag(request, comment_id, next=None): |
| 21 | 21 | comment |
| 22 | 22 | the flagged `comments.comment` object |
| 23 | 23 | """ |
| 24 | - comment = get_object_or_404(comments.get_model(), pk=comment_id, site__pk=settings.SITE_ID) | |
| 24 | + comment = get_object_or_404(django_comments.get_model(), pk=comment_id, site__pk=settings.SITE_ID) | |
| 25 | 25 | |
| 26 | 26 | # Flag on POST |
| 27 | 27 | if request.method == 'POST': |
| ... | ... | @@ -48,7 +48,7 @@ def delete(request, comment_id, next=None): |
| 48 | 48 | comment |
| 49 | 49 | the flagged `comments.comment` object |
| 50 | 50 | """ |
| 51 | - comment = get_object_or_404(comments.get_model(), pk=comment_id, site__pk=settings.SITE_ID) | |
| 51 | + comment = get_object_or_404(django_comments.get_model(), pk=comment_id, site__pk=settings.SITE_ID) | |
| 52 | 52 | |
| 53 | 53 | # Delete on POST |
| 54 | 54 | if request.method == 'POST': |
| ... | ... | @@ -76,7 +76,7 @@ def approve(request, comment_id, next=None): |
| 76 | 76 | comment |
| 77 | 77 | the `comments.comment` object for approval |
| 78 | 78 | """ |
| 79 | - comment = get_object_or_404(comments.get_model(), pk=comment_id, site__pk=settings.SITE_ID) | |
| 79 | + comment = get_object_or_404(django_comments.get_model(), pk=comment_id, site__pk=settings.SITE_ID) | |
| 80 | 80 | |
| 81 | 81 | # Delete on POST |
| 82 | 82 | if request.method == 'POST': |
| ... | ... | @@ -100,10 +100,10 @@ def perform_flag(request, comment): |
| 100 | 100 | """ |
| 101 | 101 | Actually perform the flagging of a comment from a request. |
| 102 | 102 | """ |
| 103 | - flag, created = comments.models.CommentFlag.objects.get_or_create( | |
| 103 | + flag, created = django_comments.models.CommentFlag.objects.get_or_create( | |
| 104 | 104 | comment = comment, |
| 105 | 105 | user = request.user, |
| 106 | - flag = comments.models.CommentFlag.SUGGEST_REMOVAL | |
| 106 | + flag = django_comments.models.CommentFlag.SUGGEST_REMOVAL | |
| 107 | 107 | ) |
| 108 | 108 | signals.comment_was_flagged.send( |
| 109 | 109 | sender = comment.__class__, |
| ... | ... | @@ -114,10 +114,10 @@ def perform_flag(request, comment): |
| 114 | 114 | ) |
| 115 | 115 | |
| 116 | 116 | def perform_delete(request, comment): |
| 117 | - flag, created = comments.models.CommentFlag.objects.get_or_create( | |
| 117 | + flag, created = django_comments.models.CommentFlag.objects.get_or_create( | |
| 118 | 118 | comment = comment, |
| 119 | 119 | user = request.user, |
| 120 | - flag = comments.models.CommentFlag.MODERATOR_DELETION | |
| 120 | + flag = django_comments.models.CommentFlag.MODERATOR_DELETION | |
| 121 | 121 | ) |
| 122 | 122 | comment.is_removed = True |
| 123 | 123 | comment.save() |
| ... | ... | @@ -131,10 +131,10 @@ def perform_delete(request, comment): |
| 131 | 131 | |
| 132 | 132 | |
| 133 | 133 | def perform_approve(request, comment): |
| 134 | - flag, created = comments.models.CommentFlag.objects.get_or_create( | |
| 134 | + flag, created = django_comments.models.CommentFlag.objects.get_or_create( | |
| 135 | 135 | comment = comment, |
| 136 | 136 | user = request.user, |
| 137 | - flag = comments.models.CommentFlag.MODERATOR_APPROVAL, | |
| 137 | + flag = django_comments.models.CommentFlag.MODERATOR_APPROVAL, | |
| 138 | 138 | ) |
| 139 | 139 | |
| 140 | 140 | comment.is_removed = False | ... | ... |
| ... | ... | @@ -12,9 +12,10 @@ from django.http import HttpResponseRedirect |
| 12 | 12 | from django.shortcuts import render_to_response, resolve_url |
| 13 | 13 | from django.template import RequestContext |
| 14 | 14 | from django.core.exceptions import ObjectDoesNotExist |
| 15 | -from django.contrib import comments | |
| 16 | 15 | from django.utils.http import is_safe_url |
| 17 | 16 | |
| 17 | +import django_comments | |
| 18 | + | |
| 18 | 19 | def next_redirect(request, fallback, **get_kwargs): |
| 19 | 20 | """ |
| 20 | 21 | Handle the "where should I go next?" part of comment views. |
| ... | ... | @@ -50,7 +51,7 @@ def confirmation_view(template, doc="Display a confirmation view."): |
| 50 | 51 | comment = None |
| 51 | 52 | if 'c' in request.GET: |
| 52 | 53 | try: |
| 53 | - comment = comments.get_model().objects.get(pk=request.GET['c']) | |
| 54 | + comment = django_comments.get_model().objects.get(pk=request.GET['c']) | |
| 54 | 55 | except (ObjectDoesNotExist, ValueError): |
| 55 | 56 | pass |
| 56 | 57 | return render_to_response(template, | ... | ... |
django_contrib.comments.egg-info/PKG-INFO
0 → 100644
| 1 | +Metadata-Version: 1.1 | |
| 2 | +Name: django-contrib.comments | |
| 3 | +Version: 1.5 | |
| 4 | +Summary: The code formally known as django.contrib.comments. | |
| 5 | +Home-page: http://github.com/django/django-contrib-comments | |
| 6 | +Author: Django Software Foundation | |
| 7 | +Author-email: jacob@jacobian.org | |
| 8 | +License: BSD | |
| 9 | +Description: UNKNOWN | |
| 10 | +Platform: any | |
| 11 | +Classifier: Development Status :: 5 - Production/Stable | |
| 12 | +Classifier: Environment :: Web Environment | |
| 13 | +Classifier: Framework :: Django | |
| 14 | +Classifier: Intended Audience :: Developers | |
| 15 | +Classifier: Natural Language :: English | |
| 16 | +Classifier: License :: OSI Approved :: BSD License | |
| 17 | +Classifier: Operating System :: OS Independent | |
| 18 | +Classifier: Programming Language :: Python | |
| 19 | +Classifier: Programming Language :: Python :: 2.6 | |
| 20 | +Classifier: Programming Language :: Python :: 2.7 | |
| 21 | +Classifier: Programming Language :: Python :: 3 | |
| 22 | +Classifier: Programming Language :: Python :: 3.2 | |
| 23 | +Classifier: Programming Language :: Python :: 3.3 | ... | ... |
django_contrib.comments.egg-info/SOURCES.txt
0 → 100644
| 1 | +README.txt | |
| 2 | +setup.py | |
| 3 | +django_comments/__init__.py | |
| 4 | +django_comments/admin.py | |
| 5 | +django_comments/feeds.py | |
| 6 | +django_comments/forms.py | |
| 7 | +django_comments/managers.py | |
| 8 | +django_comments/models.py | |
| 9 | +django_comments/moderation.py | |
| 10 | +django_comments/signals.py | |
| 11 | +django_comments/urls.py | |
| 12 | +django_comments/templatetags/__init__.py | |
| 13 | +django_comments/templatetags/comments.py | |
| 14 | +django_comments/views/__init__.py | |
| 15 | +django_comments/views/comments.py | |
| 16 | +django_comments/views/moderation.py | |
| 17 | +django_comments/views/utils.py | |
| 18 | +django_contrib.comments.egg-info/PKG-INFO | |
| 19 | +django_contrib.comments.egg-info/SOURCES.txt | |
| 20 | +django_contrib.comments.egg-info/dependency_links.txt | |
| 21 | +django_contrib.comments.egg-info/top_level.txt | |
| 22 | +tests/custom_comments/__init__.py | |
| 23 | +tests/custom_comments/forms.py | |
| 24 | +tests/custom_comments/models.py | |
| 25 | +tests/custom_comments/views.py | |
| \ No newline at end of file | ... | ... |
| 1 | + | ... | ... |
| ... | ... | @@ -2,19 +2,7 @@ |
| 2 | 2 | Customizing the comments framework |
| 3 | 3 | ================================== |
| 4 | 4 | |
| 5 | -.. currentmodule:: django.contrib.comments | |
| 6 | - | |
| 7 | -.. warning:: | |
| 8 | - | |
| 9 | - Django's comment framework has been deprecated and is no longer supported. | |
| 10 | - Most users will be better served with a custom solution, or a hosted | |
| 11 | - product like Disqus__. | |
| 12 | - | |
| 13 | - The code formerly known as ``django.contrib.comments`` is `still available | |
| 14 | - in an external repository`__. | |
| 15 | - | |
| 16 | - __ https://disqus.com/ | |
| 17 | - __ https://github.com/django/django-contrib-comments | |
| 5 | +.. currentmodule:: django_comments | |
| 18 | 6 | |
| 19 | 7 | If the built-in comment framework doesn't quite fit your needs, you can extend |
| 20 | 8 | the comment app's behavior to add custom data and logic. The comments framework |
| ... | ... | @@ -73,15 +61,15 @@ the ``my_comment_app`` directory:: |
| 73 | 61 | In the ``models.py`` we'll define a ``CommentWithTitle`` model:: |
| 74 | 62 | |
| 75 | 63 | from django.db import models |
| 76 | - from django.contrib.comments.models import Comment | |
| 64 | + from django_comments.models import Comment | |
| 77 | 65 | |
| 78 | 66 | class CommentWithTitle(Comment): |
| 79 | 67 | title = models.CharField(max_length=300) |
| 80 | 68 | |
| 81 | 69 | Most custom comment models will subclass the |
| 82 | -:class:`~django.contrib.comments.models.Comment` model. However, | |
| 70 | +:class:`~django_comments.models.Comment` model. However, | |
| 83 | 71 | if you want to substantially remove or change the fields available in the |
| 84 | -:class:`~django.contrib.comments.models.Comment` model, but don't want to | |
| 72 | +:class:`~django_comments.models.Comment` model, but don't want to | |
| 85 | 73 | rewrite the templates, you could try subclassing from |
| 86 | 74 | ``BaseCommentAbstractModel``. |
| 87 | 75 | |
| ... | ... | @@ -92,7 +80,7 @@ tricky: we have to both create a form and override |
| 92 | 80 | field:: |
| 93 | 81 | |
| 94 | 82 | from django import forms |
| 95 | - from django.contrib.comments.forms import CommentForm | |
| 83 | + from django_comments.forms import CommentForm | |
| 96 | 84 | from my_comment_app.models import CommentWithTitle |
| 97 | 85 | |
| 98 | 86 | class CommentFormWithTitle(CommentForm): |
| ... | ... | @@ -109,7 +97,7 @@ field:: |
| 109 | 97 | return data |
| 110 | 98 | |
| 111 | 99 | Django provides a couple of "helper" classes to make writing certain types of |
| 112 | -custom comment forms easier; see :mod:`django.contrib.comments.forms` for | |
| 100 | +custom comment forms easier; see :mod:`django_comments.forms` for | |
| 113 | 101 | more. |
| 114 | 102 | |
| 115 | 103 | Finally, we'll define a couple of methods in ``my_comment_app/__init__.py`` to |
| ... | ... | @@ -145,7 +133,7 @@ explained in the next section. |
| 145 | 133 | Custom comment app API |
| 146 | 134 | ====================== |
| 147 | 135 | |
| 148 | -The :mod:`django.contrib.comments` app defines the following methods; any | |
| 136 | +The :mod:`django_comments` app defines the following methods; any | |
| 149 | 137 | custom comment app must define at least one of them. All are optional, |
| 150 | 138 | however. |
| 151 | 139 | |
| ... | ... | @@ -153,11 +141,11 @@ however. |
| 153 | 141 | |
| 154 | 142 | Return the :class:`~django.db.models.Model` class to use for comments. This |
| 155 | 143 | model should inherit from |
| 156 | - ``django.contrib.comments.models.BaseCommentAbstractModel``, which | |
| 144 | + ``django_comments.models.BaseCommentAbstractModel``, which | |
| 157 | 145 | defines necessary core fields. |
| 158 | 146 | |
| 159 | 147 | The default implementation returns |
| 160 | - :class:`django.contrib.comments.models.Comment`. | |
| 148 | + :class:`django_comments.models.Comment`. | |
| 161 | 149 | |
| 162 | 150 | .. function:: get_form() |
| 163 | 151 | |
| ... | ... | @@ -168,7 +156,7 @@ however. |
| 168 | 156 | attached to. |
| 169 | 157 | |
| 170 | 158 | The default implementation returns |
| 171 | - :class:`django.contrib.comments.forms.CommentForm`. | |
| 159 | + :class:`django_comments.forms.CommentForm`. | |
| 172 | 160 | |
| 173 | 161 | .. note:: |
| 174 | 162 | |
| ... | ... | @@ -192,25 +180,25 @@ however. |
| 192 | 180 | want to use the default ``post_comment()`` view, you will |
| 193 | 181 | need to be aware that it requires the model and form to have |
| 194 | 182 | certain additional attributes and methods: see the |
| 195 | - ``django.contrib.comments.views.post_comment()`` view for details. | |
| 183 | + ``django_comments.views.post_comment()`` view for details. | |
| 196 | 184 | |
| 197 | 185 | .. function:: get_flag_url() |
| 198 | 186 | |
| 199 | 187 | Return the URL for the "flag this comment" view. |
| 200 | 188 | |
| 201 | 189 | The default implementation returns a reverse-resolved URL pointing |
| 202 | - to the ``django.contrib.comments.views.moderation.flag()`` view. | |
| 190 | + to the ``django_comments.views.moderation.flag()`` view. | |
| 203 | 191 | |
| 204 | 192 | .. function:: get_delete_url() |
| 205 | 193 | |
| 206 | 194 | Return the URL for the "delete this comment" view. |
| 207 | 195 | |
| 208 | 196 | The default implementation returns a reverse-resolved URL pointing |
| 209 | - to the ``django.contrib.comments.views.moderation.delete()`` view. | |
| 197 | + to the ``django_comments.views.moderation.delete()`` view. | |
| 210 | 198 | |
| 211 | 199 | .. function:: get_approve_url() |
| 212 | 200 | |
| 213 | 201 | Return the URL for the "approve this comment from moderation" view. |
| 214 | 202 | |
| 215 | 203 | The default implementation returns a reverse-resolved URL pointing |
| 216 | - to the ``django.contrib.comments.views.moderation.approve()`` view. | |
| 204 | + to the ``django_comments.views.moderation.approve()`` view. | ... | ... |
| ... | ... | @@ -4,18 +4,6 @@ |
| 4 | 4 | Example of using the built-in comments app |
| 5 | 5 | =========================================== |
| 6 | 6 | |
| 7 | -.. warning:: | |
| 8 | - | |
| 9 | - Django's comment framework has been deprecated and is no longer supported. | |
| 10 | - Most users will be better served with a custom solution, or a hosted | |
| 11 | - product like Disqus__. | |
| 12 | - | |
| 13 | - The code formerly known as ``django.contrib.comments`` is `still available | |
| 14 | - in an external repository`__. | |
| 15 | - | |
| 16 | - __ https://disqus.com/ | |
| 17 | - __ https://github.com/django/django-contrib-comments | |
| 18 | - | |
| 19 | 7 | Follow the first three steps of the quick start guide in the |
| 20 | 8 | :doc:`documentation </ref/contrib/comments/index>`. |
| 21 | 9 | ... | ... |
setup.py
0 → 100644
| 1 | +import os | |
| 2 | +from setuptools import setup, find_packages | |
| 3 | + | |
| 4 | +try: | |
| 5 | + f = open(os.path.join(os.path.dirname(__file__), 'README.rst')) | |
| 6 | + long_description = f.read().strip() | |
| 7 | + f.close() | |
| 8 | +except IOError: | |
| 9 | + long_description = None | |
| 10 | + | |
| 11 | +setup( | |
| 12 | + name='django-contrib.comments', | |
| 13 | + version='1.5', | |
| 14 | + url="http://github.com/django/django-contrib-comments", | |
| 15 | + description='The code formally known as django.contrib.comments.', | |
| 16 | + long_description=long_description, | |
| 17 | + author='Django Software Foundation', | |
| 18 | + author_email='jacob@jacobian.org', | |
| 19 | + license='BSD', | |
| 20 | + platforms='any', | |
| 21 | + classifiers=[ | |
| 22 | + 'Development Status :: 5 - Production/Stable', | |
| 23 | + 'Environment :: Web Environment', | |
| 24 | + 'Framework :: Django', | |
| 25 | + 'Intended Audience :: Developers', | |
| 26 | + 'Natural Language :: English', | |
| 27 | + 'License :: OSI Approved :: BSD License', | |
| 28 | + 'Operating System :: OS Independent', | |
| 29 | + 'Programming Language :: Python', | |
| 30 | + 'Programming Language :: Python :: 2.6', | |
| 31 | + 'Programming Language :: Python :: 2.7', | |
| 32 | + 'Programming Language :: Python :: 3', | |
| 33 | + 'Programming Language :: Python :: 3.2', | |
| 34 | + 'Programming Language :: Python :: 3.3', | |
| 35 | + ], | |
| 36 | + packages=find_packages(exclude=['tests']), | |
| 37 | + include_package_data=True, | |
| 38 | + test_suite='tests.runtests.main', | |
| 39 | +) | |
| 40 | + | ... | ... |
tests/runtests.py
0 → 100755
| 1 | +#!/usr/bin/env python | |
| 2 | + | |
| 3 | +""" | |
| 4 | +Adapted from django-constance, which itself was adapted from django-adminfiles. | |
| 5 | +""" | |
| 6 | + | |
| 7 | +import os | |
| 8 | +import sys | |
| 9 | + | |
| 10 | +here = os.path.dirname(os.path.abspath(__file__)) | |
| 11 | +parent = os.path.dirname(here) | |
| 12 | +sys.path[0:0] = [here, parent] | |
| 13 | + | |
| 14 | +from django.conf import settings | |
| 15 | +settings.configure( | |
| 16 | + DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3'}}, | |
| 17 | + SECRET_KEY = "it's a secret to everyone", | |
| 18 | + INSTALLED_APPS = ["django_comments", "testapp", "custom_comments"], | |
| 19 | +) | |
| 20 | + | |
| 21 | +from django.test.simple import DjangoTestSuiteRunner | |
| 22 | + | |
| 23 | +def main(): | |
| 24 | + runner = DjangoTestSuiteRunner() | |
| 25 | + failures = runner.run_tests(['testapp'], verbosity=1, interactive=True) | |
| 26 | + sys.exit(failures) | |
| 27 | + | |
| 28 | +if __name__ == '__main__': | |
| 29 | + main() | ... | ... |
tests/testapp/__init__.py
0 → 100644
tox.ini
0 → 100644
Please
register
or
login
to post a comment