Exemplo n.º 1
0
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)}
Exemplo n.º 2
0
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))