@@ -398,5 +398,56 @@ void event_loop::call_exception_handler(object context)
398398 }
399399}
400400
401+ void set_default_event_loop (const boost::asio::io_context::strand& strand)
402+ {
403+ import (" boost_el" );
404+ object asyncio = import (" asyncio" );
405+ object abstract_policy = asyncio.attr (" AbstractEventLoopPolicy" );
406+
407+ dict method_dict;
408+ std::shared_ptr<event_loop> p_loop = std::make_shared<event_loop>(strand);
409+
410+ method_dict[" get_event_loop" ] = make_function (
411+ [p_loop] (object e) {return object (boost::ref (*p_loop));},
412+ default_call_policies (),
413+ boost::mpl::vector<object, object>()
414+ );
415+
416+ object class_boost_policy = call<object>(
417+ (PyObject*)&PyType_Type,
418+ str (" BoostEventLoopPolicy" ),
419+ boost::python::make_tuple (abstract_policy),
420+ method_dict);
421+
422+ object boost_policy_instance = class_boost_policy.attr (" __call__" )();
423+ asyncio.attr (" set_event_loop_policy" )(boost_policy_instance);
424+ }
425+
426+ BOOST_PYTHON_MODULE (boost_el)
427+ {
428+ class_<event_loop, boost::noncopyable>(" Eventloop" , init<boost::asio::io_context::strand&>())
429+ .def (" call_soon" , &event_loop::call_soon)
430+ .def (" call_soon_thread_safe" , &event_loop::call_soon_thread_safe)
431+ .def (" call_later" , &event_loop::call_later)
432+ .def (" call_at" , &event_loop::call_at)
433+ .def (" time" , &event_loop::time)
434+ .def (" add_reader" , &event_loop::add_reader)
435+ .def (" remove_reader" , &event_loop::remove_reader)
436+ .def (" add_writer" , &event_loop::add_writer)
437+ .def (" remove_writer" , &event_loop::remove_writer)
438+ .def (" sock_recv" , &event_loop::sock_recv)
439+ .def (" sock_recv_into" , &event_loop::sock_recv_into)
440+ .def (" sock_sendall" , &event_loop::sock_sendall)
441+ .def (" sock_connect" , &event_loop::sock_connect)
442+ .def (" sock_accept" , &event_loop::sock_accept)
443+ .def (" sock_sendfile" , &event_loop::sock_sendfile)
444+ .def (" start_tls" , &event_loop::start_tls)
445+ .def (" getaddrinfo" , &event_loop::getaddrinfo)
446+ .def (" getnameinfo" , &event_loop::getnameinfo)
447+ .def (" set_exception_handler" , &event_loop::set_exception_handler)
448+ .def (" get_exception_handler" , &event_loop::get_exception_handler)
449+ .def (" default_exception_handler" , &event_loop::default_exception_handler)
450+ .def (" call_exception_handler" , &event_loop::call_exception_handler);
451+ }
401452
402453}}} // namespace boost::python
0 commit comments