Files
Sheerka/src/core/error.py
T

72 lines
1.9 KiB
Python

from dataclasses import dataclass
from common.utils import compute_hash
from core.BuiltinConcepts import BuiltinConcepts
from core.ExecutionContext import ExecutionContext
class SheerkaException(Exception):
def get_error_msg(self) -> str:
pass
class MethodAccessError(SheerkaException):
def __init__(self, method_name):
self.method_name = method_name
def get_error_msg(self) -> str:
return f"Cannot access method '{self.method_name}'"
@dataclass
class ErrorObj:
def get_error_msg(self) -> str:
pass
class ErrorContext(ErrorObj):
"""
This class represents the result of a data flow processing
"""
def __init__(self, who: str, context: ExecutionContext, value: object = None):
self.who = who
self.context = context
self.value = value
self.parents = None
def __repr__(self):
return f"Error(who={self.who}, context_id={self.context.medium_id}, value={self.value})"
def __eq__(self, other):
if id(self) == id(other):
return True
if not isinstance(other, ErrorContext):
return False
return self.who == other.who and \
self.context.id == other.context.id and \
self.value == other.value
def __hash__(self):
return hash((self.who, self.context.id, compute_hash(self.value)))
def get_error_msg(self):
value_as_list = self.value if isinstance(self.value, list) else [self.value]
temp = []
for value in value_as_list:
if isinstance(value, str):
temp.append(value)
elif isinstance(value, (SheerkaException, ErrorObj)):
temp.append(value.get_error_msg())
else:
temp.append(repr(value))
return ", ".join(temp)
ErrorConcepts = {BuiltinConcepts.UNKNOWN_CONCEPT,
BuiltinConcepts.EVALUATION_ERROR,
BuiltinConcepts.INVALID_CONCEPT}