def render(self, request): """calls the renderDAAP method and returns its result.""" logger.log_debug("%s %s" % (request.method, request.path)) logger.log_debug(str(request.args)) try: return Response(200, {"content-type": x_dmap_tagged}, self.renderDAAP(request).render()) except Exception, e: logger.log_error("command failed: %s" % e) return Response(400, {"content-type": MimeType("text", "plain")}, str(e))
def render(self, request): song = Song.objects.filter(id=self.songid) if song == []: return Response(404) try: f = open(song[0].file.path, "rb") except: return Response(404) mimetype = str(song[0].file.mimetype) logger.log_debug("%s -> %s (%s)" % (request.path, song[0].file.path, mimetype)) mimetype = MimeType.fromString(mimetype) return Response(200, {"content-type": x_dmap_tagged}, FileStream(f))
def _render(self, revision): if revision > 0: logger.log_debug("UpdateStream: new revision is %i" % revision) else: logger.log_debug("UpdateStream: signaling disconnect (revision %i)" % revision) # if _caughtUpdate was not called, then disconnect from the signal if self._signal: db_changed.disconnect(self._signal) self._signal = None # delete the reference to self.deferred self.deferred = None self.length = 0 # remove stream from service.streams del self._service.streams[self] # write response mupd = CodeBag("mupd") mupd.add(ContentCode("mstt", 200)) mupd.add(ContentCode("musr", int(revision))) return str(mupd.render())
def render(self, request): logger.log_debug("%s %s" % (request.method, request.path)) logger.log_debug(str(request.args)) try: # get session id sid = request.args.get("session-id", ["0"]) sid = int(sid[0]) if sid == 0 or not sid in self.service.sessions: raise Exception("session-id %i is invalid" % sid) # get revision number rid = request.args.get("revision-number", ["0"]) rid = int(rid[0]) logger.log_debug("UpdateCommand: revision-number is %i" % rid) # if revision-number is not current revision number if not rid == DaapPrivate.REVISION_NUMBER: if rid < 0: raise Exception("invalid revision-number %s" % rid) # return the current revision number mupd = CodeBag("mupd") mupd.add(ContentCode("mstt", 200)) mupd.add(ContentCode("musr", int(DaapPrivate.REVISION_NUMBER))) return Response(200, {"content-type": x_dmap_tagged}, mupd.render()) # create a new update stream to listen for db-changed signal stream = UpdateStream(self.service) return Response(200, {"content-type": x_dmap_tagged}, stream) except Exception, e: logger.log_error("UpdateCommand failed: %s" % e) return Response(400, {"content-type": MimeType("text", "plain")}, str(e))
def render(self, request): logger.log_debug("%s %s" % (request.method, request.path)) logger.log_debug(str(request.args)) apso = CodeBag("apso") apso.add(ContentCode("mstt", 200)) # status code apso.add(ContentCode("muty", 1)) # always 1? # a playlist id of 0 is special and means list all items in the database. if self.plsid == 0: songs = Song.objects.all() # otherwise look up the playlist with the specified id else: pls = Playlist.objects.get(id=self.plsid) songs = pls.list_songs() apso.add(ContentCode("mtco", len(songs))) # total number of matching records apso.add(ContentCode("mrco", len(songs))) # total number of records returned listing = CodeBag("mlcl") apso.add(listing) d = defer.Deferred() d.addCallback(self._renderDAAP) d.addErrback(self._errDAAP) reactor.callLater(0, self._retrieveSongs, d, apso, listing, iter(songs)) return d
def render(self, request): logger.log_debug("%s %s" % (request.method, request.path)) try: meta = "".join(request.args["meta"]) # log_debug("[daap] ListItemsCommand requesting metadata fields: %s" % meta) from content_codes import reverse_table for field in meta.split(","): try: code = reverse_table[field] except: logger.log_debug("ListItemsCommand: '%s' is not a recognized content code" % field) except Exception, e: logger.log_debug("ListItemsCommand caught exception: %s" % e)
def close(self): self.deferred = None self.length = 0 logger.log_debug("UpdateStream: closed stream")
def read(self): if self.deferred: logger.log_debug("UpdateStream: waiting for new revision") return self.deferred logger.log_debug("UpdateStream: finished read") return None