def autocomplete(self): if self._autocomplete_type: # retrocompat: we need to continue to read configuration from file # while we migrate to database configuration return global_autocomplete.get(self._autocomplete_type) backend = global_autocomplete.get(self.autocomplete_backend) if backend is None: raise RuntimeError( 'impossible to find autocomplete {} for instance {}'.format( self.autocomplete_backend, self.name)) return backend
def get_autocomplete(self, requested_autocomplete): if not requested_autocomplete: return self.autocomplete autocomplete = global_autocomplete.get(requested_autocomplete) if not autocomplete: raise TechnicalError('autocomplete {} not available'.format(requested_autocomplete)) return autocomplete
def get(self, id, region=None, lon=None, lat=None): args = self.parsers["get"].parse_args() args.update({ "uri": transform_id(id), "_current_datetime": datetime.utcnow() }) request_id = "places_{}".format(flask.request.id) args["request_id"] = request_id if any([region, lon, lat]): self.region = i_manager.get_region(region, lon, lat) timezone.set_request_timezone(self.region) response = i_manager.dispatch(args, "place_uri", instance_name=self.region) else: user = authentication.get_user(token=authentication.get_token(), abort_if_no_token=False) available_instances = get_all_available_instances(user) autocomplete = global_autocomplete.get('bragi') if not autocomplete: raise TechnicalError( 'world wide autocompletion service not available') response = autocomplete.get_by_uri(args["uri"], request_id=request_id, instances=available_instances) return response, 200
def get(self, region=None, lon=None, lat=None): args = self.parsers["get"].parse_args() self._register_interpreted_parameters(args) if len(args['q']) == 0: abort(400, message="Search word absent") if args['disable_geojson']: g.disable_geojson = True user = authentication.get_user(token=authentication.get_token(), abort_if_no_token=False) if args['shape'] is None and user and user.shape: args['shape'] = json.loads(user.shape) if user and user.default_coord: if args['from'] is None: args['from'] = CoordFormat()(user.default_coord) else: if args['from'] == '': raise InvalidArguments("if 'from' is provided it cannot be null") # If a region or coords are asked, we do the search according # to the region, else, we do a word wide search if any([region, lon, lat]): self.region = i_manager.get_region(region, lon, lat) timezone.set_request_timezone(self.region) response = i_manager.dispatch(args, "places", instance_name=self.region) else: available_instances = get_all_available_instances(user) autocomplete = global_autocomplete.get('bragi') if not autocomplete: raise TechnicalError('world wide autocompletion service not available') response = autocomplete.get(args, instances=available_instances) return response, 200
def get(self, region=None, lon=None, lat=None): args = self.parsers["get"].parse_args() self._register_interpreted_parameters(args) if len(args['q']) == 0: abort(400, message="Search word absent") if args['disable_geojson']: g.disable_geojson = True user = authentication.get_user(token=authentication.get_token(), abort_if_no_token=False) args['shape'] = json.loads(user.shape) if user and user.shape else None # If a region or coords are asked, we do the search according # to the region, else, we do a word wide search if any([region, lon, lat]): self.region = i_manager.get_region(region, lon, lat) timezone.set_request_timezone(self.region) response = i_manager.dispatch(args, "places", instance_name=self.region) else: authentication.check_access_to_global_places(user) autocomplete = global_autocomplete.get('bragi') if autocomplete: response = autocomplete.get(args, instance=None) else: raise TechnicalError( 'world wide autocompletion service not available') return response, 200
def get(self, region=None, lon=None, lat=None): args = self.parsers["get"].parse_args() self._register_interpreted_parameters(args) size_q = len(args['q']) if size_q == 0: abort(400, message="Search word absent") if size_q > 1024: abort( 413, message="Number of characters allowed for the search is 1024") if args['disable_geojson']: g.disable_geojson = True user = authentication.get_user(token=authentication.get_token(), abort_if_no_token=False) if args['shape'] is None and user and user.shape: args['shape'] = json.loads(user.shape) if not args.get("shape_scope[]") and user: args.update({"shape_scope[]": user.shape_scope}) if user and user.default_coord: if args['from'] is None: args['from'] = CoordFormat()(user.default_coord) else: if args['from'] == '': raise InvalidArguments( "if 'from' is provided it cannot be null") # If a region or coords are asked, we do the search according # to the region, else, we do a word wide search args["request_id"] = args.get('request_id', flask.request.id) if any([region, lon, lat]): self.region = i_manager.get_region(region, lon, lat) # when autocompletion is done on a specific coverage we want to filter on its shape if not args['shape']: instance = i_manager.instances.get(self.region) args['shape'] = build_instance_shape(instance) timezone.set_request_timezone(self.region) response = i_manager.dispatch(args, "places", instance_name=self.region) else: available_instances = get_all_available_instances(user) autocomplete = global_autocomplete.get('bragi') if not autocomplete: raise TechnicalError( 'world wide autocompletion service not available') response = autocomplete.get(args, instances=available_instances) return response, 200
def get_entrypoint_detail(self, entrypoint, instance): logging.debug("calling autocomplete {} for {}".format(instance.autocomplete, entrypoint)) detail = instance.autocomplete.get_object_by_uri(entrypoint, instances=[instance]) if detail: return detail if not isinstance(instance.autocomplete, GeocodeJson): bragi = global_autocomplete.get('bragi') if bragi: # if the instance's autocomplete is not a geocodejson autocomplete, we also check in the # global autocomplete instance return bragi.get_object_by_uri(entrypoint, instances=[instance]) return None
def __init__(self, context, name, zmq_socket, street_network_configurations, ridesharing_configurations, realtime_proxies_configuration, zmq_socket_type, autocomplete_type): self.geom = None self._sockets = queue.Queue() self.socket_path = zmq_socket self._scenario = None self._scenario_name = None self.lock = Lock() self.context = context self.name = name self.timezone = None # timezone will be fetched from the kraken self.publication_date = -1 self.is_initialized = False #kraken hasn't been called yet we don't have geom nor timezone self.breaker = pybreaker.CircuitBreaker(fail_max=app.config['CIRCUIT_BREAKER_MAX_INSTANCE_FAIL'], reset_timeout=app.config['CIRCUIT_BREAKER_INSTANCE_TIMEOUT_S']) self.georef = georef.Kraken(self) self.planner = planner.Kraken(self) street_network_configurations = _set_default_street_network_config(street_network_configurations) self.street_network_services = street_network.StreetNetwork.get_street_network_services(self, street_network_configurations) self.ridesharing_services = [] if ridesharing_configurations is not None: self.ridesharing_services = ridesharing_service.Ridesharing.\ get_ridesharing_services(self, ridesharing_configurations) self.ptref = ptref.PtRef(self) self.schedule = schedule.MixedSchedule(self) self.realtime_proxy_manager = realtime_schedule.RealtimeProxyManager(realtime_proxies_configuration, self) self.autocomplete = global_autocomplete.get(autocomplete_type) if not self.autocomplete: raise TechnicalError('impossible to find autocomplete system {} ' 'cannot initialize instance {}'.format(autocomplete_type, name)) self.zmq_socket_type = zmq_socket_type
def get(self, region=None, lon=None, lat=None): args = self.parsers["get"].parse_args() self._register_interpreted_parameters(args) if len(args['q']) == 0: abort(400, message="Search word absent") # If a region or coords are asked, we do the search according # to the region, else, we do a word wide search if any([region, lon, lat]): instance = i_manager.get_region(region, lon, lat) response = i_manager.dispatch(args, "places", instance_name=instance) else: if global_autocomplete: response = global_autocomplete.get(args, None) else: raise TechnicalError( 'world wide autocompletion service not available') return response, 200
def get(self, id, region=None, lon=None, lat=None): args = self.parsers["get"].parse_args() args.update({ "uri": transform_id(id), "_current_datetime": datetime.utcnow() }) request_id = "places_{}".format(flask.request.id) args["request_id"] = request_id if any([region, lon, lat]): self.region = i_manager.get_region(region, lon, lat) timezone.set_request_timezone(self.region) response = i_manager.dispatch(args, "place_uri", instance_name=self.region) else: user = authentication.get_user(token=authentication.get_token(), abort_if_no_token=False) available_instances = get_all_available_instances( user, exclude_backend='kraken') # If no instance available most probably due to database error if (not user) and (not available_instances): raise TechnicalError( 'world wide autocompletion service not available temporarily' ) # If parameter '_autocomplete' is absent use 'bragi' as default value if args["_autocomplete"] is None: args["_autocomplete"] = app.config.get( 'DEFAULT_AUTOCOMPLETE_BACKEND', 'bragi') autocomplete = global_autocomplete.get(args["_autocomplete"]) if not autocomplete: raise TechnicalError( 'world wide autocompletion service not available') response = autocomplete.get_by_uri(args["uri"], request_id=request_id, instances=available_instances) return response, 200