def test_from_message(self): us = "æØåveéðƒeæ" body = {"task": self.mytask.name, "id": uuid(), "args": [2], "kwargs": {us: "bar"}} m = Message( None, body=anyjson.dumps(body), backend="foo", content_type="application/json", content_encoding="utf-8" ) job = Request(m.decode(), message=m, app=self.app) self.assertIsInstance(job, Request) self.assertEqual(job.name, body["task"]) self.assertEqual(job.id, body["id"]) self.assertEqual(job.args, body["args"]) us = from_utf8(us) if sys.version_info < (2, 6): self.assertEqual(next(keys(job.kwargs)), us) self.assertIsInstance(next(keys(job.kwargs)), str)
def test_start(self): s, sh = self.get_service() schedule = s.scheduler.schedule assert isinstance(schedule, dict) assert isinstance(s.scheduler, beat.Scheduler) scheduled = list(schedule.keys()) for task_name in keys(sh[str('entries')]): assert task_name in scheduled s.sync() assert sh.closed assert sh.synced assert s._is_stopped.isSet() s.sync() s.stop(wait=False) assert s._is_shutdown.isSet() s.stop(wait=True) assert s._is_shutdown.isSet() p = s.scheduler._store s.scheduler._store = None try: s.scheduler.sync() finally: s.scheduler._store = p
def test_from_message(self): us = 'æØåveéðƒeæ' body = {'task': self.mytask.name, 'id': uuid(), 'args': [2], 'kwargs': {us: 'bar'}} m = Message(None, body=anyjson.dumps(body), backend='foo', content_type='application/json', content_encoding='utf-8') job = TaskRequest.from_message(m, m.decode(), app=self.app) self.assertIsInstance(job, Request) self.assertEqual(job.name, body['task']) self.assertEqual(job.id, body['id']) self.assertEqual(job.args, body['args']) us = from_utf8(us) if sys.version_info < (2, 6): self.assertEqual(next(keys(job.kwargs)), us) self.assertIsInstance(next(keys(job.kwargs)), str)
def test_start(self): s, sh = self.get_service() schedule = s.scheduler.schedule self.assertIsInstance(schedule, dict) self.assertIsInstance(s.scheduler, beat.Scheduler) scheduled = list(schedule.keys()) for task_name in keys(sh['entries']): self.assertIn(task_name, scheduled) s.sync() self.assertTrue(sh.closed) self.assertTrue(sh.synced) self.assertTrue(s._is_stopped.isSet()) s.sync() s.stop(wait=False) self.assertTrue(s._is_shutdown.isSet()) s.stop(wait=True) self.assertTrue(s._is_shutdown.isSet()) p = s.scheduler._store s.scheduler._store = None try: s.scheduler.sync() finally: s.scheduler._store = p
def test_pending_configuration__iter(self): with self.Celery(broker='foo://bar') as app: app.conf.worker_agent = 'foo:Bar' assert not app.configured assert list(keys(app.conf)) assert app.configured assert 'worker_agent' in app.conf assert dict(app.conf)
def test_pending_configuration__iter(self): with self.Celery(broker='foo://bar') as app: app.conf.worker_agent = 'foo:Bar' self.assertFalse(app.configured) self.assertTrue(list(keys(app.conf))) self.assertFalse(app.configured) self.assertIn('worker_agent', app.conf) self.assertFalse(app.configured) self.assertTrue(dict(app.conf)) self.assertTrue(app.configured)
def detect_settings(conf, preconf={}, ignore_keys=set(), prefix=None, all_keys=SETTING_KEYS, old_keys=_OLD_SETTING_KEYS): source = conf if conf is None: source, conf = preconf, {} have = set(keys(source)) - ignore_keys is_in_new = have.intersection(all_keys) is_in_old = have.intersection(old_keys) info = None if is_in_new: # have new setting names info, left = _settings_info, is_in_old if is_in_old and len(is_in_old) > len(is_in_new): # Majority of the settings are old. info, left = _old_settings_info, is_in_new if is_in_old: # have old setting names, or a majority of the names are old. if not info: info, left = _old_settings_info, is_in_new if is_in_new and len(is_in_new) > len(is_in_old): # Majority of the settings are new info, left = _settings_info, is_in_old else: # no settings, just use new format. info, left = _settings_info, is_in_old if prefix: # always use new format if prefix is used. info, left = _settings_info, set() # only raise error for keys that the user didn't provide two keys # for (e.g., both ``result_expires`` and ``CELERY_TASK_RESULT_EXPIRES``). really_left = {key for key in left if info.convert[key] not in have} if really_left: # user is mixing old/new, or new/old settings, give renaming # suggestions. raise ImproperlyConfigured( info.mix_error.format(renames='\n'.join( FMT_REPLACE_SETTING.format(replace=key, with_=info.convert[key]) for key in sorted(really_left)))) preconf = {info.convert.get(k, k): v for k, v in items(preconf)} defaults = dict(deepcopy(info.defaults), **preconf) return Settings( preconf, [conf, defaults], (_old_key_to_new, _new_key_to_old), prefix=prefix, )
def task_view(request): if request.method == "GET": try: workList = WorkerState.objects.all() regTaskList = [] for task in list(keys(cTasks)): if task.startswith('OpsManage.tasks.ansible') or task.startswith('OpsManage.tasks.assets.sched'): regTaskList.append(task) except Exception, ex: print ex taskLog = [] return render(request,'task/task_view.html', {"user":request.user,"regTaskList":regTaskList,"workList":workList}, )
def task_view(request): if request.method == "GET": try: workList = WorkerState.objects.all() regTaskList = [] for task in list(keys(cTasks)): if task.startswith('OpsManage.tasks.ansible') or task.startswith('OpsManage.tasks.sched'): regTaskList.append(task) except Exception, ex: logger.warn(msg="获取Celery Task失败: {ex}".format(ex=str(ex))) taskLog = [] return render(request,'task/task_view.html', {"user":request.user,"regTaskList":regTaskList,"workList":workList}, )
def task_view(request): if request.method == "GET": try: workList = WorkerState.objects.all() regTaskList = [] for task in list(keys(cTasks)): if task.startswith('OpsManage.tasks.ansible') or task.startswith('OpsManage.tasks.sched'): regTaskList.append(task) except Exception, ex: print ex taskLog = [] return render(request,'task/task_view.html', {"user":request.user,"regTaskList":regTaskList,"workList":workList}, )
def detect_settings( conf, preconf={}, ignore_keys=set(), prefix=None, all_keys=SETTING_KEYS, old_keys=_OLD_SETTING_KEYS ): source = conf if conf is None: source, conf = preconf, {} have = set(keys(source)) - ignore_keys is_in_new = have.intersection(all_keys) is_in_old = have.intersection(old_keys) info = None if is_in_new: # have new setting names info, left = _settings_info, is_in_old if is_in_old and len(is_in_old) > len(is_in_new): # Majority of the settings are old. info, left = _old_settings_info, is_in_new if is_in_old: # have old setting names, or a majority of the names are old. if not info: info, left = _old_settings_info, is_in_new if is_in_new and len(is_in_new) > len(is_in_old): # Majority of the settings are new info, left = _settings_info, is_in_old else: # no settings, just use new format. info, left = _settings_info, is_in_old if prefix: # always use new format if prefix is used. info, left = _settings_info, set() # only raise error for keys that the user didn't provide two keys # for (e.g., both ``result_expires`` and ``CELERY_TASK_RESULT_EXPIRES``). really_left = {key for key in left if info.convert[key] not in have} if really_left: # user is mixing old/new, or new/old settings, give renaming # suggestions. raise ImproperlyConfigured( info.mix_error.format( renames="\n".join( FMT_REPLACE_SETTING.format(replace=key, with_=info.convert[key]) for key in sorted(really_left) ) ) ) preconf = {info.convert.get(k, k): v for k, v in items(preconf)} defaults = dict(deepcopy(info.defaults), **preconf) return Settings(preconf, [conf, defaults], (_old_key_to_new, _new_key_to_old), prefix=prefix)
def test_from_message(self): us = 'æØåveéðƒeæ' body = { 'task': self.mytask.name, 'id': uuid(), 'args': [2], 'kwargs': { us: 'bar' } } m = Message(None, body=anyjson.dumps(body), backend='foo', content_type='application/json', content_encoding='utf-8') job = Request(m.decode(), message=m, app=self.app) self.assertIsInstance(job, Request) self.assertEqual(job.name, body['task']) self.assertEqual(job.id, body['id']) self.assertEqual(job.args, body['args']) us = from_utf8(us) if sys.version_info < (2, 6): self.assertEqual(next(keys(job.kwargs)), us) self.assertIsInstance(next(keys(job.kwargs)), str)
def task_model(request): if request.method == "GET": # 获取注册的任务 regTaskList = [] for task in list(keys(cTasks)): if task.startswith('OpsManage.tasks.ansible') or task.startswith( 'OpsManage.tasks.sched'): regTaskList.append(task) try: crontabList = CrontabSchedule.objects.all().order_by("-id") intervalList = IntervalSchedule.objects.all().order_by("-id") taskList = PeriodicTask.objects.all().order_by("-id") playbookList = Ansible_Playbook.objects.all() newtaskList = [] for item in taskList: if item.kwargs.find('playbook_id') == -1: continue kwargs = json.loads(item.kwargs) playbook_id = kwargs["playbook_id"] playbook = Ansible_Playbook.objects.get(id=int(playbook_id)) task = { 'id': item.id, 'name': item.name, 'task': item.task, 'last_run_at': item.last_run_at, 'total_run_count': item.total_run_count, 'enabled': item.enabled, 'crontab_id': item.crontab_id, 'interval_id': item.interval_id, 'expires': item.expires, 'playbook_name': playbook.playbook_name, } newtaskList.append(task) except: crontabList = [] intervalList = [] newtaskList = [] return render( request, 'crontask/task_model.html', { "user": request.user, "crontabList": crontabList, "intervalList": intervalList, "taskList": newtaskList, "regTaskList": regTaskList, "playbookList": playbookList })
def run(self, force=False, queues=None, exclude_queues=None, **kwargs): queues = set(text.str_to_list(queues or [])) exclude = set(text.str_to_list(exclude_queues or [])) names = (queues or set(keys(self.app.amqp.queues))) - exclude qnum = len(names) messages = None if names: if not force: self.out(self.warn_prelude.format( warning=self.colored.red('WARNING'), queues=text.pluralize(qnum, 'queue'), names=', '.join(sorted(names)), )) if self.ask(self.warn_prompt, ('yes', 'no'), 'no') != 'yes': return with self.app.connection_for_write() as conn: messages = sum(self._purge(conn, queue) for queue in names) fmt = self.fmt_purged if messages else self.fmt_empty self.out(fmt.format( mnum=messages, qnum=qnum, messages=text.pluralize(messages, 'message'), queues=text.pluralize(qnum, 'queue')))
def run(self, force=False, queues=None, exclude_queues=None, **kwargs): queues = set(str_to_list(queues or [])) exclude = set(str_to_list(exclude_queues or [])) names = (queues or set(keys(self.app.amqp.queues))) - exclude qnum = len(names) messages = None if names: if not force: self.out(self.warn_prelude.format( warning=self.colored.red('WARNING'), queues=text.pluralize(qnum, 'queue'), names=', '.join(sorted(names)), )) if self.ask(self.warn_prompt, ('yes', 'no'), 'no') != 'yes': return with self.app.connection_for_write() as conn: messages = sum(self._purge(conn, queue) for queue in names) fmt = self.fmt_purged if messages else self.fmt_empty self.out(fmt.format( mnum=messages, qnum=qnum, messages=text.pluralize(messages, 'message'), queues=text.pluralize(qnum, 'queue')))
def task_model(request): if request.method == "GET": # 获取注册的任务 regTaskList = [] for task in list(keys(cTasks)): if task.startswith('OMBA.tasks.ansible') or task.startswith( 'OMBA.tasks.sched'): regTaskList.append(task) try: crontabList = CrontabSchedule.objects.all().order_by("-id") intervalList = IntervalSchedule.objects.all().order_by("-id") taskList = PeriodicTask.objects.all().order_by("-id") except: crontabList = [] intervalList = [] taskList = [] return render( request, 'task/task_model.html', { "user": request.user, "crontabList": crontabList, "intervalList": intervalList, "taskList": taskList, "regTaskList": regTaskList }) elif request.method == "POST": op = request.POST.get('op') if op in [ 'addCrontab', 'delCrontab', 'addInterval', 'delInterval', 'addTask', 'editTask', 'delTask' ] and request.user.has_perm('djcelery.change_periodictask'): if op == 'addCrontab': try: CrontabSchedule.objects.create( minute=request.POST.get('minute'), hour=request.POST.get('hour'), day_of_week=request.POST.get('day_of_week'), day_of_month=request.POST.get('day_of_month'), month_of_year=request.POST.get('month_of_year'), ) return JsonResponse({ "code": 200, "data": None, "msg": "添加成功" }) except: return JsonResponse({ "code": 500, "data": None, "msg": "添加失败" }) elif op == 'delCrontab': try: CrontabSchedule.objects.get( id=request.POST.get('id')).delete() return JsonResponse({ "code": 200, "data": None, "msg": "删除成功" }) except: return JsonResponse({ "code": 500, "data": None, "msg": "删除失败" }) elif op == 'addInterval': try: IntervalSchedule.objects.create( every=request.POST.get('every'), period=request.POST.get('period')) return JsonResponse({ "code": 200, "data": None, "msg": "添加成功" }) except: return JsonResponse({ "code": 500, "data": None, "msg": "添加失败" }) elif op == 'delInterval': try: IntervalSchedule.objects.get( id=request.POST.get('id')).delete() return JsonResponse({ "code": 200, "data": None, "msg": "删除成功" }) except: return JsonResponse({ "code": 500, "data": None, "msg": "删除失败" }) elif op == 'addTask': try: PeriodicTask.objects.create( name=request.POST.get('name'), interval_id=request.POST.get('interval', None), task=request.POST.get('task', None), crontab_id=request.POST.get('crontab', None), args=request.POST.get('args', '[]'), kwargs=request.POST.get('kwargs', '{}'), queue=request.POST.get('queue', None), enabled=int(request.POST.get('enabled', 1)), expires=request.POST.get('expires', None)) return JsonResponse({ "code": 200, "data": None, "msg": "添加成功" }) except Exception, e: return JsonResponse({ "code": 500, "data": str(e), "msg": "添加失败" }) elif op == 'delTask': try: PeriodicTask.objects.get( id=request.POST.get('id')).delete() return JsonResponse({ "code": 200, "data": None, "msg": "删除成功" }) except: return JsonResponse({ "code": 500, "data": None, "msg": "删除失败" }) elif op == 'editTask': try: task = PeriodicTask.objects.get(id=request.POST.get('id')) task.name = request.POST.get('name') task.interval_id = request.POST.get('interval', None) task.crontab_id = request.POST.get('crontab', None) task.args = request.POST.get('args') task.kwargs = request.POST.get('kwargs') task.queue = request.POST.get('queue', None) task.expires = request.POST.get('expires', None) task.enabled = int(request.POST.get('enabled')) task.save() return JsonResponse({ "code": 200, "data": None, "msg": "修改成功" }) except Exception, e: return JsonResponse({ "code": 500, "data": str(e), "msg": "修改失败" })
def test_deselect(self): q = Queues() q.select(['foo', 'bar']) q.deselect('bar') assert sorted(keys(q._consume_from)) == ['foo']
def configTask(request): if request.method == "GET": #获取注册的任务 regTaskList = [] for task in list(keys(tasks)): if task.startswith('VManagePlatform'): regTaskList.append(task) try: crontabList = CrontabSchedule.objects.all().order_by("-id") intervalList = IntervalSchedule.objects.all().order_by("-id") taskList = PeriodicTask.objects.all().order_by("-id") except: crontabList = [] intervalList = [] taskList = [] return render_to_response('vmTasks/config_task.html', { "user": request.user, "localtion": [{ "name": "首页", "url": '/' }, { "name": "任务调度", "url": '#' }, { "name": "配置中心", "url": "/configTask" }], "crontabList": crontabList, "intervalList": intervalList, "taskList": taskList, "regTaskList": regTaskList }, context_instance=RequestContext(request)) elif request.method == "POST": op = request.POST.get('op') if op in [ 'addCrontab', 'delCrontab', 'addInterval', 'delInterval', 'addTask', 'editTask', 'delTask' ] and request.user.has_perm('djcelery.change_periodictask'): if op == 'addCrontab': try: CrontabSchedule.objects.create( minute=request.POST.get('minute'), hour=request.POST.get('hour'), day_of_week=request.POST.get('day_of_week'), day_of_month=request.POST.get('day_of_month'), month_of_year=request.POST.get('month_of_year'), ) return JsonResponse({ "code": 200, "data": None, "msg": "添加成功" }) except: return JsonResponse({ "code": 500, "data": None, "msg": "添加失败" }) elif op == 'delCrontab': try: CrontabSchedule.objects.get( id=request.POST.get('id')).delete() return JsonResponse({ "code": 200, "data": None, "msg": "删除成功" }) except: return JsonResponse({ "code": 500, "data": None, "msg": "删除失败" }) elif op == 'addInterval': try: IntervalSchedule.objects.create( every=request.POST.get('every'), period=request.POST.get('period')) return JsonResponse({ "code": 200, "data": None, "msg": "添加成功" }) except: return JsonResponse({ "code": 500, "data": None, "msg": "添加失败" }) elif op == 'delInterval': try: IntervalSchedule.objects.get( id=request.POST.get('id')).delete() return JsonResponse({ "code": 200, "data": None, "msg": "删除成功" }) except: return JsonResponse({ "code": 500, "data": None, "msg": "删除失败" }) elif op == 'addTask': try: PeriodicTask.objects.create( name=request.POST.get('name'), interval_id=request.POST.get('interval', None), task=request.POST.get('task', None), crontab_id=request.POST.get('crontab', None), args=request.POST.get('args', '[]'), kwargs=request.POST.get('kwargs', '{}'), queue=request.POST.get('queue', None), enabled=int(request.POST.get('enabled', 1)), expires=request.POST.get('expires', None)) return JsonResponse({ "code": 200, "data": None, "msg": "添加成功" }) except Exception, e: return JsonResponse({ "code": 500, "data": e, "msg": "添加失败" }) elif op == 'delTask': try: PeriodicTask.objects.get( id=request.POST.get('id')).delete() return JsonResponse({ "code": 200, "data": None, "msg": "删除成功" }) except: return JsonResponse({ "code": 500, "data": None, "msg": "删除失败" }) elif op == 'editTask': try: task = PeriodicTask.objects.get(id=request.POST.get('id')) task.name = request.POST.get('name') task.interval_id = request.POST.get('interval', None) task.crontab_id = request.POST.get('crontab', None) task.args = request.POST.get('args') task.kwargs = request.POST.get('kwargs') task.queue = request.POST.get('queue', None) task.expires = request.POST.get('expires', None) task.enabled = int(request.POST.get('enabled')) task.save() return JsonResponse({ "code": 200, "data": None, "msg": "修改成功" }) except Exception, e: return JsonResponse({ "code": 500, "data": e, "msg": "修改失败" })
stack.append((ns + key + '_', opt)) else: for ret in keyfilter(ns, key, opt): yield ret DEFAULTS = { key: opt.default for key, opt in flatten(NAMESPACES) } __compat = list(flatten(NAMESPACES, keyfilter=_to_compat)) _OLD_DEFAULTS = {old_key: opt.default for old_key, _, opt in __compat} _TO_OLD_KEY = {new_key: old_key for old_key, new_key, _ in __compat} _TO_NEW_KEY = {old_key: new_key for old_key, new_key, _ in __compat} __compat = None SETTING_KEYS = set(keys(DEFAULTS)) _OLD_SETTING_KEYS = set(keys(_TO_NEW_KEY)) def find_deprecated_settings(source): # pragma: no cover from celery.utils import deprecated for name, opt in flatten(NAMESPACES): if (opt.deprecate_by or opt.remove_by) and getattr(source, name, None): deprecated.warn(description='The {0!r} setting'.format(name), deprecation=opt.deprecate_by, removal=opt.remove_by, alternative='Use the {0.alt} instead'.format(opt)) return source @memoize(maxsize=None)
def _iterate_keys(self): # userdict.keys in py3k calls __getitem__ with self.mutex: return keys(self.data)
def task_model(request): if request.method == "GET": #获取注册的任务 regTaskList = [] for task in list(keys(cTasks)): if task.startswith('OpsManage.tasks.ansible') or task.startswith('OpsManage.tasks.sched'): regTaskList.append(task) try: crontabList = CrontabSchedule.objects.all().order_by("-id") intervalList = IntervalSchedule.objects.all().order_by("-id") taskList = PeriodicTask.objects.all().order_by("-id") except: crontabList = [] intervalList = [] taskList = [] return render(request,'task/task_model.html',{"user":request.user,"crontabList":crontabList, "intervalList":intervalList,"taskList":taskList, "regTaskList":regTaskList}) elif request.method == "POST": op = request.POST.get('op') if op in ['addInterval','delInterval','addTask','editTask','delTask'] and request.user.has_perm('djcelery.change_periodictask'): if op == 'addInterval': try: IntervalSchedule.objects.create(every=request.POST.get('every'),period=request.POST.get('period')) return JsonResponse({"code":200,"data":None,"msg":"添加成功"}) except: return JsonResponse({"code":500,"data":None,"msg":"添加失败"}) elif op == 'delInterval': try: IntervalSchedule.objects.get(id=request.POST.get('id')).delete() return JsonResponse({"code":200,"data":None,"msg":"删除成功"}) except: return JsonResponse({"code":500,"data":None,"msg":"删除失败"}) elif op == 'addTask': try: PeriodicTask.objects.create(name=request.POST.get('name'), interval_id=request.POST.get('interval',None), task=request.POST.get('task',None), crontab_id=request.POST.get('crontab',None), args = request.POST.get('args','[]'), kwargs = request.POST.get('kwargs','{}'), queue = request.POST.get('queue',None), enabled = int(request.POST.get('enabled',1)), expires = request.POST.get('expires',None) ) return JsonResponse({"code":200,"data":None,"msg":"添加成功"}) except Exception,e: return JsonResponse({"code":500,"data":str(e),"msg":"添加失败"}) elif op == 'delTask': try: PeriodicTask.objects.get(id=request.POST.get('id')).delete() return JsonResponse({"code":200,"data":None,"msg":"删除成功"}) except: return JsonResponse({"code":500,"data":None,"msg":"删除失败"}) elif op == 'editTask': try: task = PeriodicTask.objects.get(id=request.POST.get('id')) task.name = request.POST.get('name') task.interval_id = request.POST.get('interval',None) task.crontab_id = request.POST.get('crontab',None) task.args = request.POST.get('args') task.kwargs = request.POST.get('kwargs') task.queue = request.POST.get('queue',None) task.expires = request.POST.get('expires',None) task.enabled = int(request.POST.get('enabled')) task.save() return JsonResponse({"code":200,"data":None,"msg":"修改成功"}) except Exception,e: return JsonResponse({"code":500,"data":str(e),"msg":"修改失败"})
def test_select_add(self): q = Queues() q.select(["foo", "bar"]) q.select_add("baz") assert sorted(keys(q._consume_from)) == ["bar", "baz", "foo"]
def test_deselect(self): q = Queues() q.select(["foo", "bar"]) q.deselect("bar") self.assertItemsEqual(keys(q._consume_from), ["foo"])
def test_select_add(self): q = Queues() q.select(["foo", "bar"]) q.select_add("baz") self.assertItemsEqual(keys(q._consume_from), ["foo", "bar", "baz"])
def keys(self): # userdict.keys in py3k calls __getitem__ return keys(self.data)
def registered_tasks(request): """View returning all defined tasks as a JSON object.""" return JsonResponse({'regular': list(keys(tasks)), 'periodic': ''})
def _LRUkey(self): # type: () -> Any # return value of od.keys does not support __next__, # but this version will also not create a copy of the list. return next(iter(keys(self)))
def test_select_remove(self): q = Queues() q.select_subset(["foo", "bar"]) q.select_remove("bar") self.assertItemsEqual(keys(q._consume_from), ["foo"])
def task_view(request): if request.method == "GET": try: workList = WorkerState.objects.all() regTaskList = [] for task in list(keys(cTasks)): if task.startswith('ConfManage.tasks.cron') or task.startswith( 'ConfManage.tasks.sched'): regTaskList.append(task) except Exception as ex: logger.warn(msg="获取Celery Task失败: {ex}".format(ex=str(ex))) taskLog = [] return render( request, 'task/task_view.html', { "user": request.user, "regTaskList": regTaskList, "workList": workList }, ) elif request.method == "POST": op = request.POST.get('op') if op in ['view', 'delete', 'kill' ] and request.user.has_perm('djcelery.change_taskstate'): try: task = {} for ds in PeriodicTask.objects.all(): task[ds.task] = ds.name taskLog = TaskState.objects.get(id=request.POST.get('id')) except: return JsonResponse({ "code": 500, "data": None, "msg": "任务不存在" }) if op == 'view': try: data = dict() work = WorkerState.objects.get(id=taskLog.worker_id) data['id'] = taskLog.id data['task_id'] = taskLog.task_id data['worker'] = work.hostname if task.has_key(taskLog.name): data['name'] = task[taskLog.name] else: data['name'] = taskLog.name data['tstamp'] = taskLog.tstamp data['args'] = taskLog.args.replace('[u', '[') data['kwargs'] = taskLog.kwargs.replace('u\'', '\'') data['result'] = taskLog.result data['state'] = taskLog.state data['runtime'] = taskLog.runtime return JsonResponse({ "code": 200, "data": data, "msg": "操作成功" }) except Exception as ex: logger.warn(msg="查看Celery Task运行日志失败: {ex}".format( ex=str(ex))) return JsonResponse({ "code": 500, "data": None, "msg": "日志查看失败。" }) elif op == 'delete': try: taskLog.delete() return JsonResponse({ "code": 200, "data": None, "msg": "删除成功" }) except Exception as ex: return JsonResponse({ "code": 500, "data": ex, "msg": "日志删除失败" }) elif op == 'kill': try: revoke(taskLog.task_id, terminate=True) return JsonResponse({ "code": 200, "data": None, "msg": "任务终止成功" }) except Exception as ex: logger.warn(msg="终止任务失败: {ex}".format(ex=str(ex))) return JsonResponse({ "code": 500, "data": ex, "msg": "任务终止成功" }) else: return JsonResponse({ "code": 500, "data": "终止任务失败: {ex}".format(ex=str(ex)), "msg": "不支持的操作或者您没有权限操作操作此项。" }) else: return JsonResponse({"code": 500, "data": None, "msg": "不支持的HTTP操作"})
def _iterate_keys(self): # userdict.keys in py3k calls __getitem__ return keys(self.data)
def test_select_add(self): q = Queues() q.select(['foo', 'bar']) q.select_add('baz') assert sorted(keys(q._consume_from)) == ['bar', 'baz', 'foo']
def test_deselect(self): q = Queues() q.select(["foo", "bar"]) q.deselect("bar") assert sorted(keys(q._consume_from)) == ["foo"]
def test_select_add(self): q = Queues() q.select(['foo', 'bar']) q.select_add('baz') self.assertItemsEqual(keys(q._consume_from), ['foo', 'bar', 'baz'])
def test_deselect(self): q = Queues() q.select(['foo', 'bar']) q.deselect('bar') self.assertItemsEqual(keys(q._consume_from), ['foo'])
def test_select_remove(self): q = Queues() q.select_subset(['foo', 'bar']) q.select_remove('bar') self.assertItemsEqual(keys(q._consume_from), ['foo'])