Example #1
0
def update_positions(request):
    """ View for calls by ISRProxy backend on taxi positions updates. """
    raw_data = request.raw_post_data
    logging.info("isrproxy update_positions: %s" % raw_data)
    update_positions_data = simplejson.loads(raw_data)

    # redirect update to dev server in production environment
    if not settings.DEV:
        dev_positions = filter(lambda p: p.get("Operator_ID") == WB_DEV_OPERATOR_ID, update_positions_data)
        if dev_positions:
            deferred.defer(safe_fetch, url="http://dev.latest.waybetter-app.appspot.com/fleet/isrproxy/update/positions/", payload=simplejson.dumps(dev_positions), method=POST, notify=False)
            update_positions_data = filter(lambda p: p.get("Operator_ID") != WB_DEV_OPERATOR_ID, update_positions_data)


    ride_positions = []
    for rp_data in update_positions_data:
        station_id = rp_data.get("Operator_ID")
        taxi_id = rp_data.get("Vehicle_ID")
        lat = rp_data.get("Lat")
        lon = rp_data.get("Lon")
        timestamp = rp_data.get("Timestamp")

        ride_uuid = ISRProxy.get_taxi_assignment(taxi_id, station_id)

        if all([station_id, ride_uuid, taxi_id, lat, lon, timestamp]):
            timestamp = dateutil_parser.parse(timestamp)
            timestamp = normalize_naive_israel_dt(timestamp)
            ride_positions.append(TaxiRidePosition(station_id, taxi_id, ride_uuid, lat, lon, timestamp))

    fleet_manager.update_positions(ride_positions)
    return HttpResponse("OK")
Example #2
0
    def _create_fmr(cls, ride_data):
        if not ride_data:
            return None

        ride_uuid = ride_data.get("External_Order_ID")
        raw_status = ride_data.get("Status")
        status = cls._resolve_status(raw_status)
        taxi_number = ride_data.get("Operating_Vehicle")
        lat = ride_data.get("Lat")
        lon = ride_data.get("Lon")
        timestamp = ride_data.get("Timestamp")
        station_id = ride_data.get("Operator_ID")

        if ride_uuid and taxi_number and station_id:  # assign taxi to ride on status updates
            cls.set_taxi_assignment(taxi_number, station_id, ride_uuid)

        if not ride_uuid:  # populate ride_uuid for position updates
            ride_uuid = cls.get_taxi_assignment(taxi_number, station_id)

        if timestamp:
            timestamp = dateutil_parser.parse(timestamp)
            timestamp = normalize_naive_israel_dt(timestamp)

        return FleetManagerRide(ride_uuid,
                                status,
                                taxi_number,
                                station_id,
                                lat,
                                lon,
                                timestamp,
                                raw_status=raw_status)
Example #3
0
def update_positions(request):
    """ View for calls by ISRProxy backend on taxi positions updates. """
    raw_data = request.raw_post_data
    logging.info("isrproxy update_positions: %s" % raw_data)
    update_positions_data = simplejson.loads(raw_data)

    # redirect update to dev server in production environment
    if not settings.DEV:
        dev_positions = filter(
            lambda p: p.get("Operator_ID") == WB_DEV_OPERATOR_ID,
            update_positions_data)
        if dev_positions:
            deferred.defer(
                safe_fetch,
                url=
                "http://dev.latest.waybetter-app.appspot.com/fleet/isrproxy/update/positions/",
                payload=simplejson.dumps(dev_positions),
                method=POST,
                notify=False)
            update_positions_data = filter(
                lambda p: p.get("Operator_ID") != WB_DEV_OPERATOR_ID,
                update_positions_data)

    ride_positions = []
    for rp_data in update_positions_data:
        station_id = rp_data.get("Operator_ID")
        taxi_id = rp_data.get("Vehicle_ID")
        lat = rp_data.get("Lat")
        lon = rp_data.get("Lon")
        timestamp = rp_data.get("Timestamp")

        ride_uuid = ISRProxy.get_taxi_assignment(taxi_id, station_id)

        if all([station_id, ride_uuid, taxi_id, lat, lon, timestamp]):
            timestamp = dateutil_parser.parse(timestamp)
            timestamp = normalize_naive_israel_dt(timestamp)
            ride_positions.append(
                TaxiRidePosition(station_id, taxi_id, ride_uuid, lat, lon,
                                 timestamp))

    fleet_manager.update_positions(ride_positions)
    return HttpResponse("OK")
Example #4
0
    def _create_fmr(cls, ride_data):
        if not ride_data:
            return None

        ride_uuid = ride_data.get("External_Order_ID")
        raw_status = ride_data.get("Status")
        status = cls._resolve_status(raw_status)
        taxi_number = ride_data.get("Operating_Vehicle")
        lat = ride_data.get("Lat")
        lon = ride_data.get("Lon")
        timestamp = ride_data.get("Timestamp")
        station_id = ride_data.get("Operator_ID")

        if ride_uuid and taxi_number and station_id:  # assign taxi to ride on status updates
            cls.set_taxi_assignment(taxi_number, station_id, ride_uuid)

        if not ride_uuid:  # populate ride_uuid for position updates
            ride_uuid = cls.get_taxi_assignment(taxi_number, station_id)

        if timestamp:
            timestamp = dateutil_parser.parse(timestamp)
            timestamp = normalize_naive_israel_dt(timestamp)

        return FleetManagerRide(ride_uuid, status, taxi_number, station_id, lat, lon, timestamp, raw_status=raw_status)