def _read_class_def(self): type_name = self._read_object() num_fields = self._read_object() fields = [] for i in range(0, num_fields): fields.append(self._read_object()) self._classdefs.append(cls_factory(type_name, fields))
def _read_map(self): code = self._read(1) if code == b't': type_len = unpack('>H', self._read(2))[0] if type_len > 0: # a typed map deserializes to an object result = cls_factory(self._read(type_len))() else: result = {} code = self._read(1) else: # untyped maps deserialize to a dict result = {} self._refs.append(result) fields = {} while code != b'z': key, value = self._read_keyval(code) if isinstance(result, Object): fields[str(key)] = value else: fields[type(key)] = value code = self._read(1) if isinstance(result, Object): result.__setstate__(fields) else: result.update(fields) return result
def _read_map(self): code = self._read(1) if code == b't': type_len = unpack('>H', self._read(2))[0] if type_len > 0: # a typed map deserializes to an object result = cls_factory(self._read(type_len))() else: result = {} code = self._read(1) else: # untyped maps deserialize to a dict result = {} self._refs.append(result) fields = {} while code != b'z': key, value = self._read_keyval(code) if isinstance(result, Object): fields[str(key)] = value else: fields[key] = value code = self._read(1) if isinstance(result, Object): result.__setstate__(fields) else: result.update(fields) return result
def _read_map(self, code=None): if code is None: code = self._read(1) if code == b't': type_len = unpack('>H', self._read(2))[0] if type_len > 0: # a typed map deserializes to an object result = cls_factory(self._read(type_len))() else: result = {} code = self._read(1) else: # untyped maps deserialize to a dict result = {} if code == b'M': # Read and discard type try: self._read_object() except ListMapTerminator: code = b'Z' code = self._read(1) self._refs.append(result) fields = {} while code not in (b'z', b'Z'): key, value = self._read_keyval(code) if key == {}: return result if isinstance(result, Object): fields[str(key)] = value else: fields[key] = value code = self._read(1) if isinstance(result, Object): result.__setstate__(fields) else: result.update(fields) return result
from dataclasses import dataclass from pyhessian.client import HessianProxy from pyhessian.protocol import cls_factory NiceObject = cls_factory(name='com.gyxr.adam.dataservice.model.BrandItem', fields=['id', 'name']) nice_object = NiceObject(id="1", name='中文') service = HessianProxy("http://localhost:8080/rmi/sync/brand") service.save(nice_object)