def trains(self): station_codes = [i.station_code for i in self.api.stations.all.values() if i == self] if not self.api.timestamp: data = self.api.get_json(build_url(Service.rail_predictions, "GetPrediction/%s" % ",".join(station_codes)), nocache=True)["Trains"] return [MetrorailTrainPrediction( self.api.lines[i["Line"]], self.api.stations[i["DestinationCode"]], self, i["Min"], i["Car"], int(i["Group"]) ) for i in data if ( i["DestinationCode"] is not None and MetrorailLines._line_valid(i["Line"]) and i["Car"] is not None )] else: data = list(HistoricalTrainPosition.select().where(HistoricalTrainPosition.timestamp == self.api.timestamp, HistoricalTrainPosition.next_station << station_codes)) return [MetrorailTrainPrediction( self.api.lines[prediction.line_code], self.api.stations[prediction.dest_station], self, str(prediction.time), str(prediction.cars), prediction.trackgroup ) for prediction in data]
def all_trains(self): if not self.api.timestamp: data = self.api.get_json(build_url(Service.rail_predictions, "GetPrediction/All"), nocache=True)["Trains"] result = {} for prediction in data: if prediction["LocationCode"] is None or prediction["DestinationCode"] is None or prediction["Car"] is None: continue if self.api.stations[prediction["LocationCode"]] not in result: result[self.api.stations[prediction["LocationCode"]]] = [] result[self.api.stations[prediction["LocationCode"]]].append( MetrorailTrainPrediction( self.api.lines[prediction["Line"]], self.api.stations[prediction["DestinationCode"]], self.api.stations[prediction["LocationCode"]], prediction["Min"], prediction["Car"], prediction["Group"] ) ) all_stations = self.api.stations.all for station in all_stations: st = all_stations[station] if st not in result: result[st] = [] return result else: data = list(HistoricalTrainPosition.select().where(HistoricalTrainPosition.timestamp == self.api.timestamp)) predictions = [MetrorailTrainPrediction( self.api.lines[prediction.line_code], self.api.stations[prediction.dest_station], self.api.stations[prediction.next_station], str(prediction.time), str(prediction.cars), prediction.trackgroup ) for prediction in data] d = {} for p in predictions: if p.station not in d: d[p.station] = [] d[p.station].append(p) return d
from models import HistoricalTrainPosition pos = list(HistoricalTrainPosition.select()) dels = [] for p in pos: if p.timestamp.microsecond == 0: dels.append(p.id) print(HistoricalTrainPosition.delete().where(HistoricalTrainPosition.id << dels).execute())
from models import HistoricalTrainPosition from config import wmata from datetime import datetime import json import os import os.path pos = list(HistoricalTrainPosition.select()) updates = 0 trackgroup1 = [] trackgroup2 = [] for tr in pos: trackgroup = tr.trackgroup if trackgroup is not None: continue """LEFT side of Metro map = 2 (incl Branch Ave) RIGHT side of Metro map = 1 (incl Greenbelt) """ #ShGrv, Wihle, Vnna, FrncSp, Hntgn, BchAv if tr.dest_station in ['A15', 'N06', 'K08', 'J03', 'C15', 'F11']: trackgroup2.append(tr.id) #Glnmt, Grnblt, NCrl, Lrgo, MtVrn, FtTtn, FtTtn elif tr.dest_station in ['B11', 'E10', 'D13', 'G05', 'E01', 'B06', 'E06']: trackgroup1.append(tr.id)
next_station = train["LocationCode"] dest_station = train["DestinationCode"] line_code = train["Line"] if dest_station is None or next_station is None or line_code == "No" or train["Car"] is None: continue cars = int(train["Car"]) if train["Car"] != "-" else 6 cars = 8 if cars == 2 else cars if train["Min"].isnumeric(): time = int(train["Min"]) else: if "-" in train["Min"]: continue time = 1 if train["Min"] == "ARR" else 0 ts = datetime.datetime.fromtimestamp(int(float(filename.split("/")[-1]))) ds = dict(cars=cars, line_code=line_code, time=time, next_station=next_station, dest_station=dest_station, timestamp=ts, trackgroup=int(train["Group"])) datasource.append(ds) print("set... ({})".format(len(datasource))) print("go! ") with db.atomic(): HistoricalTrainPosition.insert_many(datasource).execute() #HistoricalTrainPosition.create(cars=cars, line_code=line_code, time=time, # next_station=next_station, dest_station=dest_station, # timestamp=ts, trackgroup=int(train["Group"]))
all_trains = wmata.rail_system.predictions() ts = datetime.now() for train in all_trains: next_station = train.station.station_code dest_station = train.destination.station_code line_code = train.line.line_code cars = train.cars time = train.time_int try: trackgroup = int(train.group) except ValueError: """LEFT side of Metro map = 2 (incl Branch Ave) RIGHT side of Metro map = 1 (incl Greenbelt) """ #ShGrv, Wihle, Vnna, FrncSp, Hntgn, BchAv if dest_station in ['A15', 'N06', 'K08', 'J03', 'C15', 'F11']: trackgroup = 2 #Glnmt, Grnblt, NCrl, Lrgo, Grnbt, MtVrn, FtTtn, FtTtn elif dest_station in ['B11', 'E10', 'D13', 'G05', 'F11', 'E01', 'B06', 'E06']: trackgroup = 1 HistoricalTrainPosition.create(cars=cars, line_code=line_code, time=time, trackgroup=track_group, next_station=next_station, dest_station=dest_station, timestamp=ts) print("Added", len(all_trains), "trains at", ts)