Files
@ d4d7acabf44b
Branch filter:
Location: symposion_app/pycon/sponsorship/views.py - annotation
d4d7acabf44b
3.8 KiB
text/x-python
clickable header
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 6d9c1c2e5f49 | import itertools
from functools import wraps
from django.http import HttpResponse
from django.shortcuts import render_to_response, redirect, get_object_or_404
from django.template import RequestContext
from django.contrib import messages
from django.contrib.admin.views.decorators import staff_member_required
from django.contrib.auth.decorators import login_required
from pycon.sponsorship.forms import SponsorApplicationForm, SponsorDetailsForm, SponsorBenefitsFormSet
from pycon.sponsorship.models import Sponsor, SponsorBenefit
@login_required
def sponsor_apply(request):
if request.method == "POST":
form = SponsorApplicationForm(request.POST, user=request.user)
if form.is_valid():
form.save()
return redirect("dashboard")
else:
form = SponsorApplicationForm(user=request.user)
return render_to_response("sponsorship/apply.html", {
"form": form,
}, context_instance=RequestContext(request))
@login_required
def sponsor_detail(request, pk):
sponsor = get_object_or_404(Sponsor, pk=pk)
if not sponsor.active or sponsor.applicant != request.user:
return redirect("sponsor_list")
formset_kwargs = {
"instance": sponsor,
"queryset": SponsorBenefit.objects.filter(active=True)
}
if request.method == "POST":
form = SponsorDetailsForm(request.POST, instance=sponsor)
formset = SponsorBenefitsFormSet(request.POST, request.FILES, **formset_kwargs)
if form.is_valid() and formset.is_valid():
form.save()
formset.save()
messages.success(request, "Your sponsorship application has been submitted!")
return redirect(request.path)
else:
form = SponsorDetailsForm(instance=sponsor)
formset = SponsorBenefitsFormSet(**formset_kwargs)
return render_to_response("sponsorship/detail.html", {
"sponsor": sponsor,
"form": form,
"formset": formset,
}, context_instance=RequestContext(request))
@staff_member_required
def sponsor_export_data(request):
sponsors = []
data = ""
for sponsor in Sponsor.objects.order_by("added"):
d = {
"name": sponsor.name,
"url": sponsor.external_url,
"level": (sponsor.level.order, sponsor.level.name),
"description": "",
}
for sponsor_benefit in sponsor.sponsor_benefits.all():
if sponsor_benefit.benefit_id == 2:
d["description"] = sponsor_benefit.text
sponsors.append(d)
def izip_longest(*args):
fv = None
def sentinel(counter=([fv]*(len(args)-1)).pop):
yield counter()
iters = [itertools.chain(it, sentinel(), itertools.repeat(fv)) for it in args]
try:
for tup in itertools.izip(*iters):
yield tup
except IndexError:
pass
def pairwise(iterable):
a, b = itertools.tee(iterable)
b.next()
return izip_longest(a, b)
def level_key(s):
return s["level"]
for level, level_sponsors in itertools.groupby(sorted(sponsors, key=level_key), level_key):
data += "%s\n" % ("-" * (len(level[1])+4))
data += "| %s |\n" % level[1]
data += "%s\n\n" % ("-" * (len(level[1])+4))
for sponsor, next in pairwise(level_sponsors):
description = sponsor["description"].strip()
description = description if description else "-- NO DESCRIPTION FOR THIS SPONSOR --"
data += "%s\n\n%s" % (sponsor["name"], description)
if next is not None:
data += "\n\n%s\n\n" % ("-"*80)
else:
data += "\n\n"
return HttpResponse(data, content_type="text/plain;charset=utf-8")
|