diff --git a/src/xcomm.cpp b/src/xcomm.cpp index 1f4a6a38..83be80e7 100644 --- a/src/xcomm.cpp +++ b/src/xcomm.cpp @@ -84,7 +84,15 @@ namespace xpyt const xeus::xtarget* xcomm::target(const py::object& target_name) const { - return xeus::get_interpreter().comm_manager().target(target_name.cast()); + auto& comm_manager = xeus::get_interpreter().comm_manager(); + auto res = comm_manager.target(target_name.cast()); + if (!res) + { + comm_manager.register_comm_target( + target_name.cast(), [](xeus::xcomm&&, const xeus::xmessage&) {} + ); + } + return comm_manager.target(target_name.cast()); } xeus::xguid xcomm::id(const py::kwargs& kwargs) const diff --git a/src/xcomm.hpp b/src/xcomm.hpp index 717b1410..f6909c89 100644 --- a/src/xcomm.hpp +++ b/src/xcomm.hpp @@ -40,6 +40,9 @@ namespace xpyt private: + // Warning: this function creates and register the target with a dummy + // comm_open handler when the target does not exist, so that create_comm + // has the same behavior as ipykernel. const xeus::xtarget* target(const py::object& target_name) const; xeus::xguid id(const py::kwargs& kwargs) const; cpp_callback_type cpp_callback(const python_callback_type& callback) const;