I'm having trouble posting review requests using the web API if the summary 
or description contains non-ASCII characters. I'm using RBTools 0.7.1, 
Python 2.7.8 and Ubuntu 14.10.
The following script reproduces the problem:

# coding: utf-8
from rbtools.api.client import RBClient

# Example data
RB_PATH = 'http://review.com/reviews/'
USER = "user"
PASS = "password"
PATH = "/home/user/repo"
def main():
    import random
    client = RBClient(RB_PATH, username=USER, password=PASS)
    root = client.get_root()
    rbrepo = root.get_repositories(path=PATH)[0].id
    revreq = root.get_review_requests().create(repository=rbrepo,
                                               commit_id=str(random.random
()))
    # Apparently necessary to post attachment or diff to actually create 
the request
    revreq.get_file_attachments().upload_attachment(
        "attachment",
        " ",
        caption="An attachment.")
    summary = 'ø'
    draft = revreq.get_draft()
    draft = draft.update(summary=summary)


if __name__ == "__main__":
    main()


This gives the following error:
Traceback (most recent call last):
  File "testutf.py", line 24, in <module>
    main()
  File "testutf.py", line 21, in main
    draft = draft.update(summary=summary)
  File 
"/usr/local/lib/python2.7/site-packages/RBTools-0.7.1-py2.7.egg/rbtools/api/resource.py",
 
line 137, in <lambda>
    meth(resource, **kwargs)))
  File 
"/usr/local/lib/python2.7/site-packages/RBTools-0.7.1-py2.7.egg/rbtools/api/decorators.py",
 
line 27, in request_method
    *args, **kwargs)
  File 
"/usr/local/lib/python2.7/site-packages/RBTools-0.7.1-py2.7.egg/rbtools/api/transport/sync.py",
 
line 62, in execute_request_method
    return self._execute_request(request)
  File 
"/usr/local/lib/python2.7/site-packages/RBTools-0.7.1-py2.7.egg/rbtools/api/transport/sync.py",
 
line 71, in _execute_request
    rsp = self.server.make_request(request)
  File 
"/usr/local/lib/python2.7/site-packages/RBTools-0.7.1-py2.7.egg/rbtools/api/request.py",
 
line 512, in make_request
    content_type, body = request.encode_multipart_formdata()
  File 
"/usr/local/lib/python2.7/site-packages/RBTools-0.7.1-py2.7.egg/rbtools/api/request.py",
 
line 101, in encode_multipart_formdata
    content.write(self._fields[key].encode('utf-8') + NEWLINE)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: 
ordinal not in range(128)

If I instead use a unicode string:
summary = u'ø'
then an error occurs in httplib.py:

Traceback (most recent call last):
  File "testutf.py", line 24, in <module>
    main()
  File "testutf.py", line 21, in main
    draft = draft.update(summary=summary)
  File 
"/usr/local/lib/python2.7/site-packages/RBTools-0.7.1-py2.7.egg/rbtools/api/resource.py",
 
line 137, in <lambda>
    meth(resource, **kwargs)))
  File 
"/usr/local/lib/python2.7/site-packages/RBTools-0.7.1-py2.7.egg/rbtools/api/decorators.py",
 
line 27, in request_method
    *args, **kwargs)
  File 
"/usr/local/lib/python2.7/site-packages/RBTools-0.7.1-py2.7.egg/rbtools/api/transport/sync.py",
 
line 62, in execute_request_method
    return self._execute_request(request)
  File 
"/usr/local/lib/python2.7/site-packages/RBTools-0.7.1-py2.7.egg/rbtools/api/transport/sync.py",
 
line 71, in _execute_request
    rsp = self.server.make_request(request)
  File 
"/usr/local/lib/python2.7/site-packages/RBTools-0.7.1-py2.7.egg/rbtools/api/request.py",
 
line 525, in make_request
    rsp = self._urlopen(r)
  File "/usr/lib64/python2.7/urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib64/python2.7/urllib2.py", line 404, in open
    response = self._open(req, data)
  File "/usr/lib64/python2.7/urllib2.py", line 422, in _open
    '_open', req)
  File "/usr/lib64/python2.7/urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "/usr/lib64/python2.7/urllib2.py", line 1214, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/usr/lib64/python2.7/urllib2.py", line 1181, in do_open
    h.request(req.get_method(), req.get_selector(), req.data, headers)
  File "/usr/lib64/python2.7/httplib.py", line 995, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib64/python2.7/httplib.py", line 1029, in _send_request
    self.endheaders(body)
  File "/usr/lib64/python2.7/httplib.py", line 991, in endheaders
    self._send_output(message_body)
  File "/usr/lib64/python2.7/httplib.py", line 842, in _send_output
    msg += message_body
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 90: 
ordinal not in range(128)

Is there any way to circumvent these errors?

-- 
Supercharge your Review Board with Power Pack: 
https://www.reviewboard.org/powerpack/
Want us to host Review Board for you? Check out RBCommons: 
https://rbcommons.com/
Happy user? Let us know! https://www.reviewboard.org/users/
--- 
You received this message because you are subscribed to the Google Groups 
"reviewboard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to reviewboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to