-#!/usr/bin/python
+#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# proxy.py — helper for Python-based external (xml-rpc) ikiwiki plugins
def send_rpc(self, cmd, in_fd, out_fd, *args, **kwargs):
xml = _xmlrpc_client.dumps(sum(kwargs.items(), args), cmd)
self._debug_fn(
- "calling ikiwiki procedure `{0}': [{1}]".format(cmd, xml))
- _IkiWikiExtPluginXMLRPCHandler._write(out_fd, xml.encode('utf8'))
+ "calling ikiwiki procedure `{0}': [{1}]".format(cmd, repr(xml)))
+ # ensure that encoded is a str (bytestring in Python 2, Unicode in 3)
+ if str is bytes and not isinstance(xml, str):
+ encoded = xml.encode('utf8')
+ else:
+ encoded = xml
+ _IkiWikiExtPluginXMLRPCHandler._write(out_fd, encoded)
self._debug_fn('reading response from ikiwiki...')
- xml = _IkiWikiExtPluginXMLRPCHandler._read(in_fd).decode('utf8')
+ response = _IkiWikiExtPluginXMLRPCHandler._read(in_fd)
+ if str is bytes and not isinstance(response, str):
+ xml = response.encode('utf8')
+ else:
+ xml = response
self._debug_fn(
'read response to procedure {0} from ikiwiki: [{1}]'.format(
- cmd, xml))
+ cmd, repr(xml)))
if xml is None:
# ikiwiki is going down
self._debug_fn('ikiwiki is going down, and so are we...')