def test_set_likes_dislikes_ratio_importance(): rule_likes_dislikes_ratio = [{ 'conditions': { 'all': [{ 'name': 'likeability', 'operator': 'less_than', 'value': 0.5, }] }, 'actions': [{ 'name': 'penalize', 'params': { 'penalty': 2 } }] }] video = { 'likes': ['diegote', 'guillote', 'eche'], 'dislikes': ['cosso', 'gonza', 'agus', 'maxi'], 'comments': [ { 'user': '******', 'comment': 'buen vidio', 'timestamp': 'now' }, { 'user': '******', 'comment': 'No me gusta', 'timestamp': 'yesterday' }, ] } rules.set_importance(video, rule_likes_dislikes_ratio) assert 'importance' in video assert video['importance'] == pytest.approx(-2)
def test_set_comments_importance(): rule_comments = [{ 'conditions': { 'all': [{ 'name': 'comments', 'operator': 'greater_than', 'value': 0, }] }, 'actions': [{ 'name': 'multiply_comments', 'params': { 'factor': 0.4 } }] }] video = { 'likes': ['diegote', 'guillote', 'eche'], 'dislikes': ['cosso', 'gonza'], 'comments': [ { 'user': '******', 'comment': 'buen vidio', 'timestamp': 'now' }, { 'user': '******', 'comment': 'No me gusta', 'timestamp': 'yesterday' }, ] } rules.set_importance(video, rule_comments) assert 'importance' in video assert video['importance'] == pytest.approx(0.8)
def test_set_last_videos_importance(): rule_last_week = [{ 'conditions': { 'all': [{ 'name': 'days_since_publication', 'operator': 'less_than', 'value': 7, }] }, 'actions': [{ 'name': 'boost', 'params': { 'bonus': 5 } }] }] new_video = {'upload_date': str(datetime.datetime.now())} old_video = { 'upload_date': str(datetime.datetime.now() - datetime.timedelta(days=10)) } rules.set_importance(new_video, rule_last_week) rules.set_importance(old_video, rule_last_week) assert 'importance' in new_video assert 'importance' in old_video assert new_video['importance'] == pytest.approx(5) assert old_video['importance'] == 0
def _list_videos_of_user(): user_id = request.args.get('user_id') user_requesting_videos_id = g.data['user_id'] logger.debug("The user requesting the videos is:" + user_requesting_videos_id) logger.debug("Requested videos from id:" + user_id) api_list_video_of_user = '******' + user_id response_media_server = get_media_server_request( os.environ.get('MEDIA_SERVER_URL') + api_list_video_of_user) if response_media_server.status_code == HTTP_OK: logger.debug('Response from media server list videos is 200') if user_requesting_videos_id == user_id: logger.debug('User requesting own videos') videos_collection = client[DB]['videos'] status = append_data_to_videos(response_media_server.json(), videos_collection) else: videos_collection = client[DB]['videos'] videos_list = delete_keys_from_videos(response_media_server.json(), KEYS_TO_DELETE) videos_list = append_data_to_videos(videos_list, videos_collection) user_friends = get_user_friends_from_db(user_id, client[DB]['users']) friends_list = [friend['email'] for friend in user_friends] if user_requesting_videos_id in friends_list: logger.debug('Users are friends. Showing all videos') status = videos_list else: logger.debug( 'Users are not friends. Showing public videos only') status = filter_public_videos(videos_list) else: logger.debug('Response from media server is NOT 200') status = [] if len(status) != 0: for video in status: rules.set_importance(video, rules.ruleset) status = sorted(status, key=operator.itemgetter('importance'), reverse=True) return json.dumps(status), response_media_server.status_code
def test_set_likes_importance(): rule_likes = [{ 'conditions': { 'all': [{ 'name': 'likes', 'operator': 'greater_than', 'value': 0, }] }, 'actions': [{ 'name': 'multiply_likes', 'params': { 'factor': 0.2 } }] }] video = {'likes': ['diegote', 'guillote', 'eche']} rules.set_importance(video, rule_likes) assert 'importance' in video assert video['importance'] == pytest.approx(0.6)
def _list_videos(user_id): api_list_videos = '/api/videos/' response_media_server = get_media_server_request( os.environ.get('MEDIA_SERVER_URL') + api_list_videos) if response_media_server.status_code == HTTP_OK: logger.debug('Response from media server list videos is 200') #Recibe lista de videos raw_data = response_media_server.json() users_coll = 'users' videos_coll = 'videos' status = filter_videos_for_specific_user(raw_data, user_id, client[DB][users_coll], client[DB][videos_coll]) for video in status: rules.set_importance(video, rules.ruleset) status = sorted(status, key=operator.itemgetter('importance'), reverse=True) else: logger.debug('Response from media server is NOT 200') status = [] return json.dumps(status), response_media_server.status_code
def test_base_importance(): rule_list = [] video = {} rules.set_importance(video, rule_list) assert 'importance' in video assert video['importance'] == 0