예제 #1
0
    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))
예제 #2
0
파일: upload.py 프로젝트: AIFDR/tsudat2
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()
예제 #4
0
 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())