forked from Support/sp-hydra-veil-gui
95 lines
2.8 KiB
Python
Executable file
95 lines
2.8 KiB
Python
Executable file
from core.models.Result import ResultError
|
|
|
|
|
|
def result_is_valid(result):
|
|
if hasattr(result, 'valid'):
|
|
return bool(result.valid)
|
|
if isinstance(result, dict):
|
|
return bool(result.get('valid'))
|
|
return False
|
|
|
|
|
|
def result_data(result):
|
|
if hasattr(result, 'data'):
|
|
return result.data
|
|
if isinstance(result, dict):
|
|
return result.get('data') or result.get('billing_code')
|
|
return None
|
|
|
|
|
|
def result_message(result, default='Operation failed.'):
|
|
if hasattr(result, 'message') and result.message:
|
|
return str(result.message)
|
|
if isinstance(result, dict):
|
|
return str(result.get('message') or result.get('error_code') or default)
|
|
return default
|
|
|
|
|
|
def result_error_value(result, default=ResultError.UNKNOWN.value):
|
|
error_type = None
|
|
if hasattr(result, 'error_type'):
|
|
error_type = result.error_type
|
|
elif isinstance(result, dict):
|
|
error_type = result.get('error_type') or result.get('error_code')
|
|
|
|
if error_type is None:
|
|
return default
|
|
if hasattr(error_type, 'value'):
|
|
return str(error_type.value)
|
|
return str(error_type)
|
|
|
|
|
|
def operation_failure_payload(operation, result=None, message=None, exception=None, context=None):
|
|
if exception is not None:
|
|
error_value = ResultError.UNKNOWN.value
|
|
detail = str(exception) or type(exception).__name__
|
|
else:
|
|
error_value = result_error_value(result)
|
|
detail = message or result_message(result)
|
|
|
|
title = _operation_title(operation, error_value)
|
|
return {
|
|
'operation': operation,
|
|
'title': title,
|
|
'message': detail,
|
|
'error_type': error_value,
|
|
'severity': _severity_for(error_value),
|
|
'actions': _actions_for(error_value),
|
|
'context': context or {},
|
|
}
|
|
|
|
|
|
def _operation_title(operation, error_value):
|
|
if error_value == ResultError.CONNECTION.value:
|
|
return 'Connection Problem'
|
|
if operation == 'use_ticket' and error_value == ResultError.SUBSCRIPTION.value:
|
|
return 'Ticket Expired'
|
|
if operation == 'use_ticket':
|
|
return 'Ticket Use Failed'
|
|
if operation == 'enable_profile':
|
|
return 'Profile Enable Failed'
|
|
if operation == 'disable_profile':
|
|
return 'Profile Disable Failed'
|
|
return 'Operation Failed'
|
|
|
|
|
|
def _severity_for(error_value):
|
|
if error_value in {
|
|
ResultError.CONNECTION.value,
|
|
ResultError.SUBSCRIPTION.value,
|
|
ResultError.MISSING_FILE.value,
|
|
ResultError.MISSING_DATA.value,
|
|
}:
|
|
return 'warning'
|
|
return 'error'
|
|
|
|
|
|
def _actions_for(error_value):
|
|
if error_value == ResultError.CONNECTION.value:
|
|
return [
|
|
{'key': 'retry', 'label': 'Try Again', 'role': 'primary'},
|
|
{'key': 'cancel', 'label': 'Cancel', 'role': 'secondary'},
|
|
]
|
|
return [
|
|
{'key': 'dismiss', 'label': 'OK', 'role': 'primary'},
|
|
]
|