123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import functools
- import re
- from openpilot.tools.lib.auth_config import get_token
- from openpilot.tools.lib.api import CommaApi
- from openpilot.tools.lib.helpers import RE
- @functools.total_ordering
- class Bootlog:
- def __init__(self, url: str):
- self._url = url
- r = re.search(RE.BOOTLOG_NAME, url)
- if not r:
- raise Exception(f"Unable to parse: {url}")
- self._id = r.group('log_id')
- self._dongle_id = r.group('dongle_id')
- @property
- def url(self) -> str:
- return self._url
- @property
- def dongle_id(self) -> str:
- return self._dongle_id
- @property
- def id(self) -> str:
- return self._id
- def __str__(self):
- return f"{self._dongle_id}/{self._id}"
- def __eq__(self, b) -> bool:
- if not isinstance(b, Bootlog):
- return False
- return self.id == b.id
- def __lt__(self, b) -> bool:
- if not isinstance(b, Bootlog):
- return False
- return self.id < b.id
- def get_bootlog_from_id(bootlog_id: str) -> Bootlog | None:
- # TODO: implement an API endpoint for this
- bl = Bootlog(bootlog_id)
- for b in get_bootlogs(bl.dongle_id):
- if b == bl:
- return b
- return None
- def get_bootlogs(dongle_id: str) -> list[Bootlog]:
- api = CommaApi(get_token())
- r = api.get(f'v1/devices/{dongle_id}/bootlogs')
- return [Bootlog(b) for b in r]
|