freezer-web-ui/freezer_ui/jobs/views.py

148 lines
5.3 KiB
Python

# (c) Copyright 2014,2015 Hewlett-Packard Development Company, L.P.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from django.core.urlresolvers import reverse_lazy
from horizon import browsers
from horizon import exceptions
from horizon import messages
from horizon import workflows
import freezer_ui.api.api as freezer_api
import freezer_ui.jobs.browsers as project_browsers
from freezer_ui.utils import create_dict_action
import workflows.configure as configure_workflow
import workflows.action as action_workflow
LOG = logging.getLogger(__name__)
class JobWorkflowView(workflows.WorkflowView):
workflow_class = configure_workflow.ConfigureJob
def get_object(self, *args, **kwargs):
job_id = self.kwargs['backup_name']
try:
return freezer_api.job_get(self.request, job_id)
except Exception:
redirect = reverse("horizon:freezer_ui:jobs:index")
msg = _('Unable to retrieve details.')
exceptions.handle(self.request, msg, redirect=redirect)
def is_update(self):
return 'backup_name' in self.kwargs and \
bool(self.kwargs['backup_name'])
def get_initial(self):
initial = super(JobWorkflowView, self).get_initial()
if self.is_update():
initial.update({'original_name': None})
job = self.get_object()[0]
d = job.get_dict()
schedule = create_dict_action(**d['job_schedule'])
initial.update(**schedule)
info = {k: v for k, v in d.items()
if not k == 'job_schedule'}
initial.update(**info)
initial.update({'original_name': d.get('job_id', None)})
return initial
class JobsView(browsers.ResourceBrowserView):
browser_class = project_browsers.ContainerBrowser
template_name = "freezer_ui/jobs/browser.html"
def get_jobs_data(self):
jobs = []
try:
jobs = freezer_api.job_list(self.request)
except Exception:
msg = _('Unable to retrieve job file list.')
exceptions.handle(self.request, msg)
return jobs
def get_status_data(self):
job = []
try:
if self.kwargs['job_id']:
job = freezer_api.actions_in_job(
self.request, self.kwargs['job_id'])
except Exception:
msg = _('Unable to retrieve instances for this job.')
exceptions.handle(self.request, msg)
return job
class ActionWorkflowView(workflows.WorkflowView):
workflow_class = action_workflow.ConfigureAction
success_url = reverse_lazy("horizon:freezer_ui:jobs:index")
def get_context_data(self, **kwargs):
context = super(ActionWorkflowView, self).get_context_data(**kwargs)
job_id = self.kwargs['job_id']
context['job_id'] = job_id
return context
def get_object(self, *args, **kwargs):
ids = self.kwargs['job_id']
try:
action_id, job_id = ids.split('===')
except ValueError:
# action_id = None
job_id = self.kwargs['job_id']
try:
return freezer_api.job_get(self.request, job_id)
except Exception:
redirect = reverse("horizon:freezer_ui:jobs:index")
msg = _('Unable to retrieve details.')
exceptions.handle(self.request, msg, redirect=redirect)
def is_update(self):
return 'job_id' in self.kwargs and \
bool(self.kwargs['job_id'])
def get_initial(self, **kwargs):
initial = super(ActionWorkflowView, self).get_initial()
try:
action_id, job_id = self.kwargs['job_id'].split('===')
except ValueError:
# job_id = self.kwargs['job_id']
action_id = None
if self.is_update():
initial.update({'original_name': None})
job = self.get_object()[0]
d = job.get_dict()
for action in d['job_actions']:
try:
if action['action_id'] == action_id:
actions = create_dict_action(**action)
rules = {k: v for k, v in action.items()
if not k == 'freezer_action'}
initial.update(**actions['freezer_action'])
initial.update(**rules)
except KeyError:
messages.warning(self.request, _("Cannot edit an action "
"created by the"
" scheduler"))
exceptions.handle(self.request, "")
initial.update({'original_name': job.id})
return initial