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
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 _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
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
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