docs: def get_fault_source_nodes(source):
      """
      Returns list of nodes of attributes common to all fault source classes
  
      :param source:
          Fault source as instance of :class:
          `openquake.hazardlib.source.simple_fault.SimpleFaultSource` or :class:
          `openquake.hazardlib.source.complex_fault.ComplexFaultSource`
      :returns:
          List of instances of :class:`openquake.baselib.node.Node`
      """
      source_nodes = []
      #  parse msr
      source_nodes.append(
          Node(
              "magScaleRel",
              text=source.magnitude_scaling_relationship.__class__.__name__))
      # Parse aspect ratio
      source_nodes.append(
          Node("ruptAspectRatio", text=source.rupture_aspect_ratio))
      # Parse MFD
      source_nodes.append(obj_to_node(source.mfd))
      # Parse Rake
      source_nodes.append(Node("rake", text=source.rake))
      if len(getattr(source, 'hypo_list', [])):
          source_nodes.append(build_hypo_list_node(source.hypo_list))
      if len(getattr(source, 'slip_list', [])):
          source_nodes.append(build_slip_list_node(source.slip_list))
      return source_nodes