Source code for rtypes

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#
#   Copyright 2008 Glencoe Software, Inc. All rights reserved.
#   Use is subject to license terms supplied in LICENSE.txt
#

"""
Module which is responsible for creating rtypes from static
factory methods. Where possible, factory methods return cached values
(the fly-weight pattern) such that <code>rbool(true) == rbool(true)</code>
might hold true.

This module is meant to be kept in sync with the abstract Java class
omero.rtypes as well as the omero/rtypes.{h,cpp} files.
"""

import omero
import Ice
import IceImport
IceImport.load("omero_RTypes_ice")
IceImport.load("omero_Scripts_ice")
IceImport.load("omero_model_RTypes_ice")

sys = __import__("sys")  # Python sys


[docs] def rtype(val): """ If None or an RType, return the argument itself. Otherwise, attempts to dispatch to the other omero.rtypes.* static methods to create a proper {@link RType} subclass by checking the type of the input. If no conversion is found, a {@link ClientError} is thrown. Note: unlike the statically typed languages, the rtype implementation in Python is somewhat limited by the lack of types (float v. double) All float-like values will produce an omero.RFloat subclass. Similar problems may arise with rlong and rint """ if val is None: return None elif isinstance(val, omero.RType): return val elif isinstance(val, bool): return rbool(val) elif isinstance(val, int): return rint(val) elif isinstance(val, float): return rfloat(val) elif isinstance(val, str) or isinstance(val, bytes): return rstring(val) elif isinstance(val, omero.model.IObject): return robject(val) elif isinstance(val, omero.Internal): return rinternal(val) elif isinstance(val, list): return rlist(val) elif isinstance(val, set): return rset(val) elif isinstance(val, dict): return rmap(val) else: raise omero.ClientError("Cannot handle conversion from: %s" % type(val))
[docs] def wrap(val, cache=None): """ """ if cache is None: cache = {} elif id(val) in cache: return cache[id(val)] if val is None: return None elif isinstance(val, (list, tuple)): rv = rlist() cache[id(val)] = rv for x in val: rv.val.append(wrap(x, cache)) elif isinstance(val, set): rv = rset() cache[id(val)] = rv for x in val: rv.val.add(wrap(x, cache)) elif isinstance(val, dict): rv = rmap() cache[id(val)] = rv for k, v in list(val.items()): rv.val[k] = wrap(v, cache) rv._validate() elif isinstance(val, omero.RType): rv = val else: rv = rtype(val) return rv
[docs] def unwrap(val, cache=None): """ """ if cache is None: cache = {} elif id(val) in cache: return cache[id(val)] if val is None: return None elif isinstance(val, (list, tuple)): rv = [] cache[id(val)] = rv for x in val: rv.append(unwrap(x, cache)) elif isinstance(val, set): rv = set() cache[id(val)] = rv for x in val: rv.add(unwrap(x, cache)) elif isinstance(val, dict): rv = {} cache[id(val)] = rv for k, v in list(val.items()): rv[unwrap(k, cache)] = unwrap(v, cache) elif isinstance(val, omero.RCollection): if val.val is None: rv = None cache[id(val)] = None else: rv = [] cache[id(val)] = rv for x in val.val: rv.append(unwrap(x, cache)) elif isinstance(val, omero.RMap): if val.val is None: rv = None cache[id(val)] = None else: rv = {} cache[id(val)] = rv for k, v in list(val.val.items()): rv[unwrap(k, cache)] = unwrap(v, cache) elif isinstance(val, omero.RType): # Non-recursive rv = val.val cache[id(val)] = rv else: rv = val return rv
# Static factory methods (primitives) # =========================================================================
[docs] def rbool(val): """ Returns the argument itself if None or an instance of RBool. Otherwise, checks the value for"trueness" and returns either rtrue or rfalse. """ if val is None or isinstance(val, omero.RBool): return val elif val: return rtrue else: return rfalse
[docs] def rdouble(val): """ Returns the argument itself if None or an instance of RDouble. Otherwise, assigns a coerced float to the value of a new RDouble. """ if val is None or isinstance(val, omero.RDouble): return val return RDoubleI(val)
[docs] def rfloat(val): """ Returns the argument itself if None or an instance of RFloat. Otherwise, assigns a coerced float to the value of a new RFloat. """ if val is None or isinstance(val, omero.RFloat): return val return RFloatI(val)
[docs] def rint(val): """ Returns the argument itself if None or an instance of RInt. If the argument is 0, rint0 is returned. Otherwise, assigns a coerced int to the value of a new RInt """ if val is None or isinstance(val, omero.RInt): return val elif val == 0: return rint0 return RIntI(val)
[docs] def rlong(val): """ Returns the argument itself if None or an instance of RLong. If the argument is 0, rlong 0 is returned. Otherwise, assigns a coerced int to the value of a new RLong """ if val is None or isinstance(val, omero.RLong): return val elif val == 0: return rlong0 return RLongI(val)
[docs] def rtime(val): """ Returns the argument itself if None or an instance of RTime. Otherwise, assigns a coerced long to the value of a new RTime """ if val is None or isinstance(val, omero.RTime): return val return RTimeI(val)
# Static factory methods (objects) # =========================================================================
[docs] def rinternal(val): """ If argument is None, returns rnullinternal. If an RInternal, returns the argument itself. Otherwise creates a new RInternal. """ if val is None: return rnullinternal elif isinstance(val, omero.RInternal): return val elif isinstance(val, omero.Internal): return RInternalI(val) else: raise ValueError("Not Internal type: %s" % type(val))
[docs] def robject(val): """ If argument is None, returns rnullobject. If an RObject, returns the argument itself. Otherwise creates a new RObject """ if val is None: return rnullobject elif isinstance(val, omero.RObject): return val elif isinstance(val, omero.model.IObject): return RObjectI(val) else: raise ValueError("Not IObject type: %s" % type(val))
[docs] def rclass(val): """ If argument is None or "", returns emptyclass. If an RClass, returns the argument itself. Otherwise creates a new RClass """ if val is None: return remptyclass elif isinstance(val, omero.RClass): return val elif isinstance(val, str): if len(val) == 0: return remptyclass else: return RClassI(val) raise ValueError("Not string type: %s" % type(val))
[docs] def rstring(val): """ If argument is None or "", returns emptystring. If an RString, returns the argument itself. Otherwise creates a new RString """ if val is None: return remptystr elif isinstance(val, omero.RString): return val elif isinstance(val, str) or isinstance(val, bytes): if len(val) == 0: return remptystr else: return RStringI(val) else: return rstring(str(val))
# Static factory methods (collections) # =========================================================================
[docs] def rarray(val=None, *args): return RArrayI(val, *args)
[docs] def rlist(val=None, *args): return RListI(val, *args)
[docs] def rset(val=None, *args): return RSetI(val, *args)
[docs] def rmap(val=None, **kwargs): return RMapI(val, **kwargs)
# Implementations (primitives) # =========================================================================
[docs] class RBoolI(omero.RBool): def __init__(self, value): omero.RBool.__init__(self, value)
[docs] def getValue(self, current=None): return self._val
[docs] def compare(self, rhs, current=None): raise NotImplementedError("compare")
def __eq__(self, obj): if obj is None: return False elif obj is self: return True elif not isinstance(obj, omero.RBool): return False return obj._val == self._val def __ne__(self, obj): return not self.__eq__(obj) def __hash__(self): if self._val: return hash(True) else: return hash(False) def __getattr__(self, attr): if attr == "val": return self.getValue() else: raise AttributeError(attr) def __setattr__(self, attr, value): if attr == "val": if "_val" in self.__dict__: raise omero.ClientError("Cannot write to val") else: self.__dict__["_val"] = value else: object.__setattr__(self, attr, value)
[docs] def ice_postUnmarshal(self): """ Provides additional initialization once all data loaded Required due to __getattr__ implementation. """ pass # Currently unused
[docs] def ice_preMarshal(self): """ Provides additional validation before data is sent Required due to __getattr__ implementation. """ pass # Currently unused
[docs] class RDoubleI(omero.RDouble): def __init__(self, value): omero.RDouble.__init__(self, float(value))
[docs] def getValue(self, current=None): return self._val
[docs] def compare(self, rhs, current=None): raise NotImplementedError("compare")
def __eq__(self, obj): if obj is None: return False elif obj is self: return True elif not isinstance(obj, omero.RDouble): return False return obj._val == self._val def __ne__(self, obj): return not self.__eq__(obj) def __hash__(self): return hash(self._val) def __getattr__(self, attr): if attr == "val": return self.getValue() else: raise AttributeError(attr) def __setattr__(self, attr, value): if attr == "val": if "_val" in self.__dict__: raise omero.ClientError("Cannot write to val") else: self.__dict__["_val"] = value else: object.__setattr__(self, attr, value)
[docs] def ice_postUnmarshal(self): """ Provides additional initialization once all data loaded Required due to __getattr__ implementation. """ pass # Currently unused
[docs] def ice_preMarshal(self): """ Provides additional validation before data is sent Required due to __getattr__ implementation. """ pass # Currently unused
[docs] class RFloatI(omero.RFloat): def __init__(self, value): omero.RFloat.__init__(self, float(value))
[docs] def getValue(self, current=None): return self._val
[docs] def compare(self, rhs, current=None): raise NotImplementedError("compare")
def __eq__(self, obj): if obj is None: return False elif obj is self: return True elif not isinstance(obj, omero.RFloat): return False return obj._val == self._val def __ne__(self, obj): return not self.__eq__(obj) def __hash__(self): return hash(self._val) def __getattr__(self, attr): if attr == "val": return self.getValue() else: raise AttributeError(attr) def __setattr__(self, attr, value): if attr == "val": if "_val" in self.__dict__: raise omero.ClientError("Cannot write to val") else: self.__dict__["_val"] = value else: object.__setattr__(self, attr, value)
[docs] def ice_postUnmarshal(self): """ Provides additional initialization once all data loaded Required due to __getattr__ implementation. """ pass # Currently unused
[docs] def ice_preMarshal(self): """ Provides additional validation before data is sent Required due to __getattr__ implementation. """ pass # Currently unused
[docs] class RIntI(omero.RInt): def __init__(self, value): omero.RInt.__init__(self, int(value))
[docs] def getValue(self, current=None): return self._val
[docs] def compare(self, rhs, current=None): raise NotImplementedError("compare")
def __eq__(self, obj): if obj is None: return False elif obj is self: return True elif not isinstance(obj, omero.RInt): return False return obj._val == self._val def __ne__(self, obj): return not self.__eq__(obj) def __hash__(self): return hash(self._val) def __getattr__(self, attr): if attr == "val": return self.getValue() else: raise AttributeError(attr) def __setattr__(self, attr, value): if attr == "val": if "_val" in self.__dict__: raise omero.ClientError("Cannot write to val") else: self.__dict__["_val"] = value else: object.__setattr__(self, attr, value)
[docs] def ice_postUnmarshal(self): """ Provides additional initialization once all data loaded Required due to __getattr__ implementation. """ pass # Currently unused
[docs] def ice_preMarshal(self): """ Provides additional validation before data is sent Required due to __getattr__ implementation. """ pass # Currently unused
[docs] class RLongI(omero.RLong): def __init__(self, value): omero.RLong.__init__(self, int(value))
[docs] def getValue(self, current=None): return self._val
[docs] def compare(self, rhs, current=None): raise NotImplementedError("compare")
def __eq__(self, obj): if obj is None: return False elif obj is self: return True elif not isinstance(obj, omero.RLong): return False return obj._val == self._val def __ne__(self, obj): return not self.__eq__(obj) def __hash__(self): return hash(self._val) def __getattr__(self, attr): if attr == "val": return self.getValue() else: raise AttributeError(attr) def __setattr__(self, attr, value): if attr == "val": if "_val" in self.__dict__: raise omero.ClientError("Cannot write to val") else: self.__dict__["_val"] = value else: object.__setattr__(self, attr, value)
[docs] def ice_postUnmarshal(self): """ Provides additional initialization once all data loaded Required due to __getattr__ implementation. """ pass # Currently unused
[docs] def ice_preMarshal(self): """ Provides additional validation before data is sent Required due to __getattr__ implementation. """ pass # Currently unused
[docs] class RTimeI(omero.RTime): def __init__(self, value): omero.RTime.__init__(self, int(value))
[docs] def getValue(self, current=None): return self._val
[docs] def compare(self, rhs, current=None): raise NotImplementedError("compare")
def __eq__(self, obj): if obj is None: return False elif obj is self: return True elif not isinstance(obj, omero.RTime): return False return obj._val == self._val def __ne__(self, obj): return not self.__eq__(obj) def __hash__(self): return hash(self._val) def __getattr__(self, attr): if attr == "val": return self.getValue() else: raise AttributeError(attr) def __setattr__(self, attr, value): if attr == "val": if "_val" in self.__dict__: raise omero.ClientError("Cannot write to val") else: self.__dict__["_val"] = value else: object.__setattr__(self, attr, value)
[docs] def ice_postUnmarshal(self): """ Provides additional initialization once all data loaded Required due to __getattr__ implementation. """ pass # Currently unused
[docs] def ice_preMarshal(self): """ Provides additional validation before data is sent Required due to __getattr__ implementation. """ pass # Currently unused
# Implementations (objects) # =========================================================================
[docs] class RInternalI(omero.RInternal): def __init__(self, value): omero.RInternal.__init__(self, value)
[docs] def getValue(self, current=None): return self._val
[docs] def compare(self, rhs, current=None): raise NotImplementedError("compare")
def __eq__(self, obj): if obj is None: return False elif obj is self: return True elif not isinstance(obj, omero.RInternal): return False return obj._val == self._val def __ne__(self, obj): return not self.__eq__(obj) def __hash__(self): return hash(self._val) def __getattr__(self, attr): if attr == "val": return self.getValue() else: raise AttributeError(attr) def __setattr__(self, attr, value): if attr == "val": if "_val" in self.__dict__: raise omero.ClientError("Cannot write to val") else: self.__dict__["_val"] = value else: object.__setattr__(self, attr, value)
[docs] def ice_postUnmarshal(self): """ Provides additional initialization once all data loaded Required due to __getattr__ implementation. """ pass # Currently unused
[docs] def ice_preMarshal(self): """ Provides additional validation before data is sent Required due to __getattr__ implementation. """ pass # Currently unused
[docs] class RObjectI(omero.RObject): def __init__(self, value): omero.RObject.__init__(self, value)
[docs] def getValue(self, current=None): return self._val
[docs] def compare(self, rhs, current=None): raise NotImplementedError("compare")
def __eq__(self, obj): if obj is None: return False elif obj is self: return True elif not isinstance(obj, omero.RObject): return False return obj._val == self._val def __ne__(self, obj): return not self.__eq__(obj) def __hash__(self): return hash(self._val) def __getattr__(self, attr): if attr == "val": return self.getValue() else: raise AttributeError(attr) def __setattr__(self, attr, value): if attr == "val": if "_val" in self.__dict__: raise omero.ClientError("Cannot write to val") else: self.__dict__["_val"] = value else: object.__setattr__(self, attr, value)
[docs] def ice_postUnmarshal(self): """ Provides additional initialization once all data loaded Required due to __getattr__ implementation. """ pass # Currently unused
[docs] def ice_preMarshal(self): """ Provides additional validation before data is sent Required due to __getattr__ implementation. """ pass # Currently unused
[docs] class RStringI(omero.RString): def __init__(self, value): omero.RString.__init__(self, value)
[docs] def getValue(self, current=None): return self._val
[docs] def compare(self, rhs, current=None): raise NotImplementedError("compare")
def __eq__(self, obj): if obj is None: return False elif obj is self: return True elif not isinstance(obj, omero.RString): return False return obj._val == self._val def __ne__(self, obj): return not self.__eq__(obj) def __hash__(self): return hash(self._val) def __getattr__(self, attr): if attr == "val": return self.getValue() else: raise AttributeError(attr) def __setattr__(self, attr, value): if attr == "val": if "_val" in self.__dict__: raise omero.ClientError("Cannot write to val") else: self.__dict__["_val"] = value else: object.__setattr__(self, attr, value)
[docs] def ice_postUnmarshal(self): """ Provides additional initialization once all data loaded Required due to __getattr__ implementation. """ pass # Currently unused
[docs] def ice_preMarshal(self): """ Provides additional validation before data is sent Required due to __getattr__ implementation. """ pass # Currently unused
[docs] class RClassI(omero.RClass): def __init__(self, value): omero.RClass.__init__(self, value)
[docs] def getValue(self, current=None): return self._val
[docs] def compare(self, rhs, current=None): raise NotImplementedError("compare")
def __eq__(self, obj): if obj is None: return False elif obj is self: return True elif not isinstance(obj, omero.RClass): return False return obj._val == self._val def __ne__(self, obj): return not self.__eq__(obj) def __hash__(self): return hash(self._val) def __getattr__(self, attr): if attr == "val": return self.getValue() else: raise AttributeError(attr) def __setattr__(self, attr, value): if attr == "val": if "_val" in self.__dict__: raise omero.ClientError("Cannot write to val") else: self.__dict__["_val"] = value else: object.__setattr__(self, attr, value)
[docs] def ice_postUnmarshal(self): """ Provides additional initialization once all data loaded Required due to __getattr__ implementation. """ pass # Currently unused
[docs] def ice_preMarshal(self): """ Provides additional validation before data is sent Required due to __getattr__ implementation. """ pass # Currently unused
# Implementations (collections) # =========================================================================
[docs] class RArrayI(omero.RArray): """ Guaranteed to never contain an empty list. """ def __init__(self, arg=None, *args): if arg is None: self._val = [] elif not hasattr(arg, "__iter__"): self._val = [arg] else: self._val = list(arg) self._val.extend(args) for v in self._val: if not isinstance(v, omero.RType): raise ValueError("Item of wrong type: %s" % type(v))
[docs] def compare(self, rhs, current=None): raise NotImplementedError("compare")
[docs] def getValue(self, current=None): return self._val
[docs] def get(self, index, current=None): return self._val[index]
[docs] def size(self, current=None): return len(self._val)
[docs] def add(self, value, current=None): self._val.append(value)
[docs] def addAll(self, values, current=None): self.val.append(values)
def __eq__(self, obj): if obj is None: return False elif self is obj: return True elif not isinstance(obj, omero.RArray): return False return self._val == obj._val def __ne__(self, obj): return not self.__eq__(obj) def __hash__(self, obj): """ Not allowed. Hashing a list is not supported. """ return hash(self._val) # Throws an exception def __getattr__(self, attr): if attr == "val": return self.getValue() else: raise AttributeError(attr) def __setattr__(self, attr, value): if attr == "val": if "_val" in self.__dict__: raise omero.ClientError("Cannot write to val") else: self.__dict__["_val"] = value else: object.__setattr__(self, attr, value)
[docs] def ice_postUnmarshal(self): """ Provides additional initialization once all data loaded Required due to __getattr__ implementation. """ pass # Currently unused
[docs] def ice_preMarshal(self): """ Provides additional validation before data is sent Required due to __getattr__ implementation. """ pass # Currently unused
[docs] class RListI(omero.RList): """ Guaranteed to never contain an empty list. """ def __init__(self, arg=None, *args): if arg is None: self._val = [] elif not hasattr(arg, "__iter__"): self._val = [arg] else: self._val = list(arg) self._val.extend(args) for v in self._val: if not isinstance(v, omero.RType): raise ValueError("Item of wrong type: %s" % type(v))
[docs] def compare(self, rhs, current=None): raise NotImplementedError("compare")
[docs] def getValue(self, current=None): return self._val
[docs] def get(self, index, current=None): return self._val[index]
[docs] def size(self, current=None): return len(self._val)
[docs] def add(self, value, current=None): self._val.append(value)
[docs] def addAll(self, values, current=None): self.val.append(values)
def __eq__(self, obj): if obj is None: return False elif self is obj: return True elif not isinstance(obj, omero.RList): return False return self._val == obj._val def __ne__(self, obj): return not self.__eq__(obj) def __hash__(self, obj): """ Not allowed. Hashing a list is not supported. """ return hash(self._val) # Throws an exception def __getattr__(self, attr): if attr == "val": return self.getValue() else: raise AttributeError(attr) def __setattr__(self, attr, value): if attr == "val": if "_val" in self.__dict__: raise omero.ClientError("Cannot write to val") else: self.__dict__["_val"] = value else: object.__setattr__(self, attr, value)
[docs] def ice_postUnmarshal(self): """ Provides additional initialization once all data loaded Required due to __getattr__ implementation. """ pass # Currently unused
[docs] def ice_preMarshal(self): """ Provides additional validation before data is sent Required due to __getattr__ implementation. """ pass # Currently unused
[docs] class RSetI(omero.RSet): """ Guaranteed to never contain an empty list. """ def __init__(self, arg=None, *args): if arg is None: self._val = [] elif not hasattr(arg, "__iter__"): self._val = [arg] else: self._val = list(arg) self._val.extend(args) for v in self._val: if not isinstance(v, omero.RType): raise ValueError("Item of wrong type: %s" % type(v))
[docs] def compare(self, rhs, current=None): raise NotImplementedError("compare")
[docs] def getValue(self, current=None): return self._val
[docs] def get(self, index, current=None): return self._val[index]
[docs] def size(self, current=None): return len(self._val)
[docs] def add(self, value, current=None): self._val.append(value)
[docs] def addAll(self, values, current=None): self.val.append(values)
def __eq__(self, obj): if obj is None: return False elif self is obj: return True elif not isinstance(obj, omero.RSet): return False return self._val == obj._val def __ne__(self, obj): return not self.__eq__(obj) def __hash__(self, obj): """ Not allowed. Hashing a list is not supported. """ return hash(self._val) # Throws an exception def __getattr__(self, attr): if attr == "val": return self.getValue() else: raise AttributeError(attr) def __setattr__(self, attr, value): if attr == "val": if "_val" in self.__dict__: raise omero.ClientError("Cannot write to val") else: self.__dict__["_val"] = value else: object.__setattr__(self, attr, value)
[docs] def ice_postUnmarshal(self): """ Provides additional initialization once all data loaded Required due to __getattr__ implementation. """ pass # Currently unused
[docs] def ice_preMarshal(self): """ Provides additional validation before data is sent Required due to __getattr__ implementation. """ pass # Currently unused
[docs] class RMapI(omero.RMap): def __init__(self, arg=None, **kwargs): if arg is None: self._val = {} else: self._val = dict(arg) # May throw an exception self._val.update(kwargs) self._validate() def _validate(self): for k, v in list(self._val.items()): if not isinstance(k, str): raise ValueError("Key of wrong type: %s" % type(k)) if v is not None and not isinstance(v, omero.RType): raise ValueError("Value of wrong type: %s" % type(v))
[docs] def compare(self, rhs, current=None): raise NotImplementedError("compare")
[docs] def getValue(self, current=None): return self._val
[docs] def get(self, key, current=None): return self._val[key]
[docs] def put(self, key, value, current=None): self._val[key] = value
[docs] def size(self, current=None): return len(self._val)
def __eq__(self, obj): if obj is None: return False elif self is obj: return True elif not isinstance(obj, omero.RMap): return False return self._val == obj._val def __ne__(self, obj): return not self.__eq__(obj) def __hash__(self, obj): """ Not allowed. Hashing a list is not supported. """ return hash(self._val) # Throws an exception def __getattr__(self, attr): if attr == "val": return self.getValue() else: raise AttributeError(attr) def __setattr__(self, attr, value): if attr == "val": if "_val" in self.__dict__: raise omero.ClientError("Cannot write to val") else: self.__dict__["_val"] = value else: object.__setattr__(self, attr, value)
[docs] def ice_postUnmarshal(self): """ Provides additional initialization once all data loaded Required due to __getattr__ implementation. """ pass # Currently unused
[docs] def ice_preMarshal(self): """ Provides additional validation before data is sent Required due to __getattr__ implementation. """ pass # Currently unused
# Helpers # ======================================================================== # Conversion classes are for omero.model <--> ome.model only (no python)
[docs] class ObjectFactory(Ice.ObjectFactory): def __init__(self, cls, f): try: self.id = cls.ice_staticId() except Exception: pass self.f = f
[docs] def create(self, string): return self.f()
[docs] def destroy(self): pass
[docs] def register(self, ic): ic.addObjectFactory(self, self.id)
# Shared state (flyweight) # ========================================================================= rtrue = RBoolI(True) rfalse = RBoolI(False) rlong0 = RLongI(0) rint0 = RIntI(0) remptystr = RStringI("") remptyclass = RClassI("") rnullinternal = RInternalI(None) rnullobject = RObjectI(None) # Object factories # ========================================================================= ObjectFactories = { RBoolI: ObjectFactory(RBoolI, lambda: RBoolI(False)), RDoubleI: ObjectFactory(RDoubleI, lambda: RDoubleI(0.0)), RFloatI: ObjectFactory(RFloatI, lambda: RFloatI(0.0)), RIntI: ObjectFactory(RIntI, lambda: RIntI(0)), RLongI: ObjectFactory(RLongI, lambda: RLongI(0)), RTimeI: ObjectFactory(RTimeI, lambda: RTimeI(0)), RClassI: ObjectFactory(RClassI, lambda: RClassI("")), RStringI: ObjectFactory(RStringI, lambda: RStringI("")), RInternalI: ObjectFactory(RInternalI, lambda: RInternalI(None)), RObjectI: ObjectFactory(RObjectI, lambda: RObjectI(None)), RArrayI: ObjectFactory(RArrayI, lambda: RArrayI()), RListI: ObjectFactory(RListI, lambda: RListI()), RSetI: ObjectFactory(RSetI, lambda: RSetI()), RMapI: ObjectFactory(RMapI, lambda: RMapI()) }