@@ -34,35 +34,35 @@ PYBIND11_EMBEDDED_MODULE(aiges_embed, module) {
3434 r.len = size;
3535
3636 })
37- .def_readwrite (" key" , &ResponseData::key, py::return_value_policy::automatic_reference )
38- .def_readwrite (" data" , &ResponseData::data, py::return_value_policy::automatic_reference )
39- .def_readwrite (" status" , &ResponseData::status, py::return_value_policy::automatic_reference )
40- .def_readwrite (" len" , &ResponseData::len, py::return_value_policy::automatic_reference )
41- .def_readwrite (" type" , &ResponseData::type, py::return_value_policy::automatic_reference );
37+ .def_readwrite (" key" , &ResponseData::key, py::return_value_policy::copy )
38+ .def_readwrite (" data" , &ResponseData::data, py::return_value_policy::copy )
39+ .def_readwrite (" status" , &ResponseData::status, py::return_value_policy::copy )
40+ .def_readwrite (" len" , &ResponseData::len, py::return_value_policy::copy )
41+ .def_readwrite (" type" , &ResponseData::type, py::return_value_policy::copy );
4242
4343 py::class_<Response> response (module , " Response" );
4444 response.def (py::init<>())
45- .def_readwrite (" list" , &Response::list, py::return_value_policy::automatic_reference )
46- .def_readwrite (" error_code" , &Response::errCode, py::return_value_policy::automatic_reference )
47- .def (" response_err" , &Response::responseErr, py::return_value_policy::automatic_reference );
45+ .def_readwrite (" list" , &Response::list, py::return_value_policy::copy )
46+ .def_readwrite (" error_code" , &Response::errCode, py::return_value_policy::copy )
47+ .def (" response_err" , &Response::responseErr, py::return_value_policy::copy );
4848
4949 py::class_<DataListNode> dataListNode (module , " DataListNode" );
5050 dataListNode.def (py::init<>())
51- .def_readwrite (" key" , &DataListNode::key , py::return_value_policy::automatic_reference )
52- .def_readwrite (" data" , &DataListNode::data , py::return_value_policy::automatic_reference )
53- .def_readwrite (" len" , &DataListNode::len , py::return_value_policy::automatic_reference )
54- .def_readwrite (" status" , &DataListNode::status , py::return_value_policy::automatic_reference )
55- .def_readwrite (" type" , &DataListNode::type , py::return_value_policy::automatic_reference )
51+ .def_property_readonly (" key" , &DataListNode::get_key , py::return_value_policy::reference )
52+ .def_property_readonly (" data" , &DataListNode::get_data , py::return_value_policy::reference )
53+ .def_property_readonly (" len" , &DataListNode::get_len , py::return_value_policy::reference )
54+ .def_property_readonly (" status" , &DataListNode::get_status , py::return_value_policy::reference )
55+ .def_property_readonly (" type" , &DataListNode::get_type , py::return_value_policy::reference )
5656 .def (" get_data" , &DataListNode::get_data, py::return_value_policy::reference);
5757
5858 py::class_<DataListCls> dataListCls (module , " DataListCls" );
5959 dataListCls.def (py::init<>())
60- .def_readwrite (" list" , &DataListCls::list , py::return_value_policy::automatic_reference )
60+ .def_property_readonly (" list" , &DataListCls::get_list , py::return_value_policy::reference )
6161 .def (" get" , &DataListCls::get, py::return_value_policy::reference);
6262
6363 py::class_<SessionCreateResponse> sessionCreateResponse (module , " SessionCreateResponse" );
6464 sessionCreateResponse.def (py::init<>())
65- .def_readwrite (" handle" , &SessionCreateResponse::handle, py::return_value_policy::automatic_reference )
65+ .def_readwrite (" handle" , &SessionCreateResponse::handle, py::return_value_policy::copy )
6666 .def_readwrite (" error_code" , &SessionCreateResponse::errCode, py::return_value_policy::reference);
6767}
6868
@@ -90,6 +90,21 @@ py::bytes DataListNode::get_data() {
9090 return data;
9191}
9292
93+ std::string DataListNode::get_key () {
94+ return key;
95+ }
96+
97+ unsigned int DataListNode::get_len () {
98+ return len;
99+ }
100+
101+ int DataListNode::get_status () {
102+ return status;
103+ }
104+
105+ int DataListNode::get_type () {
106+ return type;
107+ }
93108DataListNode *DataListCls::get (std::string key) {
94109 for (int idx = 0 ; idx < list.size (); idx++) {
95110 DataListNode *node = &list[idx];
@@ -99,6 +114,10 @@ DataListNode *DataListCls::get(std::string key) {
99114 }
100115 return nullptr ;
101116}
117+ std::vector <DataListNode> DataListCls::get_list () {
118+ return list;
119+ }
120+
102121
103122PyWrapper::PyWrapper () {
104123 // 仅仅为了 加载下python lib库使 其部分函数可被导出使用
@@ -244,7 +263,7 @@ int PyWrapper::wrapperOnceExec(const char *usrTag, std::map <std::string, std::s
244263
245264 }
246265 SetSidUsrTag (sid, usrTag);
247-
266+ params[ " sid " ] = sid;
248267 py::gil_scoped_acquire acquire;
249268 // 执行python exec 推理
250269 py::object r = _wrapperOnceExec (params, reqData, usrTag);
@@ -313,6 +332,10 @@ int PyWrapper::wrapperOnceExec(const char *usrTag, std::map <std::string, std::s
313332 spdlog::get (" stderr_console" )->error (" error_already_set error: {}" , e.what ());
314333 return -1 ;
315334 }
335+ catch (const std::exception &e) {
336+ spdlog::get (" stderr_console" )->error (" error_already_set error: {}" , e.what ());
337+ return -1 ;
338+ }
316339
317340 return 0 ;
318341
@@ -328,7 +351,7 @@ int PyWrapper::wrapperOnceExecAsync(const char *usrTag, std::map <std::string, s
328351 }
329352 int ret = 0 ;
330353 SetSidUsrTag (sid, usrTag);
331-
354+ params[ " sid " ] = sid;
332355 py::gil_scoped_acquire acquire;
333356 // 执行python exec 推理
334357 py::object r = _wrapperOnceExecAsync (params, reqData, sid);
0 commit comments