예제 #1
0
    def get(self):

        # Get params and conditions to filter the DB with:
        params = get_arguments(request.args, "operator", "date", "line", "mkt",
                               "direction")

        conditions = [
            oper_cond(params['operator']),
            date_cond(params['date']),
            line_cond(params['line'])
        ]

        if params['mkt']:
            conditions.append(mkt_cond(params['mkt']))

        direction_ignore_terms = [None, 'all']
        if params['direction'] not in direction_ignore_terms:
            conditions.append(direction_cond(params['direction']))

        # Query the DB
        cols_to_load = [
            "route_id", "file_date", "route_short_name", "route_mkt",
            "route_direction", "planned_start_time"
        ]

        trips = db.session.query(Trip_Model).filter(*conditions) \
            .order_by(Trip_Model.planned_start_time) \
            .options(load_only(*cols_to_load))  # is the lazy load necessary?

        # Parse results and return as json
        output = trips_schema.dump(trips)
        return {'Trips': output}
예제 #2
0
    def get(self):

        # Get params and conditions to filter the DB with:
        params = get_arguments(request.args, "operator", "date")
        conditions = [oper_cond(params['operator']), date_cond(params['date'])]

        # Query the DB and return the results as json
        lines = db.session.query(
            Trip_Model.route_short_name).filter(*conditions).distinct()
        lines_list = [x.route_short_name for x in lines]
        return {'Lines': sorted(lines_list)}
예제 #3
0
    def get(self):
        # Get params and conditions to filter the DB with:
        params = get_arguments(request.args, "operator", "date", "line")
        conditions = [
            oper_cond(params['operator']),
            date_cond(params['date']),
            line_cond(params['line'])
        ]

        # Query the DB and return the results as json
        routes_mkts = db.session.query(
            Trip_Model.route_mkt).filter(*conditions).distinct()
        return {'MKTs': [x.route_mkt for x in routes_mkts]}
예제 #4
0
    def get(self):

        params = get_arguments(request.args, "date", "oper", "cluster", "desc",
                               "ignoreRareTrips")

        conditions = []
        filters = [
            True
        ]  # if nothing to filter by... will use 'True' as filter to return all

        ignore_terms = [None, 'all']

        if params['date'] not in ignore_terms:
            conditions.append(date_cond(params['date']))

        if params['oper'] not in ignore_terms:
            conditions.append(oper_cond(params['oper']))

        if params['cluster'] not in ignore_terms:
            conditions.append(cluster_cond(params['cluster']))

        if params['ignoreRareTrips'] not in ['false']:
            conditions.append(Trip_Model.num_trips >= 15)

        if params['desc'] not in ['false']:
            performance_sort_order = desc("performance")
        else:
            performance_sort_order = "performance"

        if conditions:
            filters = conditions

        # Query the DB
        select_cols = [
            Trip_Model.agency_id, Trip_Model.cluster_id,
            Trip_Model.route_short_name, Trip_Model.route_mkt,
            Trip_Model.route_long_name
        ]

        performance_measures = db.session.query(*select_cols) \
            .add_columns(func.avg(Trip_Model.departure_delay.in_(range(0, 6))).label("performance")) \
            .filter(*filters) \
            .group_by(Trip_Model.route_mkt)\
            .order_by(performance_sort_order)\
            .limit(50)

        # Parse results and return as json
        output = stats_schema.dump(performance_measures)
        return {'Performance': output}
예제 #5
0
    def get(self):
        # Get params and conditions to filter the DB with:
        params = get_arguments(request.args, "operator", "date", "line", "mkt")
        conditions = [
            oper_cond(params['operator']),
            date_cond(params['date']),
            line_cond(params['line'])
        ]

        if params['mkt']:
            conditions.append(mkt_cond(params['mkt']))

        # Query the DB and return the results as json
        directions = db.session.query(
            Trip_Model.route_direction).filter(*conditions).distinct()
        return {'Directions': [x.route_direction for x in directions]}
예제 #6
0
    def get(self):

        params = get_arguments(request.args, "date", "by")

        if params['date'] in [None, 'all']:
            date_filter = True  # Ignore filtering by sending 'True' as condition)
        else:
            date_filter = date_cond(params['date'])

        if params['by'] in [None, 'oper']:
            measure_type = Trip_Model.agency_id
        else:
            measure_type = Trip_Model.cluster_id

        performance_measures = db.session.query(measure_type)\
            .add_columns(func.avg(Trip_Model.departure_delay.in_(range(0, 6))).label("performance"))\
            .filter(date_filter)\
            .group_by(measure_type).order_by(desc("performance"))

        # Parse results and return as json
        output = stats_schema.dump(performance_measures)
        return {'Performance': output}