code: def _remove_sig(signature, idempotent=False):
      
      try:
          signaturep = next(signature.iterancestors())
      except StopIteration:
          if idempotent:
              return
          raise ValueError("Can't remove the root signature node")
      if signature.tail is not None:
          try:
              signatures = next(signature.itersiblings(preceding=True))
          except StopIteration:
              if signaturep.text is not None:
                  signaturep.text = signaturep.text + signature.tail
              else:
                  signaturep.text = signature.tail
          else:
              if signatures.tail is not None:
                  signatures.tail = signatures.tail + signature.tail
              else:
                  signatures.tail = signature.tail
      signaturep.remove(signature)
docs: Remove the signature node from its parent, keeping any tail element.
      This is needed for eneveloped signatures.
  
      :param signature: Signature to remove from payload
      :type signature: XML ElementTree Element
      :param idempotent:
          If True, don't raise an error if signature is already detached from parent.
      :type idempotent: boolean