code: def DataRefreshRequired(self, path=None, last=None):
      
  
      # If we didn't get given a last attribute, use the path to get one from the
      # object.
      if last is None:
        if path is None:
          # If we didn't get a path either, we can't do anything.
          raise type_info.TypeValueError("Either 'path' or 'last' must"
                                         " be supplied as an argument.")
  
        fd = aff4.FACTORY.Open(self.root.Add(path), token=self.token)
        # We really care about the last time the stat was updated, so we use
        # this instead of the LAST attribute, which is the last time anything
        # was updated about the object.
        stat_obj = fd.Get(fd.Schema.STAT)
        if stat_obj:
          last = stat_obj.age
        else:
          last = rdfvalue.RDFDatetime(0)
  
      # If the object doesn't even have a LAST attribute by this point,
      # we say it hasn't been accessed within the cache expiry time.
      if last is None:
        return True
      last = last.AsDatetime()
  
      # Remember to use UTC time, since that's what the datastore uses.
      return datetime.datetime.utcnow() - last > self.max_age_before_refresh
docs: True if we need to update this path from the client.
  
      Args:
        path: The path relative to the root to check freshness of.
        last: An aff4:last attribute to check freshness of.
  
        At least one of path or last must be supplied.
  
      Returns:
        True if the path hasn't been updated in the last
        self.max_age_before_refresh seconds, else False.
  
      Raises:
        type_info.TypeValueError: If no arguments are supplied.