Created
May 4, 2018 16:42
-
-
Save david-caro/b8bfbe04837641dbff402a2ba65d8464 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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