def fromJson(self, trackJson): if trackJson: self.trackId = trackJson.get('id', self.trackId) self.trackType = trackJson.get('type', self.trackType) sectorsJson = trackJson.get('sec', None) del self.sectors[:] if self.trackType == TRACK_TYPE_CIRCUIT: self.startLine.fromJson(trackJson.get('sf', None)) sectorCount = CONFIG_SECTOR_COUNT_CIRCUIT else: self.startLine.fromJson(trackJson.get('st', self.startLine)) self.finishLine.fromJson(trackJson.get('fin', self.finishLine)) sectorCount = CONFIG_SECTOR_COUNT_STAGE returnedSectorCount = len(sectorsJson) if sectorsJson: for i in range(sectorCount): sector = GeoPoint() if i < returnedSectorCount: sectorJson = sectorsJson[i] sector.fromJson(sectorJson) self.sectors.append(sector) self.sectorCount = sectorCount self.stale = False
class Track(object): def __init__(self, **kwargs): self.stale = False self.trackId = None self.trackType = TRACK_TYPE_CIRCUIT self.sectorCount = CONFIG_SECTOR_COUNT self.startLine = GeoPoint() self.finishLine = GeoPoint() self.sectors = [] def fromJson(self, trackJson): if trackJson: self.trackId = trackJson.get('id', self.trackId) self.trackType = trackJson.get('type', self.trackType) sectorsJson = trackJson.get('sec', None) del self.sectors[:] if self.trackType == TRACK_TYPE_CIRCUIT: self.startLine.fromJson(trackJson.get('sf', None)) sectorCount = CONFIG_SECTOR_COUNT_CIRCUIT else: self.startLine.fromJson(trackJson.get('st', self.startLine)) self.finishLine.fromJson(trackJson.get('fin', self.finishLine)) sectorCount = CONFIG_SECTOR_COUNT_STAGE returnedSectorCount = len(sectorsJson) if sectorsJson: for i in range(sectorCount): sector = GeoPoint() if i < returnedSectorCount: sectorJson = sectorsJson[i] sector.fromJson(sectorJson) self.sectors.append(sector) self.sectorCount = sectorCount self.stale = False @classmethod def fromTrackMap(cls, trackMap): t = Track() t.trackId = trackMap.short_id t.trackType = TRACK_TYPE_STAGE if trackMap.finish_point else TRACK_TYPE_CIRCUIT t.startLine = copy(trackMap.start_finish_point) t.finishLine = copy(trackMap.finish_point) maxSectorCount = CONFIG_SECTOR_COUNT_CIRCUIT if t.trackType == TRACK_TYPE_CIRCUIT else CONFIG_SECTOR_COUNT_STAGE sectorCount = 0 for point in trackMap.sector_points: sectorCount += 1 if sectorCount > maxSectorCount: break t.sectors.append(copy(point)) return t def toJson(self): sectors = [] for sector in self.sectors: sectors.append(sector.toJson()) trackJson = {} trackJson['id'] = self.trackId trackJson['type'] = self.trackType trackJson['sec'] = sectors if self.trackType == TRACK_TYPE_STAGE: trackJson['st'] = self.startLine.toJson() trackJson['fin'] = self.finishLine.toJson() else: trackJson['sf'] = self.startLine.toJson() return trackJson