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 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 createSuggestion(self): status = SuggestionCreator.createMatchVideoYouTubeSuggestion( self.account.key, "H-54KMwMKY0", "2016necmp_f1m1") self.assertEqual(status, 'success') return Suggestion.render_media_key_name(2016, 'match', '2016necmp_f1m1', 'youtube', 'H-54KMwMKY0')
def createMatchVideoYouTubeSuggestion(cls, author_account_key, youtube_id, match_key): """Create a YouTube Match Video. Returns status (success, suggestion_exists, video_exists, bad_url)""" if youtube_id: match = Match.get_by_id(match_key) if not match: return 'bad_match' if youtube_id not in match.youtube_videos: year = match_key[:4] suggestion_id = Suggestion.render_media_key_name(year, 'match', match_key, 'youtube', youtube_id) suggestion = Suggestion.get_by_id(suggestion_id) if not suggestion or suggestion.review_state != Suggestion.REVIEW_PENDING: suggestion = Suggestion( id=suggestion_id, author=author_account_key, target_key=match_key, target_model="match", ) suggestion.contents = {"youtube_videos": [youtube_id]} suggestion.put() return 'success' else: return 'suggestion_exists' else: return 'video_exists' else: return 'bad_url'
def createMatchVideoYouTubeSuggestion(cls, author_account_key, youtube_id, match_key): """Create a YouTube Match Video. Returns status (success, suggestion_exists, video_exists, bad_url)""" if youtube_id: match = Match.get_by_id(match_key) if not match: return 'bad_match' if youtube_id not in match.youtube_videos: year = match_key[:4] suggestion_id = Suggestion.render_media_key_name( year, 'match', match_key, 'youtube', youtube_id) suggestion = Suggestion.get_by_id(suggestion_id) if not suggestion or suggestion.review_state != Suggestion.REVIEW_PENDING: suggestion = Suggestion( id=suggestion_id, author=author_account_key, target_key=match_key, target_model="match", ) suggestion.contents = {"youtube_videos": [youtube_id]} suggestion.put() return 'success' else: return 'suggestion_exists' else: return 'video_exists' else: return 'bad_url'
def createMatchVideoInternetArchiveSuggestion(cls, author_account_key, archive_id, match_key): if archive_id: match = Match.get_by_id(match_key) if not match: return 'bad_match' if archive_id not in match.internet_archive_videos: year = match_key[:4] suggestion_id = Suggestion.render_media_key_name( year, 'match', match_key, 'internet_archive', archive_id) suggestion = Suggestion.get_by_id(suggestion_id) if not suggestion or suggestion.review_state != Suggestion.REVIEW_PENDING: suggestion = Suggestion( id=suggestion_id, author=author_account_key, target_key=match_key, target_model="match", ) suggestion.contents = { "internet_archive_videos": [archive_id] } suggestion.put() return 'success' else: return 'suggestion_exists' else: return 'video_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 createDesignSuggestion(self): status = SuggestionCreator.createTeamMediaSuggestion( self.account.key, 'https://grabcad.com/library/2016-148-robowranglers-1', 'frc1124', '2016') self.assertEqual(status[0], 'success') return Suggestion.render_media_key_name( '2016', 'team', 'frc1124', 'grabcad', '2016-148-robowranglers-1')
def testDuplicateSuggestion(self): suggestion_id = Suggestion.render_media_key_name( '2016', 'team', 'frc1124', 'imgur', 'ruRAxDm') Suggestion(id=suggestion_id, author=self.account.key, review_state=Suggestion.REVIEW_PENDING, target_key="2012cmp", target_model="event").put() status, _ = SuggestionCreator.createTeamMediaSuggestion( self.account.key, "http://imgur.com/ruRAxDm", "frc1124", "2016") self.assertEqual(status, 'suggestion_exists')
def testDuplicateSuggestion(self): suggestion_id = Suggestion.render_media_key_name( '2016', 'event', '2016nyny', 'youtube', 'H-54KMwMKY0') Suggestion(id=suggestion_id, author=self.account.key, review_state=Suggestion.REVIEW_PENDING, target_key="2016nyny", target_model="event_media").put() status, _ = SuggestionCreator.createEventMediaSuggestion( self.account.key, "https://www.youtube.com/watch?v=H-54KMwMKY0", "2016nyny") self.assertEqual(status, 'suggestion_exists')
def testCleanUrl(self): status, _ = SuggestionCreator.createTeamMediaSuggestion( self.account.key, " http://imgur.com/ruRAxDm?foo=bar#meow ", "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) self.assertIsNotNone(suggestion) self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING) self.assertEqual(suggestion.author, self.account.key) self.assertEqual(suggestion.target_model, 'media')
def test_duplicate_suggestion(self): suggestion_id = Suggestion.render_media_key_name('2016', 'event', '2016nyny', 'youtube', 'H-54KMwMKY0') Suggestion( id=suggestion_id, author=self.account.key, review_state=Suggestion.REVIEW_PENDING, target_key="2016nyny", target_model="event_media").put() status, _ = SuggestionCreator.createEventMediaSuggestion( self.account.key, "https://www.youtube.com/watch?v=H-54KMwMKY0", "2016nyny") self.assertEqual(status, 'suggestion_exists')
def testDuplicateSuggestion(self): suggestion_id = Suggestion.render_media_key_name('2016', 'team', 'frc1124', 'imgur', 'ruRAxDm') Suggestion( id=suggestion_id, author=self.account.key, review_state=Suggestion.REVIEW_PENDING, target_key="2012cmp", target_model="event").put() status = SuggestionCreator.createTeamMediaSuggestion( self.account.key, "http://imgur.com/ruRAxDm", "frc1124", "2016") self.assertEqual(status, 'suggestion_exists')
def testCleanUrl(self): status = SuggestionCreator.createTeamMediaSuggestion( self.account.key, " http://imgur.com/ruRAxDm?foo=bar#meow ", "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) self.assertIsNotNone(suggestion) self.assertEqual(suggestion.review_state, Suggestion.REVIEW_PENDING) self.assertEqual(suggestion.author, self.account.key) self.assertEqual(suggestion.target_model, 'media')
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, 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, 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 post(self): self._require_login() match_key = self.request.get("match_key") match_future = Match.get_by_id_async(self.request.get("match_key")) youtube_url = self.request.get("youtube_url") youtube_id = None regex1 = re.match(r".*youtu\.be\/(.*)", youtube_url) if regex1 is not None: youtube_id = regex1.group(1) else: regex2 = re.match(r".*v=([a-zA-Z0-9_-]*)", youtube_url) if regex2 is not None: youtube_id = regex2.group(1) if youtube_id is not None: if youtube_id not in match_future.get_result().youtube_videos: year = match_key[:4] suggestion_id = Suggestion.render_media_key_name(year, 'match', match_key, 'youtube', youtube_id) suggestion = Suggestion.get_by_id(suggestion_id) if not suggestion or suggestion.review_state != Suggestion.REVIEW_PENDING: suggestion = Suggestion( id=suggestion_id, author=self.user_bundle.account.key, target_key=match_key, target_model="match", ) suggestion.contents = {"youtube_videos": [youtube_id]} suggestion.put() status = 'success' else: status = 'suggestion_exists' else: status = 'video_exists' else: status = 'bad_url' self.redirect('/suggest/match/video?match_key={}&status={}'.format(match_key, status))
def createSuggestion(self): status = SuggestionCreator.createMatchVideoYouTubeSuggestion(self.account.key, "H-54KMwMKY0", "2016necmp_f1m1") self.assertEqual(status, 'success') return Suggestion.render_media_key_name(2016, 'match', '2016necmp_f1m1', 'youtube', 'H-54KMwMKY0')