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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)