code: def update_metadata(self, key: str, msg: MaildirMessage) -> None:
          
          subpath = self._lookup(key)
          subdir, name = os.path.split(subpath)
          new_subdir = msg.get_subdir()
          new_name = key + self.colon + msg.get_info()
          if subdir != new_subdir:
              raise ValueError('Message subdir may not be updated')
          elif name != new_name:
              new_subpath = os.path.join(msg.get_subdir(), new_name)
              old_path = os.path.join(self._path, subpath)
              new_path = os.path.join(self._path, new_subpath)
              os.rename(old_path, new_path)
              self._toc[key] = new_subpath
docs: Uses :func:`os.rename` to atomically update the message filename
          based on :meth:`~mailbox.MaildirMessage.get_info`.