@@ -482,8 +482,8 @@ def call(self, parameters):
482482 'application/json' )}
483483 request = requests .Request (
484484 'POST' , url , files = files , headers = headers )
485- prepared_request = request .prepare ()
486485 session = requests .Session ()
486+ prepared_request = session .prepare_request (request )
487487 resp = session .send (prepared_request )
488488 rdata = resp .content
489489 response_headers = {"responseHeaders" : dict (resp .headers )}
@@ -512,7 +512,6 @@ def __init__(
512512 user_key = None ,
513513 service_url = 'https://api.rosette.com/rest/v1/' ,
514514 retries = 5 ,
515- reuse_connection = True ,
516515 refresh_duration = 0.5 ,
517516 debug = False ):
518517 """ Create an L{API} object.
@@ -534,22 +533,18 @@ def __init__(
534533 refresh_duration = 0
535534
536535 self .num_retries = retries
537- self .reuse_connection = reuse_connection
538536 self .connection_refresh_duration = refresh_duration
539- self .http_connection = None
540537 self .options = {}
541538 self .customHeaders = {}
539+ self .maxPoolSize = 1
540+ self .session = requests .Session ()
542541
543- def _connect (self , parsedUrl ):
544- """ Simple connection method
545- @param parsedUrl: The URL on which to process
546- """
547- if not self .reuse_connection or self .http_connection is None :
548- loc = parsedUrl .netloc
549- if parsedUrl .scheme == "https" :
550- self .http_connection = httplib .HTTPSConnection (loc )
551- else :
552- self .http_connection = httplib .HTTPConnection (loc )
542+ def _set_pool_size (self ):
543+ adapter = requests .adapters .HTTPAdapter (pool_maxsize = self .maxPoolSize )
544+ if 'https:' in self .service_url :
545+ self .session .mount ('https://' , adapter )
546+ else :
547+ self .session .mount ('http://' , adapter )
553548
554549 def _make_request (self , op , url , data , headers ):
555550 """
@@ -561,32 +556,34 @@ def _make_request(self, op, url, data, headers):
561556 @param headers: request headers
562557 """
563558 headers ['User-Agent' ] = "RosetteAPIPython/" + _BINDING_VERSION
564- parsedUrl = urlparse .urlparse (url )
565-
566- self ._connect (parsedUrl )
567559
568560 message = None
569561 code = "unknownError"
570562 rdata = None
571563 response_headers = {}
564+
565+ request = requests .Request (op , url , data = data , headers = headers )
566+ session = requests .Session ()
567+ prepared_request = session .prepare_request (request )
568+
572569 for i in range (self .num_retries + 1 ):
573570 try :
574- self .http_connection .request (op , url , data , headers )
575- response = self .http_connection .getresponse ()
576- status = response .status
577- rdata = response .read ()
578- response_headers ["responseHeaders" ] = (
579- dict (response .getheaders ()))
571+ response = session .send (prepared_request )
572+ status = response .status_code
573+ rdata = response .content
574+ dict_headers = dict (response .headers )
575+ response_headers = {"responseHeaders" : dict_headers }
576+ if 'x-rosetteapi-concurrency' in dict_headers :
577+ if dict_headers ['x-rosetteapi-concurrency' ] != self .maxPoolSize :
578+ self .maxPoolSize = dict_headers ['x-rosetteapi-concurrency' ]
579+ self ._set_pool_size ()
580+
580581 if status == 200 :
581- if not self .reuse_connection :
582- self .http_connection .close ()
583582 return rdata , status , response_headers
584583 if status == 429 :
585584 code = status
586585 message = "{0} ({1})" .format (rdata , i )
587586 time .sleep (self .connection_refresh_duration )
588- self .http_connection .close ()
589- self ._connect (parsedUrl )
590587 continue
591588 if rdata is not None :
592589 try :
@@ -598,17 +595,15 @@ def _make_request(self, op, url, data, headers):
598595 else :
599596 code = status
600597 raise RosetteException (code , message , url )
598+
601599 except :
602600 raise
603- except ( httplib . BadStatusLine , gaierror ) :
601+ except requests . exceptions . RequestException as e :
604602 raise RosetteException (
605- "ConnectionError" ,
603+ e . message ,
606604 "Unable to establish connection to the Rosette API server" ,
607605 url )
608606
609- if not self .reuse_connection :
610- self .http_connection .close ()
611-
612607 raise RosetteException (code , message , url )
613608
614609 def _get_http (self , url , headers ):
@@ -644,6 +639,12 @@ def _post_http(self, url, data, headers):
644639
645640 return _ReturnObject (_my_loads (rdata , response_headers ), status )
646641
642+ def getPoolSize (self ):
643+ """
644+ Returns the maximum pool size, which is the returned x-rosetteapi-concurrency value
645+ """
646+ return int (self .maxPoolSize )
647+
647648 def setOption (self , name , value ):
648649 """
649650 Sets an option
0 commit comments