def __setattr__(self, attr, value): if attr.startswith('_'): object.__setattr__(self, attr, value) return if attr in self._field_names: return self._reflector.setProperty(self, attr, ReflectedType.fromNative(value, reflector=self._reflector)) if attr not in self._not_field_names: try: return self._reflector.setProperty(self, attr, ReflectedType.fromNative(value, reflector=self._reflector)) except ReflectionException: self._not_field_names.add(attr)
def _invoker(self, method_name, *args, **kwargs): """ Invokes methods on the object, in the Java VM, proxying through the reflector's invoke() method. """ result = self._reflector.invoke(self, method_name, *map(lambda arg: ReflectedType.fromNative(arg, reflector=self._reflector), args), **kwargs) return result
def __validateAndConvert(self, objects): """ A utility method to help build a ReflectedArray from a collection of other objects. This enforces some validation, such as checking that all objects in an array are of consistent type. """ if not hasattr(objects, '__iter__'): raise TypeError("objects is not iterable") list_type = None for obj in objects: if not list_type: list_type = type(obj) else: if type(obj) != list_type: raise TypeError("mismatched array element types") yield ReflectedType.fromNative(obj, self._reflector)
def _pb(self): """ Get an Argument representation of the Array, as defined in the Mercury protocol. """ argument = Message.Argument(type=Message.Argument.ARRAY) if self._native[0]._pb().type == Message.Argument.ARRAY: argument.array.type = Message.Array.ARRAY elif self._native[0]._pb().type == Message.Argument.NULL: argument.array.type = Message.Array.OBJECT elif self._native[0]._pb().type == Message.Argument.OBJECT: argument.array.type = Message.Array.OBJECT elif self._native[0]._pb().type == Message.Argument.STRING: argument.array.type = Message.Array.STRING elif self._native[0]._pb().type == Message.Argument.PRIMITIVE: argument.array.type = Message.Array.PRIMITIVE for e in self._native: element = argument.array.element.add() element.MergeFrom(ReflectedType.fromNative(e, reflector=self._reflector)._pb()) return argument
def insert(self, i, obj): self._native.insert(i, ReflectedType.fromNative(obj, self._reflector))
def append(self, obj): self._native.append(ReflectedType.fromNative(obj, self._reflector)) return self
def __setitem__(self, index, obj): self._native[index] = ReflectedType.fromNative(obj, self._reflector)