def post(self): playlist = models.Playlist.getPlaylistFromRequest(self.request) if not playlist: return self.redirect("/?" + Handler.warning("Playlist not found")) delSnippets = [int(v) for v in self.request.get_all('snippetIndex') if 0 <= int(v) < len(playlist.snippets)] playlist.snippets = [s for i, s in enumerate(playlist.snippets) if i not in delSnippets] playlist.put() self.redirect("/view/?" + playlist.keyForLink())
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"))
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")))
def get(self): playlist = models.Playlist.getPlaylistFromRequest(self.request) if not playlist: return self.redirect('/?' + Handler.warning("Playlist not found")) self.render("add.html", var={"playlist": playlist})
def getPlaylist(self, playlist): if playlist.snippets: self.render("editPlaylist.html", {'playlist': playlist}) else: return self.redirect("/view/?" + playlist.keyForLink() + '&' + Handler.warning("This playlist has no snippets to edit"))
def getPlaylist(self, playlist): if playlist.snippets: self.render("removeSnippets.html", {'playlist': playlist, 'delete': True}) else: return self.redirect("/view/?" + playlist.keyForLink() + '&' + Handler.warning("This playlist has no snippets to remove"))