Пример #1
0
 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]
Пример #2
0
    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
Пример #3
0
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())
Пример #4
0
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)
Пример #5
0
        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"]))
Пример #6
0
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)