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')
Exemple #2
0
    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_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_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 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')
Exemple #13
0
 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 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 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 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 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 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_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')
Exemple #28
0
    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")
Exemple #36
0
    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
Exemple #39
0
    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)
Exemple #40
0
    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)
Exemple #43
0
    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'))
Exemple #49
0
    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)
 def test_unsupported_url_parse(self):
     self.assertEqual(MediaParser.partial_media_dict_from_url("http://foo.bar"), None)