Skip to content

Commit 3402dc2

Browse files
committed
Switched from os.system call to Python zipfile library for creating downloadable archives
1 parent 0d36c59 commit 3402dc2

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

projects/views/private.py

+13-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import simplejson
22
import os
3+
import zipfile
34

45
from django.contrib.auth.decorators import login_required
56
from django.contrib.auth.models import User
@@ -274,11 +275,20 @@ def export(request, project_slug):
274275
project = Project.objects.live().get(user=request.user, slug=project_slug)
275276
os.chdir(project.user_doc_path)
276277
dir_path = os.path.join(settings.MEDIA_ROOT, 'export', project.user.username)
277-
file_path = os.path.join(dir_path, '%s.zip' % project.slug)
278+
zip_filename = '%s.zip' % project.slug
279+
file_path = os.path.join(dir_path, zip_filename)
278280
try:
279281
os.makedirs(dir_path)
280282
except OSError:
281283
#Directory already exists
282284
pass
283-
os.system('zip -r %s *' % file_path)
284-
return HttpResponseRedirect(os.path.join(settings.MEDIA_URL, 'export', project.user.username, '%s.zip' % project.slug))
285+
286+
# Create a <slug>.zip file containing all files in file_path
287+
archive = zipfile.ZipFile(zip_filename, 'w')
288+
for root, subfolders, files in os.walk(file_path):
289+
for file in files:
290+
archive.write(os.path.join(root, file))
291+
archive.close()
292+
293+
return HttpResponseRedirect(os.path.join(settings.MEDIA_URL, 'export', project.user.username, zip_filename))
294+

0 commit comments

Comments
 (0)