Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
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")
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
data = json.dumps(req_dict, default=jdefault).encode("utf8")
# Send our data, ensure that it is framed with a trailing \n
self._process.stdin.write(b"%b\n" % (data,))
self._process.stdin.flush()
resp: _ProcessResponse = self._serializer.structure(
self._next_message(), _ProcessResponse_R
)
if isinstance(resp, _OkayResponse):
return self._serializer.structure(resp.ok, response_type)
elif isinstance(resp, _CallbackResponse):
return resp.callback
else:
raise JSIIError(resp.error) from JavaScriptError(resp.stack)