aboutsummaryrefslogtreecommitdiff
path: root/djangopypi/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'djangopypi/views.py')
-rw-r--r--djangopypi/views.py85
1 files changed, 85 insertions, 0 deletions
diff --git a/djangopypi/views.py b/djangopypi/views.py
new file mode 100644
index 0000000..90a9846
--- /dev/null
+++ b/djangopypi/views.py
@@ -0,0 +1,85 @@
1# Create your views here.
2from django.http import HttpResponse, HttpResponseBadRequest, QueryDict
3from django.shortcuts import render_to_response
4from djangopypi.models import Project
5from djangopypi.forms import ProjectRegisterForm
6from django.template import RequestContext
7from yadayada.utils import template_path_builder
8from django.utils.datastructures import MultiValueDict
9from django.core.files.uploadedfile import SimpleUploadedFile
10
11T = template_path_builder("djangopypi")
12
13
14def parse_weird_post_data(data):
15 sep = data.splitlines()[1]
16 items = data.split(sep)
17 post_data = {}
18 files = {}
19 for part in items:
20 if not part.strip():
21 continue
22 item = part.splitlines()
23 if len(item) < 2: continue
24 header = item[1].replace("Content-Disposition: form-data; ", "")
25 kvpairs = header.split(";")
26 headers = {}
27 for kvpair in kvpairs:
28 if not kvpair: continue
29 key, value = kvpair.split("=")
30 headers[key] = value.strip('"')
31 if not "name" in headers: continue
32 content = part[len("\n".join(item[0:2]))+2:len(part)-1]
33 if "filename" in headers:
34 file = SimpleUploadedFile(headers["filename"], content,
35 content_type="application/gzip")
36 files[headers["name"]] = file
37 elif headers["name"] in post_data:
38 post_data[headers["name"]].append(content)
39 else:
40 post_data[headers["name"]] = [content]
41
42 return MultiValueDict(post_data), files
43
44
45def simple(request, template_name=T("simple")):
46 if request.method == "POST":
47 post_data, files = parse_weird_post_data(request.raw_post_data)
48 action = post_data.get(":action")
49 classifiers = post_data.getlist("classifiers")
50 register_form = ProjectRegisterForm(post_data.copy())
51 if register_form.is_valid():
52 return HttpResponse(register_form.save(classifiers,
53 file=files.get("content")))
54 return HttpResponse("Successfully registered.")
55 return HttpResponse("ERRORS: %s" % register_form.errors)
56
57 dists = Project.objects.all()
58 context = RequestContext(request, {
59 "dists": dists,
60 })
61
62 return render_to_response(template_name, context_instance=context)
63
64def show_links(request, dist_name, template_name=T("show_links")):
65 releases = Project.objects.get(name=dist_name) \
66 .releases.all().order_by('-version')
67
68 context = RequestContext(request, {
69 "dist_name": dist_name,
70 "releases": releases,
71 })
72
73 return render_to_response(template_name, context_instance=context)
74
75def show_version(request, dist_name, version, template_name=T("show_version")):
76 release = Project.objects.get(name=dist_name).releases \
77 .get(version=version)
78
79 context = RequestContext(request, {
80 "dist_name": dist_name,
81 "version": version,
82 "release": release,
83 })
84
85 return render_to_response(template_name, context_instance=context)