Beispiel #1
0
def delete_workflow_specification(spec_id):
    if spec_id is None:
        raise ApiError('unknown_spec',
                       'Please provide a valid Workflow Specification ID.')

    spec: WorkflowSpecModel = session.query(WorkflowSpecModel).filter_by(
        id=spec_id).first()

    if spec is None:
        raise ApiError(
            'unknown_spec',
            'The Workflow Specification "' + spec_id + '" is not recognized.')

    # Delete all items in the database related to the deleted workflow spec.
    files = session.query(FileModel).filter_by(workflow_spec_id=spec_id).all()
    for file in files:
        FileService.delete_file(file.id)

    session.query(TaskEventModel).filter(
        TaskEventModel.workflow_spec_id == spec_id).delete()

    # Delete all events and workflow models related to this specification
    for workflow in session.query(WorkflowModel).filter_by(
            workflow_spec_id=spec_id):
        StudyService.delete_workflow(workflow)
    session.query(WorkflowSpecModel).filter_by(id=spec_id).delete()
    session.commit()
    def reset(workflow_model, clear_data=False, delete_files=False):
        print('WorkflowProcessor: reset: ')

        # Try to execute a cancel notify
        try:
            wp = WorkflowProcessor(workflow_model)
            wp.cancel_notify(
            )  # The executes a notification to all endpoints that
        except Exception as e:
            app.logger.error(
                f"Unable to send a cancel notify for workflow %s during a reset."
                f" Continuing with the reset anyway so we don't get in an unresolvable"
                f" state. An %s error occured with the following information: %s"
                % (workflow_model.id, e.__class__.__name__, str(e)))
        workflow_model.bpmn_workflow_json = None
        if clear_data:
            # Clear form_data from task_events
            task_events = session.query(TaskEventModel). \
                filter(TaskEventModel.workflow_id == workflow_model.id).all()
            for task_event in task_events:
                task_event.form_data = {}
                session.add(task_event)
        if delete_files:
            files = FileModel.query.filter(
                FileModel.workflow_id == workflow_model.id).all()
            for file in files:
                FileService.delete_file(file.id)
        session.commit()
        return WorkflowProcessor(workflow_model)
Beispiel #3
0
 def delete_workflow(workflow):
     for file in session.query(FileModel).filter_by(workflow_id=workflow.id).all():
         FileService.delete_file(file.id)
     for dep in workflow.dependencies:
         session.delete(dep)
     session.query(TaskEventModel).filter_by(workflow_id=workflow.id).delete()
     session.query(WorkflowModel).filter_by(id=workflow.id).delete()
 def process_document_deletion(doc_code, workflow_id, task):
     if DocumentService.is_allowed_document(doc_code):
         result = session.query(FileModel).filter(
             FileModel.workflow_id == workflow_id,
             FileModel.irb_doc_code == doc_code).all()
         if isinstance(result, list) and len(result) > 0 and isinstance(
                 result[0], FileModel):
             for file in result:
                 FileService.delete_file(file.id)
         else:
             raise ApiError.from_task(
                 code='no_document_found',
                 message=
                 f'No document of type {doc_code} was found for this workflow.',
                 task=task)
     else:
         raise ApiError.from_task(
             code='invalid_document_code',
             message=f'{doc_code} is not a valid document code',
             task=task)
Beispiel #5
0
def delete_file(file_id):
    FileService.delete_file(file_id)