def test_youtube_profile_parse(self): result = MediaParser.partial_media_dict_from_url( "https://www.youtube.com/Uberbots1124") self.assertEqual(result['media_type_enum'], MediaType.YOUTUBE_CHANNEL) self.assertEqual(result['is_social'], True) self.assertEqual(result['foreign_key'], 'uberbots1124') self.assertEqual(result['site_name'], MediaType.type_names[MediaType.YOUTUBE_CHANNEL]) self.assertEqual(result['profile_url'], 'https://www.youtube.com/uberbots1124') short_result = MediaParser.partial_media_dict_from_url( "https://www.youtube.com/Uberbots1124") self.assertEqual(short_result['media_type_enum'], MediaType.YOUTUBE_CHANNEL) self.assertEqual(short_result['is_social'], True) self.assertEqual(short_result['foreign_key'], 'uberbots1124') self.assertEqual(short_result['site_name'], MediaType.type_names[MediaType.YOUTUBE_CHANNEL]) self.assertEqual(short_result['profile_url'], 'https://www.youtube.com/uberbots1124') gapps_result = MediaParser.partial_media_dict_from_url( "https://www.youtube.com/c/tnt3102org") self.assertEqual(gapps_result['media_type_enum'], MediaType.YOUTUBE_CHANNEL) self.assertEqual(gapps_result['is_social'], True) self.assertEqual(gapps_result['foreign_key'], 'tnt3102org') self.assertEqual(gapps_result['site_name'], MediaType.type_names[MediaType.YOUTUBE_CHANNEL]) self.assertEqual(gapps_result['profile_url'], 'https://www.youtube.com/tnt3102org')
def test_youtube_parse(self): yt_long = MediaParser.partial_media_dict_from_url("http://www.youtube.com/watch?v=I-IrVbsl_K8") self.assertEqual(yt_long['media_type_enum'], MediaType.YOUTUBE) self.assertEqual(yt_long['foreign_key'], "I-IrVbsl_K8") yt_short = MediaParser.partial_media_dict_from_url("http://youtu.be/I-IrVbsl_K8") self.assertEqual(yt_short['media_type_enum'], MediaType.YOUTUBE) self.assertEqual(yt_short['foreign_key'], "I-IrVbsl_K8")
def test_youtube_parse(self): yt_long = MediaParser.partial_media_dict_from_url("http://www.youtube.com/watch?v=I-IrVbsl_K8") self.assertEqual(yt_long["media_type_enum"], MediaType.YOUTUBE) self.assertEqual(yt_long["foreign_key"], "I-IrVbsl_K8") yt_short = MediaParser.partial_media_dict_from_url("http://youtu.be/I-IrVbsl_K8") self.assertEqual(yt_short["media_type_enum"], MediaType.YOUTUBE) self.assertEqual(yt_short["foreign_key"], "I-IrVbsl_K8")
def test_imgur_parse(self): imgur_img = MediaParser.partial_media_dict_from_url("http://imgur.com/zYqWbBh") self.assertEqual(imgur_img['media_type_enum'], MediaType.IMGUR) self.assertEqual(imgur_img['foreign_key'], "zYqWbBh") imgur_img = MediaParser.partial_media_dict_from_url("http://i.imgur.com/zYqWbBh.png") self.assertEqual(imgur_img['media_type_enum'], MediaType.IMGUR) self.assertEqual(imgur_img['foreign_key'], "zYqWbBh") self.assertEqual(MediaParser.partial_media_dict_from_url("http://imgur.com/r/aww"), None) self.assertEqual(MediaParser.partial_media_dict_from_url("http://imgur.com/a/album"), None)
def test_youtube_parse(self): yt_long = MediaParser.partial_media_dict_from_url("http://www.youtube.com/watch?v=I-IrVbsl_K8") self.assertEqual(yt_long['media_type_enum'], MediaType.YOUTUBE_VIDEO) self.assertEqual(yt_long['foreign_key'], "I-IrVbsl_K8") yt_short = MediaParser.partial_media_dict_from_url("http://youtu.be/I-IrVbsl_K8") self.assertEqual(yt_short['media_type_enum'], MediaType.YOUTUBE_VIDEO) self.assertEqual(yt_short['foreign_key'], "I-IrVbsl_K8") yt_from_playlist = MediaParser.partial_media_dict_from_url("https://www.youtube.com/watch?v=VP992UKFbko&index=1&list=PLZT9pIgNOV6ZE0EgstWeoRWGWT3uoaszm") self.assertEqual(yt_from_playlist['media_type_enum'], MediaType.YOUTUBE_VIDEO) self.assertEqual(yt_from_playlist['foreign_key'], 'VP992UKFbko')
def test_youtube_profile_parse(self): result = MediaParser.partial_media_dict_from_url("https://www.youtube.com/user/Uberbots1124") self.assertEqual(result['media_type_enum'], MediaType.YOUTUBE_CHANNEL) self.assertEqual(result['is_social'], True) self.assertEqual(result['foreign_key'], 'uberbots1124') self.assertEqual(result['site_name'], MediaType.type_names[MediaType.YOUTUBE_CHANNEL]) self.assertEqual(result['profile_url'], 'https://www.youtube.com/user/uberbots1124') short_result = MediaParser.partial_media_dict_from_url("https://www.youtube.com/Uberbots1124") self.assertEqual(short_result['media_type_enum'], MediaType.YOUTUBE_CHANNEL) self.assertEqual(short_result['is_social'], True) self.assertEqual(short_result['foreign_key'], 'uberbots1124') self.assertEqual(short_result['site_name'], MediaType.type_names[MediaType.YOUTUBE_CHANNEL]) self.assertEqual(short_result['profile_url'], 'https://www.youtube.com/user/uberbots1124')
def test_twitch_profile_parse(self): result = MediaParser.partial_media_dict_from_url("https://www.twitch.tv/evolution2626") self.assertEqual(result['media_type_enum'], MediaType.TWITCH_CHANNEL) self.assertEqual(result['is_social'], True) self.assertEqual(result['foreign_key'], 'evolution2626') self.assertEqual(result['site_name'], MediaType.type_names[MediaType.TWITCH_CHANNEL]) self.assertEqual(result['profile_url'], 'https://www.twitch.tv/evolution2626')
def createEventMediaSuggestion(cls, author_account_key, media_url, event_key, private_details_json=None): """Create an Event Media Suggestion. Returns status (success, suggestion_exists, media_exists, bad_url)""" media_dict = MediaParser.partial_media_dict_from_url(media_url) if media_dict is not None: if media_dict['media_type_enum'] != MediaType.YOUTUBE_VIDEO: return 'bad_url', None existing_media = Media.get_by_id(Media.render_key_name(media_dict['media_type_enum'], media_dict['foreign_key'])) if existing_media is None or event_key not in [reference.id() for reference in existing_media.references]: foreign_type = Media.SLUG_NAMES[media_dict['media_type_enum']] suggestion_id = Suggestion.render_media_key_name(event_key[:4], 'event', event_key, foreign_type, media_dict['foreign_key']) suggestion = Suggestion.get_by_id(suggestion_id) if not suggestion or suggestion.review_state != Suggestion.REVIEW_PENDING: media_dict['year'] = event_key[:4] media_dict['reference_type'] = 'event' media_dict['reference_key'] = event_key target_model = 'event_media' if private_details_json is not None: media_dict['private_details_json'] = private_details_json suggestion = Suggestion( id=suggestion_id, author=author_account_key, target_model=target_model, ) suggestion.contents = media_dict suggestion.put() return 'success', suggestion else: return 'suggestion_exists', None else: return 'media_exists', None else: return 'bad_url', None
def test_fb_profile_parse(self): result = MediaParser.partial_media_dict_from_url("http://facebook.com/theuberbots") self.assertEqual(result['media_type_enum'], MediaType.FACEBOOK_PROFILE) self.assertEqual(result['is_social'], True) self.assertEqual(result['foreign_key'], 'theuberbots') self.assertEqual(result['site_name'], MediaType.type_names[MediaType.FACEBOOK_PROFILE]) self.assertEqual(result['profile_url'], 'https://www.facebook.com/theuberbots')
def test_cdphotothread_parse(self): cd = MediaParser.partial_media_dict_from_url("http://www.chiefdelphi.com/media/photos/41999") self.assertEqual(cd['media_type_enum'], MediaType.CD_PHOTO_THREAD) self.assertEqual(cd['foreign_key'], "41999") self.assertTrue(cd['details_json']) details = json.loads(cd['details_json']) self.assertEqual(details['image_partial'], "a88/a880fa0d65c6b49ddb93323bc7d2e901_l.jpg")
def test_github_profile_parse(self): result = MediaParser.partial_media_dict_from_url("https://github.com/frc1124") self.assertEqual(result['media_type_enum'], MediaType.GITHUB_PROFILE) self.assertEqual(result['is_social'], True) self.assertEqual(result['foreign_key'], 'frc1124') self.assertEqual(result['site_name'], MediaType.type_names[MediaType.GITHUB_PROFILE]) self.assertEqual(result['profile_url'], 'https://github.com/frc1124')
def post(self): self._require_admin() media_dict = MediaParser.partial_media_dict_from_url( self.request.get('media_url').strip()) if media_dict is not None: year_str = self.request.get('year') if year_str == '': year = None else: year = int(year_str.strip()) media = Media( id=Media.render_key_name(media_dict['media_type_enum'], media_dict['foreign_key']), foreign_key=media_dict['foreign_key'], media_type_enum=media_dict['media_type_enum'], details_json=media_dict.get('details_json', None), year=year, references=[ Media.create_reference(self.request.get('reference_type'), self.request.get('reference_key')) ], ) MediaManipulator.createOrUpdate(media) self.redirect(self.request.get('originating_url'))
def test_snapchat_profile_parse(self): result = MediaParser.partial_media_dict_from_url("https://www.snapchat.com/add/evolution2626") self.assertEqual(result['media_type_enum'], MediaType.SNAPCHAT_PROFILE) self.assertEqual(result['is_social'], True) self.assertEqual(result['foreign_key'], 'evolution2626') self.assertEqual(result['site_name'], MediaType.type_names[MediaType.SNAPCHAT_PROFILE]) self.assertEqual(result['profile_url'], 'https://www.snapchat.com/add/evolution2626')
def test_twitter_profile_parse(self): result = MediaParser.partial_media_dict_from_url("https://twitter.com/team1124") self.assertEqual(result['media_type_enum'], MediaType.TWITTER_PROFILE) self.assertEqual(result['is_social'], True) self.assertEqual(result['foreign_key'], 'team1124') self.assertEqual(result['site_name'], MediaType.type_names[MediaType.TWITTER_PROFILE]) self.assertEqual(result['profile_url'], 'https://twitter.com/team1124')
def test_cdphotothread_parse(self): cd = MediaParser.partial_media_dict_from_url("https://www.chiefdelphi.com/media/photos/41999") self.assertEqual(cd['media_type_enum'], MediaType.CD_PHOTO_THREAD) self.assertEqual(cd['foreign_key'], "41999") self.assertTrue(cd['details_json']) details = json.loads(cd['details_json']) self.assertEqual(details['image_partial'], "a88/a880fa0d65c6b49ddb93323bc7d2e901_l.jpg")
def test_instagram_profile_parse(self): result = MediaParser.partial_media_dict_from_url("https://www.instagram.com/4hteamneutrino") self.assertEqual(result['media_type_enum'], MediaType.INSTAGRAM_PROFILE) self.assertEqual(result['is_social'], True) self.assertEqual(result['foreign_key'], '4hteamneutrino') self.assertEqual(result['site_name'], MediaType.type_names[MediaType.INSTAGRAM_PROFILE]) self.assertEqual(result['profile_url'], 'https://www.instagram.com/4hteamneutrino')
def post(self): self._require_login() team_key = self.request.get("team_key") year_str = self.request.get("year") success_code = 0 media_dict = MediaParser.partial_media_dict_from_url( self.request.get('media_url').strip()) if media_dict is not None: existing_media = Media.get_by_id( Media.render_key_name(media_dict['media_type_enum'], media_dict['foreign_key'])) if existing_media is None or team_key not in [ reference.id() for reference in existing_media.references ]: media_dict['year'] = int(year_str) media_dict['reference_type'] = 'team' media_dict['reference_key'] = team_key suggestion = Suggestion( author=self.user_bundle.account.key, target_model="media", ) suggestion.contents = media_dict suggestion.put() success_code = 1 self.redirect('/suggest/team/media?team_key=%s&year=%s&success=%s' % (team_key, year_str, success_code))
def test_periscope_profile_parse(self): result = MediaParser.partial_media_dict_from_url("https://www.periscope.tv/evolution2626") self.assertEqual(result['media_type_enum'], MediaType.PERISCOPE_PROFILE) self.assertEqual(result['is_social'], True) self.assertEqual(result['foreign_key'], 'evolution2626') self.assertEqual(result['site_name'], MediaType.type_names[MediaType.PERISCOPE_PROFILE]) self.assertEqual(result['profile_url'], 'https://www.periscope.tv/evolution2626')
def createTeamMediaSuggestion(cls, author_account_key, media_url, team_key, year_str): """Create a Team Media Suggestion. Returns status (success, exists, bad_url)""" media_dict = MediaParser.partial_media_dict_from_url(media_url) if media_dict is not None: existing_media = Media.get_by_id(Media.render_key_name(media_dict['media_type_enum'], media_dict['foreign_key'])) if existing_media is None or team_key not in [reference.id() for reference in existing_media.references]: foreign_type = Media.SLUG_NAMES[media_dict['media_type_enum']] suggestion_id = Suggestion.render_key_name(year_str, 'team', team_key, foreign_type, media_dict['foreign_key']) suggestion = Suggestion.get_by_id(suggestion_id) if not suggestion or suggestion.review_state != Suggestion.REVIEW_PENDING: media_dict['year'] = int(year_str) media_dict['reference_type'] = 'team' media_dict['reference_key'] = team_key suggestion = Suggestion( id=suggestion_id, author=author_account_key, target_model="media", ) suggestion.contents = media_dict suggestion.put() return 'success' else: return 'suggestion_exists' else: return 'media_exists' else: return 'bad_url'
def createTeamMediaSuggestion(cls, author_account_key, media_url, team_key, year_str, private_details_json=None, is_social=False): """Create a Team Media Suggestion. Returns status (success, suggestion_exists, media_exists, bad_url)""" media_dict = MediaParser.partial_media_dict_from_url(media_url) if media_dict is not None: if media_dict.get("is_social", False) != is_social: return 'bad_url', None existing_media = Media.get_by_id( Media.render_key_name(media_dict['media_type_enum'], media_dict['foreign_key'])) if existing_media is None or team_key not in [ reference.id() for reference in existing_media.references ]: foreign_type = Media.SLUG_NAMES[media_dict['media_type_enum']] suggestion_id = Suggestion.render_media_key_name( year_str, 'team', team_key, foreign_type, media_dict['foreign_key']) suggestion = Suggestion.get_by_id(suggestion_id) if not suggestion or suggestion.review_state != Suggestion.REVIEW_PENDING: media_dict['year'] = int(year_str) if year_str else None media_dict['reference_type'] = 'team' media_dict['reference_key'] = team_key if private_details_json is not None: media_dict[ 'private_details_json'] = private_details_json target_model = "media" if media_dict.get("is_social", False): target_model = "social-media" if media_dict.get('media_type', '') in MediaType.robot_types: target_model = "robot" if Event.validate_key_name(team_key): target_model = 'event_media' media_dict['reference_type'] = 'event' suggestion = Suggestion( id=suggestion_id, author=author_account_key, target_model=target_model, ) suggestion.contents = media_dict suggestion.put() return 'success', suggestion else: return 'suggestion_exists', None else: return 'media_exists', None else: return 'bad_url', None
def test_instagram_image(self): result = MediaParser.partial_media_dict_from_url("https://www.instagram.com/p/BUnZiriBYre/") self.assertEqual(result['media_type_enum'], MediaType.INSTAGRAM_IMAGE) self.assertEqual(result['foreign_key'], "BUnZiriBYre") details = json.loads(result['details_json']) self.assertEqual(details['title'], "FRC 195 @ 2017 Battlecry @ WPI") self.assertEqual(details['author_name'], '1stroboticsrocks') self.assertIsNotNone(details.get('thumbnail_url', None))
def test_instagram_image(self): result = MediaParser.partial_media_dict_from_url( "https://www.instagram.com/p/BUnZiriBYre/") self.assertEqual(result['media_type_enum'], MediaType.INSTAGRAM_IMAGE) self.assertEqual(result['foreign_key'], "BUnZiriBYre") details = json.loads(result['details_json']) self.assertEqual(details['title'], "FRC 195 @ 2017 Battlecry @ WPI") self.assertEqual(details['author_name'], '1stroboticsrocks') self.assertIsNotNone(details.get('thumbnail_url', None))
def test_snapchat_profile_parse(self): result = MediaParser.partial_media_dict_from_url( "https://www.snapchat.com/add/evolution2626") self.assertEqual(result['media_type_enum'], MediaType.SNAPCHAT_PROFILE) self.assertEqual(result['is_social'], True) self.assertEqual(result['foreign_key'], 'evolution2626') self.assertEqual(result['site_name'], MediaType.type_names[MediaType.SNAPCHAT_PROFILE]) self.assertEqual(result['profile_url'], 'https://www.snapchat.com/add/evolution2626')
def test_twitch_profile_parse(self): result = MediaParser.partial_media_dict_from_url( "https://www.twitch.tv/evolution2626") self.assertEqual(result['media_type_enum'], MediaType.TWITCH_CHANNEL) self.assertEqual(result['is_social'], True) self.assertEqual(result['foreign_key'], 'evolution2626') self.assertEqual(result['site_name'], MediaType.type_names[MediaType.TWITCH_CHANNEL]) self.assertEqual(result['profile_url'], 'https://www.twitch.tv/evolution2626')
def test_grabcad_link(self): result = MediaParser.partial_media_dict_from_url("https://grabcad.com/library/2016-148-robowranglers-1") self.assertEqual(result['media_type_enum'], MediaType.GRABCAD) self.assertEqual(result['is_social'], False) self.assertEqual(result['foreign_key'], '2016-148-robowranglers-1') details = json.loads(result['details_json']) self.assertEqual(details['model_name'], '2016 | 148 - Robowranglers') self.assertEqual(details['model_description'], 'Renegade') self.assertEqual(details['model_image'], 'https://d2t1xqejof9utc.cloudfront.net/screenshots/pics/96268d5c5e6c1b7fe8892f713813bb40/card.jpg') self.assertEqual(details['model_created'], '2016-09-19T11:52:23Z')
def test_grabcad_link(self): result = MediaParser.partial_media_dict_from_url("https://grabcad.com/library/2016-148-robowranglers-1") self.assertEqual(result['media_type_enum'], MediaType.GRABCAD) self.assertEqual(result['is_social'], False) self.assertEqual(result['foreign_key'], '2016-148-robowranglers-1') details = json.loads(result['details_json']) self.assertEqual(details['model_name'], '2016 | 148 - Robowranglers') self.assertEqual(details['model_description'], 'Renegade') self.assertEqual(details['model_image'], 'https://d2t1xqejof9utc.cloudfront.net/screenshots/pics/bf832651cc688c27a78c224fbd07d9d7/card.jpg') self.assertEqual(details['model_created'], '2016-09-19T11:52:23Z')
def suggest_team_media(self, request): current_user = endpoints.get_current_user() if current_user is None: return BaseResponse(code=401, message="Unauthorized to make suggestions") user_id = PushHelper.user_email_to_id(current_user.email()) # For now, only allow team media suggestions if request.reference_type != "team": # Trying to suggest a media for an invalid model type return BaseResponse(code=400, message="Bad model type") media_dict = MediaParser.partial_media_dict_from_url( request.media_url.strip()) if media_dict is not None: existing_media = Media.get_by_id( Media.render_key_name(media_dict['media_type_enum'], media_dict['foreign_key'])) if existing_media is None \ or request.reference_key not in [reference.id() for reference in existing_media.references]: media_dict['year'] = request.year media_dict['reference_type'] = request.reference_type media_dict['reference_key'] = request.reference_key # Need to split deletehash out into its own private dict. Don't want that to be exposed via API... if request.details_json: incoming_details = json.loads(request.details_json) private_details = None if 'deletehash' in incoming_details: private_details = { 'deletehash': incoming_details.pop('deletehash') } media_dict['private_details_json'] = json.dumps( private_details) if private_details else None media_dict['details_json'] = json.dumps(incoming_details) suggestion = Suggestion(author=ndb.Key(Account, user_id), target_model="media") suggestion.contents = media_dict suggestion.put() return BaseResponse(code=200, message="Suggestion added") else: return BaseResponse(code=304, message="Suggestion already exists") else: return BaseResponse(code=400, message="Bad suggestion url")
def testCreateSuggestion(self): status, _ = SuggestionCreator.createTeamMediaSuggestion( self.account.key, "http://imgur.com/ruRAxDm", "frc1124", "2016") self.assertEqual(status, 'success') # Ensure the Suggestion gets created suggestion_id = Suggestion.render_media_key_name( '2016', 'team', 'frc1124', 'imgur', 'ruRAxDm') suggestion = Suggestion.get_by_id(suggestion_id) expected_dict = MediaParser.partial_media_dict_from_url( "http://imgur.com/ruRAxDm") self.assertIsNotNone(suggestion) self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING) self.assertEqual(suggestion.author, self.account.key) self.assertEqual(suggestion.target_model, 'media') self.assertDictContainsSubset(expected_dict, suggestion.contents)
def test_create_suggestion_banned(self): status, _ = SuggestionCreator.createEventMediaSuggestion( self.account_banned.key, "https://www.youtube.com/watch?v=H-54KMwMKY0", "2016nyny") self.assertEqual(status, 'success') # Ensure the Suggestion gets created suggestion_id = Suggestion.render_media_key_name('2016', 'event', '2016nyny', 'youtube', 'H-54KMwMKY0') suggestion = Suggestion.get_by_id(suggestion_id) expected_dict = MediaParser.partial_media_dict_from_url("https://www.youtube.com/watch?v=H-54KMwMKY0") self.assertIsNotNone(suggestion) self.assertEqual(suggestion.review_state, Suggestion.REVIEW_AUTOREJECTED) self.assertEqual(suggestion.author, self.account_banned.key) self.assertEqual(suggestion.target_model, 'event_media') self.assertDictContainsSubset(expected_dict, suggestion.contents)
def createTeamMediaSuggestion(cls, author_account_key, media_url, team_key, year_str, private_details_json=None, is_social=False, default_preferred=False): """Create a Team Media Suggestion. Returns status (success, suggestion_exists, media_exists, bad_url)""" media_dict = MediaParser.partial_media_dict_from_url(media_url) if media_dict is not None: if media_dict.get("is_social", False) != is_social: return 'bad_url', None existing_media = Media.get_by_id(Media.render_key_name(media_dict['media_type_enum'], media_dict['foreign_key'])) if existing_media is None or team_key not in [reference.id() for reference in existing_media.references]: foreign_type = Media.SLUG_NAMES[media_dict['media_type_enum']] suggestion_id = Suggestion.render_media_key_name(year_str, 'team', team_key, foreign_type, media_dict['foreign_key']) suggestion = Suggestion.get_by_id(suggestion_id) if not suggestion or suggestion.review_state != Suggestion.REVIEW_PENDING: media_dict['year'] = int(year_str) if year_str else None media_dict['reference_type'] = 'team' media_dict['reference_key'] = team_key media_dict['default_preferred'] = default_preferred if private_details_json is not None: media_dict['private_details_json'] = private_details_json target_model = "media" if media_dict.get("is_social", False): target_model = "social-media" if media_dict.get('media_type', '') in MediaType.robot_types: target_model = "robot" if Event.validate_key_name(team_key): target_model = 'event_media' media_dict['reference_type'] = 'event' suggestion = Suggestion( id=suggestion_id, author=author_account_key, target_model=target_model, target_key=team_key, ) suggestion.contents = media_dict suggestion.put() return 'success', suggestion else: return 'suggestion_exists', None else: return 'media_exists', None else: return 'bad_url', None
def testCreateSuggestion(self): status, _ = SuggestionCreator.createEventMediaSuggestion( self.account.key, "https://www.youtube.com/watch?v=H-54KMwMKY0", "2016nyny") self.assertEqual(status, 'success') # Ensure the Suggestion gets created suggestion_id = Suggestion.render_media_key_name( '2016', 'event', '2016nyny', 'youtube', 'H-54KMwMKY0') suggestion = Suggestion.get_by_id(suggestion_id) expected_dict = MediaParser.partial_media_dict_from_url( "https://www.youtube.com/watch?v=H-54KMwMKY0") self.assertIsNotNone(suggestion) self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING) self.assertEqual(suggestion.author, self.account.key) self.assertEqual(suggestion.target_model, 'event_media') self.assertDictContainsSubset(expected_dict, suggestion.contents)
def testCreateSuggestionWithUrlParams(self): status, _ = SuggestionCreator.createTeamMediaSuggestion( self.account.key, "https://www.youtube.com/watch?v=VP992UKFbko", "frc1124", "2016") self.assertEqual(status, 'success') # Ensure the Suggestion gets created suggestion_id = Suggestion.render_media_key_name( '2016', 'team', 'frc1124', 'youtube', 'VP992UKFbko') suggestion = Suggestion.get_by_id(suggestion_id) expected_dict = MediaParser.partial_media_dict_from_url( "https://www.youtube.com/watch?v=VP992UKFbko") self.assertIsNotNone(suggestion) self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING) self.assertEqual(suggestion.author, self.account.key) self.assertEqual(suggestion.target_model, 'media') self.assertDictContainsSubset(expected_dict, suggestion.contents)
def testCreateSuggestion(self): status = SuggestionCreator.createTeamMediaSuggestion( self.account.key, "http://imgur.com/ruRAxDm", "frc1124", "2016") self.assertEqual(status, 'success') # Ensure the Suggestion gets created suggestion_id = Suggestion.render_media_key_name('2016', 'team', 'frc1124', 'imgur', 'ruRAxDm') suggestion = Suggestion.get_by_id(suggestion_id) expected_dict = MediaParser.partial_media_dict_from_url("http://imgur.com/ruRAxDm") self.assertIsNotNone(suggestion) self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING) self.assertEqual(suggestion.author, self.account.key) self.assertEqual(suggestion.target_model, 'media') self.assertDictContainsSubset(expected_dict, suggestion.contents)
def testCreateSuggestionWithUrlParams(self): status = SuggestionCreator.createTeamMediaSuggestion( self.account.key, "https://www.youtube.com/watch?v=VP992UKFbko", "frc1124", "2016") self.assertEqual(status, 'success') # Ensure the Suggestion gets created suggestion_id = Suggestion.render_media_key_name('2016', 'team', 'frc1124', 'youtube', 'VP992UKFbko') suggestion = Suggestion.get_by_id(suggestion_id) expected_dict = MediaParser.partial_media_dict_from_url("https://www.youtube.com/watch?v=VP992UKFbko") self.assertIsNotNone(suggestion) self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING) self.assertEqual(suggestion.author, self.account.key) self.assertEqual(suggestion.target_model, 'media') self.assertDictContainsSubset(expected_dict, suggestion.contents)
def createTeamMediaSuggestion(cls, author_account_key, media_url, team_key, year_str, private_details_json=None): """Create a Team Media Suggestion. Returns status (success, suggestion_exists, media_exists, bad_url)""" media_dict = MediaParser.partial_media_dict_from_url(media_url.strip()) if media_dict is not None: existing_media = Media.get_by_id( Media.render_key_name(media_dict['media_type_enum'], media_dict['foreign_key'])) if existing_media is None or team_key not in [ reference.id() for reference in existing_media.references ]: foreign_type = Media.SLUG_NAMES[media_dict['media_type_enum']] suggestion_id = Suggestion.render_media_key_name( year_str, 'team', team_key, foreign_type, media_dict['foreign_key']) suggestion = Suggestion.get_by_id(suggestion_id) if not suggestion or suggestion.review_state != Suggestion.REVIEW_PENDING: media_dict['year'] = int(year_str) media_dict['reference_type'] = 'team' media_dict['reference_key'] = team_key if private_details_json is not None: media_dict[ 'private_details_json'] = private_details_json suggestion = Suggestion( id=suggestion_id, author=author_account_key, target_model="media", ) suggestion.contents = media_dict suggestion.put() return 'success' else: return 'suggestion_exists' else: return 'media_exists' else: return 'bad_url'
def createTeamMediaSuggestion(cls, author_account_key, media_url, team_key, year_str, private_details_json=None, is_social=False): """Create a Team Media Suggestion. Returns status (success, suggestion_exists, media_exists, bad_url)""" # Sanitize input url media_url = media_url.strip() parsed = urlparse(media_url) media_url = "{}://{}{}".format(parsed.scheme, parsed.netloc, parsed.path) media_dict = MediaParser.partial_media_dict_from_url(media_url) if media_dict is not None: if media_dict.get("is_social", False) != is_social: return 'bad_url' existing_media = Media.get_by_id(Media.render_key_name(media_dict['media_type_enum'], media_dict['foreign_key'])) if existing_media is None or team_key not in [reference.id() for reference in existing_media.references]: foreign_type = Media.SLUG_NAMES[media_dict['media_type_enum']] suggestion_id = Suggestion.render_media_key_name(year_str, 'team', team_key, foreign_type, media_dict['foreign_key']) suggestion = Suggestion.get_by_id(suggestion_id) if not suggestion or suggestion.review_state != Suggestion.REVIEW_PENDING: media_dict['year'] = int(year_str) if year_str else None media_dict['reference_type'] = 'team' media_dict['reference_key'] = team_key if private_details_json is not None: media_dict['private_details_json'] = private_details_json target_model = "media" if media_dict.get("is_social", False): target_model = "social-media" suggestion = Suggestion( id=suggestion_id, author=author_account_key, target_model=target_model, ) suggestion.contents = media_dict suggestion.put() return 'success' else: return 'suggestion_exists' else: return 'media_exists' else: return 'bad_url'
def createTeamMediaSuggestion(cls, author_account_key, media_url, team_key, year_str): """Create a Team Media Suggestion. Returns True on success and False on failure""" media_dict = MediaParser.partial_media_dict_from_url(media_url) if media_dict is not None: existing_media = Media.get_by_id(Media.render_key_name(media_dict['media_type_enum'], media_dict['foreign_key'])) if existing_media is None or team_key not in [reference.id() for reference in existing_media.references]: media_dict['year'] = int(year_str) media_dict['reference_type'] = 'team' media_dict['reference_key'] = team_key suggestion = Suggestion( author=author_account_key, target_model="media", ) suggestion.contents = media_dict suggestion.put() return True return False
def suggest_team_media(self, request): current_user = endpoints.get_current_user() if current_user is None: return BaseResponse(code=401, message="Unauthorized to make suggestions") user_id = PushHelper.user_email_to_id(current_user.email()) # For now, only allow team media suggestions if request.reference_type != "team": # Trying to suggest a media for an invalid model type return BaseResponse(code=400, message="Bad model type") media_dict = MediaParser.partial_media_dict_from_url(request.media_url.strip()) if media_dict is not None: existing_media = Media.get_by_id( Media.render_key_name(media_dict['media_type_enum'], media_dict['foreign_key'])) if existing_media is None \ or request.reference_key not in [reference.id() for reference in existing_media.references]: media_dict['year'] = request.year media_dict['reference_type'] = request.reference_type media_dict['reference_key'] = request.reference_key # Need to split deletehash out into its own private dict. Don't want that to be exposed via API... if request.details_json: incoming_details = json.loads(request.details_json) private_details = None if 'deletehash' in incoming_details: private_details = {'deletehash': incoming_details.pop('deletehash')} media_dict['private_details_json'] = json.dumps(private_details) if private_details else None media_dict['details_json'] = json.dumps(incoming_details) suggestion = Suggestion( author=ndb.Key(Account, user_id), target_model="media" ) suggestion.contents = media_dict suggestion.put() return BaseResponse(code=200, message="Suggestion added") else: return BaseResponse(code=304, message="Suggestion already exists") else: return BaseResponse(code=400, message="Bad suggestion url")
def post(self): self._require_login() team_key = self.request.get("team_key") year_str = self.request.get("year") success_code = 0 media_dict = MediaParser.partial_media_dict_from_url(self.request.get('media_url').strip()) if media_dict is not None: existing_media = Media.get_by_id(Media.render_key_name(media_dict['media_type_enum'], media_dict['foreign_key'])) if existing_media is None or team_key not in [reference.id() for reference in existing_media.references]: media_dict['year'] = int(year_str) media_dict['reference_type'] = 'team' media_dict['reference_key'] = team_key suggestion = Suggestion( author=self.user_bundle.account.key, target_model="media", ) suggestion.contents = media_dict suggestion.put() success_code = 1 self.redirect('/suggest/team/media?team_key=%s&year=%s&success=%s' % (team_key, year_str, success_code))
def post(self): self._require_admin() media_dict = MediaParser.partial_media_dict_from_url(self.request.get('media_url').strip()) if media_dict is not None: year_str = self.request.get('year') if year_str == '': year = None else: year = int(year_str.strip()) media = Media( id=Media.render_key_name(media_dict['media_type_enum'], media_dict['foreign_key']), foreign_key=media_dict['foreign_key'], media_type_enum=media_dict['media_type_enum'], details_json=media_dict.get('details_json', None), year=year, references=[Media.create_reference( self.request.get('reference_type'), self.request.get('reference_key'))], ) MediaManipulator.createOrUpdate(media) self.redirect(self.request.get('originating_url'))
def createTeamMediaSuggestion(cls, author_account_key, media_url, team_key, year_str): """Create a Team Media Suggestion. Returns True on success and False on failure""" media_dict = MediaParser.partial_media_dict_from_url(media_url) if media_dict is not None: existing_media = Media.get_by_id( Media.render_key_name(media_dict['media_type_enum'], media_dict['foreign_key'])) if existing_media is None or team_key not in [ reference.id() for reference in existing_media.references ]: media_dict['year'] = int(year_str) media_dict['reference_type'] = 'team' media_dict['reference_key'] = team_key suggestion = Suggestion( author=author_account_key, target_model="media", ) suggestion.contents = media_dict suggestion.put() return True return False
def test_unsupported_url_parse(self): self.assertEqual(MediaParser.partial_media_dict_from_url("http://foo.bar"), None)