Package obitools :: Package eutils
[hide private]
[frames] | no frames]

Source Code for Package obitools.eutils

 1  import time 
 2  from urllib2 import urlopen 
 3  import shelve 
 4  from threading import Lock 
 5  import sys 
 6   
7 -class EUtils(object):
8 ''' 9 10 ''' 11 12 _last_request=0 13 _interval=3 14
15 - def __init__(self):
16 self._lock = Lock()
17
18 - def wait(self):
19 now=time.time() 20 delta = now - EUtils._last_request 21 while delta < EUtils._interval: 22 time.sleep(delta) 23 now=time.time() 24 delta = now - EUtils._last_request
25
26 - def _sendRequest(self,url):
27 self.wait() 28 EUtils._last_request=time.time() 29 t = EUtils._last_request 30 print >>sys.stderr,"Sending request to NCBI @ %f" % t 31 data = urlopen(url).read() 32 print >>sys.stderr,"Data red from NCBI @ %f (%f)" % (t,time.time()-t) 33 return data
34
35 - def setInterval(self,seconde):
36 EUtils._interval=seconde
37 38
39 -class EFetch(EUtils):
40 ''' 41 42 '''
43 - def __init__(self,db,tool='OBITools', 44 retmode='text',rettype="native", 45 server='eutils.ncbi.nlm.nih.gov'):
46 EUtils.__init__(self) 47 self._url = "http://%s/entrez/eutils/efetch.fcgi?db=%s&tool=%s&retmode=%s&rettype=%s" 48 self._url = self._url % (server,db,tool,retmode,rettype)
49 50
51 - def get(self,**args):
52 key = "&".join(['%s=%s' % x for x in args.items()]) 53 return self._sendRequest(self._url +"&" + key)
54