Apollo 10.0
自动驾驶开放平台
py_record.cc
浏览该文件的文档.
1/******************************************************************************
2 * Copyright 2018 The Apollo Authors. All Rights Reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *****************************************************************************/
16
18#include <limits>
19#include <set>
20#include <string>
21
22#include <Python.h>
23
26
27#define PYOBJECT_NULL_STRING PyBytes_FromStringAndSize("", 0)
28#define C_STR_TO_PY_BYTES(cstr) \
29 PyBytes_FromStringAndSize(cstr.c_str(), cstr.size())
30
31template <typename T>
32T PyObjectToPtr(PyObject *pyobj, const std::string &type_ptr) {
33 T obj_ptr = (T)PyCapsule_GetPointer(pyobj, type_ptr.c_str());
34 if (obj_ptr == nullptr) {
35 AERROR << "PyObjectToPtr failed,type->" << type_ptr << "pyobj: " << pyobj;
36 }
37 return obj_ptr;
38}
39
40PyObject *cyber_new_PyRecordReader(PyObject *self, PyObject *args) {
41 char *filepath = nullptr;
42 Py_ssize_t len = 0;
43 if (!PyArg_ParseTuple(args, const_cast<char *>("s#:new_PyRecordReader"),
44 &filepath, &len)) {
45 AERROR << "cyber_new_PyRecordReader parsetuple failed!";
46 Py_INCREF(Py_None);
47 return Py_None;
48 }
49
50 PyRecordReader *reader = new PyRecordReader(std::string(filepath, len));
51 return PyCapsule_New(reader, "apollo_cyber_record_pyrecordfilereader",
52 nullptr);
53}
54
55PyObject *cyber_delete_PyRecordReader(PyObject *self, PyObject *args) {
56 PyObject *pyobj_rec_reader = nullptr;
57 if (!PyArg_ParseTuple(args, const_cast<char *>("O:delete_PyRecordReader"),
58 &pyobj_rec_reader)) {
59 Py_INCREF(Py_None);
60 return Py_None;
61 }
62
63 auto *reader = reinterpret_cast<PyRecordReader *>(PyCapsule_GetPointer(
64 pyobj_rec_reader, "apollo_cyber_record_pyrecordfilereader"));
65 if (nullptr == reader) {
66 AERROR << "delete_PyRecordReader:reader ptr is null!";
67 Py_INCREF(Py_None);
68 return Py_None;
69 }
70 delete reader;
71 Py_INCREF(Py_None);
72 return Py_None;
73}
74
75PyObject *cyber_PyRecordReader_ReadMessage(PyObject *self, PyObject *args) {
76 PyObject *pyobj_reader = nullptr;
77 uint64_t begin_time = 0;
78 uint64_t end_time = std::numeric_limits<uint64_t>::max();
79 if (!PyArg_ParseTuple(args,
80 const_cast<char *>("OKK:PyRecordReader_ReadMessage"),
81 &pyobj_reader, &begin_time, &end_time)) {
82 return nullptr;
83 }
84
85 auto *reader = reinterpret_cast<PyRecordReader *>(PyCapsule_GetPointer(
86 pyobj_reader, "apollo_cyber_record_pyrecordfilereader"));
87 if (nullptr == reader) {
88 AERROR << "PyRecordReader_ReadMessage ptr is null!";
89 return nullptr;
90 }
91
92 const auto result = reader->ReadMessage(begin_time, end_time);
93 PyObject *pyobj_bag_message = PyDict_New();
94
95 PyObject *bld_name = Py_BuildValue("s", result.channel_name.c_str());
96 PyDict_SetItemString(pyobj_bag_message, "channel_name", bld_name);
97 Py_DECREF(bld_name);
98
99 PyObject *bld_data =
100 Py_BuildValue("y#", result.data.c_str(), result.data.length());
101
102 ACHECK(bld_data) << "Py_BuildValue returns NULL.";
103 PyDict_SetItemString(pyobj_bag_message, "data", bld_data);
104 Py_DECREF(bld_data);
105
106 PyObject *bld_type = Py_BuildValue("s", result.data_type.c_str());
107 PyDict_SetItemString(pyobj_bag_message, "data_type", bld_type);
108 Py_DECREF(bld_type);
109
110 PyObject *bld_time = Py_BuildValue("s", "timestamp");
111 PyObject *bld_rtime = Py_BuildValue("K", result.timestamp);
112 PyDict_SetItem(pyobj_bag_message, bld_time, bld_rtime);
113 Py_DECREF(bld_time);
114 Py_DECREF(bld_rtime);
115
116 PyObject *bld_end = Py_BuildValue("s", "end");
117 PyDict_SetItem(pyobj_bag_message, bld_end, result.end ? Py_True : Py_False);
118 Py_DECREF(bld_end);
119
120 return pyobj_bag_message;
121}
122
124 PyObject *args) {
125 PyObject *pyobj_reader = nullptr;
126 char *channel_name = nullptr;
127 if (!PyArg_ParseTuple(
128 args, const_cast<char *>("Os:PyRecordReader_GetMessageNumber"),
129 &pyobj_reader, &channel_name)) {
130 AERROR << "PyRecordReader_GetMessageNumber:PyRecordReader failed!";
131 return PyLong_FromUnsignedLongLong(0);
132 }
133
134 auto *reader = reinterpret_cast<PyRecordReader *>(PyCapsule_GetPointer(
135 pyobj_reader, "apollo_cyber_record_pyrecordfilereader"));
136 if (nullptr == reader) {
137 AERROR << "PyRecordReader_GetMessageNumber ptr is null!";
138 return PyLong_FromUnsignedLongLong(0);
139 }
140
141 uint64_t num = reader->GetMessageNumber(channel_name);
142 return PyLong_FromUnsignedLongLong(num);
143}
144
145PyObject *cyber_PyRecordReader_GetMessageType(PyObject *self, PyObject *args) {
146 PyObject *pyobj_reader = nullptr;
147 char *channel_name = nullptr;
148 if (!PyArg_ParseTuple(
149 args, const_cast<char *>("Os:cyber_PyRecordReader_GetMessageType"),
150 &pyobj_reader, &channel_name)) {
151 AERROR << "PyRecordReader_GetMessageType:PyRecordReader failed!";
153 }
154
155 auto *reader = reinterpret_cast<PyRecordReader *>(PyCapsule_GetPointer(
156 pyobj_reader, "apollo_cyber_record_pyrecordfilereader"));
157 if (nullptr == reader) {
158 AERROR << "PyRecordReader_GetMessageType ptr is null!";
160 }
161
162 const std::string msg_type = reader->GetMessageType(channel_name);
163 return C_STR_TO_PY_BYTES(msg_type);
164}
165
166PyObject *cyber_PyRecordReader_GetProtoDesc(PyObject *self, PyObject *args) {
167 PyObject *pyobj_reader = nullptr;
168 char *channel_name = nullptr;
169 if (!PyArg_ParseTuple(args,
170 const_cast<char *>("Os:PyRecordReader_GetProtoDesc"),
171 &pyobj_reader, &channel_name)) {
172 AERROR << "PyRecordReader_GetProtoDesc failed!";
174 }
175
176 auto *reader = reinterpret_cast<PyRecordReader *>(PyCapsule_GetPointer(
177 pyobj_reader, "apollo_cyber_record_pyrecordfilereader"));
178 if (nullptr == reader) {
179 AERROR << "PyRecordReader_GetProtoDesc ptr is null!";
181 }
182
183 const std::string pb_desc = reader->GetProtoDesc(channel_name);
184 return C_STR_TO_PY_BYTES(pb_desc);
185}
186
187PyObject *cyber_PyRecordReader_GetHeaderString(PyObject *self, PyObject *args) {
188 PyObject *pyobj_reader = nullptr;
189 if (!PyArg_ParseTuple(
190 args, const_cast<char *>("O:cyber_PyRecordReader_GetHeaderString"),
191 &pyobj_reader)) {
193 }
194
195 auto *reader = reinterpret_cast<PyRecordReader *>(PyCapsule_GetPointer(
196 pyobj_reader, "apollo_cyber_record_pyrecordfilereader"));
197 if (nullptr == reader) {
198 AERROR << "PyRecordReader_GetHeaderString ptr is null!";
200 }
201
202 const std::string header_string = reader->GetHeaderString();
203 return C_STR_TO_PY_BYTES(header_string);
204}
205
206PyObject *cyber_PyRecordReader_Reset(PyObject *self, PyObject *args) {
207 PyObject *pyobj_reader = nullptr;
208 if (!PyArg_ParseTuple(args,
209 const_cast<char *>("O:cyber_PyRecordReader_Reset"),
210 &pyobj_reader)) {
211 AERROR << "cyber_PyRecordReader_Reset:PyArg_ParseTuple failed!";
212 Py_INCREF(Py_None);
213 return Py_None;
214 }
215
216 auto *reader = reinterpret_cast<PyRecordReader *>(PyCapsule_GetPointer(
217 pyobj_reader, "apollo_cyber_record_pyrecordfilereader"));
218 if (nullptr == reader) {
219 AERROR << "PyRecordReader_Reset reader is null!";
220 Py_INCREF(Py_None);
221 return Py_None;
222 }
223
224 reader->Reset();
225 Py_INCREF(Py_None);
226 return Py_None;
227}
228
229PyObject *cyber_PyRecordReader_GetChannelList(PyObject *self, PyObject *args) {
230 PyObject *pyobj_reader = nullptr;
231 if (!PyArg_ParseTuple(
232 args, const_cast<char *>("O:cyber_PyRecordReader_GetChannelList"),
233 &pyobj_reader)) {
234 AERROR << "cyber_PyRecordReader_GetChannelList:PyArg_ParseTuple failed!";
235 Py_INCREF(Py_None);
236 return Py_None;
237 }
238
239 auto *reader = reinterpret_cast<PyRecordReader *>(PyCapsule_GetPointer(
240 pyobj_reader, "apollo_cyber_record_pyrecordfilereader"));
241 if (nullptr == reader) {
242 AERROR << "PyRecordReader_GetChannelList reader is null!";
243 Py_INCREF(Py_None);
244 return Py_None;
245 }
246
247 std::set<std::string> channel_list = reader->GetChannelList();
248 PyObject *pyobj_list = PyList_New(channel_list.size());
249 size_t pos = 0;
250 for (const std::string &channel : channel_list) {
251 PyList_SetItem(pyobj_list, pos, Py_BuildValue("s", channel.c_str()));
252 pos++;
253 }
254
255 return pyobj_list;
256}
257
258PyObject *cyber_new_PyRecordWriter(PyObject *self, PyObject *args) {
259 PyRecordWriter *writer = new PyRecordWriter();
260 return PyCapsule_New(writer, "apollo_cyber_record_pyrecordfilewriter",
261 nullptr);
262}
263
264PyObject *cyber_delete_PyRecordWriter(PyObject *self, PyObject *args) {
265 PyObject *pyobj_rec_writer = nullptr;
266 if (!PyArg_ParseTuple(args, const_cast<char *>("O:delete_PyRecordWriter"),
267 &pyobj_rec_writer)) {
268 Py_INCREF(Py_None);
269 return Py_None;
270 }
271
272 auto *writer = reinterpret_cast<PyRecordWriter *>(PyCapsule_GetPointer(
273 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter"));
274 if (nullptr == writer) {
275 AERROR << "delete_PyRecordWriter:writer is null!";
276 Py_INCREF(Py_None);
277 return Py_None;
278 }
279 delete writer;
280 Py_INCREF(Py_None);
281 return Py_None;
282}
283
284PyObject *cyber_PyRecordWriter_Open(PyObject *self, PyObject *args) {
285 PyObject *pyobj_rec_writer = nullptr;
286 char *path = nullptr;
287 Py_ssize_t len = 0;
288 if (!PyArg_ParseTuple(args,
289 const_cast<char *>("Os#:cyber_PyRecordWriter_Open"),
290 &pyobj_rec_writer, &path, &len)) {
291 AERROR << "cyber_PyRecordWriter_Open:PyArg_ParseTuple failed!";
292 Py_RETURN_FALSE;
293 }
294
295 PyRecordWriter *writer = PyObjectToPtr<PyRecordWriter *>(
296 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter");
297
298 if (nullptr == writer) {
299 AERROR << "PyRecordWriter_Open:writer is null!";
300 Py_RETURN_FALSE;
301 }
302
303 std::string path_str(path, len);
304 if (!writer->Open(path_str)) {
305 Py_RETURN_FALSE;
306 }
307 Py_RETURN_TRUE;
308}
309
310PyObject *cyber_PyRecordWriter_Close(PyObject *self, PyObject *args) {
311 PyObject *pyobj_rec_writer = nullptr;
312 if (!PyArg_ParseTuple(args, const_cast<char *>("O:delete_PyRecordWriter"),
313 &pyobj_rec_writer)) {
314 Py_INCREF(Py_None);
315 return Py_None;
316 }
317
318 auto *writer = reinterpret_cast<PyRecordWriter *>(PyCapsule_GetPointer(
319 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter"));
320 if (nullptr == writer) {
321 AERROR << "cyber_PyRecordWriter_Close: writer is null!";
322 Py_INCREF(Py_None);
323 return Py_None;
324 }
325 writer->Close();
326 Py_INCREF(Py_None);
327 return Py_None;
328}
329
330PyObject *cyber_PyRecordWriter_WriteChannel(PyObject *self, PyObject *args) {
331 PyObject *pyobj_rec_writer = nullptr;
332 char *channel = nullptr;
333 char *type = nullptr;
334 char *proto_desc = nullptr;
335 Py_ssize_t len = 0;
336 if (!PyArg_ParseTuple(
337 args, const_cast<char *>("Osss#:cyber_PyRecordWriter_WriteChannel"),
338 &pyobj_rec_writer, &channel, &type, &proto_desc, &len)) {
339 AERROR << "cyber_PyRecordWriter_WriteChannel parsetuple failed!";
340 Py_RETURN_FALSE;
341 }
342
343 auto *writer = PyObjectToPtr<PyRecordWriter *>(
344 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter");
345
346 if (nullptr == writer) {
347 AERROR << "cyber_PyRecordWriter_WriteChannel:writer ptr is null!";
348 Py_RETURN_FALSE;
349 }
350
351 std::string proto_desc_str(proto_desc, len);
352 if (!writer->WriteChannel(channel, type, proto_desc_str)) {
353 Py_RETURN_FALSE;
354 }
355 Py_RETURN_TRUE;
356}
357
358PyObject *cyber_PyRecordWriter_WriteMessage(PyObject *self, PyObject *args) {
359 PyObject *pyobj_rec_writer = nullptr;
360 char *channel_name = nullptr;
361 char *rawmessage = nullptr;
362 Py_ssize_t len = 0;
363 uint64_t time = 0;
364 char *proto_desc = nullptr;
365 Py_ssize_t len_desc = 0;
366
367 if (!PyArg_ParseTuple(
368 args, const_cast<char *>("Oss#Ks#:cyber_PyRecordWriter_WriteMessage"),
369 &pyobj_rec_writer, &channel_name, &rawmessage, &len, &time,
370 &proto_desc, &len_desc)) {
371 AERROR << "cyber_PyRecordWriter_WriteMessage parsetuple failed!";
372 Py_RETURN_FALSE;
373 }
374
375 auto *writer = PyObjectToPtr<PyRecordWriter *>(
376 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter");
377
378 if (nullptr == writer) {
379 AERROR << "cyber_PyRecordWriter_WriteMessage:writer ptr is null!";
380 Py_RETURN_FALSE;
381 }
382
383 std::string rawmessage_str(rawmessage, len);
384 std::string desc_str(proto_desc, len_desc);
385 if (!writer->WriteMessage(channel_name, rawmessage_str, time, desc_str)) {
386 AERROR << "cyber_PyRecordWriter_WriteMessage:WriteMessage failed!";
387 Py_RETURN_FALSE;
388 }
389 Py_RETURN_TRUE;
390}
391
393 PyObject *args) {
394 PyObject *pyobj_rec_writer = nullptr;
395 uint64_t size_kilobytes = 0;
396
397 if (!PyArg_ParseTuple(
398 args,
399 const_cast<char *>(
400 "OK:cyber_PyRecordWriter_SetSizeOfFileSegmentation"),
401 &pyobj_rec_writer, &size_kilobytes)) {
402 AERROR
403 << "cyber_PyRecordWriter_SetSizeOfFileSegmentation parsetuple failed!";
404 Py_RETURN_FALSE;
405 }
406
407 auto *writer = PyObjectToPtr<PyRecordWriter *>(
408 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter");
409
410 if (nullptr == writer) {
411 AERROR
412 << "cyber_PyRecordWriter_SetSizeOfFileSegmentation:writer ptr is null!";
413 Py_RETURN_FALSE;
414 }
415
416 if (!writer->SetSizeOfFileSegmentation(size_kilobytes)) {
417 AERROR << "cyber_PyRecordWriter_SetSizeOfFileSegmentation failed!";
418 Py_RETURN_FALSE;
419 }
420 Py_RETURN_TRUE;
421}
422
424 PyObject *args) {
425 PyObject *pyobj_rec_writer = nullptr;
426 uint64_t time_sec = 0;
427
428 if (!PyArg_ParseTuple(
429 args,
430 const_cast<char *>(
431 "OK:cyber_PyRecordWriter_SetIntervalOfFileSegmentation"),
432 &pyobj_rec_writer, &time_sec)) {
433 AERROR << "cyber_PyRecordWriter_SetIntervalOfFileSegmentation parsetuple "
434 "failed!";
435 Py_RETURN_FALSE;
436 }
437
438 auto *writer = PyObjectToPtr<PyRecordWriter *>(
439 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter");
440
441 if (nullptr == writer) {
442 AERROR << "cyber_PyRecordWriter_SetIntervalOfFileSegmentation:writer ptr "
443 "is null!";
444 Py_RETURN_FALSE;
445 }
446
447 if (!writer->SetIntervalOfFileSegmentation(time_sec)) {
448 AERROR << "cyber_PyRecordWriter_SetIntervalOfFileSegmentation failed!";
449 Py_RETURN_FALSE;
450 }
451 Py_RETURN_TRUE;
452}
453
455 PyObject *args) {
456 PyObject *pyobj_rec_writer = nullptr;
457 char *channel_name = nullptr;
458 if (!PyArg_ParseTuple(
459 args, const_cast<char *>("Os:PyRecordWriter_GetMessageNumber"),
460 &pyobj_rec_writer, &channel_name)) {
461 AERROR << "PyRecordWriter_GetMessageNumber:PyRecordWriter_GetMessageNumber "
462 "failed!";
463 return PyLong_FromUnsignedLongLong(0);
464 }
465
466 auto *writer = reinterpret_cast<PyRecordWriter *>(PyCapsule_GetPointer(
467 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter"));
468 if (nullptr == writer) {
469 AERROR << "PyRecordWriter_GetMessageNumber ptr is null!";
470 return PyLong_FromUnsignedLongLong(0);
471 }
472
473 uint64_t num = writer->GetMessageNumber(channel_name);
474 return PyLong_FromUnsignedLongLong(num);
475}
476
477PyObject *cyber_PyRecordWriter_GetMessageType(PyObject *self, PyObject *args) {
478 PyObject *pyobj_rec_writer = nullptr;
479 char *channel_name = nullptr;
480 if (!PyArg_ParseTuple(args,
481 const_cast<char *>("Os:PyRecordWriter_GetMessageType"),
482 &pyobj_rec_writer, &channel_name)) {
483 AERROR << "PyRecordWriter_GetMessageType failed!";
485 }
486
487 auto *writer = reinterpret_cast<PyRecordWriter *>(PyCapsule_GetPointer(
488 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter"));
489 if (nullptr == writer) {
490 AERROR << "PyRecordWriter_GetMessageType ptr is null!";
492 }
493
494 std::string msg_type = writer->GetMessageType(channel_name);
495 return C_STR_TO_PY_BYTES(msg_type);
496}
497
498PyObject *cyber_PyRecordWriter_GetProtoDesc(PyObject *self, PyObject *args) {
499 PyObject *pyobj_rec_writer = nullptr;
500 char *channel_name = nullptr;
501 if (!PyArg_ParseTuple(args,
502 const_cast<char *>("Os:PyRecordWriter_GetProtoDesc"),
503 &pyobj_rec_writer, &channel_name)) {
504 AERROR << "PyRecordWriter_GetProtoDesc failed!";
506 }
507
508 auto *writer = reinterpret_cast<PyRecordWriter *>(PyCapsule_GetPointer(
509 pyobj_rec_writer, "apollo_cyber_record_pyrecordfilewriter"));
510 if (nullptr == writer) {
511 AERROR << "PyRecordWriter_GetProtoDesc ptr is null!";
513 }
514
515 const std::string proto_desc_str = writer->GetProtoDesc(channel_name);
516 return C_STR_TO_PY_BYTES(proto_desc_str);
517}
518
519static PyMethodDef _cyber_record_methods[] = {
520 // PyRecordReader fun
521 {"new_PyRecordReader", cyber_new_PyRecordReader, METH_VARARGS, ""},
522 {"delete_PyRecordReader", cyber_delete_PyRecordReader, METH_VARARGS, ""},
523 {"PyRecordReader_ReadMessage", cyber_PyRecordReader_ReadMessage,
524 METH_VARARGS, ""},
525 {"PyRecordReader_GetMessageNumber", cyber_PyRecordReader_GetMessageNumber,
526 METH_VARARGS, ""},
527 {"PyRecordReader_GetMessageType", cyber_PyRecordReader_GetMessageType,
528 METH_VARARGS, ""},
529 {"PyRecordReader_GetProtoDesc", cyber_PyRecordReader_GetProtoDesc,
530 METH_VARARGS, ""},
531 {"PyRecordReader_GetHeaderString", cyber_PyRecordReader_GetHeaderString,
532 METH_VARARGS, ""},
533 {"PyRecordReader_Reset", cyber_PyRecordReader_Reset, METH_VARARGS, ""},
534 {"PyRecordReader_GetChannelList", cyber_PyRecordReader_GetChannelList,
535 METH_VARARGS, ""},
536
537 // PyRecordWriter fun
538 {"new_PyRecordWriter", cyber_new_PyRecordWriter, METH_VARARGS, ""},
539 {"delete_PyRecordWriter", cyber_delete_PyRecordWriter, METH_VARARGS, ""},
540 {"PyRecordWriter_Open", cyber_PyRecordWriter_Open, METH_VARARGS, ""},
541 {"PyRecordWriter_Close", cyber_PyRecordWriter_Close, METH_VARARGS, ""},
542 {"PyRecordWriter_WriteChannel", cyber_PyRecordWriter_WriteChannel,
543 METH_VARARGS, ""},
544 {"PyRecordWriter_WriteMessage", cyber_PyRecordWriter_WriteMessage,
545 METH_VARARGS, ""},
546 {"PyRecordWriter_SetSizeOfFileSegmentation",
548 {"PyRecordWriter_SetIntervalOfFileSegmentation",
550 {"PyRecordWriter_GetMessageNumber", cyber_PyRecordWriter_GetMessageNumber,
551 METH_VARARGS, ""},
552 {"PyRecordWriter_GetMessageType", cyber_PyRecordWriter_GetMessageType,
553 METH_VARARGS, ""},
554 {"PyRecordWriter_GetProtoDesc", cyber_PyRecordWriter_GetProtoDesc,
555 METH_VARARGS, ""},
556
557 {nullptr, nullptr, 0, nullptr} /* sentinel */
558};
559
561PyMODINIT_FUNC PyInit__cyber_record_wrapper(void) {
562 static struct PyModuleDef module_def = {
563 PyModuleDef_HEAD_INIT,
564 "_cyber_record_wrapper", // Module name.
565 "CyberRecord module", // Module doc.
566 -1, // Module size.
567 _cyber_record_methods, // Module methods.
568 nullptr,
569 nullptr,
570 nullptr,
571 nullptr,
572 };
573
574 AINFO << "init _cyber_record_wrapper";
575 return PyModule_Create(&module_def);
576}
std::string GetProtoDesc(const std::string &channel_name)
Definition py_record.h:83
std::string GetMessageType(const std::string &channel_name)
Definition py_record.h:79
BagMessage ReadMessage(uint64_t begin_time=0, uint64_t end_time=std::numeric_limits< uint64_t >::max())
Definition py_record.h:56
const std::string & GetProtoDesc(const std::string &channel_name) const
Definition py_record.h:138
bool Open(const std::string &path)
Definition py_record.h:105
const std::string & GetMessageType(const std::string &channel_name) const
Definition py_record.h:134
#define ACHECK(cond)
Definition log.h:80
#define AERROR
Definition log.h:44
#define AINFO
Definition log.h:42
PyObject * cyber_PyRecordWriter_WriteChannel(PyObject *self, PyObject *args)
Definition py_record.cc:330
PyObject * cyber_PyRecordWriter_Open(PyObject *self, PyObject *args)
Definition py_record.cc:284
PyObject * cyber_PyRecordWriter_GetMessageNumber(PyObject *self, PyObject *args)
Definition py_record.cc:454
PyObject * cyber_PyRecordReader_GetHeaderString(PyObject *self, PyObject *args)
Definition py_record.cc:187
PyObject * cyber_PyRecordWriter_WriteMessage(PyObject *self, PyObject *args)
Definition py_record.cc:358
#define PYOBJECT_NULL_STRING
Definition py_record.cc:27
PyObject * cyber_PyRecordReader_GetMessageType(PyObject *self, PyObject *args)
Definition py_record.cc:145
PyObject * cyber_PyRecordWriter_Close(PyObject *self, PyObject *args)
Definition py_record.cc:310
PyObject * cyber_new_PyRecordReader(PyObject *self, PyObject *args)
Definition py_record.cc:40
T PyObjectToPtr(PyObject *pyobj, const std::string &type_ptr)
Definition py_record.cc:32
PyObject * cyber_PyRecordWriter_SetIntervalOfFileSegmentation(PyObject *self, PyObject *args)
Definition py_record.cc:423
#define C_STR_TO_PY_BYTES(cstr)
Definition py_record.cc:28
PyObject * cyber_delete_PyRecordWriter(PyObject *self, PyObject *args)
Definition py_record.cc:264
PyObject * cyber_PyRecordWriter_SetSizeOfFileSegmentation(PyObject *self, PyObject *args)
Definition py_record.cc:392
PyObject * cyber_PyRecordReader_Reset(PyObject *self, PyObject *args)
Definition py_record.cc:206
PyObject * cyber_PyRecordReader_GetProtoDesc(PyObject *self, PyObject *args)
Definition py_record.cc:166
PyObject * cyber_new_PyRecordWriter(PyObject *self, PyObject *args)
Definition py_record.cc:258
PyObject * cyber_PyRecordReader_ReadMessage(PyObject *self, PyObject *args)
Definition py_record.cc:75
PyObject * cyber_PyRecordWriter_GetProtoDesc(PyObject *self, PyObject *args)
Definition py_record.cc:498
PyObject * cyber_PyRecordReader_GetMessageNumber(PyObject *self, PyObject *args)
Definition py_record.cc:123
PyObject * cyber_delete_PyRecordReader(PyObject *self, PyObject *args)
Definition py_record.cc:55
PyObject * cyber_PyRecordWriter_GetMessageType(PyObject *self, PyObject *args)
Definition py_record.cc:477
PyMODINIT_FUNC PyInit__cyber_record_wrapper(void)
Init function of this module
Definition py_record.cc:561
PyObject * cyber_PyRecordReader_GetChannelList(PyObject *self, PyObject *args)
Definition py_record.cc:229