def test_publish_csv(self):
        """Check that CSV publishing works like it should"""
        # Create a package
        p = self.add_package("test_publish_csv")

        # Create a resource
        p = self.add_resource(p["id"], {"package_id": p["id"], "url": "http://nothing.com/false.csv"})

        # Do the Datastorer part
        resource_id = p.get("resources")[0]["id"]
        self.createTable(resource_id)

        # Assemble params for the publish function
        context = {"user": self.admin_user().name}
        params = {
            "package_id": p["id"],
            "resource_id": resource_id,
            "layer_name": "test-csv-publish-layer",
            "col_latitude": "lat",
            "col_longitude": "lng"
        }

        # Publish it via action
        response = publish(context, params)

        # Assertions
        gs = Geoserver.from_ckan_config()
        self.assertIsInstance(gs.get_layer("test-csv-publish-layer"), GeoserverLayer)
Exemple #2
0
    def __init__(self, package_id, resource_id, layer_name, username, geoserver=Geoserver.from_ckan_config(), lat_field=None, lng_field=None):
        self.geoserver = geoserver
        self.store = geoserver.default_datastore()
        self.name = layer_name
        self.username = username
        self.file_resource = toolkit.get_action("resource_show")(None, {"id": resource_id})
        self.package_id = package_id
        self.resource_id = resource_id

        # Spatialize it
        url = self.file_resource["url"]
        kwargs = {"resource_id": self.file_resource["id"]}

        if url.endswith('.zip'):
            cls = Shapefile
        elif url.endswith('.csv'):
            cls = Datastored
            kwargs.update({
                "lat_field": lat_field,
                "lng_field": lng_field
            })
        else:
            # The resource cannot be spatialized
            raise Exception(toolkit._("Only CSV and Shapefile data can be spatialized"))

        self.data = cls(**kwargs)

        # Spatialize
        if not self.data.publish():
            # Spatialization failed
            raise Exception(toolkit._("Spatialization failed."))
Exemple #3
0
    def test_create_layer(self):
        """Check that a layer exists once create_layer is called"""
        # Create a layer
        l = Layer(self._test_package["id"], self._test_resource["id"], "testing-layer", self.admin_user().name)

        # Push to Geoserver
        self.assertIsInstance(l.create_layer(), GeoserverLayer)

        # Check that the layer exists
        gs = Geoserver.from_ckan_config()
        self.assertIsInstance(gs.get_layer("testing-layer"), GeoserverLayer)
Exemple #4
0
    def test_create_layer(self):
        """Check that a layer exists once create_layer is called"""
        # Create a layer
        l = Layer(self._test_package["id"], self._test_resource["id"], "testing-layer", self.admin_user().name)

        # Push to Geoserver
        self.assertIsInstance(l.create_layer(), GeoserverLayer)

        # Check that the layer exists
        gs = Geoserver.from_ckan_config()
        self.assertIsInstance(gs.get_layer("testing-layer"), GeoserverLayer)
Exemple #5
0
 def publish(cls,
             package_id,
             resource_id,
             layer_name,
             username,
             geoserver=Geoserver.from_ckan_config(),
             lat_field=None,
             lng_field=None):
     l = cls(package_id, resource_id, layer_name, username, geoserver,
             lat_field, lng_field)
     if l.create():
         return l
     else:
         return None
Exemple #6
0
def layer_exists(context, data_dict):
    """
    Checks whether layer exists in the geoserver. If not then returns False.

    @return: Boolean
    """

    if 'layer_name' in data_dict:
        layer_name = _get_or_bust(data_dict, 'layer_name')

    geoserver = Geoserver.from_ckan_config()
    if geoserver.get_layer(layer_name) is None:
        return False
    else:
        return True
Exemple #7
0
def layer_exists(context, data_dict):
    """
    Checks whether layer exists in the geoserver. If not then returns False.

    @return: Boolean
    """

    if 'layer_name' in data_dict:
        layer_name = _get_or_bust(data_dict, 'layer_name')

    geoserver = Geoserver.from_ckan_config()
    if geoserver.get_layer(layer_name) is None:
        return False
    else:
        return True
Exemple #8
0
def unpublish(context, data_dict):
    """
    Un-publishes the geoserver layer based on the resource identifier. Retrieves the geoserver layer name and package
     identifier to construct layer and remove it.
    """
    resource_id = data_dict.get("resource_id")
    layer_name = data_dict.get("layer_name")
    layer_name = "NGDS:" + resource_id
    username = context.get('user')
    geoserver_layer_name = data_dict.get("gs_lyr_name", None)
    file_resource = toolkit.get_action("resource_show")(None, {
        "id": resource_id
    })

    if not layer_name:
        resource = ckan_model.Resource.get(resource_id)

    geoserver = Geoserver.from_ckan_config()

    package_id = ckan_model.Resource.get(resource_id).resource_group.package_id

    def unpub():
        if geoserver_layer_name is not None:
            layer = Layer(geoserver=geoserver,
                          layer_name=geoserver_layer_name,
                          resource_id=resource_id,
                          package_id=package_id,
                          username=username)
            return layer
        else:
            layer = Layer(geoserver=geoserver,
                          layer_name=layer_name,
                          resource_id=resource_id,
                          package_id=package_id,
                          username=username)
            return layer

    try:
        layer = unpub()
    except socket.error:
        h.flash_error(
            _("Error connecting to geoserver. Please contact the site administrator if this problem persists."
              ))
        return False

    layer.remove()
    h.flash_success(_("This resource has successfully been unpublished."))
    return True
    def test_publish_shapefile(self):
        """Check that Shapefile publishing works like it should"""
        # Create a package and resource
        package_name = "test_publish_shapefile"
        res = self.add_shapefile_resource(package_name)

        # Assemble params
        context = {"user": self.admin_user().name}
        params = {
            "package_id": package_name,
            "resource_id": res["id"],
            "layer_name": "test-shapefile-publish-layer",
        }

        # Publish it via action
        response = publish(context, params)

        # Assertions
        gs = Geoserver.from_ckan_config()
        self.assertIsInstance(gs.get_layer("test-shapefile-publish-layer"), GeoserverLayer)
Exemple #10
0
def unpublish(context, data_dict):
    """
    Un-publishes the geoserver layer based on the resource identifier. Retrieves the geoserver layer name and package
     identifier to construct layer and remove it.
    """
    resource_id = data_dict.get("resource_id")
    layer_name = data_dict.get("layer_name")
    layer_name = "NGDS:" + resource_id
    username = context.get('user')
    geoserver_layer_name = data_dict.get("gs_lyr_name", None)
    file_resource = toolkit.get_action("resource_show")(None, {"id": resource_id})

    if not layer_name:
        resource = ckan_model.Resource.get(resource_id)

    geoserver = Geoserver.from_ckan_config()

    package_id = ckan_model.Resource.get(resource_id).resource_group.package_id

    def unpub():
        if geoserver_layer_name is not None:
            layer = Layer(geoserver=geoserver, layer_name=geoserver_layer_name, resource_id=resource_id,
                          package_id=package_id, username=username)
            return layer
        else:
            layer = Layer(geoserver=geoserver, layer_name=layer_name, resource_id=resource_id,
                          package_id=package_id,
                          username=username)
            return layer

    try:
        layer = unpub()
    except socket.error:
        h.flash_error(
            _("Error connecting to geoserver. Please contact the site administrator if this problem persists."))
        return False

    layer.remove()
    h.flash_success(
        _("This resource has successfully been unpublished."))
    return True
Exemple #11
0
    def __init__(self,
                 package_id,
                 resource_id,
                 layer_name,
                 username,
                 geoserver=Geoserver.from_ckan_config(),
                 lat_field=None,
                 lng_field=None):
        self.geoserver = geoserver
        self.store = geoserver.default_datastore()
        self.name = layer_name
        self.username = username
        self.file_resource = toolkit.get_action("resource_show")(
            None, {
                "id": resource_id
            })
        self.package_id = package_id
        self.resource_id = resource_id

        # Spatialize it
        url = self.file_resource["url"]
        kwargs = {"resource_id": self.file_resource["id"]}

        if url.endswith('.zip'):
            cls = Shapefile
        elif url.endswith('.csv'):
            cls = Datastored
            kwargs.update({"lat_field": lat_field, "lng_field": lng_field})
        else:
            # The resource cannot be spatialized
            raise Exception(
                toolkit._("Only CSV and Shapefile data can be spatialized"))

        self.data = cls(**kwargs)

        # Spatialize
        if not self.data.publish():
            # Spatialization failed
            raise Exception(toolkit._("Spatialization failed."))
 def setUp(self):
     self.gs = Geoserver.from_ckan_config()
Exemple #13
0
 def setUp(self):
     self.gs = Geoserver.from_ckan_config()
Exemple #14
0
 def publish(cls, package_id, resource_id, layer_name, username, geoserver=Geoserver.from_ckan_config(), lat_field=None, lng_field=None):
     l = cls(package_id, resource_id, layer_name, username, geoserver, lat_field, lng_field)
     if l.create():
         return l
     else:
         return None