#!/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.utilsimportiteritemsimportreimportcollectionsimportbs4importxml.etree.cElementTreeasETimportpypath.share.curlascurlimportpypath.resources.urlsasurlsimportpypath.utils.mappingasmapping
[docs]defnetpath_interactions():result=[]repwnum=re.compile(r'NetPath_([0-9]+)_')mi='{net:sf:psidev:mi}'url=urls.urls['netpath_psimi']['url']c=curl.Curl(url,silent=False)data=c.resultdata=dict([(k,v)fork,viniteritems(data)ifk.endswith('xml')])pwnames=netpath_names()forpwfile,rawxmliniteritems(data):try:pwnum=repwnum.findall(pwfile)[0]except:sys.stdout.write('Error at processing file:\n')sys.stdout.write(pwfile)sys.stdout.write('\n')sys.stdout.flush()pwname=pwnames[pwnum]root=ET.fromstring(rawxml)foreinroot.findall(mi+'entry'):thisInt=()db=[pr.find(mi+'primaryRef').attrib['db']forprine.find(mi+'source').findall(mi+'xref')]refs=[]mets=[]forexine.find(mi+'experimentList').findall(mi+'experimentDescription'):forpminex.find(mi+'bibref').iter(mi+'primaryRef'):ifpm.attrib['db']=='pubmed':refs.append(pm.attrib['id'])formeinex.find(mi+'interactionDetectionMethod').\
iter(mi+'shortLabel'):mets.append(me.text)mols={}formoine.find(mi+'interactorList').findall(mi+'interactor'):iid=mo.attrib['id']name=mo.find(mi+'names').find(mi+'shortLabel').textentrez=''ifmo.find(mi+'xref')isnotNone:entrez=';'.join([ac.attrib['id']foracinmo.find(mi+'xref').findall(mi+'secondaryRef')ifac.attrib['db']=='Entrez gene'])mols[iid]=(name,entrez)theInt=e.find(mi+'interactionList').find(mi+'interaction')forpintheInt.find(mi+'participantList').findall(mi+'participant'):pid=p.find(mi+'interactorRef').textroles=''ifp.find(mi+'experimentalRoleList')isnotNone:roles=';'.join([rl.find(mi+'names').find(mi+'shortLabel').textforrlinp.find(mi+'experimentalRoleList').findall(mi+'experimentalRole')])mols[pid]+=(roles,)intTyp=(theInt.find(mi+'interactionType').find(mi+'names').find(mi+'shortLabel').text)molkeys=list(mols.keys())foriinrange(0,len(mols)-1):forjinrange(i,len(mols)):A=mols[molkeys[i]][0:2]B=mols[molkeys[j]][0:2]result.append(list(A)+list(B)+[';'.join(refs),';'.join(mets),intTyp,pwname])returnresult