diff options
-rw-r--r-- | devel/views.py | 87 | ||||
-rw-r--r-- | lib/utils.py | 34 | ||||
-rw-r--r-- | news/views.py | 116 | ||||
-rw-r--r-- | packages/views.py | 296 | ||||
-rw-r--r-- | public/views.py | 52 | ||||
-rw-r--r-- | templates/devel/pkgmaint_guide.txt (renamed from data/pkgmaint_guide.txt) | 0 | ||||
-rw-r--r-- | todolists/views.py | 77 | ||||
-rw-r--r-- | utils.py | 69 | ||||
-rw-r--r-- | wiki/views.py | 82 |
9 files changed, 389 insertions, 424 deletions
diff --git a/devel/views.py b/devel/views.py index d31dd10..206d1fa 100644 --- a/devel/views.py +++ b/devel/views.py @@ -2,7 +2,7 @@ from django.http import HttpResponse, HttpResponseRedirect from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User from django.core import validators -from archweb_dev.utils import render_template +from archweb_dev.utils import render_response from archweb_dev.packages.models import Package from archweb_dev.todolists.models import Todolist, TodolistPkg from archweb_dev.settings import DATA_DIR @@ -11,57 +11,58 @@ from archweb_dev.public.models import UserProfile @login_required def index(request): - try: - thismaint = User.objects.get(username=request.user.username) - except User.DoesNotExist: - # weird, we don't have a maintainer record for this logged-in user - thismaint = None + try: + thismaint = User.objects.get(username=request.user.username) + except User.DoesNotExist: + # weird, we don't have a maintainer record for this logged-in user + thismaint = None - # get a list of incomplete package todo lists - todos = Todolist.objects.get_incomplete() - # get flagged-package stats for all maintainers - stats = Package.objects.get_flag_stats() - if thismaint: - # get list of flagged packages for this maintainer - pkgs = Package.objects.filter(maintainer=thismaint.id).filter(needupdate=True).order_by('repo', 'pkgname') - else: - pkgs = None + # get a list of incomplete package todo lists + todos = Todolist.objects.get_incomplete() + # get flagged-package stats for all maintainers + stats = Package.objects.get_flag_stats() + if thismaint: + # get list of flagged packages for this maintainer + pkgs = Package.objects.filter(maintainer=thismaint.id).filter(needupdate=True).order_by('repo', 'pkgname') + else: + pkgs = None - return render_template('devel/index.html', request, - {'stats':stats, 'pkgs':pkgs, 'todos':todos, 'maint':thismaint}) + return render_response(request, 'devel/index.html', + {'stats':stats, 'pkgs':pkgs, 'todos':todos, 'maint':thismaint}) @login_required #@is_maintainer def change_notify(request): - maint = User.objects.get(username=request.user.username) - notify = request.POST.get('notify', 'no') - try: - maint.get_profile().notify = notify == 'yes' - except UserProfile.DoesNotExist: - UserProfile(user_id=maint.id ,notify=notify == 'yes').save() - maint.get_profile().save() - return HttpResponseRedirect('/devel/') + maint = User.objects.get(username=request.user.username) + notify = request.POST.get('notify', 'no') + try: + maint.get_profile().notify = notify == 'yes' + except UserProfile.DoesNotExist: + UserProfile(user_id=maint.id ,notify=notify == 'yes').save() + maint.get_profile().save() + return HttpResponseRedirect('/devel/') @login_required def change_profile(request): - errors = {} - if request.POST: - passwd1, passwd2 = request.POST['passwd'], request.POST['passwd2'] - email = request.POST['email'] - # validate - if passwd1 != passwd2: - errors['password'] = [' Passwords do not match. '] - validate(errors, 'Email', email, validators.isValidEmail, False, request) - # apply changes - if not errors: - request.user.email = email - if passwd1: - request.user.set_password(passwd1) - request.user.save() - return HttpResponseRedirect('/devel/') - return render_template('devel/profile.html', request, {'errors':errors,'email':request.user.email}) + errors = {} + if request.POST: + passwd1, passwd2 = request.POST['passwd'], request.POST['passwd2'] + email = request.POST['email'] + # validate + if passwd1 != passwd2: + errors['password'] = [' Passwords do not match. '] + validate(errors, 'Email', email, validators.isValidEmail, False, request) + # apply changes + if not errors: + request.user.email = email + if passwd1: + request.user.set_password(passwd1) + request.user.save() + return HttpResponseRedirect('/devel/') + return render_response(request, 'devel/profile.html', {'errors':errors,'email':request.user.email}) @login_required def guide(request): - return HttpResponse(file(DATA_DIR + '/pkgmaint_guide.txt').read(), - mimetype='text/plain') + return render_response(request, 'devel/pkgmaint_guide.txt', {'errors':errors,'email':request.user.email}) + return HttpResponse(file(DATA_DIR + '/pkgmaint_guide.txt').read(), + mimetype='text/plain') diff --git a/lib/utils.py b/lib/utils.py new file mode 100644 index 0000000..59df963 --- /dev/null +++ b/lib/utils.py @@ -0,0 +1,34 @@ +from django.core import validators +from django.conf import settings +from django.core.cache import cache +from django.shortcuts import render_to_response +from django.template import RequestContext + +def validate(errdict, fieldname, fieldval, validator, blankallowed, request): + """ + A helper function that allows easy access to Django's validators without + going through a Manipulator object. Will return a dict of all triggered + errors. + """ + if blankallowed and not fieldval: + return + alldata = ' '.join(request.POST.values()) + ' '.join(request.GET.values()) + try: + validator(fieldval, alldata) + except validators.ValidationError, e: + if not errdict.has_key(fieldname): + errdict[fieldname] = [] + errdict[fieldname].append(e) + +def prune_cache(django_page_url): + if not settings.CACHE: + return + cache_prefix = 'views.decorators.cache.cache_page.' + cache_prefix += settings.CACHE_MIDDLEWARE_KEY_PREFIX + '.' + cache_postfix = '.d41d8cd98f00b204e9800998ecf8427e' + cache.delete('%s%s%s' % (cache_prefix,django_page_url,cache_postfix)) + +def render_response(req, *args, **kwargs): + kwargs['context_instance'] = RequestContext(req) + return render_to_response(*args, **kwargs) + diff --git a/news/views.py b/news/views.py index 5ceb331..4e4b4f0 100644 --- a/news/views.py +++ b/news/views.py @@ -3,80 +3,80 @@ from django.shortcuts import get_object_or_404 from django.contrib.auth.decorators import user_passes_test from django.contrib.auth.models import User from django import forms -from archweb_dev.utils import render_template +from archweb_dev.lib.utils import render_response from archweb_dev.news.models import News from datetime import date def view(request, newsid): - news = get_object_or_404(News, id=newsid) - return render_template('news/view.html', request, {'news':news}) + news = get_object_or_404(News, id=newsid) + return render_response(request, 'news/view.html', {'news':news}) def list(request): - news = News.objects.order_by('-postdate', '-id') - return render_template('news/list.html', request, {'news':news}) + news = News.objects.order_by('-postdate', '-id') + return render_response(request, 'news/list.html', {'news':news}) @user_passes_test(lambda u: u.has_perm('news.add_news')) def add(request): - try: - m = User.objects.get(username=request.user.username) - except User.DoesNotExist: - return render_template('error_page.html', request, - {'errmsg': 'Cannot find a maintainer record for you! No posting allowed.'}) + try: + m = User.objects.get(username=request.user.username) + except User.DoesNotExist: + return render_response(request, 'error_page.html', + {'errmsg': 'Cannot find a maintainer record for you! No posting allowed.'}) - manipulator = News.AddManipulator() - if request.POST: - data = request.POST.copy() - # add in the author ID - data['author'] = m.id - errors = manipulator.get_validation_errors(data) - if not errors: - manipulator.do_html2python(data) - manipulator.save(data) - return HttpResponseRedirect('/news/') - else: - errors = {} - data = {} + manipulator = News.AddManipulator() + if request.POST: + data = request.POST.copy() + # add in the author ID + data['author'] = m.id + errors = manipulator.get_validation_errors(data) + if not errors: + manipulator.do_html2python(data) + manipulator.save(data) + return HttpResponseRedirect('/news/') + else: + errors = {} + data = {} - form = forms.FormWrapper(manipulator, data, errors) - return render_template('news/add.html', request, {'form': form}) + form = forms.FormWrapper(manipulator, data, errors) + return render_response(request, 'news/add.html', {'form': form}) @user_passes_test(lambda u: u.has_perm('news.delete_news')) def delete(request, newsid): - news = get_object_or_404(News, id=newsid) - #if news.author.id != request.user.id: - # return render_template('error_page.html', request, {'errmsg': 'You do not own this news item'}) - if request.POST: - news.delete() - return HttpResponseRedirect('/news/') - return render_template('news/delete.html', request) + news = get_object_or_404(News, id=newsid) + #if news.author.id != request.user.id: + # return render_response(request, 'error_page.html', {'errmsg': 'You do not own this news item'}) + if request.POST: + news.delete() + return HttpResponseRedirect('/news/') + return render_response(request, 'news/delete.html') @user_passes_test(lambda u: u.has_perm('news.change_news')) def edit(request, newsid): - try: - m = User.objects.get(username=request.user.username) - except User.DoesNotExist: - return render_template('error_page.html', request, - {'errmsg': 'Cannot find a maintainer record for you! No posting allowed.'}) - try: - manipulator = News.ChangeManipulator(newsid) - except News.DoesNotExist: - raise Http404 + try: + m = User.objects.get(username=request.user.username) + except User.DoesNotExist: + return render_response(request, 'error_page.html', + {'errmsg': 'Cannot find a maintainer record for you! No posting allowed.'}) + try: + manipulator = News.ChangeManipulator(newsid) + except News.DoesNotExist: + raise Http404 - news = manipulator.original_object -# if news.author != m: -# return render_template('error_page.html', request, {'errmsg': 'You do not own this news item'}) - if request.POST: - data = request.POST.copy() - # add in the author ID - data['author'] = news.author.id - errors = manipulator.get_validation_errors(data) - if not errors: - manipulator.do_html2python(data) - manipulator.save(data) - return HttpResponseRedirect('/news/') - else: - errors = {} - data = news.__dict__ + news = manipulator.original_object +# if news.author != m: +# return render_response(request, 'error_page.html', {'errmsg': 'You do not own this news item'}) + if request.POST: + data = request.POST.copy() + # add in the author ID + data['author'] = news.author.id + errors = manipulator.get_validation_errors(data) + if not errors: + manipulator.do_html2python(data) + manipulator.save(data) + return HttpResponseRedirect('/news/') + else: + errors = {} + data = news.__dict__ - form = forms.FormWrapper(manipulator, data, errors) - return render_template('news/add.html', request, {'form': form, 'news':news}) + form = forms.FormWrapper(manipulator, data, errors) + return render_response(request, 'news/add.html', {'form': form, 'news':news}) diff --git a/packages/views.py b/packages/views.py index 7b1ae1f..aaf4dee 100644 --- a/packages/views.py +++ b/packages/views.py @@ -5,168 +5,168 @@ from django.template import Context, loader from django.core import validators from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User -from archweb_dev.utils import validate, render_template +from archweb_dev.lib.utils import validate, render_response from datetime import datetime from archweb_dev.packages.models import Package, PackageFile, Repo, Category def update(request): - if request.POST.has_key('adopt'): - mode = 'adopt' - message = 'Adoption was successful' - if request.POST.has_key('disown'): - mode = 'disown' - message = 'Disown was successful' - try: - maint = User.objects.get(username=request.user.username) - except User.DoesNotExist: - return render_template('error_page.html', request, {'errmsg':'No maintainer record found! Are you a maintainer?'}) - ids = request.POST.getlist('pkgid') - for id in ids: - pkg = Package.objects.get(id=id) - if mode == 'adopt' and pkg.maintainer_id == 0: - pkg.maintainer = maint - elif mode == 'disown' and pkg.maintainer == maint: - pkg.maintainer_id = 0 - else: - message = "You are not the current maintainer" - pkg.save() - return render_template('status_page.html', request, {'message':message}) + if request.POST.has_key('adopt'): + mode = 'adopt' + message = 'Adoption was successful' + if request.POST.has_key('disown'): + mode = 'disown' + message = 'Disown was successful' + try: + maint = User.objects.get(username=request.user.username) + except User.DoesNotExist: + return render_response(request, 'error_page.html', {'errmsg':'No maintainer record found! Are you a maintainer?'}) + ids = request.POST.getlist('pkgid') + for id in ids: + pkg = Package.objects.get(id=id) + if mode == 'adopt' and pkg.maintainer_id == 0: + pkg.maintainer = maint + elif mode == 'disown' and pkg.maintainer == maint: + pkg.maintainer_id = 0 + else: + message = "You are not the current maintainer" + pkg.save() + return render_response(request, 'status_page.html', {'message':message}) def details(request, pkgid=0, name='', repo=''): - if pkgid == 0: - p = Package.objects.filter(pkgname=name) - if repo: p = p.filter(repo__name__exact=repo) - # if more then one result, send to the search view - if len(p) > 1: return search(request, name) - if len(p) < 1: return render_template('error_page.html', request, - {'errmsg': 'No matching packages.'}) - pkgid = p[0].id - - pkg = get_object_or_404(Package, id=pkgid) - return render_template('packages/details.html', request, {'pkg':pkg}) + if pkgid == 0: + p = Package.objects.filter(pkgname=name) + if repo: p = p.filter(repo__name__exact=repo) + # if more then one result, send to the search view + if len(p) > 1: return search(request, name) + if len(p) < 1: return render_response(request, 'error_page.html', + {'errmsg': 'No matching packages.'}) + pkgid = p[0].id + + pkg = get_object_or_404(Package, id=pkgid) + return render_response(request, 'packages/details.html', {'pkg':pkg}) def search(request, query=''): - if request.GET.has_key('q'): - # take the q GET var over the one passed on the URL - query = request.GET['q'].strip() - - # fetch the form vars - repo = request.GET.get('repo', 'all') - category = request.GET.get('category', 'all') - lastupdate = request.GET.get('lastupdate', '') - limit = int(request.GET.get('limit', '50')) - skip = int(request.GET.get('skip', '0')) - sort = request.GET.get('sort', '') - maint = request.GET.get('maint', 'all') - - # build the form lists - repos = Repo.objects.order_by('name') - cats = Category.objects.order_by('category') - # copy GET data over and add the lists - c = request.GET.copy() - c['repos'], c['categories'] = repos, cats - c['limit'], c['skip'] = limit, skip - c['lastupdate'] = lastupdate - c['sort'] = sort - # 'q' gets renamed to 'query', so it's not in GET - c['query'] = query - - # validate - errors = {} - validate(errors, 'Last Update', lastupdate, validators.isValidANSIDate, True, request) - validate(errors, 'Page Limit', str(limit), validators.isOnlyDigits, True, request) - validate(errors, 'Page Skip', str(skip), validators.isOnlyDigits, True, request) - if errors: - c['errors'] = errors - return render_template('packages/search.html', request, c) - - if query: - res1 = Package.objects.filter(pkgname__icontains=query) - res2 = Package.objects.filter(pkgdesc__icontains=query) - results = res1 | res2 - else: - results = Package.objects.all() - if repo != 'all': results = results.filter(repo__name__exact=repo) - if category != 'all': results = results.filter(category__category__exact=category) - if maint != 'all': results = results.filter(maintainer=maint) - if lastupdate: results = results.filter(last_update__gte=datetime(int(lastupdate[0:4]),int(lastupdate[5:7]),int(lastupdate[8:10]))) - # select_related() shouldn't be needed -- we're working around a Django bug - #results = results.select_related().order_by('repos.name', 'category', 'pkgname') - - # sort results - if sort == '': - results = results.order_by('repo', 'category', 'pkgname') - else: - # duplicate sort fields shouldn't hurt anything - results = results.order_by(sort, 'repo', 'category', 'pkgname') - - qs = request.GET.copy() - # build pagination urls - if results.count() > (skip + limit): - qs['skip'] = skip + limit - c['nextpage'] = '?' + qs.urlencode() - if skip > 0: - qs['skip'] = max(0, skip - limit) - c['prevpage'] = '?' + qs.urlencode() - # pass the querystring to the template so we can build sort queries - c['querystring'] = request.GET - - # if only there's only one result, pass right to the package details view - if results.count() == 1: return details(request, results[0].id) - # limit result set - if limit > 0: results = results[skip:(skip+limit)] - - c['results'] = results - return render_template('packages/search.html', request, c) + if request.GET.has_key('q'): + # take the q GET var over the one passed on the URL + query = request.GET['q'].strip() + + # fetch the form vars + repo = request.GET.get('repo', 'all') + category = request.GET.get('category', 'all') + lastupdate = request.GET.get('lastupdate', '') + limit = int(request.GET.get('limit', '50')) + skip = int(request.GET.get('skip', '0')) + sort = request.GET.get('sort', '') + maint = request.GET.get('maint', 'all') + + # build the form lists + repos = Repo.objects.order_by('name') + cats = Category.objects.order_by('category') + # copy GET data over and add the lists + c = request.GET.copy() + c['repos'], c['categories'] = repos, cats + c['limit'], c['skip'] = limit, skip + c['lastupdate'] = lastupdate + c['sort'] = sort + # 'q' gets renamed to 'query', so it's not in GET + c['query'] = query + + # validate + errors = {} + validate(errors, 'Last Update', lastupdate, validators.isValidANSIDate, True, request) + validate(errors, 'Page Limit', str(limit), validators.isOnlyDigits, True, request) + validate(errors, 'Page Skip', str(skip), validators.isOnlyDigits, True, request) + if errors: + c['errors'] = errors + return render_response(request, 'packages/search.html', c) + + if query: + res1 = Package.objects.filter(pkgname__icontains=query) + res2 = Package.objects.filter(pkgdesc__icontains=query) + results = res1 | res2 + else: + results = Package.objects.all() + if repo != 'all': results = results.filter(repo__name__exact=repo) + if category != 'all': results = results.filter(category__category__exact=category) + if maint != 'all': results = results.filter(maintainer=maint) + if lastupdate: results = results.filter(last_update__gte=datetime(int(lastupdate[0:4]),int(lastupdate[5:7]),int(lastupdate[8:10]))) + # select_related() shouldn't be needed -- we're working around a Django bug + #results = results.select_related().order_by('repos.name', 'category', 'pkgname') + + # sort results + if sort == '': + results = results.order_by('repo', 'category', 'pkgname') + else: + # duplicate sort fields shouldn't hurt anything + results = results.order_by(sort, 'repo', 'category', 'pkgname') + + qs = request.GET.copy() + # build pagination urls + if results.count() > (skip + limit): + qs['skip'] = skip + limit + c['nextpage'] = '?' + qs.urlencode() + if skip > 0: + qs['skip'] = max(0, skip - limit) + c['prevpage'] = '?' + qs.urlencode() + # pass the querystring to the template so we can build sort queries + c['querystring'] = request.GET + + # if only there's only one result, pass right to the package details view + if results.count() == 1: return details(request, results[0].id) + # limit result set + if limit > 0: results = results[skip:(skip+limit)] + + c['results'] = results + return render_response(request, 'packages/search.html', c) def files(request, pkgid): - pkg = get_object_or_404(Package, id=pkgid) - files = PackageFile.objects.filter(pkg=pkgid) - return render_template('packages/files.html', request, {'pkg':pkg,'files':files}) + pkg = get_object_or_404(Package, id=pkgid) + files = PackageFile.objects.filter(pkg=pkgid) + return render_response(request, 'packages/files.html', {'pkg':pkg,'files':files}) def flaghelp(request): - return render_template('packages/flaghelp.html', request) + return render_response(request, 'packages/flaghelp.html') def flag(request, pkgid): - pkg = get_object_or_404(Package, id=pkgid) - context = {'pkg': pkg} - if request.POST.has_key('confirmemail'): - email = request.POST['confirmemail'] - if request.POST.has_key('usermessage'): - message = request.POST['usermessage'] - else: - message = None - # validate - errors = {} - validate(errors, 'Email Address', email, validators.isValidEmail, False, request) - if errors: - context['errors'] = errors - return render_template('packages/flag.html', request, context) - - context['confirmemail'] = email - pkg.needupdate = 1 - pkg.save() - if pkg.maintainer_id > 0: - # send notification email to the maintainer - t = loader.get_template('packages/outofdate.txt') - c = Context({ - 'email': request.POST['confirmemail'], - 'message': message, - 'pkgname': pkg.pkgname, - 'weburl': 'http://www.archlinux.org/packages/' + str(pkg.id) + '/' - }) - send_mail('arch: Package [%s] marked out-of-date' % pkg.pkgname, - t.render(c), - 'Arch Website Notification <nobody@archlinux.org>', - [pkg.maintainer.email], - fail_silently=True) - return render_template('packages/flag.html', request, context) + pkg = get_object_or_404(Package, id=pkgid) + context = {'pkg': pkg} + if request.POST.has_key('confirmemail'): + email = request.POST['confirmemail'] + if request.POST.has_key('usermessage'): + message = request.POST['usermessage'] + else: + message = None + # validate + errors = {} + validate(errors, 'Email Address', email, validators.isValidEmail, False, request) + if errors: + context['errors'] = errors + return render_response(request, 'packages/flag.html', context) + + context['confirmemail'] = email + pkg.needupdate = 1 + pkg.save() + if pkg.maintainer_id > 0: + # send notification email to the maintainer + t = loader.get_template('packages/outofdate.txt') + c = Context({ + 'email': request.POST['confirmemail'], + 'message': message, + 'pkgname': pkg.pkgname, + 'weburl': 'http://www.archlinux.org/packages/' + str(pkg.id) + '/' + }) + send_mail('arch: Package [%s] marked out-of-date' % pkg.pkgname, + t.render(c), + 'Arch Website Notification <nobody@archlinux.org>', + [pkg.maintainer.email], + fail_silently=True) + return render_response(request, 'packages/flag.html', context) @login_required def unflag(request, pkgid): - pkg = get_object_or_404(Package, id=pkgid) - if pkg.maintainer.username != request.user.username: - return render_template('error_page.html', request, {'errmsg': 'You do not own this package.'}) - pkg.needupdate = 0 - pkg.save() - return HttpResponseRedirect('/packages/%d/' % (pkg.id)) + pkg = get_object_or_404(Package, id=pkgid) + if pkg.maintainer.username != request.user.username: + return render_response(request, 'error_page.html', {'errmsg': 'You do not own this package.'}) + pkg.needupdate = 0 + pkg.save() + return HttpResponseRedirect('/packages/%d/' % (pkg.id)) diff --git a/public/views.py b/public/views.py index 6c69831..2cda74b 100644 --- a/public/views.py +++ b/public/views.py @@ -1,5 +1,5 @@ from django.http import HttpResponse -from archweb_dev.utils import render_template +from archweb_dev.lib.utils import render_response from django.contrib.auth.models import User from archweb_dev.packages.models import Package, Repo from archweb_dev.news.models import News @@ -7,53 +7,53 @@ from archweb_dev.settings import DATA_DIR from archweb_dev.public.models import Donator, Mirror def index(request): - # get the most recent 10 news items - news = News.objects.order_by('-postdate', '-id')[:10] - pkgs = Package.objects.exclude(repo__name__exact='Testing').order_by('-last_update')[:15] - repos = Repo.objects.order_by('name') - return render_template('public/index.html', request, {'news_updates':news,'pkg_updates':pkgs,'repos':repos}) + # get the most recent 10 news items + news = News.objects.order_by('-postdate', '-id')[:10] + pkgs = Package.objects.exclude(repo__name__exact='Testing').order_by('-last_update')[:15] + repos = Repo.objects.order_by('name') + return render_response(request, 'public/index.html', {'news_updates':news,'pkg_updates':pkgs,'repos':repos}) def about(request): - return render_template('public/about.html', request) + return render_response(request, 'public/about.html') def art(request): - return render_template('public/art.html', request) + return render_response(request, 'public/art.html') def cvs(request): - return render_template('public/cvs.html', request) + return render_response(request, 'public/cvs.html') def developers(request): - devs = User.objects.order_by('username') - return render_template('public/developers.html', request, {'devs':devs}) + devs = User.objects.order_by('username') + return render_response(request, 'public/developers.html', {'devs':devs}) def donate(request): - donor_count = Donator.objects.count() - splitval = donor_count / 4 - slice1 = Donator.objects.all()[:splitval] - slice2 = Donator.objects.all()[(splitval):(splitval*2)] - slice3 = Donator.objects.all()[(splitval*2):(donor_count-splitval)] - slice4 = Donator.objects.all()[(donor_count-splitval):donor_count] - return render_template('public/donate.html', request, - {'slice1':slice1,'slice2':slice2,'slice3':slice3,'slice4':slice4}) + donor_count = Donator.objects.count() + splitval = donor_count / 4 + slice1 = Donator.objects.all()[:splitval] + slice2 = Donator.objects.all()[(splitval):(splitval*2)] + slice3 = Donator.objects.all()[(splitval*2):(donor_count-splitval)] + slice4 = Donator.objects.all()[(donor_count-splitval):donor_count] + return render_response(request, 'public/donate.html', + {'slice1':slice1,'slice2':slice2,'slice3':slice3,'slice4':slice4}) def download(request): - mirrors = Mirror.objects.order_by('country', 'domain') - return render_template('public/download.html', request, {'mirrors':mirrors}) + mirrors = Mirror.objects.order_by('country', 'domain') + return render_response(request, 'public/download.html', {'mirrors':mirrors}) def irc(request): - return render_template('public/irc.html', request) + return render_response(request, 'public/irc.html') def moreforums(request): - return render_template('public/moreforums.html', request) + return render_response(request, 'public/moreforums.html') def press(request): - return render_template('public/press.html', request) + return render_response(request, 'public/press.html') def projects(request): - return render_template('public/projects.html', request) + return render_response(request, 'public/projects.html') def robots(request): return HttpResponse("User-agent: *\nDisallow: /\n", mimetype="text/plain") def denied(request): - return render_template('public/denied.html', request) + return render_response(request, 'public/denied.html') diff --git a/data/pkgmaint_guide.txt b/templates/devel/pkgmaint_guide.txt index 85106ea..85106ea 100644 --- a/data/pkgmaint_guide.txt +++ b/templates/devel/pkgmaint_guide.txt diff --git a/todolists/views.py b/todolists/views.py index 757a35a..225da15 100644 --- a/todolists/views.py +++ b/todolists/views.py @@ -2,7 +2,7 @@ from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import get_object_or_404 from django.contrib.auth.decorators import login_required, user_passes_test from django.contrib.auth.models import User -from archweb_dev.utils import render_template +from archweb_dev.lib.utils import render_response from archweb_dev.todolists.models import Todolist, TodolistPkg from archweb_dev.packages.models import Package @@ -13,52 +13,51 @@ IntegrityError = django.db.backend.Database.IntegrityError @login_required #@is_maintainer def flag(request, listid, pkgid): - list = get_object_or_404(Todolist, id=listid) - pkg = get_object_or_404(TodolistPkg, id=pkgid) - pkg.complete = not pkg.complete - pkg.save() - return HttpResponseRedirect('/todo/%s/' % (listid)) + list = get_object_or_404(Todolist, id=listid) + pkg = get_object_or_404(TodolistPkg, id=pkgid) + pkg.complete = not pkg.complete + pkg.save() + return HttpResponseRedirect('/todo/%s/' % (listid)) @login_required def view(request, listid): - list = get_object_or_404(Todolist, id=listid) - pkgs = TodolistPkg.objects.filter(list=list.id).order_by('pkg') - return render_template('todolists/view.html', request, {'list':list,'pkgs':pkgs}) + list = get_object_or_404(Todolist, id=listid) + pkgs = TodolistPkg.objects.filter(list=list.id).order_by('pkg') + return render_response(request, 'todolists/view.html', {'list':list,'pkgs':pkgs}) @login_required def list(request): - lists = Todolist.objects.order_by('-date_added') - for l in lists: - l.complete = TodolistPkg.objects.filter(list=l.id,complete=False).count() == 0 - return render_template('todolists/list.html', request, {'lists':lists}) + lists = Todolist.objects.order_by('-date_added') + for l in lists: + l.complete = TodolistPkg.objects.filter(list=l.id,complete=False).count() == 0 + return render_response(request, 'todolists/list.html', {'lists':lists}) @login_required #@is_maintainer @user_passes_test(lambda u: u.has_perm('todolists.add_todolist')) def add(request): - if request.POST: - try: - m = User.objects.get(username=request.user.username) - except User.DoesNotExist: - return render_template('error_page.html', request, - {'errmsg': 'Cannot find a maintainer record for you!'}) - # create the list - todo = Todolist( - creator = m, - name = request.POST.get('name'), - description = request.POST.get('description')) - todo.save() - # now link in packages - for p in request.POST.get('packages').split("\n"): - for pkg in Package.objects.filter(pkgname=p.strip()): - todopkg = TodolistPkg( - list = todo, - pkg = pkg) - try: - todopkg.save() - except IntegrityError, (num, desc): - if num == 1062: # duplicate entry aka dupe package on list - pass - return HttpResponseRedirect('/todo/') - - return render_template('todolists/add.html', request) + if request.POST: + try: + m = User.objects.get(username=request.user.username) + except User.DoesNotExist: + return render_response(request, 'error_page.html', + {'errmsg': 'Cannot find a maintainer record for you!'}) + # create the list + todo = Todolist( + creator = m, + name = request.POST.get('name'), + description = request.POST.get('description')) + todo.save() + # now link in packages + for p in request.POST.get('packages').split("\n"): + for pkg in Package.objects.filter(pkgname=p.strip()): + todopkg = TodolistPkg( + list = todo, + pkg = pkg) + try: + todopkg.save() + except IntegrityError, (num, desc): + if num == 1062: # duplicate entry aka dupe package on list + pass + return HttpResponseRedirect('/todo/') + return render_response(request, 'todolists/add.html') diff --git a/utils.py b/utils.py deleted file mode 100644 index 1769471..0000000 --- a/utils.py +++ /dev/null @@ -1,69 +0,0 @@ -from django.core import validators -from django.template import RequestContext -from django.shortcuts import render_to_response -from django.http import HttpResponseRedirect -from string import * -import sgmllib - -#from archweb_dev.packages.models import Maintainer -#from archweb_dev.settings import BADPRIVS_URL -#def is_maintainer(view_func, badprivs_url=BADPRIVS_URL): -# """ -# Decorator for views that checks that the logged-in user has a corresponding -# record in the Maintainers table. If not, the user is forwarded to a -# "bad-privileges" page. -# """ -# def _dec(view_func): -# def _checkuser(request, *args, **kwargs): -# try: -# m = Maintainer.objects.get(username=request.user.username) -# except Maintainer.DoesNotExist: -# return HttpResponseRedirect(badprivs_url) -# return view_func(request, *args, **kwargs) -# -# return _checkuser -# return _dec(view_func) - -def render_template(template, request, context=None): - """ - A shortcut to render_to_response with a RequestContext. Also includes - request.path in the context, so both 'path' and 'user' are accessible to - the template. - """ - if context: - context['path'] = request.path - return render_to_response(template, context_instance=RequestContext(request, context)) - else: - return render_to_response(template, context_instance=RequestContext(request)) - -def validate(errdict, fieldname, fieldval, validator, blankallowed, request): - """ - A helper function that allows easy access to Django's validators without - going through a Manipulator object. Will return a dict of all triggered - errors. - """ - if blankallowed and not fieldval: - return - alldata = ' '.join(request.POST.values()) + ' '.join(request.GET.values()) - try: - validator(fieldval, alldata) - except validators.ValidationError, e: - if not errdict.has_key(fieldname): errdict[fieldname] = [] - errdict[fieldname].append(e) - - -# XXX: unused right now, probably not needed -class Stripper(sgmllib.SGMLParser): - """Helper class to strip HTML tags""" - def __init__(self): - sgmllib.SGMLParser.__init__(self) - - def strip(self, some_html): - """Strips all HTML tags and leading/trailing whitespace""" - self.theString = "" - self.feed(some_html) - self.close() - return self.theString - - def handle_data(self, data): - self.theString += data diff --git a/wiki/views.py b/wiki/views.py index 4e4444a..9f7bd78 100644 --- a/wiki/views.py +++ b/wiki/views.py @@ -3,59 +3,59 @@ # from django.http import HttpResponse, HttpResponseRedirect from django.contrib.auth.decorators import login_required -from archweb_dev.utils import render_template +from archweb_dev.lib.utils import render_response from archweb_dev.wiki.models import Wikipage @login_required def index(request): - """Return a list of all wiki pages""" - pages = Wikipage.objects.all().order_by('title') - return render_template('wiki/home.html', request, {'pages':pages}) + """Return a list of all wiki pages""" + pages = Wikipage.objects.all().order_by('title') + return render_response(request, 'wiki/home.html', {'pages':pages}) def main(request): - """Return the Index wiki page""" - return HttpResponseRedirect("/wiki/WikiIndex/") + """Return the Index wiki page""" + return HttpResponseRedirect("/wiki/WikiIndex/") @login_required def page(request, title): - """Display page, or redirect to root if page doesn't exist yet""" - try: - page = Wikipage.objects.get(title__exact=title) - return render_template('wiki/page.html', request, {'page':page}) - except Wikipage.DoesNotExist: - return HttpResponseRedirect("/wiki/edit/%s/" % title) + """Display page, or redirect to root if page doesn't exist yet""" + try: + page = Wikipage.objects.get(title__exact=title) + return render_response(request, 'wiki/page.html', {'page':page}) + except Wikipage.DoesNotExist: + return HttpResponseRedirect("/wiki/edit/%s/" % title) @login_required def edit(request, title): - """Process submitted page edits (POST) or display editing form (GET)""" - if request.POST: - try: - page = Wikipage.objects.get(title__exact=title) - except Wikipage.DoesNotExist: - # Must be a new one; let's create it - page = Wikipage(title=title) - page.content = request.POST['content'] - page.title = request.POST['title'] - page.last_author = request.user - page.save() - return HttpResponseRedirect("/wiki/" + page.title + "/") - else: - try: - page = Wikipage.objects.get(title__exact=title) - except Wikipage.DoesNotExist: - # create a dummy page object -- note that it is not saved! - page = Wikipage(title=title) - page.body = "<!-- Enter content here -->" - return render_template('wiki/edit.html', request, {'page':page}) + """Process submitted page edits (POST) or display editing form (GET)""" + if request.POST: + try: + page = Wikipage.objects.get(title__exact=title) + except Wikipage.DoesNotExist: + # Must be a new one; let's create it + page = Wikipage(title=title) + page.content = request.POST['content'] + page.title = request.POST['title'] + page.last_author = request.user + page.save() + return HttpResponseRedirect("/wiki/" + page.title + "/") + else: + try: + page = Wikipage.objects.get(title__exact=title) + except Wikipage.DoesNotExist: + # create a dummy page object -- note that it is not saved! + page = Wikipage(title=title) + page.body = "<!-- Enter content here -->" + return render_response(request, 'wiki/edit.html', {'page':page}) @login_required def delete(request): - """Delete a page""" - if request.POST: - title = request.POST['title'] - try: - page = Wikipage.objects.get(title__exact=title) - except Wikipage.DoesNotExist: - return HttpResponseRedirect("/wiki/") - page.delete() - return HttpResponseRedirect("/wiki/") + """Delete a page""" + if request.POST: + title = request.POST['title'] + try: + page = Wikipage.objects.get(title__exact=title) + except Wikipage.DoesNotExist: + return HttpResponseRedirect("/wiki/") + page.delete() + return HttpResponseRedirect("/wiki/") |