Create atomic_update db utility function
In some cases (notably the mark_entry_failed function) it is useful to have atomic update functionality on the db. On mongo this requires special syntax. So created an atomic_update function for mongo and started to use it in mark_entry_failed.
This commit is contained in:
parent
b8e635b22f
commit
82cd968347
@ -290,3 +290,14 @@ class MigrationManager(object):
|
|||||||
self.set_current_migration(migration_number)
|
self.set_current_migration(migration_number)
|
||||||
if post_callback:
|
if post_callback:
|
||||||
post_callback(migration_number, migration_func)
|
post_callback(migration_number, migration_func)
|
||||||
|
|
||||||
|
|
||||||
|
##########################
|
||||||
|
# Random utility functions
|
||||||
|
##########################
|
||||||
|
|
||||||
|
|
||||||
|
def atomic_update(table, query_dict, update_values):
|
||||||
|
table.collection.update(
|
||||||
|
query_dict,
|
||||||
|
{"$set": update_values})
|
||||||
|
@ -22,4 +22,5 @@ except ImportError:
|
|||||||
if use_sql:
|
if use_sql:
|
||||||
from mediagoblin.db.sql.fake import ObjectId, InvalidId, DESCENDING
|
from mediagoblin.db.sql.fake import ObjectId, InvalidId, DESCENDING
|
||||||
else:
|
else:
|
||||||
from mediagoblin.db.mongo.util import ObjectId, InvalidId, DESCENDING
|
from mediagoblin.db.mongo.util import \
|
||||||
|
ObjectId, InvalidId, DESCENDING, atomic_update
|
||||||
|
@ -18,7 +18,7 @@ import logging
|
|||||||
|
|
||||||
from celery.task import Task
|
from celery.task import Task
|
||||||
|
|
||||||
from mediagoblin.db.util import ObjectId
|
from mediagoblin.db.util import ObjectId, atomic_update
|
||||||
from mediagoblin import mg_globals as mgg
|
from mediagoblin import mg_globals as mgg
|
||||||
|
|
||||||
from mediagoblin.tools.translate import lazy_pass_to_ugettext as _
|
from mediagoblin.tools.translate import lazy_pass_to_ugettext as _
|
||||||
@ -108,22 +108,22 @@ def mark_entry_failed(entry_id, exc):
|
|||||||
if isinstance(exc, BaseProcessingFail):
|
if isinstance(exc, BaseProcessingFail):
|
||||||
# Looks like yes, so record information about that failure and any
|
# Looks like yes, so record information about that failure and any
|
||||||
# metadata the user might have supplied.
|
# metadata the user might have supplied.
|
||||||
mgg.database['media_entries'].update(
|
atomic_update(mgg.database.MediaEntry,
|
||||||
{'_id': entry_id},
|
{'_id': entry_id},
|
||||||
{'$set': {u'state': u'failed',
|
{u'state': u'failed',
|
||||||
u'fail_error': exc.exception_path,
|
u'fail_error': exc.exception_path,
|
||||||
u'fail_metadata': exc.metadata}})
|
u'fail_metadata': exc.metadata})
|
||||||
else:
|
else:
|
||||||
_log.warn("No idea what happened here, but it failed: %r", exc)
|
_log.warn("No idea what happened here, but it failed: %r", exc)
|
||||||
# Looks like no, so just mark it as failed and don't record a
|
# Looks like no, so just mark it as failed and don't record a
|
||||||
# failure_error (we'll assume it wasn't handled) and don't record
|
# failure_error (we'll assume it wasn't handled) and don't record
|
||||||
# metadata (in fact overwrite it if somehow it had previous info
|
# metadata (in fact overwrite it if somehow it had previous info
|
||||||
# here)
|
# here)
|
||||||
mgg.database['media_entries'].update(
|
atomic_update(mgg.database.MediaEntry,
|
||||||
{'_id': entry_id},
|
{'_id': entry_id},
|
||||||
{'$set': {u'state': u'failed',
|
{u'state': u'failed',
|
||||||
u'fail_error': None,
|
u'fail_error': None,
|
||||||
u'fail_metadata': {}}})
|
u'fail_metadata': {}})
|
||||||
|
|
||||||
|
|
||||||
class BaseProcessingFail(Exception):
|
class BaseProcessingFail(Exception):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user