@classmethod
  @gen.coroutine
  def QueryIfVisible(cls, client, user_id, episode_id, must_exist=True, consistent_read=False):
    episode = yield gen.Task(Episode.Query,
                             client,
                             episode_id,
                             None,
                             must_exist=False,
                             consistent_read=consistent_read)

    if episode is None:
      if must_exist == True:
        raise InvalidRequestError('Episode "%s" does not exist.' % episode_id)
    else:
      follower = yield gen.Task(Follower.Query,
                                client,
                                user_id,
                                episode.viewpoint_id,
                                col_names=None,
                                must_exist=False)
      if follower is None or not follower.CanViewContent():
        raise gen.Return(None)

    raise gen.Return(episode)
Test fallbacks for __typeof with single value virtual field
dataset/ETHPy150Open viewfinderco/viewfinder/backend/db/episode.py/Episode.QueryIfVisible--crossover with--dataset/ETHPy150Open sahana/eden/modules/unit_tests/s3/s3hierarchy.py/S3TypeOfTests.testVirtualFieldSingle