def test_copy_layer_keywords(self): """Test for copy_layer_keywords.""" keywords = {'url': QUrl('inasafe.org'), 'date': datetime(1990, 7, 13)} copy_keywords = copy_layer_keywords(keywords) self.assertEqual(keywords['url'].toString(), copy_keywords['url']) self.assertEqual(keywords['date'].date().isoformat(), copy_keywords['date']) # We change only the copy. copy_keywords['url'] = 'my.website.org' self.assertEqual(copy_keywords['url'], 'my.website.org') self.assertEqual(keywords['url'].toString(), 'inasafe.org') # We make keywords using a variable as a key key = 'url' keywords = {key: QUrl('inasafe.org'), 'date': datetime(1990, 7, 13)} copy_keywords = copy_layer_keywords(keywords) self.assertEqual(keywords[key].toString(), copy_keywords[key]) self.assertEqual(keywords['date'].date().isoformat(), copy_keywords['date']) # Using the key, we change the value only in the copy copy_keywords[key] = 'my.website.org' self.assertEqual(copy_keywords[key], 'my.website.org') self.assertEqual(keywords[key].toString(), 'inasafe.org')
def test_copy_layer_keywords(self): """Test for copy_layer_keywords.""" keywords = { 'url': QUrl('inasafe.org'), 'date': datetime(1990, 7, 13) } copy_keywords = copy_layer_keywords(keywords) self.assertEqual(keywords['url'].toString(), copy_keywords['url']) self.assertEqual( keywords['date'].date().isoformat(), copy_keywords['date']) # We change only the copy. copy_keywords['url'] = 'my.website.org' self.assertEqual(copy_keywords['url'], 'my.website.org') self.assertEqual(keywords['url'].toString(), 'inasafe.org') # We make keywords using a variable as a key key = 'url' keywords = { key: QUrl('inasafe.org'), 'date': datetime(1990, 7, 13) } copy_keywords = copy_layer_keywords(keywords) self.assertEqual(keywords[key].toString(), copy_keywords[key]) self.assertEqual( keywords['date'].date().isoformat(), copy_keywords['date']) # Using the key, we change the value only in the copy copy_keywords[key] = 'my.website.org' self.assertEqual(copy_keywords[key], 'my.website.org') self.assertEqual(keywords[key].toString(), 'inasafe.org')
def clone_layer(layer, keep_selection=True): """Duplicate the layer by taking the same source and copying keywords. :param keep_selection: If we should keep the selection. Default to true. :type keep_selection: bool :param layer: Layer to be duplicated. :type layer: QgsMapLayer :return: The new QgsMapLayer object. :rtype: QgsMapLayer """ if is_vector_layer(layer): new_layer = QgsVectorLayer( layer.source(), layer.name(), layer.providerType()) if keep_selection and layer.selectedFeatureCount() > 0: request = QgsFeatureRequest() request.setFilterFids(layer.selectedFeatureIds()) request.setFlags(QgsFeatureRequest.NoGeometry) iterator = layer.getFeatures(request) new_layer.setSelectedFeatures([k.id() for k in iterator]) else: new_layer = QgsRasterLayer( layer.source(), layer.name(), layer.providerType()) new_layer.keywords = copy_layer_keywords(layer.keywords) return layer
def clone_layer(layer, keep_selection=True): """Duplicate the layer by taking the same source and copying keywords. :param keep_selection: If we should keep the selection. Default to true. :type keep_selection: bool :param layer: Layer to be duplicated. :type layer: QgsMapLayer :return: The new QgsMapLayer object. :rtype: QgsMapLayer """ if is_vector_layer(layer): new_layer = QgsVectorLayer(layer.source(), layer.name(), layer.providerType()) if keep_selection and layer.selectedFeatureCount() > 0: request = QgsFeatureRequest() request.setFilterFids(layer.selectedFeaturesIds()) request.setFlags(QgsFeatureRequest.NoGeometry) iterator = layer.getFeatures(request) new_layer.setSelectedFeatures([k.id() for k in iterator]) else: new_layer = QgsRasterLayer(layer.source(), layer.name(), layer.providerType()) new_layer.keywords = copy_layer_keywords(layer.keywords) return layer
def test_copy_layer_keywords(self): """Test for copy_layer_keywords.""" keywords = {'url': QUrl('inasafe.org'), 'date': datetime(1990, 7, 13)} copy_keywords = copy_layer_keywords(keywords) self.assertEqual(keywords['url'].toString(), copy_keywords['url']) self.assertEqual(keywords['date'].date().isoformat(), copy_keywords['date'])
def test_copy_layer_keywords(self): """Test for copy_layer_keywords.""" keywords = { 'url': QUrl('inasafe.org'), 'date': datetime(1990, 7, 13) } copy_keywords = copy_layer_keywords(keywords) self.assertEqual(keywords['url'].toString(), copy_keywords['url']) self.assertEqual( keywords['date'].date().isoformat(), copy_keywords['date'])
def prepare_vector_layer(layer): """This function will prepare the layer to be used in InaSAFE : * Make a local copy of the layer. * Make sure that we have an InaSAFE ID column. * Rename fields according to our definitions. * Remove fields which are not used. :param layer: The layer to prepare. :type layer: QgsVectorLayer :return: Cleaned memory layer. :rtype: QgsVectorLayer .. versionadded:: 4.0 """ output_layer_name = prepare_vector_steps['output_layer_name'] output_layer_name = output_layer_name % layer.keywords['layer_purpose'] if not layer.keywords.get('inasafe_fields'): msg = 'inasafe_fields is missing in keywords from %s' % layer.name() raise InvalidKeywordsForProcessingAlgorithm(msg) cleaned = create_memory_layer(output_layer_name, layer.geometryType(), layer.crs(), layer.fields()) # We transfer keywords to the output. cleaned.keywords = copy_layer_keywords(layer.keywords) copy_layer(layer, cleaned) _remove_features(cleaned) # After removing rows, let's check if there is still a feature. request = QgsFeatureRequest().setFlags(QgsFeatureRequest.NoGeometry) iterator = cleaned.getFeatures(request) try: next(iterator) except StopIteration: LOGGER.warning( tr('No feature has been found in the {purpose}'.format( purpose=layer.keywords['layer_purpose']))) # Realtime may have no data in the extent when doing a multiexposure # analysis. We still want the IF. I disabled the exception. ET 19/02/18 # raise NoFeaturesInExtentError _add_id_column(cleaned) clean_inasafe_fields(cleaned) if _size_is_needed(cleaned): LOGGER.info( 'We noticed some counts in your exposure layer. Before to update ' 'geometries, we compute the original size for each feature.') run_single_post_processor(cleaned, post_processor_size) if cleaned.keywords['layer_purpose'] == 'exposure': fields = cleaned.keywords['inasafe_fields'] if exposure_type_field['key'] not in fields: _add_default_exposure_class(cleaned) # Check value mapping _check_value_mapping(cleaned) cleaned.keywords['title'] = output_layer_name check_layer(cleaned) return cleaned
def prepare_vector_layer(layer): """This function will prepare the layer to be used in InaSAFE : * Make a local copy of the layer. * Make sure that we have an InaSAFE ID column. * Rename fields according to our definitions. * Remove fields which are not used. :param layer: The layer to prepare. :type layer: QgsVectorLayer :return: Cleaned memory layer. :rtype: QgsVectorLayer .. versionadded:: 4.0 """ output_layer_name = prepare_vector_steps['output_layer_name'] output_layer_name = output_layer_name % layer.keywords['layer_purpose'] if not layer.keywords.get('inasafe_fields'): msg = 'inasafe_fields is missing in keywords from %s' % layer.name() raise InvalidKeywordsForProcessingAlgorithm(msg) cleaned = create_memory_layer( output_layer_name, layer.geometryType(), layer.crs(), layer.fields()) # We transfer keywords to the output. cleaned.keywords = copy_layer_keywords(layer.keywords) copy_layer(layer, cleaned) _remove_features(cleaned) # After removing rows, let's check if there is still a feature. request = QgsFeatureRequest().setFlags(QgsFeatureRequest.NoGeometry) iterator = cleaned.getFeatures(request) try: next(iterator) except StopIteration: LOGGER.warning( tr('No feature has been found in the {purpose}' .format(purpose=layer.keywords['layer_purpose']))) # Realtime may have no data in the extent when doing a multiexposure # analysis. We still want the IF. I disabled the exception. ET 19/02/18 # raise NoFeaturesInExtentError _add_id_column(cleaned) clean_inasafe_fields(cleaned) if _size_is_needed(cleaned): LOGGER.info( 'We noticed some counts in your exposure layer. Before to update ' 'geometries, we compute the original size for each feature.') run_single_post_processor(cleaned, post_processor_size) if cleaned.keywords['layer_purpose'] == 'exposure': fields = cleaned.keywords['inasafe_fields'] if exposure_type_field['key'] not in fields: _add_default_exposure_class(cleaned) # Check value mapping _check_value_mapping(cleaned) cleaned.keywords['title'] = output_layer_name check_layer(cleaned) return cleaned