示例#1
0
文件: Comm.py 项目: sizzlelab/Ossi
 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
示例#2
0
文件: Comm.py 项目: sizzlelab/Ossi
 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
示例#3
0
文件: Comm.py 项目: sizzlelab/Ossi
def parse_json_response(json_data, response):
    """Decode JSON response and return the data in a dictionary."""
    try:
        data = simplejson.loads(json_data)
    except ValueError, error:
        # Server gave a valid HTTP response, but it is not JSON
        message = csetconv.to_unicode(str(error))
        if len(message) > 50:
            message = u"%s[...]" % message[:50]
        data = {"status" : "error:decode:json", "message" : message}
示例#4
0
文件: Comm.py 项目: sizzlelab/Ossi
 def _decode_content(self, data, response):
     """"
     Pass data first to decompression function, then to JSON decoder.
     Return content in decoded format. 
     """
     try:
         data = self._decompress_content(data, response)
         data = parse_json_response(data, response)
     except zlib.error, error:
         message = csetconv.to_unicode(str(error))
         data = {"status" : "error:decode:zlib", 
                 "message" : message}
示例#5
0
文件: Comm.py 项目: sizzlelab/Ossi
     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
 except RuntimeError, error:
     message = u"Network not available. '%s'" % csetconv.to_unicode(str(error))
     data = {"status" : "error:communication:network", 
             "message" : message}
     response = None
 # These are raised if server is connected but it does return 
 # a single byte (e.g in Segmentation fault -case) 
 except httplib.BadStatusLine: # Python 2.5
     message = u"Service not available. (BadStatusLine)"
     data = {"status" : "error:server", 
             "message" : message}
     response = None
 except AssertionError, error: # Python 2.2 (pys60)
     message = u"Service not available. (Empty response)"
     data = {"status" : "error:server", 
             "message" : message}
     response = None