Esempio n. 1
0
    def cached(self, intr, db):
        Log("Hit cached method")
        pid = self.parameters['pid']
        pname = self.parameters['pname']

        codes = ('pid', 'name', 'shortname', 'othername', 'type', 'pic', 'url')
        names = ', '.join([code for code in codes if code != ''])
        ruleholder = (pid and 'pid=%s' or
                      '(name=%s OR shortname=%s OR othername=%s)')
        rulevalues = (pid and [pid] or [pname, pname, pname])

        rows = db.select('ptb', names, ruleholder + " AND status&8",
                         *rulevalues)

        if len(rows) > 1:
            raise adb.resp.AniDBInternalError(
                "It shouldn't be possible for database to return more than 1 "
                "line for PRODUCER cache"
            )
        elif not len(rows):
            return None
        else:
            resp = adb.resp.ProducerResponse(self, None, '245',
                                             'CACHED PRODUCER',
                                             [list(rows[0])])
            resp.parse()
            return resp
Esempio n. 2
0
    def cached(self, intr, db):
        Log("Hit cached method")
        lid = self.parameters['lid']
        fid = self.parameters['fid']
        size = self.parameters['size']
        ed2k = self.parameters['ed2k']
        aid = self.parameters['aid']
        aname = self.parameters['aname']
        gid = self.parameters['gid']
        gname = self.parameters['gname']
        epno = self.parameters['epno']

        names = ', '.join([
            code for code in adb.resp.MylistResponse(None, None, None, None,
                                                     []).codetail if code != ''
        ])

        if lid:
            ruleholder = "lid=%s"
            rulevalues = [lid]
        elif fid or size or ed2k:
            resp = intr.file(fid=fid, size=size, ed2k=ed2k)
            if resp.rescode != '220':
                resp = adb.resp.NoSuchMylistFileResponse(
                    self, None, '321', 'NO SUCH ENTRY (FILE NOT FOUND)', [])
                resp.parse()
                return resp
            fid = resp.datalines[0]['fid']

            ruleholder = "fid=%s"
            rulevalues = [fid]
        else:
            resp = intr.anime(aid=aid, aname=aname)
            if resp.rescode != '230':
                resp = adb.resp.NoSuchFileResponse(
                    self, None, '320', 'NO SUCH ENTRY (ANIME NOT FOUND)', [])
                resp.parse()
                return resp
            aid = resp.datalines[0]['aid']

            resp = intr.group(gid=gid, gname=gname)
            if resp.rescode != '250':
                resp = adb.resp.NoSuchFileResponse(
                    self, None, '321', 'NO SUCH ENTRY (GROUP NOT FOUND)', [])
                resp.parse()
                return resp
            gid = resp.datalines[0]['gid']

            resp = intr.episode(aid=aid, epno=epno)
            if resp.rescode != '240':
                resp = adb.resp.NoSuchFileResponse(
                    self, None, '321', 'NO SUCH ENTRY (EPISODE NOT FOUND)',
                    [])
                resp.parse()
                return resp
            eid = resp.datalines[0]['eid']

            ruleholder = "aid=%s AND eid=%s AND gid=%s"
            rulevalues = [aid, eid, gid]

        rows = db.select('ltb', names, ruleholder + " AND status&8",
                         *rulevalues)

        if len(rows) > 1:
            # TODO: Handle "322 "Cached Multiple Files Found. See history
            # for original details.
            return None
        elif not len(rows):
            return None
        else:
            resp = adb.resp.MylistResponse(self, None, '221', 'CACHED MYLIST',
                                           [list(rows[0])])
            resp.parse()
            return resp