@classmethod
    def get_private_at_least_viewable(cls, user_id):
        return ExpSummaryModel.query().filter(
            ExpSummaryModel.status == feconf.ACTIVITY_STATUS_PRIVATE
        ).filter(
            ndb.OR(ExpSummaryModel.owner_ids == user_id,
                   ExpSummaryModel.editor_ids == user_id,
                   ExpSummaryModel.viewer_ids == user_id)
        ).filter(
            ExpSummaryModel.deleted == False  # pylint: disable=singleton-comparison
        ).fetch(feconf.DEFAULT_QUERY_LIMIT)
Returns an iterable with private exp summaries that are at least
dataset/ETHPy150Open oppia/oppia/core/storage/exploration/gae_models.py/ExpSummaryModel.get_private_at_least_viewable