the recently introduced fixes for crashes in the python proxy even if disabled caused the typical python2 implicit conversion failures ("'ascii' codec can't...") on my debian sid system -- to fix it, i had to revert commit 154c4ea9e.
i did not dig down all the way to the xml / xmlrpc modules, but my impression
is that some module changed its behavior between stable and sid and now
generates unicode strings instead of str.
a patch to allow both versions by inspecting the types and en-/decoding on demand should work both for anarcat's and my case. i did not test the python3 version, but i'm pretty sure it was already broken after the abovementioned patch.
-- chrysn
update 2014-06-29: the problem persists, but i found it is not trivial to reproduce. to demonstrate, use this test plugin:
#!/usr/bin/env python # -*- coding: utf-8 -*- from proxy import IkiWikiProcedureProxy def preprocess(self, proxy, *args): return repr(self.rpc('pagetype', 'schön')) proxy = IkiWikiProcedureProxy(__name__) proxy.hook('preprocess', preprocess, id='testdirective') proxy.run()note that when the 'schön' is stored in a variable, the exception changes -- it seems to me that the issue is related to the way exceptions are encoded.
the suggested patch still applies and solves the issue. --chrysn
In this patch band:
- xml = _IkiWikiExtPluginXMLRPCHandler._read(in_fd).decode('utf8') + response = _IkiWikiExtPluginXMLRPCHandler._read(in_fd) + if isinstance(response, unicode): + xml = response.encode('utf8')I think you mean
response.decode, notresponse.encode.Other than that it looks good to me. I like the use of
reprin debug messages. --smcvafaict, encode is fine there -- the relevant methods in python2 are
unicode.encodewhich gives astr, andstr.decodewhich usually gives aunicode. (i'd happily ditch python2 and port all plugins to python3, where this is all easier, but my vCard rendering still uses an ancient module.) --chrysnYou were right about this,
encodeis appropriate to go fromunicodetostrunder Python 2. However, Python 3 is still broken.My
ready/more-proxy-utf8-failbranch, based on yours, fixes thersttest when run under Python 3 and hopefully also fixes this one. Please check that it still fixes your test-case too.Joey, I think this is ready for merge even if it doesn't fix chrysn's bug - it does fix Python 3 support in general. --smcv