diff options
author | Magnus Hagander | 2015-02-08 15:54:12 +0000 |
---|---|---|
committer | Magnus Hagander | 2015-02-08 15:54:12 +0000 |
commit | ec2f174e5c9d27630a4e7f507761edbdecffbe9c (patch) | |
tree | 05c767f7cd0d8d8896653191008446c93b44f8e2 | |
parent | 2bf6b909fd42f09ada9667264b9a0300f15503d9 (diff) |
Collect and show attachment filenames
-rw-r--r-- | pgcommitfest/commitfest/ajax.py | 3 | ||||
-rw-r--r-- | pgcommitfest/commitfest/models.py | 1 | ||||
-rw-r--r-- | pgcommitfest/commitfest/templates/patch.html | 4 | ||||
-rwxr-xr-x | tools/commitfest/oneoff/update_attachment_filenames.py | 79 |
4 files changed, 84 insertions, 3 deletions
diff --git a/pgcommitfest/commitfest/ajax.py b/pgcommitfest/commitfest/ajax.py index f489d12..92c4575 100644 --- a/pgcommitfest/commitfest/ajax.py +++ b/pgcommitfest/commitfest/ajax.py @@ -75,7 +75,8 @@ def parse_and_add_attachments(threadinfo, mailthread): defaults={ 'date': t['date'], 'author': t['from'], - 'attachmentid': t['atts'][0], + 'attachmentid': t['atts'][0]['id'], + 'filename': t['atts'][0]['name'], }) # In theory we should remove objects if they don't have an # attachment, but how could that ever happen? Ignore for now. diff --git a/pgcommitfest/commitfest/models.py b/pgcommitfest/commitfest/models.py index f118bc2..124af72 100644 --- a/pgcommitfest/commitfest/models.py +++ b/pgcommitfest/commitfest/models.py @@ -219,6 +219,7 @@ class MailThreadAttachment(models.Model): mailthread = models.ForeignKey(MailThread, null=False, blank=False) messageid = models.CharField(max_length=1000, null=False, blank=False) attachmentid = models.IntegerField(null=False, blank=False) + filename = models.CharField(max_length=1000, null=False, blank=True) date = models.DateTimeField(null=False, blank=False) author = models.CharField(max_length=500, null=False, blank=False) ispatch = models.NullBooleanField() diff --git a/pgcommitfest/commitfest/templates/patch.html b/pgcommitfest/commitfest/templates/patch.html index 7fcf9fd..97ac9b5 100644 --- a/pgcommitfest/commitfest/templates/patch.html +++ b/pgcommitfest/commitfest/templates/patch.html @@ -68,10 +68,10 @@ Latest at <a href="http://www.postgresql.org/message-id/{{t.latestmsgid}}/">{{t.latestmessage}}</a> by {{t.latestauthor|hidemail}}<br/> {%for ta in t.mailthreadattachment_set.all%} {%if forloop.first%} - Latest attachment at <a href="http://www.postgresql.org/message-id/{{ta.messageid}}/">{{ta.date}}</a> from {{ta.author|hidemail}} <button type="button" class="btn btn-default btn-xs" data-toggle="collapse" data-target="#att{{t.pk}}" title="Show all attachments"><i class="glyphicon glyphicon-plus"></i></button> + Latest attachment (<a href="http://www.postgresql.org/message-id/attachment/{{ta.attachmentid}}/{{ta.filename}}">{{ta.filename}}</a>) at <a href="http://www.postgresql.org/message-id/{{ta.messageid}}/">{{ta.date}}</a> from {{ta.author|hidemail}} <button type="button" class="btn btn-default btn-xs" data-toggle="collapse" data-target="#att{{t.pk}}" title="Show all attachments"><i class="glyphicon glyphicon-plus"></i></button> <div id="att{{t.pk}}" class="collapse"> {%endif%} - Attachment at <a href="http://www.postgresql.org/message-id/{{ta.messageid}}/">{{ta.date}}</a> from {{ta.author|hidemail}} (Patch: {{ta.ispatch|yesno:"Yes,No,Pending check"}})<br/> + Attachment (<a href="http://www.postgresql.org/message-id/attachment/{{ta.attachmentid}}/{{ta.filename}}">{{ta.filename}}</a>) at <a href="http://www.postgresql.org/message-id/{{ta.messageid}}/">{{ta.date}}</a> from {{ta.author|hidemail}} (Patch: {{ta.ispatch|yesno:"Yes,No,Pending check"}})<br/> {%if forloop.last%}</div>{%endif%} {%endfor%} </dd> diff --git a/tools/commitfest/oneoff/update_attachment_filenames.py b/tools/commitfest/oneoff/update_attachment_filenames.py new file mode 100755 index 0000000..3ee675c --- /dev/null +++ b/tools/commitfest/oneoff/update_attachment_filenames.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python +# +# update_attachment_filenames.py + +# Go through all old attachments in the system and update the filename based on +# the information in the archives. Required after we added the filename field +# to attachments. +# + +import os +import sys +import socket +import httplib +import magic +import logging + +import simplejson + +# Set up for accessing django +from django.core.management import setup_environ +sys.path.append(os.path.join(os.path.abspath(os.path.dirname(sys.argv[0])), '../../../pgcommitfest')) +import settings +setup_environ(settings) + +from django.db import connection + +from commitfest.models import MailThreadAttachment + +if __name__ == "__main__": + debug = "--debug" in sys.argv + + # Logging always done to stdout, but we can turn on/off how much + logging.basicConfig(format='%(asctime)s %(levelname)s: %(msg)s', + level=debug and logging.DEBUG or logging.INFO, + stream=sys.stdout) + + socket.setdefaulttimeout(settings.ARCHIVES_TIMEOUT) + mag = magic.open(magic.MIME) + mag.load() + + logging.info("Fetching attachment filenames from archives") + + for a in MailThreadAttachment.objects.filter(filename=""): + url = "/message-id.json/%s" % a.messageid + logging.debug("Checking attachment %s" % a.attachmentid) + + h = httplib.HTTPConnection(settings.ARCHIVES_SERVER, + settings.ARCHIVES_PORT, + True, + settings.ARCHIVES_TIMEOUT) + h.request('GET', url, headers={ + 'Host': settings.ARCHIVES_HOST, + }) + resp = h.getresponse() + if resp.status != 200: + logging.error("Failed to get %s: %s" % (url, resp.status)) + continue + + contents = resp.read() + resp.close() + h.close() + + obj = simplejson.loads(contents) + + try: + for msg in obj: + for att in msg['atts']: + if att['id'] == a.attachmentid: + print "id %s, att id %s, filename %s" % (a.id, a.attachmentid, att['name']) + a.filename = att['name'] + a.save() + raise StopIteration + logging.error("No match found for attachmentid %s" % a.attachmentid) + except StopIteration: + # Success + pass + + connection.close() + logging.debug("Done.") |