docs: def read(self, required=False):
          """Read Zookeeper state.
  
          Read in the current Zookeeper state for this node. This
          operation should be called prior to other interactions with
          this object.
  
          `required`: boolean indicating if the node existence should be
          required at read time. Normally write will create the node if
          the path is possible. This allows for simplified catching of
          errors.
  
          """
          self._pristine_cache = {}
          self._cache = {}
          try:
              data, stat = yield self._client.get(self._path)
              data = yaml.load(data)
              if data:
                  self._pristine_cache = data
                  self._cache = data.copy()
          except NoNodeException:
              if required:
                  raise StateNotFound(self._path)