classification
Title: xmlrpc.client binary object examples needs to use binary mode
Type: behavior Stage: needs patch
Components: Documentation Versions: Python 3.1, Python 3.2
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: georg.brandl Nosy List: georg.brandl, haypo, loewis, mnewman
Priority: normal Keywords:

Created on 2010-01-29 00:21 by mnewman, last changed 2010-01-30 02:21 by haypo. This issue is now closed.

Messages (3)
msg98488 - (view) Author: Michael Newman (mnewman) Date: 2010-01-29 00:21
In Section 20.23.3 Binary Objects of:
http://docs.python.org/3.1/library/xmlrpc.client.html

The server AND client examples fail because the read and write methods are not set to binary mode.

Example of what the client portion shows if you use the examples "as is" with Python 3.1.1 (r311:74483) on win32:

C:\Python31\python.exe example3_binary_obj_client.py
Traceback (most recent call last):
  File "example3_binary_obj_client.py", line 10, in <module>
    handle.write(proxy.python_logo().data)
  File "C:\python31\lib\xmlrpc\client.py", line 1029, in __call__
    return self.__send(self.__name, args)
  File "C:\python31\lib\xmlrpc\client.py", line 1271, in __request
    verbose=self.__verbose
  File "C:\python31\lib\xmlrpc\client.py", line 1070, in request
    return self.parse_response(resp)
  File "C:\python31\lib\xmlrpc\client.py", line 1169, in parse_response
    return u.close()
  File "C:\python31\lib\xmlrpc\client.py", line 673, in close
    raise Fault(**self._stack[0])
xmlrpc.client.Fault: <Fault 1: "<class 'UnicodeDecodeError'>:'charmap' codec can't decode byte 0x81 in position 297: character maps to <undefined>">

To fix it, the server example should have:

handle = open("python_logo.jpg", "rb")

and the client example should have:

handle = open("fetched_python_logo.jpg", "wb")
msg98545 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-01-30 02:19
Fixed in trunk by r77836 (r77837) and py3k by r77838 (r77839), thanks.
msg98546 - (view) Author: STINNER Victor (haypo) * (Python committer) Date: 2010-01-30 02:21
Note: The python3 example closed the file after the return instruction :-( I fixed that by using the with syntax, as does Python trunk example.
History
Date User Action Args
2010-01-30 02:21:26hayposetmessages: + msg98546
2010-01-30 02:19:50hayposetstatus: open -> closed
resolution: fixed
2010-01-30 02:19:38hayposetnosy: + haypo
messages: + msg98545
2010-01-29 01:57:45ezio.melottisetversions: + Python 3.2
nosy: + loewis

priority: normal
type: behavior
stage: needs patch
2010-01-29 00:21:14mnewmancreate