Creates a callable out of the destination. If it's already callable,
    the destination is returned. Instead, if the object is a string or a
    writable object, it's wrapped in a closure to be used later.

def _make_destination_callable(dest):
    """Creates a callable out of the destination. If it's already callable,
    the destination is returned. Instead, if the object is a string or a
    writable object, it's wrapped in a closure to be used later.
    """
    if callable(dest):
        return dest
    elif hasattr(dest, 'write') or isinstance(dest, string_types):
        return _use_filehandle_to_save(dest)
    else:
        raise TypeError("Destination must be a string, writable or callable object.")