Refactor mgmt.views: add new decorator - @render_to('template.html').

portnov [2008-06-15 16:52:26]
Refactor mgmt.views: add new decorator - @render_to('template.html').
Filename
mgmt/decorators.py
mgmt/views.py
pygit/views.py
templates/project_docs.html
diff --git a/mgmt/decorators.py b/mgmt/decorators.py
index 5b49597..4b2d618 100644
--- a/mgmt/decorators.py
+++ b/mgmt/decorators.py
@@ -1,5 +1,6 @@
 from django.http import HttpResponseForbidden,HttpResponseRedirect
 from rights import can
+from utils import render_it

 def login_required(func):
   def wrapper(request,*args,**kwargs):
@@ -25,3 +26,12 @@ def check_auth(cls,action):
     return wrapper
   decorator.__name__ = 'check_auth'
   return decorator
+
+def render_to(template):
+  def decorator(func):
+    def wrapper(request,*args,**kwargs):
+      r = func(request,*args,**kwargs)
+      return render_it(template, r, request)
+    wrapper.__name__ = func.__name__
+    return wrapper
+  return decorator
diff --git a/mgmt/views.py b/mgmt/views.py
index 8859a99..21f834f 100644
--- a/mgmt/views.py
+++ b/mgmt/views.py
@@ -13,18 +13,20 @@ from django.conf import settings
 import debug
 from models import *
 from rights import can,possible_changes
-from utils import *
+from utils import get_comments,get_bugs
 from forms import *
-from decorators import check_auth,login_required
+from decorators import check_auth,login_required,render_to

 #############
 # Views
 ############

+@render_to('main.html')
 def main(request):
   projects = Project.objects.all()
-  return render_it('main.html',{'projects': projects},request)
+  return {'projects': projects}

+@render_to('project.html')
 def one_project(request,id):
   project = Project.objects.get(pk=id)
   if request.method=='POST':
@@ -46,14 +48,13 @@ def one_project(request,id):
     form = None
   for comment in comments:
     comment.can_delete = can(request.user,'delete',comment)
-  return render_it('project.html',
-      {'project': project,
+  return {'project': project,
        'current_page': curr,
        'page_numbers': pages,
        'comments': comments,
-       'form': form},
-       request)
+       'form': form}

+@render_to('project_bugs.html')
 def project_bugs(request,id):
   project = Project.objects.get(pk=id)
   page,pages,bugs = get_bugs(request,id)
@@ -61,15 +62,14 @@ def project_bugs(request,id):
     bug.complexity_str = dict(settings.COMPLEXITY_CHOICES).get(bug.complexity,'Unknown')
     bug.priority_str = dict(settings.PRIORITY_CHOICES).get(bug.priority,'Unset')
   can_report = can(request.user,'send bug')
-  return render_it('project_bugs.html',
-      {'project': project,
+  return {'project': project,
        'current_page': page,
        'page_numbers': pages,
        'bugs': bugs,
-       'can_report': can_report},
-       request)
+       'can_report': can_report}

 @login_required
+@render_to('bug_report.html')
 def bug_report(request,pid):
   project = Project.objects.get(pk=pid)
   if request.method=='POST':
@@ -96,23 +96,19 @@ def bug_report(request,pid):
       b.save()
       return HttpResponseRedirect(reverse('mgmt.views.project_bugs',args=(pid,)))
     else:
-      return render_it('bug_report.html',
-          {'project': project, 'form': form},
-          request)
+      return {'project': project, 'form': form}
   form = BugForm()
-  return render_it('bug_report.html',
-      {'project': project,
-       'form': form},
-      request)
+  return {'project': project,
+       'form': form}

+@render_to('project_docs.html')
 def project_documents(request,id):
   project = Project.objects.get(pk=id)
   cats = Category.objects.filter(document__project=project)
-  return render_it('project_docs.html',
-      {'project': project,
-       'categories': cats},
-       request)
+  return {'project': project,
+       'categories': cats}

+@render_to('document.html')
 def one_document(request,id):
   doc = Document.objects.get(pk=id)
   if request.method=='POST':
@@ -138,16 +134,15 @@ def one_document(request,id):
     edit_link = None
   for comment in comments:
     comment.can_delete = can(request.user,'delete',comment)
-  return render_it('document.html',
-      {'document': doc,
+  return {'document': doc,
        'edit_link': edit_link,
        'current_page': curr,
        'page_numbers': pages,
        'comments': comments,
-       'form': form},
-       request)
+       'form': form}

 @check_auth(Project,'document')
+@render_to('create_doc.html')
 def create_document(request,project):
   msg = ""
   if request.method=='POST':
@@ -160,15 +155,12 @@ def create_document(request,project):
       doc.save()
       return HttpResponseRedirect(reverse('mgmt.views.one_document',args=(doc.id,)))
     else:
-      return render_it('create_doc.html',
-          {'form': form},
-          request)
+      return {'form': form}
   form = DocForm()
-  return render_it('create_doc.html',
-       {'form': form},
-       request)
+  return {'form': form}

 @check_auth(Document,'edit')
+@render_to('edit_document.html')
 def edit_document(request,doc):
   project = doc.project
   if request.method=='POST':
@@ -177,17 +169,13 @@ def edit_document(request,doc):
       form.save()
       return HttpResponseRedirect(reverse('mgmt.views.one_document',args=(doc.id,)))
     else:
-      return render_it('edit_document.html',
-        {'document': doc,
+      return {'document': doc,
          'project_id': project.id,
-         'form': form},
-        request)
+         'form': form}
   form = DocForm(instance=doc)
-  return render_it('edit_document.html',
-      {'document': doc,
+  return {'document': doc,
        'project_id': project.id,
-       'form': form},
-      request)
+       'form': form}

 def one_bug(request,id):
   bug = Bug.objects.get(pk=id)
@@ -250,8 +238,7 @@ def one_bug(request,id):
   tasks = bug.task_set.all()
   priority = dict(settings.PRIORITY_CHOICES).get(bug.priority,u'Unset')
   complexity = dict(settings.COMPLEXITY_CHOICES).get(bug.complexity,'Unknown')
-  return render_it('bug.html',
-      {'bug': bug,
+  return {'bug': bug,
        'change_state': state_form,
        'edit_link': edit_link,
        'project': bug.project,
@@ -263,10 +250,10 @@ def one_bug(request,id):
        'complexity': complexity,
        'priority_form': priority_form,
        'complexity_form': complexity_form,
-       'form': form},
-       request)
+       'form': form}

 @check_auth(Bug,'edit')
+@render_to('edit_bug.html')
 def edit_bug(request,bug):
   if request.method=='POST':
     form = BugForm(request.POST)
@@ -290,29 +277,26 @@ def edit_bug(request,bug):
                   'your_actions': bug.actions,
                   'expected': bug.expected,
                   'unexpected': bug.unexpected})
-  return render_it('edit_bug.html',
-      {'project': bug.project,
+  return {'project': bug.project,
        'bug': bug,
-       'form': form},
-      request)
+       'form': form}

+@render_to('all_bugs.html')
 def all_bugs(request):
   page,pages,bugs = get_bugs(request)
-  return render_it('all_bugs.html',
-     {'bugs': bugs,
+  return {'bugs': bugs,
       'current_page': page,
-      'page_numbers': pages},
-     request)
+      'page_numbers': pages}

+@render_to('all_bugs.html')
 def bugs_by_state(request,sid):
   state = BugState.objects.get(pk=sid)
   page,pages,bugs = Bug.objects.filter(status=state)
-  return render_it('all_bugs.html',
-     {'bugs': bugs,
-      'state': state.name},
-     request)
+  return {'bugs': bugs,
+      'state': state.name}

 @login_required
+@render_to('user_page.html')
 def user_page(request,name):
   try:
     user = User.objects.get(username=name)
@@ -343,37 +327,34 @@ def user_page(request,name):
   tasks = user.task_set.select_related().filter(status__lt=2)[:10]
   reports = user.report_set.select_related().all()[:10]

-  return render_it('user_page.html',
-      {'user_view': user,
+  return {'user_view': user,
        'private_messages': messages,
        'form': form,
        'projects_admin': pr_admin,
        'projects_team': pr_team,
        'tasks': tasks,
        'reports': reports,
-       'bugs_resp': bugs_resp},
-       request)
+       'bugs_resp': bugs_resp}

 def my_page(request):
   return user_page(request,request.user.username)

+@render_to('report.html')
 def one_report(request,rid):
   report = Report.objects.select_related().get(pk=rid)
   can_edit = can(request.user,'edit',report)
-  return render_it('report.html',
-      {'report': report,
-       'can_edit': can_edit},
-      request)
+  return {'report': report,
+       'can_edit': can_edit}

+@render_to('task_reports.html')
 def task_reports(request,tid):
   task = Task.objects.get(pk=tid)
   reports = task.report_set.select_related().all()
-  return render_it('task_reports.html',
-      {'task': task,
-       'reports': reports},
-      request)
+  return {'task': task,
+       'reports': reports}

 @login_required
+@render_to('create_report.html')
 def create_report(request,tid):
   if request.method=='POST':
     form = ReportModelForm(request.POST)
@@ -385,16 +366,13 @@ def create_report(request,tid):
       report.save()
       return HttpResponseRedirect(reverse('mgmt.views.one_task',args=(tid,)))
     else:
-      return render_it('create_report.html',
-          {'form': form},
-          request)
+      return {'form': form}
   else:
     form = ReportModelForm()
-    return render_it('create_report.html',
-        {'form': form},
-        request)
+    return {'form': form}

 @check_auth(Report,'edit')
+@render_to('edit_report.html')
 def edit_report(request,report):
   if request.method=='POST':
     form = ReportModelForm(request.POST,instance=report)
@@ -402,27 +380,23 @@ def edit_report(request,report):
       form.save()
       return HttpResponseRedirect(reverse('mgmt.views.one_report',args=(report.id,)))
     else:
-      return render_it('edit_report.html',
-          {'form': form,
-           'report': report},
-          request)
+      return {'form': form,
+           'report': report}
   else:
     form = ReportModelForm(instance=report)
-    return render_it('edit_report.html',
-        {'form': form,
-         'report': report},
-        request)
+    return {'form': form,
+         'report': report}

+@render_to('project_tasks.html')
 def project_tasks(request,pid):
   project = Project.objects.get(pk=pid)
   tasks = project.task_set.all()
   can_task = can(request.user,'create task',project)
-  return render_it('project_tasks.html',
-      {'project': project,
+  return {'project': project,
        'can_task': can_task,
-       'tasks': tasks},
-      request)
+       'tasks': tasks}

+@render_to('task.html')
 def one_task(request,tid):
   task = Task.objects.select_related().get(pk=tid)
   if request.method=='POST':
@@ -435,15 +409,14 @@ def one_task(request,tid):
     state_form = TaskStateForm({'state': task.status})
   else:
     state_form = None
-  return render_it('task.html',
-      {'task': task,
+  return {'task': task,
        'can_report': can_report,
        'reports': reports,
        'state_form': state_form,
-       'can_edit': can_edit},
-      request)
+       'can_edit': can_edit}

 @check_auth(Task,'edit')
+@render_to('edit_task.html')
 def edit_task(request,task):
   if request.method=='POST':
     form = TaskModelForm(request.POST,instance=task)
@@ -452,18 +425,15 @@ def edit_task(request,task):
       task.save()
       return HttpResponseRedirect(reverse('mgmt.views.one_task',args=(task.id,)))
     else:
-      return render_it('edit_task.html',
-        {'form': form,
-         'task': task},
-        request)
+      return {'form': form,
+         'task': task}
   else:
     form = TaskModelForm(instance=task)
-    return render_it('edit_task.html',
-      {'form': form,
-       'task': task},
-      request)
+    return {'form': form,
+       'task': task}

 @check_auth(Project,'create task')
+@render_to('create_task.html')
 def create_task(request,project):
   if request.method=='POST':
     form = TaskModelForm(request.POST)
@@ -476,57 +446,50 @@ def create_task(request,project):
       task = task.save()
       return HttpResponseRedirect(reverse('mgmt.views.project_tasks',args=(project.id,)))
     else:
-      return render_it('create_task.html',
-        {'form': form},
-        request)
+      return {'form': form}
   else:
     form = TaskModelForm()
-    return render_it('create_task.html',
-      {'form': form},
-      request)
+    return {'form': form}

 @login_required
+@render_to('private_message.html')
 def private_message(request,mid):
   msg = PrivateMsg.objects.get(pk=mid)
   if request.user.id != msg.reciever.id:
     return HttpResponseForbidden('<h1>Forbidden!</h1>')
-  return render_it('private_message.html',
-      {'message': msg},
-      request)
+  return {'message': msg}

 @check_auth(PrivateMsg,'delete')
+@render_to('delete.html')
 def delete_private_message(request,msg):
   if request.method=='GET':
-    return render_it('delete.html',
-      {'message': msg,
-       'referer': request.META['HTTP_REFERER']},
-      request)
+    return {'message': msg,
+       'referer': request.META['HTTP_REFERER']}
   elif request.method=='POST':
     msg.delete()
     return HttpResponseRedirect(reverse('mgmt.views.user_page',args=(request.user.username,)))

 @check_auth(Comment,'delete')
+@render_to('delete.html')
 def delete_comment(request,comment):
   if request.method=='GET':
-    return render_it('delete.html',
-      {'message': comment,
-       'referer': request.META['HTTP_REFERER']},
-      request)
+    return {'message': comment,
+       'referer': request.META['HTTP_REFERER']}
   elif request.method=='POST':
     comment.delete()
     return HttpResponseRedirect('/')

+@render_to('requests.html')
 def requests(request,pid):
   project = Project.objects.get(pk=pid)
   rs = project.request_set.all()
   can_request = can(request.user,'request',project)
-  return render_it('requests.html',
-    {'project': project,
+  return {'project': project,
      'can_request': can_request,
-     'requests': rs},
-    request)
+     'requests': rs}

 @login_required
+@render_to('create_request.html')
 def create_request(request,pid):
   project = Project.objects.get(pk=pid)
   if request.method == 'POST':
@@ -542,17 +505,14 @@ def create_request(request,pid):
       rq.save()
       return HttpResponseRedirect(reverse('mgmt.views.requests',args=(pid,)))
     else:
-      return render_it('create_request.html',
-          {'project': project,
-           'form': form},
-          request)
+      return {'project': project,
+           'form': form}
   form = RequestForm()
-  return render_it('create_request.html',
-      {'project': project,
-       'form': form},
-      request)
+  return {'project': project,
+       'form': form}

 @check_auth(Request,'edit')
+@render_to('edit_request.html')
 def edit_request(request,rq):
   if request.method=='POST':
     form = RequestForm(request.POST)
@@ -564,17 +524,14 @@ def edit_request(request,rq):
       rq.save()
       return HttpResponseRedirect(reverse('mgmt.views.one_request',args=(rq.id,)))
     else:
-      return render_it('edit_request.html',
-        {'request': rq,
-         'form': form},
-        request)
+      return {'request': rq,
+         'form': form}
   else:
     form = RequestForm({'title': rq.name, 'text': rq.text})
-    return render_it('edit_request.html',
-      {'request': rq,
-       'form': form},
-      request)
+    return {'request': rq,
+       'form': form}

+@render_to('request.html')
 def one_request(request,rid):
   rq = Request.objects.get(pk=rid)
   if request.method=='POST':
@@ -606,23 +563,20 @@ def one_request(request,rid):
     form = CommentForm()
   else:
     form = None
-  return render_it('request.html',
-      {'request': rq,
+  return {'request': rq,
        'tasks': tasks,
        'can_edit': can_edit,
        'state_form': state_form,
        'current_page': page,
        'page_numbers': pages,
        'comments': comments,
-       'form': form},
-      request)
+       'form': form}

+@render_to('preview.html')
 def message_preview(request):
   if request.method=='POST':
     text = request.POST['data']
-    return render_it('preview.html',
-        {'text': text},
-        request)
+    return {'text': text}
   raise Http404

 def strange(request):
diff --git a/pygit/views.py b/pygit/views.py
index 6af6cc9..543e8b0 100644
--- a/pygit/views.py
+++ b/pygit/views.py
@@ -12,7 +12,7 @@ import pygit
 from chart import Chart

 sys.path.append(dirname(dirname(__file__)))
-from mgmt.views import render_it
+from mgmt.utils import render_it

 class Repo(object):
   pass
diff --git a/templates/project_docs.html b/templates/project_docs.html
index 3f858b9..88a78e5 100644
--- a/templates/project_docs.html
+++ b/templates/project_docs.html
@@ -5,7 +5,7 @@

 {% block main %}

-  <h2>Проект: {{project|link|safe}}</h2>
+  <h2>Документация по проекту {{project|link|safe}}</h2>
   {%if categories %}
     {% for cat in categories %}
       <h3>{{cat.title}}:</h3>
ViewGit