code: def get_compatible_canvas_layers(self, category):
          
  
          # Collect compatible layers
          layers = []
          for layer in self.iface.mapCanvas().layers():
              try:
                  keywords = self.keyword_io.read_keywords(layer)
                  if 'layer_purpose' not in keywords:
                      keywords = None
              except (HashNotFoundError,
                      OperationalError,
                      NoKeywordsFoundError,
                      KeywordNotFoundError,
                      InvalidParameterError,
                      UnsupportedProviderError):
                  keywords = None
  
              if self.is_layer_compatible(layer, category, keywords):
                  layers += [
                      {'id': layer.id(),
                       'name': layer.name(),
                       'keywords': keywords}]
  
          # Move layers without keywords to the end
          l1 = [l for l in layers if l['keywords']]
          l2 = [l for l in layers if not l['keywords']]
          layers = l1 + l2
  
          return layers
docs: Collect layers from map canvas, compatible for the given category
             and selected impact function
  
          .. note:: Returns layers with keywords and layermode matching
             the category and compatible with the selected impact function.
             Also returns layers without keywords with layermode
             compatible with the selected impact function.
  
          :param category: The category to filter for.
          :type category: string
  
          :returns: Metadata of found layers.
          :rtype: list of dicts