def batch_upgrade(request):
request.datastore = 'database'
transaction.get().setExtendedInfo('upgrade', True)
batch = request.json['batch']
root = request.root
storage = request.registry[STORAGE].write
session = storage.DBSession()
results = []
for uuid in batch:
item_type = None
update = False
error = False
sp = session.begin_nested()
try:
item = find_resource(root, uuid)
item_type = item.type_info.item_type
update, errors = update_item(storage, item)
except Exception as e:
logger.error('Error %s updating: /%s/%s' % (e, item_type, uuid))
sp.rollback()
error = True
else:
if errors:
# redmine 5161 sometimes error.path has an int
errortext = [
'%s: %s' % ('/'.join([str(x) or '<root>' for x in error.path]), error.message)
for error in errors]
logger.error(
'Validation failure: /%s/%s\n%s', item_type, uuid, '\n'.join(errortext))
sp.rollback()
error = True
else:
sp.commit()
results.append((item_type, uuid, update, error))
return {'results': results}
评论列表
文章目录