From 32f9874382f5a24447e53396768d01a4c1d42bc1 Mon Sep 17 00:00:00 2001 From: Sebastian Nowicki Date: Mon, 7 Jan 2008 16:22:15 +0900 Subject: [PATCH] Implemented saving the tarball of a package --- archlinux/aur/models.py | 13 +++++++++++++ archlinux/aur/views.py | 8 ++++++++ archlinux/templates/aur/package_detail.html | 3 +++ 3 files changed, 24 insertions(+) diff --git a/archlinux/aur/models.py b/archlinux/aur/models.py index 815eaba..571b2c9 100644 --- a/archlinux/aur/models.py +++ b/archlinux/aur/models.py @@ -75,6 +75,7 @@ class Package(models.Model): maintainers = models.ManyToManyField(User) repository = models.ForeignKey(Repository) category = models.ForeignKey(Category) + tarball = models.FileField(upload_to='packages') licenses = models.ManyToManyField(License, null=True, blank=True) architectures = models.ManyToManyField(Architecture) depends = models.ManyToManyField('self', null=True, blank=True, @@ -100,6 +101,10 @@ class Package(models.Model): return ', '.join(map(str, self.architectures.all())) get_arch.short_description = 'architectures' + def get_tarball_basename(self): + """Return the basename of the absolute path to the tarball""" + return os.path.basename(self.get_tarball_filename()) + def get_absolute_url(self): return ('aur-package_detail', [self.name,]) get_absolute_url = permalink(get_absolute_url) @@ -108,6 +113,14 @@ class Package(models.Model): self.updated = datetime.now() super(Package, self).save() + def _save_FIELD_file(self, field, filename, raw_contents, save=True): + old_upload_to=field.upload_to + dirname, filename = filename.rsplit(os.path.sep, 1) + field.upload_to = os.path.join(field.upload_to, dirname) + super(Package, self)._save_FIELD_file(field, filename, + raw_contents, save) + field.upload_to = old_upload_to + class Admin: list_display = ('name', 'category', 'get_arch', 'updated') diff --git a/archlinux/aur/views.py b/archlinux/aur/views.py index fb2546e..b81bc66 100644 --- a/archlinux/aur/views.py +++ b/archlinux/aur/views.py @@ -143,6 +143,14 @@ def submit(request): hash.save() del pkgbuild_contents + # Save tarball + # TODO: Tar the saved sources instead of using the uploaded one, for + # security + fp = open(filename, "rb") + package.save_tarball_file('%s/%s' % (package.name, os.path.basename(filename)), + ''.join(fp.readlines())) + fp.close() + for index in range(len(pkg['source'])): source_filename = pkg['source'][index] source = PackageFile(package=package) diff --git a/archlinux/templates/aur/package_detail.html b/archlinux/templates/aur/package_detail.html index 2c3bf2f..643c8b9 100644 --- a/archlinux/templates/aur/package_detail.html +++ b/archlinux/templates/aur/package_detail.html @@ -40,6 +40,9 @@ {% trans "Last Updated" %}: {{ pkg.updated|date:"Y-m-d H:i:s" }} + + {% trans "Download" %} + {{ pkg.get_tarball_basename }}
-- 2.11.4.GIT