31 {
32 T obj_ptr = (T)PyCapsule_GetPointer(pyobj, type_ptr.c_str());
33 if (obj_ptr == nullptr) {
34 AERROR <<
"PyObjectToPtr failed,type->" << type_ptr <<
"pyobj: " << pyobj;
35 }
36 return obj_ptr;
37}
38
40 char *filepath = nullptr;
41 Py_ssize_t len = 0;
42 if (!PyArg_ParseTuple(args, const_cast<char *>("s#:new_PyRecordReader"),
43 &filepath, &len)) {
44 AERROR <<
"cyber_new_PyRecordReader parsetuple failed!";
45 Py_INCREF(Py_None);
46 return Py_None;
47 }
48
50 return PyCapsule_New(reader, "apollo_cyber_record_pyrecordfilereader",
51 nullptr);
52}
53
55 PyObject *pyobj_rec_reader = nullptr;
56 if (!PyArg_ParseTuple(args, const_cast<char *>("O:delete_PyRecordReader"),
57 &pyobj_rec_reader)) {
58 Py_INCREF(Py_None);
59 return Py_None;
60 }
61
62 auto *reader =
reinterpret_cast<PyRecordReader *
>(PyCapsule_GetPointer(
63 pyobj_rec_reader, "apollo_cyber_record_pyrecordfilereader"));
64 if (nullptr == reader) {
65 AERROR <<
"delete_PyRecordReader:reader ptr is null!";
66 Py_INCREF(Py_None);
67 return Py_None;
68 }
69 delete reader;
70 Py_INCREF(Py_None);
71 return Py_None;
72}
73
75 PyObject *pyobj_reader = nullptr;
76 uint64_t begin_time = 0;
77 uint64_t end_time = std::numeric_limits<uint64_t>::max();
78 if (!PyArg_ParseTuple(args,
79 const_cast<char *>("OKK:PyRecordReader_ReadMessage"),
80 &pyobj_reader, &begin_time, &end_time)) {
81 return nullptr;
82 }
83
84 auto *reader =
reinterpret_cast<PyRecordReader *
>(PyCapsule_GetPointer(
85 pyobj_reader, "apollo_cyber_record_pyrecordfilereader"));
86 if (nullptr == reader) {
87 AERROR <<
"PyRecordReader_ReadMessage ptr is null!";
88 return nullptr;
89 }
90
91 const auto result = reader->
ReadMessage(begin_time, end_time);
92 PyObject *pyobj_bag_message = PyDict_New();
93
94 PyObject *bld_name = Py_BuildValue("s", result.channel_name.c_str());
95 PyDict_SetItemString(pyobj_bag_message, "channel_name", bld_name);
96 Py_DECREF(bld_name);
97
98 PyObject *bld_data =
99 Py_BuildValue("y#", result.data.c_str(), result.data.length());
100
101 ACHECK(bld_data) <<
"Py_BuildValue returns NULL.";
102 PyDict_SetItemString(pyobj_bag_message, "data", bld_data);
103 Py_DECREF(bld_data);
104
105 PyObject *bld_type = Py_BuildValue("s", result.data_type.c_str());
106 PyDict_SetItemString(pyobj_bag_message, "data_type", bld_type);
107 Py_DECREF(bld_type);
108
109 PyObject *bld_time = Py_BuildValue("s", "timestamp");
110 PyObject *bld_rtime = Py_BuildValue("K", result.timestamp);
111 PyDict_SetItem(pyobj_bag_message, bld_time, bld_rtime);
112 Py_DECREF(bld_time);
113 Py_DECREF(bld_rtime);
114
115 PyObject *bld_end = Py_BuildValue("s", "end");
116 PyDict_SetItem(pyobj_bag_message, bld_end, result.end ? Py_True : Py_False);
117 Py_DECREF(bld_end);
118
119 return pyobj_bag_message;
120}
121
123 PyObject *args) {
124 PyObject *pyobj_reader = nullptr;
125 char *channel_name = nullptr;
126 if (!PyArg_ParseTuple(
127 args, const_cast<char *>("Os:PyRecordReader_GetMessageNumber"),
128 &pyobj_reader, &channel_name)) {
129 AERROR <<
"PyRecordReader_GetMessageNumber:PyRecordReader failed!";
130 return PyLong_FromUnsignedLongLong(0);
131 }
132
133 auto *reader =
reinterpret_cast<PyRecordReader *
>(PyCapsule_GetPointer(
134 pyobj_reader, "apollo_cyber_record_pyrecordfilereader"));
135 if (nullptr == reader) {
136 AERROR <<
"PyRecordReader_GetMessageNumber ptr is null!";
137 return PyLong_FromUnsignedLongLong(0);
138 }
139
141 return PyLong_FromUnsignedLongLong(num);
142}
143
145 PyObject *pyobj_reader = nullptr;
146 char *channel_name = nullptr;
147 if (!PyArg_ParseTuple(
148 args, const_cast<char *>("Os:cyber_PyRecordReader_GetMessageType"),
149 &pyobj_reader, &channel_name)) {
150 AERROR <<
"PyRecordReader_GetMessageType:PyRecordReader failed!";
152 }
153
154 auto *reader =
reinterpret_cast<PyRecordReader *
>(PyCapsule_GetPointer(
155 pyobj_reader, "apollo_cyber_record_pyrecordfilereader"));
156 if (nullptr == reader) {
157 AERROR <<
"PyRecordReader_GetMessageType ptr is null!";
159 }
160
161 const std::string msg_type = reader->
GetMessageType(channel_name);
163}
164
166 PyObject *pyobj_reader = nullptr;
167 char *channel_name = nullptr;
168 if (!PyArg_ParseTuple(args,
169 const_cast<char *>("Os:PyRecordReader_GetProtoDesc"),
170 &pyobj_reader, &channel_name)) {
171 AERROR <<
"PyRecordReader_GetProtoDesc failed!";
173 }
174
175 auto *reader =
reinterpret_cast<PyRecordReader *
>(PyCapsule_GetPointer(
176 pyobj_reader, "apollo_cyber_record_pyrecordfilereader"));
177 if (nullptr == reader) {
178 AERROR <<
"PyRecordReader_GetProtoDesc ptr is null!";
180 }
181
182 const std::string pb_desc = reader->
GetProtoDesc(channel_name);
184}
185
187 PyObject *pyobj_reader = nullptr;
188 if (!PyArg_ParseTuple(
189 args, const_cast<char *>("O:cyber_PyRecordReader_GetHeaderString"),
190 &pyobj_reader)) {
192 }
193
194 auto *reader =
reinterpret_cast<PyRecordReader *
>(PyCapsule_GetPointer(
195 pyobj_reader, "apollo_cyber_record_pyrecordfilereader"));
196 if (nullptr == reader) {
197 AERROR <<
"PyRecordReader_GetHeaderString ptr is null!";
199 }
200
203}
204
206 PyObject *pyobj_reader = nullptr;
207 if (!PyArg_ParseTuple(args,
208 const_cast<char *>("O:cyber_PyRecordReader_Reset"),
209 &pyobj_reader)) {
210 AERROR <<
"cyber_PyRecordReader_Reset:PyArg_ParseTuple failed!";
211 Py_INCREF(Py_None);
212 return Py_None;
213 }
214
215 auto *reader =
reinterpret_cast<PyRecordReader *
>(PyCapsule_GetPointer(
216 pyobj_reader, "apollo_cyber_record_pyrecordfilereader"));
217 if (nullptr == reader) {
218 AERROR <<
"PyRecordReader_Reset reader is null!";
219 Py_INCREF(Py_None);
220 return Py_None;
221 }
222
224 Py_INCREF(Py_None);
225 return Py_None;
226}
227
229 PyObject *pyobj_reader = nullptr;
230 if (!PyArg_ParseTuple(
231 args, const_cast<char *>("O:cyber_PyRecordReader_GetChannelList"),
232 &pyobj_reader)) {
233 AERROR <<
"cyber_PyRecordReader_GetChannelList:PyArg_ParseTuple failed!";
234 Py_INCREF(Py_None);
235 return Py_None;
236 }
237
238 auto *reader =
reinterpret_cast<PyRecordReader *
>(PyCapsule_GetPointer(
239 pyobj_reader, "apollo_cyber_record_pyrecordfilereader"));
240 if (nullptr == reader) {
241 AERROR <<
"PyRecordReader_GetChannelList reader is null!";
242 Py_INCREF(Py_None);
243 return Py_None;
244 }
245
247 PyObject *pyobj_list = PyList_New(channel_list.size());
248 size_t pos = 0;
249 for (const std::string &channel : channel_list) {
250 PyList_SetItem(pyobj_list, pos, Py_BuildValue("s", channel.c_str()));
251 pos++;
252 }
253
254 return pyobj_list;
255}
256
259 return PyCapsule_New(writer, "apollo_cyber_record_pyrecordfilewriter",
260 nullptr);
261}
262
264 PyObject *pyobj_rec_writer = nullptr;
265 if (!PyArg_ParseTuple(args, const_cast<char *>("O:delete_PyRecordWriter"),
266 &pyobj_rec_writer)) {
267 Py_INCREF(Py_None);
268 return Py_None;
269 }
270
271 auto *writer =
reinterpret_cast<PyRecordWriter *
>(PyCapsule_GetPointer(
272 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter"));
273 if (nullptr == writer) {
274 AERROR <<
"delete_PyRecordWriter:writer is null!";
275 Py_INCREF(Py_None);
276 return Py_None;
277 }
278 delete writer;
279 Py_INCREF(Py_None);
280 return Py_None;
281}
282
284 PyObject *pyobj_rec_writer = nullptr;
285 char *path = nullptr;
286 Py_ssize_t len = 0;
287 if (!PyArg_ParseTuple(args,
288 const_cast<char *>("Os#:cyber_PyRecordWriter_Open"),
289 &pyobj_rec_writer, &path, &len)) {
290 AERROR <<
"cyber_PyRecordWriter_Open:PyArg_ParseTuple failed!";
291 Py_RETURN_FALSE;
292 }
293
295 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter");
296
297 if (nullptr == writer) {
298 AERROR <<
"PyRecordWriter_Open:writer is null!";
299 Py_RETURN_FALSE;
300 }
301
302 std::string path_str(path, len);
303 if (!writer->
Open(path_str)) {
304 Py_RETURN_FALSE;
305 }
306 Py_RETURN_TRUE;
307}
308
310 PyObject *pyobj_rec_writer = nullptr;
311 if (!PyArg_ParseTuple(args, const_cast<char *>("O:delete_PyRecordWriter"),
312 &pyobj_rec_writer)) {
313 Py_INCREF(Py_None);
314 return Py_None;
315 }
316
317 auto *writer =
reinterpret_cast<PyRecordWriter *
>(PyCapsule_GetPointer(
318 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter"));
319 if (nullptr == writer) {
320 AERROR <<
"cyber_PyRecordWriter_Close: writer is null!";
321 Py_INCREF(Py_None);
322 return Py_None;
323 }
325 Py_INCREF(Py_None);
326 return Py_None;
327}
328
330 PyObject *pyobj_rec_writer = nullptr;
331 char *channel = nullptr;
332 char *type = nullptr;
333 char *proto_desc = nullptr;
334 Py_ssize_t len = 0;
335 if (!PyArg_ParseTuple(
336 args, const_cast<char *>("Osss#:cyber_PyRecordWriter_WriteChannel"),
337 &pyobj_rec_writer, &channel, &type, &proto_desc, &len)) {
338 AERROR <<
"cyber_PyRecordWriter_WriteChannel parsetuple failed!";
339 Py_RETURN_FALSE;
340 }
341
342 auto *writer = PyObjectToPtr<PyRecordWriter *>(
343 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter");
344
345 if (nullptr == writer) {
346 AERROR <<
"cyber_PyRecordWriter_WriteChannel:writer ptr is null!";
347 Py_RETURN_FALSE;
348 }
349
350 std::string proto_desc_str(proto_desc, len);
351 if (!writer->
WriteChannel(channel, type, proto_desc_str)) {
352 Py_RETURN_FALSE;
353 }
354 Py_RETURN_TRUE;
355}
356
358 PyObject *pyobj_rec_writer = nullptr;
359 char *channel_name = nullptr;
360 char *rawmessage = nullptr;
361 Py_ssize_t len = 0;
362 uint64_t time = 0;
363 char *proto_desc = nullptr;
364 Py_ssize_t len_desc = 0;
365
366 if (!PyArg_ParseTuple(
367 args, const_cast<char *>("Oss#Ks#:cyber_PyRecordWriter_WriteMessage"),
368 &pyobj_rec_writer, &channel_name, &rawmessage, &len, &time,
369 &proto_desc, &len_desc)) {
370 AERROR <<
"cyber_PyRecordWriter_WriteMessage parsetuple failed!";
371 Py_RETURN_FALSE;
372 }
373
374 auto *writer = PyObjectToPtr<PyRecordWriter *>(
375 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter");
376
377 if (nullptr == writer) {
378 AERROR <<
"cyber_PyRecordWriter_WriteMessage:writer ptr is null!";
379 Py_RETURN_FALSE;
380 }
381
382 std::string rawmessage_str(rawmessage, len);
383 std::string desc_str(proto_desc, len_desc);
384 if (!writer->
WriteMessage(channel_name, rawmessage_str, time, desc_str)) {
385 AERROR <<
"cyber_PyRecordWriter_WriteMessage:WriteMessage failed!";
386 Py_RETURN_FALSE;
387 }
388 Py_RETURN_TRUE;
389}
390
392 PyObject *args) {
393 PyObject *pyobj_rec_writer = nullptr;
394 uint64_t size_kilobytes = 0;
395
396 if (!PyArg_ParseTuple(
397 args,
398 const_cast<char *>(
399 "OK:cyber_PyRecordWriter_SetSizeOfFileSegmentation"),
400 &pyobj_rec_writer, &size_kilobytes)) {
402 << "cyber_PyRecordWriter_SetSizeOfFileSegmentation parsetuple failed!";
403 Py_RETURN_FALSE;
404 }
405
406 auto *writer = PyObjectToPtr<PyRecordWriter *>(
407 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter");
408
409 if (nullptr == writer) {
411 << "cyber_PyRecordWriter_SetSizeOfFileSegmentation:writer ptr is null!";
412 Py_RETURN_FALSE;
413 }
414
416 AERROR <<
"cyber_PyRecordWriter_SetSizeOfFileSegmentation failed!";
417 Py_RETURN_FALSE;
418 }
419 Py_RETURN_TRUE;
420}
421
423 PyObject *args) {
424 PyObject *pyobj_rec_writer = nullptr;
425 uint64_t time_sec = 0;
426
427 if (!PyArg_ParseTuple(
428 args,
429 const_cast<char *>(
430 "OK:cyber_PyRecordWriter_SetIntervalOfFileSegmentation"),
431 &pyobj_rec_writer, &time_sec)) {
432 AERROR <<
"cyber_PyRecordWriter_SetIntervalOfFileSegmentation parsetuple "
433 "failed!";
434 Py_RETURN_FALSE;
435 }
436
437 auto *writer = PyObjectToPtr<PyRecordWriter *>(
438 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter");
439
440 if (nullptr == writer) {
441 AERROR <<
"cyber_PyRecordWriter_SetIntervalOfFileSegmentation:writer ptr "
442 "is null!";
443 Py_RETURN_FALSE;
444 }
445
447 AERROR <<
"cyber_PyRecordWriter_SetIntervalOfFileSegmentation failed!";
448 Py_RETURN_FALSE;
449 }
450 Py_RETURN_TRUE;
451}
452
454 PyObject *args) {
455 PyObject *pyobj_rec_writer = nullptr;
456 char *channel_name = nullptr;
457 if (!PyArg_ParseTuple(
458 args, const_cast<char *>("Os:PyRecordWriter_GetMessageNumber"),
459 &pyobj_rec_writer, &channel_name)) {
460 AERROR <<
"PyRecordWriter_GetMessageNumber:PyRecordWriter_GetMessageNumber "
461 "failed!";
462 return PyLong_FromUnsignedLongLong(0);
463 }
464
465 auto *writer =
reinterpret_cast<PyRecordWriter *
>(PyCapsule_GetPointer(
466 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter"));
467 if (nullptr == writer) {
468 AERROR <<
"PyRecordWriter_GetMessageNumber ptr is null!";
469 return PyLong_FromUnsignedLongLong(0);
470 }
471
473 return PyLong_FromUnsignedLongLong(num);
474}
475
477 PyObject *pyobj_rec_writer = nullptr;
478 char *channel_name = nullptr;
479 if (!PyArg_ParseTuple(args,
480 const_cast<char *>("Os:PyRecordWriter_GetMessageType"),
481 &pyobj_rec_writer, &channel_name)) {
482 AERROR <<
"PyRecordWriter_GetMessageType failed!";
484 }
485
486 auto *writer =
reinterpret_cast<PyRecordWriter *
>(PyCapsule_GetPointer(
487 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter"));
488 if (nullptr == writer) {
489 AERROR <<
"PyRecordWriter_GetMessageType ptr is null!";
491 }
492
495}
496
498 PyObject *pyobj_rec_writer = nullptr;
499 char *channel_name = nullptr;
500 if (!PyArg_ParseTuple(args,
501 const_cast<char *>("Os:PyRecordWriter_GetProtoDesc"),
502 &pyobj_rec_writer, &channel_name)) {
503 AERROR <<
"PyRecordWriter_GetProtoDesc failed!";
505 }
506
507 auto *writer =
reinterpret_cast<PyRecordWriter *
>(PyCapsule_GetPointer(
508 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter"));
509 if (nullptr == writer) {
510 AERROR <<
"PyRecordWriter_GetProtoDesc ptr is null!";
512 }
513
514 const std::string proto_desc_str = writer->
GetProtoDesc(channel_name);
516}
517
518static PyMethodDef _cyber_record_methods[] = {
519
523 METH_VARARGS, ""},
525 METH_VARARGS, ""},
527 METH_VARARGS, ""},
529 METH_VARARGS, ""},
531 METH_VARARGS, ""},
534 METH_VARARGS, ""},
535
536
542 METH_VARARGS, ""},
544 METH_VARARGS, ""},
545 {"PyRecordWriter_SetSizeOfFileSegmentation",
547 {"PyRecordWriter_SetIntervalOfFileSegmentation",
550 METH_VARARGS, ""},
552 METH_VARARGS, ""},
554 METH_VARARGS, ""},
555
556 {nullptr, nullptr, 0, nullptr}
557};
558
561 static struct PyModuleDef module_def = {
562 PyModuleDef_HEAD_INIT,
563 "_cyber_record_wrapper",
564 "CyberRecord module",
565 -1,
566 _cyber_record_methods,
567 nullptr,
568 nullptr,
569 nullptr,
570 nullptr,
571 };
572
573 AINFO <<
"init _cyber_record_wrapper";
574 return PyModule_Create(&module_def);
575}
std::string GetProtoDesc(const std::string &channel_name)
std::string GetMessageType(const std::string &channel_name)
std::string GetHeaderString()
std::set< std::string > GetChannelList() const
BagMessage ReadMessage(uint64_t begin_time=0, uint64_t end_time=std::numeric_limits< uint64_t >::max())
uint64_t GetMessageNumber(const std::string &channel_name)
bool WriteChannel(const std::string &channel_str, const std::string &type, const std::string &proto_desc)
const std::string & GetProtoDesc(const std::string &channel_name) const
bool WriteMessage(const std::string &channel_name, const std::string &rawmessage, uint64_t time, const std::string &proto_desc="")
uint64_t GetMessageNumber(const std::string &channel_name) const
bool Open(const std::string &path)
bool SetSizeOfFileSegmentation(uint64_t size_kilobytes)
const std::string & GetMessageType(const std::string &channel_name) const
bool SetIntervalOfFileSegmentation(uint64_t time_sec)
PyObject * cyber_PyRecordWriter_WriteChannel(PyObject *self, PyObject *args)
PyObject * cyber_PyRecordWriter_Open(PyObject *self, PyObject *args)
PyObject * cyber_PyRecordWriter_GetMessageNumber(PyObject *self, PyObject *args)
PyObject * cyber_PyRecordReader_GetHeaderString(PyObject *self, PyObject *args)
PyObject * cyber_PyRecordWriter_WriteMessage(PyObject *self, PyObject *args)
#define PYOBJECT_NULL_STRING
PyObject * cyber_PyRecordReader_GetMessageType(PyObject *self, PyObject *args)
PyObject * cyber_PyRecordWriter_Close(PyObject *self, PyObject *args)
PyObject * cyber_new_PyRecordReader(PyObject *self, PyObject *args)
PyObject * cyber_PyRecordWriter_SetIntervalOfFileSegmentation(PyObject *self, PyObject *args)
#define C_STR_TO_PY_BYTES(cstr)
PyObject * cyber_delete_PyRecordWriter(PyObject *self, PyObject *args)
PyObject * cyber_PyRecordWriter_SetSizeOfFileSegmentation(PyObject *self, PyObject *args)
PyObject * cyber_PyRecordReader_Reset(PyObject *self, PyObject *args)
PyObject * cyber_PyRecordReader_GetProtoDesc(PyObject *self, PyObject *args)
PyObject * cyber_new_PyRecordWriter(PyObject *self, PyObject *args)
PyObject * cyber_PyRecordReader_ReadMessage(PyObject *self, PyObject *args)
PyObject * cyber_PyRecordWriter_GetProtoDesc(PyObject *self, PyObject *args)
PyObject * cyber_PyRecordReader_GetMessageNumber(PyObject *self, PyObject *args)
PyObject * cyber_delete_PyRecordReader(PyObject *self, PyObject *args)
PyObject * cyber_PyRecordWriter_GetMessageType(PyObject *self, PyObject *args)
PyMODINIT_FUNC PyInit__cyber_record_wrapper(void)
Init function of this module
PyObject * cyber_PyRecordReader_GetChannelList(PyObject *self, PyObject *args)