bootlog.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import functools
  2. import re
  3. from openpilot.tools.lib.auth_config import get_token
  4. from openpilot.tools.lib.api import CommaApi
  5. from openpilot.tools.lib.helpers import RE
  6. @functools.total_ordering
  7. class Bootlog:
  8. def __init__(self, url: str):
  9. self._url = url
  10. r = re.search(RE.BOOTLOG_NAME, url)
  11. if not r:
  12. raise Exception(f"Unable to parse: {url}")
  13. self._id = r.group('log_id')
  14. self._dongle_id = r.group('dongle_id')
  15. @property
  16. def url(self) -> str:
  17. return self._url
  18. @property
  19. def dongle_id(self) -> str:
  20. return self._dongle_id
  21. @property
  22. def id(self) -> str:
  23. return self._id
  24. def __str__(self):
  25. return f"{self._dongle_id}/{self._id}"
  26. def __eq__(self, b) -> bool:
  27. if not isinstance(b, Bootlog):
  28. return False
  29. return self.id == b.id
  30. def __lt__(self, b) -> bool:
  31. if not isinstance(b, Bootlog):
  32. return False
  33. return self.id < b.id
  34. def get_bootlog_from_id(bootlog_id: str) -> Bootlog | None:
  35. # TODO: implement an API endpoint for this
  36. bl = Bootlog(bootlog_id)
  37. for b in get_bootlogs(bl.dongle_id):
  38. if b == bl:
  39. return b
  40. return None
  41. def get_bootlogs(dongle_id: str) -> list[Bootlog]:
  42. api = CommaApi(get_token())
  43. r = api.get(f'v1/devices/{dongle_id}/bootlogs')
  44. return [Bootlog(b) for b in r]