Move all comments functionality into separate `comments` application. RSS feeds temporary disabled.

portnov [2008-06-22 17:29:57]
Move all comments functionality into separate `comments` application. RSS feeds temporary disabled.
Filename
comments/__init__.py
comments/forms.py
comments/models.py
comments/utils.py
comments/views.py
hms/modules/last_comments.py
mgmt/bugs_views.py
mgmt/documents_views.py
mgmt/forms.py
mgmt/models.py
mgmt/project_views.py
mgmt/requests_views.py
mgmt/utils.py
mgmt/views.py
settings.py
urls.py
diff --git a/comments/__init__.py b/comments/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/comments/forms.py b/comments/forms.py
new file mode 100644
index 0000000..0faa9e7
--- /dev/null
+++ b/comments/forms.py
@@ -0,0 +1,10 @@
+import django.newforms as forms
+from django.utils.translation import ugettext as _
+from models import Comment
+
+class CommentForm(forms.ModelForm):
+  title = forms.CharField(required=False,label=_("Title"))
+  class Meta:
+    model = Comment
+    exclude = ("created","author","object_id","object_type")
+
diff --git a/comments/models.py b/comments/models.py
new file mode 100644
index 0000000..b2c593c
--- /dev/null
+++ b/comments/models.py
@@ -0,0 +1,20 @@
+from django.db import models
+from django.contrib.auth.models import User
+from django.utils.translation import ugettext_lazy as _
+
+class Comment(models.Model):
+  author = models.ForeignKey(User)
+  created = models.DateTimeField()
+  object_id = models.IntegerField()
+  object_type = models.CharField(max_length=10)
+  title = models.CharField(max_length=64,null=True,verbose_name=_("Title"))
+  text = models.TextField(_("Text"))
+  class Admin:
+    pass
+  def __unicode__(self):
+    return self.title
+  class Meta:
+    verbose_name = _("Comment")
+    verbose_name_plural = _("Comments")
+    ordering = ("created",)
+
diff --git a/comments/utils.py b/comments/utils.py
new file mode 100644
index 0000000..e9896ab
--- /dev/null
+++ b/comments/utils.py
@@ -0,0 +1,52 @@
+from datetime import datetime
+from django.conf import settings
+from django.http import HttpResponseRedirect
+from django.core.paginator import Paginator
+from models import Comment
+from forms import CommentForm
+
+def get_comments(request,id,type):
+  """Return a list of comments on one page (specified in the request), for given object."""
+
+  all = Comment.objects.filter(object_id=id, object_type=type)
+  pg = Paginator(all,settings.COMMENTS_PER_PAGE)
+  page_num = int(request.GET.get('page',1))
+  page = pg.page(page_num)
+  range = pg.page_range
+  if range == [1]:
+    range = None
+  return page_num,range, page.object_list
+
+def get_comment_url(comment):
+  """Return URL for given Comment object."""
+
+  type = comment.object_type
+  id = comment.object_id
+  if type=='Project':
+    return settings.BASE_URL+"/projects/%s/#comment-%s" % (id,comment.id)
+  if type=='Bug':
+    return settings.BASE_URL+"/bugs/%s/#comment-%s" % (id,comment.id)
+  if type=='Document':
+    return settings.BASE_URL+"/docs/%d/#comment-%s" % (id,comment.id)
+  if type=='Request':
+    return settings.BASE_URL+"/requests/%d/#comment-%s" % (id,comment.id)
+
+def post_comment(request,type,id,redirect_to):
+  """Try post the comment, containing in request.POST,
+  for object with given `type' and `id'.
+  If success, return (True, HttpResponseRedirect(redirect_to)),
+  else return (False, form), where `form' is form with errors."""
+
+  form = CommentForm(request.POST)
+  if form.is_valid():
+    c = form.save(commit=False)
+    if 'title' not in form.cleaned_data or not form.cleaned_data['title']:
+      c.title = form.cleaned_data['text'][:20]+'...'
+    c.author = request.user
+    c.object_id = id
+    c.object_type = type
+    c.created = datetime.now()
+    c.save()
+    return True, HttpResponseRedirect(redirect_to)
+  else:
+    return False,form
diff --git a/comments/views.py b/comments/views.py
new file mode 100644
index 0000000..60f00ef
--- /dev/null
+++ b/comments/views.py
@@ -0,0 +1 @@
+# Create your views here.
diff --git a/hms/modules/last_comments.py b/hms/modules/last_comments.py
index a5e1bdc..6b5d0b2 100644
--- a/hms/modules/last_comments.py
+++ b/hms/modules/last_comments.py
@@ -2,18 +2,18 @@

 def init():

-  from mgmt.models import Comment
-  import mgmt.utils
+  from comments.models import Comment
+  import comments.utils

   @block
   def last_comments():
     def short_comment(comment):
-      return u"<li><a href='%s'>%s</a></li>" % (mgmt.utils.get_comment_url(comment),comment.title)
+      return u"<li><a href='%s'>%s</a></li>" % (comments.utils.get_comment_url(comment),comment.title)
     b = Block()
     b.name='last_comments'
     b.title = u"Последние комментарии"
-    comments = Comment.objects.order_by('-created')[:10]
-    b.content = "<ul>\n" + "\n".join(map(short_comment,comments)) + "\n</ul>\n"
+    cs = Comment.objects.order_by('-created')[:10]
+    b.content = "<ul>\n" + "\n".join(map(short_comment,cs)) + "\n</ul>\n"
     return b


diff --git a/mgmt/bugs_views.py b/mgmt/bugs_views.py
index 6b5a6f7..1a34132 100644
--- a/mgmt/bugs_views.py
+++ b/mgmt/bugs_views.py
@@ -3,11 +3,13 @@ from django.core.urlresolvers import reverse
 from django.conf import settings
 import django.newforms as djangoforms
 from django.newforms.util import ValidationError
+from comments.forms import CommentForm
+from comments.utils import get_comments,post_comment
 from decorators import check_auth,login_required,render_to
-from utils import get_bugs,get_comments,post_comment
+from utils import get_bugs
 from models import *
 from rights import can,possible_changes
-from forms import BugForm,BugPriorityForm,BugComplexityForm,CommentForm
+from forms import BugForm,BugPriorityForm,BugComplexityForm

 @login_required
 @render_to('bug_report.html')
diff --git a/mgmt/documents_views.py b/mgmt/documents_views.py
index 538f28a..d8148bf 100644
--- a/mgmt/documents_views.py
+++ b/mgmt/documents_views.py
@@ -2,10 +2,11 @@ from datetime import datetime
 from django.http import HttpResponseRedirect
 from django.core.urlresolvers import reverse
 from decorators import check_auth,login_required,render_to
-from utils import get_comments,post_comment
+from comments.forms import CommentForm
+from comments.utils import get_comments,post_comment
 from models import *
 from rights import can
-from forms import CommentForm,DocForm
+from forms import DocForm

 @check_auth(Project,'view')
 @render_to('project_docs.html')
diff --git a/mgmt/forms.py b/mgmt/forms.py
index 0e4cf27..cf515a5 100644
--- a/mgmt/forms.py
+++ b/mgmt/forms.py
@@ -10,12 +10,6 @@ from models import *
 # Forms
 ############

-class CommentForm(forms.ModelForm):
-  title = forms.CharField(required=False,label=_("Title"))
-  class Meta:
-    model = Comment
-    exclude = ("created","author","object_id","object_type")
-
 class BugForm(forms.ModelForm):
   class Meta:
     model = Bug
diff --git a/mgmt/models.py b/mgmt/models.py
index dd3a604..01ba571 100644
--- a/mgmt/models.py
+++ b/mgmt/models.py
@@ -6,8 +6,6 @@ from django.conf import settings
 from django.contrib.auth.models import User
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import activate
-# activate(settings.LANGUAGE_CODE)
-# _ = lambda s: s

 class Object(models.Model):
   "Base abstract model."
@@ -121,22 +119,6 @@ class Document(Object):
   class Admin:
     pass

-class Comment(models.Model):
-  author = models.ForeignKey(User)
-  created = models.DateTimeField()
-  object_id = models.IntegerField()
-  object_type = models.CharField(max_length=10)
-  title = models.CharField(max_length=64,null=True,verbose_name=_("Title"))
-  text = models.TextField(_("Text"))
-  class Admin:
-    pass
-  def __unicode__(self):
-    return self.title
-  class Meta:
-    verbose_name = _("Comment")
-    verbose_name_plural = _("Comments")
-    ordering = ("created",)
-
 class PrivateMsg(Object):
   author = models.ForeignKey(User,related_name='sended_messages',verbose_name=_("Author"))
   reciever = models.ForeignKey(User,related_name='recieved_messages',verbose_name=_("To"))
diff --git a/mgmt/project_views.py b/mgmt/project_views.py
index f6b5d8b..baa31a3 100644
--- a/mgmt/project_views.py
+++ b/mgmt/project_views.py
@@ -1,10 +1,11 @@
 from django.conf import settings
 from django.core.urlresolvers import reverse
 from decorators import check_auth,login_required,render_to
-from utils import get_comments,get_bugs,post_comment
+from utils import get_bugs
+from comments.forms import CommentForm
+from comments.utils import get_comments,post_comment
 from models import *
 from rights import can
-from forms import CommentForm

 @check_auth(Project,'view')
 @render_to('project.html')
diff --git a/mgmt/requests_views.py b/mgmt/requests_views.py
index 817c818..a6998c0 100644
--- a/mgmt/requests_views.py
+++ b/mgmt/requests_views.py
@@ -2,10 +2,11 @@ from datetime import datetime
 from django.http import HttpResponseForbidden,HttpResponseRedirect
 from django.core.urlresolvers import reverse
 from decorators import check_auth,login_required,render_to
-from utils import get_comments,post_comment
 from models import *
 from rights import can
-from forms import RequestForm,RequestStateForm,CommentForm
+from forms import RequestForm,RequestStateForm
+from comments.forms import CommentForm
+from comments.utils import get_comments,post_comment

 @render_to('requests.html')
 def requests(request,pid):
diff --git a/mgmt/utils.py b/mgmt/utils.py
index 56db47c..927ab4a 100644
--- a/mgmt/utils.py
+++ b/mgmt/utils.py
@@ -7,7 +7,6 @@ from django.conf import settings

 from context import *
 from models import *
-from forms import CommentForm

 #############
 # Utilites
@@ -25,18 +24,6 @@ def render_rss(template,dict,request):
   t = get_template(template)
   return HttpResponse(t.render(c),mimetype='application/xml')

-def get_comments(request,id,type):
-  """Return a list of comments on one page (specified in the request), for given object."""
-
-  all = Comment.objects.filter(object_id=id, object_type=type)
-  pg = Paginator(all,settings.COMMENTS_PER_PAGE)
-  page_num = int(request.GET.get('page',1))
-  page = pg.page(page_num)
-  range = pg.page_range
-  if range == [1]:
-    range = None
-  return page_num,range, page.object_list
-
 def get_bugs(request,pid=None):
   """Return a list of bugs on one page (specified in the request), for given project."""

@@ -52,36 +39,3 @@ def get_bugs(request,pid=None):
     range = None
   return page_num,range, page.object_list

-def get_comment_url(comment):
-  """Return URL for given Comment object."""
-
-  type = comment.object_type
-  id = comment.object_id
-  if type=='Project':
-    return settings.BASE_URL+"/projects/%s/#comment-%s" % (id,comment.id)
-  if type=='Bug':
-    return settings.BASE_URL+"/bugs/%s/#comment-%s" % (id,comment.id)
-  if type=='Document':
-    return settings.BASE_URL+"/docs/%d/#comment-%s" % (id,comment.id)
-  if type=='Request':
-    return settings.BASE_URL+"/requests/%d/#comment-%s" % (id,comment.id)
-
-def post_comment(request,type,id,redirect_to):
-  """Try post the comment, containing in request.POST,
-  for object with given `type' and `id'.
-  If success, return (True, HttpResponseRedirect(redirect_to)),
-  else return (False, form), where `form' is form with errors."""
-
-  form = CommentForm(request.POST)
-  if form.is_valid():
-    c = form.save(commit=False)
-    if 'title' not in form.cleaned_data or not form.cleaned_data['title']:
-      c.title = form.cleaned_data['text'][:20]+'...'
-    c.author = request.user
-    c.object_id = id
-    c.object_type = type
-    c.created = datetime.now()
-    c.save()
-    return True, HttpResponseRedirect(redirect_to)
-  else:
-    return False,form
diff --git a/mgmt/views.py b/mgmt/views.py
index f801cc2..8bdcb25 100644
--- a/mgmt/views.py
+++ b/mgmt/views.py
@@ -8,8 +8,8 @@ from django.contrib.auth.models import User
 from django.core.urlresolvers import reverse

 from django.conf import settings
-# from django.utils.translation import activate
-# activate(settings.LANGUAGE_CODE)
+
+from comments.models import Comment

 import debug
 from models import *
@@ -23,7 +23,7 @@ from requests_views import *
 from documents_views import *
 from tasks_views import *
 from reports_views import *
-from rss_views import *
+# from rss_views import *

 #############
 # Views
diff --git a/settings.py b/settings.py
index 0eeb094..faa3224 100644
--- a/settings.py
+++ b/settings.py
@@ -94,6 +94,7 @@ INSTALLED_APPS = (
     'kb',
     'dburls',
     'pygit',
+    'comments',
 )

 THEME = 'rtfm'
diff --git a/urls.py b/urls.py
index 2a9ae84..1abccab 100644
--- a/urls.py
+++ b/urls.py
@@ -12,7 +12,7 @@ urlpatterns = patterns('',
     (r'^docs/(\d+)/edit/$', "mgmt.views.edit_document"),
     (r'^docs/create/(\d+)/$', "mgmt.views.create_document"),
     (r'^bugs/state/(\d+)/$', 'mgmt.views.bugs_by_state'),
-    (r'^bugs/feed/$', 'mgmt.views.last_bugs'),
+#     (r'^bugs/feed/$', 'mgmt.views.last_bugs'),
     (r'^bugs/(\d+)/$', "mgmt.views.one_bug"),
     (r'^bugs/(\d+)/edit/$', "mgmt.views.edit_bug"),
     (r'^bugs/report/(\d+)/$', 'mgmt.views.bug_report'),
@@ -24,7 +24,7 @@ urlpatterns = patterns('',
     (r'^tasks/(\d+)/$', 'mgmt.views.one_task'),
     (r'^tasks/(\d+)/edit/$', 'mgmt.views.edit_task'),
     (r'^tasks/create/(\d+)/$', 'mgmt.views.create_task'),
-    (r'^reports/feed/$', 'mgmt.views.last_reports'),
+#     (r'^reports/feed/$', 'mgmt.views.last_reports'),
     (r'^reports/(\d+)/$', 'mgmt.views.one_report'),
     (r'^reports/(\d+)/edit/$', 'mgmt.views.edit_report'),
     (r'^reports/create/(\d+)/$', 'mgmt.views.create_report'),
@@ -32,7 +32,7 @@ urlpatterns = patterns('',
     (r'^message/(\d+)/delete/$', 'mgmt.views.delete_private_message'),
     (r'^preview/$', 'mgmt.views.message_preview'),
     (r'^comments/(\d+)/delete/$', 'mgmt.views.delete_comment'),
-    (r'^comments/feed/$', 'mgmt.views.last_comments'),
+#     (r'^comments/feed/$', 'mgmt.views.last_comments'),
     (r'^my/$', 'mgmt.views.my_page'),

     (r'^git/', include('pygit.urls')),
ViewGit