2023-06-10 14:49:33 +01:00

120 lines
2.8 KiB
Python

from typing import Optional
from .error_message import ErrorMessage
class Entity():
"""Entity information
Args:
acronym: acronym of the entity. Must be a 3-characters captalized string
"""
def __init__(self, acronym: str) -> None:
self.acronym = acronym
def __str__(self) -> str:
return f"Entity {self.acronym}: {self.name}"
@property
def _acronyms(self) -> list:
return [
func
for func in dir(self)
if func.isupper() and
callable(getattr(self, func)) and
not func.startswith("__")
]
@property
def _names(self) -> dict:
return {acr: getattr(self, acr)() for acr in self._acronyms}
@property
def name(self) -> str:
try:
return self._names[self.acronym]
except KeyError:
raise KeyError(f'Unknown acronym {self.acronym}.')
@property
def acronym(self) -> str:
return self._acronym
@acronym.setter
def acronym(self, acronym: str) -> None:
self._acronym = acronym
def EFS(self) -> str:
return 'Excel File Structure'
def GMD(self) -> str:
return 'Growth Media'
def GOD(self) -> str:
return 'Geographic Origin'
def LID(self) -> str:
return 'Literature'
def STD(self) -> str:
return 'Strains'
def GID(self) -> str:
return 'Genomic Information'
def OTD(self) -> str:
return 'Ontobiotope'
def UCT(self) -> str:
return 'Uncategorized'
class Error():
"""Error information
Args:
message (str): Error message
entity (Entity, optional): Entity related to the error. If None will default to Uncategorized. Defaults to None.
data (str, optional): Data used for sorting the messages. Defaults to None.
"""
def __init__(self, code: str, pk: Optional[str] = None, data: Optional[str] = None) -> None:
self.code = code.upper()
self.pk = pk
self.data = data
def __str__(self):
return f"Error {self._code}: {self.message}"
@property
def code(self) -> str:
return self._code
@code.setter
def code(self, code: str) -> None:
self._code = code.upper()
@property
def pk(self) -> Optional[str]:
return self._pk
@pk.setter
def pk(self, pk: Optional[str] = None) -> None:
self._pk = pk
@property
def data(self) -> Optional[str]:
return self._data
@data.setter
def data(self, data: Optional[str]):
self._data = data
@property
def entity(self) -> Entity:
return Entity(self.code[:3])
@property
def message(self) -> str:
return ErrorMessage(self.code, self.pk, self.data).message