예제 #1
0
def index(request, obj_id=None):
    result = {}
    result['scripts'] = PigScript.objects.filter(saved=True, user=request.user)
    result['udfs'] = UDF.objects.all()
    if request.method == 'POST':
        form = PigScriptForm(request.POST)
        if not form.is_valid():
            raise PopupException(
                "".join(["%s: %s" % (field, error) for field, error in form.errors.iteritems()])
            )
        form.cleaned_data["arguments"] = "\t".join(request.POST.getlist("pigParams"))
        if "autosave" in request.session:
            del request.session['autosave']
        if request.POST.get("script_id"):
            instance = PigScript.objects.get(pk=request.POST['script_id'])
            args = request.POST.copy()
            args["arguments"] = "\t".join(request.POST.getlist("pigParams"))
            form = PigScriptForm(args, instance=instance)
            form.save()
        else:
            instance = PigScript(**form.cleaned_data)
            instance.user = request.user
            instance.save()
        return redirect(reverse("view_script", args=[instance.pk]))
    if not request.GET.get("new"):
        result.update(request.session.get("autosave", {}))

    #If we have obj_id, we renew or get instance to send it into form.
    if obj_id:
        instance = get_object_or_404(PigScript, pk=obj_id)
        for field in instance._meta.fields:
            result[field.name] = getattr(instance, field.name)
    return render('edit_script.mako', request, dict(result=result))
예제 #2
0
파일: views.py 프로젝트: maduhu/HDP-hue
def index(request, obj_id=None):
    result = {}
    result['scripts'] = PigScript.objects.filter(saved=True, user=request.user)
    result['udfs'] = UDF.objects.all()
    if request.method == 'POST':
        form = PigScriptForm(request.POST)
        if not form.is_valid():
            raise PopupException("".join([
                "%s: %s" % (field, error)
                for field, error in form.errors.iteritems()
            ]))
        form.cleaned_data["arguments"] = "\t".join(
            request.POST.getlist("pigParams"))
        if "autosave" in request.session:
            del request.session['autosave']
        if request.POST.get("script_id"):
            instance = PigScript.objects.get(pk=request.POST['script_id'])
            args = request.POST.copy()
            args["arguments"] = "\t".join(request.POST.getlist("pigParams"))
            form = PigScriptForm(args, instance=instance)
            form.save()
        else:
            instance = PigScript(**form.cleaned_data)
            instance.user = request.user
            instance.save()
        return redirect(reverse("view_script", args=[instance.pk]))
    if not request.GET.get("new"):
        result.update(request.session.get("autosave", {}))

    #If we have obj_id, we renew or get instance to send it into form.
    if obj_id:
        instance = get_object_or_404(PigScript, pk=obj_id)
        for field in instance._meta.fields:
            result[field.name] = getattr(instance, field.name)
    return render('edit_script.mako', request, dict(result=result))
예제 #3
0
파일: views.py 프로젝트: maduhu/HDP-hue
def start_job(request):
    if "autosave" in request.session:
        del request.session['autosave']
    t = Templeton(request.user.username)
    statusdir = "/tmp/.pigjobs/%s/%s_%s" % (
        request.user.username, request.POST['title'].lower().replace(
            " ", "_"), datetime.now().strftime("%s"))
    script_file = statusdir + "/script.pig"
    pig_script = request.POST['pig_script']
    pig_script = process_pig_script(pig_script, request, statusdir)
    _do_newfile_save(request.fs, script_file, pig_script, "utf-8")
    args = filter(bool, request.POST.getlist("pigParams"))
    job_type = Job.EXECUTE
    execute = None
    if request.POST.get("explain"):
        execute = "explain -script %s" % (request.fs.fs_defaultfs +
                                          script_file)
        job_type = Job.EXPLAINE
        script_file = None
    if request.POST.get("syntax_check"):
        args.append("-check")
        job_type = Job.SYNTAX_CHECK
    callback = request.build_absolute_uri("/pig/notify/$jobId/")
    LOG.debug(
        "User %s started pig job via webhcat: curl -s -d file=%s -d statusdir=%s -d callback=%s %s"
        % (request.user.username, script_file, statusdir, callback, "".join(
            ["-d arg=%s " % a for a in args])))
    job = t.pig_query(pig_file=script_file,
                      execute=execute,
                      statusdir=statusdir,
                      callback=callback,
                      arg=args)

    if request.POST.get("script_id"):
        script = PigScript.objects.get(pk=request.POST['script_id'])
    else:
        script = PigScript(user=request.user,
                           saved=False,
                           title=request.POST['title'])
    script.pig_script = request.POST['pig_script']
    script.python_script = request.POST['python_script']
    script.arguments = "\t".join(args)
    script.save()
    Job.objects.create(user=script.user,
                       job_id=job['id'],
                       statusdir=statusdir,
                       script_title=script.title,
                       job_type=job_type,
                       email_notification=bool(request.POST.get('email')))
    return HttpResponse(
        json.dumps({
            "job_id":
            job['id'],
            "text":
            "The Job <a href='%s' target='_blank'>%s</a> has been started successfully. <br>\
                You can always go back to <a href='%s'>Query History</a> for results after the run."
            % (reverse("single_job",
                       args=[job['id']]), job['id'], reverse("query_history"))
        }))
예제 #4
0
def start_job(request):
    if "autosave" in request.session:
        del request.session['autosave']
    t = Templeton(request.user.username)
    statusdir = "/tmp/.pigjobs/%s" % datetime.now().strftime("%s")
    script_file = statusdir + "/script.pig"
    pig_script = request.POST['pig_script']
    if request.POST.get("python_script"):
        pig_script = augmate_python_path(request.POST.get("python_script"), pig_script)
    pig_script = process_pig_script(pig_script, request)
    _do_newfile_save(request.fs, script_file, pig_script, "utf-8")
    job = t.pig_query(pig_file=script_file, statusdir=statusdir, callback=request.build_absolute_uri("/pig/notify/$jobId/"))

    if request.POST.get("script_id"):
        script = PigScript.objects.get(pk=request.POST['script_id'])
    else:
        script = PigScript(user=request.user, saved=False, title=request.POST['title'])
    script.pig_script = request.POST['pig_script']
    script.python_script = request.POST['python_script']
    script.save()
    Job.objects.create(job_id=job['id'],
                       statusdir=statusdir,
                       script=script,
                       email_notification=bool(request.POST['email']))
    return HttpResponse(
        json.dumps(
            {
                "job_id": job['id'],
                "text": "The Job <a href='%s' target='_blank'>%s</a> has been started successfully. <br>\
                You can always go back to <a href='%s'>Query History</a> for results after the run." % (
                    reverse("single_job", args=[job['id']]),
                    job['id'],
                    reverse("query_history")
                )
            }
        )
    )
예제 #5
0
def start_job(request):
    if "autosave" in request.session:
        del request.session['autosave']
    t = Templeton(request.user.username)
    statusdir = "/tmp/.pigjobs/%s/%s_%s" % (request.user.username, request.POST['title'].lower().replace(" ", "_"),  datetime.now().strftime("%s"))
    script_file = statusdir + "/script.pig"
    pig_script = request.POST['pig_script']
    pig_script = process_pig_script(pig_script, request, statusdir)
    _do_newfile_save(request.fs, script_file, pig_script, "utf-8")
    args = filter(bool, request.POST.getlist("pigParams"))
    job_type = Job.EXECUTE
    execute = None
    if request.POST.get("explain"):
        execute = "explain -script %s" % (request.fs.fs_defaultfs + script_file)
        job_type = Job.EXPLAINE
        script_file = None
    if request.POST.get("syntax_check"):
        args.append("-check")
        job_type = Job.SYNTAX_CHECK
    callback = request.build_absolute_uri("/pig/notify/$jobId/")
    LOG.debug("User %s started pig job via webhcat: curl -s -d file=%s -d statusdir=%s -d callback=%s %s" % (
        request.user.username, script_file, statusdir, callback, "".join(["-d arg=%s " % a for a in args])
    ))
    job = t.pig_query(pig_file=script_file, execute=execute, statusdir=statusdir, callback=callback, arg=args)

    if request.POST.get("script_id"):
        script = PigScript.objects.get(pk=request.POST['script_id'])
    else:
        script = PigScript(user=request.user, saved=False, title=request.POST['title'])
    script.pig_script = request.POST['pig_script']
    script.python_script = request.POST['python_script']
    script.arguments = "\t".join(args)
    script.save()
    Job.objects.create(user=script.user,
                       job_id=job['id'],
                       statusdir=statusdir,
                       script_title=script.title,
                       job_type=job_type,
                       email_notification=bool(request.POST.get('email')))
    return HttpResponse(
        json.dumps(
            {
                "job_id": job['id'],
                "text": "The Job <a href='%s' target='_blank'>%s</a> has been started successfully. <br>\
                You can always go back to <a href='%s'>Query History</a> for results after the run." % (
                    reverse("single_job", args=[job['id']]),
                    job['id'],
                    reverse("query_history")
                )
            }
        )
    )
예제 #6
0
def start_job(request):
    if "autosave" in request.session:
        del request.session['autosave']
    t = Templeton(request.user.username)
    statusdir = "/tmp/.pigjobs/%s" % datetime.now().strftime("%s")
    script_file = statusdir + "/script.pig"
    pig_script = request.POST['pig_script']
    if request.POST.get("python_script"):
        pig_script = augmate_python_path(request.POST.get("python_script"),
                                         pig_script)
    pig_script = process_pig_script(pig_script, request)
    _do_newfile_save(request.fs, script_file, pig_script, "utf-8")
    job = t.pig_query(
        pig_file=script_file,
        statusdir=statusdir,
        callback=request.build_absolute_uri("/pig/notify/$jobId/"))

    if request.POST.get("script_id"):
        script = PigScript.objects.get(pk=request.POST['script_id'])
    else:
        script = PigScript(user=request.user,
                           saved=False,
                           title=request.POST['title'])
    script.pig_script = request.POST['pig_script']
    script.python_script = request.POST['python_script']
    script.save()
    Job.objects.create(job_id=job['id'],
                       statusdir=statusdir,
                       script=script,
                       email_notification=bool(request.POST['email']))
    return HttpResponse(
        json.dumps({
            "job_id":
            job['id'],
            "text":
            "The Job <a href='%s' target='_blank'>%s</a> has been started successfully. <br>\
                You can always go back to <a href='%s'>Query History</a> for results after the run."
            % (reverse("single_job",
                       args=[job['id']]), job['id'], reverse("query_history"))
        }))