Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions django/evaluate_m2/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from evaluate_m2.models import (
EvaluatorMetadata,
EvaluatorResult,
EvaluatorResultMaterializedView,
EvaluatorResultSummary,
)

Expand Down Expand Up @@ -42,6 +43,7 @@ def has_change_permission(self, request, obj=None):
def has_delete_permission(self, request, obj=None):
return False


class EvaluatorResultSummaryAdmin(admin.ModelAdmin):
list_display = ['event', 'evaluator', 'hits']

Expand All @@ -54,6 +56,7 @@ def has_change_permission(self, request, obj=None):
def has_delete_permission(self, request, obj=None):
return False


class EvaluatorResultAdmin(admin.ModelAdmin):
list_display = ['result_summary', 'date', 'source_record', 'acct_num']

Expand All @@ -65,6 +68,50 @@ def has_change_permission(self, request, obj=None):
return False
def has_delete_permission(self, request, obj=None):
return False


class EvaluatorResultMaterializedViewAdmin(admin.ModelAdmin):
list_display = [
'event_id',
'evaluator_id',
'source_record_id',
'activity_date',
'cons_acct_num',
"acct_type",
"acct_stat",
"compl_cond_cd",
"php",
"php1",
"pmt_rating",
"spc_com_cd",
"terms_freq",
"cons_info_ind",
"cons_info_ind_assoc",
"change_ind",
"dofd",
"date_closed",
"amt_past_due",
"current_bal",
"smpa",
]

def has_add_permission(self, request, obj=None):
return False

def has_view_permission(self, request, obj=None):
return True

def has_change_permission(self, request, obj=None):
return False

def has_delete_permission(self, request, obj=None):
return False


admin.site.register(EvaluatorMetadata, EvaluatorMetadataAdmin)
admin.site.register(EvaluatorResultSummary, EvaluatorResultSummaryAdmin)
admin.site.register(EvaluatorResult, EvaluatorResultAdmin)
admin.site.register(
EvaluatorResultMaterializedView,
EvaluatorResultMaterializedViewAdmin
)
13 changes: 10 additions & 3 deletions django/evaluate_m2/evaluate.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@
from django.utils.module_loading import import_string

from evaluate_m2.evaluate_utils import create_eval_insert_query
from evaluate_m2.models import EvaluatorMetadata, EvaluatorResultSummary
from evaluate_m2.models import (
EvaluatorMetadata,
EvaluatorResultMaterializedView,
EvaluatorResultSummary,
)
from evaluate_m2.upload_utils import stream_results_files_to_s3
from parse_m2.models import Metro2Event

Expand Down Expand Up @@ -36,8 +40,10 @@ def load_evaluators(self):
# runs evaluators to produce results
def run_evaluators(self, event: Metro2Event):
"""
Given an event, run all evaluators on the Account Activity associated
to the event and save the results to the database.
Given an event, run all evaluators on the Account Activity records
associated with the event and save the results to the database.
Then, create or update the evaluator result materialized view, so
the results can be queried.
"""
logger = logging.getLogger('evaluate.run_evaluators')

Expand All @@ -46,6 +52,7 @@ def run_evaluators(self, event: Metro2Event):
if record_set.exists():
for eval_name, eval_func in self.evaluators.items():
self.run_single_evaluator(event, eval_name, eval_func, record_set)
EvaluatorResultMaterializedView.create_or_refresh_materialized_view()
else:
logger.info(f"No AccountActivity found for the event '{event.id}'")

Expand Down
19 changes: 11 additions & 8 deletions django/evaluate_m2/exception_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,16 @@
from rest_framework import status


def format_error(status: int, error_string: str, message: str, path: str):
return {
"timestamp": datetime.now(),
"status": status,
"error": error_string,
"message": message,
"path": path,
}


def get_evaluate_m2_not_found_exception(
error_string:str, event_id: str, evaluator_id: str, path: str, acct_num=''):
msg = ''
Expand All @@ -22,12 +32,5 @@ def get_evaluate_m2_not_found_exception(
f'Evaluator result does not exist for event ID {event_id} or '
f'evaluator ID {evaluator_id}.'
)
error= {
'timestamp': datetime.now(),
'status': status.HTTP_404_NOT_FOUND,
'error': 'Not Found',
'message': msg,
'path': path
}

return error
return format_error(status.HTTP_404_NOT_FOUND, 'Not Found', msg, path)
Loading
Loading