def get_subunit_structure(item, entity='all'): from ._add_reference_to_evidence import _add_reference_to_evidence output = [] accession = item['uniprot']['entry']['accession'][0] ### Info in comment for comment in item['uniprot']['entry']['comment']: if comment['@type']=='subunit': if type(comment['text'])==list: for comment_subunit in comment['text']: subunit = evi.Evidence() subunit.value = comment_subunit['#text'] if '@evidence' in comment_subunit: evidence_numbers_in_db = comment_subunit['@evidence'].split(' ') for evidence_number_in_db in evidence_numbers_in_db: evidence_in_db = item['uniprot']['entry']['evidence'][int(evidence_number_in_db)-1] if evidence_in_db['@key']!=evidence_number_in_db: raise ValueError('Evidence number does not match evidence @key') _add_reference_to_evidence(subunit, evidence_in_db) subunit.add_reference({'database':'UniProtKB', 'id':accession}) output.append(subunit) else: subunit = evi.Evidence() subunit.value = comment['text']['#text'] if '@evidence' in comment['text']: evidence_numbers_in_db = comment['text']['@evidence'].split(' ') for evidence_number_in_db in evidence_numbers_in_db: evidence_in_db = item['uniprot']['entry']['evidence'][int(evidence_number_in_db)-1] if evidence_in_db['@key']!=evidence_number_in_db: raise ValueError('Evidence number does not match evidence @key') _add_reference_to_evidence(subunit, evidence_in_db) subunit.add_reference({'database':'UniProtKB', 'id':accession}) output.append(subunit) if len(output)==0: output = None elif len(output)==1: output = output[0] return output
def get_activity_regulation(item, entity='all'): from ._add_reference_to_evidence import _add_reference_to_evidence from .get_uniprot import get_uniprot output = [] uniprot = get_uniprot(item, entity=entity) ref_uniprot = uniprot.references[0] ### Info in comment for comment in item['uniprot']['entry']['comment']: if comment['@type'] == 'activity regulation': if type(comment) != OrderedDict: raise ValueError( "Comment type not recognized for activity regulation") comment_text = comment['text'] if type(comment_text) in [OrderedDict, str]: comment_text = [comment_text] if type(comment_text) != list: raise ValueError( "Text in comment not recognized for activity regulation") for aux in comment_text: evidence = evi.Evidence() if type(aux) == OrderedDict: evidence.value = aux['#text'] if '@evidence' in aux: evidence_numbers_in_db = aux['@evidence'].split(' ') for evidence_number_in_db in evidence_numbers_in_db: evidence_in_db = item['uniprot']['entry'][ 'evidence'][int(evidence_number_in_db) - 1] if evidence_in_db['@key'] != evidence_number_in_db: raise ValueError( 'Evidence number does not match evidence @key' ) _add_reference_to_evidence(evidence, evidence_in_db) elif type(aux) == str: evidence.value = aux evidence.add_reference(ref_uniprot) output.append(evidence) return output
def get_function(item, entity='all'): from ._add_reference_to_evidence import _add_reference_to_evidence from ._get_reference_from_dbevidence import _get_reference_from_dbevidence from .get_uniprot_id import get_uniprot_id output = {'function':[], 'references':[], 'notes':[]} uniprot = get_uniprot_id(item, entity=entity) ref_uniprot = uniprot.references[0] ### Info in comment for comment in item['uniprot']['entry']['comment']: if comment['@type']=='function': if type(comment)!=OrderedDict: raise ValueError("Comment type not recognized for function") comment_text = comment['text'] if type(comment_text) in [OrderedDict, str]: comment_text = [comment_text] if type(comment_text)!=list: raise ValueError("Text in comment not recognized for function") for aux in comment_text: evidence = evi.Evidence() if type(aux)==OrderedDict: evidence.value = aux['#text'] if '@evidence' in aux: evidence_numbers_in_db = aux['@evidence'].split(' ') for evidence_number_in_db in evidence_numbers_in_db: ref = _get_reference_from_dbevidence(int(evidence_number_in_db), item) evidence.add_reference(ref) output['references'].append(ref) elif type(aux)==str: evidence.value = aux evidence.add_reference(ref_uniprot) output['function'].append(evidence) output['references'].append(ref_uniprot) return output
def get_ec(item, entity='all'): from ._add_reference_to_evidence import _add_reference_to_evidence from .get_dbreference import get_dbreference in_name = False in_db = False if 'ecNumber' in item['uniprot']['entry']['protein']['recommendedName']: ecNumber = item['uniprot']['entry']['protein']['recommendedName'][ 'ecNumber'] evidence = evi.Evidence() if '#text' in ecNumber: evidence.value = ecNumber['#text'] if '@evidence' in ecNumber: evidence_numbers_in_db = ecNumber['@evidence'].split() for evidence_number_in_db in evidence_numbers_in_db: evidence_in_db = item['uniprot']['entry']['evidence'][ int(evidence_number_in_db) - 1] if evidence_in_db['@key'] != evidence_number_in_db: raise ValueError( 'Evidence number does not match evidence @key') _add_reference_to_evidence(evidence, evidence_in_db) accession = item['uniprot']['entry']['accession'][0] evidence.add_reference({'database': 'UniProtKB', 'id': accession}) evidence_in_name = evidence in_name = True evidence = get_dbreference(item, dbname='EC') if evidence is not None: evidence_in_db = evidence in_db = True if (in_db == False) and (in_name == False): return None elif (in_db == True) and (in_name == True): return evi.join([evidence_in_name, evidence_in_db]) else: raise ValueError("EC is not in name and neither in dbreference")
def get_metabolic_pathways(item, entity='all'): from ._add_reference_to_evidence import _add_reference_to_evidence from .get_uniprot import get_uniprot output = [] uniprot = get_uniprot(item, entity=entity) ref_uniprot = uniprot.references[0] ### Info in comment for comment in item['uniprot']['entry']['comment']: if comment['@type'] == 'pathway': if type(comment) != OrderedDict: raise ValueError( "Comment type not recognized for methabolic pathway") evidence = evi.Evidence() evidence.value = comment['text'] if '@evidence' in comment: evidence_numbers_in_db = comment['@evidence'].split(' ') for evidence_number_in_db in evidence_numbers_in_db: evidence_in_db = item['uniprot']['entry']['evidence'][ int(evidence_number_in_db) - 1] if evidence_in_db['@key'] != evidence_number_in_db: raise ValueError( 'Evidence number does not match evidence @key') _add_reference_to_evidence(evidence, evidence_in_db) evidence.add_reference(ref_uniprot) output.append(evidence) return output
def get_organism(item, entity='all', as_card=False): from sabueso.cards import OrganismCard, organism_dict from ._add_reference_to_evidence import _add_reference_to_evidence output = deepcopy(organism_dict) accession = item['uniprot']['entry']['accession'][0] if 'organism' in item['uniprot']['entry']: common_name = evi.Evidence() scientific_name = evi.Evidence() ncbi_taxonomy = evi.Evidence() organism = item['uniprot']['entry']['organism'] dbref_type = organism['dbReference']['@type'] dbref_id = organism['dbReference']['@id'] if dbref_type != 'NCBI Taxonomy': raise ValueError('Unknown reference in database') ncbi_taxonomy.value = dbref_id ncbi_taxonomy.add_reference({ 'database': 'NCBI_Taxonomy', 'id': dbref_id }) ncbi_taxonomy.add_reference({'database': 'UniProtKB', 'id': accession}) output['ncbi_taxonomy'] = ncbi_taxonomy if type(organism['name']) == list: for name in organism['name']: if name['@type'] == 'common': common_name.value = name['#text'] common_name.add_reference({ 'database': 'NCBI_Taxonomy', 'id': dbref_id }) common_name.add_reference({ 'database': 'UniProtKB', 'id': accession }) output['common_name'] = common_name if name['@type'] == 'scientific': scientific_name.value = name['#text'] scientific_name.add_reference({ 'database': 'NCBI_Taxonomy', 'id': dbref_id }) scientific_name.add_reference({ 'database': 'UniProtKB', 'id': accession }) output['scientific_name'] = scientific_name else: common_name.value = organism['name']['#text'] common_name.add_reference({ 'database': 'NCBI_Taxonomy', 'id': dbref_id }) common_name.add_reference({ 'database': 'UniProtKB', 'id': accession }) output['common_name'] = common_name output['references'].append( evi.reference({ 'database': 'NCBI_Taxonomy', 'id': dbref_id })) output['references'].append( evi.reference({ 'database': 'UniProtKB', 'id': accession })) if as_card: output = OrganismCard(output) return output
def get_catalytic_activity(item, entity='all', as_cards=False): from sabueso.cards import CatalyticActivityCard, catalytic_activity_dict from ._add_reference_to_evidence import _add_reference_to_evidence from ._get_reference_from_dbevidence import _get_reference_from_dbevidence from ._get_reference_from_dbreference import _get_reference_from_dbreference from .get_uniprot import get_uniprot output = [] uniprot = get_uniprot(item, entity=entity) ref_uniprot = uniprot.references[0] ### Info in comment for comment in item['uniprot']['entry']['comment']: if comment['@type'] == 'catalytic activity': if type(comment) != OrderedDict: raise ValueError( "Comment type not recognized for catalytic activity") aux_dict = deepcopy(catalytic_activity_dict) aux_dict['reaction'] = evi.Evidence() aux_dict['physiological_direction'] = evi.Evidence() aux_dict['reaction'].value = comment['reaction']['text'] if '@evidence' in comment['reaction']: evidence_numbers = comment['reaction']['@evidence'].split(' ') for ii in evidence_numbers: ref = _get_reference_from_dbevidence(int(ii), item) if ref is not None: aux_dict['references'].append(ref) aux_dict['reaction'].add_reference(ref) if 'dbReference' in comment['reaction']: dbreference = comment['physiologicalReaction']['dbReference'] if type(dbreference) == OrderedDict: dbreference = [dbreference] for aux in dbreference: ref = _get_reference_from_dbreference( aux['@type'], aux['@id']) aux_dict['references'].append(ref) aux_dict['reaction'].add_reference(ref) aux_dict['physiological_direction'].value = comment[ 'physiologicalReaction']['@direction'] if '@evidence' in comment['physiologicalReaction']: evidence_numbers = comment['physiologicalReaction'][ '@evidence'].split(' ') for ii in evidence_numbers: ref = _get_reference_from_dbevidence(int(ii), item) if ref is not None: aux_dict['references'].append(ref) aux_dict['physiological_direction'].add_reference(ref) if 'dbReference' in comment['physiologicalReaction']: dbreference = comment['physiologicalReaction']['dbReference'] if type(dbreference) == OrderedDict: dbreference = [dbreference] for aux in dbreference: ref = _get_reference_from_dbreference( aux['@type'], aux['@id']) aux_dict['references'].append(ref) aux_dict['physiological_direction'].add_reference(ref) aux_dict['references'].append(ref_uniprot) output.append(aux_dict) if as_cards: output = [CatalyticActivityCard(ii) for ii in output] return output
def get_location_in_cell(item, entity='all', as_cards=False): from sabueso.cards import LocationInCellCard, location_in_cell_dict from ._add_reference_to_evidence import _add_reference_to_evidence from ._get_reference_from_dbevidence import _get_reference_from_dbevidence from .get_uniprot import get_uniprot uniprot = get_uniprot(item, entity=entity) ref_uniprot = uniprot.references[0] output = [] for comment in item['uniprot']['entry']['comment']: if comment['@type'] == 'subcellular location': aux_dict = deepcopy(location_in_cell_dict) for subcellularLocation in comment['subcellularLocation']: aux_output = [] if 'location' in subcellularLocation: location = subcellularLocation['location'] if type(location) == OrderedDict: location = [location] for ll in location: evidence = evi.Evidence() evidence.value = ll['#text'] if '@evidence' in ll: evidence_numbers = ll['@evidence'].split(' ') for ii in evidence_numbers: ref = _get_reference_from_dbevidence( int(ii), item) if ref is not None: evidence.add_reference(ref) aux_dict['references'].append(ref) evidence.add_reference(ref_uniprot) aux_output.append(evidence) if 'topology' in subcellularLocation: topology = subcellularLocation['topology'] if type(topology) == OrderedDict: topology = [topology] for ll in topology: evidence = evi.Evidence() evidence.value = ll['#text'] if '@evidence' in ll: evidence_numbers = ll['@evidence'].split(' ') for ii in evidence_numbers: ref = _get_reference_from_dbevidence( int(ii), item) if ref is not None: evidence.add_reference(ref) aux_dict['references'].append(ref) evidence.add_reference(ref_uniprot) aux_output.append(evidence) aux_dict['location'].append(aux_output) evidence = evi.Evidence() evidence.value = comment['text']['#text'] if '@evidence' in comment['text']: evidence_numbers = comment['text']['@evidence'].split(' ') for ii in evidence_numbers: ref = _get_reference_from_dbevidence(int(ii), item) if ref is not None: evidence.add_reference(ref) aux_dict['references'].append(ref) evidence.add_reference(ref_uniprot) aux_dict['note'] = evidence output.append(aux_dict) if as_cards: output = [LocationInCellCard(ii) for ii in output] return output