ddaf10204a
Replace django.core.urlresolves with django.urls (In Django 2.0) The django.core.urlresolvers module is removed in favor of its new location, django.urls. It was deprecated in Django 1.10: https://docs.djangoproject.com/en/2.0/releases/1.10/#id3 The arguments of include() has been changed in Django 1.9 and the older style was dropped in Django 2.0. https://docs.djangoproject.com/en/2.0/releases/1.9/#passing-a-3-tuple-or-an-app-name-to-include Add py35dj20 job to test Django 2.0 integration. Also drops older Django unit tests from tox.ini as horizon dropped Django <=1.10 support in Rocky. Depends-On: https://review.openstack.org/#/c/571061/ Change-Id: I122f8ad81807386517149f37aa8d63c76daac533
111 lines
4.2 KiB
Python
111 lines
4.2 KiB
Python
# Copyright 2013 Rackspace Hosting
|
|
#
|
|
# 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.
|
|
|
|
"""
|
|
Views for displaying database backups.
|
|
"""
|
|
from django.urls import reverse
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from horizon import exceptions
|
|
from horizon import tables as horizon_tables
|
|
from horizon.utils import filters
|
|
from horizon import views as horizon_views
|
|
from horizon import workflows as horizon_workflows
|
|
|
|
from trove_dashboard import api
|
|
from trove_dashboard.content.database_backups import tables
|
|
from trove_dashboard.content.database_backups \
|
|
import workflows
|
|
|
|
|
|
class IndexView(horizon_tables.DataTableView):
|
|
table_class = tables.BackupsTable
|
|
template_name = 'project/database_backups/index.html'
|
|
page_title = _("Backups")
|
|
|
|
def _get_extra_data(self, backup):
|
|
"""Apply extra info to the backup."""
|
|
instance_id = backup.instance_id
|
|
# TODO(rdopieralski) It's not clear where this attribute is supposed
|
|
# to come from. At first glance it looks like it will always be {}.
|
|
if not hasattr(self, '_instances'):
|
|
self._instances = {}
|
|
instance = self._instances.get(instance_id)
|
|
if instance is None:
|
|
try:
|
|
instance = api.trove.instance_get(self.request, instance_id)
|
|
except Exception:
|
|
instance = _('Not Found')
|
|
backup.instance = instance
|
|
return backup
|
|
|
|
def get_data(self):
|
|
# TODO(rmyers) Add pagination support after it is available
|
|
# https://blueprints.launchpad.net/trove/+spec/paginate-backup-list
|
|
try:
|
|
backups = api.trove.backup_list(self.request)
|
|
backups = map(self._get_extra_data, backups)
|
|
except Exception:
|
|
backups = []
|
|
msg = _('Error getting database backup list.')
|
|
exceptions.handle(self.request, msg)
|
|
return backups
|
|
|
|
|
|
class BackupView(horizon_workflows.WorkflowView):
|
|
workflow_class = workflows.CreateBackup
|
|
template_name = "project/database_backups/backup.html"
|
|
page_title = _("Backup Database")
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(BackupView, self).get_context_data(**kwargs)
|
|
context["instance_id"] = kwargs.get("instance_id")
|
|
self._instance = context['instance_id']
|
|
return context
|
|
|
|
|
|
class DetailView(horizon_views.APIView):
|
|
template_name = "project/database_backups/details.html"
|
|
page_title = _("Backup Details: {{ backup.name }}")
|
|
|
|
def get_data(self, request, context, *args, **kwargs):
|
|
backup_id = kwargs.get("backup_id")
|
|
try:
|
|
backup = api.trove.backup_get(request, backup_id)
|
|
created_at = filters.parse_isotime(backup.created)
|
|
updated_at = filters.parse_isotime(backup.updated)
|
|
backup.duration = updated_at - created_at
|
|
except Exception:
|
|
redirect = reverse('horizon:project:database_backups:index')
|
|
msg = _('Unable to retrieve details for backup: %s') % backup_id
|
|
exceptions.handle(self.request, msg, redirect=redirect)
|
|
|
|
try:
|
|
if(hasattr(backup, 'parent_id') and backup.parent_id is not None):
|
|
backup.parent = api.trove.backup_get(request, backup.parent_id)
|
|
except Exception:
|
|
redirect = reverse('horizon:project:database_backups:index')
|
|
msg = (_('Unable to retrieve details for parent backup: %s')
|
|
% backup.parent_id)
|
|
exceptions.handle(self.request, msg, redirect=redirect)
|
|
|
|
try:
|
|
instance = api.trove.instance_get(request, backup.instance_id)
|
|
except Exception:
|
|
instance = None
|
|
context['backup'] = backup
|
|
context['instance'] = instance
|
|
return context
|