Prepares a given :class:`CTENode` `node` for deletion, by executing
            the required deletion semantics (Pharaoh, Grandmother, or Monarchy).

            The `method` argument can be one of the valid
            :const:`DELETE_METHODS` choices. If it is
            :const:`DELETE_METHOD_NONE` or ``None``, then the default delete
            method will be used (as specified from the optional
            :attr:`_cte_node_delete_method`).

            Under the :const:`DELETE_METHOD_GRANDMOTHER` and
            :const:`DELETE_METHOD_MONARCHY` delete semantics, descendant nodes
            may be moved; in this case the optional `position` can be a
            ``callable`` which is invoked prior to each move operation (see
            :meth:`move` for details).

            Furthermore, by default, after each move operation, sub-tree nodes
            which were moved will be saved through a call to :meth:`Model.save`
            unless `save` is ``False``.

            This method delegates move operations to :meth:`move`.

            :param node: the :class:`CTENode` to prepare for deletion.

            :param method: optionally, a delete method to use.

            :param position: optionally, a ``callable`` to invoke prior to each
                move operation.

            :param save: flag indicating whether to save after each move
                operation, ``True`` by default.

def prepare_delete(self, node, method, position=None, save=True):
        """ Prepares a given :class:`CTENode` `node` for deletion, by executing
            the required deletion semantics (Pharaoh, Grandmother, or Monarchy).

            The `method` argument can be one of the valid
            :const:`DELETE_METHODS` choices. If it is
            :const:`DELETE_METHOD_NONE` or ``None``, then the default delete
            method will be used (as specified from the optional
            :attr:`_cte_node_delete_method`).

            Under the :const:`DELETE_METHOD_GRANDMOTHER` and
            :const:`DELETE_METHOD_MONARCHY` delete semantics, descendant nodes
            may be moved; in this case the optional `position` can be a
            ``callable`` which is invoked prior to each move operation (see
            :meth:`move` for details).

            Furthermore, by default, after each move operation, sub-tree nodes
            which were moved will be saved through a call to :meth:`Model.save`
            unless `save` is ``False``.

            This method delegates move operations to :meth:`move`.

            :param node: the :class:`CTENode` to prepare for deletion.

            :param method: optionally, a delete method to use.

            :param position: optionally, a ``callable`` to invoke prior to each
                move operation.

            :param save: flag indicating whether to save after each move
                operation, ``True`` by default.
        """
        # If no delete method preference is specified, use attribute.
        if method is None:
            method = node._cte_node_delete_method
        # If no preference specified, use default.
        if method == self.DELETE_METHOD_NONE:
            method = self.DEFAULT_DELETE_METHOD
        # Delegate to appropriate method.
        getattr(self, "prepare_delete_%s" % method)(node, position, save)