code: def InterpolatePath(path, knowledge_base, users=None, path_args=None, depth=0):
    
  
    sys_formatters = {
        # TODO(user): Collect this during discovery from the registry.
        # HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\
        # Value: SystemRoot
        "systemroot": "c:\\Windows"
    }
  
    # Override any system formatters with path_args.
    if path_args:
      sys_formatters.update(path_args)
  
    if users:
      results = []
      for user in users:
        # Extract and interpolate user specific formatters.
        user = GetUserInfo(knowledge_base, user)
        if user:
          formatters = dict((x.name, y) for x, y in user.ListSetFields())
          formatters.update(sys_formatters)
          try:
            results.append(path.format(**formatters))
          except KeyError:
            pass  # We may be missing values for some users.
      return results
    else:
      try:
        path = path.format(**sys_formatters)
      except KeyError:
        logging.warning("Failed path interpolation on %s", path)
        return ""
      if "{" in path and depth < 10:
        path = InterpolatePath(
            path,
            knowledge_base=knowledge_base,
            users=users,
            path_args=path_args,
            depth=depth + 1)
      return path
docs: Take a string as a path on a client and interpolate with client data.
  
    Args:
      path: A single string/unicode to be interpolated.
      knowledge_base: An rdf_client.KnowledgeBase object.
      users: A list of string usernames, or None.
      path_args: A dict of additional args to use in interpolation. These take
        precedence over any system provided variables.
      depth: A counter for recursion depth.
  
    Returns:
      A single string if users is None, otherwise a list of strings.