mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-06-29 18:42:07 +08:00
HKG: split up platform code parsing (#28532)
* test diff * clean up * clean up * doesn't work :( * fix mypy old-commit-hash: 55e489db7cfeed8585825dda90f2ec9e122381f2
This commit is contained in:
@@ -4,7 +4,7 @@ from dateutil import rrule
|
||||
from collections import defaultdict
|
||||
from dataclasses import dataclass
|
||||
from enum import Enum, IntFlag
|
||||
from typing import DefaultDict, Dict, List, Optional, Set, Union
|
||||
from typing import DefaultDict, Dict, List, Optional, Set, Union, cast
|
||||
|
||||
from cereal import car
|
||||
from panda.python import uds
|
||||
@@ -349,11 +349,13 @@ FINGERPRINTS = {
|
||||
|
||||
|
||||
def get_platform_codes(fw_versions: List[bytes]) -> Set[bytes]:
|
||||
codes: DefaultDict[bytes, Set[bytes]] = defaultdict(set)
|
||||
codes: DefaultDict[bytes, Set[Optional[bytes]]] = defaultdict(set)
|
||||
for fw in fw_versions:
|
||||
match = PLATFORM_CODE_FW_PATTERN.search(fw)
|
||||
if match is not None:
|
||||
code, date = match.groups()
|
||||
code_match, date_match = (PLATFORM_CODE_FW_PATTERN.search(fw),
|
||||
DATE_FW_PATTERN.search(fw))
|
||||
if code_match is not None:
|
||||
code = code_match.group()
|
||||
date = date_match.group() if date_match else None
|
||||
codes[code].add(date)
|
||||
|
||||
# Create platform codes for all dates inclusive if ECU has FW dates
|
||||
@@ -365,14 +367,14 @@ def get_platform_codes(fw_versions: List[bytes]) -> Set[bytes]:
|
||||
continue
|
||||
|
||||
try:
|
||||
parsed = {datetime.strptime(date.decode()[:4], '%y%m') for date in dates}
|
||||
parsed = {datetime.strptime(cast(bytes, date).decode()[:4], '%y%m') for date in dates}
|
||||
except ValueError:
|
||||
cloudlog.exception(f'Error parsing date in FW versions: {code!r}, {dates}')
|
||||
final_codes.add(code)
|
||||
continue
|
||||
|
||||
for date in rrule.rrule(rrule.MONTHLY, dtstart=min(parsed), until=max(parsed)):
|
||||
final_codes.add(code + b'-' + date.strftime('%y%m').encode())
|
||||
for monthly in rrule.rrule(rrule.MONTHLY, dtstart=min(parsed), until=max(parsed)):
|
||||
final_codes.add(code + b'-' + monthly.strftime('%y%m').encode())
|
||||
|
||||
return final_codes
|
||||
|
||||
@@ -392,7 +394,8 @@ HYUNDAI_VERSION_RESPONSE = bytes([uds.SERVICE_TYPE.READ_DATA_BY_IDENTIFIER + 0x4
|
||||
|
||||
# Regex patterns for parsing platform code, FW date, and part number from FW versions
|
||||
PLATFORM_CODE_FW_PATTERN = re.compile(b'((?<=' + HYUNDAI_VERSION_REQUEST_LONG[1:] +
|
||||
b')[A-Z]{2}[A-Za-z0-9]{0,2})(?:.*([0-9]{6}))?')
|
||||
b')[A-Z]{2}[A-Za-z0-9]{0,2})')
|
||||
DATE_FW_PATTERN = re.compile(b'(?<=[ -])([0-9]{6}$)')
|
||||
PART_NUMBER_FW_PATTERN = re.compile(b'(?<=[0-9][.,][0-9]{2} )([0-9]{5}[-/]?[A-Z][A-Z0-9]{3}[0-9])')
|
||||
|
||||
FW_QUERY_CONFIG = FwQueryConfig(
|
||||
|
||||
Reference in New Issue
Block a user