Enable H302 check

This patch replaces some method imports with module imports and
makes H302 test enabled.

Fixes bug 1188531

Change-Id: Ibfbddeaa19cbbb244da58ffd5c918c41f03a0c65
This commit is contained in:
Tatiana Mazur 2013-08-02 13:23:46 +04:00
parent c4ac732aa9
commit 953d1b9793
322 changed files with 1703 additions and 1990 deletions

View File

@ -26,10 +26,10 @@ methods like :func:`~horizon.register` and :func:`~horizon.unregister`.
# should that fail. # should that fail.
Horizon = None Horizon = None
try: try:
from horizon.base import Dashboard from horizon.base import Dashboard # noqa
from horizon.base import Horizon from horizon.base import Horizon # noqa
from horizon.base import Panel from horizon.base import Panel # noqa
from horizon.base import PanelGroup from horizon.base import PanelGroup # noqa
except ImportError: except ImportError:
import warnings import warnings

View File

@ -28,22 +28,22 @@ import inspect
import logging import logging
import os import os
from django.conf import settings from django.conf import settings # noqa
from django.conf.urls.defaults import include from django.conf.urls.defaults import include # noqa
from django.conf.urls.defaults import patterns from django.conf.urls.defaults import patterns # noqa
from django.conf.urls.defaults import url from django.conf.urls.defaults import url # noqa
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured # noqa
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse # noqa
from django.utils.datastructures import SortedDict from django.utils.datastructures import SortedDict # noqa
from django.utils.functional import SimpleLazyObject from django.utils.functional import SimpleLazyObject # noqa
from django.utils.importlib import import_module from django.utils.importlib import import_module # noqa
from django.utils.module_loading import module_has_submodule from django.utils.module_loading import module_has_submodule # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import conf from horizon import conf
from horizon.decorators import _current_component from horizon.decorators import _current_component # noqa
from horizon.decorators import require_auth from horizon.decorators import require_auth # noqa
from horizon.decorators import require_perms from horizon.decorators import require_perms # noqa
from horizon import loaders from horizon import loaders
@ -549,7 +549,7 @@ class Workflow(object):
try: try:
from django.utils.functional import empty from django.utils.functional import empty # noqa
except ImportError: except ImportError:
#Django 1.3 fallback #Django 1.3 fallback
empty = None empty = None

View File

@ -14,8 +14,8 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from horizon.browsers.base import ResourceBrowser from horizon.browsers.base import ResourceBrowser # noqa
from horizon.browsers.views import ResourceBrowserView from horizon.browsers.views import ResourceBrowserView # noqa
assert ResourceBrowser assert ResourceBrowser
assert ResourceBrowserView assert ResourceBrowserView

View File

@ -15,10 +15,10 @@
# under the License. # under the License.
from django import template from django import template
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon.browsers.breadcrumb import Breadcrumb from horizon.browsers.breadcrumb import Breadcrumb # noqa
from horizon.tables import DataTable from horizon.tables import DataTable # noqa
from horizon.utils import html from horizon.utils import html

View File

@ -14,9 +14,9 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon.tables import MultiTableView from horizon.tables import MultiTableView # noqa
class ResourceBrowserView(MultiTableView): class ResourceBrowserView(MultiTableView):

View File

@ -1,13 +1,13 @@
import copy import copy
from django.utils.functional import empty from django.utils.functional import empty # noqa
from django.utils.functional import LazyObject from django.utils.functional import LazyObject # noqa
class LazySettings(LazyObject): class LazySettings(LazyObject):
def _setup(self, name=None): def _setup(self, name=None):
from django.conf import settings from django.conf import settings # noqa
from horizon.conf.default import HORIZON_CONFIG as DEFAULT_CONFIG from horizon.conf.default import HORIZON_CONFIG as DEFAULT_CONFIG # noqa
HORIZON_CONFIG = copy.copy(DEFAULT_CONFIG) HORIZON_CONFIG = copy.copy(DEFAULT_CONFIG)
HORIZON_CONFIG.update(settings.HORIZON_CONFIG) HORIZON_CONFIG.update(settings.HORIZON_CONFIG)

View File

@ -1,5 +1,5 @@
from django.conf import settings from django.conf import settings # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
# Default configuration dictionary. Do not mutate. # Default configuration dictionary. Do not mutate.
HORIZON_CONFIG = { HORIZON_CONFIG = {

View File

@ -23,8 +23,8 @@ General-purpose decorators for use with Horizon.
""" """
import functools import functools
from django.utils.decorators import available_attrs from django.utils.decorators import available_attrs # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
def _current_component(view_func, dashboard=None, panel=None): def _current_component(view_func, dashboard=None, panel=None):
@ -46,7 +46,7 @@ def require_auth(view_func):
:exc:`~horizon.exceptions.NotAuthenticated` exception if the user is not :exc:`~horizon.exceptions.NotAuthenticated` exception if the user is not
signed-in. signed-in.
""" """
from horizon.exceptions import NotAuthenticated from horizon.exceptions import NotAuthenticated # noqa
@functools.wraps(view_func, assigned=available_attrs(view_func)) @functools.wraps(view_func, assigned=available_attrs(view_func))
def dec(request, *args, **kwargs): def dec(request, *args, **kwargs):
@ -74,7 +74,7 @@ def require_perms(view_func, required):
Raises a :exc:`~horizon.exceptions.NotAuthorized` exception if the Raises a :exc:`~horizon.exceptions.NotAuthorized` exception if the
requirements are not met. requirements are not met.
""" """
from horizon.exceptions import NotAuthorized from horizon.exceptions import NotAuthorized # noqa
# We only need to check each permission once for a view, so we'll use a set # We only need to check each permission once for a view, so we'll use a set
current_perms = getattr(view_func, '_required_perms', set([])) current_perms = getattr(view_func, '_required_perms', set([]))
view_func._required_perms = current_perms | set(required) view_func._required_perms = current_perms | set(required)

View File

@ -22,14 +22,14 @@ import logging
import os import os
import sys import sys
from django.contrib.auth import logout from django.contrib.auth import logout # noqa
from django.core.management import color_style from django.core.management import color_style # noqa
from django.http import HttpRequest from django.http import HttpRequest # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from django.views.debug import CLEANSED_SUBSTITUTE from django.views.debug import CLEANSED_SUBSTITUTE # noqa
from django.views.debug import SafeExceptionReporterFilter from django.views.debug import SafeExceptionReporterFilter # noqa
from horizon.conf import HORIZON_CONFIG from horizon.conf import HORIZON_CONFIG # noqa
from horizon import messages from horizon import messages
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)

View File

@ -19,13 +19,13 @@ from django.forms import * # noqa
from django.forms import widgets from django.forms import widgets
# Convenience imports for public API components. # Convenience imports for public API components.
from horizon.forms.base import DateForm from horizon.forms.base import DateForm # noqa
from horizon.forms.base import SelfHandlingForm from horizon.forms.base import SelfHandlingForm # noqa
from horizon.forms.base import SelfHandlingMixin from horizon.forms.base import SelfHandlingMixin # noqa
from horizon.forms.fields import DynamicChoiceField from horizon.forms.fields import DynamicChoiceField # noqa
from horizon.forms.fields import DynamicTypedChoiceField from horizon.forms.fields import DynamicTypedChoiceField # noqa
from horizon.forms.views import ModalFormMixin from horizon.forms.views import ModalFormMixin # noqa
from horizon.forms.views import ModalFormView from horizon.forms.views import ModalFormView # noqa
assert widgets assert widgets
assert SelfHandlingMixin assert SelfHandlingMixin

View File

@ -19,7 +19,7 @@
# under the License. # under the License.
from django import forms from django import forms
from django.forms.forms import NON_FIELD_ERRORS from django.forms.forms import NON_FIELD_ERRORS # noqa
class SelfHandlingMixin(object): class SelfHandlingMixin(object):

View File

@ -4,10 +4,10 @@ Wrapper for loading templates from "templates" directories in panel modules.
import os import os
from django.conf import settings from django.conf import settings # noqa
from django.template.base import TemplateDoesNotExist from django.template.base import TemplateDoesNotExist # noqa
from django.template.loader import BaseLoader from django.template.loader import BaseLoader # noqa
from django.utils._os import safe_join from django.utils._os import safe_join # noqa
# Set up a cache of the panel directories to search. # Set up a cache of the panel directories to search.
panel_template_dirs = {} panel_template_dirs = {}

View File

@ -1,10 +1,10 @@
import glob import glob
from optparse import make_option from optparse import make_option # noqa
import os import os
from django.core.management.base import CommandError from django.core.management.base import CommandError # noqa
from django.core.management.templates import TemplateCommand from django.core.management.templates import TemplateCommand # noqa
from django.utils.importlib import import_module from django.utils.importlib import import_module # noqa
import horizon import horizon

View File

@ -1,10 +1,10 @@
import glob import glob
from optparse import make_option from optparse import make_option # noqa
import os import os
from django.core.management.base import CommandError from django.core.management.base import CommandError # noqa
from django.core.management.templates import TemplateCommand from django.core.management.templates import TemplateCommand # noqa
from django.utils.importlib import import_module from django.utils.importlib import import_module # noqa
import horizon import horizon

View File

@ -21,8 +21,8 @@ messaging needs (e.g. AJAX communication, etc.).
from django.contrib import messages as _messages from django.contrib import messages as _messages
from django.contrib.messages import constants from django.contrib.messages import constants
from django.utils.encoding import force_unicode from django.utils.encoding import force_unicode # noqa
from django.utils.safestring import SafeData from django.utils.safestring import SafeData # noqa
def add_message(request, level, message, extra_tags='', fail_silently=False): def add_message(request, level, message, extra_tags='', fail_silently=False):

View File

@ -25,14 +25,14 @@ import datetime
import json import json
import logging import logging
from django.conf import settings from django.conf import settings # noqa
from django.contrib.auth import REDIRECT_FIELD_NAME from django.contrib.auth import REDIRECT_FIELD_NAME # noqa
from django.contrib.auth.views import redirect_to_login from django.contrib.auth.views import redirect_to_login # noqa
from django.contrib import messages as django_messages from django.contrib import messages as django_messages
from django import http from django import http
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect # noqa
from django import shortcuts from django import shortcuts
from django.utils.encoding import iri_to_uri from django.utils.encoding import iri_to_uri # noqa
from django.utils import timezone from django.utils import timezone
from horizon import exceptions from horizon import exceptions

View File

@ -18,11 +18,11 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.conf import settings from django.conf import settings # noqa
from django.conf.urls.defaults import include from django.conf.urls.defaults import include # noqa
from django.conf.urls.defaults import patterns from django.conf.urls.defaults import patterns # noqa
from django.conf.urls.defaults import url from django.conf.urls.defaults import url # noqa
from django.views.generic import TemplateView from django.views.generic import TemplateView # noqa
urlpatterns = patterns('horizon.views', urlpatterns = patterns('horizon.views',

View File

@ -15,19 +15,19 @@
# under the License. # under the License.
# Convenience imports for public API components. # Convenience imports for public API components.
from horizon.tables.actions import Action from horizon.tables.actions import Action # noqa
from horizon.tables.actions import BatchAction from horizon.tables.actions import BatchAction # noqa
from horizon.tables.actions import DeleteAction from horizon.tables.actions import DeleteAction # noqa
from horizon.tables.actions import FilterAction from horizon.tables.actions import FilterAction # noqa
from horizon.tables.actions import FixedFilterAction from horizon.tables.actions import FixedFilterAction # noqa
from horizon.tables.actions import LinkAction from horizon.tables.actions import LinkAction # noqa
from horizon.tables.base import Column from horizon.tables.base import Column # noqa
from horizon.tables.base import DataTable from horizon.tables.base import DataTable # noqa
from horizon.tables.base import Row from horizon.tables.base import Row # noqa
from horizon.tables.views import DataTableView from horizon.tables.views import DataTableView # noqa
from horizon.tables.views import MixedDataTableView from horizon.tables.views import MixedDataTableView # noqa
from horizon.tables.views import MultiTableMixin from horizon.tables.views import MultiTableMixin # noqa
from horizon.tables.views import MultiTableView from horizon.tables.views import MultiTableView # noqa
assert Action assert Action
assert BatchAction assert BatchAction

View File

@ -14,15 +14,15 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from collections import defaultdict from collections import defaultdict # noqa
import logging import logging
import new import new
from django.conf import settings from django.conf import settings # noqa
from django.core import urlresolvers from django.core import urlresolvers
from django import shortcuts from django import shortcuts
from django.utils.functional import Promise from django.utils.functional import Promise # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import exceptions from horizon import exceptions
from horizon import messages from horizon import messages

View File

@ -17,29 +17,29 @@
import collections import collections
import copy import copy
import logging import logging
from operator import attrgetter from operator import attrgetter # noqa
import sys import sys
from django.conf import settings from django.conf import settings # noqa
from django.core import urlresolvers from django.core import urlresolvers
from django import forms from django import forms
from django.http import HttpResponse from django.http import HttpResponse # noqa
from django import template from django import template
from django.template.defaultfilters import truncatechars from django.template.defaultfilters import truncatechars # noqa
from django.template.loader import render_to_string from django.template.loader import render_to_string # noqa
from django.utils.datastructures import SortedDict from django.utils.datastructures import SortedDict # noqa
from django.utils.html import escape from django.utils.html import escape # noqa
from django.utils import http from django.utils import http
from django.utils.http import urlencode from django.utils.http import urlencode # noqa
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe # noqa
from django.utils import termcolors from django.utils import termcolors
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import conf from horizon import conf
from horizon import exceptions from horizon import exceptions
from horizon import messages from horizon import messages
from horizon.tables.actions import FilterAction from horizon.tables.actions import FilterAction # noqa
from horizon.tables.actions import LinkAction from horizon.tables.actions import LinkAction # noqa
from horizon.utils import html from horizon.utils import html

View File

@ -14,11 +14,11 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from collections import defaultdict from collections import defaultdict # noqa
from django.views import generic from django.views import generic
from horizon.templatetags.horizon import has_permissions from horizon.templatetags.horizon import has_permissions # noqa
class MultiTableMixin(object): class MultiTableMixin(object):

View File

@ -14,11 +14,11 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from horizon.tabs.base import Tab from horizon.tabs.base import Tab # noqa
from horizon.tabs.base import TabGroup from horizon.tabs.base import TabGroup # noqa
from horizon.tabs.base import TableTab from horizon.tabs.base import TableTab # noqa
from horizon.tabs.views import TabbedTableView from horizon.tabs.views import TabbedTableView # noqa
from horizon.tabs.views import TabView from horizon.tabs.views import TabView # noqa
assert TabGroup assert TabGroup
assert Tab assert Tab

View File

@ -16,9 +16,9 @@
import sys import sys
from django.template.loader import render_to_string from django.template.loader import render_to_string # noqa
from django.template import TemplateSyntaxError from django.template import TemplateSyntaxError # noqa
from django.utils.datastructures import SortedDict from django.utils.datastructures import SortedDict # noqa
from horizon import exceptions from horizon import exceptions
from horizon.utils import html from horizon.utils import html

View File

@ -3,7 +3,7 @@ from django.views import generic
from horizon import exceptions from horizon import exceptions
from horizon import tables from horizon import tables
from horizon.tabs.base import TableTab from horizon.tabs.base import TableTab # noqa
class TabView(generic.TemplateView): class TabView(generic.TemplateView):

View File

@ -22,9 +22,9 @@
Template tags for customizing Horizon. Template tags for customizing Horizon.
""" """
from django.conf import settings from django.conf import settings # noqa
from django import template from django import template
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
register = template.Library() register = template.Library()

View File

@ -17,11 +17,11 @@
from __future__ import absolute_import from __future__ import absolute_import
from django import template from django import template
from django.utils.datastructures import SortedDict from django.utils.datastructures import SortedDict # noqa
from django.utils.encoding import force_unicode from django.utils.encoding import force_unicode # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon.base import Horizon from horizon.base import Horizon # noqa
from horizon import conf from horizon import conf

View File

@ -22,7 +22,7 @@
Template tags for parsing date strings. Template tags for parsing date strings.
""" """
from datetime import datetime from datetime import datetime # noqa
from django import template from django import template
from django.utils import timezone from django.utils import timezone

View File

@ -1,4 +1,4 @@
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
import horizon import horizon

View File

@ -22,22 +22,22 @@ import logging
import os import os
import socket import socket
from django.contrib.auth.middleware import AuthenticationMiddleware from django.contrib.auth.middleware import AuthenticationMiddleware # noqa
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission # noqa
from django.contrib.auth.models import User from django.contrib.auth.models import User # noqa
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType # noqa
from django.contrib.messages.storage import default_storage from django.contrib.messages.storage import default_storage # noqa
from django.core.handlers import wsgi from django.core.handlers import wsgi
from django import http from django import http
from django import test as django_test from django import test as django_test
from django.test.client import RequestFactory from django.test.client import RequestFactory # noqa
from django.utils import unittest from django.utils import unittest
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
try: try:
from selenium.webdriver.firefox.webdriver import WebDriver from selenium.webdriver.firefox.webdriver import WebDriver # noqa
from selenium.webdriver.support import ui as selenium_ui from selenium.webdriver.support import ui as selenium_ui
except ImportError as e: except ImportError as e:
# NOTE(saschpe): Several distribution can't ship selenium due to it's # NOTE(saschpe): Several distribution can't ship selenium due to it's

View File

@ -21,7 +21,7 @@
import os import os
import socket import socket
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
socket.setdefaulttimeout(1) socket.setdefaulttimeout(1)

View File

@ -1,4 +1,4 @@
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
import horizon import horizon

View File

@ -1,4 +1,4 @@
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
import horizon import horizon

View File

@ -1,7 +1,7 @@
from django.conf.urls.defaults import patterns from django.conf.urls.defaults import patterns # noqa
from django.conf.urls.defaults import url from django.conf.urls.defaults import url # noqa
from horizon.test.test_dashboards.cats.kittens.views import IndexView from horizon.test.test_dashboards.cats.kittens.views import IndexView # noqa
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^$', IndexView.as_view(), name='index'), url(r'^$', IndexView.as_view(), name='index'),

View File

@ -1,4 +1,4 @@
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
import horizon import horizon

View File

@ -1,7 +1,7 @@
from django.conf.urls.defaults import patterns from django.conf.urls.defaults import patterns # noqa
from django.conf.urls.defaults import url from django.conf.urls.defaults import url # noqa
from horizon.test.test_dashboards.cats.tigers.views import IndexView from horizon.test.test_dashboards.cats.tigers.views import IndexView # noqa
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^$', IndexView.as_view(), name='index'), url(r'^$', IndexView.as_view(), name='index'),

View File

@ -1,4 +1,4 @@
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
import horizon import horizon

View File

@ -1,4 +1,4 @@
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
import horizon import horizon

View File

@ -1,7 +1,7 @@
from django.conf.urls.defaults import patterns from django.conf.urls.defaults import patterns # noqa
from django.conf.urls.defaults import url from django.conf.urls.defaults import url # noqa
from horizon.test.test_dashboards.dogs.puppies.views import IndexView from horizon.test.test_dashboards.dogs.puppies.views import IndexView # noqa
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^$', IndexView.as_view(), name='index'), url(r'^$', IndexView.as_view(), name='index'),

View File

@ -19,21 +19,21 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.conf import settings from django.conf import settings # noqa
from django.contrib.auth.models import User from django.contrib.auth.models import User # noqa
from django.core import urlresolvers from django.core import urlresolvers
from django.utils.importlib import import_module from django.utils.importlib import import_module # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
import horizon import horizon
from horizon import base from horizon import base
from horizon import conf from horizon import conf
from horizon.test import helpers as test from horizon.test import helpers as test
from horizon.test.test_dashboards.cats.dashboard import Cats from horizon.test.test_dashboards.cats.dashboard import Cats # noqa
from horizon.test.test_dashboards.cats.kittens.panel import Kittens from horizon.test.test_dashboards.cats.kittens.panel import Kittens # noqa
from horizon.test.test_dashboards.cats.tigers.panel import Tigers from horizon.test.test_dashboards.cats.tigers.panel import Tigers # noqa
from horizon.test.test_dashboards.dogs.dashboard import Dogs from horizon.test.test_dashboards.dogs.dashboard import Dogs # noqa
from horizon.test.test_dashboards.dogs.puppies.panel import Puppies from horizon.test.test_dashboards.dogs.puppies.panel import Puppies # noqa
class MyDash(horizon.Dashboard): class MyDash(horizon.Dashboard):

View File

@ -17,9 +17,9 @@
import json import json
from django import http from django import http
from django.utils.encoding import force_unicode from django.utils.encoding import force_unicode # noqa
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import messages from horizon import messages
from horizon import middleware from horizon import middleware

View File

@ -15,7 +15,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.conf import settings from django.conf import settings # noqa
from horizon import exceptions from horizon import exceptions
from horizon import middleware from horizon import middleware

View File

@ -14,12 +14,12 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse # noqa
from django import http from django import http
from django import shortcuts from django import shortcuts
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from mox import IsA from mox import IsA # noqa
from horizon import tables from horizon import tables
from horizon.tables import views as table_views from horizon.tables import views as table_views

View File

@ -17,14 +17,14 @@
import copy import copy
from django import http from django import http
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import exceptions from horizon import exceptions
from horizon import tabs as horizon_tabs from horizon import tabs as horizon_tabs
from horizon.test import helpers as test from horizon.test import helpers as test
from horizon.test.tests.tables import MyTable from horizon.test.tests.tables import MyTable # noqa
from horizon.test.tests.tables import TEST_DATA from horizon.test.tests.tables import TEST_DATA # noqa
class BaseTestTab(horizon_tabs.Tab): class BaseTestTab(horizon_tabs.Tab):

View File

@ -20,10 +20,10 @@
import re import re
from django.conf import settings from django.conf import settings # noqa
from django.template import Context from django.template import Context # noqa
from django.template import Template from django.template import Template # noqa
from django.utils.text import normalize_newlines from django.utils.text import normalize_newlines # noqa
from horizon.test import helpers as test from horizon.test import helpers as test

View File

@ -17,7 +17,7 @@
import os import os
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError # noqa
from horizon.test import helpers as test from horizon.test import helpers as test
from horizon.utils import fields from horizon.utils import fields

View File

@ -16,7 +16,7 @@
from django import forms from django import forms
from django import http from django import http
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import exceptions from horizon import exceptions
from horizon.test import helpers as test from horizon.test import helpers as test

View File

@ -22,11 +22,11 @@
URL patterns for testing Horizon views. URL patterns for testing Horizon views.
""" """
from django.conf.urls.defaults import include from django.conf.urls.defaults import include # noqa
from django.conf.urls.defaults import patterns from django.conf.urls.defaults import patterns # noqa
from django.conf.urls.defaults import url from django.conf.urls.defaults import url # noqa
from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.contrib.staticfiles.urls import staticfiles_urlpatterns # noqa
from django.views.generic import TemplateView from django.views.generic import TemplateView # noqa
import horizon import horizon

View File

@ -1,11 +1,11 @@
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError # noqa
from django.forms import forms from django.forms import forms
from django.forms import widgets from django.forms import widgets
from django.utils.encoding import force_unicode from django.utils.encoding import force_unicode # noqa
from django.utils.functional import Promise from django.utils.functional import Promise # noqa
from django.utils.html import conditional_escape from django.utils.html import conditional_escape # noqa
from django.utils.html import escape from django.utils.html import escape # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
import netaddr import netaddr
import re import re

View File

@ -16,7 +16,7 @@
import iso8601 import iso8601
from django.template.defaultfilters import register from django.template.defaultfilters import register # noqa
@register.filter @register.filter

View File

@ -1,7 +1,7 @@
import math import math
from django.utils.encoding import force_unicode from django.utils.encoding import force_unicode # noqa
from django.utils.functional import lazy from django.utils.functional import lazy # noqa
def _lazy_join(separator, strings): def _lazy_join(separator, strings):

View File

@ -1,6 +1,6 @@
import copy import copy
from django.forms.util import flatatt from django.forms.util import flatatt # noqa
class HTMLElement(object): class HTMLElement(object):

View File

@ -14,7 +14,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError # noqa
from horizon import conf from horizon import conf

View File

@ -1,9 +1,9 @@
from horizon.workflows.base import Action from horizon.workflows.base import Action # noqa
from horizon.workflows.base import MembershipAction from horizon.workflows.base import MembershipAction # noqa
from horizon.workflows.base import Step from horizon.workflows.base import Step # noqa
from horizon.workflows.base import UpdateMembersStep from horizon.workflows.base import UpdateMembersStep # noqa
from horizon.workflows.base import Workflow from horizon.workflows.base import Workflow # noqa
from horizon.workflows.views import WorkflowView from horizon.workflows.views import WorkflowView # noqa
assert Action assert Action
assert MembershipAction assert MembershipAction

View File

@ -20,18 +20,18 @@ import logging
from django.core import urlresolvers from django.core import urlresolvers
from django import forms from django import forms
from django.forms.forms import NON_FIELD_ERRORS from django.forms.forms import NON_FIELD_ERRORS # noqa
from django import template from django import template
from django.template.defaultfilters import linebreaks from django.template.defaultfilters import linebreaks # noqa
from django.template.defaultfilters import safe from django.template.defaultfilters import safe # noqa
from django.template.defaultfilters import slugify from django.template.defaultfilters import slugify # noqa
from django.utils.encoding import force_unicode from django.utils.encoding import force_unicode # noqa
from django.utils.importlib import import_module from django.utils.importlib import import_module # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import base from horizon import base
from horizon import exceptions from horizon import exceptions
from horizon.templatetags.horizon import has_permissions from horizon.templatetags.horizon import has_permissions # noqa
from horizon.utils import html from horizon.utils import html

View File

@ -22,7 +22,7 @@ from django import shortcuts
from django.views import generic from django.views import generic
from horizon import exceptions from horizon import exceptions
from horizon.forms.views import ADD_TO_FIELD_HEADER from horizon.forms.views import ADD_TO_FIELD_HEADER # noqa
from horizon import messages from horizon import messages

View File

@ -18,10 +18,10 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from collections import Sequence from collections import Sequence # noqa
import logging import logging
from django.conf import settings from django.conf import settings # noqa
from horizon import exceptions from horizon import exceptions

View File

@ -24,15 +24,14 @@ from __future__ import absolute_import
import logging import logging
from django.conf import settings from django.conf import settings # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from cinderclient.v1 import client as cinder_client from cinderclient.v1 import client as cinder_client
from horizon import exceptions from horizon import exceptions
from openstack_dashboard.api.base import QuotaSet from openstack_dashboard.api import base
from openstack_dashboard.api.base import url_for
from openstack_dashboard.api import nova from openstack_dashboard.api import nova
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -46,7 +45,7 @@ def cinderclient(request):
insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False) insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False)
cinder_url = "" cinder_url = ""
try: try:
cinder_url = url_for(request, 'volume') cinder_url = base.url_for(request, 'volume')
except exceptions.ServiceCatalogException: except exceptions.ServiceCatalogException:
LOG.debug('no volume service configured.') LOG.debug('no volume service configured.')
return None return None
@ -123,8 +122,8 @@ def volume_snapshot_delete(request, snapshot_id):
def tenant_quota_get(request, tenant_id): def tenant_quota_get(request, tenant_id):
c_client = cinderclient(request) c_client = cinderclient(request)
if c_client is None: if c_client is None:
return QuotaSet() return base.QuotaSet()
return QuotaSet(c_client.quotas.get(tenant_id)) return base.QuotaSet(c_client.quotas.get(tenant_id))
def tenant_quota_update(request, tenant_id, **kwargs): def tenant_quota_update(request, tenant_id, **kwargs):
@ -132,7 +131,7 @@ def tenant_quota_update(request, tenant_id, **kwargs):
def default_quota_get(request, tenant_id): def default_quota_get(request, tenant_id):
return QuotaSet(cinderclient(request).quotas.defaults(tenant_id)) return base.QuotaSet(cinderclient(request).quotas.defaults(tenant_id))
def volume_type_list(request): def volume_type_list(request):

View File

@ -25,18 +25,18 @@ import logging
import thread import thread
import urlparse import urlparse
from django.conf import settings from django.conf import settings # noqa
import glanceclient as glance_client import glanceclient as glance_client
from openstack_dashboard.api.base import url_for from openstack_dashboard.api import base
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
def glanceclient(request): def glanceclient(request):
o = urlparse.urlparse(url_for(request, 'image')) o = urlparse.urlparse(base.url_for(request, 'image'))
url = "://".join((o.scheme, o.netloc)) url = "://".join((o.scheme, o.netloc))
insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False) insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False)
LOG.debug('glanceclient connection created using token "%s" and url "%s"' LOG.debug('glanceclient connection created using token "%s" and url "%s"'

View File

@ -14,9 +14,9 @@
import logging import logging
from django.conf import settings from django.conf import settings # noqa
from heatclient import client as heat_client from heatclient import client as heat_client
from openstack_dashboard.api.base import url_for from openstack_dashboard.api import base
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -32,7 +32,7 @@ def format_parameters(params):
def heatclient(request, password=None): def heatclient(request, password=None):
api_version = "1" api_version = "1"
insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False) insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False)
endpoint = url_for(request, 'orchestration') endpoint = base.url_for(request, 'orchestration')
LOG.debug('heatclient connection created using token "%s" and url "%s"' % LOG.debug('heatclient connection created using token "%s" and url "%s"' %
(request.user.token.id, endpoint)) (request.user.token.id, endpoint))
kwargs = { kwargs = {

View File

@ -22,13 +22,13 @@
import logging import logging
import urlparse import urlparse
from django.conf import settings from django.conf import settings # noqa
from django.contrib.auth import logout from django.contrib.auth import logout # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from keystoneclient.exceptions import ClientException from keystoneclient.exceptions import ClientException # noqa
from openstack_auth.backend import KEYSTONE_CLIENT_ATTR from openstack_auth.backend import KEYSTONE_CLIENT_ATTR # noqa
from horizon import exceptions from horizon import exceptions
from horizon import messages from horizon import messages

View File

@ -16,9 +16,9 @@
from __future__ import absolute_import from __future__ import absolute_import
from openstack_dashboard.api.neutron import NeutronAPIDictWrapper from openstack_dashboard.api.neutron import NeutronAPIDictWrapper # noqa
from openstack_dashboard.api.neutron import neutronclient from openstack_dashboard.api.neutron import neutronclient # noqa
from openstack_dashboard.api.neutron import subnet_get from openstack_dashboard.api.neutron import subnet_get # noqa
class Vip(NeutronAPIDictWrapper): class Vip(NeutronAPIDictWrapper):

View File

@ -21,7 +21,7 @@ introduced to abstract the differences between them for seamless consumption by
different dashboard implementations. different dashboard implementations.
""" """
from django.conf import settings from django.conf import settings # noqa
from openstack_dashboard.api import base from openstack_dashboard.api import base
from openstack_dashboard.api import neutron from openstack_dashboard.api import neutron

View File

@ -23,12 +23,11 @@ from __future__ import absolute_import
import logging import logging
from django.conf import settings from django.conf import settings # noqa
from django.utils.datastructures import SortedDict from django.utils.datastructures import SortedDict # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from openstack_dashboard.api.base import APIDictWrapper from openstack_dashboard.api import base
from openstack_dashboard.api.base import url_for
from openstack_dashboard.api import network_base from openstack_dashboard.api import network_base
from openstack_dashboard.api import nova from openstack_dashboard.api import nova
@ -39,7 +38,7 @@ LOG = logging.getLogger(__name__)
IP_VERSION_DICT = {4: 'IPv4', 6: 'IPv6'} IP_VERSION_DICT = {4: 'IPv4', 6: 'IPv6'}
class NeutronAPIDictWrapper(APIDictWrapper): class NeutronAPIDictWrapper(base.APIDictWrapper):
def set_id_as_name_if_empty(self, length=8): def set_id_as_name_if_empty(self, length=8):
try: try:
@ -262,7 +261,7 @@ class SecurityGroupManager(network_base.SecurityGroupManager):
port_modify(self.request, p.id, **params) port_modify(self.request, p.id, **params)
class FloatingIp(APIDictWrapper): class FloatingIp(base.APIDictWrapper):
_attrs = ['id', 'ip', 'fixed_ip', 'port_id', 'instance_id', 'pool'] _attrs = ['id', 'ip', 'fixed_ip', 'port_id', 'instance_id', 'pool']
def __init__(self, fip): def __init__(self, fip):
@ -272,11 +271,11 @@ class FloatingIp(APIDictWrapper):
super(FloatingIp, self).__init__(fip) super(FloatingIp, self).__init__(fip)
class FloatingIpPool(APIDictWrapper): class FloatingIpPool(base.APIDictWrapper):
pass pass
class FloatingIpTarget(APIDictWrapper): class FloatingIpTarget(base.APIDictWrapper):
pass pass
@ -382,11 +381,11 @@ def get_ipver_str(ip_version):
def neutronclient(request): def neutronclient(request):
insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False) insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False)
LOG.debug('neutronclient connection created using token "%s" and url "%s"' LOG.debug('neutronclient connection created using token "%s" and url "%s"'
% (request.user.token.id, url_for(request, 'network'))) % (request.user.token.id, base.url_for(request, 'network')))
LOG.debug('user_id=%(user)s, tenant_id=%(tenant)s' % LOG.debug('user_id=%(user)s, tenant_id=%(tenant)s' %
{'user': request.user.id, 'tenant': request.user.tenant_id}) {'user': request.user.id, 'tenant': request.user.tenant_id})
c = neutron_client.Client(token=request.user.token.id, c = neutron_client.Client(token=request.user.token.id,
endpoint_url=url_for(request, 'network'), endpoint_url=base.url_for(request, 'network'),
insecure=insecure) insecure=insecure)
return c return c

View File

@ -24,23 +24,20 @@ from __future__ import absolute_import
import logging import logging
from django.conf import settings from django.conf import settings # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from novaclient.v1_1 import client as nova_client from novaclient.v1_1 import client as nova_client
from novaclient.v1_1.contrib.list_extensions import ListExtManager from novaclient.v1_1.contrib.list_extensions import ListExtManager # noqa
from novaclient.v1_1 import security_group_rules as nova_rules from novaclient.v1_1 import security_group_rules as nova_rules
from novaclient.v1_1.security_groups import SecurityGroup as NovaSecurityGroup from novaclient.v1_1.security_groups import SecurityGroup as NovaSecurityGroup # noqa
from novaclient.v1_1.servers import REBOOT_HARD from novaclient.v1_1.servers import REBOOT_HARD # noqa
from novaclient.v1_1.servers import REBOOT_SOFT from novaclient.v1_1.servers import REBOOT_SOFT # noqa
from horizon.conf import HORIZON_CONFIG from horizon.conf import HORIZON_CONFIG # noqa
from horizon.utils.memoized import memoized from horizon.utils.memoized import memoized # noqa
from openstack_dashboard.api.base import APIDictWrapper from openstack_dashboard.api import base
from openstack_dashboard.api.base import APIResourceWrapper
from openstack_dashboard.api.base import QuotaSet
from openstack_dashboard.api.base import url_for
from openstack_dashboard.api import network_base from openstack_dashboard.api import network_base
@ -52,21 +49,21 @@ INSTANCE_ACTIVE_STATE = 'ACTIVE'
VOLUME_STATE_AVAILABLE = "available" VOLUME_STATE_AVAILABLE = "available"
class VNCConsole(APIDictWrapper): class VNCConsole(base.APIDictWrapper):
"""Wrapper for the "console" dictionary returned by the """Wrapper for the "console" dictionary returned by the
novaclient.servers.get_vnc_console method. novaclient.servers.get_vnc_console method.
""" """
_attrs = ['url', 'type'] _attrs = ['url', 'type']
class SPICEConsole(APIDictWrapper): class SPICEConsole(base.APIDictWrapper):
"""Wrapper for the "console" dictionary returned by the """Wrapper for the "console" dictionary returned by the
novaclient.servers.get_spice_console method. novaclient.servers.get_spice_console method.
""" """
_attrs = ['url', 'type'] _attrs = ['url', 'type']
class Server(APIResourceWrapper): class Server(base.APIResourceWrapper):
"""Simple wrapper around novaclient.server.Server """Simple wrapper around novaclient.server.Server
Preserves the request info so image name can later be retrieved Preserves the request info so image name can later be retrieved
@ -100,7 +97,7 @@ class Server(APIResourceWrapper):
return getattr(self, 'OS-EXT-SRV-ATTR:instance_name', "") return getattr(self, 'OS-EXT-SRV-ATTR:instance_name', "")
class NovaUsage(APIResourceWrapper): class NovaUsage(base.APIResourceWrapper):
"""Simple wrapper around contrib/simple_usage.py.""" """Simple wrapper around contrib/simple_usage.py."""
_attrs = ['start', 'server_usages', 'stop', 'tenant_id', _attrs = ['start', 'server_usages', 'stop', 'tenant_id',
'total_local_gb_usage', 'total_memory_mb_usage', 'total_local_gb_usage', 'total_memory_mb_usage',
@ -142,7 +139,7 @@ class NovaUsage(APIResourceWrapper):
return getattr(self, "total_local_gb_usage", 0) return getattr(self, "total_local_gb_usage", 0)
class SecurityGroup(APIResourceWrapper): class SecurityGroup(base.APIResourceWrapper):
"""Wrapper around novaclient.security_groups.SecurityGroup which wraps its """Wrapper around novaclient.security_groups.SecurityGroup which wraps its
rules in SecurityGroupRule objects and allows access to them. rules in SecurityGroupRule objects and allows access to them.
""" """
@ -159,7 +156,7 @@ class SecurityGroup(APIResourceWrapper):
return self.__dict__['_rules'] return self.__dict__['_rules']
class SecurityGroupRule(APIResourceWrapper): class SecurityGroupRule(base.APIResourceWrapper):
""" Wrapper for individual rules in a SecurityGroup. """ """ Wrapper for individual rules in a SecurityGroup. """
_attrs = ['id', 'ip_protocol', 'from_port', 'to_port', 'ip_range', 'group'] _attrs = ['id', 'ip_protocol', 'from_port', 'to_port', 'ip_range', 'group']
@ -275,7 +272,7 @@ class FlavorExtraSpec(object):
self.value = val self.value = val
class FloatingIp(APIResourceWrapper): class FloatingIp(base.APIResourceWrapper):
_attrs = ['id', 'ip', 'fixed_ip', 'port_id', 'instance_id', 'pool'] _attrs = ['id', 'ip', 'fixed_ip', 'port_id', 'instance_id', 'pool']
def __init__(self, fip): def __init__(self, fip):
@ -283,14 +280,14 @@ class FloatingIp(APIResourceWrapper):
super(FloatingIp, self).__init__(fip) super(FloatingIp, self).__init__(fip)
class FloatingIpPool(APIDictWrapper): class FloatingIpPool(base.APIDictWrapper):
def __init__(self, pool): def __init__(self, pool):
pool_dict = {'id': pool.name, pool_dict = {'id': pool.name,
'name': pool.name} 'name': pool.name}
super(FloatingIpPool, self).__init__(pool_dict) super(FloatingIpPool, self).__init__(pool_dict)
class FloatingIpTarget(APIDictWrapper): class FloatingIpTarget(base.APIDictWrapper):
def __init__(self, server): def __init__(self, server):
server_dict = {'name': '%s (%s)' % (server.name, server.id), server_dict = {'name': '%s (%s)' % (server.name, server.id),
'id': server.id} 'id': server.id}
@ -343,15 +340,15 @@ class FloatingIpManager(network_base.FloatingIpManager):
def novaclient(request): def novaclient(request):
insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False) insecure = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False)
LOG.debug('novaclient connection created using token "%s" and url "%s"' % LOG.debug('novaclient connection created using token "%s" and url "%s"' %
(request.user.token.id, url_for(request, 'compute'))) (request.user.token.id, base.url_for(request, 'compute')))
c = nova_client.Client(request.user.username, c = nova_client.Client(request.user.username,
request.user.token.id, request.user.token.id,
project_id=request.user.tenant_id, project_id=request.user.tenant_id,
auth_url=url_for(request, 'compute'), auth_url=base.url_for(request, 'compute'),
insecure=insecure, insecure=insecure,
http_log_debug=settings.DEBUG) http_log_debug=settings.DEBUG)
c.client.auth_token = request.user.token.id c.client.auth_token = request.user.token.id
c.client.management_url = url_for(request, 'compute') c.client.management_url = base.url_for(request, 'compute')
return c return c
@ -545,7 +542,7 @@ def server_stop(request, instance_id):
def tenant_quota_get(request, tenant_id): def tenant_quota_get(request, tenant_id):
return QuotaSet(novaclient(request).quotas.get(tenant_id)) return base.QuotaSet(novaclient(request).quotas.get(tenant_id))
def tenant_quota_update(request, tenant_id, **kwargs): def tenant_quota_update(request, tenant_id, **kwargs):
@ -553,7 +550,7 @@ def tenant_quota_update(request, tenant_id, **kwargs):
def default_quota_get(request, tenant_id): def default_quota_get(request, tenant_id):
return QuotaSet(novaclient(request).quotas.defaults(tenant_id)) return base.QuotaSet(novaclient(request).quotas.defaults(tenant_id))
def usage_get(request, tenant_id, start, end): def usage_get(request, tenant_id, start, end):
@ -589,7 +586,7 @@ def instance_volume_detach(request, instance_id, att_id):
def instance_volumes_list(request, instance_id): def instance_volumes_list(request, instance_id):
from openstack_dashboard.api.cinder import cinderclient from openstack_dashboard.api.cinder import cinderclient # noqa
volumes = novaclient(request).volumes.get_server_volumes(instance_id) volumes = novaclient(request).volumes.get_server_volumes(instance_id)

View File

@ -22,14 +22,13 @@ import logging
import swiftclient import swiftclient
from django.conf import settings from django.conf import settings # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import exceptions from horizon import exceptions
from horizon import messages from horizon import messages
from openstack_dashboard.api.base import APIDictWrapper from openstack_dashboard.api import base
from openstack_dashboard.api.base import url_for
from openstack_dashboard.openstack.common import timeutils from openstack_dashboard.openstack.common import timeutils
@ -37,11 +36,11 @@ LOG = logging.getLogger(__name__)
FOLDER_DELIMITER = "/" FOLDER_DELIMITER = "/"
class Container(APIDictWrapper): class Container(base.APIDictWrapper):
pass pass
class StorageObject(APIDictWrapper): class StorageObject(base.APIDictWrapper):
def __init__(self, apidict, container_name, orig_name=None, data=None): def __init__(self, apidict, container_name, orig_name=None, data=None):
super(StorageObject, self).__init__(apidict) super(StorageObject, self).__init__(apidict)
self.container_name = container_name self.container_name = container_name
@ -53,7 +52,7 @@ class StorageObject(APIDictWrapper):
return self.name return self.name
class PseudoFolder(APIDictWrapper): class PseudoFolder(base.APIDictWrapper):
def __init__(self, apidict, container_name): def __init__(self, apidict, container_name):
super(PseudoFolder, self).__init__(apidict) super(PseudoFolder, self).__init__(apidict)
self.container_name = container_name self.container_name = container_name
@ -92,7 +91,7 @@ def _objectify(items, container_name):
def swift_api(request): def swift_api(request):
endpoint = url_for(request, 'object-store') endpoint = base.url_for(request, 'object-store')
LOG.debug('Swift connection created using token "%s" and url "%s"' LOG.debug('Swift connection created using token "%s" and url "%s"'
% (request.user.token.id, endpoint)) % (request.user.token.id, endpoint))
return swiftclient.client.Connection(None, return swiftclient.client.Connection(None,

View File

@ -23,7 +23,7 @@ Context processors used by Horizon.
import logging import logging
from django.conf import settings from django.conf import settings # noqa
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)

View File

@ -14,7 +14,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
import horizon import horizon

View File

@ -14,11 +14,11 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
import horizon import horizon
from openstack_dashboard.api.keystone import VERSIONS as IDENTITY_VERSIONS from openstack_dashboard.api.keystone import VERSIONS as IDENTITY_VERSIONS # noqa
from openstack_dashboard.dashboards.admin import dashboard from openstack_dashboard.dashboards.admin import dashboard

View File

@ -16,22 +16,17 @@
import logging import logging
from django.conf import settings from django.conf import settings # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from keystoneclient.exceptions import ClientException from keystoneclient.exceptions import ClientException # noqa
from horizon import messages from horizon import messages
from horizon import tables from horizon import tables
from openstack_dashboard import api from openstack_dashboard import api
from openstack_dashboard.dashboards.admin.domains.constants \ from openstack_dashboard.dashboards.admin.domains import constants
import DOMAINS_CREATE_URL
from openstack_dashboard.dashboards.admin.domains.constants \
import DOMAINS_INDEX_URL
from openstack_dashboard.dashboards.admin.domains.constants \
import DOMAINS_UPDATE_URL
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -40,7 +35,7 @@ LOG = logging.getLogger(__name__)
class CreateDomainLink(tables.LinkAction): class CreateDomainLink(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create Domain") verbose_name = _("Create Domain")
url = DOMAINS_CREATE_URL url = constants.DOMAINS_CREATE_URL
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal", "btn-create")
def allowed(self, request, domain): def allowed(self, request, domain):
@ -50,7 +45,7 @@ class CreateDomainLink(tables.LinkAction):
class EditDomainLink(tables.LinkAction): class EditDomainLink(tables.LinkAction):
name = "edit" name = "edit"
verbose_name = _("Edit") verbose_name = _("Edit")
url = DOMAINS_UPDATE_URL url = constants.DOMAINS_UPDATE_URL
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal", "btn-edit")
def allowed(self, request, domain): def allowed(self, request, domain):
@ -99,7 +94,7 @@ class DomainFilterAction(tables.FilterAction):
class SetDomainContext(tables.Action): class SetDomainContext(tables.Action):
name = "set_domain_context" name = "set_domain_context"
verbose_name = _("Set Domain Context") verbose_name = _("Set Domain Context")
url = DOMAINS_INDEX_URL url = constants.DOMAINS_INDEX_URL
preempt = True preempt = True
def allowed(self, request, datum): def allowed(self, request, datum):
@ -132,7 +127,7 @@ class SetDomainContext(tables.Action):
class UnsetDomainContext(tables.Action): class UnsetDomainContext(tables.Action):
name = "clear_domain_context" name = "clear_domain_context"
verbose_name = _("Clear Domain Context") verbose_name = _("Clear Domain Context")
url = DOMAINS_INDEX_URL url = constants.DOMAINS_INDEX_URL
preempt = True preempt = True
requires_input = False requires_input = False

View File

@ -15,32 +15,24 @@
# under the License. # under the License.
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse # noqa
from django import http from django import http
from mox import IgnoreArg from mox import IgnoreArg # noqa
from mox import IsA from mox import IsA # noqa
from horizon.workflows.views import WorkflowView from horizon.workflows import views
from openstack_dashboard import api from openstack_dashboard import api
from openstack_dashboard.test import helpers as test from openstack_dashboard.test import helpers as test
from openstack_dashboard.dashboards.admin.domains.constants \ from openstack_dashboard.dashboards.admin.domains import constants
import DOMAINS_CREATE_URL as create_url from openstack_dashboard.dashboards.admin.domains import workflows
from openstack_dashboard.dashboards.admin.domains.constants \
import DOMAINS_INDEX_URL as index_url
from openstack_dashboard.dashboards.admin.domains.constants \
import DOMAINS_INDEX_VIEW_TEMPLATE
from openstack_dashboard.dashboards.admin.domains.constants \
import DOMAINS_UPDATE_URL as update_url
from openstack_dashboard.dashboards.admin.domains.workflows import CreateDomain
from openstack_dashboard.dashboards.admin.domains.workflows import UpdateDomain
DOMAINS_INDEX_URL = reverse(index_url) DOMAINS_INDEX_URL = reverse(constants.DOMAINS_INDEX_URL)
DOMAIN_CREATE_URL = reverse(create_url) DOMAIN_CREATE_URL = reverse(constants.DOMAINS_CREATE_URL)
DOMAIN_UPDATE_URL = reverse(update_url, args=[1]) DOMAIN_UPDATE_URL = reverse(constants.DOMAINS_UPDATE_URL, args=[1])
class DomainsViewTests(test.BaseAdminViewTests): class DomainsViewTests(test.BaseAdminViewTests):
@ -52,7 +44,7 @@ class DomainsViewTests(test.BaseAdminViewTests):
res = self.client.get(DOMAINS_INDEX_URL) res = self.client.get(DOMAINS_INDEX_URL)
self.assertTemplateUsed(res, DOMAINS_INDEX_VIEW_TEMPLATE) self.assertTemplateUsed(res, constants.DOMAINS_INDEX_VIEW_TEMPLATE)
self.assertItemsEqual(res.context['table'].data, self.domains.list()) self.assertItemsEqual(res.context['table'].data, self.domains.list())
self.assertContains(res, 'Create Domain') self.assertContains(res, 'Create Domain')
self.assertContains(res, 'Edit') self.assertContains(res, 'Edit')
@ -69,7 +61,7 @@ class DomainsViewTests(test.BaseAdminViewTests):
res = self.client.get(DOMAINS_INDEX_URL) res = self.client.get(DOMAINS_INDEX_URL)
self.assertTemplateUsed(res, DOMAINS_INDEX_VIEW_TEMPLATE) self.assertTemplateUsed(res, constants.DOMAINS_INDEX_VIEW_TEMPLATE)
self.assertItemsEqual(res.context['table'].data, self.domains.list()) self.assertItemsEqual(res.context['table'].data, self.domains.list())
self.assertNotContains(res, 'Create Domain') self.assertNotContains(res, 'Create Domain')
self.assertNotContains(res, 'Edit') self.assertNotContains(res, 'Edit')
@ -119,14 +111,14 @@ class DomainsViewTests(test.BaseAdminViewTests):
formData = {'action': 'domains__set_domain_context__%s' % domain.id} formData = {'action': 'domains__set_domain_context__%s' % domain.id}
res = self.client.post(DOMAINS_INDEX_URL, formData) res = self.client.post(DOMAINS_INDEX_URL, formData)
self.assertTemplateUsed(res, DOMAINS_INDEX_VIEW_TEMPLATE) self.assertTemplateUsed(res, constants.DOMAINS_INDEX_VIEW_TEMPLATE)
self.assertItemsEqual(res.context['table'].data, [domain, ]) self.assertItemsEqual(res.context['table'].data, [domain, ])
self.assertContains(res, "<em>test_domain:</em>") self.assertContains(res, "<em>test_domain:</em>")
formData = {'action': 'domains__clear_domain_context__%s' % domain.id} formData = {'action': 'domains__clear_domain_context__%s' % domain.id}
res = self.client.post(DOMAINS_INDEX_URL, formData) res = self.client.post(DOMAINS_INDEX_URL, formData)
self.assertTemplateUsed(res, DOMAINS_INDEX_VIEW_TEMPLATE) self.assertTemplateUsed(res, constants.DOMAINS_INDEX_VIEW_TEMPLATE)
self.assertItemsEqual(res.context['table'].data, self.domains.list()) self.assertItemsEqual(res.context['table'].data, self.domains.list())
self.assertNotContains(res, "<em>test_domain:</em>") self.assertNotContains(res, "<em>test_domain:</em>")
@ -146,10 +138,11 @@ class CreateDomainWorkflowTests(test.BaseAdminViewTests):
url = reverse('horizon:admin:domains:create') url = reverse('horizon:admin:domains:create')
res = self.client.get(url) res = self.client.get(url)
self.assertTemplateUsed(res, WorkflowView.template_name) self.assertTemplateUsed(res, views.WorkflowView.template_name)
workflow = res.context['workflow'] workflow = res.context['workflow']
self.assertEqual(res.context['workflow'].name, CreateDomain.name) self.assertEqual(res.context['workflow'].name,
workflows.CreateDomain.name)
self.assertQuerysetEqual(workflow.steps, self.assertQuerysetEqual(workflow.steps,
['<CreateDomainInfo: create_domain>', ]) ['<CreateDomainInfo: create_domain>', ])
@ -195,10 +188,11 @@ class UpdateDomainWorkflowTests(test.BaseAdminViewTests):
res = self.client.get(DOMAIN_UPDATE_URL) res = self.client.get(DOMAIN_UPDATE_URL)
self.assertTemplateUsed(res, WorkflowView.template_name) self.assertTemplateUsed(res, views.WorkflowView.template_name)
workflow = res.context['workflow'] workflow = res.context['workflow']
self.assertEqual(res.context['workflow'].name, UpdateDomain.name) self.assertEqual(res.context['workflow'].name,
workflows.UpdateDomain.name)
self.assertQuerysetEqual(workflow.steps, self.assertQuerysetEqual(workflow.steps,
['<UpdateDomainInfo: update_domain>', ]) ['<UpdateDomainInfo: update_domain>', ])

View File

@ -14,17 +14,15 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.conf.urls.defaults import patterns from django.conf.urls.defaults import patterns # noqa
from django.conf.urls.defaults import url from django.conf.urls.defaults import url # noqa
from openstack_dashboard.dashboards.admin.domains.views import CreateDomainView from openstack_dashboard.dashboards.admin.domains import views
from openstack_dashboard.dashboards.admin.domains.views import IndexView
from openstack_dashboard.dashboards.admin.domains.views import UpdateDomainView
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^$', IndexView.as_view(), name='index'), url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^create$', CreateDomainView.as_view(), name='create'), url(r'^create$', views.CreateDomainView.as_view(), name='create'),
url(r'^(?P<domain_id>[^/]+)/update/$', url(r'^(?P<domain_id>[^/]+)/update/$',
UpdateDomainView.as_view(), name='update') views.UpdateDomainView.as_view(), name='update')
) )

View File

@ -14,8 +14,8 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import exceptions from horizon import exceptions
from horizon import tables from horizon import tables
@ -23,22 +23,16 @@ from horizon import workflows
from openstack_dashboard import api from openstack_dashboard import api
from openstack_dashboard.dashboards.admin.domains.constants \ from openstack_dashboard.dashboards.admin.domains import constants
import DOMAIN_INFO_FIELDS from openstack_dashboard.dashboards.admin.domains \
from openstack_dashboard.dashboards.admin.domains.constants \ import tables as project_tables
import DOMAINS_INDEX_URL from openstack_dashboard.dashboards.admin.domains \
from openstack_dashboard.dashboards.admin.domains.constants \ import workflows as project_workflows
import DOMAINS_INDEX_VIEW_TEMPLATE
from openstack_dashboard.dashboards.admin.domains.tables import DomainsTable
from openstack_dashboard.dashboards.admin.domains.workflows \
import CreateDomain
from openstack_dashboard.dashboards.admin.domains.workflows \
import UpdateDomain
class IndexView(tables.DataTableView): class IndexView(tables.DataTableView):
table_class = DomainsTable table_class = project_tables.DomainsTable
template_name = DOMAINS_INDEX_VIEW_TEMPLATE template_name = constants.DOMAINS_INDEX_VIEW_TEMPLATE
def get_data(self): def get_data(self):
domains = [] domains = []
@ -57,11 +51,11 @@ class IndexView(tables.DataTableView):
class CreateDomainView(workflows.WorkflowView): class CreateDomainView(workflows.WorkflowView):
workflow_class = CreateDomain workflow_class = project_workflows.CreateDomain
class UpdateDomainView(workflows.WorkflowView): class UpdateDomainView(workflows.WorkflowView):
workflow_class = UpdateDomain workflow_class = project_workflows.UpdateDomain
def get_initial(self): def get_initial(self):
initial = super(UpdateDomainView, self).get_initial() initial = super(UpdateDomainView, self).get_initial()
@ -73,10 +67,10 @@ class UpdateDomainView(workflows.WorkflowView):
# get initial domain info # get initial domain info
domain_info = api.keystone.domain_get(self.request, domain_info = api.keystone.domain_get(self.request,
domain_id) domain_id)
for field in DOMAIN_INFO_FIELDS: for field in constants.DOMAIN_INFO_FIELDS:
initial[field] = getattr(domain_info, field, None) initial[field] = getattr(domain_info, field, None)
except Exception: except Exception:
exceptions.handle(self.request, exceptions.handle(self.request,
_('Unable to retrieve domain details.'), _('Unable to retrieve domain details.'),
redirect=reverse(DOMAINS_INDEX_URL)) redirect=reverse(constants.DOMAINS_INDEX_URL))
return initial return initial

View File

@ -16,7 +16,7 @@
import logging import logging
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import exceptions from horizon import exceptions
from horizon import forms from horizon import forms
@ -24,8 +24,7 @@ from horizon import workflows
from openstack_dashboard import api from openstack_dashboard import api
from openstack_dashboard.dashboards.admin.domains.constants \ from openstack_dashboard.dashboards.admin.domains import constants
import DOMAINS_INDEX_URL
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -61,7 +60,7 @@ class CreateDomain(workflows.Workflow):
finalize_button_name = _("Create Domain") finalize_button_name = _("Create Domain")
success_message = _('Created new domain "%s".') success_message = _('Created new domain "%s".')
failure_message = _('Unable to create domain "%s".') failure_message = _('Unable to create domain "%s".')
success_url = DOMAINS_INDEX_URL success_url = constants.DOMAINS_INDEX_URL
default_steps = (CreateDomainInfo, ) default_steps = (CreateDomainInfo, )
def format_status_message(self, message): def format_status_message(self, message):
@ -105,7 +104,7 @@ class UpdateDomain(workflows.Workflow):
finalize_button_name = _("Save") finalize_button_name = _("Save")
success_message = _('Modified domain "%s".') success_message = _('Modified domain "%s".')
failure_message = _('Unable to modify domain "%s".') failure_message = _('Unable to modify domain "%s".')
success_url = DOMAINS_INDEX_URL success_url = constants.DOMAINS_INDEX_URL
default_steps = (UpdateDomainInfo, ) default_steps = (UpdateDomainInfo, )
def format_status_message(self, message): def format_status_message(self, message):

View File

@ -20,7 +20,7 @@
import logging import logging
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from openstack_dashboard import api from openstack_dashboard import api

View File

@ -16,8 +16,8 @@
import logging import logging
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import tables from horizon import tables

View File

@ -1,7 +1,7 @@
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse # noqa
from django import http from django import http
from mox import IsA from mox import IsA # noqa
from openstack_dashboard import api from openstack_dashboard import api
from openstack_dashboard.test import helpers as test from openstack_dashboard.test import helpers as test

View File

@ -18,16 +18,13 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.conf.urls.defaults import patterns from django.conf.urls.defaults import patterns # noqa
from django.conf.urls.defaults import url from django.conf.urls.defaults import url # noqa
from openstack_dashboard.dashboards.admin.flavors.extras.views \ from openstack_dashboard.dashboards.admin.flavors.extras import views
import CreateView
from openstack_dashboard.dashboards.admin.flavors.extras.views import EditView
from openstack_dashboard.dashboards.admin.flavors.extras.views import IndexView
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^$', IndexView.as_view(), name='index'), url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^create/$', CreateView.as_view(), name='create'), url(r'^create/$', views.CreateView.as_view(), name='create'),
url(r'^(?P<key>[^/]+)/edit/$', EditView.as_view(), name='edit') url(r'^(?P<key>[^/]+)/edit/$', views.EditView.as_view(), name='edit')
) )

View File

@ -20,7 +20,7 @@
import logging import logging
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import exceptions from horizon import exceptions
from horizon import forms from horizon import forms
@ -28,12 +28,10 @@ from horizon import tables
from openstack_dashboard import api from openstack_dashboard import api
from openstack_dashboard.dashboards.admin.flavors.extras.forms \ from openstack_dashboard.dashboards.admin.flavors.extras \
import CreateExtraSpec import forms as project_forms
from openstack_dashboard.dashboards.admin.flavors.extras.forms \ from openstack_dashboard.dashboards.admin.flavors.extras \
import EditExtraSpec import tables as project_tables
from openstack_dashboard.dashboards.admin.flavors.extras.tables \
import ExtraSpecsTable
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -52,7 +50,7 @@ class ExtraSpecMixin(object):
class IndexView(ExtraSpecMixin, forms.ModalFormMixin, tables.DataTableView): class IndexView(ExtraSpecMixin, forms.ModalFormMixin, tables.DataTableView):
table_class = ExtraSpecsTable table_class = project_tables.ExtraSpecsTable
template_name = 'admin/flavors/extras/index.html' template_name = 'admin/flavors/extras/index.html'
def get_data(self): def get_data(self):
@ -68,7 +66,7 @@ class IndexView(ExtraSpecMixin, forms.ModalFormMixin, tables.DataTableView):
class CreateView(ExtraSpecMixin, forms.ModalFormView): class CreateView(ExtraSpecMixin, forms.ModalFormView):
form_class = CreateExtraSpec form_class = project_forms.CreateExtraSpec
template_name = 'admin/flavors/extras/create.html' template_name = 'admin/flavors/extras/create.html'
def get_initial(self): def get_initial(self):
@ -79,7 +77,7 @@ class CreateView(ExtraSpecMixin, forms.ModalFormView):
class EditView(ExtraSpecMixin, forms.ModalFormView): class EditView(ExtraSpecMixin, forms.ModalFormView):
form_class = EditExtraSpec form_class = project_forms.EditExtraSpec
template_name = 'admin/flavors/extras/edit.html' template_name = 'admin/flavors/extras/edit.html'
def get_initial(self): def get_initial(self):

View File

@ -20,7 +20,7 @@
import logging import logging
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import exceptions from horizon import exceptions
from horizon import forms from horizon import forms

View File

@ -18,7 +18,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
import horizon import horizon

View File

@ -1,6 +1,6 @@
import logging import logging
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import tables from horizon import tables

View File

@ -1,6 +1,6 @@
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse # noqa
from django import http from django import http
from mox import IsA from mox import IsA # noqa
from openstack_dashboard import api from openstack_dashboard import api
from openstack_dashboard.test import helpers as test from openstack_dashboard.test import helpers as test

View File

@ -18,19 +18,17 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.conf.urls.defaults import include from django.conf.urls.defaults import include # noqa
from django.conf.urls.defaults import patterns from django.conf.urls.defaults import patterns # noqa
from django.conf.urls.defaults import url from django.conf.urls.defaults import url # noqa
from openstack_dashboard.dashboards.admin.flavors.extras \ from openstack_dashboard.dashboards.admin.flavors.extras \
import urls as extras_urls import urls as extras_urls
from openstack_dashboard.dashboards.admin.flavors.views import CreateView from openstack_dashboard.dashboards.admin.flavors import views
from openstack_dashboard.dashboards.admin.flavors.views import EditView
from openstack_dashboard.dashboards.admin.flavors.views import IndexView
urlpatterns = patterns('openstack_dashboard.dashboards.admin.flavors.views', urlpatterns = patterns('openstack_dashboard.dashboards.admin.flavors.views',
url(r'^$', IndexView.as_view(), name='index'), url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^create/$', CreateView.as_view(), name='create'), url(r'^create/$', views.CreateView.as_view(), name='create'),
url(r'^(?P<id>[^/]+)/edit/$', EditView.as_view(), name='edit'), url(r'^(?P<id>[^/]+)/edit/$', views.EditView.as_view(), name='edit'),
url(r'^(?P<id>[^/]+)/extras/', include(extras_urls, namespace='extras')), url(r'^(?P<id>[^/]+)/extras/', include(extras_urls, namespace='extras')),
) )

View File

@ -20,8 +20,8 @@
import logging import logging
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import exceptions from horizon import exceptions
from horizon import forms from horizon import forms
@ -29,16 +29,17 @@ from horizon import tables
from openstack_dashboard import api from openstack_dashboard import api
from openstack_dashboard.dashboards.admin.flavors.forms import CreateFlavor from openstack_dashboard.dashboards.admin.flavors \
from openstack_dashboard.dashboards.admin.flavors.forms import EditFlavor import forms as project_forms
from openstack_dashboard.dashboards.admin.flavors.tables import FlavorsTable from openstack_dashboard.dashboards.admin.flavors \
import tables as project_tables
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
class IndexView(tables.DataTableView): class IndexView(tables.DataTableView):
table_class = FlavorsTable table_class = project_tables.FlavorsTable
template_name = 'admin/flavors/index.html' template_name = 'admin/flavors/index.html'
def get_data(self): def get_data(self):
@ -55,13 +56,13 @@ class IndexView(tables.DataTableView):
class CreateView(forms.ModalFormView): class CreateView(forms.ModalFormView):
form_class = CreateFlavor form_class = project_forms.CreateFlavor
template_name = 'admin/flavors/create.html' template_name = 'admin/flavors/create.html'
success_url = reverse_lazy('horizon:admin:flavors:index') success_url = reverse_lazy('horizon:admin:flavors:index')
class EditView(forms.ModalFormView): class EditView(forms.ModalFormView):
form_class = EditFlavor form_class = project_forms.EditFlavor
template_name = 'admin/flavors/edit.html' template_name = 'admin/flavors/edit.html'
success_url = reverse_lazy('horizon:admin:flavors:index') success_url = reverse_lazy('horizon:admin:flavors:index')

View File

@ -16,7 +16,7 @@
import logging import logging
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import exceptions from horizon import exceptions
from horizon import forms from horizon import forms

View File

@ -14,11 +14,11 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
import horizon import horizon
from openstack_dashboard.api.keystone import VERSIONS as IDENTITY_VERSIONS from openstack_dashboard.api.keystone import VERSIONS as IDENTITY_VERSIONS # noqa
from openstack_dashboard.dashboards.admin import dashboard from openstack_dashboard.dashboards.admin import dashboard

View File

@ -16,22 +16,15 @@
import logging import logging
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse # noqa
from django.template import defaultfilters from django.template import defaultfilters
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import tables from horizon import tables
from openstack_dashboard import api from openstack_dashboard import api
from openstack_dashboard.dashboards.admin.groups.constants \ from openstack_dashboard.dashboards.admin.groups import constants
import GROUPS_ADD_MEMBER_URL
from openstack_dashboard.dashboards.admin.groups.constants \
import GROUPS_CREATE_URL
from openstack_dashboard.dashboards.admin.groups.constants \
import GROUPS_MANAGE_URL
from openstack_dashboard.dashboards.admin.groups.constants \
import GROUPS_UPDATE_URL
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -45,7 +38,7 @@ STATUS_CHOICES = (
class CreateGroupLink(tables.LinkAction): class CreateGroupLink(tables.LinkAction):
name = "create" name = "create"
verbose_name = _("Create Group") verbose_name = _("Create Group")
url = GROUPS_CREATE_URL url = constants.GROUPS_CREATE_URL
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal", "btn-create")
def allowed(self, request, group): def allowed(self, request, group):
@ -55,7 +48,7 @@ class CreateGroupLink(tables.LinkAction):
class EditGroupLink(tables.LinkAction): class EditGroupLink(tables.LinkAction):
name = "edit" name = "edit"
verbose_name = _("Edit Group") verbose_name = _("Edit Group")
url = GROUPS_UPDATE_URL url = constants.GROUPS_UPDATE_URL
classes = ("ajax-modal", "btn-edit") classes = ("ajax-modal", "btn-edit")
def allowed(self, request, group): def allowed(self, request, group):
@ -78,7 +71,7 @@ class DeleteGroupsAction(tables.DeleteAction):
class ManageUsersLink(tables.LinkAction): class ManageUsersLink(tables.LinkAction):
name = "users" name = "users"
verbose_name = _("Modify Users") verbose_name = _("Modify Users")
url = GROUPS_MANAGE_URL url = constants.GROUPS_MANAGE_URL
classes = ("btn-edit") classes = ("btn-edit")
def allowed(self, request, datum): def allowed(self, request, datum):
@ -148,7 +141,7 @@ class AddMembersLink(tables.LinkAction):
name = "add_user_link" name = "add_user_link"
verbose_name = _("Add...") verbose_name = _("Add...")
classes = ("ajax-modal", "btn-create") classes = ("ajax-modal", "btn-create")
url = GROUPS_ADD_MEMBER_URL url = constants.GROUPS_ADD_MEMBER_URL
def allowed(self, request, user=None): def allowed(self, request, user=None):
return api.keystone.keystone_can_edit_group() return api.keystone.keystone_can_edit_group()
@ -183,7 +176,7 @@ class AddMembers(tables.BatchAction):
data_type_plural = _("Users") data_type_plural = _("Users")
classes = ("btn-create", ) classes = ("btn-create", )
requires_input = True requires_input = True
success_url = GROUPS_MANAGE_URL success_url = constants.GROUPS_MANAGE_URL
def allowed(self, request, user=None): def allowed(self, request, user=None):
return api.keystone.keystone_can_edit_group() return api.keystone.keystone_can_edit_group()

View File

@ -14,36 +14,23 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse # noqa
from django import http from django import http
from mox import IgnoreArg from mox import IgnoreArg # noqa
from mox import IsA from mox import IsA # noqa
from openstack_dashboard import api from openstack_dashboard import api
from openstack_dashboard.test import helpers as test from openstack_dashboard.test import helpers as test
from openstack_dashboard.dashboards.admin.groups.constants \ from openstack_dashboard.dashboards.admin.groups import constants
import GROUPS_ADD_MEMBER_URL as add_member_url
from openstack_dashboard.dashboards.admin.groups.constants \
import GROUPS_CREATE_URL as create_url
from openstack_dashboard.dashboards.admin.groups.constants \
import GROUPS_INDEX_URL as index_url
from openstack_dashboard.dashboards.admin.groups.constants \
import GROUPS_INDEX_VIEW_TEMPLATE
from openstack_dashboard.dashboards.admin.groups.constants \
import GROUPS_MANAGE_URL as manage_url
from openstack_dashboard.dashboards.admin.groups.constants \
import GROUPS_MANAGE_VIEW_TEMPLATE
from openstack_dashboard.dashboards.admin.groups.constants \
import GROUPS_UPDATE_URL as update_url
GROUPS_INDEX_URL = reverse(index_url) GROUPS_INDEX_URL = reverse(constants.GROUPS_INDEX_URL)
GROUP_CREATE_URL = reverse(create_url) GROUP_CREATE_URL = reverse(constants.GROUPS_CREATE_URL)
GROUP_UPDATE_URL = reverse(update_url, args=[1]) GROUP_UPDATE_URL = reverse(constants.GROUPS_UPDATE_URL, args=[1])
GROUP_MANAGE_URL = reverse(manage_url, args=[1]) GROUP_MANAGE_URL = reverse(constants.GROUPS_MANAGE_URL, args=[1])
GROUP_ADD_MEMBER_URL = reverse(add_member_url, args=[1]) GROUP_ADD_MEMBER_URL = reverse(constants.GROUPS_ADD_MEMBER_URL, args=[1])
class GroupsViewTests(test.BaseAdminViewTests): class GroupsViewTests(test.BaseAdminViewTests):
@ -70,7 +57,7 @@ class GroupsViewTests(test.BaseAdminViewTests):
res = self.client.get(GROUPS_INDEX_URL) res = self.client.get(GROUPS_INDEX_URL)
self.assertTemplateUsed(res, GROUPS_INDEX_VIEW_TEMPLATE) self.assertTemplateUsed(res, constants.GROUPS_INDEX_VIEW_TEMPLATE)
self.assertItemsEqual(res.context['table'].data, groups) self.assertItemsEqual(res.context['table'].data, groups)
if domain_id: if domain_id:
for group in res.context['table'].data: for group in res.context['table'].data:
@ -101,7 +88,7 @@ class GroupsViewTests(test.BaseAdminViewTests):
res = self.client.get(GROUPS_INDEX_URL) res = self.client.get(GROUPS_INDEX_URL)
self.assertTemplateUsed(res, GROUPS_INDEX_VIEW_TEMPLATE) self.assertTemplateUsed(res, constants.GROUPS_INDEX_VIEW_TEMPLATE)
self.assertItemsEqual(res.context['table'].data, groups) self.assertItemsEqual(res.context['table'].data, groups)
self.assertNotContains(res, 'Create Group') self.assertNotContains(res, 'Create Group')
@ -189,7 +176,7 @@ class GroupsViewTests(test.BaseAdminViewTests):
res = self.client.get(GROUP_MANAGE_URL) res = self.client.get(GROUP_MANAGE_URL)
self.assertTemplateUsed(res, GROUPS_MANAGE_VIEW_TEMPLATE) self.assertTemplateUsed(res, constants.GROUPS_MANAGE_VIEW_TEMPLATE)
self.assertItemsEqual(res.context['table'].data, group_members) self.assertItemsEqual(res.context['table'].data, group_members)
@test.create_stubs({api.keystone: ('user_list', @test.create_stubs({api.keystone: ('user_list',

View File

@ -14,23 +14,19 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.conf.urls.defaults import patterns from django.conf.urls.defaults import patterns # noqa
from django.conf.urls.defaults import url from django.conf.urls.defaults import url # noqa
from openstack_dashboard.dashboards.admin.groups.views import CreateView from openstack_dashboard.dashboards.admin.groups import views
from openstack_dashboard.dashboards.admin.groups.views import IndexView
from openstack_dashboard.dashboards.admin.groups.views import ManageMembersView
from openstack_dashboard.dashboards.admin.groups.views import NonMembersView
from openstack_dashboard.dashboards.admin.groups.views import UpdateView
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^$', IndexView.as_view(), name='index'), url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^create$', CreateView.as_view(), name='create'), url(r'^create$', views.CreateView.as_view(), name='create'),
url(r'^(?P<group_id>[^/]+)/update/$', url(r'^(?P<group_id>[^/]+)/update/$',
UpdateView.as_view(), name='update'), views.UpdateView.as_view(), name='update'),
url(r'^(?P<group_id>[^/]+)/manage_members/$', url(r'^(?P<group_id>[^/]+)/manage_members/$',
ManageMembersView.as_view(), name='manage_members'), views.ManageMembersView.as_view(), name='manage_members'),
url(r'^(?P<group_id>[^/]+)/add_members/$', url(r'^(?P<group_id>[^/]+)/add_members/$',
NonMembersView.as_view(), name='add_members'), views.NonMembersView.as_view(), name='add_members'),
) )

View File

@ -14,9 +14,9 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse # noqa
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import exceptions from horizon import exceptions
from horizon import forms from horizon import forms
@ -24,32 +24,16 @@ from horizon import tables
from openstack_dashboard import api from openstack_dashboard import api
from openstack_dashboard.dashboards.admin.groups.constants \ from openstack_dashboard.dashboards.admin.groups import constants
import GROUPS_ADD_MEMBER_AJAX_VIEW_TEMPLATE from openstack_dashboard.dashboards.admin.groups \
from openstack_dashboard.dashboards.admin.groups.constants \ import forms as project_forms
import GROUPS_ADD_MEMBER_VIEW_TEMPLATE from openstack_dashboard.dashboards.admin.groups \
from openstack_dashboard.dashboards.admin.groups.constants \ import tables as project_tables
import GROUPS_CREATE_VIEW_TEMPLATE
from openstack_dashboard.dashboards.admin.groups.constants \
import GROUPS_INDEX_URL
from openstack_dashboard.dashboards.admin.groups.constants \
import GROUPS_INDEX_VIEW_TEMPLATE
from openstack_dashboard.dashboards.admin.groups.constants \
import GROUPS_MANAGE_VIEW_TEMPLATE
from openstack_dashboard.dashboards.admin.groups.constants \
import GROUPS_UPDATE_VIEW_TEMPLATE
from openstack_dashboard.dashboards.admin.groups.forms import CreateGroupForm
from openstack_dashboard.dashboards.admin.groups.forms import UpdateGroupForm
from openstack_dashboard.dashboards.admin.groups.tables \
import GroupMembersTable
from openstack_dashboard.dashboards.admin.groups.tables \
import GroupNonMembersTable
from openstack_dashboard.dashboards.admin.groups.tables import GroupsTable
class IndexView(tables.DataTableView): class IndexView(tables.DataTableView):
table_class = GroupsTable table_class = project_tables.GroupsTable
template_name = GROUPS_INDEX_VIEW_TEMPLATE template_name = constants.GROUPS_INDEX_VIEW_TEMPLATE
def get_data(self): def get_data(self):
groups = [] groups = []
@ -64,15 +48,15 @@ class IndexView(tables.DataTableView):
class CreateView(forms.ModalFormView): class CreateView(forms.ModalFormView):
form_class = CreateGroupForm form_class = project_forms.CreateGroupForm
template_name = GROUPS_CREATE_VIEW_TEMPLATE template_name = constants.GROUPS_CREATE_VIEW_TEMPLATE
success_url = reverse_lazy(GROUPS_INDEX_URL) success_url = reverse_lazy(constants.GROUPS_INDEX_URL)
class UpdateView(forms.ModalFormView): class UpdateView(forms.ModalFormView):
form_class = UpdateGroupForm form_class = project_forms.UpdateGroupForm
template_name = GROUPS_UPDATE_VIEW_TEMPLATE template_name = constants.GROUPS_UPDATE_VIEW_TEMPLATE
success_url = reverse_lazy(GROUPS_INDEX_URL) success_url = reverse_lazy(constants.GROUPS_INDEX_URL)
def get_object(self): def get_object(self):
if not hasattr(self, "_object"): if not hasattr(self, "_object"):
@ -80,7 +64,7 @@ class UpdateView(forms.ModalFormView):
self._object = api.keystone.group_get(self.request, self._object = api.keystone.group_get(self.request,
self.kwargs['group_id']) self.kwargs['group_id'])
except Exception: except Exception:
redirect = reverse(GROUPS_INDEX_URL) redirect = reverse(constants.GROUPS_INDEX_URL)
exceptions.handle(self.request, exceptions.handle(self.request,
_('Unable to update group.'), _('Unable to update group.'),
redirect=redirect) redirect=redirect)
@ -125,8 +109,8 @@ class GroupManageMixin(object):
class ManageMembersView(GroupManageMixin, tables.DataTableView): class ManageMembersView(GroupManageMixin, tables.DataTableView):
table_class = GroupMembersTable table_class = project_tables.GroupMembersTable
template_name = GROUPS_MANAGE_VIEW_TEMPLATE template_name = constants.GROUPS_MANAGE_VIEW_TEMPLATE
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(ManageMembersView, self).get_context_data(**kwargs) context = super(ManageMembersView, self).get_context_data(**kwargs)
@ -145,9 +129,9 @@ class ManageMembersView(GroupManageMixin, tables.DataTableView):
class NonMembersView(GroupManageMixin, forms.ModalFormMixin, class NonMembersView(GroupManageMixin, forms.ModalFormMixin,
tables.DataTableView): tables.DataTableView):
template_name = GROUPS_ADD_MEMBER_VIEW_TEMPLATE template_name = constants.GROUPS_ADD_MEMBER_VIEW_TEMPLATE
ajax_template_name = GROUPS_ADD_MEMBER_AJAX_VIEW_TEMPLATE ajax_template_name = constants.GROUPS_ADD_MEMBER_AJAX_VIEW_TEMPLATE
table_class = GroupNonMembersTable table_class = project_tables.GroupNonMembersTable
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(NonMembersView, self).get_context_data(**kwargs) context = super(NonMembersView, self).get_context_data(**kwargs)

View File

@ -14,7 +14,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
import horizon import horizon
from openstack_dashboard.dashboards.admin import dashboard from openstack_dashboard.dashboards.admin import dashboard

View File

@ -16,7 +16,7 @@
import logging import logging
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import tables from horizon import tables
from horizon.templatetags import sizeformat from horizon.templatetags import sizeformat

View File

@ -14,9 +14,9 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse # noqa
from django import http from django import http
from mox import IsA from mox import IsA # noqa
from openstack_dashboard import api from openstack_dashboard import api
from openstack_dashboard.test import helpers as test from openstack_dashboard.test import helpers as test

View File

@ -14,14 +14,13 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.conf.urls.defaults import patterns from django.conf.urls.defaults import patterns # noqa
from django.conf.urls.defaults import url from django.conf.urls.defaults import url # noqa
from openstack_dashboard.dashboards.admin.hypervisors.views \ from openstack_dashboard.dashboards.admin.hypervisors import views
import AdminIndexView
urlpatterns = patterns( urlpatterns = patterns(
'openstack_dashboard.dashboards.admin.hypervisors.views', 'openstack_dashboard.dashboards.admin.hypervisors.views',
url(r'^$', AdminIndexView.as_view(), name='index') url(r'^$', views.AdminIndexView.as_view(), name='index')
) )

View File

@ -16,19 +16,19 @@
import logging import logging
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import exceptions from horizon import exceptions
from horizon import tables from horizon import tables
from openstack_dashboard import api from openstack_dashboard import api
from openstack_dashboard.dashboards.admin.hypervisors.tables import \ from openstack_dashboard.dashboards.admin.hypervisors \
AdminHypervisorsTable import tables as project_tables
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
class AdminIndexView(tables.DataTableView): class AdminIndexView(tables.DataTableView):
table_class = AdminHypervisorsTable table_class = project_tables.AdminHypervisorsTable
template_name = 'admin/hypervisors/index.html' template_name = 'admin/hypervisors/index.html'
def get_data(self): def get_data(self):

View File

@ -18,7 +18,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
import horizon import horizon

View File

@ -14,25 +14,19 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import tables from horizon import tables
from openstack_dashboard.dashboards.project.images_and_snapshots \ from openstack_dashboard.dashboards.project.images_and_snapshots.images \
.images.tables import CreateImage import tables as project_tables
from openstack_dashboard.dashboards.project.images_and_snapshots \
.images.tables import DeleteImage
from openstack_dashboard.dashboards.project.images_and_snapshots \
.images.tables import EditImage
from openstack_dashboard.dashboards.project.images_and_snapshots \
.images.tables import ImagesTable
class AdminCreateImage(CreateImage): class AdminCreateImage(project_tables.CreateImage):
url = "horizon:admin:images:create" url = "horizon:admin:images:create"
class AdminDeleteImage(DeleteImage): class AdminDeleteImage(project_tables.DeleteImage):
def allowed(self, request, image=None): def allowed(self, request, image=None):
if image and image.protected: if image and image.protected:
return False return False
@ -40,14 +34,14 @@ class AdminDeleteImage(DeleteImage):
return True return True
class AdminEditImage(EditImage): class AdminEditImage(project_tables.EditImage):
url = "horizon:admin:images:update" url = "horizon:admin:images:update"
def allowed(self, request, image=None): def allowed(self, request, image=None):
return True return True
class AdminImagesTable(ImagesTable): class AdminImagesTable(project_tables.ImagesTable):
name = tables.Column("name", name = tables.Column("name",
link="horizon:admin:images:detail", link="horizon:admin:images:detail",
verbose_name=_("Image Name")) verbose_name=_("Image Name"))

View File

@ -14,17 +14,17 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.conf import settings from django.conf import settings # noqa
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse # noqa
from django import http from django import http
from django.test.utils import override_settings from django.test.utils import override_settings # noqa
from mox import IsA from mox import IsA # noqa
from openstack_dashboard import api from openstack_dashboard import api
from openstack_dashboard.test import helpers as test from openstack_dashboard.test import helpers as test
from openstack_dashboard.dashboards.admin.images.tables import AdminImagesTable from openstack_dashboard.dashboards.admin.images import tables
class ImageCreateViewTest(test.BaseAdminViewTests): class ImageCreateViewTest(test.BaseAdminViewTests):
@ -90,16 +90,16 @@ class ImagesViewTest(test.BaseAdminViewTests):
settings.API_RESULT_PAGE_SIZE) settings.API_RESULT_PAGE_SIZE)
url = "?".join([reverse('horizon:admin:images:index'), url = "?".join([reverse('horizon:admin:images:index'),
"=".join([AdminImagesTable._meta.pagination_param, "=".join([tables.AdminImagesTable._meta.pagination_param,
images[2].id])]) images[2].id])])
res = self.client.get(url) res = self.client.get(url)
# get second page (items 2-4) # get second page (items 2-4)
self.assertEqual(len(res.context['images_table'].data), self.assertEqual(len(res.context['images_table'].data),
settings.API_RESULT_PAGE_SIZE) settings.API_RESULT_PAGE_SIZE)
url = "?".join([reverse('horizon:admin:images:index'), url = "?".join([reverse('horizon:admin:images:index'),
"=".join([AdminImagesTable._meta.pagination_param, "=".join([tables.AdminImagesTable._meta.pagination_param,
images[4].id])]) images[4].id])])
res = self.client.get(url) res = self.client.get(url)
# get third page (item 5) # get third page (item 5)
self.assertEqual(len(res.context['images_table'].data), self.assertEqual(len(res.context['images_table'].data),

View File

@ -18,18 +18,17 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.conf.urls.defaults import patterns from django.conf.urls.defaults import patterns # noqa
from django.conf.urls.defaults import url from django.conf.urls.defaults import url # noqa
from openstack_dashboard.dashboards.admin.images.views import CreateView from openstack_dashboard.dashboards.admin.images import views
from openstack_dashboard.dashboards.admin.images.views import DetailView
from openstack_dashboard.dashboards.admin.images.views import IndexView
from openstack_dashboard.dashboards.admin.images.views import UpdateView
urlpatterns = patterns('openstack_dashboard.dashboards.admin.images.views', urlpatterns = patterns('openstack_dashboard.dashboards.admin.images.views',
url(r'^images/$', IndexView.as_view(), name='index'), url(r'^images/$', views.IndexView.as_view(), name='index'),
url(r'^create/$', CreateView.as_view(), name='create'), url(r'^create/$', views.CreateView.as_view(), name='create'),
url(r'^(?P<image_id>[^/]+)/update/$', UpdateView.as_view(), name='update'), url(r'^(?P<image_id>[^/]+)/update/$',
url(r'^(?P<image_id>[^/]+)/detail/$', DetailView.as_view(), name='detail') views.UpdateView.as_view(), name='update'),
url(r'^(?P<image_id>[^/]+)/detail/$',
views.DetailView.as_view(), name='detail')
) )

View File

@ -20,8 +20,8 @@
import logging import logging
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy # noqa
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import exceptions from horizon import exceptions
from horizon import tables from horizon import tables
@ -30,19 +30,16 @@ from openstack_dashboard import api
from openstack_dashboard.dashboards.project \ from openstack_dashboard.dashboards.project \
.images_and_snapshots.images import views .images_and_snapshots.images import views
from openstack_dashboard.dashboards.admin.images.forms \ from openstack_dashboard.dashboards.admin.images import forms
import AdminCreateImageForm from openstack_dashboard.dashboards.admin.images \
from openstack_dashboard.dashboards.admin.images.forms \ import tables as project_tables
import AdminUpdateImageForm
from openstack_dashboard.dashboards.admin.images.tables \
import AdminImagesTable
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
class IndexView(tables.DataTableView): class IndexView(tables.DataTableView):
table_class = AdminImagesTable table_class = project_tables.AdminImagesTable
template_name = 'admin/images/index.html' template_name = 'admin/images/index.html'
def has_more_data(self, table): def has_more_data(self, table):
@ -50,8 +47,8 @@ class IndexView(tables.DataTableView):
def get_data(self): def get_data(self):
images = [] images = []
marker = self.request.GET.get(AdminImagesTable._meta.pagination_param, marker = self.request.GET.get(
None) project_tables.AdminImagesTable._meta.pagination_param, None)
try: try:
images, self._more = api.glance.image_list_detailed(self.request, images, self._more = api.glance.image_list_detailed(self.request,
marker=marker, marker=marker,
@ -65,13 +62,13 @@ class IndexView(tables.DataTableView):
class CreateView(views.CreateView): class CreateView(views.CreateView):
template_name = 'admin/images/create.html' template_name = 'admin/images/create.html'
form_class = AdminCreateImageForm form_class = forms.AdminCreateImageForm
success_url = reverse_lazy('horizon:admin:images:index') success_url = reverse_lazy('horizon:admin:images:index')
class UpdateView(views.UpdateView): class UpdateView(views.UpdateView):
template_name = 'admin/images/update.html' template_name = 'admin/images/update.html'
form_class = AdminUpdateImageForm form_class = forms.AdminUpdateImageForm
success_url = reverse_lazy('horizon:admin:images:index') success_url = reverse_lazy('horizon:admin:images:index')

Some files were not shown because too many files have changed in this diff Show More