#!/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/#"""Old server class working from a ``pypath.legacy.main.PyPath`` object."""importjsonimportpypath.omnipath.server.runasserver
defnetwork(self,req):hdr=['nodes','edges','is_directed','sources']val=[self.g.vcount(),self.g.ecount(),int(self.g.is_directed()),self.p.sources]ifb'format'inreq.argsandreq.args[b'format']==b'json':returnjson.dumps(dict(zip(hdr,val)))else:return'%s\n%s'%('\t'.join(hdr),'\t'.join([str(v)iftype(v)isnotlistelse';'.join(v)forvinval]))definteractions(self,req):fields=[b'sources',b'references']result=[]elist=self._get_eids(req)res=[]hdr=['source','target','is_directed','is_stimulation','is_inhibition']ifb'fields'inreq.args:hdr+=[f.decode('utf-8')forfinfieldsiffinb','.join(req.args[b'fields']).split(b',')]if(b'genesymbols'inreq.argsandself._parse_arg(req.args[b'genesymbols'])):genesymbols=Truehdr.insert(2,'source_genesymbol')hdr.insert(3,'target_genesymbol')else:genesymbols=Falseall_sources=set([])foreidinelist:e=self.g.es[eid]all_sources=all_sources|e['sources']fordin['straight','reverse']:uniprots=getattr(e['dirs'],d)ife['dirs'].dirs[uniprots]:thisEdge=[uniprots[0],uniprots[1]]ifgenesymbols:thisEdge.extend([self.g.vs[self.p.nodDct[uniprots[0]]]['label'],self.g.vs[self.p.nodDct[uniprots[1]]]['label']])thisEdge.extend([1,int(e['dirs'].is_stimulation(uniprots)),int(e['dirs'].is_inhibition(uniprots))])dsources=e['dirs'].get_dir(uniprots,sources=True)dsources=dsources|e['dirs'].get_dir('undirected',sources=True)if'sources'inhdr:thisEdge.append(list(dsources))if'references'inhdr:thisEdge.append([r.pmidforrinflat_list([rsfors,rsiniteritems(e['refs_by_source'])ifsindsources])])thisEdge.append(self._dip_urls(e))res.append(thisEdge)ifnote['dirs'].is_directed():thisEdge=[e['dirs'].nodes[0],e['dirs'].nodes[1]]ifgenesymbols:thisEdge.extend([self.g.vs[self.p.nodDct[e['dirs'].nodes[0]]]['label'],self.g.vs[self.p.nodDct[e['dirs'].nodes[1]]]['label']])thisEdge.extend([0,0,0])if'sources'inhdr:thisEdge.append(list(e['sources']))if'references'inhdr:thisEdge.append([r.pmidforrine['references']])thisEdge.append(self._dip_urls(e))res.append(thisEdge)if'DIP'inall_sources:hdr.append('dip_url')else:res=map(lambdar:r[:-1],res)ifb'format'inreq.argsandreq.args[b'format']==b'json':returnjson.dumps([dict(zip(hdr,r))forrinres])else:returnself._table_output(res,hdr,req)def_table_output(self,res,hdr,req):return'%s%s'%(''ifnotbool(req.args[b'header'])else'%s\n'%'\t'.join(hdr),'\n'.join(['\t'.join([';'.join(f)iftype(f)islistortype(f)issetelsestr(f)forfinr])forrinres]))def_get_eids(self,req):names=Noneiflen(req.postpath)<=1elsereq.postpath[1].split(',')ids=range(0,self.g.vcount())ifnamesisNoneelseself.p.names2vids(names)ids=set(ids)elist=set(range(0,self.g.ecount()))ifnamesisNoneelseset([])ifnamesisnotNone:alist=dict(zip(ids,[self.g.neighbors(i)foriinids]))forone,othersiniteritems(alist):fortwoinothers:e=self.g.get_eid(one,two,directed=True,error=False)ife!=-1:elist.add(e)ifself.g.is_directed():e=self.g.get_eid(two,one,directed=True,error=False)ife!=-1:elist.add(e)returnelistdefptms(self,req):fields=[b'is_stimulation',b'is_inhibition',b'sources',b'references']result=[]elist=self._get_eids(req)res=[]hdr=['enzyme','substrate','residue_type','residue_offset','modification']if(b'genesymbols'inreq.argsandself._parse_arg(req.args[b'genesymbols'])):genesymbols=Truehdr.insert(2,'enzyme_genesymbol')hdr.insert(3,'substrate_genesymbol')else:genesymbols=Falseifb'fields'inreq.args:hdr+=[f.decode('utf-8')forfinfieldsiffinb','.join(req.args[b'fields']).split(b',')]if'ptm'inself.g.es.attributes():foreidinelist:e=self.g.es[eid]forptmine['ptm']:if'ptmtype'notinreq.argsorptm.ptm.typinreq.args['ptmtype']:thisPtm=[ptm.domain.protein,ptm.ptm.protein]ifgenesymbols:thisPtm.extend([self.g.vs[self.p.nodDct[ptm.domain.protein]]['label'],self.g.vs[self.p.nodDct[ptm.ptm.protein]]['label']])thisPtm.extend([ptm.ptm.residue.name,ptm.ptm.residue.number,ptm.ptm.typ])if'is_stimulation'inhdr:thisPtm.append(int(e['dirs'].is_stimulation((ptm.domain.protein,ptm.ptm.protein))))if'is_inhibition'inhdr:thisPtm.append(int(e['dirs'].is_inhibition((ptm.domain.protein,ptm.ptm.protein))))if'sources'inhdr:thisPtm.append(list(ptm.ptm.sources))if'references'inhdr:thisPtm.append(list(ptm.refs))res.append(thisPtm)ifb'format'inreq.argsandreq.args[b'format']==b'json':returnjson.dumps([dict(zip(hdr,r))forrinres])else:returnself._table_output(res,hdr,req)defresources(self,req):hdr=['database','proteins','interactions','directions','stimulations','inhibitions','signs']res=[[# database names,# number of proteinslen([1forvinself.g.vsifsinv['sources']]),# number of interacting pairslen([1foreinself.g.esifsine['sources']]),# number of directionssum([sine['dirs'].sources[d] \
foreinself.g.esfordine['dirs'].which_dirs()]),# number of stimulationssum([sine['dirs'].positive_sources[d] \
foreinself.g.esfordine['dirs'].which_dirs()]),# number of inhibitionssum([sine['dirs'].negative_sources[d] \
foreinself.g.esfordine['dirs'].which_dirs()]),# number of signssum([sinsgforeinself.g.esfordine['dirs'].which_dirs() \
forsgin[e['dirs'].positive_sources[d],e['dirs'].negative_sources[d]]]),]forsinself.p.sources]ifb'format'inreq.argsandreq.args[b'format']==b'json':returnjson.dumps([dict(zip(hdr,r))forrinres])else:returnself._table_output(res,hdr,req)def_dip_urls(self,e):result=[]if'dip_id'ine.attributes():fordip_idine['dip_id']:try:result.append(urls.urls['dip']['ik']%int(dip_id.split('-')[1][:-1]))except:print(dip_id)return';'.join(result)