MCPcopy Create free account
hub / github.com/AcademySoftwareFoundation/xstudio / tuple_from_message

Method tuple_from_message

src/python_module/src/py_context.cpp:337–384  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

335}
336
337py::tuple py_context::tuple_from_message(
338 const message_id mid, const strong_actor_ptr sender, const message &msg) {
339 py::tuple result(msg.size() + 2);
340 // spdlog::warn("is_async {}, is_request {}, is_response {} msg size {}",
341 // mid.is_async(), mid.is_request(), mid.is_response(), msg.size());
342 // spdlog::warn("Request id {}", std::to_string(mid.response_id().integer_value()));
343 // spdlog::warn("Response answered {} id
344 // {}", mid.is_answered(), std::to_string(mid.request_id().integer_value()));
345
346 for (size_t i = 0; i < msg.size(); ++i) {
347 auto tid = msg.type_at(i);
348 if (auto meta_obj = detail::global_meta_object(tid); not meta_obj.type_name.empty()) {
349 auto kvp = portable_bindings().find(std::string(meta_obj.type_name));
350 if (kvp == portable_bindings().end()) {
351 set_py_exception(
352 R"(Unable to add element of type C ")",
353 std::string(meta_obj.type_name),
354 R"(" to message: type is unknown to CAF)");
355 return py::tuple{};
356 }
357 auto obj = kvp->second->to_object(msg, i);
358 PyTuple_SetItem(result.ptr(), static_cast<int>(i), obj.release().ptr());
359 } else {
360 set_py_exception(
361 "Unable to extract element #",
362 i,
363 " from message: ",
364 "could not get portable name of ",
365 tid);
366 return py::tuple{};
367 }
368 }
369 if (mid.is_response())
370 PyTuple_SetItem(
371 result.ptr(), msg.size(), PyLong_FromSize_t(mid.request_id().integer_value()));
372 else if (mid.is_async())
373 PyTuple_SetItem(
374 result.ptr(), msg.size(), PyLong_FromSize_t(mid.response_id().integer_value()));
375 else
376 PyTuple_SetItem(result.ptr(), msg.size(), PyLong_FromSize_t(0));
377
378 PyTuple_SetItem(
379 result.ptr(),
380 msg.size() + 1,
381 py::cast(caf::actor_cast<caf::actor>(sender)).release().ptr());
382
383 return result;
384}
385
386py::tuple py_context::py_dequeue() {
387 mailbox_element_ptr ptr = nullptr;

Callers

nothing calls this directly

Calls 9

set_py_exceptionFunction · 0.85
to_objectMethod · 0.80
ptrMethod · 0.80
stringClass · 0.50
sizeMethod · 0.45
emptyMethod · 0.45
findMethod · 0.45
endMethod · 0.45
releaseMethod · 0.45

Tested by

no test coverage detected