From ac0750d0583ca990370d8efc8dab7618aa3d531a Mon Sep 17 00:00:00 2001 From: Jonathan Xu Date: Thu, 6 Jun 2019 17:36:19 +0800 Subject: [PATCH] Support python 3 in pysearpc. --- pysearpc/client.py | 17 +++++++++-------- pysearpc/named_pipe.py | 9 +++++---- pysearpc/pygencode.py | 14 ++++++++------ pysearpc/server.py | 8 +++++--- pysearpc/test_pysearpc.py | 1 + pysearpc/transport.py | 1 + pysearpc/utils.py | 2 +- 7 files changed, 30 insertions(+), 22 deletions(-) diff --git a/pysearpc/client.py b/pysearpc/client.py index 56dcf48..20e5535 100644 --- a/pysearpc/client.py +++ b/pysearpc/client.py @@ -1,5 +1,6 @@ +from builtins import object import json -from common import SearpcError +from .common import SearpcError def _fret_int(ret_str): try: @@ -7,10 +8,10 @@ def _fret_int(ret_str): except: raise SearpcError('Invalid response format') - if dicts.has_key('err_code'): + if 'err_code' in dicts: raise SearpcError(dicts['err_msg']) - if dicts.has_key('ret'): + if 'ret' in dicts: return dicts['ret'] else: raise SearpcError('Invalid response format') @@ -21,10 +22,10 @@ def _fret_string(ret_str): except: raise SearpcError('Invalid response format') - if dicts.has_key('err_code'): + if 'err_code' in dicts: raise SearpcError(dicts['err_msg']) - if dicts.has_key('ret'): + if 'ret' in dicts: return dicts['ret'] else: raise SearpcError('Invalid response format') @@ -61,7 +62,7 @@ def _fret_obj(ret_str): except: raise SearpcError('Invalid response format') - if dicts.has_key('err_code'): + if 'err_code' in dicts: raise SearpcError(dicts['err_msg']) if dicts['ret']: @@ -75,7 +76,7 @@ def _fret_objlist(ret_str): except: raise SearpcError('Invalid response format') - if dicts.has_key('err_code'): + if 'err_code' in dicts: raise SearpcError(dicts['err_msg']) l = [] @@ -91,7 +92,7 @@ def _fret_json(ret_str): except: raise SearpcError('Invalid response format') - if dicts.has_key('err_code'): + if 'err_code' in dicts: raise SearpcError(dicts['err_msg']) if dicts['ret']: diff --git a/pysearpc/named_pipe.py b/pysearpc/named_pipe.py index 7d62498..da24935 100644 --- a/pysearpc/named_pipe.py +++ b/pysearpc/named_pipe.py @@ -2,6 +2,7 @@ RPC client/server implementation based on named pipe transport. """ +from builtins import object import json import logging import os @@ -56,7 +57,7 @@ class NamedPipeTransport(SearpcTransport): # "I" for unsiged int header = struct.pack('I', len(body)) sendall(self.pipe_fd, header) - sendall(self.pipe_fd, body) + sendall(self.pipe_fd, body.encode(encoding='utf-8')) resp_header = recvall(self.pipe_fd, 4) # logger.info('resp_header is %s', resp_header) @@ -64,7 +65,7 @@ class NamedPipeTransport(SearpcTransport): # logger.info('resp_size is %s', resp_size) resp = recvall(self.pipe_fd, resp_size) # logger.info('resp is %s', resp) - return resp + return resp.decode(encoding='utf-8') class NamedPipeClient(SearpcClient): @@ -141,10 +142,10 @@ class PipeHandlerThread(Thread): req = recvall(self.pipe_fd, req_size) # logger.info('req is %s', req) - data = json.loads(req) + data = json.loads(req.decode(encoding='utf-8')) resp = searpc_server.call_function(data['service'], data['request']) # logger.info('resp is %s', resp) resp_header = struct.pack('I', len(resp)) sendall(self.pipe_fd, resp_header) - sendall(self.pipe_fd, resp) + sendall(self.pipe_fd, resp.encode(encoding='utf-8')) diff --git a/pysearpc/pygencode.py b/pysearpc/pygencode.py index b476a3b..62a635b 100644 --- a/pysearpc/pygencode.py +++ b/pysearpc/pygencode.py @@ -1,6 +1,8 @@ #!/usr/bin/python +from __future__ import print_function +from builtins import str import string import sys @@ -29,7 +31,7 @@ def gen_fcall_funcs_array(arg_types): pyfuncname = "fcall__" + "_".join(arg_types) tmplist = [] for arg in arg_types: - tmplist.append(string.capitalize(arg)) + tmplist.append(arg.capitalize()) cfuncname = "SearpcClient_Fcall__" + "_".join(tmplist) @@ -47,7 +49,7 @@ def gen_fret_funcs_array(ret_type): cfuncname = "SearpcClient_Fret__Void" else: pyfuncname = "fret__" + ret_type - cfuncname = "SearpcClient_Fret__" + string.capitalize(ret_type) + cfuncname = "SearpcClient_Fret__" + ret_type.capitalize() return string.Template(func_item_template)\ .substitute(pyfuncname=pyfuncname, @@ -79,8 +81,8 @@ def gen_module_funcs_array(): array = fcall_array array += fret_array - print string.Template(module_func_array_template)\ - .substitute(array=array) + print(string.Template(module_func_array_template)\ + .substitute(array=array)) type_table = { @@ -128,7 +130,7 @@ def gen_fcall_func(arg_types): tmplist = [] for arg in arg_types: - tmplist.append(string.capitalize(arg)) + tmplist.append(arg.capitalize()) Suffix = "_".join(tmplist) suffix = "_".join(arg_types) def_args = "" @@ -161,7 +163,7 @@ def gen_fcall_list(): arg_types_list.append(item[1]) for item in arg_types_list: - print gen_fcall_func(item) + print(gen_fcall_func(item)) if __name__ == "__main__": diff --git a/pysearpc/server.py b/pysearpc/server.py index 070c17e..a7ec7be 100644 --- a/pysearpc/server.py +++ b/pysearpc/server.py @@ -1,6 +1,8 @@ +from builtins import str +from builtins import object import json -from common import SearpcError +from .common import SearpcError class SearpcService(object): def __init__(self, name): @@ -25,7 +27,7 @@ class SearpcServer(object): """input str -> output str""" try: argv = json.loads(fcallstr) - except Exception, e: + except Exception as e: raise SearpcError('bad call str: ' + str(e)) service = self.services[svcname] @@ -41,7 +43,7 @@ class SearpcServer(object): def call_function(self, svcname, fcallstr): try: retVal = self._call_function(svcname, fcallstr) - except Exception, e: + except Exception as e: ret = {'err_code': 555, 'err_msg': str(e)} else: ret = {'ret': retVal} diff --git a/pysearpc/test_pysearpc.py b/pysearpc/test_pysearpc.py index a40f525..9386c45 100755 --- a/pysearpc/test_pysearpc.py +++ b/pysearpc/test_pysearpc.py @@ -1,6 +1,7 @@ #!/usr/bin/env python #coding: UTF-8 +from builtins import object import json import logging import os diff --git a/pysearpc/transport.py b/pysearpc/transport.py index 60285cb..3c6e821 100644 --- a/pysearpc/transport.py +++ b/pysearpc/transport.py @@ -1,4 +1,5 @@ +from builtins import object class SearpcTransport(object): """ A transport is repsonsible to send the serialized request to the diff --git a/pysearpc/utils.py b/pysearpc/utils.py index 7c3739b..2fd7364 100644 --- a/pysearpc/utils.py +++ b/pysearpc/utils.py @@ -5,7 +5,7 @@ from pysearpc.errors import NetworkError def recvall(fd, total): remain = total - data = '' + data = b'' while remain > 0: try: new = fd.recv(remain)