def create_insta_suggestion(account_key_id, team_num, year, insta_url):
        SuggestionCreator.createTeamMediaSuggestion(
            author_account_key=ndb.Key(Account, account_key_id),
            media_url=insta_url,
            team_key="frc{}".format(team_num),
            year_str=str(year),
            default_preferred=True)
def create_insta_suggestion(account_key_id, team_num, year, insta_url):
    SuggestionCreator.createTeamMediaSuggestion(
        author_account_key=ndb.Key(Account, account_key_id),
        media_url=insta_url,
        team_key="frc{}".format(team_num),
        year_str=str(year),
        default_preferred=True)
    def createTeamMediaSuggestion(self):
        user_bundle = UserBundle()
        team = Team.query().fetch(1)[0]

        SuggestionCreator.createTeamMediaSuggestion(
            author_account_key=user_bundle.account.key,
            media_url=self.YOUTUBE_URL,
            team_key=team.key_name,
            year_str="2016")
    def createTeamMediaSuggestion(self):
        user_bundle = UserBundle()
        team = Team.query().fetch(1)[0]

        SuggestionCreator.createTeamMediaSuggestion(
            author_account_key=user_bundle.account.key,
            media_url=self.YOUTUBE_URL,
            team_key=team.key_name,
            year_str="2016")
 def testBadUrl(self):
     status = SuggestionCreator.createTeamMediaSuggestion(
         self.account.key,
         "http://foo.com/blah",
         "frc1124",
         "2016")
     self.assertEqual(status, 'bad_url')
    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")

        # Need to split deletehash out into its own private dict. Don't want that to be exposed via API...
        private_details_json = None
        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')}
            private_details_json = json.dumps(private_details) if private_details else None

        status = SuggestionCreator.createTeamMediaSuggestion(
            author_account_key=ndb.Key(Account, user_id),
            media_url=request.media_url,
            team_key=request.reference_key,
            year_str=str(request.year),
            private_details_json=private_details_json)

        if status != 'bad_url':
            if status == 'success':
                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")
Beispiel #7
0
    def _render(self, team_key, year):
        if int(year) not in list(TeamParticipationQuery(team_key).fetch()):
            self.abort(404)

        if 'media_url' in self.request.POST:
            status, suggestion = SuggestionCreator.createTeamMediaSuggestion(
                author_account_key=self.auth_owner_key,
                media_url=self.request.POST["media_url"],
                team_key=team_key,
                year_str=year)

            if status == 'success':
                message = {
                    "success": True
                }
            else:
                message = {
                    "success": False,
                    "message": status
                }
        else:
            message = {
                "success": False,
                "message": "missing media_url"
            }

        return json.dumps(message, ensure_ascii=True, indent=2, sort_keys=True)
 def createSuggestion(self):
     status = SuggestionCreator.createTeamMediaSuggestion(self.account.key,
                                                          'http://imgur.com/foobar',
                                                          'frc1124',
                                                          2016)
     self.assertEqual(status[0], 'success')
     return Suggestion.query().fetch(keys_only=True)[0].id()
 def testBadUrl(self):
     status, _ = SuggestionCreator.createTeamMediaSuggestion(
         self.account.key,
         "http://foo.com/blah",
         "frc1124",
         "2016")
     self.assertEqual(status, 'bad_url')
Beispiel #10
0
    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")

        # Need to split deletehash out into its own private dict. Don't want that to be exposed via API...
        private_details_json = None
        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')}
            private_details_json = json.dumps(private_details) if private_details else None

        status = SuggestionCreator.createTeamMediaSuggestion(
            author_account_key=ndb.Key(Account, user_id),
            media_url=request.media_url,
            team_key=request.reference_key,
            year_str=str(request.year),
            private_details_json=private_details_json)

        if status != 'bad_url':
            if status == 'success':
                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")
Beispiel #11
0
 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')
Beispiel #12
0
 def testMediaExists(self):
     media_id = Media.render_key_name(MediaType.IMGUR, 'ruRAxDm')
     Media.get_or_insert(media_id,
                         media_type_enum=MediaType.IMGUR,
                         foreign_key='ruRAxDm',
                         references=[ndb.Key(Team, 'frc1124')]).put()
     status, _ = SuggestionCreator.createTeamMediaSuggestion(
         self.account.key, "http://imgur.com/ruRAxDm", "frc1124", "2016")
     self.assertEqual(status, 'media_exists')
Beispiel #13
0
    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')
Beispiel #14
0
    def post(self):
        self._require_registration()

        team_key = self.request.get("team_key")

        status, suggestion = SuggestionCreator.createTeamMediaSuggestion(
            author_account_key=self.user_bundle.account.key,
            media_url=self.request.get("media_url"),
            team_key=team_key,
            year_str=None,
            is_social=True)

        self.redirect('/suggest/team/social_media?team_key=%s&status=%s' % (team_key, status))
    def post(self):
        self._require_login()

        team_key = self.request.get("team_key")
        year_str = self.request.get("year")

        status = SuggestionCreator.createTeamMediaSuggestion(
            author_account_key=self.user_bundle.account.key,
            media_url=self.request.get("media_url"),
            team_key=team_key,
            year_str=year_str)

        self.redirect('/suggest/team/media?team_key=%s&year=%s&status=%s' % (team_key, year_str, status))
 def testMediaExists(self):
     media_id = Media.render_key_name(MediaType.IMGUR, 'ruRAxDm')
     Media.get_or_insert(
         media_id,
         media_type_enum=MediaType.IMGUR,
         foreign_key='ruRAxDm',
         references=[ndb.Key(Team, 'frc1124')]).put()
     status = SuggestionCreator.createTeamMediaSuggestion(
         self.account.key,
         "http://imgur.com/ruRAxDm",
         "frc1124",
         "2016")
     self.assertEqual(status, 'media_exists')
Beispiel #17
0
    def post(self):
        self._require_registration()

        team_key = self.request.get("team_key")

        status, suggestion = SuggestionCreator.createTeamMediaSuggestion(
            author_account_key=self.user_bundle.account.key,
            media_url=self.request.get("media_url"),
            team_key=team_key,
            year_str=None,
            is_social=True)

        self.redirect('/suggest/team/social_media?team_key=%s&status=%s' %
                      (team_key, status))
    def post(self):
        self._require_login()

        team_key = self.request.get("team_key")
        year_str = self.request.get("year")

        status = SuggestionCreator.createTeamMediaSuggestion(
            author_account_key=self.user_bundle.account.key,
            media_url=self.request.get("media_url"),
            team_key=team_key,
            year_str=year_str)

        self.redirect('/suggest/team/media?team_key=%s&year=%s&status=%s' %
                      (team_key, year_str, status))
Beispiel #19
0
    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 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')
Beispiel #22
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)
Beispiel #23
0
    def post(self):
        self._require_registration()

        team_key = self.request.get("team_key")
        year_str = self.request.get("year")

        status, suggestion = SuggestionCreator.createTeamMediaSuggestion(
            author_account_key=self.user_bundle.account.key,
            media_url=self.request.get("media_url"),
            team_key=team_key,
            year_str=year_str)

        if status == 'success' and suggestion.contents.get('media_type') == MediaType.GRABCAD:
            # Send an update to the frcdesigns slack
            slack_sitevar = Sitevar.get_or_insert('slack.hookurls')
            if slack_sitevar:
                slack_url = slack_sitevar.contents.get('tbablog', '')
                if slack_url:
                    model_details = json.loads(suggestion.contents['details_json'])
                    message_body = "{0} ({1}) has suggested a CAD model for team <https://thebluealliance.com/team/{2}/{3}|{2} in {3}>.".format(
                        self.user_bundle.account.display_name,
                        self.user_bundle.account.email,
                        team_key[3:],
                        year_str)
                    image_attachment = {
                        "footer": "<https://www.thebluealliance.com/suggest/cad/review|See all suggestions> on The Blue Alliance",
                        "fallback": "CAD model",
                        "title": model_details['model_name'],
                        "title_link": "https://grabcad.com/library/{}".format(suggestion.contents['foreign_key']),
                        "image_url": model_details['model_image'].replace('card.jpg', 'large.png'),
                        "fields": [
                            {
                                "title": "Accept",
                                "value": "<https://www.thebluealliance.com/suggest/cad/review?action=accept&id={}|Click Here>".format(suggestion.key.id()),
                                "short": True,
                            },
                            {
                                "title": "Reject",
                                "value": "<https://www.thebluealliance.com/suggest/cad/review?action=reject&id={}|Click Here>".format(suggestion.key.id()),
                                "short": True,
                            }
                        ],
                    }

                    SuggestionNotifier.send_slack_alert(slack_url, message_body, [image_attachment])

        self.redirect('/suggest/team/media?team_key=%s&year=%s&status=%s' % (team_key, year_str, status))
    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)
Beispiel #25
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 createSocialMediaSuggestion(self):
     status = SuggestionCreator.createTeamMediaSuggestion(
         self.account.key, 'http://twitter.com/frc1124', 'frc1124', None,
         None, True)
     self.assertEqual(status[0], 'success')
     return Suggestion.query().fetch(keys_only=True)[0].id()
 def createSocialMediaSuggestion(self):
     status = SuggestionCreator.createTeamMediaSuggestion(
         self.account.key, 'http://twitter.com/frc1124', 'frc1124', None,
         None, True)
     self.assertEqual(status[0], 'success')
     return Suggestion.query().fetch(keys_only=True)[0].id()
 def createMediaSuggestion(self):
     status = SuggestionCreator.createTeamMediaSuggestion(
         self.account.key, 'http://imgur.com/foobar', 'frc1124',
         self.now.year)
     self.assertEqual(status[0], 'success')
     return Suggestion.query().fetch(keys_only=True)[0].id()
Beispiel #30
0
    def post(self):
        self._require_registration()

        team_key = self.request.get("team_key")
        year_str = self.request.get("year")

        status, suggestion = SuggestionCreator.createTeamMediaSuggestion(
            author_account_key=self.user_bundle.account.key,
            media_url=self.request.get("media_url"),
            team_key=team_key,
            year_str=year_str)

        if status == 'success' and suggestion.contents.get(
                'media_type') == MediaType.GRABCAD:
            # Send an update to the frcdesigns slack
            slack_sitevar = Sitevar.get_or_insert('slack.hookurls')
            if slack_sitevar:
                slack_url = slack_sitevar.contents.get('tbablog', '')
                if slack_url:
                    model_details = json.loads(
                        suggestion.contents['details_json'])
                    message_body = "{0} ({1}) has suggested a CAD model for team <https://www.thebluealliance.com/team/{2}/{3}|{2} in {3}>.".format(
                        self.user_bundle.account.display_name,
                        self.user_bundle.account.email, team_key[3:], year_str)
                    image_attachment = {
                        "footer":
                        "<https://www.thebluealliance.com/suggest/cad/review|See all suggestions> on The Blue Alliance",
                        "fallback":
                        "CAD model",
                        "title":
                        model_details['model_name'],
                        "title_link":
                        "https://grabcad.com/library/{}".format(
                            suggestion.contents['foreign_key']),
                        "image_url":
                        model_details['model_image'].replace(
                            'card.jpg', 'large.png'),
                        "fields": [{
                            "title":
                            "Accept",
                            "value":
                            "<https://www.thebluealliance.com/suggest/cad/review?action=accept&id={}|Click Here>"
                            .format(suggestion.key.id()),
                            "short":
                            True,
                        }, {
                            "title":
                            "Reject",
                            "value":
                            "<https://www.thebluealliance.com/suggest/cad/review?action=reject&id={}|Click Here>"
                            .format(suggestion.key.id()),
                            "short":
                            True,
                        }],
                    }

                    OutgoingNotificationHelper.send_slack_alert(
                        slack_url, message_body, [image_attachment])

        self.redirect('/suggest/team/media?team_key=%s&year=%s&status=%s' %
                      (team_key, year_str, status))