Changeset 1733:548d1187a29f in orange-bioinformatics for _bioinformatics/obiKEGG/service.py


Ignore:
Timestamp:
03/05/13 19:48:00 (14 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Porting obiKEGG to use the new REST KEGG API.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _bioinformatics/obiKEGG/service.py

    r1716 r1733  
    11""" 
    2 SOAP service client. Needs suds library. 
    3   
     2 
    43""" 
    54from __future__ import absolute_import 
     
    76KEGG_WDSL = "http://soap.genome.jp/KEGG.wsdl" 
    87 
    9 import urllib2 
     8REST_API = "http://rest.kegg.jp/" 
    109 
    11 def suds_service(): 
    12     """ Return an suds service object with kegg api service methods. 
    13      
    14     >>> service = web_service() 
    15     >>> service.list_databases() 
    16     [(Definition){... 
    1710 
     11def slumber_service(): 
    1812    """ 
    19     from suds.client import Client 
    20     client = Client(KEGG_WDSL) 
    21     return client.service 
     13    Return a rest based service using `slumber` package 
     14    """ 
     15    import slumber 
     16    if not hasattr(slumber_service, "_cached"): 
     17        slumber_service._cached = slumber.API(REST_API) 
     18    return slumber_service._cached 
    2219 
    23 def suds_service_with_requests(): 
    24     import StringIO 
    25      
    26     from suds.client import Client 
    27     from suds.transport import Transport, TransportError 
    28     from suds.properties import Unskin 
    29      
    30     import requests 
    31  
    32     class RequestsResponse(object): 
    33         pass 
    34  
    35     class RequestsTransport(Transport): 
    36         def __init__(self, **kwargs): 
    37             Transport.__init__(self) 
    38             Unskin(self.options).update(kwargs) 
    39             self.cookies = {} 
    40              
    41         def send(self, request): 
    42             result = None 
    43             url = request.url 
    44             message = request.message 
    45             headers = request.headers 
    46             # This does not seem to work, every request seems 
    47             # to open a new connection 
    48             headers["Connection"] = "Keep-Alive" 
    49             try: 
    50                 response = requests.post(url, data=message,  
    51                                          headers=headers, 
    52                                          cookies=self.cookies) 
    53                      
    54                 self.proxy = self.options.proxy 
    55                 response.raise_for_status() 
    56                  
    57                 self.cookies.update(response.cookies) 
    58                 result = RequestsResponse() 
    59                 result.code = response.status_code 
    60                 result.headers = response.headers 
    61                 result.message = response.raw.read() 
    62                 return result 
    63                  
    64             except urllib2.HTTPError, e: 
    65                 if e.code in [202, 204]: 
    66                     return None 
    67                 else: 
    68                     raise TransportError(str(e), e.code, e.fp) 
    69                  
    70         def open(self, request): 
    71             url = request.url 
    72             message = request.message 
    73             try: 
    74                 response = requests.get(url) 
    75                 self.proxy = self.options.proxy 
    76                  
    77                 response.raise_for_status() 
    78                 return StringIO.StringIO(response.raw.read()) 
    79             except urllib2.HTTPError, e: 
    80                 raise TransportError(str(e), e.code, e.fp) 
    81              
    82     transport = RequestsTransport() 
    83     client = Client(KEGG_WDSL, transport=transport) 
    84     return client.service 
    85      
    86 def SOAPy_service(): 
    87     import SOAPy 
    8820 
    8921from . import conf 
    9022 
    91 default_service = suds_service 
    92 web_service = suds_service 
     23default_service = slumber_service 
    9324 
    94 if conf.params["service.transport"] == "requests": 
    95     try: 
    96         import requests     
    97         web_service = suds_service_with_requests 
    98     except ImportError: 
    99         import warnings 
    100         warnings.warn("requests package not installed.") 
    101          
    102 elif conf.params["service.transport"] == "urllib2": 
    103     pass 
    104  
    105  
     25web_service = slumber_service 
Note: See TracChangeset for help on using the changeset viewer.