car: use default_factory for mutable fields in dataclasses (#28669)

* call me

* copy
old-commit-hash: e85acfa365
beeps
Maxime Desroches 2 years ago committed by GitHub
parent 82eb958e41
commit 585921ffad
  1. 4
      selfdrive/car/chrysler/values.py
  2. 6
      selfdrive/car/docs_definitions.py
  3. 4
      selfdrive/car/ford/values.py
  4. 4
      selfdrive/car/mazda/values.py
  5. 4
      selfdrive/car/nissan/values.py
  6. 4
      selfdrive/car/subaru/values.py
  7. 4
      selfdrive/car/toyota/values.py
  8. 4
      selfdrive/car/volkswagen/values.py

@ -1,5 +1,5 @@
from enum import IntFlag from enum import IntFlag
from dataclasses import dataclass from dataclasses import dataclass, field
from typing import Dict, List, Optional, Union from typing import Dict, List, Optional, Union
from cereal import car from cereal import car
@ -60,7 +60,7 @@ RAM_CARS = RAM_DT | RAM_HD
@dataclass @dataclass
class ChryslerCarInfo(CarInfo): class ChryslerCarInfo(CarInfo):
package: str = "Adaptive Cruise Control (ACC)" package: str = "Adaptive Cruise Control (ACC)"
car_parts: CarParts = CarParts.common([CarHarness.fca]) car_parts: CarParts = field(default_factory=CarParts.common([CarHarness.fca]))
CAR_INFO: Dict[str, Optional[Union[ChryslerCarInfo, List[ChryslerCarInfo]]]] = { CAR_INFO: Dict[str, Optional[Union[ChryslerCarInfo, List[ChryslerCarInfo]]]] = {

@ -1,5 +1,6 @@
import re import re
from collections import namedtuple from collections import namedtuple
import copy
from dataclasses import dataclass, field from dataclasses import dataclass, field
from enum import Enum from enum import Enum
from typing import Dict, List, Optional, Tuple, Union from typing import Dict, List, Optional, Tuple, Union
@ -144,6 +145,9 @@ DEFAULT_CAR_PARTS: List[EnumBase] = [Device.three]
class CarParts: class CarParts:
parts: List[EnumBase] = field(default_factory=list) parts: List[EnumBase] = field(default_factory=list)
def __call__(self):
return copy.deepcopy(self)
@classmethod @classmethod
def common(cls, add: List[EnumBase] = None, remove: List[EnumBase] = None): def common(cls, add: List[EnumBase] = None, remove: List[EnumBase] = None):
p = [part for part in (add or []) + DEFAULT_CAR_PARTS if part not in (remove or [])] p = [part for part in (add or []) + DEFAULT_CAR_PARTS if part not in (remove or [])]
@ -225,7 +229,7 @@ class CarInfo:
auto_resume: Optional[bool] = None auto_resume: Optional[bool] = None
# all the parts needed for the supported car # all the parts needed for the supported car
car_parts: CarParts = CarParts() car_parts: CarParts = field(default_factory=CarParts)
def init(self, CP: car.CarParams, all_footnotes: Dict[Enum, int]): def init(self, CP: car.CarParams, all_footnotes: Dict[Enum, int]):
self.car_name = CP.carName self.car_name = CP.carName

@ -1,5 +1,5 @@
from collections import defaultdict from collections import defaultdict
from dataclasses import dataclass from dataclasses import dataclass, field
from enum import Enum from enum import Enum
from typing import Dict, List, Set, Union from typing import Dict, List, Set, Union
@ -70,7 +70,7 @@ class Footnote(Enum):
@dataclass @dataclass
class FordCarInfo(CarInfo): class FordCarInfo(CarInfo):
package: str = "Co-Pilot360 Assist+" package: str = "Co-Pilot360 Assist+"
car_parts: CarParts = CarParts.common([CarHarness.ford_q3]) car_parts: CarParts = field(default_factory=CarParts.common([CarHarness.ford_q3]))
def init_make(self, CP: car.CarParams): def init_make(self, CP: car.CarParams):
if CP.carFingerprint in (CAR.BRONCO_SPORT_MK1, CAR.MAVERICK_MK1): if CP.carFingerprint in (CAR.BRONCO_SPORT_MK1, CAR.MAVERICK_MK1):

@ -1,4 +1,4 @@
from dataclasses import dataclass from dataclasses import dataclass, field
from typing import Dict, List, Union from typing import Dict, List, Union
from cereal import car from cereal import car
@ -37,7 +37,7 @@ class CAR:
@dataclass @dataclass
class MazdaCarInfo(CarInfo): class MazdaCarInfo(CarInfo):
package: str = "All" package: str = "All"
car_parts: CarParts = CarParts.common([CarHarness.mazda]) car_parts: CarParts = field(default_factory=CarParts.common([CarHarness.mazda]))
CAR_INFO: Dict[str, Union[MazdaCarInfo, List[MazdaCarInfo]]] = { CAR_INFO: Dict[str, Union[MazdaCarInfo, List[MazdaCarInfo]]] = {

@ -1,4 +1,4 @@
from dataclasses import dataclass from dataclasses import dataclass, field
from typing import Dict, List, Optional, Union from typing import Dict, List, Optional, Union
from cereal import car from cereal import car
@ -33,7 +33,7 @@ class CAR:
@dataclass @dataclass
class NissanCarInfo(CarInfo): class NissanCarInfo(CarInfo):
package: str = "ProPILOT Assist" package: str = "ProPILOT Assist"
car_parts: CarParts = CarParts.common([CarHarness.nissan_a]) car_parts: CarParts = field(default_factory=CarParts.common([CarHarness.nissan_a]))
CAR_INFO: Dict[str, Optional[Union[NissanCarInfo, List[NissanCarInfo]]]] = { CAR_INFO: Dict[str, Optional[Union[NissanCarInfo, List[NissanCarInfo]]]] = {

@ -1,4 +1,4 @@
from dataclasses import dataclass from dataclasses import dataclass, field
from enum import IntFlag from enum import IntFlag
from typing import Dict, List, Union from typing import Dict, List, Union
@ -59,7 +59,7 @@ class CAR:
@dataclass @dataclass
class SubaruCarInfo(CarInfo): class SubaruCarInfo(CarInfo):
package: str = "EyeSight Driver Assistance" package: str = "EyeSight Driver Assistance"
car_parts: CarParts = CarParts.common([CarHarness.subaru_a]) car_parts: CarParts = field(default_factory=CarParts.common([CarHarness.subaru_a]))
CAR_INFO: Dict[str, Union[SubaruCarInfo, List[SubaruCarInfo]]] = { CAR_INFO: Dict[str, Union[SubaruCarInfo, List[SubaruCarInfo]]] = {

@ -1,5 +1,5 @@
from collections import defaultdict from collections import defaultdict
from dataclasses import dataclass from dataclasses import dataclass, field
from enum import Enum, IntFlag from enum import Enum, IntFlag
from typing import Dict, List, Union from typing import Dict, List, Union
@ -102,7 +102,7 @@ class Footnote(Enum):
@dataclass @dataclass
class ToyotaCarInfo(CarInfo): class ToyotaCarInfo(CarInfo):
package: str = "All" package: str = "All"
car_parts: CarParts = CarParts.common([CarHarness.toyota]) car_parts: CarParts = field(default_factory=CarParts.common([CarHarness.toyota]))
CAR_INFO: Dict[str, Union[ToyotaCarInfo, List[ToyotaCarInfo]]] = { CAR_INFO: Dict[str, Union[ToyotaCarInfo, List[ToyotaCarInfo]]] = {

@ -1,5 +1,5 @@
from collections import defaultdict, namedtuple from collections import defaultdict, namedtuple
from dataclasses import dataclass from dataclasses import dataclass, field
from enum import Enum from enum import Enum
from typing import Dict, List, Union from typing import Dict, List, Union
@ -176,7 +176,7 @@ class Footnote(Enum):
@dataclass @dataclass
class VWCarInfo(CarInfo): class VWCarInfo(CarInfo):
package: str = "Adaptive Cruise Control (ACC) & Lane Assist" package: str = "Adaptive Cruise Control (ACC) & Lane Assist"
car_parts: CarParts = CarParts.common([CarHarness.j533]) car_parts: CarParts = field(default_factory=CarParts.common([CarHarness.j533]))
def init_make(self, CP: car.CarParams): def init_make(self, CP: car.CarParams):
self.footnotes.append(Footnote.VW_EXP_LONG) self.footnotes.append(Footnote.VW_EXP_LONG)

Loading…
Cancel
Save