def api(request): user = request.user if not user: username = request.POST.get("username", "") password = request.POST.get("password", "") user = authenticate(username= username, password=password) if user is not None and user.has_perm("apps.add_task"): method = request.POST.get("method") if method == "create_task": task_data = request.POST.get("task", "") sites_data = request.POST.get("sites", "") try: task = Task(**json.loads(task_data)) task.user = user task.clean_fields() sites = [] sites_data = json.loads(sites_data) for site_data in sites_data: site = Site(**site_data) site.clean_fields(exclude=['task']) sites.append(site) task.save() for site in sites: site.task = task site.save() rule = Rule(**Constants.DEFAULT_RULE) rule.site = site rule.save() controller = TaskController(task) controller.runTask() ret = {"status":"ok", "task":task.id} except Exception, e: ret = {"status":"InputError", "error_details":str(e)} elif method == "run_task": try: id = request.POST.get("id") task = Task.objects.get(id=id) controller = TaskController(task) controller.runTask() ret = {"status":"ok"} except Exception, e: ret = {"status":"RunError", "error_details":str(e)}
def site(request, task_id, site_id): user = request.user site = Site.objects.select_related().get(id=site_id) task = site.task if task.user != user and not user.has_perm('apps.list_all_task'): raise PermissionDenied if request.method == 'POST': errors = {} data = {} if not user.has_perm("apps.change_site"): raise PermissionDenied method = request.POST['method'] if method == "save_site": if not user.has_perm("apps.add_rule"): raise PermissionDenied post_site = json.loads(request.POST['site']) post_rules = json.loads(request.POST['rules']) form = SiteForm(post_site, instance=site) if form.is_valid(): site = form.save() else: errors['site'] = form.errors for post_rule in post_rules: if post_rule.get('status', None) == "removed": if post_rule['id'].isdigit(): if not user.has_perm("apps.delete_rule"): raise PermissionDenied rule_id = int(post_rule['id']) try: rule = Rule.objects.get(id=rule_id) rule.delete() except Rule.DoesNotExist: errors['other'] = "not exist" continue else: continue if post_rule['id'].isdigit(): rule_ins = Rule.objects.get(id=int(post_rule['id'])) form = RuleForm(post_rule, instance=rule_ins) else: rule_ins = Rule() rule_ins.site = site form = RuleForm(post_rule, instance=rule_ins) if form.is_valid(): rule = form.save() else: errors[post_rule['id']] = { "cnName":post_rule['cnName'], "error":form.errors } elif method == "upload": controller = SiteController(site) file_type = request.POST['filetype'] data['filename'] = controller.save_upload_file(request.FILES['files[]'], file_type) return HttpResponse(json.dumps({"status":"ok", "errors":errors, "data":data})) else: all_rules = site.rules.all() rules_list = RuleListForm() rules_list.fields['rules'].choices = [(rule.id, rule.name) for rule in all_rules] rules = [{"rule":rule, "form":RuleForm(instance=rule)} for rule in all_rules] new_rule = RuleForm() form = SiteForm(instance=site) return render_to_response('site.html', { 'site':site, 'post_url':reverse("site", args=(task.pk, site.pk,)), 'form': form, 'rules_list':rules_list, 'rules':rules, 'new_rule':new_rule, 'task': task }, RequestContext(request))