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 /tools/commitfest | |
parent | 2bf6b909fd42f09ada9667264b9a0300f15503d9 (diff) |
Collect and show attachment filenames
Diffstat (limited to 'tools/commitfest')
-rwxr-xr-x | tools/commitfest/oneoff/update_attachment_filenames.py | 79 |
1 files changed, 79 insertions, 0 deletions
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.") |