예제 #1
0
    def resolve(obj, *args, **kwargs):
        """Resolve the action taken in the approval action."""
        from invenio_workflows import ObjectStatus
        from inspirehep.modules.workflows.utils import log_workflows_action

        value = kwargs.get("request_data", {}).get("value", "")
        reason = kwargs.get("request_data", {}).get("reason", "")

        # Audit logging
        prediction_results = obj.extra_data.get("relevance_prediction", {})
        log_workflows_action(
            action="resolve",
            prediction_results=prediction_results,
            object_id=obj.id,
            user_id=kwargs.get('id_user'),
            source="holdingpen",
            user_action=value,
        )

        upload_pdf = kwargs.get("pdf_submission", False)
        approved = value in ('accept', 'accept_core')

        obj.extra_data["approved"] = approved
        obj.remove_action()

        obj.extra_data["user_action"] = value
        obj.extra_data["core"] = value == "accept_core"
        obj.extra_data["reason"] = reason
        obj.extra_data["pdf_upload"] = True if upload_pdf == "true" else False
        obj.status = ObjectStatus.WAITING
        obj.save()

        obj.continue_workflow(delayed=True)
        return approved
예제 #2
0
def test_audit(app):
    user_id = None
    workflow_id = None
    with app.app_context():
        user = User(email="*****@*****.**", active=True)
        user.password = "******"
        db.session.add(user)

        workflows_object = WorkflowObject.create_object()
        workflows_object.save()

        db.session.commit()
        user_id = user.id
        workflow_id = workflows_object.id

    with app.app_context():
        logging_info = {
            'object_id': workflow_id,
            'user_id': user_id,
            'score': 0.222113,
            'user_action': "Non-CORE",
            'decision': "Rejected",
            'source': "test",
            'action': "accept"
        }
        audit = WorkflowsAudit(**logging_info)
        audit.save()
        db.session.commit()

        assert WorkflowsAudit.query.count() == 1

        audit_entry = WorkflowsAudit.query.filter(
            WorkflowsAudit.object_id == workflow_id
        ).one()
        assert audit_entry
        assert audit_entry.action == "accept"
        assert audit_entry.score == 0.222113

    prediction_results = dict(
        max_score=0.222113, decision="Rejected"
    )
    with app.app_context():
        log_workflows_action(
            action="accept_core",
            prediction_results=prediction_results,
            object_id=workflow_id,
            user_id=None,
            source="test",
            user_action="accept"
        )
        db.session.commit()

        assert WorkflowsAudit.query.count() == 2

        audit_entry = WorkflowsAudit.query.filter(
            WorkflowsAudit.action == "accept_core"
        ).one()
        assert audit_entry
        assert audit_entry.action == "accept_core"
        assert audit_entry.score == 0.222113
예제 #3
0
    def resolve(obj, *args, **kwargs):
        """Resolve the action taken in the approval action."""
        from invenio_workflows import ObjectStatus
        from inspirehep.modules.workflows.utils import log_workflows_action

        value = kwargs.get("request_data", {}).get("value", "")
        reason = kwargs.get("request_data", {}).get("reason", "")

        # Audit logging
        prediction_results = obj.extra_data.get("relevance_prediction", {})
        log_workflows_action(
            action="resolve",
            prediction_results=prediction_results,
            object_id=obj.id,
            user_id=kwargs.get('id_user'),
            source="holdingpen",
            user_action=value,
        )

        upload_pdf = kwargs.get("pdf_submission", False)
        approved = value in ('accept', 'accept_core')

        obj.extra_data["approved"] = approved
        obj.remove_action()

        obj.extra_data["user_action"] = value
        obj.extra_data["core"] = value == "accept_core"
        obj.extra_data["reason"] = reason
        obj.extra_data["pdf_upload"] = True if upload_pdf == "true" else False
        obj.status = ObjectStatus.WAITING
        obj.save()

        obj.continue_workflow(delayed=True)
        return approved
예제 #4
0
def test_audit(small_app):
    user_id = None
    workflow_id = None
    with small_app.app_context():
        user = User(email="*****@*****.**", active=True)
        user.password = "******"
        db.session.add(user)

        workflows_object = workflow_object_class.create({}, data_type="hep")
        db.session.commit()

        user_id = user.id
        workflow_id = workflows_object.id

    with small_app.app_context():
        logging_info = {
            'object_id': workflow_id,
            'user_id': user_id,
            'score': 0.222113,
            'user_action': "Non-CORE",
            'decision': "Rejected",
            'source': "test",
            'action': "accept"
        }
        audit = WorkflowsAudit(**logging_info)
        audit.save()
        db.session.commit()

        assert WorkflowsAudit.query.count() == 1

        audit_entry = WorkflowsAudit.query.filter(
            WorkflowsAudit.object_id == workflow_id
        ).one()
        assert audit_entry
        assert audit_entry.action == "accept"
        assert audit_entry.score == 0.222113

    prediction_results = dict(
        max_score=0.222113, decision="Rejected"
    )
    with small_app.app_context():
        log_workflows_action(
            action="accept_core",
            prediction_results=prediction_results,
            object_id=workflow_id,
            user_id=None,
            source="test",
            user_action="accept"
        )
        db.session.commit()

        assert WorkflowsAudit.query.count() == 2

        audit_entry = WorkflowsAudit.query.filter(
            WorkflowsAudit.action == "accept_core"
        ).one()
        assert audit_entry
        assert audit_entry.action == "accept_core"
        assert audit_entry.score == 0.222113
예제 #5
0
    def _reject_record(obj, *args, **kwargs):
        relevance_prediction = obj.extra_data.get("relevance_prediction")
        log_workflows_action(
            action="reject_record",
            relevance_prediction=relevance_prediction,
            object_id=obj.id,
            user_id=None,
            source="workflow",
        )

        obj.extra_data["approved"] = False
        obj.extra_data["reason"] = message
        obj.log.info(message)
예제 #6
0
    def _reject_record(obj, *args, **kwargs):
        relevance_prediction = obj.extra_data.get("relevance_prediction")
        log_workflows_action(
            action="reject_record",
            relevance_prediction=relevance_prediction,
            object_id=obj.id,
            user_id=None,
            source="workflow",
        )

        obj.extra_data["approved"] = False
        obj.extra_data["reason"] = message
        obj.log.info(message)
예제 #7
0
    def _reject_record(obj, *args, **kwargs):
        from inspirehep.modules.workflows.utils import log_workflows_action

        prediction_results = obj.extra_data.get("relevance_prediction")
        log_workflows_action(
            action="reject_record",
            prediction_results=prediction_results,
            object_id=obj.id,
            user_id=0,
            source="workflow",
        )

        obj.extra_data["approved"] = False
        obj.extra_data["reason"] = message
        obj.log.info(message)
예제 #8
0
    def _reject_record(obj, *args, **kwargs):
        from inspirehep.modules.workflows.utils import log_workflows_action

        prediction_results = obj.extra_data.get("relevance_prediction")
        log_workflows_action(
            action="reject_record",
            prediction_results=prediction_results,
            object_id=obj.id,
            user_id=0,
            source="workflow",
        )

        obj.extra_data["approved"] = False
        obj.extra_data["reason"] = message
        obj.log.info(message)
예제 #9
0
    def resolve(obj, *args, **kwargs):
        """Resolve the action taken in the approval action."""
        from invenio_workflows import ObjectStatus
        from inspirehep.modules.workflows.utils import log_workflows_action

        value = kwargs.get("request_data", {}).get("value", "")
        reason = kwargs.get("request_data", {}).get("reason", "")
        upload_pdf = kwargs.get("request_data", {}).get("pdf_upload", False)

        # Audit logging
        relevance_prediction = obj.extra_data.get("relevance_prediction", {})
        log_workflows_action(
            action="resolve",
            relevance_prediction=relevance_prediction,
            object_id=obj.id,
            user_id=kwargs.get('id_user'),
            source="holdingpen",
            user_action=value,
        )

        if not upload_pdf:
            if 'fulltext.pdf' in obj.files:
                del obj.files['fulltext.pdf']
            documents = obj.data.get('documents', [])
            for doc in documents:
                if doc['key'] == 'fulltext.pdf':
                    documents.remove(doc)
                    break

        approved = value in ('accept', 'accept_core')

        obj.extra_data["approved"] = approved
        obj.remove_action()

        obj.extra_data["user_action"] = value
        obj.extra_data["upload_pdf"] = upload_pdf
        obj.extra_data["core"] = value == "accept_core"
        obj.extra_data["reason"] = reason
        obj.status = ObjectStatus.WAITING
        obj.save()

        obj.continue_workflow(delayed=True)
        return approved
예제 #10
0
    def resolve(obj, *args, **kwargs):
        """Resolve the action taken in the approval action."""
        from invenio_workflows import ObjectStatus
        from inspirehep.modules.workflows.utils import log_workflows_action

        value = kwargs.get("request_data", {}).get("value", "")
        reason = kwargs.get("request_data", {}).get("reason", "")
        upload_pdf = kwargs.get("request_data", {}).get("pdf_upload", False)

        # Audit logging
        relevance_prediction = obj.extra_data.get("relevance_prediction", {})
        log_workflows_action(
            action="resolve",
            relevance_prediction=relevance_prediction,
            object_id=obj.id,
            user_id=kwargs.get('id_user'),
            source="holdingpen",
            user_action=value,
        )

        if not upload_pdf:
            if 'fulltext.pdf' in obj.files:
                del obj.files['fulltext.pdf']
            documents = obj.data.get('documents', [])
            for doc in documents:
                if doc['key'] == 'fulltext.pdf':
                    documents.remove(doc)
                    break

        approved = value in ('accept', 'accept_core')

        obj.extra_data["approved"] = approved
        obj.remove_action()

        obj.extra_data["user_action"] = value
        obj.extra_data["upload_pdf"] = upload_pdf
        obj.extra_data["core"] = value == "accept_core"
        obj.extra_data["reason"] = reason
        obj.status = ObjectStatus.WAITING
        obj.save()

        obj.continue_workflow(delayed=True)
        return approved
예제 #11
0
    def resolve(obj, *args, **kwargs):
        """Resolve the action taken in the approval action."""
        from invenio_db import db
        from invenio_workflows import ObjectStatus
        from inspirehep.modules.workflows.utils import log_workflows_action

        value = kwargs.get("value", "")
        if value:
            res = value[0]  # value was ['accept']

        # Audit logging
        results = obj.extra_data.get("_tasks_results", {})
        prediction_results = results.get("arxiv_guessing", {})
        log_workflows_action(
            action="resolve",
            prediction_results=prediction_results,
            object_id=obj.id,
            user_id=kwargs.get('id_user'),
            source="holdingpen",
            user_action=res,
        )

        upload_pdf = kwargs.get("pdf_submission", False)
        approved = res in ('accept', 'accept_core')

        obj.extra_data["approved"] = approved
        obj.remove_action()
        obj.extra_data["core"] = res == "accept_core"
        obj.extra_data["reason"] = kwargs.get("text", "")
        obj.extra_data["pdf_upload"] = True if upload_pdf == "true" else False
        obj.status = ObjectStatus.WAITING
        obj.save()

        db.session.commit()

        obj.continue_workflow(delayed=True)
        return approved