예제 #1
0
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}
예제 #2
0
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}
예제 #3
0
파일: layers.py 프로젝트: qbns/mf-chsdi3
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
예제 #4
0
파일: layers.py 프로젝트: fredj/mf-chsdi3
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
예제 #5
0
파일: features.py 프로젝트: fredj/mf-chsdi3
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}
예제 #6
0
파일: features.py 프로젝트: qbns/mf-chsdi3
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}
예제 #7
0
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}