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")
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)
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")