from __future__ import absolute_import from django.conf import settings from django.contrib import messages from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.utils.translation import ugettext as _ from common.utils import encapsulate from icons.widgets import icon_widget from icons.literals import APP from permissions.models import Permission from .classes import AppBackup from .forms import BackupJobForm from .models import App, BackupJob from .permissions import PERMISSION_BACKUP_JOB_VIEW, PERMISSION_BACKUP_JOB_CREATE, PERMISSION_BACKUP_JOB_EDIT def app_list(request): #order = [i for i,f in sorted(smart_modules.items(), key=lambda k: 'dependencies' in k[1] and k[1]['dependencies'])] return render_to_response('generic_list.html', { 'object_list' : App.live.all(), 'hide_object': True, 'extra_columns': [ {'name': _(u'icon'), 'attribute': 'icon'}, {'name':_(u'icon'), 'attribute': encapsulate(lambda x: icon_widget(x.icon or APP))}, {'name': _(u'label'), 'attribute': 'label'}, {'name':_(u'description'), 'attribute': 'description'}, {'name':_(u'dependencies'), 'attribute': encapsulate(lambda x: u', '.join([unicode(dependency) for dependency in x.dependencies.all()]))}, ], }, context_instance=RequestContext(request)) 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: if settings.DEBUG: raise else: 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'}, ], } return render_to_response('generic_list.html', context, context_instance=RequestContext(request))