--- a/Allura/allura/controllers/attachments.py
+++ b/Allura/allura/controllers/attachments.py
@@ -37,22 +37,20 @@
@LazyProperty
def attachment(self):
metadata = self.AttachmentClass.metadata_for(self.artifact)
- metadata_query = dict(
- ('metadata.%s' % k, v)
- for k, v in metadata.iteritems())
- attachment = self.AttachmentClass.query.get(filename=self.filename, **metadata_query)
- if attachment is None:
- attachment = self.AttachmentClass.by_metadata(filename=self.filename, **metadata).first()
+ metadata['type'] = 'attachment'
+ attachment = self.AttachmentClass.query.get(filename=self.filename, **metadata)
if attachment is None:
raise exc.HTTPNotFound
return attachment
@LazyProperty
def thumbnail(self):
- thumbnail = self.AttachmentClass.by_metadata(filename=self.attachment.filename).first()
- if thumbnail is None:
+ metadata = self.AttachmentClass.metadata_for(self.artifact)
+ metadata['type'] = 'thumbnail'
+ attachment = self.AttachmentClass.query.get(filename=self.filename, **metadata)
+ if attachment is None:
raise exc.HTTPNotFound
- return thumbnail
+ return attachment
@expose()
def index(self, delete=False, embed=True, **kw):
@@ -66,31 +64,8 @@
except exc.HTTPNotFound:
pass
redirect(request.referer)
- with self.attachment.open() as fp:
- if fp is None:
- raise exc.HTTPNotFound()
- filename = fp.metadata['filename'].encode('utf-8')
- if fp.content_type is None:
- fp.content_type = 'application/octet-stream'
- response.headers['Content-Type'] = fp.content_type.encode('utf-8')
- response.content_type = fp.content_type.encode('utf-8')
- if not embed:
- response.headers.add('Content-Disposition',
- 'attachment;filename="%s"' % filename)
- else:
- response.headers.add('Content-Disposition',
- 'filename="%s"' % filename)
- return fp.read()
- return self.filename
+ return self.attachment.serve(embed)
@expose()
def thumb(self, embed=True):
- with self.thumbnail.open() as fp:
- filename = fp.metadata['filename'].encode('utf-8')
- response.headers['Content-Type'] = ''
- response.content_type = fp.content_type.encode('utf-8')
- if not embed:
- response.headers.add('Content-Disposition',
- 'attachment;filename=%s' % filename)
- return fp.read()
- return self.filename
+ return self.thumbnail.serve(embed)