def log_workflows_action(action, relevance_prediction, object_id, user_id, source, user_action=""): """Log the action taken by user compared to a prediction.""" if relevance_prediction: score = relevance_prediction.get("max_score") # returns 0.222113 decision = relevance_prediction.get("decision") # returns "Rejected" # Map actions to align with the prediction format action_map = { 'accept': 'Non-CORE', 'accept_core': 'CORE', 'reject': 'Rejected' } logging_info = { 'object_id': object_id, 'user_id': user_id, 'score': score, 'user_action': action_map.get(user_action, ""), 'decision': decision, 'source': source, 'action': action } audit = WorkflowsAudit(**logging_info) audit.save()
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
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
def import_audit_record(obj): """Import an audit record.""" from invenio_db import db from inspirehep.modules.workflows.models import WorkflowsAudit audit = WorkflowsAudit( id=obj.get('id'), created=obj.get('created'), user_id=obj.get('user_id'), object_id=obj.get('object_id'), score=obj.get('score'), user_action=obj.get('user_action'), decision=obj.get('decision'), source=obj.get('source'), action=obj.get('action') ) db.session.add(audit) db.session.commit()