Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def ohook(d):
if d.keys() == {"$jsii.byref"} or d.keys() == {"$jsii.byref", "$jsii.interfaces"}:
return ObjRef(ref=d["$jsii.byref"], interfaces=d.get("$jsii.interfaces"))
if d.keys() == {"$jsii.date"}:
return dateutil.parser.isoparse(d["$jsii.date"])
if d.keys() == {"$jsii.enum"}:
ref, member = d["$jsii.enum"].rsplit("/", 1)
return EnumRef(ref=ObjRef(ref=ref + "@"), member=member)
if d.keys() == {"$jsii.map"}:
return d["$jsii.map"]
return d
def ohook(d):
if d.keys() == {"$jsii.byref"} or d.keys() == {"$jsii.byref", "$jsii.interfaces"}:
return ObjRef(ref=d["$jsii.byref"], interfaces=d.get("$jsii.interfaces"))
if d.keys() == {"$jsii.date"}:
return dateutil.parser.isoparse(d["$jsii.date"])
if d.keys() == {"$jsii.enum"}:
ref, member = d["$jsii.enum"].rsplit("/", 1)
return EnumRef(ref=ObjRef(ref=ref + "@"), member=member)
if d.keys() == {"$jsii.map"}:
return d["$jsii.map"]
return d
def deco(cls):
cls.__jsii_type__ = jsii_type
_reference_map.register_enum(cls)
return cls
"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
def deco(cls):
cls.__jsii_type__ = jsii_type
cls.__jsii_struct_bases__ = jsii_struct_bases
cls.__jsii_name_mapping__ = name_mapping
_reference_map.register_data_type(cls)
return cls
def __new__(cls, name, bases, attrs, *, jsii_type=None):
# We want to ensure that subclasses of a JSII class do not require setting the
# jsii_type keyword argument. They should be able to subclass it as normal.
# Since their parent class will have the __jsii_type__ variable defined, they
# will as well anyways.
if jsii_type is not None:
attrs["__jsii_type__"] = jsii_type
obj = super().__new__(cls, name, bases, attrs)
# Now that we've created the class, we'll need to register it with our reference
# mapper. We only do this for types that are actually jsii types, and not any
# subclasses of them.
if jsii_type is not None:
_reference_map.register_type(obj)
return obj
def _recursize_dereference(kernel, d):
if isinstance(d, dict):
return {k: _recursize_dereference(kernel, v) for k, v in d.items()}
elif isinstance(d, list):
return [_recursize_dereference(kernel, i) for i in d]
elif isinstance(d, ObjRef):
return _reference_map.resolve_reference(kernel, d)
elif isinstance(d, EnumRef):
return _recursize_dereference(kernel, d.ref)(d.member)
else:
return d
def _handle_callback(kernel, callback):
# need to handle get, set requests here as well as invoke requests
if callback.invoke:
obj = _reference_map.resolve_id(callback.invoke.objref.ref)
method = getattr(obj, callback.cookie)
hydrated_args = [_recursize_dereference(kernel, a) for a in callback.invoke.args]
return method(*hydrated_args)
elif callback.get:
obj = _reference_map.resolve_id(callback.get.objref.ref)
return getattr(obj, callback.cookie)
elif callback.set:
obj = _reference_map.resolve_id(callback.set.objref.ref)
hydrated_value = _recursize_dereference(kernel, callback.set.value)
return setattr(obj, callback.cookie, hydrated_value)
else:
raise JSIIError("Callback does not contain invoke|get|set")
def deco(iface):
iface.__jsii_type__ = jsii_type
_reference_map.register_interface(iface)
return iface
def __call__(cls, *args, **kwargs):
inst = super().__call__(*args, **kwargs)
# Register this instance with our reference map.
_reference_map.register_reference(inst)
return inst