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'))