base64.decodestring or xmlrpc (in zope) is truncating strings

Fredrik Lundh fredrik at pythonware.com
Wed Feb 21 15:45:01 EST 2001


Craig Dunigan wrote:
>   meta_type = fileObject.meta_type
>   if meta_type == 'DTML Document':
>     return ("OK", base64.encodestring(fileObject.document_src()))
>   elif meta_type == 'File':
>     return ("OK", base64.encodestring(fileObject.data))
>   elif meta_type == 'Image':
>     return ("OK", base64.encodestring(fileObject.data))
>   else:
>     return ("FAIL", 'Unsupported meta_type')

xmlrpc usage note: instead of encoding and decoding yourself,
you can use the xmlrpclib.Binary wrapper:

    if meta_type == 'DTML Document':
        return ("OK", xmlrpclib.Binary(fileObject.document_src())
    elif meta_type in ('File', 'Image'):
        return ("OK", xmlrpclib.Binary(fileObject.data))
    else:
        return ("FAIL", 'Unsupported meta_type')

the receiver gets a Binary object as well, and can pick out
the original string from the data attribute:

    if retval[0] == "OK":
        return retval[1].data

> the calling object of "getFile" does a write to the local filesystem

...which usually means that you forgot to open the file in
binary mode:

    file = open(filename, "w") # open in text mode
    file = open(filename, "wb") # open in binary mode

Cheers /F

<!-- (the eff-bot guide to) the standard python library:
http://www.pythonware.com/people/fredrik/librarybook.htm
-->





More information about the Python-list mailing list