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
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)
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)
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)
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)