From 939d57a022daa8f1f08dcfd111385225ca6030f6 Mon Sep 17 00:00:00 2001 From: Joar Wandborg Date: Tue, 25 Sep 2012 01:06:25 +0200 Subject: [PATCH] HTTP callback fixes - Added HTTPError catching around the callback request, to not mark the entry as failed, just log the exception. - Fixed bug where I forgot to actually fetch the entry before passing it to json_processing_callback. - Changed __main__ migration #6 to create the ProcessingMetaData table as it is currently, to prevent possible breakage if a siteadmin is lagging behind with his db migrations and more than one migration wants to fix stuff with the ProcessingMetaData table. --- mediagoblin/db/sql/migrations.py | 10 +++++++++- mediagoblin/processing/task.py | 2 +- mediagoblin/tools/processing.py | 15 +++++++++++---- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/mediagoblin/db/sql/migrations.py b/mediagoblin/db/sql/migrations.py index 416c076b..1d822cd9 100644 --- a/mediagoblin/db/sql/migrations.py +++ b/mediagoblin/db/sql/migrations.py @@ -106,5 +106,13 @@ def add_mediaentry_collected(db_conn): @RegisterMigration(6, MIGRATIONS) def create_processing_metadata_table(db): - ProcessingMetaData.__table__.create(db.bind) + metadata = MetaData(bind=db.bind) + + metadata_table = Table('core__processing_metadata', metadata, + Column('id', Integer, primary_key=True), + Column('media_entry_id', Integer, ForeignKey(MediaEntry.id), + nullable=False, index=True), + Column('callback_url', Unicode)) + + metadata_table.create() db.commit() diff --git a/mediagoblin/processing/task.py b/mediagoblin/processing/task.py index 7f4b8429..187b893d 100644 --- a/mediagoblin/processing/task.py +++ b/mediagoblin/processing/task.py @@ -96,5 +96,5 @@ class ProcessMedia(Task): entry_id = args[0] mark_entry_failed(entry_id, exc) - entry = mgg.database.MediaEntry.query.filter_by(id=entry_id) + entry = mgg.database.MediaEntry.query.filter_by(id=entry_id).first() json_processing_callback(entry) diff --git a/mediagoblin/tools/processing.py b/mediagoblin/tools/processing.py index 41a0a5fa..5840c7e0 100644 --- a/mediagoblin/tools/processing.py +++ b/mediagoblin/tools/processing.py @@ -16,8 +16,9 @@ import logging import json +import traceback -from urllib2 import urlopen, Request +from urllib2 import urlopen, Request, HTTPError from urllib import urlencode _log = logging.getLogger(__name__) @@ -67,7 +68,13 @@ def json_processing_callback(entry): headers=headers, data_parser=json.dumps) - urlopen(request) - _log.debug('Processing callback for {0} sent'.format(entry)) + try: + urlopen(request) + _log.debug('Processing callback for {0} sent'.format(entry)) - return True + return True + except HTTPError: + _log.error('Failed to send callback: {0}'.format( + traceback.format_exc())) + + return False