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, 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) 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(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