code: def real_pathspec(self):
      
      pathspec = self.Get(self.Schema.PATHSPEC)
  
      stripped_components = []
      parent = self
  
      # TODO(user): this code is potentially slow due to multiple separate
      # aff4.FACTORY.Open() calls. OTOH the loop below is executed very rarely -
      # only when we deal with deep files that got fetched alone and then
      # one of the directories in their path gets updated.
      while not pathspec and len(parent.urn.Split()) > 1:
        # We try to recurse up the tree to get a real pathspec.
        # These directories are created automatically without pathspecs when a
        # deep directory is listed without listing the parents.
        # Note /fs/os or /fs/tsk won't be updateable so we will raise IOError
        # if we try.
        stripped_components.append(parent.urn.Basename())
        pathspec = parent.Get(parent.Schema.PATHSPEC)
        parent = FACTORY.Open(parent.urn.Dirname(), token=self.token)
  
      if pathspec:
        if stripped_components:
          # We stripped pieces of the URL, time to add them back.
          new_path = utils.JoinPath(*reversed(stripped_components[:-1]))
          pathspec.Append(
              rdf_paths.PathSpec(path=new_path, pathtype=pathspec.last.pathtype))
      else:
        raise IOError("Item has no pathspec.")
  
      return pathspec
docs: Returns a pathspec for an aff4 object even if there is none stored.