#!/usr/bin/env python# -*- coding: utf-8 -*-## This file is part of the `pypath` python module## Copyright 2014-2023# EMBL, EMBL-EBI, Uniklinik RWTH Aachen, Heidelberg University## Authors: see the file `README.rst`# Contact: Dénes Türei (turei.denes@gmail.com)## Distributed under the GPLv3 License.# See accompanying file LICENSE.txt or copy at# https://www.gnu.org/licenses/gpl-3.0.html## Website: https://pypath.omnipathdb.org/#fromfuture.utilsimportiteritemsimportreimportcollectionsimportitertoolsimportcsvimportpypath.resources.urlsasurlsimportpypath.share.curlascurlimportpypath.utils.mappingasmappingimportpypath.internals.interaasinteraimportpypath.core.entityasentityimportpypath.inputs.pubmedaspubmed_inputIcellnetRecord=collections.namedtuple('IcellnetRecord',['ligand','receptor','family','subfamily','classification','resources','references',])
[docs]deficellnet_interactions():url=urls.urls['icellnet']['url']c=curl.Curl(url,silent=False,large=True)bom=c.fileobj.read(1)# this file starts with an UTF8 BOMifbom!='\ufeff':c.fileobj.seek(0)tbl=list(csv.DictReader(c.result,delimiter=';'))forlineintbl:references=_icellnet_get_references(line)resources=_icellnet_get_resources(line)ifresources:references.extend([rforrinresourcesifr.isdigit()])resources=[rforrinresourcesifnotr.isdigit()]ligand_components=_icellnet_get_components(line,'Ligand')receptor_components=_icellnet_get_components(line,'Receptor')ligand=_icellnet_get_entity(ligand_components,references)receptor=_icellnet_get_entity(receptor_components,references)ifligandandreceptor:yieldIcellnetRecord(ligand=ligand,receptor=receptor,family=line['Family'].strip()orNone,subfamily=line['Subfamily'].strip()orNone,classification=([cls.strip().replace('.','').capitalize()forclsinline['Classifications'].split('/')]ifline['Classifications'].strip()elseNone),resources=resources,references=references,)
def_icellnet_get_components(line,prefix):genesymbols=[genesymbol.strip()forlabel,genesymboliniteritems(line)iflabel.startswith(prefix)andgenesymbol.strip()]return[uniprotforuniprotin(mapping.map_name0(genesymbol,'genesymbol','uniprot')forgenesymbolingenesymbols)ifuniprot]def_icellnet_get_entity(components,references):iflen(components)>1:returnintera.Complex(components=components,sources='ICELLNET',references=references,)eliflen(components)==1:returncomponents[0]def_icellnet_get_references(line):return[str(int(float(ref)))forrefinpubmed_input.only_pmids(refforrefin(_ref.strip()for_refinre.split(r'[,;]',line['PubMed ID']))ifref)]def_icellnet_get_resources(line):# the recent update of ICELLNET does not list the resources any more :(returnNonererami=re.compile(r'(Ramilowski)\d{4}')resource_synonyms={'Signor':'SIGNOR','guidetopharmacology.org':'Guide2Pharma','IUPHAR':'Guide2Pharma','IUPHAR-DB':'Guide2Pharma','GO_lig_rec':'GO-lig-rec','CellPhone':'CellPhoneDB','SignaLink':'SignaLink3','Innate':'InnateDB','Kegg':'KEGG',}resources=line['Source for interaction'].replace('Dinarello et al.2013 (Immunity)','Dinarello2013')resources={rerami.sub(r'\g<1>2015',resource_synonyms.get(res,res))forresin(_res.strip()for_resinre.split(r'[/,; ]',resources))}resources.discard('')resources.discard('DB')returnsorted(resources)orNone