2626import os
2727from socket import gaierror
2828import requests
29+ import re
2930
3031_BINDING_VERSION = '1.1.1'
3132_GZIP_BYTEARRAY = bytearray ([0x1F , 0x8b , 0x08 ])
@@ -186,7 +187,7 @@ class DocumentParameters(_DocumentParamSetBase):
186187 def __init__ (self ):
187188 """Create a L{DocumentParameters} object."""
188189 _DocumentParamSetBase .__init__ (
189- self , ("content" , "contentUri" , "language" , "genre" , "customHeaders" ))
190+ self , ("content" , "contentUri" , "language" , "genre" ))
190191 self .file_name = ""
191192 self .useMultipart = False
192193
@@ -268,8 +269,7 @@ def __init__(self):
268269 "sourceScript" ,
269270 "targetScript" ,
270271 "targetScheme" ,
271- "genre" ,
272- "customHeaders" ))
272+ "genre" ))
273273
274274 def validate (self ):
275275 """Internal. Do not use."""
@@ -302,7 +302,7 @@ class NameSimilarityParameters(_DocumentParamSetBase):
302302
303303 def __init__ (self ):
304304 self .useMultipart = False
305- _DocumentParamSetBase .__init__ (self , ("name1" , "name2" , "customHeaders" ))
305+ _DocumentParamSetBase .__init__ (self , ("name1" , "name2" ))
306306
307307 def validate (self ):
308308 """Internal. Do not use."""
@@ -367,6 +367,17 @@ def info(self):
367367 identifying data."""
368368 url = self .service_url + "info"
369369 headers = {'Accept' : 'application/json' , 'X-RosetteAPI-Binding' : 'python' , 'X-RosetteAPI-Binding-Version' : _BINDING_VERSION }
370+
371+ customHeaders = self .api .getCustomHeaders ()
372+ pattern = re .compile ('^X-RosetteAPI-' )
373+ if customHeaders is not None :
374+ for key in customHeaders .keys ():
375+ if pattern .match (key ) is not None :
376+ headers [key ] = customHeaders [key ]
377+ else :
378+ raise RosetteException ("badHeader" , "Custom header name must begin with \" X-RosetteAPI-\" " , key );
379+ self .api .clearCustomHeaders ()
380+
370381 if self .debug :
371382 headers ['X-RosetteAPI-Devel' ] = 'true'
372383 self .logger .info ('info: ' + url )
@@ -383,6 +394,17 @@ def ping(self):
383394
384395 url = self .service_url + 'ping'
385396 headers = {'Accept' : 'application/json' , 'X-RosetteAPI-Binding' : 'python' , 'X-RosetteAPI-Binding-Version' : _BINDING_VERSION }
397+
398+ customHeaders = self .api .getCustomHeaders ()
399+ pattern = re .compile ('^X-RosetteAPI-' )
400+ if customHeaders is not None :
401+ for key in customHeaders .keys ():
402+ if pattern .match (key ) is not None :
403+ headers [key ] = customHeaders [key ]
404+ else :
405+ raise RosetteException ("badHeader" , "Custom header name must begin with \" X-RosetteAPI-\" " , key );
406+ self .api .clearCustomHeaders ()
407+
386408 if self .debug :
387409 headers ['X-RosetteAPI-Devel' ] = 'true'
388410 self .logger .info ('Ping: ' + url )
@@ -428,14 +450,20 @@ def call(self, parameters):
428450 headers = {}
429451 if self .user_key is not None :
430452
431- if parameters ["customHeaders" ] is not None :
432- for h in parameters ["customHeaders" ]:
433- headers [h [0 ]] = h [1 ]
434- parameters ["customHeaders" ] = None
453+ customHeaders = self .api .getCustomHeaders ()
454+ pattern = re .compile ('^X-RosetteAPI-' )
455+ if customHeaders is not None :
456+ for key in customHeaders .keys ():
457+ if pattern .match (key ) is not None :
458+ headers [key ] = customHeaders [key ]
459+ else :
460+ raise RosetteException ("badHeader" , "Custom header name must begin with \" X-RosetteAPI-\" " , key );
461+ self .api .clearCustomHeaders ()
435462
436463 headers ["X-RosetteAPI-Key" ] = self .user_key
437464 headers ["X-RosetteAPI-Binding" ] = "python"
438465 headers ["X-RosetteAPI-Binding-Version" ] = _BINDING_VERSION
466+
439467 if self .useMultipart :
440468 params = dict (
441469 (key ,
@@ -509,6 +537,7 @@ def __init__(
509537 self .connection_refresh_duration = refresh_duration
510538 self .http_connection = None
511539 self .options = {}
540+ self .customHeaders = {}
512541
513542 def _connect (self , parsedUrl ):
514543 """ Simple connection method
@@ -645,6 +674,30 @@ def clearOptions(self):
645674 """
646675 self .options .clear ()
647676
677+ def setCustomHeaders (self , name , value ):
678+ """
679+ Sets custom headers
680+
681+ @param headers: array of custom headers to be set
682+ """
683+ if value is None :
684+ self .customHeaders .pop (name , None )
685+ else :
686+ self .customHeaders [name ] = value
687+
688+ def getCustomHeaders (self ):
689+ """
690+ Get custom headers
691+ """
692+ return self .customHeaders
693+
694+ def clearCustomHeaders (self ):
695+ """
696+ Clears custom headers
697+ """
698+
699+ self .customHeaders .clear ()
700+
648701 def ping (self ):
649702 """
650703 Create a ping L{EndpointCaller} for the server and ping it.
0 commit comments