Пример #1
0
  def _MakeViewpointDict(followed):
    """Create a viewpoint dict from the followed object plus its
    referenced viewpoint object.
    """
    viewpoint = validator.GetModelObject(Viewpoint, followed.viewpoint_id)
    follower = validator.GetModelObject(Follower, DBKey(followed.user_id, followed.viewpoint_id))
    metadata_dict = viewpoint.MakeMetadataDict(follower)
    if follower.CanViewContent() and 'cover_photo' in metadata_dict:
      photo_dict = metadata_dict['cover_photo']
      obj_store = ObjectStore.GetInstance(ObjectStore.PHOTO)
      _AddPhotoUrls(obj_store, photo_dict)

    return metadata_dict
Пример #2
0
def _CreateExpectedPhotos(validator,
                          user_id,
                          device_id,
                          episode_id,
                          limit=None,
                          start_key=None):
    """Return a set of photo dicts that contain all the photo metadata for
  photos in the episode with id "episode_id".
  """
    photo_dicts = []
    posts = validator.QueryModelObjects(Post,
                                        episode_id,
                                        limit=limit,
                                        start_key=start_key)

    for post in posts:
        post_dict = post._asdict()
        photo_dict = validator.GetModelObject(Photo, post.photo_id)._asdict()
        photo_dict.pop('share_seq', None)
        photo_dict.pop('client_data', None)

        # Do not return access URLs for posts which have been removed.
        if not post.IsRemoved():
            obj_store = ObjectStore.GetInstance(ObjectStore.PHOTO)
            _AddPhotoUrls(obj_store, photo_dict)

        asset_keys = set()
        user_photo = validator.GetModelObject(UserPhoto,
                                              DBKey(user_id, post.photo_id),
                                              must_exist=False)
        if user_photo is not None and user_photo.asset_keys:
            asset_keys.update(user_photo.asset_keys)
        if asset_keys:
            photo_dict['asset_keys'] = list(asset_keys)

        photo_dicts.append(photo_dict)

        post_id = Post.ConstructPostId(episode_id, post.photo_id)
        user_post = validator.GetModelObject(UserPost,
                                             DBKey(user_id, post_id),
                                             must_exist=False)
        labels = post.labels.combine()
        if user_post is not None:
            # Union together post labels and user_post labels.
            labels = labels.union(user_post.labels.combine())
        if len(labels) > 0:
            photo_dict['labels'] = list(labels)

    last_key = posts[-1].photo_id if len(posts) > 0 else None

    return (photo_dicts, last_key)
Пример #3
0
    def _MakeViewpointDict(followed):
        """Create a viewpoint dict from the followed object plus its
    referenced viewpoint object.
    """
        viewpoint = validator.GetModelObject(Viewpoint, followed.viewpoint_id)
        follower = validator.GetModelObject(
            Follower, DBKey(followed.user_id, followed.viewpoint_id))
        metadata_dict = viewpoint.MakeMetadataDict(follower)
        if follower.CanViewContent() and 'cover_photo' in metadata_dict:
            photo_dict = metadata_dict['cover_photo']
            obj_store = ObjectStore.GetInstance(ObjectStore.PHOTO)
            _AddPhotoUrls(obj_store, photo_dict)

        return metadata_dict
Пример #4
0
def _CreateExpectedPhotos(validator, user_id, device_id, episode_id, limit=None, start_key=None):
    """Return a set of photo dicts that contain all the photo metadata for
  photos in the episode with id "episode_id".
  """
    photo_dicts = []
    posts = validator.QueryModelObjects(Post, episode_id, limit=limit, start_key=start_key)

    for post in posts:
        post_dict = post._asdict()
        photo_dict = validator.GetModelObject(Photo, post.photo_id)._asdict()
        photo_dict.pop("share_seq", None)
        photo_dict.pop("client_data", None)

        # Do not return access URLs for posts which have been removed.
        if not post.IsRemoved():
            obj_store = ObjectStore.GetInstance(ObjectStore.PHOTO)
            _AddPhotoUrls(obj_store, photo_dict)

        asset_keys = set()
        user_photo = validator.GetModelObject(UserPhoto, DBKey(user_id, post.photo_id), must_exist=False)
        if user_photo is not None and user_photo.asset_keys:
            asset_keys.update(user_photo.asset_keys)
        if asset_keys:
            photo_dict["asset_keys"] = list(asset_keys)

        photo_dicts.append(photo_dict)

        post_id = Post.ConstructPostId(episode_id, post.photo_id)
        user_post = validator.GetModelObject(UserPost, DBKey(user_id, post_id), must_exist=False)
        labels = post.labels.combine()
        if user_post is not None:
            # Union together post labels and user_post labels.
            labels = labels.union(user_post.labels.combine())
        if len(labels) > 0:
            photo_dict["labels"] = list(labels)

    last_key = posts[-1].photo_id if len(posts) > 0 else None

    return (photo_dicts, last_key)
def _TestQueryViewpoints(tester, user_cookie, request_dict):
  """Called by the ServiceTester in order to test query_viewpoints
  service API call.
  """
  validator = tester.validator
  cookie_dict = tester.DecodeUserCookie(user_cookie)
  user_id = cookie_dict.get('user_id', None)
  device_id = cookie_dict.get('device_id', None)
  cookie_viewpoint_id = cookie_dict.get('viewpoint_id', None)

  # Send query_viewpoints request.
  actual_dict = tester.SendRequest('query_viewpoints', user_cookie, request_dict)

  limit = request_dict.get('limit', None)

  expected_dict = {'viewpoints': []}
  for request_vp in request_dict['viewpoints']:
    viewpoint_id = request_vp['viewpoint_id']

    expected_vp = validator.GetModelObject(Viewpoint, viewpoint_id, must_exist=False)
    expected_foll = validator.GetModelObject(Follower, DBKey(user_id, viewpoint_id), must_exist=False)

    # Skip any viewpoints which the user does not follow.
    if expected_foll is not None:
      expected_vp_dict = {'viewpoint_id': viewpoint_id}
      if request_vp.get('get_attributes', False):
        expected_vp_dict.update(expected_vp.MakeMetadataDict(expected_foll))
        if 'cover_photo' in expected_vp_dict:
          photo_dict = expected_vp_dict['cover_photo']
          obj_store = ObjectStore.GetInstance(ObjectStore.PHOTO)
          _AddPhotoUrls(obj_store, photo_dict)

      if not expected_foll.IsRemoved() and request_vp.get('get_followers', False):
        def _TestFollower(foll):
          return foll.viewpoint_id == viewpoint_id and foll.user_id > int(request_vp.get('follower_start_key', 0))

        followers = validator.QueryModelObjects(Follower, predicate=_TestFollower, limit=limit)
        expected_vp_dict['followers'] = [foll.MakeFriendMetadataDict() for foll in followers]

        if len(followers) > 0:
          expected_vp_dict['follower_last_key'] = '%015d' % followers[-1].user_id

      # If follower can't view viewpoint content, then nothing beyond viewpoint metadata will be returned.
      # The follower can't view viewpoint content if there is a non-matching viewpoint in the cookie.
      is_cookie_viewpoint = cookie_viewpoint_id is None or cookie_viewpoint_id == viewpoint_id
      can_view_content = is_cookie_viewpoint or expected_vp.IsSystem()
      if expected_foll.CanViewContent() and can_view_content:
        if request_vp.get('get_activities', False):
          def _TestActivity(act):
            return act.viewpoint_id == viewpoint_id and act.activity_id > request_vp.get('activity_start_key', '')

          activities = validator.QueryModelObjects(Activity, predicate=_TestActivity, limit=limit)
          expected_vp_dict['activities'] = [act.MakeMetadataDict() for act in activities]

          if len(activities) > 0:
            expected_vp_dict['activity_last_key'] = activities[-1].activity_id

        if request_vp.get('get_episodes', False):
          def _TestEpisode(ep):
            return ep.viewpoint_id == viewpoint_id and ep.episode_id > request_vp.get('episode_start_key', '')

          episodes = validator.QueryModelObjects(Episode, predicate=_TestEpisode, limit=limit)
          expected_vp_dict['episodes'] = [ep._asdict() for ep in episodes]

          if len(episodes) > 0:
            expected_vp_dict['episode_last_key'] = episodes[-1].episode_id

        if request_vp.get('get_comments', False):
          def _TestComment(cm):
            return cm.viewpoint_id == viewpoint_id and cm.comment_id > request_vp.get('comment_start_key', '')

          comments = validator.QueryModelObjects(Comment, predicate=_TestComment, limit=limit)
          expected_vp_dict['comments'] = [cm._asdict() for cm in comments]

          if len(comments) > 0:
            expected_vp_dict['comment_last_key'] = comments[-1].comment_id

      expected_dict['viewpoints'].append(expected_vp_dict)

  # Validate response dict.
  tester._CompareResponseDicts('query_viewpoints', user_id, request_dict, expected_dict, actual_dict)
  return actual_dict
Пример #6
0
def _TestQueryViewpoints(tester, user_cookie, request_dict):
    """Called by the ServiceTester in order to test query_viewpoints
  service API call.
  """
    validator = tester.validator
    cookie_dict = tester.DecodeUserCookie(user_cookie)
    user_id = cookie_dict.get('user_id', None)
    device_id = cookie_dict.get('device_id', None)
    cookie_viewpoint_id = cookie_dict.get('viewpoint_id', None)

    # Send query_viewpoints request.
    actual_dict = tester.SendRequest('query_viewpoints', user_cookie,
                                     request_dict)

    limit = request_dict.get('limit', None)

    expected_dict = {'viewpoints': []}
    for request_vp in request_dict['viewpoints']:
        viewpoint_id = request_vp['viewpoint_id']

        expected_vp = validator.GetModelObject(Viewpoint,
                                               viewpoint_id,
                                               must_exist=False)
        expected_foll = validator.GetModelObject(Follower,
                                                 DBKey(user_id, viewpoint_id),
                                                 must_exist=False)

        # Skip any viewpoints which the user does not follow.
        if expected_foll is not None:
            expected_vp_dict = {'viewpoint_id': viewpoint_id}
            if request_vp.get('get_attributes', False):
                expected_vp_dict.update(
                    expected_vp.MakeMetadataDict(expected_foll))
                if 'cover_photo' in expected_vp_dict:
                    photo_dict = expected_vp_dict['cover_photo']
                    obj_store = ObjectStore.GetInstance(ObjectStore.PHOTO)
                    _AddPhotoUrls(obj_store, photo_dict)

            if not expected_foll.IsRemoved() and request_vp.get(
                    'get_followers', False):

                def _TestFollower(foll):
                    return foll.viewpoint_id == viewpoint_id and foll.user_id > int(
                        request_vp.get('follower_start_key', 0))

                followers = validator.QueryModelObjects(
                    Follower, predicate=_TestFollower, limit=limit)
                expected_vp_dict['followers'] = [
                    foll.MakeFriendMetadataDict() for foll in followers
                ]

                if len(followers) > 0:
                    expected_vp_dict[
                        'follower_last_key'] = '%015d' % followers[-1].user_id

            # If follower can't view viewpoint content, then nothing beyond viewpoint metadata will be returned.
            # The follower can't view viewpoint content if there is a non-matching viewpoint in the cookie.
            is_cookie_viewpoint = cookie_viewpoint_id is None or cookie_viewpoint_id == viewpoint_id
            can_view_content = is_cookie_viewpoint or expected_vp.IsSystem()
            if expected_foll.CanViewContent() and can_view_content:
                if request_vp.get('get_activities', False):

                    def _TestActivity(act):
                        return act.viewpoint_id == viewpoint_id and act.activity_id > request_vp.get(
                            'activity_start_key', '')

                    activities = validator.QueryModelObjects(
                        Activity, predicate=_TestActivity, limit=limit)
                    expected_vp_dict['activities'] = [
                        act.MakeMetadataDict() for act in activities
                    ]

                    if len(activities) > 0:
                        expected_vp_dict['activity_last_key'] = activities[
                            -1].activity_id

                if request_vp.get('get_episodes', False):

                    def _TestEpisode(ep):
                        return ep.viewpoint_id == viewpoint_id and ep.episode_id > request_vp.get(
                            'episode_start_key', '')

                    episodes = validator.QueryModelObjects(
                        Episode, predicate=_TestEpisode, limit=limit)
                    expected_vp_dict['episodes'] = [
                        ep._asdict() for ep in episodes
                    ]

                    if len(episodes) > 0:
                        expected_vp_dict['episode_last_key'] = episodes[
                            -1].episode_id

                if request_vp.get('get_comments', False):

                    def _TestComment(cm):
                        return cm.viewpoint_id == viewpoint_id and cm.comment_id > request_vp.get(
                            'comment_start_key', '')

                    comments = validator.QueryModelObjects(
                        Comment, predicate=_TestComment, limit=limit)
                    expected_vp_dict['comments'] = [
                        cm._asdict() for cm in comments
                    ]

                    if len(comments) > 0:
                        expected_vp_dict['comment_last_key'] = comments[
                            -1].comment_id

            expected_dict['viewpoints'].append(expected_vp_dict)

    # Validate response dict.
    tester._CompareResponseDicts('query_viewpoints', user_id, request_dict,
                                 expected_dict, actual_dict)
    return actual_dict