5151
5252
5353class _ReturnObject :
54+
5455 def __init__ (self , js , code ):
5556 self ._json = js
5657 self .status_code = code
@@ -69,6 +70,7 @@ def _my_loads(obj, response_headers):
6970 d2 .update (response_headers )
7071 return d2
7172
73+
7274class RosetteException (Exception ):
7375 """Exception thrown by all Rosette API operations for errors local and remote.
7476
@@ -88,6 +90,7 @@ def __str__(self):
8890
8991
9092class _PseudoEnum :
93+
9194 def __init__ (self ):
9295 pass
9396
@@ -99,10 +102,17 @@ def validate(cls, value, name):
99102 values += [v ]
100103
101104 # this is still needed to make sure that the parameter NAMES are known.
102- # If python didn't allow setting unknown values, this would be a language error.
105+ # If python didn't allow setting unknown values, this would be a
106+ # language error.
103107 if value not in values :
104- raise RosetteException ("unknownVariable" , "The value supplied for " + name +
105- " is not one of " + ", " .join (values ) + "." , repr (value ))
108+ raise RosetteException (
109+ "unknownVariable" ,
110+ "The value supplied for " +
111+ name +
112+ " is not one of " +
113+ ", " .join (values ) +
114+ "." ,
115+ repr (value ))
106116
107117
108118class MorphologyOutput (_PseudoEnum ):
@@ -114,19 +124,22 @@ class MorphologyOutput(_PseudoEnum):
114124
115125
116126class _DocumentParamSetBase (object ):
127+
117128 def __init__ (self , repertoire ):
118129 self .__params = {}
119130 for k in repertoire :
120131 self .__params [k ] = None
121132
122133 def __setitem__ (self , key , val ):
123134 if key not in self .__params :
124- raise RosetteException ("badKey" , "Unknown Rosette parameter key" , repr (key ))
135+ raise RosetteException (
136+ "badKey" , "Unknown Rosette parameter key" , repr (key ))
125137 self .__params [key ] = val
126138
127139 def __getitem__ (self , key ):
128140 if key not in self .__params :
129- raise RosetteException ("badKey" , "Unknown Rosette parameter key" , repr (key ))
141+ raise RosetteException (
142+ "badKey" , "Unknown Rosette parameter key" , repr (key ))
130143 return self .__params [key ]
131144
132145 def validate (self ):
@@ -170,18 +183,25 @@ class DocumentParameters(_DocumentParamSetBase):
170183
171184 def __init__ (self ):
172185 """Create a L{DocumentParameters} object."""
173- _DocumentParamSetBase .__init__ (self , ("content" , "contentUri" , "language" , "genre" ))
186+ _DocumentParamSetBase .__init__ (
187+ self , ("content" , "contentUri" , "language" , "genre" ))
174188 self .file_name = ""
175189 self .useMultipart = False
176190
177191 def validate (self ):
178192 """Internal. Do not use."""
179193 if self ["content" ] is None :
180194 if self ["contentUri" ] is None :
181- raise RosetteException ("badArgument" , "Must supply one of Content or ContentUri" , "bad arguments" )
195+ raise RosetteException (
196+ "badArgument" ,
197+ "Must supply one of Content or ContentUri" ,
198+ "bad arguments" )
182199 else : # self["content"] not None
183200 if self ["contentUri" ] is not None :
184- raise RosetteException ("badArgument" , "Cannot supply both Content and ContentUri" , "bad arguments" )
201+ raise RosetteException (
202+ "badArgument" ,
203+ "Cannot supply both Content and ContentUri" ,
204+ "bad arguments" )
185205
186206 def serialize (self ):
187207 """Internal. Do not use."""
@@ -213,10 +233,12 @@ class RelationshipsParameters(DocumentParameters):
213233
214234 """Parameter object for relationships endpoint. Inherits from L(DocumentParameters), but allows the user
215235 to specify the relationships-unique options parameter."""
236+
216237 def __init__ (self ):
217238 """Create a L{RelationshipsParameters} object."""
218239 self .useMultipart = False
219- _DocumentParamSetBase .__init__ (self , ("content" , "contentUri" , "language" , "options" , "genre" ))
240+ _DocumentParamSetBase .__init__ (
241+ self , ("content" , "contentUri" , "language" , "options" , "genre" ))
220242
221243
222244class NameTranslationParameters (_DocumentParamSetBase ):
@@ -246,14 +268,26 @@ class NameTranslationParameters(_DocumentParamSetBase):
246268
247269 def __init__ (self ):
248270 self .useMultipart = False
249- _DocumentParamSetBase .__init__ (self , ("name" , "targetLanguage" , "entityType" , "sourceLanguageOfOrigin" ,
250- "sourceLanguageOfUse" , "sourceScript" , "targetScript" , "targetScheme" , "genre" ))
271+ _DocumentParamSetBase .__init__ (
272+ self ,
273+ ("name" ,
274+ "targetLanguage" ,
275+ "entityType" ,
276+ "sourceLanguageOfOrigin" ,
277+ "sourceLanguageOfUse" ,
278+ "sourceScript" ,
279+ "targetScript" ,
280+ "targetScheme" ,
281+ "genre" ))
251282
252283 def validate (self ):
253284 """Internal. Do not use."""
254285 for n in ("name" , "targetLanguage" ): # required
255286 if self [n ] is None :
256- raise RosetteException ("missingParameter" , "Required Name Translation parameter not supplied" , repr (n ))
287+ raise RosetteException (
288+ "missingParameter" ,
289+ "Required Name Translation parameter not supplied" ,
290+ repr (n ))
257291
258292
259293class NameSimilarityParameters (_DocumentParamSetBase ):
@@ -283,7 +317,10 @@ def validate(self):
283317 """Internal. Do not use."""
284318 for n in ("name1" , "name2" ): # required
285319 if self [n ] is None :
286- raise RosetteException ("missingParameter" , "Required Name Similarity parameter not supplied" , repr (n ))
320+ raise RosetteException (
321+ "missingParameter" ,
322+ "Required Name Similarity parameter not supplied" ,
323+ repr (n ))
287324
288325
289326class EndpointCaller :
@@ -331,10 +368,8 @@ def __finish_result(self, r, ename):
331368 else :
332369 complaint_url = ename + " " + self .suburl
333370
334- raise RosetteException (code ,
335- complaint_url + " : failed to communicate with Rosette" ,
336- msg )
337-
371+ raise RosetteException (code , complaint_url +
372+ " : failed to communicate with Rosette" , msg )
338373
339374 def info (self ):
340375 """Issues an "info" request to the L{EndpointCaller}'s specific endpoint.
@@ -405,8 +440,10 @@ def call(self, parameters):
405440 parameters = DocumentParameters ()
406441 parameters ['content' ] = text
407442 else :
408- raise RosetteException ("incompatible" , "Text-only input only works for DocumentParameter endpoints" ,
409- self .suburl )
443+ raise RosetteException (
444+ "incompatible" ,
445+ "Text-only input only works for DocumentParameter endpoints" ,
446+ self .suburl )
410447
411448 self .checker ()
412449
@@ -417,10 +454,22 @@ def call(self, parameters):
417454 if self .user_key is not None :
418455 headers ["X-RosetteAPI-Key" ] = self .user_key
419456 if self .useMultipart :
420- params = dict ((key , value ) for key , value in params_to_serialize .iteritems () if key == 'language' )
421- files = {'content' : (os .path .basename (parameters .file_name ), params_to_serialize ["content" ], 'text/plain' ),
422- 'request' : ('request_options' , json .dumps (params ), 'application/json' )}
423- request = requests .Request ('POST' , url , files = files , headers = headers )
457+ params = dict (
458+ (key ,
459+ value ) for key ,
460+ value in params_to_serialize .iteritems () if key == 'language' )
461+ files = {
462+ 'content' : (
463+ os .path .basename (
464+ parameters .file_name ),
465+ params_to_serialize ["content" ],
466+ 'text/plain' ),
467+ 'request' : (
468+ 'request_options' ,
469+ json .dumps (params ),
470+ 'application/json' )}
471+ request = requests .Request (
472+ 'POST' , url , files = files , headers = headers )
424473 prepared_request = request .prepare ()
425474 session = requests .Session ()
426475 resp = session .send (prepared_request )
@@ -446,15 +495,23 @@ class API:
446495 which can communicate with particular Rosette server endpoints.
447496 """
448497
449- def __init__ (self , user_key = None , service_url = 'https://api.rosette.com/rest/v1/' , retries = 5 , reuse_connection = True , refresh_duration = 0.5 , debug = False ):
498+ def __init__ (
499+ self ,
500+ user_key = None ,
501+ service_url = 'https://api.rosette.com/rest/v1/' ,
502+ retries = 5 ,
503+ reuse_connection = True ,
504+ refresh_duration = 0.5 ,
505+ debug = False ):
450506 """ Create an L{API} object.
451507 @param user_key: (Optional; required for servers requiring authentication.) An authentication string to be sent
452508 as user_key with all requests. The default Rosette server requires authentication.
453509 to the server.
454510 """
455511 # logging.basicConfig(filename="binding.log", filemode="w", level=logging.DEBUG)
456512 self .user_key = user_key
457- self .service_url = service_url if service_url .endswith ('/' ) else service_url + '/'
513+ self .service_url = service_url if service_url .endswith (
514+ '/' ) else service_url + '/'
458515 self .logger = logging .getLogger ('rosette.api' )
459516 self .logger .info ('Initialized on ' + self .service_url )
460517 self .debug = debug
@@ -481,7 +538,6 @@ def _connect(self, parsedUrl):
481538 else :
482539 self .http_connection = httplib .HTTPConnection (loc )
483540
484-
485541 def _make_request (self , op , url , data , headers ):
486542 """
487543 Handles the actual request, retrying if a 429 is encountered
@@ -506,7 +562,8 @@ def _make_request(self, op, url, data, headers):
506562 response = self .http_connection .getresponse ()
507563 status = response .status
508564 rdata = response .read ()
509- response_headers ["responseHeaders" ] = (dict (response .getheaders ()))
565+ response_headers ["responseHeaders" ] = (
566+ dict (response .getheaders ()))
510567 if status == 200 :
511568 if not self .reuse_connection :
512569 self .http_connection .close ()
@@ -517,7 +574,7 @@ def _make_request(self, op, url, data, headers):
517574 time .sleep (self .connection_refresh_duration )
518575 self .http_connection .close ()
519576 self ._connect (parsedUrl )
520- continue ;
577+ continue
521578 if rdata is not None :
522579 try :
523580 the_json = _my_loads (rdata , response_headers )
@@ -531,7 +588,10 @@ def _make_request(self, op, url, data, headers):
531588 except :
532589 raise
533590 except (httplib .BadStatusLine , gaierror ) as e :
534- raise RosetteException ("ConnectionError" , "Unable to establish connection to the Rosette API server" , url )
591+ raise RosetteException (
592+ "ConnectionError" ,
593+ "Unable to establish connection to the Rosette API server" ,
594+ url )
535595
536596 if not self .reuse_connection :
537597 self .http_connection .close ()
@@ -545,10 +605,10 @@ def _get_http(self, url, headers):
545605 @param url: endpoint URL
546606 @param headers: request headers
547607 """
548- (rdata , status , response_headers ) = self ._make_request ("GET" , url , None , headers )
608+ (rdata , status , response_headers ) = self ._make_request (
609+ "GET" , url , None , headers )
549610 return _ReturnObject (_my_loads (rdata , response_headers ), status )
550611
551-
552612 def _post_http (self , url , data , headers ):
553613 """
554614 Simple wrapper for the POST request
@@ -562,7 +622,8 @@ def _post_http(self, url, data, headers):
562622 else :
563623 json_data = json .dumps (data )
564624
565- (rdata , status , response_headers ) = self ._make_request ("POST" , url , json_data , headers )
625+ (rdata , status , response_headers ) = self ._make_request (
626+ "POST" , url , json_data , headers )
566627
567628 if len (rdata ) > 3 and rdata [0 :3 ] == _GZIP_SIGNATURE :
568629 buf = BytesIO (rdata )
@@ -579,7 +640,11 @@ def check_version(self):
579640 op = EndpointCaller (self , None )
580641 result = op .checkVersion ()
581642 if 'versionChecked' not in result or result ['versionChecked' ] is False :
582- raise RosetteException ("incompatibleVersion" , "The server version is not compatible with binding version " + _BINDING_VERSION , '' )
643+ raise RosetteException (
644+ "incompatibleVersion" ,
645+ "The server version is not compatible with binding version " +
646+ _BINDING_VERSION ,
647+ '' )
583648 self .version_checked = True
584649 return True
585650
0 commit comments