code: def GetCloudPath(self, resource_id, cache, database):
      
      cloud_path = cache.GetResults('cloud_path')
      if not cloud_path:
        results = database.Query(self.CLOUD_PATH_CACHE_QUERY)
  
        cache.CacheQueryResults(
            results, 'cloud_path', 'resource_id', ('filename', 'parent'))
        cloud_path = cache.GetResults('cloud_path')
  
      if resource_id == 'folder:root':
        return '/'
  
      paths = []
      parent_path, parent_id = cloud_path.get(resource_id, ['', ''])
      while parent_path:
        if parent_path == 'folder:root':
          break
        paths.append(parent_path)
        parent_path, parent_id = cloud_path.get(parent_id, ['', ''])
  
      if not paths:
        return '/'
  
      # Paths are built top level to root so we need to reverse the list to
      # represent them in the traditional order.
      paths.reverse()
      return '/{0:s}/'.format('/'.join(paths))
docs: Return cloud path given a resource id.
  
      Args:
        resource_id (str): resource identifier for the file.
        cache (SQLiteCache): cache.
        database (SQLiteDatabase): database.
  
      Returns:
        str: full path to the resource value.