def sub_id_processor(base, x): m = re.match(r'^#?(\d+)/([-.\w\[\],\s*]+)$', x) if not m: return task_id, sub_id = m.groups() task = base.find_task_by_id(task_id) if not task: return import lixian_encoding assert task['type'] == 'bt', 'task %s is not a bt task' % lixian_encoding.to_native(task['name']) subs = [] if re.match(r'\[.*\]', sub_id): for sub_id in re.split(r'\s*,\s*', sub_id[1:-1]): assert re.match(r'^\d+(-\d+)?|\.\w+$', sub_id), sub_id if sub_id.startswith('.'): subs.append(sub_id) elif '-' in sub_id: start, end = map(int, sub_id.split('-')) r = range(start, end+1) if start <= end else reversed(range(end, start+1)) for i in r: subs.append(str(i)) else: assert re.match(r'^\d+$', sub_id), sub_id subs.append(sub_id) elif re.match(r'^\.\w+$', sub_id): subs.append(sub_id) elif sub_id == '*': subs.append(sub_id) else: assert re.match(r'^\d+$', sub_id), sub_id subs.append(sub_id) return SubTaskQuery(base, task, subs)
def sub_id_processor(base, x): x = lixian_encoding.from_native(x) m = re.match(r'^(\d+)/(.+)$', x) if not m: return task_id, sub_id = m.groups() task = base.find_task_by_id(task_id) if not task: return assert task['type'] == 'bt', 'task %s is not a bt task' % lixian_encoding.to_native(task['name']) files = base.get_files(task) import lixian_filter_expr files = lixian_filter_expr.filter_expr(files, sub_id) subs = [x for x in files] return SubTaskQuery(base, task, subs)
def usage(doc=lixian_help.usage, message=None): if hasattr(doc, '__call__'): doc = doc() if message: print to_native(message) print to_native(doc).strip()
def get_task_by_url(self, url): t = self.find_task_by_url(url) if not t: raise Exception('No task found for ' + lixian_encoding.to_native(url)) return t