Exemplo n.º 1
0
Arquivo: views.py Projeto: 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')
Exemplo n.º 2
0
Arquivo: views.py Projeto: sabman/riab
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.
    """

    geoservers = get_servers(request.user)

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

    # Iterate across all available geoservers and return every layer
    # and associated keywords
    for geoserver in geoservers:
        layers = get_layers_metadata(geoserver['url'],
                                     geoserver['version'])
        for layer in layers:
            out = {'name': layer[0],
                   '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
                category = name_category[0]
            else:
                category = None

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

    output = {'objects': layers_metadata}
    jsondata = json.dumps(output)
    return HttpResponse(jsondata, mimetype='application/json')