def error2json(e): ''' >>> error2json(UnknownError()) '{"message": "Unknown error occured.", "error": "UNKNOWN_ERROR"}' >>> error2json(AttributeError('id')) '{"message": "id", "error": "AttributeError"}' ''' if isinstance(e, CodedError): return json2.dumps(e) else: e = { 'error' : type(e).__name__, 'message' : unicode(e) } return json2.dumps(e)
def build_fields(fields, use_json=False): ''' >>> build_fields(None) is None True >>> build_fields({ 'id' : 1, 'name' : 'abc' }) 'id=1&name=abc' >>> build_fields({ 'id' : 1, 'name' : 'abc' }, True) 'id=1&name=%22abc%22' ''' if fields is None: return None if use_json: for k in fields: fields[k] = json2.dumps(fields[k]) return urllib.urlencode(fields)
def upload(url, path, fields=None, headers=None, use_json=False): if modutil.exists('pycurl'): import pycurl url = stringutil.u2s(url) path = stringutil.u2s(path) if not os.path.exists(path): raise Exception('File "%s" not found.' % path) buffer = StringIO.StringIO() c = pycurl.Curl() c.setopt(c.POST, 1) c.setopt(c.HEADER, 1) c.setopt(c.WRITEFUNCTION, buffer.write) c.setopt(c.URL, url) field_list = [('file', (c.FORM_FILE, path))] if fields is not None: for k,v in fields.items(): if use_json: v = json2.dumps(v) field_list.append((k, v)) c.setopt(c.HTTPPOST, field_list) if headers is not None: header_list = [] for k, v in headers.items(): header = '%s: %s' % (k, v) header = str(header) # header may be unicode, which is un-acceptable for curl header_list.append(header) c.setopt(c.HTTPHEADER, header_list) c.perform() code = c.getinfo(pycurl.HTTP_CODE) c.close() if code != 200: raise CodedError('UPLOAD_FAILED', 'Failed to upload file %s.' % path) resp = buffer.getvalue() if use_json: json = resp.splitlines()[-1] json = unicode(json, 'utf-8') resp = json2.loads(json) return resp else: raise ModNotFoundError('pycurl')
def _translate_result_body(self, result): return json2.dumps(result)