def handle(self, *args, **options): verbosity = int(options.get('verbosity')) ignore_errors = options.get('ignore_errors') user = options.get('user') overwrite = options.get('overwrite') if overwrite == True: skip = False else: skip = True keywords = options.get('keywords').split() start = datetime.datetime.now() output = [] for path in args: out = upload(path, user=user, overwrite=overwrite, skip=skip, keywords=keywords, verbosity=verbosity) output.extend(out) updated = [ dict_['file'] for dict_ in output if dict_['status'] == 'updated' ] created = [ dict_['file'] for dict_ in output if dict_['status'] == 'created' ] skipped = [ dict_['file'] for dict_ in output if dict_['status'] == 'skipped' ] failed = [ dict_['file'] for dict_ in output if dict_['status'] == 'failed' ] finish = datetime.datetime.now() td = finish - start duration = td.microseconds / 1000000 + td.seconds + td.days * 24 * 3600 duration_rounded = round(duration, 2) if verbosity > 1: print "\nDetailed report of failures:" for dict_ in output: if dict_['status'] == 'failed': print "\n\n", dict_['file'], "\n================" traceback.print_exception(dict_['exception_type'], dict_['error'], dict_['traceback']) if verbosity > 0: print "\n\nFinished processing %d layers in %s seconds.\n" % ( len(output), duration_rounded) print "%d Created layers" % len(created) print "%d Updated layers" % len(updated) print "%d Skipped layers" % len(skipped) print "%d Failed layers" % len(failed) if len(output) > 0: print "%f seconds per layer" % (duration * 1.0 / len(output))
import sys, os sys.path.append("../") sys.path.append("./") os.environ['DJANGO_SETTINGS_MODULE'] = "tsudat2.settings" from geonode.maps.utils import upload from django.contrib.auth.models import User u = User.objects.get(pk=1) print u upload('/home/tsudat/temp', u)
def test_layer_upload(self): """Test that layers can be uploaded to running GeoNode/GeoServer """ layers = {} expected_layers = [] not_expected_layers = [] datadir = TEST_DATA BAD_LAYERS = ["lembang_schools_percentage_loss.shp"] for filename in os.listdir(datadir): basename, extension = os.path.splitext(filename) if extension.lower() in [".tif", ".shp", ".zip"]: if filename not in BAD_LAYERS: expected_layers.append(os.path.join(datadir, filename)) else: not_expected_layers.append(os.path.join(datadir, filename)) uploaded = upload(datadir) for item in uploaded: errors = "errors" in item if errors: # should this file have been uploaded? if item["file"] in not_expected_layers: continue msg = "Could not upload %s. " % item["file"] assert errors is False, msg + "Error was: %s" % item["errors"] msg = 'Upload should have returned either "name" or ' '"errors" for file %s.' % item["file"] else: assert "name" in item, msg layers[item["file"]] = item["name"] msg = "There were %s compatible layers in the directory," " but only %s were sucessfully uploaded" % ( len(expected_layers), len(layers), ) # assert len(layers) == len(expected_layers), msg uploaded_layers = [layer for layer in layers.items()] for layer in expected_layers: msg = "The following file should have been uploaded" "but was not: %s. " % layer assert layer in layers, msg layer_name = layers[layer] # Check the layer is in the Django database Layer.objects.get(name=layer_name) # Check that layer is in geoserver found = False gs_username, gs_password = settings.GEOSERVER_CREDENTIALS page = get_web_page( os.path.join(settings.GEOSERVER_BASE_URL, "rest/layers"), username=gs_username, password=gs_password ) if page.find("rest/layers/%s.html" % layer_name) > 0: found = True if not found: msg = ( "Upload could not be verified, the layer %s is not " "in geoserver %s, but GeoNode did not raise any errors, " "this should never happen." % (layer_name, settings.GEOSERVER_BASE_URL) ) raise GeoNodeException(msg) server_url = settings.GEOSERVER_BASE_URL + "ows?" # Verify that the GeoServer GetCapabilities record is accesible: # metadata = get_layers_metadata(server_url, '1.0.0') # msg = ('The metadata list should not be empty in server %s' # % server_url) # assert len(metadata) > 0, msg # Check the keywords are recognized too # Clean up and completely delete the layers for layer in expected_layers: layer_name = layers[layer] Layer.objects.get(name=layer_name).delete()
def handle(self, *args, **opts): if not opts['quiet'] and len(args) == 0: print "No files passed to import command... Is that what you meant to do?" for path in args: upload(path, opts['user'], opts['overwrite'], opts['keywords'].split())