#
# This file is part of bioservices software
#
# Copyright (c) 2013-2014 - EBI-EMBL
#
# File author(s):
# https://github.com/cokelaer/bioservices
#
# Distributed under the GPLv3 License.
# See accompanying file LICENSE.txt or copy at
# http://www.gnu.org/licenses/gpl-3.0.html
#
# source: http://github.com/cokelaer/bioservices
# documentation: http://packages.python.org/bioservices
#
##############################################################################
"""Interface to OmniPath web service
.. topic:: What is OmniPath ?
:URL: http://omnipathdb.org
:URL: https://github.com/saezlab/pypath/blob/master/webservice.rst
.. highlights::
A comprehensive collection of literature curated human signaling pathways.
-- From OmniPath web site, March 2016
"""
from bioservices import REST
from easydev import to_list
from bioservices import logger
logger.name = __name__
[docs]class OmniPath(REST):
"""Interface to the `OmniPath <http://www.ebi.ac.uk/unichem/>`_ service
.. doctest::
>>> from bioservices import OmniPath
>>> o = OmniPath()
>>> net = o.get_network()
>>> interactions = o.get_interactions('P00533')
"""
_url = "http://omnipathdb.org/"
def __init__(self, verbose=False, cache=False):
"""**Constructor** OmniPath
:param verbose: set to False to prevent informative messages
"""
super(OmniPath, self).__init__(name="OmniPath", url=OmniPath._url, verbose=verbose, cache=cache)
[docs] def get_about(self):
"""Information about the version"""
res = self.http_get(self.url + "about").content
return res
[docs] def get_network(self, frmt="json"):
"""Get basic statistics about the whole network including sources"""
assert frmt in ["json", "tsv"], "frmt must be set to json or tsv"
res = self.http_get(self.url + "network", frmt=frmt, params={"format": frmt})
return res
[docs] def get_interactions(self, query="", frmt="json", fields=[]):
"""Interactions of proteins
:param str query: a valid uniprot identifier (e.g. P00533). It can also
be a list of uniprot identifiers, or a string with
comma-separated identifiers.
:param str fields: additional fields to be added to the output
(e.g., sources, references)
:param str frmt: format of the output (json or tabular)
Example::
res_one = o.get_interactions('P00533')
res_many = o.get_interactions('P00533,O15117,Q96FE5')
res_many = o.get_interactions(['P00533','O15117','Q96FE5'])
res_one = o.get_interactions('P00533', fields='sources')
res_one = o.get_interactions('P00533', fields=['source'])
res_one = o.get_interactions('P00533', fields=['source', 'references'])
You may also keep query to an empty string, but the entire DB will then
be downloaded. This may take time and the :attr:`timeout` may need to be
increased manually.
If frmt is set to TSV, the output is a TSV table with a header. If set
to json, a dictionary is returned.
"""
# make sure there is no spaces
if isinstance(query, list):
query = ",".join(query)
else:
try: # if input is a string
query = query.replace(" ", "")
except:
pass
assert frmt in ["json", "tsv"], "frmt must be set to json or tsv"
params = {}
params["format"] = frmt
from easydev import to_list
fields = to_list(fields)
if len(fields):
params["fields"] = fields
# TODO handle multiple fields
res = self.http_get(self.url + "interactions/%s" % query, frmt=frmt, params=params)
return res
[docs] def get_resources(self, frmt="json"):
"""Return statistics about the databases and their contents"""
res = self.http_get(self.url + "resources", frmt=frmt, params={"format": frmt})
return res
[docs] def get_info(self):
"""Currently returns HTML page"""
from easydev import browser
browser.browse(self.url + "info")
[docs] def get_ptms(self, query="", ptm_type=None, frmt="json", fields=[]):
"""List enzymes, substrates and PTMs
:param str query: a valid uniprot identifier (e.g. P00533). It can also
be a list of uniprot identifiers, or a string with
comma-separated identifiers.
:param str ptm_type: restrict the output to this type of PTM
(e.g., phosphorylation)
:param str fields: additional fields to be added to the output
(e.g., sources, references)
"""
# make sure there is no spaces
if isinstance(query, list):
query = ",".join(query)
else:
try: # if input is a string
query = query.replace(" ", "")
except:
pass
assert frmt in ["json", "tsv"], "frmt must be set to json or tsv"
params = {}
params["format"] = frmt
if len(fields):
params["fields"] = fields
res = self.http_get(self.url + "ptms/%s" % query, frmt="json", params=params)
return res