Esempio n. 1
0
    def add_task(self, url):
        if url in self._task_urls:
            return False
        url_type = determin_url_type(url)

        if url_type in ("bt", "magnet"):
            result = self.xunlei.add_bt_task(url)
        elif url_type in ("normal", "ed2k", "thunder"):
            result = self.xunlei.add_task(url)
        else:
            result = self.xunlei.add_batch_task([url, ])

        if result:
            self._update_task_list(5)
        return result
Esempio n. 2
0
    def add_task(self,
                 url,
                 title=None,
                 tags=set(),
                 creator="",
                 anonymous=False,
                 need_cid=True):
        session = Session()

        def update_task(task,
                        title=title,
                        tags=tags,
                        creator=creator,
                        anonymous=anonymous):
            if not task:
                return task
            if task.invalid and not anonymous:
                if title: task.taskname = title
                if tags: task.tags = tags
                task.creator = creator
                task.invalid = False
                session.add(task)
                session.commit()
                _ = task.id
            return task

        def _random():
            return random.randint(100, 999)

        # step 1: determin type
        if isinstance(url, basestring):
            task = session.query(db.Task).filter(db.Task.url == url).first()
            if task:
                return (1, update_task(task))

            url_type = determin_url_type(url)
            if url_type in ("bt", "magnet"):
                check = self.xunlei.bt_task_check
                add_task_with_info = self.xunlei.add_bt_task_with_dict
            elif url_type in ("normal", "ed2k", "thunder"):
                check = self.xunlei.task_check
                add_task_with_info = self.xunlei.add_task_with_dict
            else:
                return (-3, "space error")
                #result = self.xunlei.add_batch_task([url, ])

            # step 2: get info
            info = check(url)
        else:
            info = self.xunlei.torrent_upload(url['filename'],
                                              StringIO(url['body']))
            add_task_with_info = self.xunlei.add_bt_task_with_dict
            url = "bt://" + info.get('cid', "")

        # step 3: check info
        # check info
        if not info: return (-1, "check task error")
        # check cid
        if need_cid and not info['cid'] and url_type in ("normal", "thunder"):
            return (-2, "can't find cid")
        if info['cid']:
            task = self.get_task_by_cid(info['cid'])
            if task.count() > 0:
                return (1, update_task(task[0]))
        # check title
        if title:
            info['title'] = title
        else:
            title = info['title']
        if not info['cid'] and \
                self.get_task_by_title(info['title']).count() > 0:
            info['title'] = "#%s %s" % (_random(), info['title'])
        # for bt
        if "valid_list" in info:
            info["valid_list"] = [
                "1",
            ] * len(info["valid_list"])

        # step 4: commit & fetch result
        result = add_task_with_info(url, info)
        if not result:
            return (0, "error")
        self._update_task_list(5)

        # step 5: checkout task&fix
        if info['cid']:
            task = self.get_task_by_cid(info['cid']).first()
        elif info['title']:
            task = self.get_task_by_title(info['title']).first()
        else:
            task = None

        if task:
            if title: task.taskname = title
            if tags: task.tags = tags
            task.creator = creator
            task.invalid = anonymous
            session.add(task)
            session.commit()
            _ = task.id
        return (1, task)
Esempio n. 3
0
    def add_task(self, url, title=None, tags=set(), creator="", anonymous=False, need_miaoxia=True):
        session = Session()
        def update_task(task, title=title, tags=tags, creator=creator, anonymous=anonymous):
            if not task:
                return task
            if task.invalid and not anonymous:
                if title: task.taskname = title
                if tags: task.tags = tags
                task.creator = creator
                task.invalid = False
                session.add(task)
                session.commit()
                _ = task.id
            return task

        def _random():
            return random.randint(100, 999)

        # step 1: determin type
        if isinstance(url, basestring):
            task = session.query(db.Task).filter(db.Task.url == url).first()
            if task:
                return (1, update_task(task))

            url_type = determin_url_type(url)
            if url_type in ("bt", "magnet"):
                check = self.xunlei.bt_task_check
                add_task_with_info = self.xunlei.add_bt_task_with_dict
            elif url_type in ("normal", "ed2k", "thunder"):
                check = self.xunlei.task_check
                add_task_with_info = self.xunlei.add_task_with_dict
            else:
                return (-3, "space error")
                #result = self.xunlei.add_batch_task([url, ])
        else:
            url_type = "torrent"
            check = self.xunlei.torrent_upload
            add_task_with_info = self.xunlei.add_bt_task_with_dict
            url = (url['filename'], StringIO(url['body']))
         
        # get info
        if url_type in ("bt", "torrent", "magnet"):
            if isinstance(url, tuple):
                info = check(*url)
            else:
                info = check(url)
            if not info: return (-1, "check task error")
            if need_miaoxia and not info.get('cid'):
                return (-2, "need miaoxia")
            if need_miaoxia and not self.xunlei.is_miaoxia(info['cid'],
                    [x['index'] for x in info['filelist'] if x['valid']][-20:]):
                return (-2, "need miaoxia")
        else:
            if need_miaoxia and not self.xunlei.is_miaoxia(url):
                return (-2, "need miaoxia")
            info = check(url)

        # step 3: check info
        # for bt
        if 'filelist' in info:
            for each in info['filelist']:
                each['valid'] = 1
        # check cid
        if info['cid']:
            task = self.get_task_by_cid(info['cid'])
            if task.count() > 0:
                return (1, update_task(task[0]))
        # check is miaoxia

        # check title
        if title:
            info['title'] = title
        else:
            title = info['title']
        if not info['cid'] and \
                self.get_task_by_title(info['title']).count() > 0:
            info['title'] = "#%s %s" % (_random(), info['title'])

        # step 4: commit & fetch result
        result = add_task_with_info(url, info)
        if not result:
            return (0, "error")
        self._update_task_list(5)

        # step 5: checkout task&fix
        task = None
        if info['cid'] and not task:
            task = self.get_task_by_cid(info['cid']).first()
        if info['title'] and not task:
            task = self.get_task_by_title(info['title']).first()
        if url and isinstance(url, basestring) and not task:
            task = session.query(db.Task).filter(db.Task.url == url).first()
        if not task:
            return (-5, "match task error")

        if task:
            if title: task.taskname = title
            if tags: task.tags = tags
            task.creator = creator
            task.invalid = anonymous
            session.add(task)
            session.commit()
            _ = task.id
        return (1, task)
    def add_task(self, url, title=None, tags=set(), creator="", anonymous=False, need_miaoxia=True, verifycode=None, verifykey=None):
        session = Session()
        def update_task(task, title=title, tags=tags, creator=creator, anonymous=anonymous):
            if not task:
                return task
            if task.invalid and not anonymous:
                if title: task.taskname = title or "NULL"
                if tags: task.tags = tags
                task.creator = creator
                task.invalid = False
                session.add(task)
                session.commit()
                _ = task.id
            session.close()
            return task

        def _random():
            return random.randint(100, 999)

        # step 1: determin type
        if isinstance(url, basestring):
            url_unmasked = url_unmask(url)
            if not isinstance(url_unmasked, unicode):
                for each in ("utf8", "gbk", "shift_jis"):
                    try:
                        url = url_unmasked.decode(each)
                        break
                    except:
                        continue
            task = session.query(db.Task).filter(db.Task.url == url).first()
            if task:
                return (1, update_task(task))

            url_type = determin_url_type(url)
            if url_type in ("bt", "magnet"):
                check = self.xunlei.bt_task_check
                add_task_with_info = self.xunlei.add_bt_task_with_dict
            elif url_type in ("normal", "ed2k", "thunder"):
                check = self.xunlei.task_check
                add_task_with_info = self.xunlei.add_task_with_dict
            else:
                return (-3, "space error")
                #result = self.xunlei.add_batch_task([url, ])
        else:
            url_type = "torrent"
            check = self.xunlei.torrent_upload
            add_task_with_info = self.xunlei.add_bt_task_with_dict
            url = (url['filename'], StringIO(url['body']))

        # get info
        if url_type in ("bt", "torrent", "magnet"):
            if isinstance(url, tuple):
                info = check(*url)
            else:
                info = check(url)
            if not info: return (-1, "check task error")
            if need_miaoxia and not info.get('cid'):
                return (-2, "need miaoxia")
            if need_miaoxia and not self.xunlei.is_miaoxia(info['cid'],
                    [x['index'] for x in info['filelist'] if x['valid']][-20:]):
                return (-2, "need miaoxia")
        else:
            if need_miaoxia and not self.xunlei.is_miaoxia(url):
                return (-2, "need miaoxia")
            info = check(url)
            if not info:
                return (-3, "space error")

        # step 3: check info
        # for bt
        if 'filelist' in info:
            for each in info['filelist']:
                each['valid'] = 1
        # check cid
        if info.get('cid'):
            task = self.get_task_by_cid(info['cid'])
            if task.count() > 0:
                return (1, update_task(task[0]))

        # check title
        if title:
            info['title'] = title
        else:
            title = info.get('title', 'None')
        if not info['cid'] and self.get_task_by_title(info['title']).count() > 0:
            info['title'] = "lixian#%s@%s %s" % (_random(), self.time(), info['title'])

        # step 4: commit & fetch result
        result = add_task_with_info(url, info, verifycode, verifykey)
        if result:
            if result == -6: return (-6, "wrong verifycode")
            if result == -7: return (-7, "no verifycode")
        else:
            return (0, "error")
        self._update_task_list(5)

        # step 5: checkout task&fix
        task = None
        if info.get('cid') and not task:
            task = self.get_task_by_cid(info['cid']).first()
        if info.get('title') and not task:
            task = self.get_task_by_title(info['title']).first()
        if url and isinstance(url, basestring) and not task:
            task = session.query(db.Task).filter(db.Task.url == url).first()
        if not task:
            return (-5, "match task error")

        if task:
            if title: task.taskname = title
            if tags: task.tags = tags
            task.creator = creator
            task.invalid = anonymous
            if task.taskname is None:
                task.taskname = "None"
            session.add(task)
            session.commit()
            _ = task.id
        session.close()
        return (1, task)
Esempio n. 5
0
    def add_task(self,
                 url,
                 title=None,
                 tags=set(),
                 creator="",
                 anonymous=False,
                 need_miaoxia=True,
                 verifycode=None,
                 verifykey=None):
        session = Session()

        def update_task(task,
                        title=title,
                        tags=tags,
                        creator=creator,
                        anonymous=anonymous):
            if not task:
                return task
            if task.invalid and not anonymous:
                if title: task.taskname = title or "NULL"
                if tags: task.tags = tags
                task.creator = creator
                task.invalid = False
                session.add(task)
                session.commit()
                _ = task.id
            session.close()
            return task

        def _random():
            return random.randint(100, 999)

        # step 1: determin type
        if isinstance(url, basestring):
            url_unmasked = url_unmask(url)
            if not isinstance(url_unmasked, unicode):
                for each in ("utf8", "gbk", "shift_jis"):
                    try:
                        url = url_unmasked.decode(each)
                        break
                    except:
                        continue
            task = session.query(db.Task).filter(db.Task.url == url).first()
            if task:
                return (1, update_task(task))

            url_type = determin_url_type(url)
            if url_type in ("bt", "magnet"):
                check = self.xunlei.bt_task_check
                add_task_with_info = self.xunlei.add_bt_task_with_dict
            elif url_type in ("normal", "ed2k", "thunder"):
                check = self.xunlei.task_check
                add_task_with_info = self.xunlei.add_task_with_dict
            else:
                return (-3, "space error")
                #result = self.xunlei.add_batch_task([url, ])
        else:
            url_type = "torrent"
            check = self.xunlei.torrent_upload
            add_task_with_info = self.xunlei.add_bt_task_with_dict
            url = (url['filename'], StringIO(url['body']))

        # get info
        if url_type in ("bt", "torrent", "magnet"):
            if isinstance(url, tuple):
                info = check(*url)
            else:
                info = check(url)
            if not info: return (-1, "check task error")
            if need_miaoxia and not info.get('cid'):
                return (-2, "need miaoxia")
            if need_miaoxia and not self.xunlei.is_miaoxia(
                    info['cid'],
                [x['index'] for x in info['filelist'] if x['valid']][-20:]):
                return (-2, "need miaoxia")
        else:
            if need_miaoxia and not self.xunlei.is_miaoxia(url):
                return (-2, "need miaoxia")
            info = check(url)
            if not info:
                return (-3, "space error")

        # step 3: check info
        # for bt
        if 'filelist' in info:
            for each in info['filelist']:
                each['valid'] = 1
        # check cid
        if info.get('cid'):
            task = self.get_task_by_cid(info['cid'])
            if task.count() > 0:
                return (1, update_task(task[0]))

        # check title
        if title:
            info['title'] = title
        else:
            title = info.get('title', 'None')
        if not info['cid'] and self.get_task_by_title(
                info['title']).count() > 0:
            info['title'] = "lixian#%s@%s %s" % (_random(), self.time(),
                                                 info['title'])

        # step 4: commit & fetch result
        result = add_task_with_info(url, info, verifycode, verifykey)
        if result:
            if result == -6: return (-6, "wrong verifycode")
            if result == -7: return (-7, "no verifycode")
        else:
            return (0, "error")
        self._update_task_list(5)

        # step 5: checkout task&fix
        task = None
        if info.get('cid') and not task:
            task = self.get_task_by_cid(info['cid']).first()
        if info.get('title') and not task:
            task = self.get_task_by_title(info['title']).first()
        if url and isinstance(url, basestring) and not task:
            task = session.query(db.Task).filter(db.Task.url == url).first()
        if not task:
            return (-5, "match task error")

        if task:
            if title: task.taskname = title
            if tags: task.tags = tags
            task.creator = creator
            task.invalid = anonymous
            if task.taskname is None:
                task.taskname = "None"
            session.add(task)
            session.commit()
            _ = task.id
        session.close()
        return (1, task)
Esempio n. 6
0
    def add_task(self, url, title=None, tags=set(), creator="", anonymous=False, need_cid=True):
        session = Session()
        def update_task(task, title=title, tags=tags, creator=creator, anonymous=anonymous):
            if not task:
                return task
            if task.invalid and not anonymous:
                if title: task.taskname = title
                if tags: task.tags = tags
                task.creator = creator
                task.invalid = False
                session.add(task)
                session.commit()
                _ = task.id
            return task

        def _random():
            return random.randint(100, 999)

        # step 1: determin type
        if isinstance(url, basestring):
            task = session.query(db.Task).filter(db.Task.url == url).first()
            if task:
                return (1, update_task(task))

            url_type = determin_url_type(url)
            if url_type in ("bt", "magnet"):
                check = self.xunlei.bt_task_check
                add_task_with_info = self.xunlei.add_bt_task_with_dict
            elif url_type in ("normal", "ed2k", "thunder"):
                check = self.xunlei.task_check
                add_task_with_info = self.xunlei.add_task_with_dict
            else:
                return (-3, "space error")
                #result = self.xunlei.add_batch_task([url, ])

            # step 2: get info
            info = check(url)
        else:
            info = self.xunlei.torrent_upload(url['filename'], StringIO(url['body']))
            add_task_with_info = self.xunlei.add_bt_task_with_dict
            url = "bt://"+info.get('cid', "")

        # step 3: check info
        # check info
        if not info: return (-1, "check task error")
        # check cid
        if need_cid and not info['cid'] and url_type in ("normal", "thunder"):
            return (-2, "can't find cid")
        if info['cid']:
            task = self.get_task_by_cid(info['cid'])
            if task.count() > 0:
                return (1, update_task(task[0]))
        # check title
        if title:
            info['title'] = title
        else:
            title = info['title']
        if not info['cid'] and \
                self.get_task_by_title(info['title']).count() > 0:
            info['title'] = "#%s %s" % (_random(), info['title'])
        # for bt
        if "valid_list" in info:
            info["valid_list"] = ["1", ]*len(info["valid_list"])

        # step 4: commit & fetch result
        result = add_task_with_info(url, info)
        if not result:
            return (0, "error")
        self._update_task_list(5)

        # step 5: checkout task&fix
        if info['cid']:
            task = self.get_task_by_cid(info['cid']).first()
        elif info['title']:
            task = self.get_task_by_title(info['title']).first()
        else:
            task = None

        if task:
            if title: task.taskname = title
            if tags: task.tags = tags
            task.creator = creator
            task.invalid = anonymous
            session.add(task)
            session.commit()
            _ = task.id
        return (1, task)
Esempio n. 7
0
    def add_task(self, url, title=None, tags=set(), creator="", anonymous=False, need_miaoxia=True):
        session = Session()
        def update_task(task, title=title, tags=tags, creator=creator, anonymous=anonymous):
            if not task:
                return task
            if task.invalid and not anonymous:
                if title: task.taskname = title
                if tags: task.tags = tags
                task.creator = creator
                task.invalid = False
                session.add(task)
                session.commit()
                _ = task.id
            return task

        def _random():
            return random.randint(100, 999)

        # step 1: determin type
        if isinstance(url, basestring):
            task = session.query(db.Task).filter(db.Task.url == url).first()
            if task:
                return (1, update_task(task))

            url_type = determin_url_type(url)
            if url_type in ("bt", "magnet"):
                check = self.xunlei.bt_task_check
                add_task_with_info = self.xunlei.add_bt_task_with_dict
            elif url_type in ("normal", "ed2k", "thunder"):
                check = self.xunlei.task_check
                add_task_with_info = self.xunlei.add_task_with_dict
            else:
                return (-3, "space error")
                #result = self.xunlei.add_batch_task([url, ])
        else:
            url_type = "torrent"
            check = self.xunlei.torrent_upload
            add_task_with_info = self.xunlei.add_bt_task_with_dict
            url = (url['filename'], StringIO(url['body']))
         
        # get info
        if url_type in ("bt", "torrent", "magnet"):
            if isinstance(url, tuple):
                info = check(*url)
            else:
                info = check(url)
            if not info: return (-1, "check task error")
            if need_miaoxia and not info.get('cid'):
                return (-2, "need miaoxia")
            if need_miaoxia and not self.xunlei.is_miaoxia(info['cid'],
                    [x['index'] for x in info['filelist'] if x['valid']][-20:]):
                return (-2, "need miaoxia")
        else:
            if need_miaoxia and not self.xunlei.is_miaoxia(url):
                return (-2, "need miaoxia")
            info = check(url)

        # step 3: check info
        # for bt
        if 'filelist' in info:
            for each in info['filelist']:
                each['valid'] = 1
        # check cid
        if info['cid']:
            task = self.get_task_by_cid(info['cid'])
            if task.count() > 0:
                return (1, update_task(task[0]))
        # check is miaoxia

        # check title
        if title:
            info['title'] = title
        else:
            title = info['title']
        if not info['cid'] and \
                self.get_task_by_title(info['title']).count() > 0:
            info['title'] = "#%s %s" % (_random(), info['title'])

        # step 4: commit & fetch result
        result = add_task_with_info(url, info)
        if not result:
            return (0, "error")
        self._update_task_list(5)

        # step 5: checkout task&fix
        task = None
        if info['cid'] and not task:
            task = self.get_task_by_cid(info['cid']).first()
        if info['title'] and not task:
            task = self.get_task_by_title(info['title']).first()
        if url and isinstance(url, basestring) and not task:
            task = session.query(db.Task).filter(db.Task.url == url).first()
        if not task:
            return (-5, "match task error")

        if task:
            if title: task.taskname = title
            if tags: task.tags = tags
            task.creator = creator
            task.invalid = anonymous
            session.add(task)
            session.commit()
            _ = task.id
        return (1, task)