示例#1
0
    def test_filtering_of_impact_functions(self):
        """Impact functions are filtered correctly
        """

        # Keywords matching F1 and F3
        haz_keywords1 = dict(category='hazard', subcategory='flood',
                                layertype='raster', unit='m')
        exp_keywords1 = dict(category='exposure', subcategory='population',
                             layertype='raster', datatype='population')

        # Keywords matching F2 and F3
        haz_keywords2 = dict(category='hazard', subcategory='flood',
                             layertype='raster', unit='m')
        exp_keywords2 = dict(category='exposure', subcategory='building')

        # Check correct matching
        P = get_admissible_plugins([haz_keywords1, exp_keywords1])
        msg = 'Expected impact functions F1 and F3 in %s' % str(P.keys())
        assert 'F1' in P and 'F3' in P, msg

        P = get_admissible_plugins([haz_keywords2, exp_keywords2])
        msg = 'Expected impact functions F2 and F3 in %s' % str(P.keys())
        assert 'F2' in P and 'F3' in P, msg

        # Check empty call returns all
        P = get_admissible_plugins([])
        msg = ('Expected at least impact functions F1, F2 and F3 in %s'
               % str(P.keys()))
        assert 'F1' in P and 'F2' in P and 'F3' in P, msg
    def test_plugin_compatibility(self):
        """Default plugins perform as expected
        """

        # Upload a raster and a vector data set
        hazard_filename = os.path.join(UNITDATA, 'hazard',
                                       'jakarta_flood_design.tif')
        hazard_layer = save_to_geonode(hazard_filename)
        check_layer(hazard_layer, full=True)

        exposure_filename = os.path.join(UNITDATA, 'exposure',
                                         'buildings_osm_4326.shp')
        exposure_layer = save_to_geonode(exposure_filename)
        check_layer(exposure_layer, full=True)

        # Test
        plugin_list = get_admissible_plugins()
        assert len(plugin_list) > 0

        geoserver = {'url': settings.GEOSERVER_BASE_URL + 'ows',
                     'name': 'Local Geoserver',
                     'version': '1.0.0',
                     'id': 0}
        metadata = get_metadata(geoserver['url'])

        msg = 'There were no layers in test geoserver'
        assert len(metadata) > 0, msg

        # Characterisation test to preserve the behaviour of
        # get_layer_descriptors. FIXME: I think we should change this to be
        # a dictionary of metadata entries (ticket #126).
        reference = {'geonode:buildings_osm_4326':
                      {'layertype': 'vector',
                       'category': 'exposure',
                       'subcategory': 'structure',
                       'title': 'buildings_osm_4326'},
                      'geonode:jakarta_flood_like_2007_with_structural_improvements':
                      {'layertype': 'raster',
                       'category': 'hazard',
                       'subcategory': 'flood',
                       'title': 'Jakarta flood like 2007 with structural improvements'}
                      }
        for name, keywords in reference.items():

            msg = 'Expected layer %s in %s' % (name, metadata.keys())
            assert name in metadata.keys(), msg

            values = metadata[name]['keywords']

            for key in keywords.keys():
                refval = keywords[key]
                val = values[key]
                msg = ('Got value "%s" for key "%s" '
                       'Expected "%s"' % (val, key, refval))
                assert refval == val, msg

        plugins = get_admissible_plugins(keywords=reference.values())

        msg = 'No compatible layers returned'
        assert len(plugins) > 0, msg
示例#3
0
    def test_filtering_of_impact_functions(self):
        """Impact functions are filtered correctly
        """
        # Keywords matching F1 and F3
        haz_keywords1 = dict(category='test_cat1',
                             subcategory='flood',
                             layertype='raster',
                             unit='m')
        exp_keywords1 = dict(category='test_cat2',
                             subcategory='population',
                             layertype='raster',
                             datatype='population')

        # Keywords matching F2 and F3
        haz_keywords2 = dict(category='test_cat1',
                             subcategory='flood',
                             layertype='raster',
                             unit='m')
        exp_keywords2 = dict(category='test_cat2', subcategory='building')

        # Check correct matching of keyword set 1
        plugins = get_admissible_plugins([haz_keywords1, exp_keywords1])
        msg = 'Expected impact functions F1 and F3 in %s' % str(plugins.keys())
        self.assertIn('F1', plugins, msg)
        self.assertIn('F3', plugins, msg)
        self.assertNotIn('F2', plugins, msg)

        # Check correctness of title attribute
        self.assertEqual(get_function_title(plugins['F1']), 'Title for F1')
        self.assertEqual(get_function_title(plugins['F3']), 'F3')

        # Check correct matching of keyword set 2
        plugins = get_admissible_plugins([haz_keywords2, exp_keywords2])
        msg = 'Expected impact functions F2 and F3 in %s' % str(plugins.keys())
        self.assertIn('F2', plugins, msg)
        self.assertIn('F3', plugins, msg)
        self.assertNotIn('F1', plugins, msg)

        # Check correctness of title attribute
        self.assertEqual(get_function_title(plugins['F2']), 'Title for F2')
        self.assertEqual(get_function_title(plugins['F3']), 'F3')

        # Check empty call returns all
        plugins = get_admissible_plugins([])
        msg = ('Expected at least impact functions F1, F2 and F3 in %s' %
               str(plugins.keys()))
        self.assertIn('F1', plugins, msg)
        self.assertIn('F2', plugins, msg)
        self.assertIn('F3', plugins, msg)
示例#4
0
    def test_filtering_of_impact_functions(self):
        """Impact functions are filtered correctly
        """
        # Keywords matching F1 and F3
        haz_keywords1 = dict(category='test_cat1', subcategory='flood',
                             layertype='raster', unit='m')
        exp_keywords1 = dict(category='test_cat2',
                             subcategory='population',
                             layertype='raster', datatype='population')

        # Keywords matching F2 and F3
        haz_keywords2 = dict(category='test_cat1', subcategory='flood',
                             layertype='raster', unit='m')
        exp_keywords2 = dict(category='test_cat2',
                             subcategory='building')

        # Check correct matching of keyword set 1
        plugins = get_admissible_plugins([haz_keywords1, exp_keywords1])
        msg = 'Expected impact functions F1 and F3 in %s' % str(plugins.keys())
        self.assertIn('F1', plugins, msg)
        self.assertIn('F3', plugins, msg)
        self.assertNotIn('F2', plugins, msg)

        # Check correctness of title attribute
        self.assertEqual(get_function_title(plugins['F1']), 'Title for F1')
        self.assertEqual(get_function_title(plugins['F3']), 'F3')

        # Check correct matching of keyword set 2
        plugins = get_admissible_plugins([haz_keywords2, exp_keywords2])
        msg = 'Expected impact functions F2 and F3 in %s' % str(
            plugins.keys())
        self.assertIn('F2', plugins, msg)
        self.assertIn('F3', plugins, msg)
        self.assertNotIn('F1', plugins, msg)

        # Check correctness of title attribute
        self.assertEqual(get_function_title(plugins['F2']), 'Title for F2')
        self.assertEqual(get_function_title(plugins['F3']), 'F3')

        # Check empty call returns all
        plugins = get_admissible_plugins([])
        msg = ('Expected at least impact functions F1, F2 and F3 in %s'
               % str(plugins.keys()))
        self.assertIn('F1', plugins, msg)
        self.assertIn('F2', plugins, msg)
        self.assertIn('F3', plugins, msg)
示例#5
0
    def test_filtering_of_impact_functions(self):
        """Impact functions are filtered correctly
        """

        # Keywords matching F1 and F3
        haz_keywords1 = dict(category='test_cat1',
                             subcategory='flood',
                             layertype='raster',
                             unit='m')
        exp_keywords1 = dict(category='test_cat2',
                             subcategory='population',
                             layertype='raster',
                             datatype='population')

        # Keywords matching F2 and F3
        haz_keywords2 = dict(category='test_cat1',
                             subcategory='flood',
                             layertype='raster',
                             unit='m')
        exp_keywords2 = dict(category='test_cat2', subcategory='building')

        # Check correct matching of keyword set 1
        P = get_admissible_plugins([haz_keywords1, exp_keywords1])
        msg = 'Expected impact functions F1 and F3 in %s' % str(P.keys())
        assert 'F1' in P and 'F3' in P, msg

        # Check correctness of title attribute
        assert get_function_title(P['F1']) == 'Title for F1'
        assert get_function_title(P['F3']) == 'F3'

        # Check correct matching of keyword set 2
        P = get_admissible_plugins([haz_keywords2, exp_keywords2])
        msg = 'Expected impact functions F2 and F3 in %s' % str(P.keys())
        assert 'F2' in P and 'F3' in P, msg

        # Check correctness of title attribute
        assert get_function_title(P['F2']) == 'Title for F2'
        assert get_function_title(P['F3']) == 'F3'

        # Check empty call returns all
        P = get_admissible_plugins([])
        msg = ('Expected at least impact functions F1, F2 and F3 in %s' %
               str(P.keys()))
        assert 'F1' in P and 'F2' in P and 'F3' in P, msg
示例#6
0
    def test_get_admissible_plugins(self):
        """Test for get_admissible_plugins function."""
        functions = get_admissible_plugins()
        message = 'No functions available (len=%ss)' % len(functions)
        self.assertTrue(len(functions) > 0, message)

        # Also test if it works when we give it two layers
        # to see if we can determine which functions will
        # work for them.
        keywords1 = read_file_keywords(self.raster_shake_path)
        keywords2 = read_file_keywords(self.vector_path)
        # We need to explicitly add the layer type to each keyword list
        keywords1['layertype'] = 'raster'
        keywords2['layertype'] = 'vector'

        functions = [keywords1, keywords2]
        functions = get_admissible_plugins(functions)
        message = 'No functions available (len=%ss)' % len(functions)
        self.assertTrue(len(functions) > 0, message)
示例#7
0
    def test_get_admissible_plugins(self):
        """Test for get_admissible_plugins function."""
        functions = get_admissible_plugins()
        message = 'No functions available (len=%ss)' % len(functions)
        self.assertTrue(len(functions) > 0, message)

        # Also test if it works when we give it two layers
        # to see if we can determine which functions will
        # work for them.
        keywords1 = read_file_keywords(self.raster_shake_path)
        keywords2 = read_file_keywords(self.vector_path)
        # We need to explicitly add the layer type to each keyword list
        keywords1['layertype'] = 'raster'
        keywords2['layertype'] = 'vector'

        functions = [keywords1, keywords2]
        functions = get_admissible_plugins(functions)
        message = 'No functions available (len=%ss)' % len(functions)
        self.assertTrue(len(functions) > 0, message)
示例#8
0
    def test_filtering_of_impact_functions(self):
        """Impact functions are filtered correctly
        """

        # Keywords matching F1 and F3
        haz_keywords1 = dict(category='test_cat1', subcategory='flood',
                             layertype='raster', unit='m')
        exp_keywords1 = dict(category='test_cat2', subcategory='population',
                             layertype='raster', datatype='population')

        # Keywords matching F2 and F3
        haz_keywords2 = dict(category='test_cat1', subcategory='flood',
                             layertype='raster', unit='m')
        exp_keywords2 = dict(category='test_cat2', subcategory='building')

        # Check correct matching of keyword set 1
        P = get_admissible_plugins([haz_keywords1, exp_keywords1])
        msg = 'Expected impact functions F1 and F3 in %s' % str(P.keys())
        assert 'F1' in P and 'F3' in P, msg

        # Check correctness of title attribute
        assert get_function_title(P['F1']) == 'Title for F1'
        assert get_function_title(P['F3']) == 'F3'

        # Check correct matching of keyword set 2
        P = get_admissible_plugins([haz_keywords2, exp_keywords2])
        msg = 'Expected impact functions F2 and F3 in %s' % str(P.keys())
        assert 'F2' in P and 'F3' in P, msg

        # Check correctness of title attribute
        assert get_function_title(P['F2']) == 'Title for F2'
        assert get_function_title(P['F3']) == 'F3'

        # Check empty call returns all
        P = get_admissible_plugins([])
        msg = ('Expected at least impact functions F1, F2 and F3 in %s'
               % str(P.keys()))
        assert 'F1' in P and 'F2' in P and 'F3' in P, msg
    def test_filtering_of_impact_functions(self):
        """Impact functions are filtered correctly
        """

        # Check empty call returns all
        P = get_admissible_plugins([])

        # List the known impact function names
        # based on their class names - not their titles
        msg = 'Available impact functions are: %s' % str(P.keys())
        #print msg
        assert 'Flood Evacuation Function Vector Hazard' in P, msg
        assert 'I T B Earthquake Building Damage Function' in P, msg
        assert 'Earthquake Building Impact Function' in P, msg
        assert 'P A G Fatality Function' in P, msg
        assert 'Flood Evacuation Function' in P, msg
        assert 'Flood Building Impact Function' in P, msg
        assert 'I T B Fatality Function' in P, msg
        assert 'Volcano Building Impact' in P, msg
        assert 'Volcano Polygon Hazard Population' in P, msg

        # This one should get 2 earthquake building impact functions
        D1 = {'category': 'hazard', 'subcategory': 'earthquake', 'unit': 'MMI'}
        D2 = {'category': 'exposure', 'datatype': 'itb',
              'subcategory': 'structure'}

        # Add layertype
        D1['layertype'] = 'raster'
        D2['layertype'] = 'vector'
        P = get_admissible_plugins([D1, D2])
        msg = 'Expected: len(P) >= 2, Got: len(P) is %i' % len(P)
        assert len(P) >= 1, msg  # Depending on other tests there could be more
        assert 'Earthquake Building Impact Function' in P

        # This one should get 3 flood population impact functions
        D1 = {'category': 'hazard', 'subcategory': 'flood', 'unit': 'm'}
        D2 = {'category': 'exposure', 'subcategory': 'population'}

        # Add layertype
        D1['layertype'] = 'raster'
        D2['layertype'] = 'raster'
        P = get_admissible_plugins([D1, D2])
        assert len(P) >= 1  # Depending on other tests there could be more
        #assert 'W B Flood Evacuation Function' in P

        # Try form where only one dictionary is passed
        # This one gets all the flood related impact functions

        # Try to get general inundation building impact function
        f_name = 'Flood Building Impact Function'

        P = get_admissible_plugins(D1)
        assert len(P) >= 2
        #assert 'W B Flood Evacuation Function' in P
        assert f_name in P
        #assert 'Flood Road Impact Function' in P

        D1 = {'category': 'hazard', 'subcategory': 'tsunami'}
        D2 = {'category': 'exposure', 'subcategory': 'structure'}

        # Add layertype
        #D1['layertype'] = 'raster'  # Not required for flood building impact
        D2['layertype'] = 'vector'
        P = get_admissible_plugins([D1, D2])

        msg = 'Expected name "%s" in P: %s' % (f_name, P)
        assert f_name in P, msg

        # Get requirements from expected function
        P_all = get_admissible_plugins()
        assert P[f_name] == P_all[f_name]

        requirelines = requirements_collect(P[f_name])
        for i, D in enumerate([D1, D2]):
            for key in D:
                msg = 'Key %s was not found in %s' % (key, requirelines[i])
                assert key in requirelines[i], msg

                msg = 'Val %s was not found in %s' % (D[key], requirelines[i])
                assert D[key] in requirelines[i], msg
示例#10
0
    def test_filtering_of_impact_functions(self):
        """Impact functions are filtered correctly
        """

        # Check empty call returns all
        admissible_plugins = get_admissible_plugins([])

        # List the known impact function names
        # based on their class names - not their titles
        msg = (
            'Available impact functions are: %s' %
            str(admissible_plugins.keys()))

        self.assertIn(
            'Flood Evacuation Function Vector Hazard',
            admissible_plugins, msg)
        self.assertIn(
            'I T B Earthquake Building Damage Function',
            admissible_plugins, msg)
        self.assertIn(
            'Earthquake Building Impact Function',
            admissible_plugins, msg)
        self.assertIn(
            'P A G Fatality Function',
            admissible_plugins, msg)
        self.assertIn(
            'Flood Evacuation Function',
            admissible_plugins, msg)
        self.assertIn(
            'Flood Building Impact Function',
            admissible_plugins, msg)
        self.assertIn(
            'I T B Fatality Function',
            admissible_plugins, msg)
        self.assertIn(
            'Volcano Building Impact',
            admissible_plugins, msg)
        self.assertIn(
            'Volcano Polygon Hazard Population',
            admissible_plugins, msg)

        # This one should get 2 earthquake building impact functions
        dict1 = {
            'category': 'hazard',
            'subcategory': 'earthquake',
            'unit': 'MMI'}
        dict2 = dict(
            category='exposure',
            datatype='itb',
            subcategory='structure')

        # Add layertype
        dict1['layertype'] = 'raster'
        dict2['layertype'] = 'vector'
        admissible_plugins = get_admissible_plugins([dict1, dict2])
        msg = (
            'Expected: len(admissible_plugins) >= 2, Got: '
            'len(admissible_plugins) is %i' % len(admissible_plugins))
        # Depending on other tests there could be more
        assert len(admissible_plugins) >= 1, msg
        assert 'Earthquake Building Impact Function' in admissible_plugins

        # This one should get 3 flood population impact functions
        dict1 = {'category': 'hazard', 'subcategory': 'flood', 'unit': 'm'}
        dict2 = dict(category='exposure', subcategory='population')

        # Add layertype
        dict1['layertype'] = 'raster'
        dict2['layertype'] = 'raster'
        admissible_plugins = get_admissible_plugins([dict1, dict2])
        # Depending on other tests there could be more
        assert len(admissible_plugins) >= 1
        # assert 'W B Flood Evacuation Function' in admissible_plugins

        # Try form where only one dictionary is passed
        # This one gets all the flood related impact functions

        # Try to get general inundation building impact function
        f_name = 'Flood Building Impact Function'

        admissible_plugins = get_admissible_plugins(dict1)
        assert len(admissible_plugins) >= 2
        # assert 'W B Flood Evacuation Function' in admissible_plugins
        assert f_name in admissible_plugins
        # assert 'Flood Road Impact Function' in admissible_plugins

        dict1 = {'category': 'hazard', 'subcategory': 'tsunami'}
        dict2 = dict(category='exposure', subcategory='structure')

        # Add layertype
        # Not required for flood building impact
        # dict1['layertype'] = 'raster'
        dict2['layertype'] = 'vector'
        admissible_plugins = get_admissible_plugins([dict1, dict2])

        msg = 'Expected name "%s" in admissible_plugins: %s' % (
            f_name, admissible_plugins)
        assert f_name in admissible_plugins, msg

        # Get requirements from expected function
        all_plugins = get_admissible_plugins()
        assert admissible_plugins[f_name] == all_plugins[f_name]

        requirelines = requirements_collect(admissible_plugins[f_name])
        for i, D in enumerate([dict1, dict2]):
            for key in D:
                msg = 'Key %s was not found in %s' % (key, requirelines[i])
                assert key in requirelines[i], msg

                msg = 'Val %s was not found in %s' % (D[key], requirelines[i])
                assert D[key] in requirelines[i], msg
    def test_filtering_of_impact_functions(self):
        """Impact functions are filtered correctly
        """

        # Check empty call returns all
        admissible_plugins = get_admissible_plugins([])

        # List the known impact function names
        # based on their class names - not their titles
        message = (
            'Available impact functions are: %s' %
            str(admissible_plugins.keys()))

        if_names = [
            'Flood Evacuation Function Vector Hazard',
            'Earthquake Building Impact Function',
            'PAG Fatality Function',
            'Flood Evacuation Function',
            'Flood Vector Building Impact Function',
            'Flood Raster Building Impact Function',
            'ITB Fatality Function',
            'Volcano Building Impact',
            'Volcano Polygon Hazard Population',
            ]

        for if_name in if_names:
            self.assertIn(if_name, admissible_plugins, message)

        # This one should get 1 earthquake building impact functions
        dict1 = dict(
            category='hazard',
            subcategory='earthquake',
            layertype='raster',
            unit='MMI')

        dict2 = dict(
            category='exposure',
            subcategory='structure',
            layertype='vector',
            datatype='itb')

        admissible_plugins = get_admissible_plugins([dict1, dict2])
        message = (
            'Expected: len(admissible_plugins) >= 1, Got: '
            'len(admissible_plugins) is %i' % len(admissible_plugins))
        # Depending on other tests there could be more
        self.assertTrue(len(admissible_plugins) >= 1, message)
        self.assertIn(
            'Earthquake Building Impact Function', admissible_plugins)

        # This one should get 1 flood population impact functions
        dict1 = dict(
            category='hazard',
            subcategory='flood',
            layertype='raster',
            unit='m')
        dict2 = dict(
            category='exposure',
            subcategory='population',
            layertype='raster')

        admissible_plugins = get_admissible_plugins([dict1, dict2])
        # Depending on other tests there could be more
        self.assertTrue(len(admissible_plugins) >= 1)
        # Try to get general inundation population impact function
        f_name = 'Flood Evacuation Function'
        self.assertIn(f_name, admissible_plugins)

        admissible_plugins = get_admissible_plugins(dict1)
        self.assertTrue(len(admissible_plugins) >= 1)
        self.assertIn(f_name, admissible_plugins)

        dict1 = dict(
            category='hazard',
            subcategory='flood',
            layertype='raster')
        dict2 = dict(
            category='exposure',
            subcategory='structure',
            layertype='vector')

        admissible_plugins = get_admissible_plugins([dict1, dict2])
        f_name = 'Flood Raster Building Impact Function'
        message = 'Expected name "%s" in admissible_plugins: %s' % (
            f_name, admissible_plugins)
        self.assertIn(f_name, admissible_plugins, message)

        # Get requirements from expected function
        all_plugins = get_admissible_plugins()
        self.assertEqual(admissible_plugins[f_name], all_plugins[f_name])

        requirelines = requirements_collect(admissible_plugins[f_name])
        for i, D in enumerate([dict1, dict2]):
            for key in D:
                message = 'Key %s was not found in %s' % (key, requirelines[i])
                self.assertIn(key, requirelines[i], message)

                message = (
                    'Val %s was not found in %s' % (D[key], requirelines[i]))
                self.assertIn(D[key], requirelines[i], message)
示例#12
0
    def test_filtering_of_impact_functions(self):
        """Impact functions are filtered correctly
        """

        # Check empty call returns all
        P = get_admissible_plugins([])

        # List the known impact function names
        # based on their class names - not their titles
        msg = 'Available impact functions are: %s' % str(P.keys())
        #print msg
        assert 'Flood Evacuation Function Vector Hazard' in P, msg
        assert 'I T B Earthquake Building Damage Function' in P, msg
        assert 'Earthquake Building Impact Function' in P, msg
        assert 'P A G Fatality Function' in P, msg
        assert 'Flood Evacuation Function' in P, msg
        assert 'Flood Building Impact Function' in P, msg
        assert 'I T B Fatality Function' in P, msg
        assert 'Volcano Building Impact' in P, msg
        assert 'Volcano Polygon Hazard Population' in P, msg

        # This one should get 2 earthquake building impact functions
        D1 = {'category': 'hazard', 'subcategory': 'earthquake', 'unit': 'MMI'}
        D2 = {
            'category': 'exposure',
            'datatype': 'itb',
            'subcategory': 'structure'
        }

        # Add layertype
        D1['layertype'] = 'raster'
        D2['layertype'] = 'vector'
        P = get_admissible_plugins([D1, D2])
        msg = 'Expected: len(P) >= 2, Got: len(P) is %i' % len(P)
        assert len(P) >= 1, msg  # Depending on other tests there could be more
        assert 'Earthquake Building Impact Function' in P

        # This one should get 3 flood population impact functions
        D1 = {'category': 'hazard', 'subcategory': 'flood', 'unit': 'm'}
        D2 = {'category': 'exposure', 'subcategory': 'population'}

        # Add layertype
        D1['layertype'] = 'raster'
        D2['layertype'] = 'raster'
        P = get_admissible_plugins([D1, D2])
        assert len(P) >= 1  # Depending on other tests there could be more
        #assert 'W B Flood Evacuation Function' in P

        # Try form where only one dictionary is passed
        # This one gets all the flood related impact functions

        # Try to get general inundation building impact function
        f_name = 'Flood Building Impact Function'

        P = get_admissible_plugins(D1)
        assert len(P) >= 2
        #assert 'W B Flood Evacuation Function' in P
        assert f_name in P
        #assert 'Flood Road Impact Function' in P

        D1 = {'category': 'hazard', 'subcategory': 'tsunami'}
        D2 = {'category': 'exposure', 'subcategory': 'structure'}

        # Add layertype
        #D1['layertype'] = 'raster'  # Not required for flood building impact
        D2['layertype'] = 'vector'
        P = get_admissible_plugins([D1, D2])

        msg = 'Expected name "%s" in P: %s' % (f_name, P)
        assert f_name in P, msg

        # Get requirements from expected function
        P_all = get_admissible_plugins()
        assert P[f_name] == P_all[f_name]

        requirelines = requirements_collect(P[f_name])
        for i, D in enumerate([D1, D2]):
            for key in D:
                msg = 'Key %s was not found in %s' % (key, requirelines[i])
                assert key in requirelines[i], msg

                msg = 'Val %s was not found in %s' % (D[key], requirelines[i])
                assert D[key] in requirelines[i], msg
示例#13
0
    def test_plugin_compatibility(self):
        """Default plugins perform as expected
        """

        # Upload a raster and a vector data set
        hazard_filename = os.path.join(UNITDATA, 'hazard',
                                       'jakarta_flood_design.tif')
        hazard_layer = save_to_geonode(hazard_filename)
        check_layer(hazard_layer, full=True)

        exposure_filename = os.path.join(UNITDATA, 'exposure',
                                         'buildings_osm_4326.shp')
        exposure_layer = save_to_geonode(exposure_filename)
        check_layer(exposure_layer, full=True)

        # Test
        plugin_list = get_admissible_plugins()
        assert len(plugin_list) > 0

        geoserver = {
            'url': settings.GEOSERVER_BASE_URL + 'ows',
            'name': 'Local Geoserver',
            'version': '1.0.0',
            'id': 0
        }
        metadata = get_metadata(geoserver['url'])

        msg = 'There were no layers in test geoserver'
        assert len(metadata) > 0, msg

        # Characterisation test to preserve the behaviour of
        # get_layer_descriptors. FIXME: I think we should change this to be
        # a dictionary of metadata entries (ticket #126).
        reference = {
            'geonode:buildings_osm_4326': {
                'layertype': 'vector',
                'category': 'exposure',
                'subcategory': 'structure',
                'title': 'buildings_osm_4326'
            },
            'geonode:jakarta_flood_like_2007_with_structural_improvements': {
                'layertype': 'raster',
                'category': 'hazard',
                'subcategory': 'flood',
                'title': 'Jakarta flood like 2007 with structural improvements'
            }
        }
        for name, keywords in reference.items():

            msg = 'Expected layer %s in %s' % (name, metadata.keys())
            assert name in metadata.keys(), msg

            values = metadata[name]['keywords']

            for key in keywords.keys():
                refval = keywords[key]
                val = values[key]
                msg = ('Got value "%s" for key "%s" '
                       'Expected "%s"' % (val, key, refval))
                assert refval == val, msg

        plugins = get_admissible_plugins(keywords=reference.values())

        msg = 'No compatible layers returned'
        assert len(plugins) > 0, msg