Changeset 1541:efd40e75bc7d in orange-bioinformatics


Ignore:
Timestamp:
02/02/12 16:31:07 (2 years ago)
Author:
ales_erjavec
Branch:
default
Message:

Added optional suds.transport.Transport subclass using requests package.

Location:
obiKEGG2
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • obiKEGG2/conf.py

    r1532 r1541  
    1010from StringIO import StringIO 
    1111 
    12 default = {"cache.path": "%HOME/.obiKEGG/", 
    13            "cache.store": "sqlite3", 
    14            "cache.kgml_invalidate": "always", #Can be session, always, release, never 
    15            } 
    1612 
    1713default = """ 
     
    2016store = sqlite3 
    2117kegg_invalidate = always 
     18 
     19[service] 
     20transport = requests 
    2221 
    2322""" 
  • obiKEGG2/service.py

    r1532 r1541  
    33  
    44""" 
     5from __future__ import absolute_import 
    56 
    67KEGG_WDSL = "http://soap.genome.jp/KEGG.wsdl" 
    78 
     9import urllib2 
    810def suds_service(): 
    911    """ Return an suds service object with kegg api service methods. 
     
    2022    return client.service 
    2123 
     24def suds_service_with_requests(): 
     25    from suds.client import Client 
     26    from suds.transport import Transport, TransportError 
     27    from suds.properties import Unskin 
     28     
     29    import requests 
     30 
     31    class RequestsResponse(object): 
     32        pass 
     33 
     34    class RequestsTransport(Transport): 
     35        def __init__(self, **kwargs): 
     36            Transport.__init__(self) 
     37            Unskin(self.options).update(kwargs) 
     38            self.cookies = {} 
     39             
     40        def send(self, request): 
     41            result = None 
     42            url = request.url 
     43#            print "URL", url 
     44            message = request.message 
     45            headers = request.headers 
     46            headers["Connection"] = "Keep-Alive" 
     47            try: 
     48                response = requests.post(url, data=message,  
     49                                         headers=headers, 
     50                                         cookies=self.cookies) 
     51                     
     52                self.proxy = self.options.proxy 
     53                response.raise_for_status() 
     54                 
     55                self.cookies.update(response.cookies) 
     56                result = RequestsResponse() 
     57                result.message = response.raw.read() 
     58                result.headers = response.headers 
     59                result.code = response.status_code 
     60                return result 
     61                 
     62            except urllib2.HTTPError, e: 
     63                if e.code in [202, 204]: 
     64                    return None 
     65                else: 
     66                    raise TransportError(str(e), e.code, e.fp) 
     67                 
     68        def open(self, request): 
     69            url = request.url 
     70            message = request.message 
     71            try: 
     72                respose = requests.get(url) 
     73                self.proxy = self.options.proxy 
     74                 
     75                respose.raise_for_status() 
     76                return response.raw 
     77            except urllib2.HTTPError, e: 
     78                raise TransportError(str(e), e.code, e.fp) 
     79             
     80    transport = RequestsTransport() 
     81    client = Client(KEGG_WDSL, transport=transport) 
     82    return client.service 
     83     
    2284def SOAPy_service(): 
    2385    import SOAPy 
    2486 
     87from . import conf 
     88 
     89default_service = suds_service 
    2590web_service = suds_service 
     91 
     92if conf.params["service.transport"] == "requests": 
     93    try: 
     94        import requests     
     95        web_service = suds_service_with_requests 
     96    except ImportError: 
     97        import warnings 
     98        warnings.warn("requests package not installed.") 
     99elif conf.params["service.transport"] == "urllib2": 
     100    pass 
     101 
     102 
Note: See TracChangeset for help on using the changeset viewer.