Пример #1
0
 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))
Пример #2
0
 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())