Skip to content

Instantly share code, notes, and snippets.

@david-caro
Created May 4, 2018 16:42
Show Gist options
  • Save david-caro/b8bfbe04837641dbff402a2ba65d8464 to your computer and use it in GitHub Desktop.
Save david-caro/b8bfbe04837641dbff402a2ba65d8464 to your computer and use it in GitHub Desktop.
from invenio_db import db
from invenio_workflows import workflow_object_class, ObjectStatus, workflows
def has_name(task, task_name):
return ' ' + task_name + ' ' in str(task)
def get_task_index(workflow, task_name):
if callable(workflow):
if has_name(workflow, task_name):
return [0]
else:
return []
for index, task in enumerate(workflow):
if callable(task):
if has_name(task, task_name):
return [index]
else:
indexes = get_task_index(task, task_name)
if indexes:
return [index] + indexes
return []
halted_wflws = workflow_object_class.query(status=ObjectStatus.HALTED)
for halted_wflw in halted_wflws:
current_pos = halted_wflw.callback_pos
new_pos = get_task_index(
workflow=workflows[halted_wflw.workflow.name].workflow,
task_name=halted_wflw.extra_data['_last_task_name'],
)
if current_pos != new_pos:
print 'Migrating workflow %s: callback_pos %s -> %s' % (
halted_wflw.id,
current_pos,
new_pos,
)
halted_wflw.callback_pos = new_pos
halted_wflw.save()
else:
print 'Skipping workflow %s (no need to migrate)' % halted_wflw.id
raw_input('Hit enter to continue...')
db.session.commit()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment