Example #1
0
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)
Example #2
0
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)
Example #3
0
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')
Example #4
0
 def _translate_result_body(self, result):
     return json2.dumps(result)