Exemplo n.º 1
0
 def delete(self, force=False, rerecord=False):
     """
     Program.delete(force=False, rerecord=False) -> retcode
             Informs backend to delete recording and all relevent data.
             'force' forces a delete if the file cannot be found.
             'rerecord' sets the file as recordable in oldrecorded
     """
     be = FileOps(db=self._db)
     res = int(be.deleteRecording(self, force=force))
     if res < -1:
         raise MythBEError('Failed to delete file')
     if rerecord:
         be.forgetRecording(self)
     return res
Exemplo n.º 2
0
        def announce(self):
            if self.mode == 'r':
                cmd = 'ANN FileTransfer %s 0 0 2000'
            elif self.mode == 'w':
                cmd = 'ANN FileTransfer %s 1'

            res = self.backendCommand(
                BACKEND_SEP.join(
                    [cmd % self.localname, self.filename, self.sgroup]))
            if res.split(BACKEND_SEP)[0] != 'OK':
                raise MythBEError(MythError.PROTO_ANNOUNCE, self.host,
                                  self.port, res)
            else:
                sp = res.split(BACKEND_SEP)
                self._sockno = int(sp[1])
                self._size = int(sp[2])
Exemplo n.º 3
0
 def downloadTo(self, url, storagegroup, filename, \
                      forceremote=False, openfile=False):
     if openfile:
         eventlock = self.allocateEventLock(\
                 re.escape(BACKEND_SEP).\
                         join(['BACKEND_MESSAGE',
                               'DOWNLOAD_FILE UPDATE',
                               re.escape(url)]))
     if filename[0] != '/':
         filename = '/' + filename
     res = self.backendCommand(BACKEND_SEP.join((\
                 'DOWNLOAD_FILE', url, storagegroup, filename))).\
                 split(BACKEND_SEP)
     if res[0] != 'OK':
         raise MythBEError('Download failed')
     if openfile:
         eventlock.wait()
         return ftopen(res[1], 'r', forceremote, db=self.db, download=True)
Exemplo n.º 4
0
        def run(self, *args, **kwargs):
            pgfieldcount = len(Program._field_order)
            pgrecstatus = Program._field_order.index('recstatus')
            pgrecordid = Program._field_order.index('recordid')

            res = self.inst.backendCommand(self.query).split(BACKEND_SEP)
            for i in xrange(self.header_length):
                res.pop(0)
            num_progs = int(res.pop(0))
            if num_progs * pgfieldcount != len(res):
                raise MythBEError(MythBEError.PROTO_PROGRAMINFO)

            for i in range(num_progs):
                offs = i * pgfieldcount
                if self.recstatus is not None:
                    if int(res[offs + pgrecstatus]) != self.recstatus:
                        continue
                pg = self.handler(res[offs:offs + pgfieldcount],
                                  db=self.inst.db)
                pg = self.func(pg, *args, **kwargs)
                if pg is not None:
                    yield pg