docs: def put_field(self, path, name, value):
          """
          Creates a field with the specified name an value at path.  If the
          field already exists, it will be overwritten with the new value.
  
          :param path: str or Path instance
          :param name:
          :type name: str
          :param value:
          :type value: str
          """
          if not isinstance(value, str):
              raise ValueError()
          path = make_path(path)
          container = self.get_container(path)
          current = self._values.get(name)
          if current is not None and isinstance(current, ValueTree):
              raise TypeError()
          container._values[name] = value