Beispiel #1
0
    def post(self):
        playlist = models.Playlist.getPlaylistFromRequest(self.request)
        if not playlist:
            return self.redirect("/?" + Handler.warning("Playlist not found"))
        try:
            playlist.snippets = [models.Snippet(**{
                k: int(self.request.get(key + '_' + k)) if isinstance(getattr(models.Snippet, k),
                                                                  ndb.IntegerProperty) else self.request.get(key + '_' + k)
                for k in models.Snippet._properties}) for key in self.request.get_all('key')]
        except:
            print sys.exc_info()[0]
            self.redirect("/view/?" + playlist.keyForLink() + '&' + Handler.warning("There was a problem applying edits"))

        req_fields = models.Snippet._properties.keys()
        req_fields.remove('notes')

        if any(not v for v in [getattr(snpt, n) for snpt in playlist.snippets for n in req_fields]):
            return self.redirect("/view/?" + playlist.keyForLink() + '&' + Handler.warning("Required fields were missing"))

        playlist.put()
        return self.redirect("/view/?" + playlist.keyForLink() + '&' + Handler.status("Edits applied to playlist"))
Beispiel #2
0
    def post(self):
        playlist = models.Playlist.getPlaylistFromRequest(self.request)

        if not playlist:
            return self.redirect("/?" + Handler.warning("Playlist not found"))
        if any((k not in self.request.POST or not self.request.POST[k] for k in
                ("title", "videoID", "startTime", "endTime"))):
            return self.redirect('/add/?' + Handler.warning("required fields not found") + '&' + playlist.keyForLink())

        self.response.write(models.getPopulateDictionary(models.Snippet, self.request.POST.items()))

        # validate videoID
        # add part=id,snippet to get title from snippet object
        result = urlfetch.fetch("https://www.googleapis.com/youtube/v3/videos?id=%s&key=%s&part=id" % (
            self.request.get('videoID'), credentials.API_KEY))
        if result.status_code != 200:
            return self.redirect("/add/?%s&%s" %
                                 (playlist.keyForLink(), Handler.warning("Youtube unreachable to verify videoID")))

        videoJSON = json.loads(result.content)
        if not videoJSON['pageInfo']['totalResults']:
            # todo repopulate fields
            return self.redirect("/add/?%s&%s" %
                                 (playlist.keyForLink(), Handler.warning("Invalid YouTube VideoID")))

        # create snippet
        newSnippet = models.Snippet(**models.getPopulateDictionary(models.Snippet, self.request.POST.items()))
        # todo validate that start/end times are 0 <= startTime < endTime <= videoLength,  youtube embedd fails gracefully for now


        # add it to playlist and put playlist
        playlist.snippets.append(newSnippet)
        playlist.put()

        # redirect to view with playlist and status
        return self.redirect("/view/?%s&%s" %
                             (playlist.keyForLink(), Handler.status("Snippet added to playlist")))
Beispiel #3
0
 def getPlaylist(self, playlist):
     playlist.key.delete()
     return self.redirect("/?" + Handler.status("Playlist Deleted"))