forked from MIRRI/mirri_utils
82 lines
2.4 KiB
Python
82 lines
2.4 KiB
Python
from mirri.entities.sequence import GenomicSequence
|
|
from mirri.biolomics.serializers import RECORD_ID, RECORD_NAME, RECORD_DETAILS
|
|
|
|
|
|
class GenomicSequenceBiolomics(GenomicSequence):
|
|
def __init__(self, **kwargs):
|
|
super().__init__(freeze=False, **kwargs)
|
|
|
|
@property
|
|
def record_id(self) -> int:
|
|
return self._data.get(RECORD_ID, None)
|
|
|
|
@record_id.setter
|
|
def record_id(self, value: int):
|
|
self._data[RECORD_ID] = value
|
|
|
|
@property
|
|
def record_name(self) -> str:
|
|
return self._data.get(RECORD_NAME, None)
|
|
|
|
@record_name.setter
|
|
def record_name(self, value: str):
|
|
self._data[RECORD_NAME] = value
|
|
|
|
def dict(self):
|
|
_data = super(GenomicSequenceBiolomics, self).dict()
|
|
if self.record_id:
|
|
_data[RECORD_ID] = self.record_id
|
|
if self.record_name:
|
|
_data[RECORD_NAME] = self.record_name
|
|
return _data
|
|
|
|
|
|
def serialize_to_biolomics(marker: GenomicSequenceBiolomics, client=None, update=False):
|
|
ws_sequence = {}
|
|
print()
|
|
if marker.record_id:
|
|
ws_sequence[RECORD_ID] = marker.record_id
|
|
if marker.record_name:
|
|
ws_sequence[RECORD_NAME] = marker.record_name
|
|
else:
|
|
ws_sequence[RECORD_NAME] = marker.marker_id
|
|
details = {}
|
|
if marker.marker_id:
|
|
details["INSDC number"] = {"Value": marker.marker_id,
|
|
"FieldType": "E"}
|
|
if marker.marker_seq:
|
|
details["DNA sequence"] = {
|
|
"Value": {"Sequence": marker.marker_seq},
|
|
"FieldType": "N"}
|
|
if marker.marker_type:
|
|
details['Marker name'] = {"Value": marker.marker_type, "FieldType": "E"}
|
|
|
|
ws_sequence[RECORD_DETAILS] = details
|
|
|
|
return ws_sequence
|
|
|
|
|
|
MAPPING_WS_SPEC_TYPES = {
|
|
'Beta tubulin': 'TUBB'
|
|
}
|
|
|
|
|
|
def serialize_from_biolomics(ws_data, client=None) -> GenomicSequenceBiolomics:
|
|
marker = GenomicSequenceBiolomics()
|
|
marker.record_id = ws_data[RECORD_ID]
|
|
marker.record_name = ws_data[RECORD_NAME]
|
|
|
|
for key, value in ws_data['RecordDetails'].items():
|
|
value = value['Value']
|
|
if key == 'INSDC number' and value:
|
|
marker.marker_id = value
|
|
elif key == 'Marker name' and value:
|
|
kind = MAPPING_WS_SPEC_TYPES.get(value, None)
|
|
value = kind if kind else value
|
|
marker.marker_type = value
|
|
|
|
elif key == 'DNA sequence' and 'Sequence' in value and value['Sequence']:
|
|
marker.marker_seq = value['Sequence']
|
|
|
|
return marker
|