from __future__ import absolute_import from django.utils.translation import ugettext_lazy as _ from django.http import HttpResponseRedirect from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.contrib import messages from django.core.urlresolvers import reverse from permissions.models import Permission from .api import AppBackup, TestStorageModule from .models import BackupJob from .forms import BackupJobForm from .permissions import PERMISSION_BACKUP_JOB_VIEW, PERMISSION_BACKUP_JOB_CREATE, PERMISSION_BACKUP_JOB_EDIT def backup_job_list(request): pre_object_list = BackupJob.objects.all() try: Permission.objects.check_permissions(request.user, [PERMISSION_BACKUP_JOB_VIEW]) except PermissionDenied: # If user doesn't have global permission, get a list of backup jobs # for which he/she does have access use it to filter the # provided object_list final_object_list = AccessEntry.objects.filter_objects_by_access(PERMISSION_BACKUP_JOB_VIEW, request.user, pre_object_list) else: final_object_list = pre_object_list context = { 'object_list': final_object_list, 'title': _(u'backup jobs'), 'hide_link': True, #'extra_columns': [ # {'name': _(u'info'), 'attribute': 'info'}, #], } return render_to_response('generic_list.html', context, context_instance=RequestContext(request)) def backup_job_create(request): Permission.objects.check_permissions(request.user, [PERMISSION_BACKUP_JOB_CREATE]) if request.method == 'POST': form = BackupJobForm(data=request.POST) if form.is_valid(): try: backup_job = form.save() except Exception, exc: messages.error(request, _(u'Error creating backup job; %s') % exc) else: messages.success(request, _(u'Backup job "%s" created successfully.') % backup_job) return HttpResponseRedirect(reverse('backup_job_list')) else: form = BackupJobForm() return render_to_response('generic_form.html', { 'form': form, 'title': _(u'Create backup job') }, context_instance=RequestContext(request)) def backup_job_edit(request, backup_job_pk): backup_job = get_object_or_404(BackupJob, pk=backup_job_pk) try: Permission.objects.check_permissions(request.user, [PERMISSION_BACKUP_JOB_EDIT]) except PermissionDenied: AccessEntry.objects.check_access(PERMISSION_BACKUP_JOB_EDIT, request.user, backup_job) if request.method == 'POST': form = BackupJobForm(data=request.POST, instance=backup_job) if form.is_valid(): try: backup_job = form.save() except Exception, exc: messages.error(request, _(u'Error editing backup job; %s') % exc) else: messages.success(request, _(u'Backup job "%s" edited successfully.') % backup_job) return HttpResponseRedirect(reverse('backup_job_list')) else: form = BackupJobForm(instance=backup_job) return render_to_response('generic_form.html', { 'form': form, 'object': backup_job, 'title': _(u'Edit backup job: %s') % backup_job }, context_instance=RequestContext(request)) def backup_job_test(request, backup_job_pk): backup_job = get_object_or_404(BackupJob, pk=backup_job_pk) #try: # Permission.objects.check_permissions(request.user, [PERMISSION_BACKUP_JOB_EDIT]) #except PermissionDenied: # AccessEntry.objects.check_access(PERMISSION_BACKUP_JOB_EDIT, request.user, backup_job) try: backup_job.backup(dry_run=True) except Exception, exc: messages.error(request, _(u'Error testing backup job; %s') % exc) return HttpResponseRedirect(reverse('backup_job_list')) else: messages.success(request, _(u'Test for backup job "%s" finished successfully.') % backup_job) return HttpResponseRedirect(reverse('backup_job_list')) def backup_view(request): #Permission.objects.check_permissions(request.user, []) context = { 'object_list': AppBackup.get_all(), 'title': _(u'registered apps for backup'), 'hide_link': True, 'extra_columns': [ {'name': _(u'info'), 'attribute': 'info'}, ], } # TODO: move to test.py #ab = AppBackup.get_all()[0] #ab.backup(TestStorageModule(backup_path = '/tmp')) return render_to_response('generic_list.html', context, context_instance=RequestContext(request))