def put(self, path, value, timeout=None, event_timeout=None):
        """"Puts a value to a path and returns when it completes

        Args:
            path (list): The path to put to
            value (object): The value to set
            timeout (float): time in seconds to wait for responses, wait forever
                if None
            event_timeout: maximum time in seconds to wait between each response
                event, wait forever if None

        Returns:
            The value after the put completes
        """
        future = self.put_async(path, value)
        self.wait_all_futures(
            future, timeout=timeout, event_timeout=event_timeout)
        return future.result()
Puts a value to a path and returns when it completes

        Args:
            path (list): The path to put to
            value (object): The value to set
            timeout (float): time in seconds to wait for responses, wait forever
                if None
            event_timeout: maximum time in seconds to wait between each response
                event, wait forever if None

        Returns:
            The value after the put completes