import typing
import phenopackets as pp202
from google.protobuf.message import Message
from .._api import MessageMixin
[docs]
class GeneDescriptor(MessageMixin):
def __init__(
self,
value_id: str,
symbol: str,
description: typing.Optional[str] = None,
alternate_ids: typing.Optional[typing.Iterable[str]] = None,
xrefs: typing.Optional[typing.Iterable[str]] = None,
alternate_symbols: typing.Optional[typing.Iterable[str]] = None,
):
self._value_id = value_id
self._symbol = symbol
self._description = description
self._alternate_ids = [] if alternate_ids is None else list(alternate_ids)
self._xrefs = [] if xrefs is None else list(xrefs)
self._alternate_symbols = [] if alternate_symbols is None else list(alternate_symbols)
@property
def value_id(self) -> str:
return self._value_id
@value_id.setter
def value_id(self, value: str):
self._value_id = value
@property
def symbol(self) -> str:
return self._symbol
@symbol.setter
def symbol(self, value: str):
self._symbol = value
@property
def description(self) -> str:
return self._description
@description.setter
def description(self, value: str):
self._description = value
@description.deleter
def description(self):
self._description = None
@property
def alternate_ids(self) -> typing.MutableSequence[str]:
return self._alternate_ids
@property
def xrefs(self) -> typing.MutableSequence[str]:
return self._xrefs
@property
def alternate_symbols(self) -> typing.MutableSequence[str]:
return self._alternate_symbols
[docs]
@staticmethod
def field_names() -> typing.Iterable[str]:
return 'value_id', 'symbol', 'description', 'alternate_ids', 'xrefs', 'alternate_symbols',
[docs]
@classmethod
def required_fields(cls) -> typing.Sequence[str]:
return 'value_id', 'symbol',
[docs]
@classmethod
def from_dict(cls, values: typing.Mapping[str, typing.Any]):
if cls._all_required_fields_are_present(values):
return GeneDescriptor(
value_id=values['value_id'],
symbol=values['symbol'],
description=values.get('description', None),
alternate_ids=values.get('alternate_ids', None),
xrefs=values.get('xrefs', None),
alternate_symbols=values.get('alternate_symbols', None),
)
else:
cls._complain_about_missing_field(values)
[docs]
def to_message(self) -> Message:
gene_descriptor = pp202.GeneDescriptor(value_id=self._value_id, symbol=self._symbol)
if self._description is not None:
gene_descriptor.description = self._description
gene_descriptor.alternate_ids.extend(self._alternate_ids)
gene_descriptor.xrefs.extend(self._xrefs)
gene_descriptor.alternate_symbols.extend(self._alternate_symbols)
return gene_descriptor
[docs]
@classmethod
def message_type(cls) -> typing.Type[Message]:
return pp202.GeneDescriptor
[docs]
@classmethod
def from_message(cls, msg: Message):
if isinstance(msg, cls.message_type()):
return GeneDescriptor(
value_id=msg.value_id,
symbol=msg.symbol,
description=None if msg.description == '' else msg.description,
alternate_ids=msg.alternate_ids,
xrefs=msg.xrefs,
alternate_symbols=msg.alternate_symbols,
)
else:
cls.complain_about_incompatible_msg_type(msg)
def __eq__(self, other):
return isinstance(other, GeneDescriptor) \
and self._value_id == other._value_id \
and self._symbol == other._symbol \
and self._description == other._description \
and self._alternate_ids == other._alternate_ids \
and self._xrefs == other._xrefs \
and self._alternate_symbols == other._alternate_symbols
def __repr__(self):
return f'GeneDescriptor(' \
f'value_id={self._value_id}, ' \
f'symbol={self._symbol}, ' \
f'description={self._description}, ' \
f'alternate_ids={self._alternate_ids}, ' \
f'xrefs={self._xrefs}, ' \
f'alternate_symbols={self._alternate_symbols})'