From d456ff32aa3255113eab9e9c83676660807514e8 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Tue, 29 Mar 2011 16:15:28 -0500 Subject: Convert todolist delete to class-based view Signed-off-by: Dan McGee --- todolists/urls.py | 7 +++++-- todolists/views.py | 14 ++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) (limited to 'todolists') diff --git a/todolists/urls.py b/todolists/urls.py index 187d4820..8814d65e 100644 --- a/todolists/urls.py +++ b/todolists/urls.py @@ -1,4 +1,7 @@ from django.conf.urls.defaults import patterns +from django.contrib.auth.decorators import permission_required + +from .views import DeleteTodolist urlpatterns = patterns('todolists.views', (r'^$', 'list'), @@ -6,8 +9,8 @@ (r'^add/$', 'add'), (r'^edit/(?P\d+)/$', 'edit'), (r'^flag/(\d+)/(\d+)/$', 'flag'), - (r'^delete/(?P\d+)/$', - 'delete_todolist'), + (r'^delete/(?P\d+)/$', + permission_required('main.delete_todolist')(DeleteTodolist.as_view())), ) # vim: set ts=4 sw=4 et: diff --git a/todolists/views.py b/todolists/views.py index 6bd456ae..a2029be0 100644 --- a/todolists/views.py +++ b/todolists/views.py @@ -7,7 +7,7 @@ from django.db import transaction from django.db.models import Count from django.views.decorators.cache import never_cache -from django.views.generic.create_update import delete_object +from django.views.generic import DeleteView from django.views.generic.simple import direct_to_template from django.template import Context, loader from django.utils import simplejson @@ -109,13 +109,11 @@ def edit(request, list_id): } return direct_to_template(request, 'general_form.html', page_dict) -@permission_required('main.delete_todolist') -@never_cache -def delete_todolist(request, object_id): - return delete_object(request, object_id=object_id, model=Todolist, - template_name="todolists/todolist_confirm_delete.html", - post_delete_redirect='/todo/') - +class DeleteTodolist(DeleteView): + model = Todolist + # model in main == assumes name 'main/todolist_confirm_delete.html' + template_name = 'todolists/todolist_confirm_delete.html' + success_url = '/todo/' @transaction.commit_on_success def create_todolist_packages(form, creator=None): -- cgit v1.2.3-54-g00ecf From 842f59d018947ca696cf116e9d1591f2ad83f8a7 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sat, 9 Apr 2011 16:29:02 -0500 Subject: Rename local variables for clarity Signed-off-by: Dan McGee --- devel/views.py | 6 +++--- todolists/views.py | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'todolists') diff --git a/devel/views.py b/devel/views.py index a83c3bbc..cb0ff056 100644 --- a/devel/views.py +++ b/devel/views.py @@ -165,15 +165,15 @@ def save(self, commit=True): profile.save() self.save_m2m() - t = loader.get_template('devel/new_account.txt') - c = Context({ + template = loader.get_template('devel/new_account.txt') + ctx = Context({ 'site': Site.objects.get_current(), 'user': user, 'password': password, }) send_mail("Your new archweb account", - t.render(c), + template.render(ctx), 'Arch Website Notification ', [user.email], fail_silently=False) diff --git a/todolists/views.py b/todolists/views.py index a2029be0..d3ed7818 100644 --- a/todolists/views.py +++ b/todolists/views.py @@ -35,7 +35,7 @@ class Meta: @permission_required('main.change_todolistpkg') @never_cache def flag(request, listid, pkgid): - list = get_object_or_404(Todolist, id=listid) + todolist = get_object_or_404(Todolist, id=listid) pkg = get_object_or_404(TodolistPkg, id=pkgid) pkg.complete = not pkg.complete pkg.save() @@ -48,8 +48,8 @@ def flag(request, listid, pkgid): @login_required @never_cache def view(request, listid): - list = get_object_or_404(Todolist, id=listid) - return direct_to_template(request, 'todolists/view.html', {'list': list}) + todolist = get_object_or_404(Todolist, id=listid) + return direct_to_template(request, 'todolists/view.html', {'list': todolist}) @login_required @never_cache @@ -161,13 +161,13 @@ def send_todolist_emails(todo_list, new_packages): maint_packages.setdefault(maint, []).append(todo_package) for maint, packages in maint_packages.iteritems(): - c = Context({ + ctx = Context({ 'todo_packages': sorted(packages), 'todolist': todo_list, }) - t = loader.get_template('todolists/email_notification.txt') + template = loader.get_template('todolists/email_notification.txt') send_mail('Packages added to todo list \'%s\'' % todo_list.name, - t.render(c), + template.render(ctx), 'Arch Website Notification ', [maint], fail_silently=True) -- cgit v1.2.3-54-g00ecf From 064813560c20f53f9fd759d0c4e0f0a6729c8ba6 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Sat, 9 Apr 2011 16:29:38 -0500 Subject: Show more info about todolists on developer dashboard Signed-off-by: Dan McGee --- devel/views.py | 8 ++++++-- templates/devel/index.html | 21 ++++++++++++++------- todolists/urls.py | 2 +- todolists/utils.py | 19 +++++++++++++++++++ todolists/views.py | 17 +++-------------- 5 files changed, 43 insertions(+), 24 deletions(-) create mode 100644 todolists/utils.py (limited to 'todolists') diff --git a/devel/views.py b/devel/views.py index cb0ff056..b61e605f 100644 --- a/devel/views.py +++ b/devel/views.py @@ -11,10 +11,11 @@ from django.views.decorators.cache import never_cache from django.views.generic.simple import direct_to_template -from main.models import Package, Todolist, TodolistPkg +from main.models import Package, TodolistPkg from main.models import Arch, Repo from main.models import UserProfile from packages.models import PackageRelation +from todolists.utils import get_annotated_todolists from .utils import get_annotated_maintainers import datetime @@ -35,6 +36,9 @@ def index(request): todopkgs = todopkgs.filter(pkg__pkgbase__in=inner_q).order_by( 'list__name', 'pkg__pkgname') + todolists = get_annotated_todolists() + todolists = [todolist for todolist in todolists if todolist.incomplete_count > 0] + maintainers = get_annotated_maintainers() maintained = PackageRelation.objects.filter( @@ -48,7 +52,7 @@ def index(request): } page_dict = { - 'todos': Todolist.objects.incomplete().order_by('-date_added'), + 'todos': todolists, 'repos': Repo.objects.all(), 'arches': Arch.objects.all(), 'maintainers': maintainers, diff --git a/templates/devel/index.html b/templates/devel/index.html index af2e5d28..92332c7a 100644 --- a/templates/devel/index.html +++ b/templates/devel/index.html @@ -72,19 +72,26 @@

Package Todo Lists

Name Creation Date + Creator Description + Package Count + Incomplete Count + {% for todo in todos %} - - {{ todo.name }} - {{ todo.date_added|date }} - {{ todo.description|urlize }} - + + {{ todo.name }} + {{ todo.date_added|date }} + {{ todo.creator.get_full_name }} + {{ todo.description|urlize }} + {{ todo.pkg_count }} + {{ todo.incomplete_count }} + {% empty %} - No package todo lists to display + No package todo lists to display {% endfor %} diff --git a/todolists/urls.py b/todolists/urls.py index 8814d65e..2612a52e 100644 --- a/todolists/urls.py +++ b/todolists/urls.py @@ -4,7 +4,7 @@ from .views import DeleteTodolist urlpatterns = patterns('todolists.views', - (r'^$', 'list'), + (r'^$', 'todolist_list'), (r'^(\d+)/$', 'view'), (r'^add/$', 'add'), (r'^edit/(?P\d+)/$', 'edit'), diff --git a/todolists/utils.py b/todolists/utils.py new file mode 100644 index 00000000..894f3f1d --- /dev/null +++ b/todolists/utils.py @@ -0,0 +1,19 @@ +from django.db.models import Count + +from main.models import Todolist + +def get_annotated_todolists(): + qs = Todolist.objects.all() + lists = qs.select_related('creator').annotate( + pkg_count=Count('todolistpkg')).order_by('-date_added') + incomplete = qs.filter(todolistpkg__complete=False).annotate( + Count('todolistpkg')).values_list('id', 'todolistpkg__count') + + # tag each list with an incomplete package count + lookup = dict(incomplete) + for todolist in lists: + todolist.incomplete_count = lookup.get(todolist.id, 0) + + return lists + +# vim: set ts=4 sw=4 et: diff --git a/todolists/views.py b/todolists/views.py index d3ed7818..ffe4c32f 100644 --- a/todolists/views.py +++ b/todolists/views.py @@ -5,7 +5,6 @@ from django.shortcuts import get_object_or_404, redirect from django.contrib.auth.decorators import login_required, permission_required from django.db import transaction -from django.db.models import Count from django.views.decorators.cache import never_cache from django.views.generic import DeleteView from django.views.generic.simple import direct_to_template @@ -13,6 +12,7 @@ from django.utils import simplejson from main.models import Todolist, TodolistPkg, Package +from .utils import get_annotated_todolists class TodoListForm(forms.ModelForm): packages = forms.CharField(required=False, @@ -53,19 +53,8 @@ def view(request, listid): @login_required @never_cache -def list(request): - lists = Todolist.objects.select_related('creator').annotate( - pkg_count=Count('todolistpkg')).order_by('-date_added') - incomplete = Todolist.objects.filter(todolistpkg__complete=False).annotate( - Count('todolistpkg')).values_list('id', 'todolistpkg__count') - - # tag each list with an incomplete package count - lookup = {} - for k, v in incomplete: - lookup[k] = v - for l in lists: - l.incomplete_count = lookup.get(l.id, 0) - +def todolist_list(request): + lists = get_annotated_todolists() return direct_to_template(request, 'todolists/list.html', {'lists': lists}) @permission_required('main.add_todolist') -- cgit v1.2.3-54-g00ecf From bf4d344c18b24f95b58542c2aa0c3df98e627a44 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Wed, 4 May 2011 12:54:14 -0500 Subject: Fix missed list -> todolist variable rename Signed-off-by: Dan McGee --- todolists/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'todolists') diff --git a/todolists/views.py b/todolists/views.py index ffe4c32f..9376ed68 100644 --- a/todolists/views.py +++ b/todolists/views.py @@ -43,7 +43,7 @@ def flag(request, listid, pkgid): return HttpResponse( simplejson.dumps({'complete': pkg.complete}), mimetype='application/json') - return redirect(list) + return redirect(todolist) @login_required @never_cache -- cgit v1.2.3-54-g00ecf