Example #1
0
 def _send_multipart_request(self, operation, params, files):
     """
     Send multipart HTTP-request to the server using http_poster.
     Request can contain file attachments.
     Return decoded response data and a HTTPResponse object.
     """
     params['operation'] = operation
     param_list = []
     # convert all params keys and values to utf-8, 
     # post_multipart expects a list of tuples
     for key in params.keys():
         params[key] = csetconv.to_utf8(params[key])
     headers = self._get_default_headers()
     # error handling is missing here
     try:
         data, response  = http_poster.post_multipart(self.host, self.script, 
                                                      params, files, headers)
         if response.status == 200:
             data = self._decode_content(data, response)
         else:
             reason = csetconv.to_unicode(response.reason)
             data = {"status" : "error:server", 
                     "message" : u"Server responded: %s %s" % (
                                 response.status, reason)}
     except socket.gaierror, error:
         message = u"Server not found. '%s'" % csetconv.to_unicode(error[1])
         data = {"status" : "error:communication:gaierror", 
                 "message" : message}
         response = None
Example #2
0
 def _send_request(self, operation, params, filename = None):
     """
     Send HTTP POST request to the server using httplib, 
     return decoded data and a HTTPResponse object.
     """
     params['operation'] = operation
     # convert all params-values to utf-8, keys should be ASCII
     for key in params.keys():
         params[key] = csetconv.to_utf8(params[key])
     params = urllib.urlencode(params)
     headers = self._get_default_headers()
     headers["Content-Type"] = "application/x-www-form-urlencoded"
     # Send session id in headers as a cookie
     if self.sessionid != None:
         headers["Cookie"] = "sessionid=%s;" % self.sessionid
     conn = httplib.HTTPConnection(self.host)
     # This is nested because Python 2.2 doesn't support try/except/finally
     try: 
         try:
             conn.request("POST", self.script, params, headers)
             response = conn.getresponse()
             reason = csetconv.to_unicode(response.reason)
             if response.status == 200:
                 data = response.read()
                 # Decode content if it's type was "application/json"
                 if response.getheader("content-type") == "application/json":
                     data = self._decode_content(data, response)
                 elif filename is not None:
                     datafile = open(filename, "wb")
                     datafile.write(data)
                     datafile.close()
             else:
                 data = {"status" : "error:server", 
                         "message" : u"Server responded: %s %s" % (
                                     response.status, reason)}
         except socket.gaierror, error:
             message = u"Server not found. '%s'" % csetconv.to_unicode(error[1])
             data = {"status" : "error:communication:gaierror", 
                     "message" : message}
             response = None
         except socket.error, error:
             message = u"Service not available. '%s'" % csetconv.to_unicode(error[1])
             data = {"status" : "error:communication:error", 
                     "message" : message}
             response = None