def _find(request): MaxFeatures = 50 params = _get_find_params(request) if params.searchText is None: raise exc.HTTPBadRequest('Please provide a searchText') models = queryable_models_from_bodid(params.layer, params.searchField) features = [] if models is None: raise exc.HTTPBadRequest( 'No Vector Table was found for %s for searchField %s' % (params.layer, params.searchField)) for model in models: searchColumn = model.get_column_by_property_name(params.searchField) query = request.db.query(model) if params.contains: query = full_text_search(query, [searchColumn], params.searchText) else: if isinstance(searchColumn.type, Date): query = query.filter( cast(searchColumn, Date) == params.searchText) else: searchText = _format_search_text(searchColumn.type, params.searchText) query = query.filter(searchColumn == searchText) query = query.limit(MaxFeatures) for feature in query: f = _process_feature(feature, params) features.append(f) return {'results': features}
def _find(request): MaxFeatures = 50 params = _get_find_params(request) if params.searchText is None: raise exc.HTTPBadRequest('Please provide a searchText') models = models_from_name(params.layer) features = [] findColumn = lambda x: (x, x.get_column_by_name(params.searchField)) if models is None: raise exc.HTTPBadRequest('No Vector Table was found for %s' % params.layer) for model in models: vectorModel, searchColumn = findColumn(model) if searchColumn is None: raise exc.HTTPBadRequest('Please provide an existing searchField') query = request.db.query(vectorModel) if params.contains: query = full_text_search(query, [searchColumn], params.searchText) else: if isinstance(searchColumn.type, Date): query = query.filter( cast(searchColumn, Date) == params.searchText) else: searchText = _format_search_text(searchColumn.type, params.searchText) query = query.filter(searchColumn == searchText) query = query.limit(MaxFeatures) for feature in query: f = _process_feature(feature, params) features.append(f) return {'results': features}
def metadata(request): params = LayersParams(request) model = get_bod_model(params.lang) query = params.request.db.query(model) query = _filter_on_chargeable_attr(params, query, model) if params.searchText is not None: query = full_text_search(query, [model.fullTextSearch, model.layerBodId, model.idGeoCat], params.searchText) results = computeHeader(params.mapName) for layer in get_layers_metadata_for_params(params, query, model): results["layers"].append(layer) return results
def metadata(request): params = BaseLayersValidation(request) model = get_bod_model(params.lang) query = params.request.db.query(model) query = _filter_on_chargeable_attr(params, query, model) if params.searchText is not None: query = full_text_search( query, [model.fullTextSearch, model.layerBodId, model.idGeoCat], params.searchText) results = computeHeader(params.mapName, params.srid) for layer in get_layers_metadata_for_params(params, query, model): results['layers'].append(layer) return results
def _find(request): MaxFeatures = MAX_FEATURES params = FindServiceValidation(request) if params.searchText is None: raise exc.HTTPBadRequest('Please provide a searchText') models = queryable_models_from_bodid(params.layer, params.searchField, srid=params.srid) features = [] if models is None: raise exc.HTTPBadRequest( 'No Vector Table was found for %s for searchField %s' % (params.layer, params.searchField)) vectorLayers = [] for model in models: where_txt = None if params.where is not None: where_txt = format_query(model, params.where, params.lang) vectorLayers.append((model, where_txt)) # Attributes in the 'where' or 'layerDefs' should match attributes in # at least one model related to a layer bodId if params.where is not None and not any(list(zip(*vectorLayers)[1])): raise exc.HTTPBadRequest( 'Filtering on a not existing field on layer {}'.format( params.layer)) for model, where_text in vectorLayers: searchColumn = model.get_column_by_property_name(params.searchField) query = request.db.query(model) if params.contains: query = full_text_search(query, [searchColumn], params.searchText) else: if isinstance(searchColumn.type, Date): query = query.filter( cast(searchColumn, Date) == params.searchText) else: searchText = _format_search_text(searchColumn.type, params.searchText) query = query.filter(searchColumn == searchText) if where_txt is not None: query = query.filter( text("({})".format(where_txt) # operator precedance )) query = query.limit(MaxFeatures) for feature in query: f = _process_feature(feature, params) features.append(f) return {'results': features}
def _find(request): MaxFeatures = 50 params = _get_find_params(request) if params.searchText is None: raise exc.HTTPBadRequest('Please provide a searchText') models = models_from_name(params.layer) features = [] findColumn = lambda x: (x, x.get_column_by_property_name(params.searchField)) if models is None: raise exc.HTTPBadRequest('No Vector Table was found for %s' % params.layer) for model in models: vectorModel, searchColumn = findColumn(model) if searchColumn is None: raise exc.HTTPBadRequest('Please provide an existing searchField') query = request.db.query(vectorModel) if params.contains: query = full_text_search( query, [searchColumn], params.searchText ) else: if isinstance(searchColumn.type, Date): query = query.filter( cast(searchColumn, Date) == params.searchText ) else: searchText = _format_search_text(searchColumn.type, params.searchText) query = query.filter( searchColumn == searchText ) query = query.limit(MaxFeatures) for feature in query: f = _process_feature(feature, params) features.append(f) return {'results': features}
def _find(request): MaxFeatures = 50 params = FindServiceValidation(request) if params.searchText is None: raise exc.HTTPBadRequest('Please provide a searchText') models = queryable_models_from_bodid(params.layer, params.searchField, srid=params.srid) features = [] if models is None: raise exc.HTTPBadRequest( 'No Vector Table was found for %s for searchField %s' % (params.layer, params.searchField)) for model in models: searchColumn = model.get_column_by_property_name(params.searchField) query = request.db.query(model) if params.contains: query = full_text_search( query, [searchColumn], params.searchText ) else: if isinstance(searchColumn.type, Date): query = query.filter( cast(searchColumn, Date) == params.searchText ) else: searchText = _format_search_text(searchColumn.type, params.searchText) query = query.filter( searchColumn == searchText ) query = query.limit(MaxFeatures) for feature in query: f = _process_feature(feature, params) features.append(f) return {'results': features}