First import

This commit is contained in:
2022-02-18 12:09:05 +01:00
commit 332876f58c
73 changed files with 12572 additions and 0 deletions
View File
+22
View File
@@ -0,0 +1,22 @@
import unittest
from mirri.biolomics.remote.rest_client import BiolomicsClient
try:
from mirri.biolomics.secrets import CLIENT_ID, SECRET_ID, USERNAME, PASSWORD
except ImportError:
raise ImportError(
'You need a secrets.py in the project dir. with CLIENT_ID, SECRET_ID, USERNAME, PASSWORD')
from .utils import VERSION, SERVER_URL
class BiolomicsClientAuthTest(unittest.TestCase):
def test_authentication(self):
client = BiolomicsClient(SERVER_URL, VERSION, CLIENT_ID, SECRET_ID,
USERNAME, PASSWORD)
access1 = client.get_access_token()
access2 = client.get_access_token()
assert access1 is not None
self.assertEqual(access1, access2)
@@ -0,0 +1,62 @@
import unittest
from mirri.biolomics.remote.endoint_names import GROWTH_MEDIUM_WS
from mirri.biolomics.serializers.growth_media import GrowthMedium
from mirri.biolomics.settings import CLIENT_ID, SECRET_ID, USERNAME, PASSWORD
from mirri.biolomics.remote.biolomics_client import BiolomicsMirriClient
from tests.biolomics.utils import SERVER_URL, VERSION
class BiolomicsSequenceClientTest(unittest.TestCase):
def setUp(self):
self.client = BiolomicsMirriClient(SERVER_URL, VERSION, CLIENT_ID,
SECRET_ID, USERNAME, PASSWORD)
def test_retrieve_media_by_id(self):
record_id = 101
growth_medium = self.client.retrieve_by_id('growth_medium', record_id)
self.assertEqual(growth_medium.record_id, record_id)
self.assertEqual(growth_medium.record_name, 'MA2PH6')
def test_retrieve_media_by_id(self):
record_name = 'MA2PH6'
record_id = 101
growth_medium = self.client.retrieve_by_name('growth_medium', record_name)
self.assertEqual(growth_medium.record_id, record_id)
self.assertEqual(growth_medium.record_name, record_name)
def test_create_growth_media(self):
self.client.start_transaction()
try:
growth_medium = GrowthMedium()
growth_medium.acronym = 'BBB'
growth_medium.ingredients = 'alkhdflakhf'
growth_medium.description = 'desc'
new_growth_medium = self.client.create(GROWTH_MEDIUM_WS, growth_medium)
print(new_growth_medium.dict())
finally:
self.client.rollback()
def test_update_growth_media(self):
self.client.start_transaction()
try:
growth_medium = GrowthMedium()
growth_medium.acronym = 'BBB'
growth_medium.ingredients = 'alkhdflakhf'
growth_medium.description = 'desc'
growth_medium.full_description = 'full'
new_growth_medium = self.client.create(GROWTH_MEDIUM_WS, growth_medium)
new_growth_medium.full_description = 'full2'
updated_gm = new_growth_medium = self.client.update(GROWTH_MEDIUM_WS, new_growth_medium)
self.assertEqual(updated_gm.full_description, new_growth_medium.full_description)
retrieved = self.client.retrieve_by_id(GROWTH_MEDIUM_WS, new_growth_medium.record_id)
self.assertEqual(retrieved.full_description, updated_gm.full_description)
finally:
self.client.rollback()
@@ -0,0 +1,46 @@
import unittest
from .utils import VERSION, SERVER_URL
from mirri.biolomics.settings import CLIENT_ID, SECRET_ID, USERNAME, PASSWORD
from mirri.biolomics.remote.biolomics_client import BiolomicsMirriClient, BIBLIOGRAPHY_WS
from mirri.entities.publication import Publication
class BiolomicsLiteratureClientTest(unittest.TestCase):
def setUp(self):
self.client = BiolomicsMirriClient(SERVER_URL, VERSION, CLIENT_ID,
SECRET_ID, USERNAME, PASSWORD)
def test_retrieve_biblio_by_id(self):
record_id = 100
record_name = "Miscellaneous notes on Mucoraceae"
biblio = self.client.retrieve_by_id(BIBLIOGRAPHY_WS, record_id)
self.assertEqual(biblio.record_id, record_id)
self.assertEqual(biblio.record_name, record_name)
def test_retrieve_media_by_id(self):
record_id = 100
record_name = "Miscellaneous notes on Mucoraceae"
biblio = self.client.retrieve_by_name(BIBLIOGRAPHY_WS, record_name)
self.assertEqual(biblio.record_id, record_id)
self.assertEqual(biblio.record_name, record_name)
self.assertEqual(biblio.year, 1994)
self.assertEqual(biblio.volume, '50')
def test_create_biblio(self):
pub = Publication()
pub.pubmed_id = 'PM18192'
pub.journal = 'my_journal'
pub.title = 'awesome title'
pub.authors = 'pasdas, aposjdasd, alsalsfda'
pub.volume = 'volume 0'
record_id = None
try:
new_pub = self.client.create(BIBLIOGRAPHY_WS, pub)
record_id = new_pub.record_id
self.assertEqual(new_pub.title, pub.title)
self.assertEqual(new_pub.volume, pub.volume)
finally:
if record_id is not None:
self.client.delete_by_id(BIBLIOGRAPHY_WS, record_id)
@@ -0,0 +1,49 @@
import unittest
from mirri.biolomics.settings import CLIENT_ID, SECRET_ID, USERNAME, PASSWORD
from mirri.biolomics.remote.biolomics_client import BiolomicsMirriClient
from mirri.biolomics.serializers.sequence import GenomicSequenceBiolomics
from .utils import VERSION, SERVER_URL
class BiolomicsSequenceClientTest(unittest.TestCase):
def setUp(self) -> None:
self.client = BiolomicsMirriClient(SERVER_URL, VERSION, CLIENT_ID,
SECRET_ID, USERNAME, PASSWORD)
def test_retrieve_seq_by_id(self):
record_id = 101
sequence = self.client.retrieve_by_id('sequence', record_id)
self.assertEqual(sequence.record_id, record_id)
self.assertEqual(sequence.record_name, 'MUM 02.54 - CaM')
self.assertEqual(sequence.marker_type, 'CaM')
def test_retrieve_seq_by_name(self):
record_name = 'MUM 02.54 - CaM'
sequence = self.client.retrieve_by_name('sequence', record_name)
self.assertEqual(sequence.record_id, 101)
self.assertEqual(sequence.record_name, record_name)
self.assertEqual(sequence.marker_type, 'CaM')
def test_create_delete_sequence(self):
marker = GenomicSequenceBiolomics()
marker.marker_id = 'GGAAUUA'
marker.marker_seq = 'aattgacgat'
marker.marker_type = 'CaM'
marker.record_name = 'peioMarker'
new_marker = self.client.create('sequence', marker)
self.assertEqual(new_marker.marker_id, 'GGAAUUA')
self.assertEqual(new_marker.marker_seq, 'aattgacgat')
self.assertEqual(new_marker.marker_type, 'CaM')
self.assertEqual(new_marker.record_name, 'peioMarker')
self.assertTrue(new_marker.record_id)
self.client.delete_by_id('sequence', new_marker.record_id)
if __name__ == "__main__":
# import sys;sys.argv = ['', 'BiolomicsClient.Test.test_get_strain_by_id']
unittest.main()
+727
View File
@@ -0,0 +1,727 @@
import unittest
import pycountry
import deepdiff
from pprint import pprint
from mirri.biolomics.serializers.sequence import (
GenomicSequenceBiolomics,
serialize_to_biolomics as sequence_to_biolomics,
serialize_from_biolomics as sequence_from_biolomics)
from mirri.biolomics.serializers.strain import (
serialize_to_biolomics as strain_to_biolomics,
serialize_from_biolomics as strain_from_biolomics)
from mirri.biolomics.serializers.growth_media import (
# serialize_to_biolomics as growth_medium_to_biolomics,
serialize_from_biolomics as growth_medium_from_biolomics)
from mirri.biolomics.serializers.bibliography import (
serializer_from_biolomics as literature_from_biolomics,
serializer_to_biolomics as literature_to_biolomics
)
from mirri.biolomics.settings import CLIENT_ID, SECRET_ID, USERNAME, PASSWORD
from mirri.biolomics.remote.biolomics_client import BiolomicsMirriClient
from mirri.entities.publication import Publication
from .utils import create_full_data_strain, VERSION, SERVER_URL
STRAIN_WS = {
'CreationDate': '2021-05-19T12:22:33',
'CreatorUserName': 'pziarsolo@cect.org',
'LastChangeDate': '2021-05-19T12:22:36',
'LastChangeUserName': 'pziarsolo@cect.org',
'RecordDetails': {'ABS related files': {'FieldType': 21,
'Value': [{'Name': 'link',
'Value': 'https://example.com'}]},
'Altitude of geographic origin': {'FieldType': 4,
'Value': 121.0},
'Applications': {'FieldType': 5, 'Value': 'health'},
'Catalog URL': {'FieldType': 21, 'Value': []},
'Collection accession number': {'FieldType': 5,
'Value': 'TESTCC 1'},
'Collection date': {'FieldType': 8, 'Value': '1991/01/01'},
'Collector': {'FieldType': 5, 'Value': 'the collector'},
'Comment on taxonomy': {'FieldType': 5,
'Value': 'lalalalla'},
'Coordinates of geographic origin': {'FieldType': 12,
'Value': {'Altitude': 0.0,
'Latitude': 23.3,
'Longitude': 23.3,
'Precision': 0.0}},
'Country': {'FieldType': 118,
'Value': [{'Name': {'FieldType': 5,
'Value': 'Spain'},
'RecordId': 54,
'TargetFieldValue': None}]},
'Data provided by': {'FieldType': 22, 'Value': 'Unknown'},
'Date of inclusion in the catalogue': {'FieldType': 8,
'Value': '1985/05/02'},
'Deposit date': {'FieldType': 8, 'Value': '1985/05/02'},
'Depositor': {'FieldType': 5,
'Value': 'NCTC, National Collection of Type '
'Cultures - NCTC, London, United '
'Kingdom of Great Britain and '
'Northern Ireland.'},
'Dual use': {'FieldType': 20, 'Value': 'yes'},
'Enzyme production': {'FieldType': 5,
'Value': 'some enzimes'},
'Form': {'FieldType': 3,
'Value': [{'Name': 'Agar', 'Value': 'yes'},
{'Name': 'Cryo', 'Value': 'no'},
{'Name': 'Dry Ice', 'Value': 'no'},
{'Name': 'Liquid Culture Medium',
'Value': 'no'},
{'Name': 'Lyo', 'Value': 'yes'},
{'Name': 'Oil', 'Value': 'no'},
{'Name': 'Water', 'Value': 'no'}]},
'GMO': {'FieldType': 22, 'Value': 'Yes'},
'GMO construction information': {'FieldType': 5,
'Value': 'instructrion to '
'build'},
'Genotype': {'FieldType': 5, 'Value': 'some genotupe'},
'Geographic origin': {'FieldType': 5,
'Value': 'una state; one '
'municipality; somewhere in '
'the world'},
'History': {'FieldType': 5,
'Value': 'newer < In the middle < older'},
'Infrasubspecific names': {'FieldType': 5,
'Value': 'serovar tete'},
'Interspecific hybrid': {'FieldType': 20, 'Value': 'no'},
'Isolation date': {'FieldType': 8, 'Value': '1900/01/01'},
'Isolation habitat': {'FieldType': 5,
'Value': 'some habitat'},
'Isolator': {'FieldType': 5, 'Value': 'the isolator'},
'Literature': {'FieldType': 118, 'Value': []},
'MTA files URL': {'FieldType': 21,
'Value': [{'Name': 'link',
'Value': 'https://example.com'}]},
'MTA text': {'FieldType': 5, 'Value': ''},
'Metabolites production': {'FieldType': 5,
'Value': 'big factory of cheese'},
'Mutant information': {'FieldType': 5, 'Value': 'x-men'},
'Nagoya protocol restrictions and compliance conditions': {'FieldType': 20,
'Value': 'no '
'known '
'restrictions '
'under '
'the '
'Nagoya '
'protocol'},
'Ontobiotope': {'FieldType': 118,
'Value': [{'Name': {'FieldType': 5,
'Value': 'anaerobic '
'bioreactor '
'(OBT:000190)'},
'RecordId': 100,
'TargetFieldValue': None}]},
'Ontobiotope term for the isolation habitat': {'FieldType': 5,
'Value': ''},
'Orders': {'FieldType': 118, 'Value': []},
'Organism type': {'FieldType': 3,
'Value': [{'Name': 'Algae', 'Value': 'no'},
{'Name': 'Archaea',
'Value': 'yes'},
{'Name': 'Bacteria',
'Value': 'no'},
{'Name': 'Cyanobacteria',
'Value': 'no'},
{'Name': 'Filamentous Fungi',
'Value': 'no'},
{'Name': 'Phage', 'Value': 'no'},
{'Name': 'Plasmid',
'Value': 'no'},
{'Name': 'Virus', 'Value': 'no'},
{'Name': 'Yeast', 'Value': 'no'},
{'Name': 'Microalgae',
'Value': '?'}]},
'Other culture collection numbers': {'FieldType': 5,
'Value': 'aaa a; aaa3 '
'a3'},
'Other denomination': {'FieldType': 5, 'Value': ''},
'Pathogenicity': {'FieldType': 5, 'Value': 'illness'},
'Plasmids': {'FieldType': 5, 'Value': 'asda'},
'Plasmids collections fields': {'FieldType': 5,
'Value': 'asdasda'},
'Ploidy': {'FieldType': 20, 'Value': 'Polyploid'},
'Quarantine in Europe': {'FieldType': 20, 'Value': 'no'},
'Recommended growth medium': {'FieldType': 118,
'Value': [{'Name': {'FieldType': 5,
'Value': 'AAA'},
'RecordId': 1,
'TargetFieldValue': None}]},
'Recommended growth temperature': {'FieldType': 19,
'MaxValue': 30.0,
'MinValue': 30.0},
'Remarks': {'FieldType': 5, 'Value': 'no remarks for me'},
'Restrictions on use': {'FieldType': 20,
'Value': 'no restriction apply'},
'Risk group': {'FieldType': 20, 'Value': '1'},
'Sequences 16s': {"Value": [
{
"Name": {
"Value": "X76436",
"FieldType": 5
},
"RecordId": 50992,
"TargetFieldValue": {
"Value": {
"Sequence": ""
},
"FieldType": 14
}
}
],
"FieldType": 114},
'Sequences 18S rRNA': {'FieldType': 114, 'Value': []},
'Sequences 23S rRNA': {'FieldType': 114, 'Value': []},
'Sequences ACT': {'FieldType': 114, 'Value': []},
'Sequences AmdS': {'FieldType': 114, 'Value': []},
'Sequences Amds12': {'FieldType': 114, 'Value': []},
'Sequences Beta tubulin': {'FieldType': 114, 'Value': []},
'Sequences COX1': {'FieldType': 114, 'Value': []},
'Sequences COX2': {'FieldType': 114, 'Value': []},
'Sequences CaM': {'FieldType': 114, 'Value': []},
'Sequences Cct8': {'FieldType': 114, 'Value': []},
'Sequences Cit1': {'FieldType': 114, 'Value': []},
'Sequences CypA': {'FieldType': 114, 'Value': []},
'Sequences GDP': {'FieldType': 114, 'Value': []},
'Sequences GPD': {'FieldType': 114, 'Value': []},
'Sequences Genome': {'FieldType': 114, 'Value': []},
'Sequences HIS': {'FieldType': 114, 'Value': []},
'Sequences HSP': {'FieldType': 114, 'Value': []},
'Sequences IDH': {'FieldType': 114, 'Value': []},
'Sequences IGS': {'FieldType': 114, 'Value': []},
'Sequences ITS': {'FieldType': 114, 'Value': []},
'Sequences LSU': {'FieldType': 114, 'Value': []},
'Sequences MAT': {'FieldType': 114, 'Value': []},
'Sequences MAT1': {'FieldType': 114, 'Value': []},
'Sequences Miscellaneous': {'FieldType': 114, 'Value': []},
'Sequences NorA': {'FieldType': 114, 'Value': []},
'Sequences NorB': {'FieldType': 114, 'Value': []},
'Sequences Omt12': {'FieldType': 114, 'Value': []},
'Sequences OmtA': {'FieldType': 114, 'Value': []},
'Sequences PcCYP': {'FieldType': 114, 'Value': []},
'Sequences PpgA': {'FieldType': 114, 'Value': []},
'Sequences PreA': {'FieldType': 114, 'Value': []},
'Sequences PreB': {'FieldType': 114, 'Value': []},
'Sequences RAPD': {'FieldType': 114, 'Value': []},
'Sequences RPB1': {'FieldType': 114, 'Value': []},
'Sequences RPB2': {'FieldType': 114, 'Value': []},
'Sequences SSU': {'FieldType': 114, 'Value': []},
'Sequences TEF1a': {'FieldType': 114, 'Value': []},
'Sequences TEF2': {'FieldType': 114, 'Value': []},
'Sequences TUB': {'FieldType': 114, 'Value': []},
'Sequences Tsr1': {'FieldType': 114, 'Value': []},
'Sequences c16S rRNA': {'FieldType': 114, 'Value': []},
'Sequences cbhI': {'FieldType': 114, 'Value': []},
'Sequences mcm7': {'FieldType': 114, 'Value': []},
'Sequences rbcL': {'FieldType': 114, 'Value': []},
'Sexual state': {'FieldType': 5, 'Value': 'MT+A'},
'Status': {'FieldType': 5,
'Value': 'type of Bacillus alcalophilus'},
'Strain from a registered collection': {'FieldType': 20,
'Value': 'no'},
'Substrate of isolation': {'FieldType': 5,
'Value': 'some substrate'},
'Taxon name': {'FieldType': 109,
'Value': [{'Name': {'FieldType': 5,
'Value': 'Escherichia '
'coli'},
'RecordId': 100004123,
'TargetFieldValue': {'DesktopInfo': None,
'DesktopInfoHtml': '<b>Current '
'name: '
'</b><i>Escherichia '
'coli</i> '
'(Migula '
'1895) '
'Castellani '
'and '
'Chalmers '
'1919',
'FieldType': 27,
'NewSynFieldInfo': None,
'ObligateSynonymId': 0,
'OriginalSynFieldInfo': None,
'SynInfo': {'BasionymRecord': {'NameInfo': '',
'RecordId': 100004123,
'RecordName': '<i>Escherichia '
'coli</i> '
'(Migula '
'1895) '
'Castellani '
'and '
'Chalmers '
'1919',
'SecondLevelRecords': None},
'CurrentNameRecord': {'NameInfo': '',
'RecordId': 100004123,
'RecordName': '<i>Escherichia '
'coli</i> '
'(Migula '
'1895) '
'Castellani '
'and '
'Chalmers '
'1919',
'SecondLevelRecords': None},
'ObligateSynonymRecords': [],
'SelectedRecord': {
'NameInfo': '<i>Escherichia '
'coli</i> '
'(Migula '
'1895) '
'Castellani '
'and '
'Chalmers '
'1919',
'RecordId': 100004123,
'RecordName': '<i>Escherichia '
'coli</i> '
'(Migula '
'1895) '
'Castellani '
'and '
'Chalmers '
'1919',
'SecondLevelRecords': None},
'TaxonSynonymsRecords': []},
'SynonymId': 100004123}}]},
'Tested temperature growth range': {'FieldType': 19,
'MaxValue': 32.0,
'MinValue': 29.0},
'Type description': {'FieldType': 5, 'Value': ''}},
'RecordId': 148038,
'RecordName': 'MIRRI 2240561'}
STRAIN_WS_EXPECTED_NO_REMOTE = {
'Acronym': 'MIRRI',
'RecordDetails': {'ABS related files': {'FieldType': 'U',
'Value': [{'Name': 'link',
'Value': 'https://example.com'}]},
'Altitude of geographic origin': {'FieldType': 'D',
'Value': 121},
'Applications': {'FieldType': 'E', 'Value': 'health'},
'Collection accession number': {'FieldType': 'E',
'Value': 'TESTCC 1'},
'Collection date': {'FieldType': 'H', 'Value': '1991-01-01'},
'Collector': {'FieldType': 'E', 'Value': 'the collector'},
'Comment on taxonomy': {'FieldType': 'E',
'Value': 'lalalalla'},
'Coordinates of geographic origin': {'FieldType': 'L',
'Value': {'Latitude': 23.3,
'Longitude': 23.3}},
'Date of inclusion in the catalogue': {'FieldType': 'H',
'Value': '1985-05-02'},
'Deposit date': {'FieldType': 'H', 'Value': '1985-05-02'},
'Depositor': {'FieldType': 'E',
'Value': 'NCTC, National Collection of Type '
'Cultures - NCTC, London, United '
'Kingdom of Great Britain and '
'Northern Ireland.'},
'Dual use': {'FieldType': 'T', 'Value': 'yes'},
'Enzyme production': {'FieldType': 'E',
'Value': 'some enzimes'},
'Form': {'FieldType': 'C',
'Value': [{'Name': 'Agar', 'Value': 'yes'},
{'Name': 'Cryo', 'Value': 'no'},
{'Name': 'Dry Ice', 'Value': 'no'},
{'Name': 'Liquid Culture Medium',
'Value': 'no'},
{'Name': 'Lyo', 'Value': 'yes'},
{'Name': 'Oil', 'Value': 'no'},
{'Name': 'Water', 'Value': 'no'}]},
'GMO': {'FieldType': 'V', 'Value': 'Yes'},
'GMO construction information': {'FieldType': 'E',
'Value': 'instructrion to '
'build'},
'Genotype': {'FieldType': 'E', 'Value': 'some genotupe'},
'Geographic origin': {'FieldType': 'E',
'Value': 'una state; one '
'municipality; somewhere in '
'the world'},
'History': {'FieldType': 'E',
'Value': 'firstplave < seconn place < third '
'place'},
'Infrasubspecific names': {'FieldType': 'E',
'Value': 'serovar tete'},
'Interspecific hybrid': {'FieldType': 'T', 'Value': 'no'},
'Isolation date': {'FieldType': 'H', 'Value': '1900-01-01'},
'Isolation habitat': {'FieldType': 'E',
'Value': 'some habitat'},
'Isolator': {'FieldType': 'E', 'Value': 'the isolator'},
'MTA files URL': {'FieldType': 'U',
'Value': [{'Name': 'link',
'Value': 'https://example.com'}]},
'Metabolites production': {'FieldType': 'E',
'Value': 'big factory of cheese'},
'Mutant information': {'FieldType': 'E', 'Value': 'x-men'},
'Nagoya protocol restrictions and compliance conditions': {'FieldType': 'T',
'Value': 'no '
'known '
'restrictions '
'under '
'the '
'Nagoya '
'protocol'},
'Ontobiotope': {'FieldType': 'RLink', 'Value': 'OBT:000190'},
'Organism type': {'FieldType': 'C',
'Value': [{'Name': 'Algae', 'Value': 'no'},
{'Name': 'Archaea',
'Value': 'yes'},
{'Name': 'Bacteria',
'Value': 'no'},
{'Name': 'Cyanobacteria',
'Value': 'no'},
{'Name': 'Filamentous Fungi',
'Value': 'no'},
{'Name': 'Phage', 'Value': 'no'},
{'Name': 'Plasmid',
'Value': 'no'},
{'Name': 'Virus', 'Value': 'no'},
{'Name': 'Yeast',
'Value': 'no'}]},
'Other culture collection numbers': {'FieldType': 'E',
'Value': 'aaa a; aaa3 '
'a3'},
'Pathogenicity': {'FieldType': 'E', 'Value': 'illness'},
'Plasmids': {'FieldType': 'E', 'Value': 'asda'},
'Plasmids collections fields': {'FieldType': 'E',
'Value': 'asdasda'},
'Ploidy': {'FieldType': 'T', 'Value': 'Polyploid'},
'Quarantine in Europe': {'FieldType': 'T', 'Value': 'no'},
'Recommended growth temperature': {'FieldType': 'S',
'MaxValue': 30.0,
'MinValue': 30.0},
'Remarks': {'FieldType': 'E', 'Value': 'no remarks for me'},
'Restrictions on use': {'FieldType': 'T',
'Value': 'no restriction apply'},
'Risk group': {'FieldType': 'T', 'Value': '1'},
'Sexual state': {'FieldType': 'E', 'Value': 'MT+A'},
'Status': {'FieldType': 'E',
'Value': 'type of Bacillus alcalophilus'},
'Strain from a registered collection': {'FieldType': 'T',
'Value': 'no'},
'Substrate of isolation': {'FieldType': 'E',
'Value': 'some substrate'},
'Taxon name': {'FieldType': 'SynLink',
'Value': 'Escherichia coli'},
'Tested temperature growth range': {'FieldType': 'S',
'MaxValue': 32.0,
'MinValue': 29.0}}}
class StrainSerializerTest(unittest.TestCase):
def test_serialize_to_biolomics(self):
strain = create_full_data_strain()
ws_strain = strain_to_biolomics(strain, client=None)
self.assertDictEqual(ws_strain, STRAIN_WS_EXPECTED_NO_REMOTE)
def test_serialize_to_biolomics_remote(self):
client = BiolomicsMirriClient(SERVER_URL, VERSION, CLIENT_ID,
SECRET_ID, USERNAME, PASSWORD)
strain = create_full_data_strain()
marker = GenomicSequenceBiolomics()
marker.marker_id = "MUM 02.15 - Beta tubulin"
marker.marker_type = 'TUBB'
strain.genetics.markers = [marker]
ws_strain = strain_to_biolomics(strain, client=client)
self.assertEqual(strain.collect.habitat_ontobiotope,
ws_strain['RecordDetails']['Ontobiotope']['Value'][0]['Name']['Value'])
self.assertEqual(pycountry.countries.get(alpha_3=strain.collect.location.country).name,
ws_strain['RecordDetails']['Country']['Value'][0]['Name']['Value'])
self.assertEqual(strain.publications[0].title,
ws_strain['RecordDetails']['Literature']['Value'][0]['Name']['Value'])
self.assertEqual(strain.genetics.markers[0].marker_id,
ws_strain['RecordDetails']['Sequences TUB']['Value'][0]['Name']['Value'])
def test_serialize_from_biolomics(self):
ws_strain = STRAIN_WS
strain = strain_from_biolomics(ws_strain)
self.assertEqual(strain.record_id, 148038)
self.assertEqual(strain.record_name, 'MIRRI 2240561')
self.assertEqual(strain.taxonomy.long_name, 'Escherichia coli')
self.assertEqual(strain.growth.recommended_media, ['AAA'])
self.assertEqual(strain.collect.location.altitude, 121)
self.assertEqual(strain.collect.location.country, 'ESP')
self.assertEqual(strain.applications, 'health')
self.assertEqual(strain.id.strain_id, 'TESTCC 1')
self.assertEqual(strain.collect.date.strfdate, '19910101')
self.assertEqual(strain.taxonomy.comments, 'lalalalla')
self.assertEqual(strain.catalog_inclusion_date.strfdate, '19850502')
self.assertIn('NCTC, National Collection of Type ', strain.deposit.who)
self.assertTrue(strain.is_potentially_harmful)
self.assertEqual(strain.form_of_supply, ['Agar', 'Lyo'])
self.assertTrue(strain.genetics.gmo)
self.assertEqual(strain.genetics.gmo_construction, 'instructrion to build')
self.assertEqual(strain.genetics.genotype, 'some genotupe')
self.assertEqual(strain.history, ['newer', 'In the middle', 'older'])
self.assertEqual(strain.taxonomy.infrasubspecific_name, 'serovar tete')
self.assertEqual(strain.isolation.who, 'the isolator')
self.assertEqual(strain.isolation.date.strfdate, '19000101')
self.assertEqual(strain.mta_files, ['https://example.com'])
self.assertEqual(strain.genetics.mutant_info, 'x-men')
self.assertEqual(strain.collect.habitat_ontobiotope, 'OBT:000190')
self.assertEqual(strain.taxonomy.organism_type[0].name, 'Archaea')
self.assertEqual(strain.other_numbers[0].strain_id, 'aaa a')
self.assertEqual(strain.other_numbers[1].strain_id, 'aaa3 a3')
self.assertEqual(strain.pathogenicity, 'illness')
self.assertEqual(strain.genetics.plasmids, ['asda'])
self.assertEqual(strain.genetics.ploidy, 9)
self.assertFalse(strain.is_subject_to_quarantine)
self.assertEqual(strain.risk_group, '1')
self.assertFalse(strain.is_from_registered_collection)
self.assertEqual(strain.growth.tested_temp_range, {'min': 29, 'max': 32})
BIOLOMICSSEQ = {
'RecordDetails': {
'Barcode level': {'FieldType': 20, 'Value': 'undefined'},
'DNA extract number': {'FieldType': 5, 'Value': ''},
'DNA sequence': {'FieldType': 14,
'Value': {'Sequence': 'caaaggaggccttctccctcttcgtaag'}},
'Editing state': {'FieldType': 20, 'Value': 'Auto import'},
'Forward primer(s)': {'FieldType': 5, 'Value': ''},
'Genbank': {'FieldType': 21, 'Value': []},
'INSDC number': {'FieldType': 5, 'Value': 'AATGAT'},
'Literature': {'FieldType': 21, 'Value': []},
'Literature1': {'FieldType': 118, 'Value': []},
'Marker name': {'FieldType': 5, 'Value': 'CaM'},
'Privacy': {'FieldType': 20, 'Value': 'undefined'},
'Quality': {'FieldType': 5, 'Value': ''},
'Remarks': {'FieldType': 5, 'Value': ''},
'Reverse primer(s)': {'FieldType': 5, 'Value': ''},
'Review state': {'FieldType': 5, 'Value': ''},
'Strain number': {'FieldType': 5, 'Value': 'MUM 02.54'}},
'RecordId': 101,
'RecordName': 'MUM 02.54 - CaM'}
class SequenceSerializerTest(unittest.TestCase):
def test_from_biolomics(self):
marker = sequence_from_biolomics(BIOLOMICSSEQ)
self.assertEqual(marker.record_name, BIOLOMICSSEQ['RecordName'])
self.assertEqual(marker.record_id, BIOLOMICSSEQ['RecordId'])
self.assertEqual(marker.marker_type, BIOLOMICSSEQ['RecordDetails']['Marker name']['Value'])
self.assertEqual(marker.marker_id, BIOLOMICSSEQ['RecordDetails']['INSDC number']['Value'])
self.assertEqual(marker.marker_seq, BIOLOMICSSEQ['RecordDetails']['DNA sequence']['Value']['Sequence'])
def test_to_biolomics(self):
marker = GenomicSequenceBiolomics()
marker.marker_id = 'GGAAUUA'
marker.marker_seq = 'aattgacgat'
marker.marker_type = 'CaM'
marker.record_name = 'peioMarker'
marker.record_id = 111
ws_seq = sequence_to_biolomics(marker)
expected = {'RecordId': marker.record_id,
'RecordName': marker.record_name,
'RecordDetails': {
'INSDC number': {'Value': marker.marker_id, 'FieldType': 'E'},
'DNA sequence': {'Value': {'Sequence': marker.marker_seq}, 'FieldType': 'N'},
'Marker name': {'Value': marker.marker_type, 'FieldType': 'E'}}}
self.assertEqual(ws_seq, expected)
BIOLOMICS_MEDIUM = {
"RecordId": 100,
"RecordName": "MA20S",
"RecordDetails": {
"Full description": {
"Value": "mout agar+20% saccharose",
"FieldType": 5
},
"Ingredients": {
"Value": "Malt extract\r\n\tDilute brewery malt with water to 10% sugar solution (level 10 on Brix saccharose meter), 15 minutes at 121 C\r\nsaccharose\t200g\r\ndistilled water\t0.6l\r\nagar\t15g\r\n",
"FieldType": 5
},
"Link to full description": {
"Value": [],
"FieldType": 21
},
"Medium description": {
"Value": "",
"FieldType": 5
},
"Other name": {
"Value": "",
"FieldType": 5
},
"pH": {
"Value": "7 with KOH",
"FieldType": 5
},
"Remarks": {
"Value": "",
"FieldType": 5
},
"Reference": {
"Value": "",
"FieldType": 5
},
"Sterilization conditions": {
"Value": "15 minutes at 121 C",
"FieldType": 5
}
}
}
class MediumSerializerTest(unittest.TestCase):
def test_from_biolomics(self):
medium = growth_medium_from_biolomics(BIOLOMICS_MEDIUM)
self.assertEqual(medium.record_id, BIOLOMICS_MEDIUM['RecordId'])
self.assertEqual(medium.record_name, BIOLOMICS_MEDIUM['RecordName'])
self.assertEqual(medium.ingredients, BIOLOMICS_MEDIUM['RecordDetails']['Ingredients']['Value'])
self.assertEqual(medium.full_description, BIOLOMICS_MEDIUM['RecordDetails']['Full description']['Value'])
self.assertEqual(medium.ph, BIOLOMICS_MEDIUM['RecordDetails']['pH']['Value'])
BIOLOMICS_BIBLIOGRAPHY = {
"RecordId": 100,
"RecordName": "Miscellaneous notes on Mucoraceae",
"RecordDetails": {
"Associated strains": {
"Value": [],
"FieldType": 118
},
"Associated taxa": {
"Value": [],
"FieldType": 118
},
"Authors": {
"Value": "Schipper, M.A.A.; Samson, R.A.",
"FieldType": 5
},
"Associated sequences": {
"Value": [],
"FieldType": 118
},
"Abstract": {
"Value": "",
"FieldType": 5
},
"Collection": {
"Value": "",
"FieldType": 5
},
"DOI number": {
"Value": "",
"FieldType": 5
},
"Editor(s)": {
"Value": "",
"FieldType": 5
},
"Full reference": {
"Value": "",
"FieldType": 5
},
"Hyperlink": {
"Value": [],
"FieldType": 21
},
"ISBN": {
"Value": "",
"FieldType": 5
},
"ISSN": {
"Value": "",
"FieldType": 5
},
"Issue": {
"Value": "",
"FieldType": 5
},
"Journal": {
"Value": "Mycotaxon",
"FieldType": 5
},
"Journal-Book": {
"Value": "",
"FieldType": 5
},
"Keywords": {
"Value": "",
"FieldType": 5
},
"Page from": {
"Value": "475",
"FieldType": 5
},
"Page to": {
"Value": "491",
"FieldType": 5
},
"Publisher": {
"Value": "",
"FieldType": 5
},
"PubMed ID": {
"Value": "",
"FieldType": 5
},
"Volume": {
"Value": "50",
"FieldType": 5
},
"Year": {
"Value": 1994,
"FieldType": 4
}
}
}
class BibliographySerializerTest(unittest.TestCase):
def test_from_biolomics(self):
pub = literature_from_biolomics(BIOLOMICS_BIBLIOGRAPHY)
self.assertEqual(pub.record_name, "Miscellaneous notes on Mucoraceae")
self.assertEqual(pub.record_id, 100)
self.assertEqual(pub.year, 1994)
self.assertEqual(pub.authors, "Schipper, M.A.A.; Samson, R.A.")
def test_to_biolomics(self):
pub = Publication()
pub.title = 'My title'
pub.year = 1992
pub.authors = 'me and myself'
pub.pubmed_id = '1112222'
pub.issue = 'issue'
ws_data = literature_to_biolomics(pub)
expected = {
'RecordDetails': {
'Authors': {'FieldType': 'E', 'Value': 'me and myself'},
'PubMed ID': {'FieldType': 'E', 'Value': '1112222'},
'Issue': {'FieldType': 'E', 'Value': 'issue'},
'Year': {'FieldType': 'D', 'Value': 1992}},
'RecordName': 'My title'}
self.assertDictEqual(expected, ws_data)
def test_to_biolomics2(self):
pub = Publication()
pub.pubmed_id = '1112222'
ws_data = literature_to_biolomics(pub)
expected = {
'RecordDetails': {
'PubMed ID': {'FieldType': 'E', 'Value': '1112222'}},
'RecordName': f'PUBMED:{pub.pubmed_id}'}
self.assertDictEqual(expected, ws_data)
pub = Publication()
pub.doi = 'doi.er/111/12131'
ws_data = literature_to_biolomics(pub)
expected = {
'RecordDetails': {
'DOI number': {'FieldType': 'E', 'Value': pub.doi}},
'RecordName': f'DOI:{pub.doi}'}
self.assertDictEqual(expected, ws_data)
if __name__ == "__main__":
import sys;
sys.argv = ['', 'BibliographySerializerTest']
unittest.main()
+156
View File
@@ -0,0 +1,156 @@
import unittest
from mirri.biolomics.remote.endoint_names import STRAIN_WS
from .utils import VERSION, SERVER_URL, create_full_data_strain
from mirri.biolomics.settings import CLIENT_ID, SECRET_ID, USERNAME, PASSWORD
from mirri.biolomics.remote.biolomics_client import BiolomicsMirriClient
from mirri.biolomics.pipelines.strain import retrieve_strain_by_accession_number
class BiolomicsStrainClientTest(unittest.TestCase):
def setUp(self):
self.client = BiolomicsMirriClient(SERVER_URL, VERSION, CLIENT_ID,
SECRET_ID, USERNAME, PASSWORD)
def test_retrieve_strain_by_id(self):
record_id = 14803
strain = self.client.retrieve_by_id(STRAIN_WS, record_id)
self.assertEqual(strain.record_id, record_id)
print(strain.record_name)
def test_retrieve_strain_by_name(self):
record_id = 14803
record_name = 'MIRRI0014803'
strain = self.client.retrieve_by_name(STRAIN_WS, record_name)
self.assertEqual(strain.record_name, record_name)
self.assertEqual(strain.record_id, record_id)
def test_search_strain(self):
accession_number = "BEA 0014B"
query = {"Query": [{"Index": 0,
"FieldName": "Collection accession number",
"Operation": "TextExactMatch",
"Value": accession_number}],
"Expression": "Q0",
"DisplayStart": 0,
"DisplayLength": 10}
search_response = self.client.search(STRAIN_WS, query)
self.assertEqual(search_response['total'], 1)
self.assertEqual(search_response['records'][0].id.strain_id,
accession_number)
def test_search_strain4(self):
accession_number = "TESTCC 1"
query = {"Query": [{"Index": 0,
"FieldName": "Collection accession number",
"Operation": "TextExactMatch",
"Value": accession_number}],
"Expression": "Q0",
"DisplayStart": 0,
"DisplayLength": 10}
search_response = self.client.search(STRAIN_WS, query)
for strain in search_response['records']:
print(strain)
self.client.delete_by_id(STRAIN_WS, strain.record_id)
def test_search_strain_no_found(self):
accession_number = "BEA 0014B_"
query = {"Query": [{"Index": 0,
"FieldName": "Collection accession number",
"Operation": "TextExactMatch",
"Value": accession_number}],
"Expression": "Q0",
"DisplayStart": 0,
"DisplayLength": 10}
search_response = self.client.search(STRAIN_WS, query)
self.assertEqual(search_response['total'], 0)
self.assertFalse(search_response['records'])
def test_create_strain(self):
strain = create_full_data_strain()
strain.taxonomy.interspecific_hybrid = None
record_id = None
try:
new_strain = self.client.create(STRAIN_WS, strain)
record_id = new_strain.record_id
self.assertIsNone(new_strain.taxonomy.interspecific_hybrid)
self.assertEqual(new_strain.growth.recommended_media, ['AAA'])
self.assertEqual(new_strain.id.strain_id, strain.id.strain_id)
finally:
if record_id is not None:
self.client.delete_by_id(STRAIN_WS, record_id)
def test_update_strain(self):
strain = create_full_data_strain()
record_id = None
try:
new_strain = self.client.create(STRAIN_WS, strain)
record_id = new_strain.record_id
self.assertEqual(new_strain.id.strain_id, strain.id.strain_id)
self.assertFalse(new_strain.taxonomy.interspecific_hybrid)
new_strain.id.number = '2'
new_strain.taxonomy.interspecific_hybrid = None
updated_strain = self.client.update(STRAIN_WS, new_strain)
self.assertEqual(updated_strain.id.strain_id, new_strain.id.strain_id)
self.assertIsNone(updated_strain.taxonomy.interspecific_hybrid)
retrieved_strain = self.client.retrieve_by_id(STRAIN_WS, record_id)
self.assertEqual(retrieved_strain.id.strain_id, new_strain.id.strain_id)
self.assertIsNone(retrieved_strain.taxonomy.interspecific_hybrid)
finally:
if record_id is not None:
print('deleting')
self.client.delete_by_id(STRAIN_WS, record_id)
def test_update_strain_pathogenicity(self):
strain = create_full_data_strain()
print(strain.pathogenicity)
record_id = None
try:
new_strain = self.client.create(STRAIN_WS, strain)
record_id = new_strain.record_id
self.assertEqual(new_strain.id.strain_id, strain.id.strain_id)
self.assertEqual(new_strain.pathogenicity, 'illness')
new_strain.pathogenicity = None
updated_strain = self.client.update(STRAIN_WS, new_strain)
self.assertEqual(updated_strain.id.strain_id, new_strain.id.strain_id)
self.assertIsNone(updated_strain.pathogenicity)
retrieved_strain = self.client.retrieve_by_id(STRAIN_WS, record_id)
self.assertEqual(retrieved_strain.id.strain_id, new_strain.id.strain_id)
self.assertIsNone(retrieved_strain.pathogenicity)
finally:
if record_id is not None:
self.client.delete_by_id(STRAIN_WS, record_id)
def test_search_by_accession_number(self):
accession_number = "BEA 0014B"
strain = retrieve_strain_by_accession_number(self.client, accession_number)
self.assertEqual(strain.id.strain_id, accession_number)
def test_search_by_accession_number(self):
accession_number = "BEA 0014B_"
strain = retrieve_strain_by_accession_number(self.client, accession_number)
self.assertFalse(strain)
class BiolomicsClientGrowthMediaTest(unittest.TestCase):
def setUp(self):
self.client = BiolomicsMirriClient(SERVER_URL, VERSION, CLIENT_ID,
SECRET_ID, USERNAME, PASSWORD)
def xtest_growth_media_by_name(self):
gm = self.client.retrieve('growth_media', 'AAA')
self.assertEqual(gm['Record Id'], 1)
if __name__ == "__main__":
# import sys;sys.argv = ['',
# 'BiolomicsWriter.test_mirri_excel_parser_invalid']
unittest.main()
+99
View File
@@ -0,0 +1,99 @@
from mirri.biolomics.serializers.strain import StrainMirri
from mirri.entities.strain import StrainId, OrganismType
from mirri.entities.sequence import GenomicSequence
from mirri.entities.date_range import DateRange
from mirri.entities.publication import Publication
from mirri.settings import NAGOYA_NO_RESTRICTIONS
VERSION = 'v2'
SERVER_URL = 'https://webservices.bio-aware.com/mirri_test'
def create_full_data_strain():
strain = StrainMirri()
strain.id.number = "1"
strain.id.collection = "TESTCC"
strain.id.url = "https://cect/2342"
strain.restriction_on_use = "no_restriction"
strain.nagoya_protocol = NAGOYA_NO_RESTRICTIONS
strain.abs_related_files = ['https://example.com']
strain.mta_files = ['https://example.com']
strain.other_numbers.append(StrainId(collection="aaa", number="a"))
strain.other_numbers.append(StrainId(collection="aaa3", number="a3"))
strain.is_from_registered_collection = False
strain.risk_group = '1'
strain.is_potentially_harmful = True
strain.is_subject_to_quarantine = False
strain.taxonomy.organism_type = [OrganismType(2)]
strain.taxonomy.genus = 'Escherichia'
strain.taxonomy.species = 'coli'
strain.taxonomy.interspecific_hybrid = False
strain.taxonomy.infrasubspecific_name = 'serovar tete'
strain.taxonomy.comments = 'lalalalla'
strain.status = "type of Bacillus alcalophilus"
strain.history = 'firstplave < seconn place < third place'
strain.deposit.who = "NCTC, National Collection of Type Cultures - NCTC, London, United Kingdom of Great Britain and Northern Ireland."
strain.deposit.date = DateRange(year=1985, month=5, day=2)
strain.catalog_inclusion_date = DateRange(year=1985, month=5, day=2)
strain.collect.location.country = "ESP"
strain.collect.location.state = "una state"
strain.collect.location.municipality = "one municipality"
strain.collect.location.longitude = 23.3
strain.collect.location.latitude = 23.3
strain.collect.location.altitude = 121
strain.collect.location.site = "somewhere in the world"
strain.collect.habitat_ontobiotope = "OBT:000190"
strain.collect.habitat = 'some habitat'
strain.collect.who = "the collector"
strain.collect.date = DateRange(year=1991)
strain.isolation.date = DateRange(year=1900)
strain.isolation.who = 'the isolator'
strain.isolation.substrate_host_of_isolation = 'some substrate'
# already existing media in test_mirri
strain.growth.recommended_temp = {'min': 30, 'max': 30}
strain.growth.recommended_media = ["AAA"]
strain.growth.tested_temp_range = {'min': 29, 'max': 32}
strain.form_of_supply = ["Agar", "Lyo"]
#strain.other_denominations = ["lajdflasjdldj"]
gen_seq = GenomicSequence()
gen_seq.marker_id = "pepe"
gen_seq.marker_type = "16S rRNA"
strain.genetics.markers.append(gen_seq)
strain.genetics.ploidy = 9
strain.genetics.genotype = 'some genotupe'
strain.genetics.gmo = True
strain.genetics.gmo_construction = 'instructrion to build'
strain.genetics.mutant_info = 'x-men'
strain.genetics.sexual_state = 'MT+A'
strain.genetics.plasmids = ['asda']
strain.genetics.plasmids_in_collections = ['asdasda']
pub = Publication()
pub.title = "The genus Amylomyces"
strain.publications = [pub]
strain.plant_pathogenicity_code = 'PATH:001'
strain.pathogenicity = 'illness'
strain.enzyme_production = 'some enzimes'
strain.production_of_metabolites = 'big factory of cheese'
strain.applications = 'health'
strain.remarks = 'no remarks for me'
return strain
if __name__ == '__main__':
strain = create_full_data_strain()
print(strain.collect.habitat_ontobiotope)