Mercurial > agora-palash
annotate apps/bundle/views.py @ 190:a4f88ac85837
Changes: Now guest users cannot see revision history and they also cannot see snippets posted by registered users. To see snippets posted by registered users, one has to login.
author | ahsanalishahid <ahsan.ali.shahid@gmail.com> |
---|---|
date | Thu, 20 Jun 2013 17:17:16 +0500 |
parents | cdcbfaa65cfe |
children | 2a234e11185c |
rev | line source |
---|---|
167
d31b236ed5cf
Okay, I think I caught all the with statements now...
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
151
diff
changeset
|
1 from __future__ import with_statement |
d31b236ed5cf
Okay, I think I caught all the with statements now...
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
151
diff
changeset
|
2 |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
3 import os |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
4 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
5 from django.shortcuts import get_object_or_404, render, redirect |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
6 from django.contrib.auth.decorators import login_required |
63 | 7 from django.http import HttpResponse |
4
069cabdaf8b2
Define stub template and admin site
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
2
diff
changeset
|
8 |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
9 from apps.bundle.models import Bundle, BundleFile |
177
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
10 from apps.bundle.forms import BundleForm, BundleEditForm |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
11 from apps.bundle.tasks import handle_bundle_upload |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
12 from apps.pygments_style.models import PygmentsStyle |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
13 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
14 |
177
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
15 def detail(request, user, bundle, file=None, version=0): |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
16 bundle = get_object_or_404(Bundle, uploader__username=user, name=bundle) |
177
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
17 # If the version is not set, use the latest version |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
18 version = int(version) or bundle.latest_version |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
19 files = bundle.bundlefile_set.filter(version=version) |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
20 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
21 if request.user.is_authenticated(): |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
22 pygments_style = request.user.get_profile().pygments_style |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
23 else: |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
24 pygments_style = PygmentsStyle.objects.get(pk=1) |
6
c83460992637
Elaborate on stub bundle template
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents:
4
diff
changeset
|
25 |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
26 context = { |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
27 'default_style': pygments_style, |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
28 'pygments_styles': PygmentsStyle.objects.all(), |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
29 'bundle': bundle, |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
30 'files': files, |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
31 'file': file, |
177
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
32 'previous_versions': xrange(1, bundle.latest_version + 1), |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
33 'this_version': version, |
190
a4f88ac85837
Changes: Now guest users cannot see revision history and they also cannot see snippets posted by registered users. To see snippets posted by registered users, one has to login.
ahsanalishahid <ahsan.ali.shahid@gmail.com>
parents:
183
diff
changeset
|
34 'show': True, |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
35 } |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
36 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
37 return render(request, 'bundle/bundle.djhtml', context) |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
38 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
39 |
177
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
40 def file_detail(request, user, bundle, version, path): |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
41 print version |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
42 bundle_file = get_object_or_404(BundleFile, bundle__uploader__username=user, |
177
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
43 bundle__name=bundle, full_path=path, is_dir=False, version=version) |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
44 |
177
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
45 return detail(request, user, bundle, file=bundle_file, version=version) |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
46 |
63 | 47 |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
48 @login_required |
63 | 49 def index(request): |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
50 if request.method == 'POST': |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
51 post_data = request.POST.copy() |
183
cdcbfaa65cfe
Catch integrity error when creating bundles
dellsystem <ilostwaldo@gmail.com>
parents:
177
diff
changeset
|
52 post_data['uploader'] = request.user.id |
cdcbfaa65cfe
Catch integrity error when creating bundles
dellsystem <ilostwaldo@gmail.com>
parents:
177
diff
changeset
|
53 form = BundleForm(post_data, request.FILES) |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
54 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
55 if form.is_valid(): |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
56 file = request.FILES.get('file') |
183
cdcbfaa65cfe
Catch integrity error when creating bundles
dellsystem <ilostwaldo@gmail.com>
parents:
177
diff
changeset
|
57 bundle = form.save() |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
58 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
59 bundle.file_name = file.name |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
60 bundle.save() |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
61 bundle_path = bundle.get_temp_path() |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
62 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
63 with open(bundle_path, 'wb+') as destination: |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
64 for chunk in request.FILES.get('file', []): |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
65 destination.write(chunk) |
63 | 66 |
151
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
67 handle_bundle_upload.delay(bundle.id) |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
68 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
69 return redirect(bundle) |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
70 else: |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
71 form = BundleForm() |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
72 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
73 context = { |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
74 'form': form, |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
75 'bundles': Bundle.objects.order_by('-pub_date')[:5] |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
76 } |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
77 return render(request, 'bundle/index.djhtml', context) |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
78 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
79 |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
80 def explore(request): |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
81 context = { |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
82 'recent_bundles': Bundle.objects.all()[:20] |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
83 } |
c7be7def8b57
Bundles! (basic functionality)
dellsystem <ilostwaldo@gmail.com>
parents:
63
diff
changeset
|
84 |
177
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
85 return render(request, "bundle/explore.djhtml", context) |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
86 |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
87 |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
88 @login_required |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
89 def edit(request, user, bundle): |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
90 bundle = get_object_or_404(Bundle, name=bundle, |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
91 uploader__username=request.user.username) |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
92 |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
93 # If the username specified in the URL is someone else's, show that page |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
94 if user != request.user.username: |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
95 # The bundle must exist, otherwise it would 404 |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
96 return redirect(bundle) |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
97 |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
98 if request.method == 'POST': |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
99 form = BundleEditForm(request.POST, instance=bundle) |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
100 |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
101 if form.is_valid(): |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
102 form.save() |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
103 |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
104 file = request.FILES.get('file') |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
105 if file is not None: |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
106 bundle.done_uploading = False |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
107 bundle.file_name = file.name |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
108 bundle.latest_version += 1 |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
109 bundle.save() |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
110 bundle_path = bundle.get_temp_path() |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
111 |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
112 with open(bundle_path, 'wb+') as destination: |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
113 for chunk in request.FILES.get('file', []): |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
114 destination.write(chunk) |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
115 |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
116 handle_bundle_upload.delay(bundle.id) |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
117 return redirect(bundle) |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
118 else: |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
119 form = BundleEditForm(instance=bundle) |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
120 |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
121 context = { |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
122 'bundle': bundle, |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
123 'form': form, |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
124 } |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
125 |
86129d185ddb
Add versioning to bundles
dellsystem <ilostwaldo@gmail.com>
parents:
170
diff
changeset
|
126 return render(request, "bundle/edit.djhtml", context) |