helpers.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import bz2
  2. import datetime
  3. TIME_FMT = "%Y-%m-%d--%H-%M-%S"
  4. # regex patterns
  5. class RE:
  6. DONGLE_ID = r'(?P<dongle_id>[a-f0-9]{16})'
  7. TIMESTAMP = r'(?P<timestamp>[0-9]{4}-[0-9]{2}-[0-9]{2}--[0-9]{2}-[0-9]{2}-[0-9]{2})'
  8. LOG_ID_V2 = r'(?P<count>[a-f0-9]{8})--(?P<uid>[a-z0-9]{10})'
  9. LOG_ID = fr'(?P<log_id>(?:{TIMESTAMP}|{LOG_ID_V2}))'
  10. ROUTE_NAME = fr'(?P<route_name>{DONGLE_ID}[|_/]{LOG_ID})'
  11. SEGMENT_NAME = fr'{ROUTE_NAME}(?:--|/)(?P<segment_num>[0-9]+)'
  12. INDEX = r'-?[0-9]+'
  13. SLICE = fr'(?P<start>{INDEX})?:?(?P<end>{INDEX})?:?(?P<step>{INDEX})?'
  14. SEGMENT_RANGE = fr'{ROUTE_NAME}(?:(--|/)(?P<slice>({SLICE})))?(?:/(?P<selector>([qras])))?'
  15. BOOTLOG_NAME = ROUTE_NAME
  16. EXPLORER_FILE = fr'^(?P<segment_name>{SEGMENT_NAME})--(?P<file_name>[a-z]+\.[a-z0-9]+)$'
  17. OP_SEGMENT_DIR = fr'^(?P<segment_name>{SEGMENT_NAME})$'
  18. def timestamp_to_datetime(t: str) -> datetime.datetime:
  19. """
  20. Convert an openpilot route timestamp to a python datetime
  21. """
  22. return datetime.datetime.strptime(t, TIME_FMT)
  23. def save_log(dest, log_msgs, compress=True):
  24. dat = b"".join(msg.as_builder().to_bytes() for msg in log_msgs)
  25. if compress:
  26. dat = bz2.compress(dat)
  27. with open(dest, "wb") as f:
  28. f.write(dat)