示例#1
0
def task_form_page(request, application_id=None, task_id=None):
    data = get_common_page_data(request)
    if task_id:
        task = get_object_or_404(Task, pk=task_id)
        application = task.application
        data['task'] = task
        args = {}
    elif application_id:
        application = get_object_or_404(Application, pk=application_id)
        args = {'application_id': application_id}
    form, form_parameters, form_commands = create_forms(request, task_id, args)

    if request.method == 'POST':
        if form.is_valid() and form_parameters.is_valid(
        ) and form_commands.is_valid():
            task = form.save(commit=False)
            task.save()
            data['task'] = task
            task_save_formset(form_parameters, task)
            task_save_formset(form_commands, task)
            if task_id == None:
                return redirect(task.get_absolute_url())
            request.method = 'GET'
            form, form_parameters, form_commands = create_forms(
                request, task_id, args)
            request.method = 'POST'

    data['application'] = application
    data['is_new'] = task_id == None
    data['request'] = request
    data['form'] = form
    data['form_parameters'] = form_parameters
    data['form_commands'] = form_commands
    data['server_roles'] = ServerRole.objects.all()
    return render(request, 'page/task_form.html', data)
示例#2
0
def modal_permissions(request, id):
    user = get_object_or_404(get_user_model(), pk=id)
    data = get_common_page_data(request)
    data['user'] = user
    data['form_template'] = 'partial/permissions_form.html'
    data['model_name'] = '%s permissions' % user.name
    data['is_new'] = False
    data['no_delete'] = True
    data['request_path'] = request.path

    data['departments'] = Department.objects.all()

    from core.models import Application, Environment
    from task.models import Task

    models = {
        'department': Department,
        'application': Application,
        'environment': Environment,
        'task': Task,
    }
    if request.method == 'POST':
        from guardian.models import UserObjectPermission
        from guardian.shortcuts import assign_perm

        UserObjectPermission.objects.filter(user_id=user.id).delete()
        for name, value in request.POST.items():
            key = name.split('_')
            if len(key) == 3 and value == 'on':
                action, model, pk = key
                assign_perm('%s_%s' % (action, model), user, models[model].objects.get(pk=pk))
        return render(request, data['form_template'], data)
    else:
        return render(request, 'partial/modal_form.html', data)
示例#3
0
def task_form_page(request, application_id=None, task_id=None):
    data = get_common_page_data(request)
    if task_id:
        task = get_object_or_404(Task, pk=task_id)
        application = task.application
        data['task'] = task
        args = {}
    elif application_id:
        application = get_object_or_404(Application, pk=application_id)
        args = {'application_id': application_id}
    form, form_parameters, form_commands = create_forms(request, task_id, args)

    if request.method == 'POST':
        if form.is_valid() and form_parameters.is_valid() and form_commands.is_valid():
            task = form.save(commit=False)
            task.save()
            data['task'] = task
            task_save_formset(form_parameters, task)
            task_save_formset(form_commands, task)
            if task_id == None:
                return redirect(task.get_absolute_url())
            request.method = 'GET'
            form, form_parameters, form_commands = create_forms(request, task_id, args)
            request.method = 'POST'

    data['application'] = application
    data['is_new'] = task_id == None
    data['request'] = request
    data['form'] = form
    data['form_parameters'] = form_parameters
    data['form_commands'] = form_commands
    data['server_roles'] = ServerRole.objects.all()
    data['global_parameters'] = ParameterParser.global_parameters.items()
    return render(request, 'page/task_form.html', data)
示例#4
0
def task_execute_page(request, task_id, environment_id=None):
    data = get_common_page_data(request)
    task = get_object_or_404(Task, pk=task_id)
    data['task'] = task
    if environment_id:
        environment = get_object_or_404(Environment, pk=int(environment_id))
        data['environment'] = environment
        if task.application.id != environment.application.id:
            raise ValueError(
                'task.application.id did not match with environment.application.id'
            )

    if request.method == 'POST':
        parameter_prefix = 'parameter-'
        parameters = {}
        for name, value in request.POST.items():
            if name.startswith(parameter_prefix):
                name = name[len(parameter_prefix):]
                parameters[name] = value

        # @todo validate parameter names

        environment = get_object_or_404(Environment,
                                        pk=int(parameters['environment']))
        if task.application.id != environment.application.id:
            raise ValueError(
                'task.application.id did not match with environment.application.id'
            )

        duplicateExecution = Execution.objects.filter(
            task=task,
            environment=environment,
            status__in=[Execution.PENDING, Execution.RUNNING])
        if duplicateExecution.count():
            data['duplicate_error'] = True
            data['task'] = task
            data['environment'] = environment
        else:
            execution = Execution(task=task,
                                  environment=environment,
                                  user=request.user)
            execution.save()

            for name, value in parameters.items():
                if name != 'environment':
                    ExecutionParameter(execution=execution,
                                       name=name,
                                       value=value).save()

            for command in execution.commands.all():
                command.replace_params()
                command.save()
            execution.start()
            return redirect(execution)

    return render(request, 'page/task_execute.html', data)
示例#5
0
def settings_page(request):
	data = get_common_page_data(request)
	from account.forms import account_create_form
	form = account_create_form('user_settings', request, request.user.id)
	form.fields['email'].widget.attrs['readonly'] = True
	data['form'] = form
	if request.method == 'POST':
		if form.is_valid():
			on_before_save_user(form.instance)
			form.save()
			data['user'] = form.instance
	return render(request, 'page/account_settings.html', data)
示例#6
0
def settings_page(request):
    data = get_common_page_data(request)
    from account.forms import account_create_form
    form = account_create_form('user_settings', request, request.user.id)
    form.fields['email'].widget.attrs['readonly'] = True
    data['form'] = form
    if request.method == 'POST':
        if form.is_valid():
            on_before_save_user(form.instance)
            form.save()
            data['user'] = form.instance
    return render(request, 'page/account_settings.html', data)
示例#7
0
def task_execute_page(request, task_id, environment_id=None):
    data = get_common_page_data(request)
    task = get_object_or_404(Task, pk=task_id)
    data['task'] = task
    if environment_id:
        environment = get_object_or_404(Environment, pk=int(environment_id))
        data['environment'] = environment
        if task.application.id != environment.application.id:
            raise ValueError('task.application.id did not match with environment.application.id')

    if request.method == 'POST':
        parameter_prefix = 'parameter-'
        parameters = {}
        for name, value in request.POST.items():
            if name.startswith(parameter_prefix):
                name = name[len(parameter_prefix):]
                parameters[name] = value

        # @todo validate parameter names

        environment = get_object_or_404(Environment, pk=int(parameters['environment']))
        if task.application.id != environment.application.id:
            raise ValueError('task.application.id did not match with environment.application.id')

        duplicateExecution = Execution.objects.filter(task=task, environment=environment,
                                                      status__in=[Execution.PENDING, Execution.RUNNING])
        if duplicateExecution.count():
            data['duplicate_error'] = True
            data['task'] = task
            data['environment'] = environment
        else:
            execution = Execution(task=task, environment=environment, user=request.user)
            execution.save()

            for name, value in parameters.items():
                if name != 'environment':
                    ExecutionParameter(execution=execution, name=name, value=value).save()

            parameter_parser = ParameterParser(execution)
            for command in execution.commands.all():
                command.command = parameter_parser.process(command.command)
                command.save()
            execution.start()
            return redirect(execution)

    return render(request, 'page/task_execute.html', data)
示例#8
0
def log_page(request, model_name, id):
    data = get_common_page_data(request)
    executions = Execution.objects
    if model_name == 'application':
        executions = executions.filter(environment__application_id=id)
        related = get_object_or_404(Application, pk=id)
    elif model_name == 'environment':
        executions = executions.filter(environment_id=id)
        related = get_object_or_404(Environment, pk=id)
    elif model_name == 'task':
        executions = executions.filter(task_id=id)
        related = get_object_or_404(Task, pk=id)
    elif model_name == 'user':
        executions = executions.filter(user_id=id)
        related = get_object_or_404(get_user_model(), pk=id)
    else:
        raise Http404()
    for related_model in ['task', 'user', 'environment', 'parameters']:
        executions = executions.prefetch_related(related_model)
    data['executions'] = executions.order_by('-time_created')
    data['model_name'] = model_name
    data['related'] = related
    return render(request, 'page/log.html', data)
示例#9
0
def log_page(request, model_name, id):
    data = get_common_page_data(request)
    executions = Execution.objects
    if model_name == 'application':
        executions = executions.filter(environment__application_id=id)
        related = get_object_or_404(Application, pk=id)
    elif model_name == 'environment':
        executions = executions.filter(environment_id=id)
        related = get_object_or_404(Environment, pk=id)
    elif model_name == 'task':
        executions = executions.filter(task_id=id)
        related = get_object_or_404(Task, pk=id)
    elif model_name == 'user':
        executions = executions.filter(user_id=id)
        related = get_object_or_404(User, pk=id)
    else:
        raise Http404()
    for related_model in ['task', 'user', 'environment', 'parameters']:
        executions = executions.prefetch_related(related_model)
    data['executions'] = executions.order_by('-time_created')
    data['model_name'] = model_name
    data['related'] = related
    return render(request, 'page/log.html', data)
示例#10
0
def profile_page(request, user_id):
    data = get_common_page_data(request)
    user = get_object_or_404(get_user_model(), pk=user_id)
    data['user_profile'] = user
    data['user_executions'] = Execution.get_inline_by_user(user.id)
    return render(request, 'page/profile.html', data)
示例#11
0
def execution_page(request, execution_id):
    data = get_common_page_data(request)
    execution = get_object_or_404(Execution, pk=execution_id)
    data['execution'] = execution
    return render(request, 'page/execution.html', data)
示例#12
0
def task_page(request, task_id=None):
    data = get_common_page_data(request)
    data['task'] = get_object_or_404(Task, pk=task_id)
    return render(request, 'page/task.html', data)
示例#13
0
def execution_page(request, execution_id):
    data = get_common_page_data(request)
    execution = get_object_or_404(Execution, pk=execution_id)
    data['execution'] = execution
    return render(request, 'page/execution.html', data)
示例#14
0
def task_page(request, task_id=None):
    data = get_common_page_data(request)
    data['task'] = get_object_or_404(Task, pk=task_id)
    return render(request, 'page/task.html', data)
示例#15
0
def profile_page(request, user_id):
    data = get_common_page_data(request)
    user = get_object_or_404(User, pk=user_id)
    data['user'] = user
    data['user_executions'] = Execution.get_inline_by_user(user.id)
    return render(request, 'page/profile.html', data)