code: 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()
docs: 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