code: def create_valid_aggregation(layer):
      
      cleaned = create_memory_layer(
          'aggregation', layer.geometryType(), layer.crs(), layer.fields())
  
      # We transfer keywords to the output.
      cleaned.keywords = layer.keywords
  
      try:
          use_selected_only = layer.use_selected_features_only
      except AttributeError:
          use_selected_only = False
  
      cleaned.use_selected_features_only = use_selected_only
  
      copy_layer(layer, cleaned)
      return cleaned
docs: Create a local copy of the aggregation layer and try to make it valid.
  
      We need to make the layer valid if we can. We got some issues with
      DKI Jakarta dataset : Districts and Subdistricts layers.
      See issue : https://github.com/inasafe/inasafe/issues/3713
  
      :param layer: The aggregation layer.
      :type layer: QgsVectorLayer
  
      :return: The new aggregation layer in memory.
      :rtype: QgsVectorLayer