'Called just before starting to move this object to
destination.
Args:
destination (Object): The object we are moving to
Returns:
shouldmove (bool): If we should move or not.
Notes:
If this method returns False/None, the move is cancelled
before it is even started.'

def at_before_move(self, destination):

    origin = self.location
    Room = DefaultRoom
    if (isinstance(origin, Room) and isinstance(destination, Room)):
        can = self.callbacks.call('can_move', self, origin, destination)
        if can:
            can = origin.callbacks.call('can_move', self, origin)
            if can:
                for present in [o for o in origin.contents if (isinstance(o, DefaultCharacter) and (o is not self))]:
                    can = present.callbacks.call('can_part', present, self)
                    if (not can):
                        break
        if (can is None):
            return True
        return can
    return True
