Mercurial > agora
comparison apps/bundle/views.py @ 209:4033ebe1867f
Add ability to download files
This makes use of a new model (BundleVersion) to keep track of the
locations on disk of the original uploads for each version. This will
require some manual processing to get it working for existing bundles,
since the information needed isn't being stored at the moment.
author | dellsystem <ilostwaldo@gmail.com> |
---|---|
date | Sun, 17 Feb 2013 14:57:39 -0500 |
parents | cdcbfaa65cfe |
children | 2a234e11185c |
comparison
equal
deleted
inserted
replaced
188:1eb652aa501a | 209:4033ebe1867f |
---|---|
3 import os | 3 import os |
4 | 4 |
5 from django.shortcuts import get_object_or_404, render, redirect | 5 from django.shortcuts import get_object_or_404, render, redirect |
6 from django.contrib.auth.decorators import login_required | 6 from django.contrib.auth.decorators import login_required |
7 from django.http import HttpResponse | 7 from django.http import HttpResponse |
8 from django.views.static import serve | |
8 | 9 |
9 from apps.bundle.models import Bundle, BundleFile | 10 from apps.bundle.models import Bundle, BundleFile, BundleVersion |
10 from apps.bundle.forms import BundleForm, BundleEditForm | 11 from apps.bundle.forms import BundleForm, BundleEditForm |
11 from apps.bundle.tasks import handle_bundle_upload | 12 from apps.bundle.tasks import handle_bundle_upload |
12 from apps.pygments_style.models import PygmentsStyle | 13 from apps.pygments_style.models import PygmentsStyle |
13 | 14 |
14 | 15 |
35 | 36 |
36 return render(request, 'bundle/bundle.djhtml', context) | 37 return render(request, 'bundle/bundle.djhtml', context) |
37 | 38 |
38 | 39 |
39 def file_detail(request, user, bundle, version, path): | 40 def file_detail(request, user, bundle, version, path): |
40 print version | |
41 bundle_file = get_object_or_404(BundleFile, bundle__uploader__username=user, | 41 bundle_file = get_object_or_404(BundleFile, bundle__uploader__username=user, |
42 bundle__name=bundle, full_path=path, is_dir=False, version=version) | 42 bundle__name=bundle, full_path=path, is_dir=False, version=version) |
43 | 43 |
44 return detail(request, user, bundle, file=bundle_file, version=version) | 44 return detail(request, user, bundle, file=bundle_file, version=version) |
45 | 45 |
121 'bundle': bundle, | 121 'bundle': bundle, |
122 'form': form, | 122 'form': form, |
123 } | 123 } |
124 | 124 |
125 return render(request, "bundle/edit.djhtml", context) | 125 return render(request, "bundle/edit.djhtml", context) |
126 | |
127 | |
128 def download(request, user, bundle, version): | |
129 bundle = get_object_or_404(Bundle, uploader__username=user, name=bundle) | |
130 version = int(version) | |
131 | |
132 # Look for the BundleVersion with this version | |
133 bundle_version = get_object_or_404(BundleVersion, bundle=bundle, | |
134 version=version) | |
135 return serve(request, bundle_version.file_name, os.path.join('tmp', | |
136 'bundles')) |