Example #1
0
def _make_reference_for_native(kernel, d):
    # Ugly delayed import here because I can't solve the cyclic
    # package dependency right now :(.
    from jsii._runtime import python_jsii_mapping

    if isinstance(d, dict):
        return {k: _make_reference_for_native(kernel, v) for k, v in d.items()}
    elif isinstance(d, list):
        return [_make_reference_for_native(kernel, i) for i in d]

    mapping = python_jsii_mapping(d)
    if mapping:
        struct_data = {
            jsii_name: getattr(d, python_name)
            for python_name, jsii_name in mapping.items()
        }
        return _make_reference_for_native(kernel, struct_data)
    elif hasattr(d, "__jsii_type__"):
        return d
    elif isinstance(d, (int, type(None), str, float, bool, datetime.datetime)):
        return d
    else:
        d.__jsii__type__ = "Object"
        kernel.create(Object, d)
        _reference_map.register_reference(d)
        return d
Example #2
0
def _make_reference_for_native(kernel, d):
    # Ugly delayed import here because I can't solve the cyclic
    # package dependency right now :(.
    from jsii._runtime import python_jsii_mapping

    if isinstance(d, dict):
        return {k: _make_reference_for_native(kernel, v) for k, v in d.items()}
    elif isinstance(d, list):
        return [_make_reference_for_native(kernel, i) for i in d]

    mapping = python_jsii_mapping(d)
    if mapping:
        struct_data = {
            jsii_name: getattr(d, python_name)
            for python_name, jsii_name in mapping.items()
        }
        return _make_reference_for_native(kernel, struct_data)
    elif hasattr(d, "__jsii_type__"):
        return d
    elif isinstance(d, (int, type(None), str, float, bool, datetime.datetime)):
        return d
    elif isinstance(
            d, (FunctionType, MethodType, BuiltinFunctionType, LambdaType)):
        # Whether a given object is a function-like object.
        # We won't use iscallable() since objects may implement __call__()
        # but we still want to serialize them as normal.
        raise JSIIError(
            "Cannot pass function as argument here (did you mean to call this function?): %r"
            % d)
    else:
        d.__jsii__type__ = "Object"
        kernel.create(Object, d)
        _reference_map.register_reference(d)
        return d
def _make_reference_for_native(kernel, d):
    if isinstance(d, dict):
        return {"$jsii.map": {k: _make_reference_for_native(kernel, v) for k, v in d.items()}}
    elif isinstance(d, list):
        return [_make_reference_for_native(kernel, i) for i in d]

    if getattr(d, "__jsii_type__", None) is not None:
        # Ugly delayed import here because I can't solve the cyclic
        # package dependency right now :(.
        from jsii._runtime import python_jsii_mapping

        typeFqn = getattr(d, "__jsii_type__")
        mapping = python_jsii_mapping(d)
        if mapping: # This means we are handling a data_type (aka Struct)
            return {
                "$jsii.struct": {
                    "fqn": typeFqn,
                    "data": {
                        jsii_name: _make_reference_for_native(kernel, getattr(d, python_name)) for python_name, jsii_name in mapping.items()
                    }
                }
            }
        return d
    elif isinstance(d, (int, type(None), str, float, bool, datetime.datetime)):
        return d
    elif isinstance(d, (FunctionType, MethodType, BuiltinFunctionType, LambdaType)):
        # Whether a given object is a function-like object.
        # We won't use iscallable() since objects may implement __call__()
        # but we still want to serialize them as normal.
        raise JSIIError("Cannot pass function as argument here (did you mean to call this function?): %r" % d)
    else:
        kernel.create(d.__class__, d)
        _reference_map.register_reference(d)
        return d