예제 #1
0
    def test_plugin_compatibility(self):
        """Default plugins perform as expected
        """

        # Upload a raster and a vector data set
        hazard_filename = os.path.join(TESTDATA,
                                       'shakemap_padang_20090930.asc')
        hazard_layer = save_to_geonode(hazard_filename)
        check_layer(hazard_layer, full=True)

        exposure_filename = os.path.join(TESTDATA,
                                         'lembang_schools.shp')
        exposure_layer = save_to_geonode(exposure_filename)
        check_layer(exposure_layer, full=True)

        # Test
        plugin_list = get_plugins()
        assert len(plugin_list) > 0

        geoserver = {'url': settings.GEOSERVER_BASE_URL + 'ows',
                     'name': 'Local Geoserver',
                     'version': '1.0.0',
                     'id': 0}
        metadata = get_layer_descriptors(geoserver['url'])

        msg = 'There were no layers in test geoserver'
        assert len(metadata) > 0, msg

        # Characterisation test to preserve the behaviour of
        # get_layer_descriptors. FIXME: I think we should change this to be
        # a dictionary of metadata entries (ticket #126).
        reference = [['geonode:lembang_schools',
                      {'layer_type': 'feature',
                       'category': 'exposure',
                       'subcategory': 'building',
                       'title': 'lembang_schools'}],
                     ['geonode:shakemap_padang_20090930',
                      {'layer_type': 'raster',
                       'category': 'hazard',
                       'subcategory': 'earthquake',
                       'title': 'shakemap_padang_20090930'}]]

        for entry in reference:
            name, mdblock = entry

            i = [x[0] for x in metadata].index(name)

            assert name == metadata[i][0]
            for key in entry[1]:
                assert entry[1][key] == metadata[i][1][key]

        # Check plugins are returned
        annotated_plugins = [{'name': name,
                              'doc': f.__doc__,
                              'layers': compatible_layers(f, metadata)}
                             for name, f in plugin_list.items()]

        msg = 'No compatible layers returned'
        assert len(annotated_plugins) > 0, msg
예제 #2
0
파일: views.py 프로젝트: sabman/riab
def functions(request):
    """Get a list of all the functions

       Will provide a list of plugin functions and the layers that
       the plugins will work with. Takes geoserver urls as a GET
       parameter can have a comma separated list

       e.g. http://127.0.0.1:8000/riab/api/v1/functions/?geoservers=http:...
       assumes version 1.0.0
    """

    plugin_list = get_plugins()

    if 'geoservers' in request.GET:
        # FIXME for the moment assume version 1.0.0
        geolist = request.GET['geoservers'].split(',')
        geoservers = [{'url': geoserver, 'version': '1.0.0'}
                      for geoserver in geolist]
    else:
        geoservers = get_servers(request.user)

    layers_metadata = []

    # Iterate across all available geoservers and return every layer
    # and associated keywords
    for geoserver in geoservers:
        layers_metadata.extend(
            get_layers_metadata(geoserver['url'],
                                geoserver['version']))

 
    # For each plugin return all layers that meet the requirements
    # an empty layer is returned where the plugin cannot run
    annotated_plugins = []
    for name, f in plugin_list.items():
        layers =  compatible_layers(f, layers_metadata)

        annotated_plugins.append({
         'name': name,
         'doc': f.__doc__,
         'layers': layers,
        })

    output = {'functions': annotated_plugins}
    jsondata = json.dumps(output)
    return HttpResponse(jsondata, mimetype='application/json')
예제 #3
0
파일: views.py 프로젝트: zzpwelkin/riab
def functions(request):
    """Get a list of all the functions

       Will provide a list of plugin functions and the layers that
       the plugins will work with. Takes geoserver urls as a GET
       parameter can have a comma separated list

       e.g. http://127.0.0.1:8000/riab/api/v1/functions/?geoservers=http:...
       assumes version 1.0.0
    """

    plugin_list = get_plugins()

    if 'geoservers' in request.GET:
        # FIXME for the moment assume version 1.0.0
        geolist = request.GET['geoservers'].split(',')
        geoservers = [{'url': geoserver, 'version': '1.0.0'}
                      for geoserver in geolist]
    else:
        geoservers = get_servers(request.user)

    # Iterate across all available geoservers and return all
    # layer descriptors for use with the plugin subsystem
    layer_descriptors = []
    for geoserver in geoservers:
        layer_descriptors.extend(
            get_layer_descriptors(geoserver['url']))

    # For each plugin return all layers that meet the requirements
    # an empty layer is returned where the plugin cannot run
    annotated_plugins = []
    for name, f in plugin_list.items():
        layers = compatible_layers(f, layer_descriptors)

        annotated_plugins.append({'name': name,
                                  'doc': f.__doc__,
                                  'layers': layers})

    output = {'functions': annotated_plugins}
    jsondata = json.dumps(output)
    return HttpResponse(jsondata, mimetype='application/json')
예제 #4
0
    def test_plugin_compatability(self):
        """Performance of the default plugins using internal GeoServer
        """

        plugin_list = get_plugins()
        assert len(plugin_list) > 0

        geoserver = {'url': settings.GEOSERVER_BASE_URL + 'ows',
                     'name': 'Local Geoserver',
                     'version': '1.0.0',
                     'id': 0}
        layers = get_layers_metadata(geoserver['url'],
                                     geoserver['version'])

        msg = 'There were no layers in test geoserver'
        assert len(layers) > 0, msg

        annotated_plugins = [{'name': name,
                              'doc': f.__doc__,
                              'layers': compatible_layers(f, layers)}
                             for name, f in plugin_list.items()]

        msg = 'No compatible layers returned'
        assert len(annotated_plugins) > 0, msg
예제 #5
0
    def test_plugin_compatibility(self):
        """Default plugins perform as expected
        """

        # Upload a raster and a vector data set
        hazard_filename = os.path.join(TESTDATA,
                                       'shakemap_padang_20090930.asc')
        hazard_layer = save_to_geonode(hazard_filename)
        check_layer(hazard_layer, full=True)

        exposure_filename = os.path.join(TESTDATA, 'lembang_schools.shp')
        exposure_layer = save_to_geonode(exposure_filename)
        check_layer(exposure_layer, full=True)

        # Test
        plugin_list = get_plugins()
        assert len(plugin_list) > 0

        geoserver = {
            'url': settings.GEOSERVER_BASE_URL + 'ows',
            'name': 'Local Geoserver',
            'version': '1.0.0',
            'id': 0
        }
        metadata = get_layer_descriptors(geoserver['url'])

        msg = 'There were no layers in test geoserver'
        assert len(metadata) > 0, msg

        # Characterisation test to preserve the behaviour of
        # get_layer_descriptors. FIXME: I think we should change this to be
        # a dictionary of metadata entries (ticket #126).
        reference = [[
            'geonode:lembang_schools', {
                'layer_type': 'vector',
                'category': 'exposure',
                'subcategory': 'building',
                'title': 'lembang_schools'
            }
        ],
                     [
                         'geonode:shakemap_padang_20090930', {
                             'layer_type': 'raster',
                             'category': 'hazard',
                             'subcategory': 'earthquake',
                             'title': 'shakemap_padang_20090930'
                         }
                     ]]

        for entry in reference:
            name, mdblock = entry

            i = [x[0] for x in metadata].index(name)

            msg = 'Got name %s, expected %s' % (name, metadata[i][0])
            assert name == metadata[i][0], msg
            for key in entry[1]:
                refval = entry[1][key]
                val = metadata[i][1][key]
                msg = ('Got value "%s" for key "%s" '
                       'Expected "%s"' % (val, key, refval))
                assert refval == val, msg

        # Check plugins are returned
        annotated_plugins = [{
            'name': name,
            'doc': f.__doc__,
            'layers': compatible_layers(f, metadata)
        } for name, f in plugin_list.items()]

        msg = 'No compatible layers returned'
        assert len(annotated_plugins) > 0, msg