summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoreliott <eliott@cactuswax.net>2007-12-29 15:34:02 -0800
committereliott <eliott@cactuswax.net>2007-12-29 15:34:02 -0800
commit15ceff77fef19819cba43e866938311aeffd0732 (patch)
tree16903554adbb32300aad9a5b3d647679710e9302
parentd1cc0f54a490e5eacf07107e461672979266f461 (diff)
downloadarchweb-15ceff77fef19819cba43e866938311aeffd0732.tar.gz
archweb-15ceff77fef19819cba43e866938311aeffd0732.zip
Modified render_template and renamed it to render_response (consistent with
archweb_pub conventions). Moved pkgmaint_guide to a template.
-rw-r--r--devel/views.py87
-rw-r--r--lib/utils.py34
-rw-r--r--news/views.py116
-rw-r--r--packages/views.py296
-rw-r--r--public/views.py52
-rw-r--r--templates/devel/pkgmaint_guide.txt (renamed from data/pkgmaint_guide.txt)0
-rw-r--r--todolists/views.py77
-rw-r--r--utils.py69
-rw-r--r--wiki/views.py82
9 files changed, 389 insertions, 424 deletions
diff --git a/devel/views.py b/devel/views.py
index d31dd10c..206d1fab 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 00000000..59df963b
--- /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 5ceb3315..4e4b4f0f 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 7b1ae1fa..aaf4deed 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 6c698312..2cda74be 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 85106eab..85106eab 100644
--- a/data/pkgmaint_guide.txt
+++ b/templates/devel/pkgmaint_guide.txt
diff --git a/todolists/views.py b/todolists/views.py
index 757a35af..225da15b 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 1769471c..00000000
--- 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 4e4444a4..9f7bd78d 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/")