Ejemplo n.º 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
Ejemplo n.º 2
0
def layers(request):
    """ Get the list of all layers annotated with metadata

        If a parameter called 'category' is passed, it will be
        used to filter the list.
    """

    # FIXME (Ole): Why does the word 'category' have a special meaning?
    #              Someone, please revisit this code!

    geoservers = get_servers(request.user)

    if 'category' in request.REQUEST:
        requested_category = request.REQUEST['category']
    else:
        requested_category = None

    # Iterate across all available geoservers and all layer descriptors
    layer_descriptors = []
    for geoserver in geoservers:
        ld = get_layer_descriptors(geoserver['url'])
        for layer in ld:
            out = {'name': layer[0],
                   'title': titelize(layer[1]['title']),
                   'server_url': geoserver['url']}
            metadata = layer[1]
            name_category = out['name'].split('_')
            if 'category' in metadata.keys():
                category = metadata['category']
            elif len(name_category) > 1:
                # FIXME: This is a temporary measure until we get the keywords:
                # https://github.com/AIFDR/riab/issues/46
                # If there is no metadata then try using format category_name
                # FIXME (Ole): This section should definitely be cleaned up
                # FIXME (Ole): CLEAN IT - NOW!!!
                category = name_category[0]
            else:
                category = None

            if requested_category is not None:
                if requested_category == category:
                    layer_descriptors.append(out)
            else:
                layer_descriptors.append(out)

    output = {'objects': layer_descriptors}
    jsondata = json.dumps(output)
    return HttpResponse(jsondata, mimetype='application/json')
Ejemplo n.º 3
0
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')
Ejemplo n.º 4
0
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')
Ejemplo n.º 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