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')
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')