hydraveil-gui/gui/v2/actions/operation_results.py
2026-08-28 11:12:57 -04:00

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'},
]