Package PyFoam :: Package Infrastructure :: Package RunHooks :: Module SendToWebservice
[hide private]
[frames] | no frames]

Source Code for Module PyFoam.Infrastructure.RunHooks.SendToWebservice

 1  """Call an URL from a webservice""" 
 2   
 3  import sys 
 4   
 5  from PyFoam.Infrastructure.RunHook import RunHook 
 6  from PyFoam.ThirdParty.six import PY3,iteritems,print_ 
 7  if PY3: 
 8      import urllib.parse as urllib 
 9  else: 
10      import urllib 
11   
12  import socket 
13  from PyFoam.ThirdParty.six.moves import http_client as httplib 
14   
15  from PyFoam.Error import error 
16  from PyFoam.Basics.TemplateFile import TemplateFile 
17  from PyFoam.ThirdParty.pyratemp import TemplateRenderError 
18   
19 -class SendToWebservice(RunHook):
20 """Sends an URL to a Webservice"""
21 - def __init__(self,runner,name):
22 RunHook.__init__(self,runner,name) 23 24 self.host=self.conf().get("host") 25 self.url=self.conf().get("url",default="") 26 self.method=self.conf().get("method",default="POST") 27 self.useSSL=self.conf().getboolean("useSSL",False) 28 self.parameters={} 29 for name,val in list(self.conf().items()): 30 if name.find("param_")==0: 31 self.parameters[name[len("param_"):]]=val 32 self.headers={} 33 for name,val in list(self.conf().items()): 34 if name.find("header_")==0: 35 self.headers[name[len("header_"):]]=val 36 self.templates=self.conf().get("templates",default="").split() 37 for t in self.templates: 38 if t not in self.parameters: 39 error("Tempalte parameter",t,"not in specified parameters", 40 self.parameters)
41
42 - def __call__(self):
43 if self.useSSL: 44 meth=httplib.HTTPSConnection 45 else: 46 meth=httplib.HTTPConnection 47 48 conn=meth(self.host) 49 50 parameters={} 51 for n,val in iteritems(self.parameters): 52 if n in self.templates: 53 template=TemplateFile(content=val, 54 expressionDelimiter="|-", 55 encoding="ascii") 56 try: 57 parameters[n]=str(template.getString(self.runner.getData())) 58 except TemplateRenderError: 59 e = sys.exc_info()[1] # Needed because python 2.5 does not support 'as e' 60 error("Template error",e,"while rendering",val) 61 else: 62 parameters[n]=val 63 encoded=urllib.urlencode(parameters) 64 try: 65 conn.request(self.method, 66 self.url, 67 encoded, 68 self.headers) 69 except socket.error: 70 e = sys.exc_info()[1] # Needed because python 2.5 does not support 'as e' 71 error("Could not connect to",self.host,":",e) 72 73 result=conn.getresponse() 74 print_("\n",self.name,"Result of request:",result.status,result.reason,result.read())
75 76 # Should work with Python3 and Python2 77