diff --git a/openstack_dashboard/api/__init__.py b/openstack_dashboard/api/__init__.py index 2ffdfe660..aca05cf43 100644 --- a/openstack_dashboard/api/__init__.py +++ b/openstack_dashboard/api/__init__.py @@ -32,9 +32,10 @@ In other words, Horizon developers not working on openstack_dashboard.api shouldn't need to understand the finer details of APIs for Keystone/Nova/Glance/Swift et. al. """ -from openstack_dashboard.api.glance import * -from openstack_dashboard.api.keystone import * -from openstack_dashboard.api.nova import * -from openstack_dashboard.api.swift import * -from openstack_dashboard.api.quantum import * -from openstack_dashboard.api.cinder import * +from openstack_dashboard.api import base +from openstack_dashboard.api import cinder +from openstack_dashboard.api import glance +from openstack_dashboard.api import keystone +from openstack_dashboard.api import nova +from openstack_dashboard.api import quantum +from openstack_dashboard.api import swift diff --git a/openstack_dashboard/api/cinder.py b/openstack_dashboard/api/cinder.py index 3f9c1109e..47865f560 100644 --- a/openstack_dashboard/api/cinder.py +++ b/openstack_dashboard/api/cinder.py @@ -30,7 +30,8 @@ from django.utils.translation import ugettext as _ from cinderclient.v1 import client as cinder_client from openstack_dashboard.api.base import url_for -from openstack_dashboard.api import nova, QuotaSet +from openstack_dashboard.api import nova +from openstack_dashboard.api.base import QuotaSet from horizon import exceptions LOG = logging.getLogger(__name__) diff --git a/openstack_dashboard/dashboards/admin/flavors/extras/tests.py b/openstack_dashboard/dashboards/admin/flavors/extras/tests.py index 42f462322..54a4accde 100644 --- a/openstack_dashboard/dashboards/admin/flavors/extras/tests.py +++ b/openstack_dashboard/dashboards/admin/flavors/extras/tests.py @@ -13,7 +13,7 @@ class FlavorExtrasTests(test.BaseAdminViewTests): 'flavor_get'), }) def test_list_extras_when_none_exists(self): flavor = self.flavors.first() - extras = [api.FlavorExtraSpec(flavor.id, 'k1', 'v1')] + extras = [api.nova.FlavorExtraSpec(flavor.id, 'k1', 'v1')] # GET -- to determine correctness of output api.nova.flavor_get(IsA(http.HttpRequest), flavor.id).AndReturn(flavor) diff --git a/openstack_dashboard/dashboards/admin/flavors/tables.py b/openstack_dashboard/dashboards/admin/flavors/tables.py index a8964143e..d5428c734 100644 --- a/openstack_dashboard/dashboards/admin/flavors/tables.py +++ b/openstack_dashboard/dashboards/admin/flavors/tables.py @@ -15,7 +15,7 @@ class DeleteFlavor(tables.DeleteAction): data_type_plural = _("Flavors") def delete(self, request, obj_id): - api.flavor_delete(request, obj_id) + api.nova.flavor_delete(request, obj_id) class CreateFlavor(tables.LinkAction): diff --git a/openstack_dashboard/dashboards/admin/flavors/views.py b/openstack_dashboard/dashboards/admin/flavors/views.py index 2c61be8e8..5b621c7f7 100644 --- a/openstack_dashboard/dashboards/admin/flavors/views.py +++ b/openstack_dashboard/dashboards/admin/flavors/views.py @@ -43,7 +43,7 @@ class IndexView(tables.DataTableView): request = self.request flavors = [] try: - flavors = api.flavor_list(request) + flavors = api.nova.flavor_list(request) except: exceptions.handle(request, _('Unable to retrieve flavor list.')) diff --git a/openstack_dashboard/dashboards/admin/images/tests.py b/openstack_dashboard/dashboards/admin/images/tests.py index b33cbcd53..07445035b 100644 --- a/openstack_dashboard/dashboards/admin/images/tests.py +++ b/openstack_dashboard/dashboards/admin/images/tests.py @@ -25,12 +25,12 @@ from .tables import AdminImagesTable class ImagesViewTest(test.BaseAdminViewTests): - @test.create_stubs({api: ('image_list_detailed',)}) + @test.create_stubs({api.glance: ('image_list_detailed',)}) def test_images_list(self): - api.image_list_detailed(IsA(http.HttpRequest), + api.glance.image_list_detailed(IsA(http.HttpRequest), marker=None) \ - .AndReturn([self.images.list(), - False]) + .AndReturn([self.images.list(), + False]) self.mox.ReplayAll() res = self.client.get( @@ -39,24 +39,24 @@ class ImagesViewTest(test.BaseAdminViewTests): self.assertEqual(len(res.context['images_table'].data), len(self.images.list())) - @test.create_stubs({api: ('image_list_detailed',)}) + @test.create_stubs({api.glance: ('image_list_detailed',)}) def test_images_list_get_pagination(self): - api.image_list_detailed(IsA(http.HttpRequest), - marker=None) \ + api.glance.image_list_detailed(IsA(http.HttpRequest), + marker=None) \ .AndReturn([self.images.list(), - True]) - api.image_list_detailed(IsA(http.HttpRequest), - marker=None) \ + True]) + api.glance.image_list_detailed(IsA(http.HttpRequest), + marker=None) \ .AndReturn([self.images.list()[:2], - True]) - api.image_list_detailed(IsA(http.HttpRequest), - marker=self.images.list()[2].id) \ + True]) + api.glance.image_list_detailed(IsA(http.HttpRequest), + marker=self.images.list()[2].id) \ .AndReturn([self.images.list()[2:4], - True]) - api.image_list_detailed(IsA(http.HttpRequest), - marker=self.images.list()[4].id) \ + True]) + api.glance.image_list_detailed(IsA(http.HttpRequest), + marker=self.images.list()[4].id) \ .AndReturn([self.images.list()[4:], - True]) + True]) self.mox.ReplayAll() url = reverse('horizon:admin:images:index') diff --git a/openstack_dashboard/dashboards/admin/images/views.py b/openstack_dashboard/dashboards/admin/images/views.py index b27b19a6b..1f2ab88ed 100644 --- a/openstack_dashboard/dashboards/admin/images/views.py +++ b/openstack_dashboard/dashboards/admin/images/views.py @@ -48,8 +48,8 @@ class IndexView(tables.DataTableView): marker = self.request.GET.get(AdminImagesTable._meta.pagination_param, None) try: - images, self._more = api.image_list_detailed(self.request, - marker=marker) + images, self._more = api.glance.image_list_detailed(self.request, + marker=marker) except: self._more = False msg = _('Unable to retrieve image list.') diff --git a/openstack_dashboard/dashboards/admin/instances/tables.py b/openstack_dashboard/dashboards/admin/instances/tables.py index 3ee68540d..6a194d1e7 100644 --- a/openstack_dashboard/dashboards/admin/instances/tables.py +++ b/openstack_dashboard/dashboards/admin/instances/tables.py @@ -48,7 +48,7 @@ class MigrateInstance(tables.BatchAction): and not is_deleting(instance)) def action(self, request, obj_id): - api.server_migrate(request, obj_id) + api.nova.server_migrate(request, obj_id) class AdminUpdateRow(UpdateRow): diff --git a/openstack_dashboard/dashboards/admin/instances/tests.py b/openstack_dashboard/dashboards/admin/instances/tests.py index 0866bcd48..546e9b56c 100644 --- a/openstack_dashboard/dashboards/admin/instances/tests.py +++ b/openstack_dashboard/dashboards/admin/instances/tests.py @@ -111,16 +111,16 @@ class InstanceViewTest(test.BaseAdminViewTests): self.assertTemplateUsed(res, 'admin/instances/index.html') self.assertEqual(len(res.context['instances_table'].data), 0) - @test.create_stubs({api: ('server_get', 'flavor_get',), + @test.create_stubs({api.nova: ('server_get', 'flavor_get',), api.keystone: ('tenant_get',)}) def test_ajax_loading_instances(self): server = self.servers.first() flavor = self.flavors.list()[0] tenant = self.tenants.list()[0] - api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) - api.flavor_get(IsA(http.HttpRequest), - server.flavor['id']).AndReturn(flavor) + api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) + api.nova.flavor_get(IsA(http.HttpRequest), + server.flavor['id']).AndReturn(flavor) api.keystone.tenant_get(IsA(http.HttpRequest), server.tenant_id, admin=True).AndReturn(tenant) diff --git a/openstack_dashboard/dashboards/admin/overview/tests.py b/openstack_dashboard/dashboards/admin/overview/tests.py index dc9b380e2..92a343675 100644 --- a/openstack_dashboard/dashboards/admin/overview/tests.py +++ b/openstack_dashboard/dashboards/admin/overview/tests.py @@ -38,7 +38,7 @@ INDEX_URL = reverse('horizon:project:overview:index') class UsageViewTests(test.BaseAdminViewTests): - @test.create_stubs({api: ('usage_list',), + @test.create_stubs({api.nova: ('usage_list',), quotas: ('tenant_quota_usages',), api.keystone: ('tenant_list',)}) def test_usage(self): @@ -47,10 +47,10 @@ class UsageViewTests(test.BaseAdminViewTests): quota_data = self.quota_usages.first() api.keystone.tenant_list(IsA(http.HttpRequest), admin=True) \ .AndReturn(self.tenants.list()) - api.usage_list(IsA(http.HttpRequest), - datetime.datetime(now.year, now.month, 1, 0, 0, 0), - Func(usage.almost_now)) \ - .AndReturn([usage_obj]) + api.nova.usage_list(IsA(http.HttpRequest), + datetime.datetime(now.year, now.month, 1, 0, 0, 0), + Func(usage.almost_now)) \ + .AndReturn([usage_obj]) quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data) self.mox.ReplayAll() res = self.client.get(reverse('horizon:admin:overview:index')) @@ -70,7 +70,7 @@ class UsageViewTests(test.BaseAdminViewTests): usage_obj.vcpu_hours, usage_obj.total_local_gb_usage)) - @test.create_stubs({api: ('usage_list',), + @test.create_stubs({api.nova: ('usage_list',), quotas: ('tenant_quota_usages',), api.keystone: ('tenant_list',)}) def test_usage_csv(self): @@ -79,10 +79,10 @@ class UsageViewTests(test.BaseAdminViewTests): quota_data = self.quota_usages.first() api.keystone.tenant_list(IsA(http.HttpRequest), admin=True) \ .AndReturn(self.tenants.list()) - api.usage_list(IsA(http.HttpRequest), - datetime.datetime(now.year, now.month, 1, 0, 0, 0), - Func(usage.almost_now)) \ - .AndReturn([usage_obj, usage_obj]) + api.nova.usage_list(IsA(http.HttpRequest), + datetime.datetime(now.year, now.month, 1, 0, 0, 0), + Func(usage.almost_now)) \ + .AndReturn([usage_obj, usage_obj]) quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data) self.mox.ReplayAll() csv_url = reverse('horizon:admin:overview:index') + "?format=csv" diff --git a/openstack_dashboard/dashboards/admin/projects/tests.py b/openstack_dashboard/dashboards/admin/projects/tests.py index a3ddc024f..264e17de3 100644 --- a/openstack_dashboard/dashboards/admin/projects/tests.py +++ b/openstack_dashboard/dashboards/admin/projects/tests.py @@ -65,10 +65,10 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): project_info.update(quota_data) return project_info - @test.create_stubs({api: ('get_default_role',), - quotas: ('get_default_quota_data',), - api.keystone: ('user_list', - 'role_list',)}) + @test.create_stubs({api.keystone: ('get_default_role', + 'user_list', + 'role_list'), + quotas: ('get_default_quota_data',)}) def test_add_project_get(self): quota = self.quotas.first() default_role = self.roles.first() @@ -78,7 +78,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota) # init - api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role) + api.keystone.get_default_role(IsA(http.HttpRequest)) \ + .AndReturn(default_role) api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) @@ -101,9 +102,9 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): '', '']) - @test.create_stubs({api: ('get_default_role', - 'add_tenant_user_role',), - api.keystone: ('tenant_create', + @test.create_stubs({api.keystone: ('get_default_role', + 'add_tenant_user_role', + 'tenant_create', 'user_list', 'role_list'), quotas: ('get_default_quota_data',), @@ -119,7 +120,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): # init quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota) - api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role) + api.keystone.get_default_role(IsA(http.HttpRequest)) \ + .AndReturn(default_role) api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) @@ -140,10 +142,10 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): if "role_" + role.id in workflow_data: ulist = workflow_data["role_" + role.id] for user_id in ulist: - api.add_tenant_user_role(IsA(http.HttpRequest), - tenant_id=self.tenant.id, - user_id=user_id, - role_id=role.id) + api.keystone.add_tenant_user_role(IsA(http.HttpRequest), + tenant_id=self.tenant.id, + user_id=user_id, + role_id=role.id) api.nova.tenant_quota_update(IsA(http.HttpRequest), project.id, @@ -159,10 +161,10 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('get_default_role',), - quotas: ('get_default_quota_data',), - api.keystone: ('user_list', - 'role_list',)}) + @test.create_stubs({api.keystone: ('user_list', + 'role_list', + 'get_default_role'), + quotas: ('get_default_quota_data',)}) def test_add_project_quota_defaults_error(self): default_role = self.roles.first() users = self.users.list() @@ -170,9 +172,10 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): # init quotas.get_default_quota_data(IsA(http.HttpRequest)) \ - .AndRaise(self.exceptions.nova) + .AndRaise(self.exceptions.nova) - api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role) + api.keystone.get_default_role(IsA(http.HttpRequest)) \ + .AndReturn(default_role) api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) @@ -184,11 +187,11 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): self.assertTemplateUsed(res, 'admin/projects/create.html') self.assertContains(res, "Unable to retrieve default quota values") - @test.create_stubs({api: ('get_default_role',), - quotas: ('get_default_quota_data',), - api.keystone: ('tenant_create', + @test.create_stubs({api.keystone: ('tenant_create', 'user_list', - 'role_list',)}) + 'role_list', + 'get_default_role'), + quotas: ('get_default_quota_data',)}) def test_add_project_tenant_create_error(self): project = self.tenants.first() quota = self.quotas.first() @@ -199,7 +202,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): # init quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota) - api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role) + api.keystone.get_default_role(IsA(http.HttpRequest)) \ + .AndReturn(default_role) api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) @@ -222,11 +226,11 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('get_default_role', - 'add_tenant_user_role',), - api.keystone: ('tenant_create', + @test.create_stubs({api.keystone: ('tenant_create', 'user_list', - 'role_list'), + 'role_list', + 'get_default_role', + 'add_tenant_user_role'), quotas: ('get_default_quota_data',), api.nova: ('tenant_quota_update',)}) def test_add_project_quota_update_error(self): @@ -239,7 +243,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): # init quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota) - api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role) + api.keystone.get_default_role(IsA(http.HttpRequest)) \ + .AndReturn(default_role) api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) @@ -251,7 +256,7 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): quota_data = self._get_quota_info(quota) api.keystone.tenant_create(IsA(http.HttpRequest), **project_details) \ - .AndReturn(project) + .AndReturn(project) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) @@ -260,10 +265,10 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): if "role_" + role.id in workflow_data: ulist = workflow_data["role_" + role.id] for user_id in ulist: - api.add_tenant_user_role(IsA(http.HttpRequest), - tenant_id=self.tenant.id, - user_id=user_id, - role_id=role.id) + api.keystone.add_tenant_user_role(IsA(http.HttpRequest), + tenant_id=self.tenant.id, + user_id=user_id, + role_id=role.id) api.nova.tenant_quota_update(IsA(http.HttpRequest), project.id, @@ -280,11 +285,11 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('get_default_role', - 'add_tenant_user_role',), - api.keystone: ('tenant_create', + @test.create_stubs({api.keystone: ('tenant_create', 'user_list', - 'role_list',), + 'role_list', + 'get_default_role', + 'add_tenant_user_role'), quotas: ('get_default_quota_data',), api.nova: ('tenant_quota_update',)}) def test_add_project_user_update_error(self): @@ -297,7 +302,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): # init quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota) - api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role) + api.keystone.get_default_role(IsA(http.HttpRequest)) \ + .AndReturn(default_role) api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) @@ -318,10 +324,10 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): if "role_" + role.id in workflow_data: ulist = workflow_data["role_" + role.id] for user_id in ulist: - api.add_tenant_user_role(IsA(http.HttpRequest), - tenant_id=self.tenant.id, - user_id=user_id, - role_id=role.id) \ + api.keystone.add_tenant_user_role(IsA(http.HttpRequest), + tenant_id=self.tenant.id, + user_id=user_id, + role_id=role.id) \ .AndRaise(self.exceptions.keystone) break break @@ -340,10 +346,10 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('get_default_role',), - quotas: ('get_default_quota_data',), - api.keystone: ('user_list', - 'role_list',)}) + @test.create_stubs({api.keystone: ('user_list', + 'role_list', + 'get_default_role'), + quotas: ('get_default_quota_data',)}) def test_add_project_missing_field_error(self): project = self.tenants.first() quota = self.quotas.first() @@ -354,7 +360,8 @@ class CreateProjectWorkflowTests(test.BaseAdminViewTests): # init quotas.get_default_quota_data(IsA(http.HttpRequest)).AndReturn(quota) - api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role) + api.keystone.get_default_role(IsA(http.HttpRequest)) \ + .AndReturn(default_role) api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) @@ -379,12 +386,12 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): quota_data[field] = int(quota.get(field).limit) return quota_data - @test.create_stubs({api: ('get_default_role', - 'roles_for_user', - 'tenant_get',), - quotas: ('get_tenant_quota_data',), - api.keystone: ('user_list', - 'role_list',)}) + @test.create_stubs({api.keystone: ('get_default_role', + 'roles_for_user', + 'tenant_get', + 'user_list', + 'role_list'), + quotas: ('get_tenant_quota_data',)}) def test_update_project_get(self): project = self.tenants.first() quota = self.quotas.first() @@ -392,18 +399,20 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): users = self.users.list() roles = self.roles.list() - api.tenant_get(IsA(http.HttpRequest), self.tenant.id, admin=True) \ + api.keystone.tenant_get(IsA(http.HttpRequest), + self.tenant.id, admin=True) \ .AndReturn(project) quotas.get_tenant_quota_data(IsA(http.HttpRequest)).AndReturn(quota) - api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role) + api.keystone.get_default_role(IsA(http.HttpRequest)) \ + .AndReturn(default_role) api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) for user in users: - api.roles_for_user(IsA(http.HttpRequest), - user.id, - self.tenant.id).AndReturn(roles) + api.keystone.roles_for_user(IsA(http.HttpRequest), + user.id, + self.tenant.id).AndReturn(roles) self.mox.ReplayAll() @@ -428,17 +437,17 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): '', '']) - @test.create_stubs({api: ('tenant_get', - 'tenant_update', - 'get_default_role', - 'roles_for_user', - 'remove_tenant_user_role', - 'add_tenant_user_role'), + @test.create_stubs({api.keystone: ('tenant_get', + 'tenant_update', + 'get_default_role', + 'roles_for_user', + 'remove_tenant_user_role', + 'add_tenant_user_role', + 'user_list', + 'role_list'), api.nova: ('tenant_quota_update',), api.cinder: ('tenant_quota_update',), - quotas: ('get_tenant_quota_data',), - api.keystone: ('user_list', - 'role_list',)}) + quotas: ('get_tenant_quota_data',)}) def test_update_project_save(self): project = self.tenants.first() quota = self.quotas.first() @@ -447,19 +456,21 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): roles = self.roles.list() # get/init - api.tenant_get(IsA(http.HttpRequest), self.tenant.id, admin=True) \ + api.keystone.tenant_get(IsA(http.HttpRequest), + self.tenant.id, admin=True) \ .AndReturn(project) quotas.get_tenant_quota_data(IsA(http.HttpRequest)).AndReturn(quota) - api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role) + api.keystone.get_default_role(IsA(http.HttpRequest)) \ + .AndReturn(default_role) api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) workflow_data = {} for user in users: - api.roles_for_user(IsA(http.HttpRequest), - user.id, - self.tenant.id).AndReturn(roles) + api.keystone.roles_for_user(IsA(http.HttpRequest), + user.id, + self.tenant.id).AndReturn(roles) workflow_data["role_1"] = ['3'] # admin role workflow_data["role_2"] = ['2'] # member role @@ -480,7 +491,7 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) # handle - api.tenant_update(IsA(http.HttpRequest), **updated_project) \ + api.keystone.tenant_update(IsA(http.HttpRequest), **updated_project) \ .AndReturn(project) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) @@ -488,40 +499,43 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): tenant_id=self.tenant.id).AndReturn(users) # admin user - try to remove all roles on current project, warning - api.roles_for_user(IsA(http.HttpRequest), '1', self.tenant.id) \ + api.keystone.roles_for_user(IsA(http.HttpRequest), '1', + self.tenant.id) \ .AndReturn(roles) # member user 1 - has role 1, will remove it - api.roles_for_user(IsA(http.HttpRequest), '2', self.tenant.id) \ + api.keystone.roles_for_user(IsA(http.HttpRequest), '2', + self.tenant.id) \ .AndReturn((roles[0],)) # remove role 1 - api.remove_tenant_user_role(IsA(http.HttpRequest), - tenant_id=self.tenant.id, - user_id='2', - role_id='1') + api.keystone.remove_tenant_user_role(IsA(http.HttpRequest), + tenant_id=self.tenant.id, + user_id='2', + role_id='1') # add role 2 - api.add_tenant_user_role(IsA(http.HttpRequest), - tenant_id=self.tenant.id, - user_id='2', - role_id='2') + api.keystone.add_tenant_user_role(IsA(http.HttpRequest), + tenant_id=self.tenant.id, + user_id='2', + role_id='2') # member user 3 - has role 2 - api.roles_for_user(IsA(http.HttpRequest), '3', self.tenant.id) \ + api.keystone.roles_for_user(IsA(http.HttpRequest), '3', + self.tenant.id) \ .AndReturn((roles[1],)) # remove role 2 - api.remove_tenant_user_role(IsA(http.HttpRequest), - tenant_id=self.tenant.id, - user_id='3', - role_id='2') + api.keystone.remove_tenant_user_role(IsA(http.HttpRequest), + tenant_id=self.tenant.id, + user_id='3', + role_id='2') # add role 1 - api.add_tenant_user_role(IsA(http.HttpRequest), - tenant_id=self.tenant.id, - user_id='3', - role_id='1') + api.keystone.add_tenant_user_role(IsA(http.HttpRequest), + tenant_id=self.tenant.id, + user_id='3', + role_id='1') api.nova.tenant_quota_update(IsA(http.HttpRequest), - project.id, - **updated_quota) + project.id, + **updated_quota) api.cinder.tenant_quota_update(IsA(http.HttpRequest), project.id, volumes=updated_quota['volumes'], @@ -543,10 +557,11 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): self.assertMessageCount(error=0, warning=1) self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('tenant_get',)}) + @test.create_stubs({api.keystone: ('tenant_get',)}) def test_update_project_get_error(self): - api.tenant_get(IsA(http.HttpRequest), self.tenant.id, admin=True) \ + api.keystone.tenant_get(IsA(http.HttpRequest), self.tenant.id, + admin=True) \ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() @@ -557,16 +572,16 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('tenant_get', - 'tenant_update', - 'get_default_role', - 'roles_for_user', - 'remove_tenant_user', - 'add_tenant_user_role'), + @test.create_stubs({api.keystone: ('tenant_get', + 'tenant_update', + 'get_default_role', + 'roles_for_user', + 'remove_tenant_user', + 'add_tenant_user_role', + 'user_list', + 'role_list'), quotas: ('get_tenant_quota_data',), - api.nova: ('tenant_quota_update',), - api.keystone: ('user_list', - 'role_list',)}) + api.nova: ('tenant_quota_update',)}) def test_update_project_tenant_update_error(self): project = self.tenants.first() quota = self.quotas.first() @@ -575,19 +590,21 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): roles = self.roles.list() # get/init - api.tenant_get(IsA(http.HttpRequest), self.tenant.id, admin=True) \ + api.keystone.tenant_get(IsA(http.HttpRequest), self.tenant.id, + admin=True) \ .AndReturn(project) quotas.get_tenant_quota_data(IsA(http.HttpRequest)).AndReturn(quota) - api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role) + api.keystone.get_default_role(IsA(http.HttpRequest)) \ + .AndReturn(default_role) api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) workflow_data = {} for user in users: - api.roles_for_user(IsA(http.HttpRequest), - user.id, - self.tenant.id).AndReturn(roles) + api.keystone.roles_for_user(IsA(http.HttpRequest), + user.id, + self.tenant.id).AndReturn(roles) role_ids = [role.id for role in roles] if role_ids: workflow_data.setdefault("role_" + role_ids[0], []) \ @@ -609,7 +626,7 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) # handle - api.tenant_update(IsA(http.HttpRequest), **updated_project) \ + api.keystone.tenant_update(IsA(http.HttpRequest), **updated_project) \ .AndRaise(self.exceptions.keystone) self.mox.ReplayAll() @@ -628,16 +645,16 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('tenant_get', - 'tenant_update', - 'get_default_role', - 'roles_for_user', - 'remove_tenant_user_role', - 'add_tenant_user_role'), + @test.create_stubs({api.keystone: ('tenant_get', + 'tenant_update', + 'get_default_role', + 'roles_for_user', + 'remove_tenant_user_role', + 'add_tenant_user_role', + 'user_list', + 'role_list'), quotas: ('get_tenant_quota_data',), - api.nova: ('tenant_quota_update',), - api.keystone: ('user_list', - 'role_list',)}) + api.nova: ('tenant_quota_update',)}) def test_update_project_quota_update_error(self): project = self.tenants.first() quota = self.quotas.first() @@ -646,20 +663,22 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): roles = self.roles.list() # get/init - api.tenant_get(IsA(http.HttpRequest), self.tenant.id, admin=True) \ + api.keystone.tenant_get(IsA(http.HttpRequest), self.tenant.id, + admin=True) \ .AndReturn(project) quotas.get_tenant_quota_data(IsA(http.HttpRequest)).AndReturn(quota) - api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role) + api.keystone.get_default_role(IsA(http.HttpRequest)) \ + .AndReturn(default_role) api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) workflow_data = {} for user in users: - api.roles_for_user(IsA(http.HttpRequest), - user.id, - self.tenant.id).AndReturn(roles) + api.keystone.roles_for_user(IsA(http.HttpRequest), + user.id, + self.tenant.id).AndReturn(roles) workflow_data["role_1"] = ['1', '3'] # admin role workflow_data["role_2"] = ['1', '2', '3'] # member role @@ -681,7 +700,7 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): # handle # handle - api.tenant_update(IsA(http.HttpRequest), **updated_project) \ + api.keystone.tenant_update(IsA(http.HttpRequest), **updated_project) \ .AndReturn(project) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) @@ -689,25 +708,29 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): tenant_id=self.tenant.id).AndReturn(users) # admin user - try to remove all roles on current project, warning - api.roles_for_user(IsA(http.HttpRequest), '1', self.tenant.id) \ + api.keystone.roles_for_user(IsA(http.HttpRequest), '1', + self.tenant.id) \ .AndReturn(roles) # member user 1 - has role 1, will remove it - api.roles_for_user(IsA(http.HttpRequest), '2', self.tenant.id) \ + api.keystone.roles_for_user(IsA(http.HttpRequest), '2', + self.tenant.id) \ .AndReturn((roles[1],)) # member user 3 - has role 2 - api.roles_for_user(IsA(http.HttpRequest), '3', self.tenant.id) \ + api.keystone.roles_for_user(IsA(http.HttpRequest), '3', + self.tenant.id) \ .AndReturn((roles[0],)) # add role 2 - api.add_tenant_user_role(IsA(http.HttpRequest), - tenant_id=self.tenant.id, - user_id='3', - role_id='2') + api.keystone.add_tenant_user_role(IsA(http.HttpRequest), + tenant_id=self.tenant.id, + user_id='3', + role_id='2') api.nova.tenant_quota_update(IsA(http.HttpRequest), - project.id, - **updated_quota).AndRaise(self.exceptions.nova) + project.id, + **updated_quota) \ + .AndRaise(self.exceptions.nova) self.mox.ReplayAll() @@ -726,15 +749,15 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): self.assertMessageCount(error=1, warning=0) self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('tenant_get', - 'tenant_update', - 'get_default_role', - 'roles_for_user', - 'remove_tenant_user_role', - 'add_tenant_user_role'), - quotas: ('get_tenant_quota_data',), - api.keystone: ('user_list', - 'role_list',)}) + @test.create_stubs({api.keystone: ('tenant_get', + 'tenant_update', + 'get_default_role', + 'roles_for_user', + 'remove_tenant_user_role', + 'add_tenant_user_role', + 'user_list', + 'role_list'), + quotas: ('get_tenant_quota_data',)}) def test_update_project_member_update_error(self): project = self.tenants.first() quota = self.quotas.first() @@ -743,19 +766,21 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): roles = self.roles.list() # get/init - api.tenant_get(IsA(http.HttpRequest), self.tenant.id, admin=True) \ + api.keystone.tenant_get(IsA(http.HttpRequest), self.tenant.id, + admin=True) \ .AndReturn(project) quotas.get_tenant_quota_data(IsA(http.HttpRequest)).AndReturn(quota) - api.get_default_role(IsA(http.HttpRequest)).AndReturn(default_role) + api.keystone.get_default_role(IsA(http.HttpRequest)) \ + .AndReturn(default_role) api.keystone.user_list(IsA(http.HttpRequest)).AndReturn(users) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) workflow_data = {} for user in users: - api.roles_for_user(IsA(http.HttpRequest), - user.id, - self.tenant.id).AndReturn(roles) + api.keystone.roles_for_user(IsA(http.HttpRequest), + user.id, + self.tenant.id).AndReturn(roles) workflow_data["role_1"] = ['1', '3'] # admin role workflow_data["role_2"] = ['1', '2', '3'] # member role @@ -775,7 +800,7 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) # handle - api.tenant_update(IsA(http.HttpRequest), **updated_project) \ + api.keystone.tenant_update(IsA(http.HttpRequest), **updated_project) \ .AndReturn(project) api.keystone.role_list(IsA(http.HttpRequest)).AndReturn(roles) @@ -783,21 +808,24 @@ class UpdateProjectWorkflowTests(test.BaseAdminViewTests): tenant_id=self.tenant.id).AndReturn(users) # admin user - try to remove all roles on current project, warning - api.roles_for_user(IsA(http.HttpRequest), '1', self.tenant.id) \ + api.keystone.roles_for_user(IsA(http.HttpRequest), '1', + self.tenant.id) \ .AndReturn(roles) # member user 1 - has role 1, will remove it - api.roles_for_user(IsA(http.HttpRequest), '2', self.tenant.id) \ + api.keystone.roles_for_user(IsA(http.HttpRequest), '2', + self.tenant.id) \ .AndReturn((roles[1],)) # member user 3 - has role 2 - api.roles_for_user(IsA(http.HttpRequest), '3', self.tenant.id) \ + api.keystone.roles_for_user(IsA(http.HttpRequest), '3', + self.tenant.id) \ .AndReturn((roles[0],)) # add role 2 - api.add_tenant_user_role(IsA(http.HttpRequest), - tenant_id=self.tenant.id, - user_id='3', - role_id='2')\ + api.keystone.add_tenant_user_role(IsA(http.HttpRequest), + tenant_id=self.tenant.id, + user_id='3', + role_id='2')\ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() diff --git a/openstack_dashboard/dashboards/admin/projects/views.py b/openstack_dashboard/dashboards/admin/projects/views.py index 1323ecf8e..8bd3819e4 100644 --- a/openstack_dashboard/dashboards/admin/projects/views.py +++ b/openstack_dashboard/dashboards/admin/projects/views.py @@ -169,7 +169,8 @@ class UpdateProjectView(workflows.WorkflowView): try: # get initial project info - project_info = api.tenant_get(self.request, project_id, admin=True) + project_info = api.keystone.tenant_get(self.request, project_id, + admin=True) for field in PROJECT_INFO_FIELDS: initial[field] = getattr(project_info, field, None) @@ -197,7 +198,8 @@ class CreateUserView(CreateView): def get_context_data(self, **kwargs): context = super(CreateUserView, self).get_context_data(**kwargs) context['tenant_id'] = self.kwargs['tenant_id'] - context['tenant_name'] = api.tenant_get(self.request, - self.kwargs['tenant_id'], - admin=True).name + context['tenant_name'] = api.keystone.tenant_get( + self.request, + self.kwargs['tenant_id'], + admin=True).name return context diff --git a/openstack_dashboard/dashboards/admin/projects/workflows.py b/openstack_dashboard/dashboards/admin/projects/workflows.py index 6b94a2d30..4545a1045 100644 --- a/openstack_dashboard/dashboards/admin/projects/workflows.py +++ b/openstack_dashboard/dashboards/admin/projects/workflows.py @@ -110,7 +110,7 @@ class UpdateProjectMembersAction(workflows.Action): # Get the default role try: - default_role = api.get_default_role(self.request).id + default_role = api.keystone.get_default_role(self.request).id except: exceptions.handle(self.request, err_msg, @@ -145,9 +145,9 @@ class UpdateProjectMembersAction(workflows.Action): if project_id: for user in all_users: try: - roles = api.roles_for_user(self.request, - user.id, - project_id) + roles = api.keystone.roles_for_user(self.request, + user.id, + project_id) except: exceptions.handle(request, err_msg, @@ -222,10 +222,10 @@ class CreateProject(workflows.Workflow): role_list = data["role_" + role.id] users_added = 0 for user in role_list: - api.add_tenant_user_role(request, - tenant_id=project_id, - user_id=user, - role_id=role.id) + api.keystone.add_tenant_user_role(request, + tenant_id=project_id, + user_id=user, + role_id=role.id) users_added += 1 users_to_add -= users_added except: @@ -287,11 +287,11 @@ class UpdateProject(workflows.Workflow): project_id = data['project_id'] # update project info try: - api.tenant_update(request, - tenant_id=project_id, - tenant_name=data['name'], - description=data['description'], - enabled=data['enabled']) + api.keystone.tenant_update(request, + tenant_id=project_id, + tenant_name=data['name'], + description=data['description'], + enabled=data['enabled']) except: exceptions.handle(request, ignore=True) return False @@ -305,9 +305,9 @@ class UpdateProject(workflows.Workflow): users_to_modify = len(project_members) for user in project_members: current_roles = [role for role in - api.roles_for_user(self.request, - user.id, - project_id)] + api.keystone.roles_for_user(self.request, + user.id, + project_id)] effective_roles = [] for role in available_roles: role_list = data["role_" + role.id] @@ -315,10 +315,11 @@ class UpdateProject(workflows.Workflow): effective_roles.append(role) if role not in current_roles: # user role has changed - api.add_tenant_user_role(request, - tenant_id=project_id, - user_id=user.id, - role_id=role.id) + api.keystone.add_tenant_user_role( + request, + tenant_id=project_id, + user_id=user.id, + role_id=role.id) else: # user role is unchanged current_roles.pop(current_roles.index(role)) @@ -334,10 +335,11 @@ class UpdateProject(workflows.Workflow): else: # delete user's removed roles for to_delete in current_roles: - api.remove_tenant_user_role(request, - tenant_id=project_id, - user_id=user.id, - role_id=to_delete.id) + api.keystone.remove_tenant_user_role( + request, + tenant_id=project_id, + user_id=user.id, + role_id=to_delete.id) users_to_modify -= 1 # add new roles to project @@ -350,10 +352,10 @@ class UpdateProject(workflows.Workflow): users_added = 0 for user_id in role_list: if not filter(lambda x: user_id == x.id, project_members): - api.add_tenant_user_role(request, - tenant_id=project_id, - user_id=user_id, - role_id=role.id) + api.keystone.add_tenant_user_role(request, + tenant_id=project_id, + user_id=user_id, + role_id=role.id) users_added += 1 users_to_modify -= users_added except: diff --git a/openstack_dashboard/dashboards/admin/routers/tables.py b/openstack_dashboard/dashboards/admin/routers/tables.py index 85162bec8..8d2524b2c 100644 --- a/openstack_dashboard/dashboards/admin/routers/tables.py +++ b/openstack_dashboard/dashboards/admin/routers/tables.py @@ -45,7 +45,7 @@ class UpdateRow(tables.Row): ajax = True def get_data(self, request, router_id): - router = api.router_get(request, router_id) + router = api.quantum.router_get(request, router_id) return router diff --git a/openstack_dashboard/dashboards/admin/users/forms.py b/openstack_dashboard/dashboards/admin/users/forms.py index b6136603c..4749ce9bf 100644 --- a/openstack_dashboard/dashboards/admin/users/forms.py +++ b/openstack_dashboard/dashboards/admin/users/forms.py @@ -41,7 +41,7 @@ class BaseUserForm(forms.SelfHandlingForm): # Populate tenant choices tenant_choices = [('', _("Select a project"))] - for tenant in api.tenant_list(request, admin=True): + for tenant in api.keystone.tenant_list(request, admin=True): if tenant.enabled: tenant_choices.append((tenant.id, tenant.name)) self.fields['tenant_id'].choices = tenant_choices @@ -86,18 +86,18 @@ class CreateUserForm(BaseUserForm): def handle(self, request, data): try: LOG.info('Creating user with name "%s"' % data['name']) - new_user = api.user_create(request, - data['name'], - data['email'], - data['password'], - data['tenant_id'], - True) + new_user = api.keystone.user_create(request, + data['name'], + data['email'], + data['password'], + data['tenant_id'], + True) messages.success(request, _('User "%s" was successfully created.') % data['name']) if data['role_id']: try: - api.add_tenant_user_role(request, + api.keystone.add_tenant_user_role(request, data['tenant_id'], new_user.id, data['role_id']) @@ -129,7 +129,7 @@ class UpdateUserForm(BaseUserForm): def __init__(self, request, *args, **kwargs): super(UpdateUserForm, self).__init__(request, *args, **kwargs) - if api.keystone_can_edit_user() is False: + if api.keystone.keystone_can_edit_user() is False: for field in ('name', 'email', 'password', 'confirm_password'): self.fields.pop(field) @@ -138,7 +138,7 @@ class UpdateUserForm(BaseUserForm): @sensitive_variables('data', 'password') def handle(self, request, data): failed, succeeded = [], [] - user_is_editable = api.keystone_can_edit_user() + user_is_editable = api.keystone.keystone_can_edit_user() user = data.pop('id') tenant = data.pop('tenant_id') @@ -159,7 +159,7 @@ class UpdateUserForm(BaseUserForm): # Update default tenant msg_bits = (_('primary project'),) try: - api.user_update_tenant(request, user, tenant) + api.keystone.user_update_tenant(request, user, tenant) succeeded.extend(msg_bits) except: failed.append(msg_bits) @@ -180,7 +180,7 @@ class UpdateUserForm(BaseUserForm): if password: msg_bits = (_('password'),) try: - api.user_update_password(request, user, password) + api.keystone.user_update_password(request, user, password) succeeded.extend(msg_bits) except: failed.extend(msg_bits) diff --git a/openstack_dashboard/dashboards/admin/users/tables.py b/openstack_dashboard/dashboards/admin/users/tables.py index d3069f1b8..a6bf03854 100644 --- a/openstack_dashboard/dashboards/admin/users/tables.py +++ b/openstack_dashboard/dashboards/admin/users/tables.py @@ -22,7 +22,7 @@ class CreateUserLink(tables.LinkAction): classes = ("ajax-modal", "btn-create") def allowed(self, request, user): - if api.keystone_can_edit_user(): + if api.keystone.keystone_can_edit_user(): return True return False @@ -76,7 +76,7 @@ class DeleteUsersAction(tables.DeleteAction): data_type_plural = _("Users") def allowed(self, request, datum): - if not api.keystone_can_edit_user() or \ + if not api.keystone.keystone_can_edit_user() or \ (datum and datum.id == request.user.id): return False return True diff --git a/openstack_dashboard/dashboards/admin/users/tests.py b/openstack_dashboard/dashboards/admin/users/tests.py index da719efc4..1586a8cf5 100644 --- a/openstack_dashboard/dashboards/admin/users/tests.py +++ b/openstack_dashboard/dashboards/admin/users/tests.py @@ -46,25 +46,27 @@ class UsersViewTests(test.BaseAdminViewTests): self.assertTemplateUsed(res, 'admin/users/index.html') self.assertItemsEqual(res.context['table'].data, self.users.list()) - @test.create_stubs({api: ('user_create', - 'tenant_list', - 'add_tenant_user_role'), - api.keystone: ('get_default_role', + @test.create_stubs({api.keystone: ('user_create', + 'tenant_list', + 'add_tenant_user_role', + 'get_default_role', 'role_list')}) def test_create(self): user = self.users.get(id="1") role = self.roles.first() - api.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list()) - api.user_create(IgnoreArg(), - user.name, - user.email, - user.password, - self.tenant.id, - True).AndReturn(user) + api.keystone.tenant_list(IgnoreArg(), admin=True) \ + .AndReturn(self.tenants.list()) + api.keystone.user_create(IgnoreArg(), + user.name, + user.email, + user.password, + self.tenant.id, + True).AndReturn(user) api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list()) api.keystone.get_default_role(IgnoreArg()).AndReturn(role) - api.add_tenant_user_role(IgnoreArg(), self.tenant.id, user.id, role.id) + api.keystone.add_tenant_user_role(IgnoreArg(), self.tenant.id, + user.id, role.id) self.mox.ReplayAll() @@ -80,12 +82,14 @@ class UsersViewTests(test.BaseAdminViewTests): self.assertNoFormErrors(res) self.assertMessageCount(success=1) - @test.create_stubs({api: ('tenant_list',), - api.keystone: ('role_list', 'get_default_role')}) + @test.create_stubs({api.keystone: ('tenant_list', + 'role_list', + 'get_default_role')}) def test_create_with_password_mismatch(self): user = self.users.get(id="1") - api.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list()) + api.keystone.tenant_list(IgnoreArg(), admin=True) \ + .AndReturn(self.tenants.list()) api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list()) api.keystone.get_default_role(IgnoreArg()) \ .AndReturn(self.roles.first()) @@ -104,12 +108,14 @@ class UsersViewTests(test.BaseAdminViewTests): self.assertFormError(res, "form", None, ['Passwords do not match.']) - @test.create_stubs({api: ('tenant_list',), - api.keystone: ('role_list', 'get_default_role')}) + @test.create_stubs({api.keystone: ('tenant_list', + 'role_list', + 'get_default_role')}) def test_create_validation_for_password_too_short(self): user = self.users.get(id="1") - api.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list()) + api.keystone.tenant_list(IgnoreArg(), admin=True) \ + .AndReturn(self.tenants.list()) api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list()) api.keystone.get_default_role(IgnoreArg()) \ .AndReturn(self.roles.first()) @@ -131,12 +137,14 @@ class UsersViewTests(test.BaseAdminViewTests): res, "form", 'password', ['Password must be between 8 and 18 characters.']) - @test.create_stubs({api: ('tenant_list',), - api.keystone: ('role_list', 'get_default_role')}) + @test.create_stubs({api.keystone: ('tenant_list', + 'role_list', + 'get_default_role')}) def test_create_validation_for_password_too_long(self): user = self.users.get(id="1") - api.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list()) + api.keystone.tenant_list(IgnoreArg(), admin=True) \ + .AndReturn(self.tenants.list()) api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list()) api.keystone.get_default_role(IgnoreArg()) \ .AndReturn(self.roles.first()) @@ -158,32 +166,32 @@ class UsersViewTests(test.BaseAdminViewTests): res, "form", 'password', ['Password must be between 8 and 18 characters.']) - @test.create_stubs({api: ('user_get', - 'tenant_list', - 'user_update_tenant', - 'user_update_password'), - api.keystone: ('user_update', + @test.create_stubs({api.keystone: ('user_get', + 'tenant_list', + 'user_update_tenant', + 'user_update_password', + 'user_update', 'roles_for_user', )}) def test_update(self): user = self.users.get(id="1") - api.user_get(IsA(http.HttpRequest), '1', + api.keystone.user_get(IsA(http.HttpRequest), '1', admin=True).AndReturn(user) - api.tenant_list(IgnoreArg(), + api.keystone.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list()) api.keystone.user_update(IsA(http.HttpRequest), user.id, email=u'test@example.com', name=u'test_user').AndReturn(None) - api.user_update_tenant(IsA(http.HttpRequest), + api.keystone.user_update_tenant(IsA(http.HttpRequest), user.id, self.tenant.id).AndReturn(None) api.keystone.roles_for_user(IsA(http.HttpRequest), user.id, self.tenant.id).AndReturn(None) - api.user_update_password(IsA(http.HttpRequest), - user.id, - IgnoreArg()).AndReturn(None) + api.keystone.user_update_password(IsA(http.HttpRequest), + user.id, + IgnoreArg()).AndReturn(None) self.mox.ReplayAll() @@ -200,23 +208,24 @@ class UsersViewTests(test.BaseAdminViewTests): self.assertNoFormErrors(res) self.assertMessageCount(warning=1) - @test.create_stubs({api: ('user_get', - 'tenant_list', - 'user_update_tenant', - 'keystone_can_edit_user'), - api.keystone: ('roles_for_user', )}) + @test.create_stubs({api.keystone: ('user_get', + 'tenant_list', + 'user_update_tenant', + 'keystone_can_edit_user', + 'roles_for_user', )}) def test_update_with_keystone_can_edit_user_false(self): user = self.users.get(id="1") - api.user_get(IsA(http.HttpRequest), + api.keystone.user_get(IsA(http.HttpRequest), '1', admin=True).AndReturn(user) - api.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list()) - api.keystone_can_edit_user().AndReturn(False) - api.keystone_can_edit_user().AndReturn(False) - api.user_update_tenant(IsA(http.HttpRequest), - user.id, - self.tenant.id).AndReturn(None) + api.keystone.tenant_list(IgnoreArg(), admin=True) \ + .AndReturn(self.tenants.list()) + api.keystone.keystone_can_edit_user().AndReturn(False) + api.keystone.keystone_can_edit_user().AndReturn(False) + api.keystone.user_update_tenant(IsA(http.HttpRequest), + user.id, + self.tenant.id).AndReturn(None) api.keystone.roles_for_user(IsA(http.HttpRequest), user.id, self.tenant.id).AndReturn(None) @@ -233,14 +242,14 @@ class UsersViewTests(test.BaseAdminViewTests): self.assertNoFormErrors(res) self.assertMessageCount(warning=1) - @test.create_stubs({api: ('user_get', 'tenant_list')}) + @test.create_stubs({api.keystone: ('user_get', 'tenant_list')}) def test_update_validation_for_password_too_short(self): user = self.users.get(id="1") - api.user_get(IsA(http.HttpRequest), '1', - admin=True).AndReturn(user) - api.tenant_list(IgnoreArg(), - admin=True).AndReturn(self.tenants.list()) + api.keystone.user_get(IsA(http.HttpRequest), '1', + admin=True).AndReturn(user) + api.keystone.tenant_list(IgnoreArg(), + admin=True).AndReturn(self.tenants.list()) self.mox.ReplayAll() @@ -258,14 +267,14 @@ class UsersViewTests(test.BaseAdminViewTests): res, "form", 'password', ['Password must be between 8 and 18 characters.']) - @test.create_stubs({api: ('user_get', 'tenant_list')}) + @test.create_stubs({api.keystone: ('user_get', 'tenant_list')}) def test_update_validation_for_password_too_long(self): user = self.users.get(id="1") - api.user_get(IsA(http.HttpRequest), '1', - admin=True).AndReturn(user) - api.tenant_list(IgnoreArg(), - admin=True).AndReturn(self.tenants.list()) + api.keystone.user_get(IsA(http.HttpRequest), '1', + admin=True).AndReturn(user) + api.keystone.tenant_list(IgnoreArg(), + admin=True).AndReturn(self.tenants.list()) self.mox.ReplayAll() @@ -360,11 +369,13 @@ class UsersViewTests(test.BaseAdminViewTests): class SeleniumTests(test.SeleniumAdminTestCase): - @test.create_stubs({api: ('tenant_list',), - api.keystone: ('get_default_role', 'role_list', + @test.create_stubs({api.keystone: ('tenant_list', + 'get_default_role', + 'role_list', 'user_list')}) def test_modal_create_user_with_passwords_not_matching(self): - api.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list()) + api.keystone.tenant_list(IgnoreArg(), admin=True) \ + .AndReturn(self.tenants.list()) api.keystone.role_list(IgnoreArg()).AndReturn(self.roles.list()) api.keystone.user_list(IgnoreArg()).AndReturn(self.users.list()) api.keystone.get_default_role(IgnoreArg()) \ @@ -391,11 +402,12 @@ class SeleniumTests(test.SeleniumAdminTestCase): self.assertTrue("Passwords do not match" in body.text, "Error message not found in body") - @test.create_stubs({api: ('tenant_list', 'user_get')}) + @test.create_stubs({api.keystone: ('tenant_list', 'user_get')}) def test_update_user_with_passwords_not_matching(self): - api.user_get(IsA(http.HttpRequest), '1', - admin=True).AndReturn(self.user) - api.tenant_list(IgnoreArg(), admin=True).AndReturn(self.tenants.list()) + api.keystone.user_get(IsA(http.HttpRequest), '1', + admin=True).AndReturn(self.user) + api.keystone.tenant_list(IgnoreArg(), admin=True) \ + .AndReturn(self.tenants.list()) self.mox.ReplayAll() self.selenium.get("%s%s" % (self.live_server_url, USER_UPDATE_URL)) diff --git a/openstack_dashboard/dashboards/admin/users/views.py b/openstack_dashboard/dashboards/admin/users/views.py index c6c48ae63..11562e797 100644 --- a/openstack_dashboard/dashboards/admin/users/views.py +++ b/openstack_dashboard/dashboards/admin/users/views.py @@ -61,9 +61,9 @@ class UpdateView(forms.ModalFormView): def get_object(self): if not hasattr(self, "_object"): try: - self._object = api.user_get(self.request, - self.kwargs['user_id'], - admin=True) + self._object = api.keystone.user_get(self.request, + self.kwargs['user_id'], + admin=True) except: redirect = reverse("horizon:admin:users:index") exceptions.handle(self.request, diff --git a/openstack_dashboard/dashboards/project/access_and_security/floating_ips/forms.py b/openstack_dashboard/dashboards/project/access_and_security/floating_ips/forms.py index 94f16464a..254256991 100644 --- a/openstack_dashboard/dashboards/project/access_and_security/floating_ips/forms.py +++ b/openstack_dashboard/dashboards/project/access_and_security/floating_ips/forms.py @@ -38,7 +38,8 @@ class FloatingIpAllocate(forms.SelfHandlingForm): def handle(self, request, data): try: - fip = api.tenant_floating_ip_allocate(request, pool=data['pool']) + fip = api.nova.tenant_floating_ip_allocate(request, + pool=data['pool']) messages.success(request, _('Allocated Floating IP %(ip)s.') % {"ip": fip.ip}) diff --git a/openstack_dashboard/dashboards/project/access_and_security/floating_ips/tables.py b/openstack_dashboard/dashboards/project/access_and_security/floating_ips/tables.py index 0e8c33bb8..1124b05c8 100644 --- a/openstack_dashboard/dashboards/project/access_and_security/floating_ips/tables.py +++ b/openstack_dashboard/dashboards/project/access_and_security/floating_ips/tables.py @@ -53,7 +53,7 @@ class ReleaseIPs(tables.BatchAction): classes = ('btn-danger', 'btn-release') def action(self, request, obj_id): - api.tenant_floating_ip_release(request, obj_id) + api.nova.tenant_floating_ip_release(request, obj_id) class AssociateIP(tables.LinkAction): @@ -86,7 +86,8 @@ class DisassociateIP(tables.Action): def single(self, table, request, obj_id): try: fip = table.get_object_by_id(get_int_or_uuid(obj_id)) - api.server_remove_floating_ip(request, fip.instance_id, fip.id) + api.nova.server_remove_floating_ip(request, fip.instance_id, + fip.id) LOG.info('Disassociating Floating IP "%s".' % obj_id) messages.success(request, _('Successfully disassociated Floating IP: %s') diff --git a/openstack_dashboard/dashboards/project/access_and_security/floating_ips/tests.py b/openstack_dashboard/dashboards/project/access_and_security/floating_ips/tests.py index ebb81582c..ef9180b5f 100644 --- a/openstack_dashboard/dashboards/project/access_and_security/floating_ips/tests.py +++ b/openstack_dashboard/dashboards/project/access_and_security/floating_ips/tests.py @@ -127,23 +127,23 @@ class FloatingIpViewTests(test.TestCase): floating_ip = self.floating_ips.first() server = self.servers.first() self.mox.StubOutWithMock(api.nova, 'keypair_list') - self.mox.StubOutWithMock(api, 'security_group_list') - self.mox.StubOutWithMock(api, 'tenant_floating_ip_list') - self.mox.StubOutWithMock(api, 'tenant_floating_ip_get') - self.mox.StubOutWithMock(api, 'server_remove_floating_ip') + self.mox.StubOutWithMock(api.nova, 'security_group_list') + self.mox.StubOutWithMock(api.nova, 'tenant_floating_ip_list') + self.mox.StubOutWithMock(api.nova, 'tenant_floating_ip_get') + self.mox.StubOutWithMock(api.nova, 'server_remove_floating_ip') self.mox.StubOutWithMock(api.nova, 'server_list') api.nova.server_list(IsA(http.HttpRequest), all_tenants=True).AndReturn(self.servers.list()) api.nova.keypair_list(IsA(http.HttpRequest)) \ .AndReturn(self.keypairs.list()) - api.security_group_list(IsA(http.HttpRequest)) \ + api.nova.security_group_list(IsA(http.HttpRequest)) \ .AndReturn(self.security_groups.list()) - api.tenant_floating_ip_list(IsA(http.HttpRequest)) \ + api.nova.tenant_floating_ip_list(IsA(http.HttpRequest)) \ .AndReturn(self.floating_ips.list()) - api.server_remove_floating_ip(IsA(http.HttpRequest), - server.id, - floating_ip.id) + api.nova.server_remove_floating_ip(IsA(http.HttpRequest), + server.id, + floating_ip.id) self.mox.ReplayAll() action = "floating_ips__disassociate__%s" % floating_ip.id @@ -155,25 +155,25 @@ class FloatingIpViewTests(test.TestCase): floating_ip = self.floating_ips.first() server = self.servers.first() self.mox.StubOutWithMock(api.nova, 'keypair_list') - self.mox.StubOutWithMock(api, 'security_group_list') - self.mox.StubOutWithMock(api, 'tenant_floating_ip_list') - self.mox.StubOutWithMock(api, 'tenant_floating_ip_get') - self.mox.StubOutWithMock(api, 'server_remove_floating_ip') + self.mox.StubOutWithMock(api.nova, 'security_group_list') + self.mox.StubOutWithMock(api.nova, 'tenant_floating_ip_list') + self.mox.StubOutWithMock(api.nova, 'tenant_floating_ip_get') + self.mox.StubOutWithMock(api.nova, 'server_remove_floating_ip') self.mox.StubOutWithMock(api.nova, 'server_list') api.nova.server_list(IsA(http.HttpRequest), all_tenants=True).AndReturn(self.servers.list()) api.nova.keypair_list(IsA(http.HttpRequest)) \ - .AndReturn(self.keypairs.list()) - api.security_group_list(IsA(http.HttpRequest)) \ - .AndReturn(self.security_groups.list()) - api.tenant_floating_ip_list(IsA(http.HttpRequest)) \ - .AndReturn(self.floating_ips.list()) + .AndReturn(self.keypairs.list()) + api.nova.security_group_list(IsA(http.HttpRequest)) \ + .AndReturn(self.security_groups.list()) + api.nova.tenant_floating_ip_list(IsA(http.HttpRequest)) \ + .AndReturn(self.floating_ips.list()) - api.server_remove_floating_ip(IsA(http.HttpRequest), - server.id, - floating_ip.id) \ - .AndRaise(self.exceptions.nova) + api.nova.server_remove_floating_ip(IsA(http.HttpRequest), + server.id, + floating_ip.id) \ + .AndRaise(self.exceptions.nova) self.mox.ReplayAll() action = "floating_ips__disassociate__%s" % floating_ip.id diff --git a/openstack_dashboard/dashboards/project/access_and_security/floating_ips/views.py b/openstack_dashboard/dashboards/project/access_and_security/floating_ips/views.py index 3daaec49f..f90dcbdb6 100644 --- a/openstack_dashboard/dashboards/project/access_and_security/floating_ips/views.py +++ b/openstack_dashboard/dashboards/project/access_and_security/floating_ips/views.py @@ -59,7 +59,7 @@ class AllocateView(forms.ModalFormView): def get_initial(self): try: - pools = api.floating_ip_pools_list(self.request) + pools = api.nova.floating_ip_pools_list(self.request) except: pools = [] exceptions.handle(self.request, diff --git a/openstack_dashboard/dashboards/project/access_and_security/keypairs/forms.py b/openstack_dashboard/dashboards/project/access_and_security/keypairs/forms.py index 0a5d45e0d..dfab3f6c0 100644 --- a/openstack_dashboard/dashboards/project/access_and_security/keypairs/forms.py +++ b/openstack_dashboard/dashboards/project/access_and_security/keypairs/forms.py @@ -54,9 +54,9 @@ class ImportKeypair(forms.SelfHandlingForm): try: # Remove any new lines in the public key data['public_key'] = NEW_LINES.sub("", data['public_key']) - keypair = api.keypair_import(request, - data['name'], - data['public_key']) + keypair = api.nova.keypair_import(request, + data['name'], + data['public_key']) messages.success(request, _('Successfully imported public key: %s') % data['name']) return keypair diff --git a/openstack_dashboard/dashboards/project/access_and_security/keypairs/tests.py b/openstack_dashboard/dashboards/project/access_and_security/keypairs/tests.py index 60afd5b76..650ad229a 100644 --- a/openstack_dashboard/dashboards/project/access_and_security/keypairs/tests.py +++ b/openstack_dashboard/dashboards/project/access_and_security/keypairs/tests.py @@ -36,15 +36,15 @@ class KeyPairViewTests(test.TestCase): self.mox.StubOutWithMock(api.nova, 'keypair_list') self.mox.StubOutWithMock(api.nova, 'keypair_delete') - self.mox.StubOutWithMock(api, 'security_group_list') - self.mox.StubOutWithMock(api, 'tenant_floating_ip_list') + self.mox.StubOutWithMock(api.nova, 'security_group_list') + self.mox.StubOutWithMock(api.nova, 'tenant_floating_ip_list') self.mox.StubOutWithMock(api.nova, 'server_list') api.nova.server_list(IsA(http.HttpRequest), all_tenants=True).AndReturn(self.servers.list()) - api.security_group_list(IsA(http.HttpRequest)) \ + api.nova.security_group_list(IsA(http.HttpRequest)) \ .AndReturn(self.security_groups.list()) - api.tenant_floating_ip_list(IsA(http.HttpRequest)) \ + api.nova.tenant_floating_ip_list(IsA(http.HttpRequest)) \ .AndReturn(self.floating_ips.list()) api.nova.keypair_list(IsA(http.HttpRequest)) \ .AndReturn(self.keypairs.list()) @@ -59,15 +59,15 @@ class KeyPairViewTests(test.TestCase): keypair = self.keypairs.first() self.mox.StubOutWithMock(api.nova, 'keypair_list') self.mox.StubOutWithMock(api.nova, 'keypair_delete') - self.mox.StubOutWithMock(api, 'security_group_list') - self.mox.StubOutWithMock(api, 'tenant_floating_ip_list') + self.mox.StubOutWithMock(api.nova, 'security_group_list') + self.mox.StubOutWithMock(api.nova, 'tenant_floating_ip_list') self.mox.StubOutWithMock(api.nova, 'server_list') api.nova.server_list(IsA(http.HttpRequest), all_tenants=True).AndReturn(self.servers.list()) - api.security_group_list(IsA(http.HttpRequest)) \ + api.nova.security_group_list(IsA(http.HttpRequest)) \ .AndReturn(self.security_groups.list()) - api.tenant_floating_ip_list(IsA(http.HttpRequest)) \ + api.nova.tenant_floating_ip_list(IsA(http.HttpRequest)) \ .AndReturn(self.floating_ips.list()) api.nova.keypair_list(IsA(http.HttpRequest)) \ .AndReturn(self.keypairs.list()) @@ -98,9 +98,9 @@ class KeyPairViewTests(test.TestCase): keypair = self.keypairs.first() keypair.private_key = "secret" - self.mox.StubOutWithMock(api, 'keypair_create') - api.keypair_create(IsA(http.HttpRequest), - keypair.name).AndReturn(keypair) + self.mox.StubOutWithMock(api.nova, 'keypair_create') + api.nova.keypair_create(IsA(http.HttpRequest), + keypair.name).AndReturn(keypair) self.mox.ReplayAll() context = {'keypair_name': keypair.name} @@ -110,15 +110,14 @@ class KeyPairViewTests(test.TestCase): self.assertTrue(res.has_header('content-disposition')) - @test.create_stubs({api: ("keypair_import",)}) + @test.create_stubs({api.nova: ("keypair_import",)}) def test_import_keypair(self): key1_name = "new key pair" public_key = "ssh-rsa ABCDEFGHIJKLMNOPQR\r\n" \ "STUVWXYZ1234567890\r" \ "XXYYZZ user@computer\n\n" - api.keypair_import(IsA(http.HttpRequest), key1_name, - public_key.replace("\r", "") - .replace("\n", "")) + api.nova.keypair_import(IsA(http.HttpRequest), key1_name, + public_key.replace("\r", "").replace("\n", "")) self.mox.ReplayAll() formData = {'method': 'ImportKeypair', @@ -132,8 +131,8 @@ class KeyPairViewTests(test.TestCase): key_name = "new key pair" public_key = "ABCDEF" - self.mox.StubOutWithMock(api, 'keypair_import') - api.keypair_import(IsA(http.HttpRequest), key_name, public_key) \ + self.mox.StubOutWithMock(api.nova, 'keypair_import') + api.nova.keypair_import(IsA(http.HttpRequest), key_name, public_key) \ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() @@ -149,8 +148,8 @@ class KeyPairViewTests(test.TestCase): def test_generate_keypair_exception(self): keypair = self.keypairs.first() - self.mox.StubOutWithMock(api, 'keypair_create') - api.keypair_create(IsA(http.HttpRequest), keypair.name) \ + self.mox.StubOutWithMock(api.nova, 'keypair_create') + api.nova.keypair_create(IsA(http.HttpRequest), keypair.name) \ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() diff --git a/openstack_dashboard/dashboards/project/access_and_security/keypairs/views.py b/openstack_dashboard/dashboards/project/access_and_security/keypairs/views.py index c27dfdfc1..1554bb07f 100644 --- a/openstack_dashboard/dashboards/project/access_and_security/keypairs/views.py +++ b/openstack_dashboard/dashboards/project/access_and_security/keypairs/views.py @@ -67,7 +67,7 @@ class DownloadView(TemplateView): class GenerateView(View): def get(self, request, keypair_name=None): try: - keypair = api.keypair_create(request, keypair_name) + keypair = api.nova.keypair_create(request, keypair_name) except: redirect = reverse('horizon:project:access_and_security:index') exceptions.handle(self.request, diff --git a/openstack_dashboard/dashboards/project/access_and_security/security_groups/forms.py b/openstack_dashboard/dashboards/project/access_and_security/security_groups/forms.py index a8663b4b9..e47652a06 100644 --- a/openstack_dashboard/dashboards/project/access_and_security/security_groups/forms.py +++ b/openstack_dashboard/dashboards/project/access_and_security/security_groups/forms.py @@ -43,9 +43,9 @@ class CreateGroup(forms.SelfHandlingForm): def handle(self, request, data): try: - sg = api.security_group_create(request, - data['name'], - data['description']) + sg = api.nova.security_group_create(request, + data['name'], + data['description']) messages.success(request, _('Successfully created security group: %s') % data['name']) @@ -161,13 +161,14 @@ class AddRule(forms.SelfHandlingForm): def handle(self, request, data): try: - rule = api.security_group_rule_create(request, - data['security_group_id'], - data['ip_protocol'], - data['from_port'], - data['to_port'], - data['cidr'], - data['source_group']) + rule = api.nova.security_group_rule_create( + request, + data['security_group_id'], + data['ip_protocol'], + data['from_port'], + data['to_port'], + data['cidr'], + data['source_group']) messages.success(request, _('Successfully added rule: %s') % unicode(rule)) return rule diff --git a/openstack_dashboard/dashboards/project/access_and_security/security_groups/tables.py b/openstack_dashboard/dashboards/project/access_and_security/security_groups/tables.py index b669ed931..6d4475f96 100644 --- a/openstack_dashboard/dashboards/project/access_and_security/security_groups/tables.py +++ b/openstack_dashboard/dashboards/project/access_and_security/security_groups/tables.py @@ -37,7 +37,7 @@ class DeleteGroup(tables.DeleteAction): return security_group.name != 'default' def delete(self, request, obj_id): - api.security_group_delete(request, obj_id) + api.nova.security_group_delete(request, obj_id) class CreateGroup(tables.LinkAction): @@ -73,7 +73,7 @@ class DeleteRule(tables.DeleteAction): data_type_plural = _("Rules") def delete(self, request, obj_id): - api.security_group_rule_delete(request, obj_id) + api.nova.security_group_rule_delete(request, obj_id) def get_success_url(self, request): return reverse("horizon:project:access_and_security:index") diff --git a/openstack_dashboard/dashboards/project/access_and_security/security_groups/tests.py b/openstack_dashboard/dashboards/project/access_and_security/security_groups/tests.py index 40a70f596..193248252 100644 --- a/openstack_dashboard/dashboards/project/access_and_security/security_groups/tests.py +++ b/openstack_dashboard/dashboards/project/access_and_security/security_groups/tests.py @@ -53,10 +53,11 @@ class SecurityGroupsViewTests(test.TestCase): def test_create_security_groups_post(self): sec_group = self.security_groups.first() - self.mox.StubOutWithMock(api, 'security_group_create') - api.security_group_create(IsA(http.HttpRequest), - sec_group.name, - sec_group.description).AndReturn(sec_group) + self.mox.StubOutWithMock(api.nova, 'security_group_create') + api.nova.security_group_create(IsA(http.HttpRequest), + sec_group.name, + sec_group.description) \ + .AndReturn(sec_group) self.mox.ReplayAll() formData = {'method': 'CreateGroup', @@ -67,11 +68,11 @@ class SecurityGroupsViewTests(test.TestCase): def test_create_security_groups_post_exception(self): sec_group = self.security_groups.first() - self.mox.StubOutWithMock(api, 'security_group_create') - api.security_group_create(IsA(http.HttpRequest), - sec_group.name, - sec_group.description) \ - .AndRaise(self.exceptions.nova) + self.mox.StubOutWithMock(api.nova, 'security_group_create') + api.nova.security_group_create(IsA(http.HttpRequest), + sec_group.name, + sec_group.description) \ + .AndRaise(self.exceptions.nova) self.mox.ReplayAll() formData = {'method': 'CreateGroup', @@ -83,7 +84,7 @@ class SecurityGroupsViewTests(test.TestCase): def test_create_security_groups_post_wrong_name(self): sec_group = self.security_groups.first() - self.mox.StubOutWithMock(api, 'security_group_create') + self.mox.StubOutWithMock(api.nova, 'security_group_create') fail_name = sec_group.name + ' invalid' self.mox.ReplayAll() @@ -99,12 +100,12 @@ class SecurityGroupsViewTests(test.TestCase): sec_group = self.security_groups.first() sec_group_list = self.security_groups.list() - self.mox.StubOutWithMock(api, 'security_group_get') - api.security_group_get(IsA(http.HttpRequest), - sec_group.id).AndReturn(sec_group) - self.mox.StubOutWithMock(api, 'security_group_list') - api.security_group_list( - IsA(http.HttpRequest)).AndReturn(sec_group_list) + self.mox.StubOutWithMock(api.nova, 'security_group_get') + api.nova.security_group_get(IsA(http.HttpRequest), + sec_group.id).AndReturn(sec_group) + self.mox.StubOutWithMock(api.nova, 'security_group_list') + api.nova.security_group_list( + IsA(http.HttpRequest)).AndReturn(sec_group_list) self.mox.ReplayAll() res = self.client.get(self.edit_url) @@ -116,11 +117,12 @@ class SecurityGroupsViewTests(test.TestCase): def test_edit_rules_get_exception(self): sec_group = self.security_groups.first() - self.mox.StubOutWithMock(api, 'security_group_get') - self.mox.StubOutWithMock(api, 'security_group_list') + self.mox.StubOutWithMock(api.nova, 'security_group_get') + self.mox.StubOutWithMock(api.nova, 'security_group_list') - api.security_group_get(IsA(http.HttpRequest), - sec_group.id).AndRaise(self.exceptions.nova) + api.nova.security_group_get(IsA(http.HttpRequest), + sec_group.id) \ + .AndRaise(self.exceptions.nova) self.mox.ReplayAll() res = self.client.get(self.edit_url) @@ -131,16 +133,16 @@ class SecurityGroupsViewTests(test.TestCase): sec_group_list = self.security_groups.list() rule = self.security_group_rules.first() - self.mox.StubOutWithMock(api, 'security_group_rule_create') - self.mox.StubOutWithMock(api, 'security_group_list') - api.security_group_rule_create(IsA(http.HttpRequest), - sec_group.id, - rule.ip_protocol, - int(rule.from_port), - int(rule.to_port), - rule.ip_range['cidr'], - None).AndReturn(rule) - api.security_group_list( + self.mox.StubOutWithMock(api.nova, 'security_group_rule_create') + self.mox.StubOutWithMock(api.nova, 'security_group_list') + api.nova.security_group_rule_create(IsA(http.HttpRequest), + sec_group.id, + rule.ip_protocol, + int(rule.from_port), + int(rule.to_port), + rule.ip_range['cidr'], + None).AndReturn(rule) + api.nova.security_group_list( IsA(http.HttpRequest)).AndReturn(sec_group_list) self.mox.ReplayAll() @@ -160,11 +162,11 @@ class SecurityGroupsViewTests(test.TestCase): sec_group_list = self.security_groups.list() rule = self.security_group_rules.first() - self.mox.StubOutWithMock(api, 'security_group_get') - self.mox.StubOutWithMock(api, 'security_group_list') - api.security_group_get(IsA(http.HttpRequest), - sec_group.id).AndReturn(sec_group) - api.security_group_list( + self.mox.StubOutWithMock(api.nova, 'security_group_get') + self.mox.StubOutWithMock(api.nova, 'security_group_list') + api.nova.security_group_get(IsA(http.HttpRequest), + sec_group.id).AndReturn(sec_group) + api.nova.security_group_list( IsA(http.HttpRequest)).AndReturn(sec_group_list) self.mox.ReplayAll() @@ -185,17 +187,18 @@ class SecurityGroupsViewTests(test.TestCase): sec_group_list = self.security_groups.list() rule = self.security_group_rules.get(id=3) - self.mox.StubOutWithMock(api, 'security_group_rule_create') - self.mox.StubOutWithMock(api, 'security_group_list') - api.security_group_rule_create(IsA(http.HttpRequest), - sec_group.id, - rule.ip_protocol, - int(rule.from_port), - int(rule.to_port), - None, - u'%s' % sec_group.id).AndReturn(rule) - api.security_group_list( - IsA(http.HttpRequest)).AndReturn(sec_group_list) + self.mox.StubOutWithMock(api.nova, 'security_group_rule_create') + self.mox.StubOutWithMock(api.nova, 'security_group_list') + api.nova.security_group_rule_create( + IsA(http.HttpRequest), + sec_group.id, + rule.ip_protocol, + int(rule.from_port), + int(rule.to_port), + None, + u'%s' % sec_group.id).AndReturn(rule) + api.nova.security_group_list( + IsA(http.HttpRequest)).AndReturn(sec_group_list) self.mox.ReplayAll() formData = {'method': 'AddRule', @@ -213,12 +216,12 @@ class SecurityGroupsViewTests(test.TestCase): sec_group_list = self.security_groups.list() rule = self.security_group_rules.first() - self.mox.StubOutWithMock(api, 'security_group_get') - api.security_group_get(IsA(http.HttpRequest), - sec_group.id).AndReturn(sec_group) - self.mox.StubOutWithMock(api, 'security_group_list') - api.security_group_list( - IsA(http.HttpRequest)).AndReturn(sec_group_list) + self.mox.StubOutWithMock(api.nova, 'security_group_get') + api.nova.security_group_get(IsA(http.HttpRequest), + sec_group.id).AndReturn(sec_group) + self.mox.StubOutWithMock(api.nova, 'security_group_list') + api.nova.security_group_list( + IsA(http.HttpRequest)).AndReturn(sec_group_list) self.mox.ReplayAll() formData = {'method': 'AddRule', @@ -232,28 +235,29 @@ class SecurityGroupsViewTests(test.TestCase): self.assertNoMessages() self.assertContains(res, "greater than or equal to") - @test.create_stubs({api: ('security_group_get', 'security_group_list')}) + @test.create_stubs({api.nova: ('security_group_get', + 'security_group_list')}) def test_edit_rules_invalid_icmp_rule(self): sec_group = self.security_groups.first() sec_group_list = self.security_groups.list() icmp_rule = self.security_group_rules.list()[1] - api.security_group_get(IsA(http.HttpRequest), - sec_group.id).AndReturn(sec_group) - api.security_group_list( - IsA(http.HttpRequest)).AndReturn(sec_group_list) - api.security_group_get(IsA(http.HttpRequest), - sec_group.id).AndReturn(sec_group) - api.security_group_list( - IsA(http.HttpRequest)).AndReturn(sec_group_list) - api.security_group_get(IsA(http.HttpRequest), - sec_group.id).AndReturn(sec_group) - api.security_group_list( - IsA(http.HttpRequest)).AndReturn(sec_group_list) - api.security_group_get(IsA(http.HttpRequest), - sec_group.id).AndReturn(sec_group) - api.security_group_list( - IsA(http.HttpRequest)).AndReturn(sec_group_list) + api.nova.security_group_get(IsA(http.HttpRequest), + sec_group.id).AndReturn(sec_group) + api.nova.security_group_list( + IsA(http.HttpRequest)).AndReturn(sec_group_list) + api.nova.security_group_get(IsA(http.HttpRequest), + sec_group.id).AndReturn(sec_group) + api.nova.security_group_list( + IsA(http.HttpRequest)).AndReturn(sec_group_list) + api.nova.security_group_get(IsA(http.HttpRequest), + sec_group.id).AndReturn(sec_group) + api.nova.security_group_list( + IsA(http.HttpRequest)).AndReturn(sec_group_list) + api.nova.security_group_get(IsA(http.HttpRequest), + sec_group.id).AndReturn(sec_group) + api.nova.security_group_list( + IsA(http.HttpRequest)).AndReturn(sec_group_list) self.mox.ReplayAll() formData = {'method': 'AddRule', @@ -305,17 +309,18 @@ class SecurityGroupsViewTests(test.TestCase): sec_group_list = self.security_groups.list() rule = self.security_group_rules.first() - self.mox.StubOutWithMock(api, 'security_group_rule_create') - self.mox.StubOutWithMock(api, 'security_group_list') - api.security_group_rule_create(IsA(http.HttpRequest), - sec_group.id, - rule.ip_protocol, - int(rule.from_port), - int(rule.to_port), - rule.ip_range['cidr'], - None).AndRaise(self.exceptions.nova) - api.security_group_list( - IsA(http.HttpRequest)).AndReturn(sec_group_list) + self.mox.StubOutWithMock(api.nova, 'security_group_rule_create') + self.mox.StubOutWithMock(api.nova, 'security_group_list') + api.nova.security_group_rule_create( + IsA(http.HttpRequest), + sec_group.id, + rule.ip_protocol, + int(rule.from_port), + int(rule.to_port), + rule.ip_range['cidr'], + None).AndRaise(self.exceptions.nova) + api.nova.security_group_list( + IsA(http.HttpRequest)).AndReturn(sec_group_list) self.mox.ReplayAll() formData = {'method': 'AddRule', @@ -332,8 +337,8 @@ class SecurityGroupsViewTests(test.TestCase): sec_group = self.security_groups.first() rule = self.security_group_rules.first() - self.mox.StubOutWithMock(api, 'security_group_rule_delete') - api.security_group_rule_delete(IsA(http.HttpRequest), rule.id) + self.mox.StubOutWithMock(api.nova, 'security_group_rule_delete') + api.nova.security_group_rule_delete(IsA(http.HttpRequest), rule.id) self.mox.ReplayAll() form_data = {"action": "rules__delete__%s" % rule.id} @@ -345,9 +350,10 @@ class SecurityGroupsViewTests(test.TestCase): def test_edit_rules_delete_rule_exception(self): rule = self.security_group_rules.first() - self.mox.StubOutWithMock(api, 'security_group_rule_delete') - api.security_group_rule_delete(IsA(http.HttpRequest), - rule.id).AndRaise(self.exceptions.nova) + self.mox.StubOutWithMock(api.nova, 'security_group_rule_delete') + api.nova.security_group_rule_delete( + IsA(http.HttpRequest), + rule.id).AndRaise(self.exceptions.nova) self.mox.ReplayAll() form_data = {"action": "rules__delete__%s" % rule.id} @@ -360,8 +366,8 @@ class SecurityGroupsViewTests(test.TestCase): def test_delete_group(self): sec_group = self.security_groups.get(name="other_group") - self.mox.StubOutWithMock(api, 'security_group_delete') - api.security_group_delete(IsA(http.HttpRequest), sec_group.id) + self.mox.StubOutWithMock(api.nova, 'security_group_delete') + api.nova.security_group_delete(IsA(http.HttpRequest), sec_group.id) self.mox.ReplayAll() form_data = {"action": "security_groups__delete__%s" % sec_group.id} @@ -374,9 +380,10 @@ class SecurityGroupsViewTests(test.TestCase): def test_delete_group_exception(self): sec_group = self.security_groups.get(name="other_group") - self.mox.StubOutWithMock(api, 'security_group_delete') - api.security_group_delete(IsA(http.HttpRequest), - sec_group.id).AndRaise(self.exceptions.nova) + self.mox.StubOutWithMock(api.nova, 'security_group_delete') + api.nova.security_group_delete( + IsA(http.HttpRequest), + sec_group.id).AndRaise(self.exceptions.nova) self.mox.ReplayAll() diff --git a/openstack_dashboard/dashboards/project/access_and_security/security_groups/views.py b/openstack_dashboard/dashboards/project/access_and_security/security_groups/views.py index 67d0c953f..957de16f3 100644 --- a/openstack_dashboard/dashboards/project/access_and_security/security_groups/views.py +++ b/openstack_dashboard/dashboards/project/access_and_security/security_groups/views.py @@ -49,8 +49,8 @@ class EditRulesView(tables.DataTableView, forms.ModalFormView): def get_data(self): security_group_id = int(self.kwargs['security_group_id']) try: - self.object = api.security_group_get(self.request, - security_group_id) + self.object = api.nova.security_group_get(self.request, + security_group_id) rules = [api.nova.SecurityGroupRule(rule) for rule in self.object.rules] except: @@ -67,7 +67,7 @@ class EditRulesView(tables.DataTableView, forms.ModalFormView): kwargs = super(EditRulesView, self).get_form_kwargs() try: - groups = api.security_group_list(self.request) + groups = api.nova.security_group_list(self.request) except: groups = [] exceptions.handle(self.request, diff --git a/openstack_dashboard/dashboards/project/access_and_security/tests.py b/openstack_dashboard/dashboards/project/access_and_security/tests.py index f990e9bf4..cf8017707 100644 --- a/openstack_dashboard/dashboards/project/access_and_security/tests.py +++ b/openstack_dashboard/dashboards/project/access_and_security/tests.py @@ -34,17 +34,18 @@ class AccessAndSecurityTests(test.TestCase): keypairs = self.keypairs.list() sec_groups = self.security_groups.list() floating_ips = self.floating_ips.list() - self.mox.StubOutWithMock(api, 'tenant_floating_ip_list') - self.mox.StubOutWithMock(api, 'security_group_list') + self.mox.StubOutWithMock(api.nova, 'tenant_floating_ip_list') + self.mox.StubOutWithMock(api.nova, 'security_group_list') self.mox.StubOutWithMock(api.nova, 'keypair_list') self.mox.StubOutWithMock(api.nova, 'server_list') api.nova.server_list(IsA(http.HttpRequest), all_tenants=True).AndReturn(self.servers.list()) api.nova.keypair_list(IsA(http.HttpRequest)).AndReturn(keypairs) - api.tenant_floating_ip_list(IsA(http.HttpRequest)) \ - .AndReturn(floating_ips) - api.security_group_list(IsA(http.HttpRequest)).AndReturn(sec_groups) + api.nova.tenant_floating_ip_list(IsA(http.HttpRequest)) \ + .AndReturn(floating_ips) + api.nova.security_group_list(IsA(http.HttpRequest)) \ + .AndReturn(sec_groups) self.mox.ReplayAll() diff --git a/openstack_dashboard/dashboards/project/access_and_security/views.py b/openstack_dashboard/dashboards/project/access_and_security/views.py index 4cee611e0..a8ac6fc21 100644 --- a/openstack_dashboard/dashboards/project/access_and_security/views.py +++ b/openstack_dashboard/dashboards/project/access_and_security/views.py @@ -53,7 +53,7 @@ class IndexView(tables.MultiTableView): def get_security_groups_data(self): try: - security_groups = api.security_group_list(self.request) + security_groups = api.nova.security_group_list(self.request) except: security_groups = [] exceptions.handle(self.request, @@ -62,7 +62,7 @@ class IndexView(tables.MultiTableView): def get_floating_ips_data(self): try: - floating_ips = api.tenant_floating_ip_list(self.request) + floating_ips = api.nova.tenant_floating_ip_list(self.request) except: floating_ips = [] exceptions.handle(self.request, diff --git a/openstack_dashboard/dashboards/project/containers/forms.py b/openstack_dashboard/dashboards/project/containers/forms.py index cfa4e75e0..f94135ae9 100644 --- a/openstack_dashboard/dashboards/project/containers/forms.py +++ b/openstack_dashboard/dashboards/project/containers/forms.py @@ -53,7 +53,7 @@ class CreateContainer(forms.SelfHandlingForm): try: if not data['parent']: # Create a container - api.swift_create_container(request, data["name"]) + api.swift.swift_create_container(request, data["name"]) messages.success(request, _("Container created successfully.")) else: # Create a pseudo-folder @@ -62,9 +62,9 @@ class CreateContainer(forms.SelfHandlingForm): subfolder_name = "/".join([bit for bit in (remainder, data['name']) if bit]) - api.swift_create_subfolder(request, - container, - subfolder_name) + api.swift.swift_create_subfolder(request, + container, + subfolder_name) messages.success(request, _("Folder created successfully.")) return True except: @@ -88,10 +88,10 @@ class UploadObject(forms.SelfHandlingForm): else: object_path = data['name'] try: - obj = api.swift_upload_object(request, - data['container_name'], - object_path, - object_file) + obj = api.swift.swift_upload_object(request, + data['container_name'], + object_path, + object_file) messages.success(request, _("Object was successfully uploaded.")) return obj except: @@ -143,11 +143,11 @@ class CopyObject(forms.SelfHandlingForm): # Now copy the object itself. try: - api.swift_copy_object(request, - orig_container, - orig_object, - new_container, - new_path) + api.swift.swift_copy_object(request, + orig_container, + orig_object, + new_container, + new_path) dest = "%s/%s" % (new_container, path) vals = {"dest": dest.rstrip("/"), "orig": orig_object.split("/")[-1], diff --git a/openstack_dashboard/dashboards/project/containers/tables.py b/openstack_dashboard/dashboards/project/containers/tables.py index deccb067c..dfcdbc7fd 100644 --- a/openstack_dashboard/dashboards/project/containers/tables.py +++ b/openstack_dashboard/dashboards/project/containers/tables.py @@ -24,7 +24,7 @@ from django.utils.translation import ugettext_lazy as _ from horizon import tables from openstack_dashboard import api -from openstack_dashboard.api import FOLDER_DELIMITER +from openstack_dashboard.api.swift import FOLDER_DELIMITER LOG = logging.getLogger(__name__) @@ -42,7 +42,7 @@ class DeleteContainer(tables.DeleteAction): success_url = "horizon:project:containers:index" def delete(self, request, obj_id): - api.swift_delete_container(request, obj_id) + api.swift.swift_delete_container(request, obj_id) def get_success_url(self, request=None): """ @@ -141,7 +141,7 @@ class DeleteObject(tables.DeleteAction): def delete(self, request, obj_id): obj = self.table.get_object_by_id(obj_id) container_name = obj.container_name - api.swift_delete_object(request, container_name, obj_id) + api.swift.swift_delete_object(request, container_name, obj_id) class DeleteSubfolder(DeleteObject): @@ -190,10 +190,10 @@ class ObjectFilterAction(tables.FilterAction): container = self.table.kwargs['container_name'] subfolder = self.table.kwargs['subfolder_path'] prefix = wrap_delimiter(subfolder) if subfolder else '' - self.filtered_data = api.swift_filter_objects(request, - filter_string, - container, - prefix=prefix) + self.filtered_data = api.swift.swift_filter_objects(request, + filter_string, + container, + prefix=prefix) return self.filtered_data def filter_subfolders_data(self, table, objects, filter_string): diff --git a/openstack_dashboard/dashboards/project/containers/tests.py b/openstack_dashboard/dashboards/project/containers/tests.py index b8477b9ba..efb7bb195 100644 --- a/openstack_dashboard/dashboards/project/containers/tests.py +++ b/openstack_dashboard/dashboards/project/containers/tests.py @@ -36,11 +36,11 @@ CONTAINER_INDEX_URL = reverse('horizon:project:containers:index') class SwiftTests(test.TestCase): - @test.create_stubs({api: ('swift_get_containers',)}) + @test.create_stubs({api.swift: ('swift_get_containers',)}) def test_index_no_container_selected(self): containers = self.containers.list() - api.swift_get_containers(IsA(http.HttpRequest), marker=None) \ - .AndReturn((containers, False)) + api.swift.swift_get_containers(IsA(http.HttpRequest), marker=None) \ + .AndReturn((containers, False)) self.mox.ReplayAll() res = self.client.get(CONTAINER_INDEX_URL) @@ -50,10 +50,10 @@ class SwiftTests(test.TestCase): resp_containers = res.context['table'].data self.assertEqual(len(resp_containers), len(containers)) - @test.create_stubs({api: ('swift_delete_container',)}) + @test.create_stubs({api.swift: ('swift_delete_container',)}) def test_delete_container(self): container = self.containers.get(name=u"container_two\u6346") - api.swift_delete_container(IsA(http.HttpRequest), container.name) + api.swift.swift_delete_container(IsA(http.HttpRequest), container.name) self.mox.ReplayAll() action_string = u"containers__delete__%s" % container.name @@ -63,13 +63,13 @@ class SwiftTests(test.TestCase): handled = table.maybe_handle() self.assertEqual(handled['location'], CONTAINER_INDEX_URL) - @test.create_stubs({api: ('swift_delete_container',)}) + @test.create_stubs({api.swift: ('swift_delete_container',)}) def test_delete_container_nonempty(self): container = self.containers.first() exc = self.exceptions.swift exc.silence_logging = True - api.swift_delete_container(IsA(http.HttpRequest), - container.name).AndRaise(exc) + api.swift.swift_delete_container(IsA(http.HttpRequest), + container.name).AndRaise(exc) self.mox.ReplayAll() action_string = u"containers__delete__%s" % container.name @@ -83,10 +83,10 @@ class SwiftTests(test.TestCase): res = self.client.get(reverse('horizon:project:containers:create')) self.assertTemplateUsed(res, 'project/containers/create.html') - @test.create_stubs({api: ('swift_create_container',)}) + @test.create_stubs({api.swift: ('swift_create_container',)}) def test_create_container_post(self): - api.swift_create_container(IsA(http.HttpRequest), - self.containers.first().name) + api.swift.swift_create_container(IsA(http.HttpRequest), + self.containers.first().name) self.mox.ReplayAll() formData = {'name': self.containers.first().name, @@ -97,16 +97,17 @@ class SwiftTests(test.TestCase): args=[wrap_delimiter(self.containers.first().name)]) self.assertRedirectsNoFollow(res, url) - @test.create_stubs({api: ('swift_get_containers', 'swift_get_objects')}) + @test.create_stubs({api.swift: ('swift_get_containers', + 'swift_get_objects')}) def test_index_container_selected(self): containers = (self.containers.list(), False) ret = (self.objects.list(), False) - api.swift_get_containers(IsA(http.HttpRequest), - marker=None).AndReturn(containers) - api.swift_get_objects(IsA(http.HttpRequest), - self.containers.first().name, - marker=None, - prefix=None).AndReturn(ret) + api.swift.swift_get_containers(IsA(http.HttpRequest), + marker=None).AndReturn(containers) + api.swift.swift_get_objects(IsA(http.HttpRequest), + self.containers.first().name, + marker=None, + prefix=None).AndReturn(ret) self.mox.ReplayAll() res = self.client.get(reverse('horizon:project:containers:index', @@ -120,7 +121,7 @@ class SwiftTests(test.TestCase): expected, lambda obj: obj.name.encode('utf8')) - @test.create_stubs({api: ('swift_upload_object',)}) + @test.create_stubs({api.swift: ('swift_upload_object',)}) def test_upload(self): container = self.containers.first() obj = self.objects.first() @@ -131,10 +132,10 @@ class SwiftTests(test.TestCase): temp_file.flush() temp_file.seek(0) - api.swift_upload_object(IsA(http.HttpRequest), - container.name, - obj.name, - IsA(InMemoryUploadedFile)).AndReturn(obj) + api.swift.swift_upload_object(IsA(http.HttpRequest), + container.name, + obj.name, + IsA(InMemoryUploadedFile)).AndReturn(obj) self.mox.ReplayAll() upload_url = reverse('horizon:project:containers:object_upload', @@ -162,15 +163,15 @@ class SwiftTests(test.TestCase): self.assertNoMessages() self.assertContains(res, "Slash is not an allowed character.") - @test.create_stubs({api: ('swift_delete_object',)}) + @test.create_stubs({api.swift: ('swift_delete_object',)}) def test_delete(self): container = self.containers.first() obj = self.objects.first() index_url = reverse('horizon:project:containers:index', args=[wrap_delimiter(container.name)]) - api.swift_delete_object(IsA(http.HttpRequest), - container.name, - obj.name) + api.swift.swift_delete_object(IsA(http.HttpRequest), + container.name, + obj.name) self.mox.ReplayAll() action_string = "objects__delete_object__%s" % obj.name @@ -197,10 +198,10 @@ class SwiftTests(test.TestCase): self.assertEqual(res.content, obj.data) self.assertTrue(res.has_header('Content-Disposition')) - @test.create_stubs({api: ('swift_get_containers',)}) + @test.create_stubs({api.swift: ('swift_get_containers',)}) def test_copy_index(self): ret = (self.containers.list(), False) - api.swift_get_containers(IsA(http.HttpRequest)).AndReturn(ret) + api.swift.swift_get_containers(IsA(http.HttpRequest)).AndReturn(ret) self.mox.ReplayAll() res = self.client.get(reverse('horizon:project:containers:object_copy', @@ -208,19 +209,20 @@ class SwiftTests(test.TestCase): self.objects.first().name])) self.assertTemplateUsed(res, 'project/containers/copy.html') - @test.create_stubs({api: ('swift_get_containers', 'swift_copy_object')}) + @test.create_stubs({api.swift: ('swift_get_containers', + 'swift_copy_object')}) def test_copy(self): container_1 = self.containers.get(name=u"container_one\u6346") container_2 = self.containers.get(name=u"container_two\u6346") obj = self.objects.first() ret = (self.containers.list(), False) - api.swift_get_containers(IsA(http.HttpRequest)).AndReturn(ret) - api.swift_copy_object(IsA(http.HttpRequest), - container_1.name, - obj.name, - container_2.name, - obj.name) + api.swift.swift_get_containers(IsA(http.HttpRequest)).AndReturn(ret) + api.swift.swift_copy_object(IsA(http.HttpRequest), + container_1.name, + obj.name, + container_2.name, + obj.name) self.mox.ReplayAll() formData = {'method': forms.CopyObject.__name__, diff --git a/openstack_dashboard/dashboards/project/containers/views.py b/openstack_dashboard/dashboards/project/containers/views.py index 39b39ccc2..dd5048829 100644 --- a/openstack_dashboard/dashboards/project/containers/views.py +++ b/openstack_dashboard/dashboards/project/containers/views.py @@ -32,7 +32,7 @@ from horizon import exceptions from horizon import forms from openstack_dashboard import api -from openstack_dashboard.api import FOLDER_DELIMITER +from openstack_dashboard.api.swift import FOLDER_DELIMITER from .browsers import ContainerBrowser from .forms import CreateContainer, UploadObject, CopyObject from .tables import wrap_delimiter @@ -47,8 +47,8 @@ class ContainerView(browsers.ResourceBrowserView): self._more = None marker = self.request.GET.get('marker', None) try: - containers, self._more = api.swift_get_containers(self.request, - marker=marker) + containers, self._more = api.swift.swift_get_containers( + self.request, marker=marker) except: msg = _('Unable to retrieve container list.') exceptions.handle(self.request, msg) @@ -72,10 +72,11 @@ class ContainerView(browsers.ResourceBrowserView): if subfolder: prefix = subfolder try: - objects, self._more = api.swift_get_objects(self.request, - container_name, - marker=marker, - prefix=prefix) + objects, self._more = api.swift.swift_get_objects( + self.request, + container_name, + marker=marker, + prefix=prefix) except: self._more = None objects = [] @@ -194,7 +195,7 @@ class CopyView(forms.ModalFormView): def get_form_kwargs(self): kwargs = super(CopyView, self).get_form_kwargs() try: - containers = api.swift_get_containers(self.request) + containers = api.swift.swift_get_containers(self.request) except: redirect = reverse("horizon:project:containers:index") exceptions.handle(self.request, diff --git a/openstack_dashboard/dashboards/project/images_and_snapshots/images/forms.py b/openstack_dashboard/dashboards/project/images_and_snapshots/images/forms.py index a91f67671..480019f77 100644 --- a/openstack_dashboard/dashboards/project/images_and_snapshots/images/forms.py +++ b/openstack_dashboard/dashboards/project/images_and_snapshots/images/forms.py @@ -158,7 +158,7 @@ class UpdateImageForm(forms.SelfHandlingForm): meta['purge_props'] = False try: - image = api.image_update(request, image_id, **meta) + image = api.glance.image_update(request, image_id, **meta) messages.success(request, _('Image was successfully updated.')) return image except: diff --git a/openstack_dashboard/dashboards/project/images_and_snapshots/images/tables.py b/openstack_dashboard/dashboards/project/images_and_snapshots/images/tables.py index 72e3aefaf..d067f9d24 100644 --- a/openstack_dashboard/dashboards/project/images_and_snapshots/images/tables.py +++ b/openstack_dashboard/dashboards/project/images_and_snapshots/images/tables.py @@ -53,7 +53,7 @@ class DeleteImage(tables.DeleteAction): return True def delete(self, request, obj_id): - api.image_delete(request, obj_id) + api.glance.image_delete(request, obj_id) class CreateImage(tables.LinkAction): @@ -94,7 +94,7 @@ class UpdateRow(tables.Row): ajax = True def get_data(self, request, image_id): - image = api.image_get(request, image_id) + image = api.glance.image_get(request, image_id) return image diff --git a/openstack_dashboard/dashboards/project/images_and_snapshots/images/tests.py b/openstack_dashboard/dashboards/project/images_and_snapshots/images/tests.py index 8f93ed8c9..24c7670ee 100644 --- a/openstack_dashboard/dashboards/project/images_and_snapshots/images/tests.py +++ b/openstack_dashboard/dashboards/project/images_and_snapshots/images/tests.py @@ -95,12 +95,12 @@ class ImageViewTests(test.TestCase): res = self.client.get(url) self.assertRedirectsNoFollow(res, IMAGES_INDEX_URL) - @test.create_stubs({api: ('image_get',)}) + @test.create_stubs({api.glance: ('image_get',)}) def test_image_update_get(self): image = self.images.first() image.disk_format = "ami" image.is_public = True - api.image_get(IsA(http.HttpRequest), str(image.id)) \ + api.glance.image_get(IsA(http.HttpRequest), str(image.id)) \ .AndReturn(image) self.mox.ReplayAll() diff --git a/openstack_dashboard/dashboards/project/images_and_snapshots/images/views.py b/openstack_dashboard/dashboards/project/images_and_snapshots/images/views.py index 121e4f479..dcc366e16 100644 --- a/openstack_dashboard/dashboards/project/images_and_snapshots/images/views.py +++ b/openstack_dashboard/dashboards/project/images_and_snapshots/images/views.py @@ -55,8 +55,8 @@ class UpdateView(forms.ModalFormView): def get_object(self): if not hasattr(self, "_object"): try: - self._object = api.image_get(self.request, - self.kwargs['image_id']) + self._object = api.glance.image_get(self.request, + self.kwargs['image_id']) except: msg = _('Unable to retrieve image.') url = reverse('horizon:project:images_and_snapshots:index') diff --git a/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/forms.py b/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/forms.py index 5b950ad8f..15f2033d7 100644 --- a/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/forms.py +++ b/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/forms.py @@ -41,11 +41,11 @@ class CreateSnapshot(forms.SelfHandlingForm): def handle(self, request, data): try: - snapshot = api.snapshot_create(request, - data['instance_id'], - data['name']) + snapshot = api.nova.snapshot_create(request, + data['instance_id'], + data['name']) # NOTE(gabriel): This API call is only to display a pretty name. - instance = api.server_get(request, data['instance_id']) + instance = api.nova.server_get(request, data['instance_id']) vals = {"name": data['name'], "inst": instance.name} messages.success(request, _('Snapshot "%(name)s" created for ' 'instance "%(inst)s"') % vals) diff --git a/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/tests.py b/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/tests.py index acef40cbb..bfe01ce21 100644 --- a/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/tests.py +++ b/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/tests.py @@ -33,8 +33,8 @@ INDEX_URL = reverse('horizon:project:images_and_snapshots:index') class SnapshotsViewTests(test.TestCase): def test_create_snapshot_get(self): server = self.servers.first() - self.mox.StubOutWithMock(api, 'server_get') - api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) + self.mox.StubOutWithMock(api.nova, 'server_get') + api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) self.mox.ReplayAll() url = reverse('horizon:project:images_and_snapshots:snapshots:create', @@ -45,8 +45,8 @@ class SnapshotsViewTests(test.TestCase): def test_create_get_server_exception(self): server = self.servers.first() - self.mox.StubOutWithMock(api, 'server_get') - api.server_get(IsA(http.HttpRequest), server.id) \ + self.mox.StubOutWithMock(api.nova, 'server_get') + api.nova.server_get(IsA(http.HttpRequest), server.id) \ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() @@ -60,11 +60,11 @@ class SnapshotsViewTests(test.TestCase): server = self.servers.first() snapshot = self.snapshots.first() - self.mox.StubOutWithMock(api, 'server_get') - self.mox.StubOutWithMock(api, 'snapshot_create') - api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) - api.snapshot_create(IsA(http.HttpRequest), server.id, snapshot.name) \ - .AndReturn(snapshot) + self.mox.StubOutWithMock(api.nova, 'server_get') + self.mox.StubOutWithMock(api.nova, 'snapshot_create') + api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) + api.nova.snapshot_create(IsA(http.HttpRequest), server.id, + snapshot.name).AndReturn(snapshot) self.mox.ReplayAll() formData = {'method': 'CreateSnapshot', @@ -81,10 +81,10 @@ class SnapshotsViewTests(test.TestCase): server = self.servers.first() snapshot = self.snapshots.first() - self.mox.StubOutWithMock(api, 'server_get') - self.mox.StubOutWithMock(api, 'snapshot_create') - api.snapshot_create(IsA(http.HttpRequest), server.id, snapshot.name) \ - .AndRaise(self.exceptions.nova) + self.mox.StubOutWithMock(api.nova, 'server_get') + self.mox.StubOutWithMock(api.nova, 'snapshot_create') + api.nova.snapshot_create(IsA(http.HttpRequest), server.id, + snapshot.name).AndRaise(self.exceptions.nova) self.mox.ReplayAll() formData = {'method': 'CreateSnapshot', diff --git a/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/views.py b/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/views.py index b23a8a65f..75edff070 100644 --- a/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/views.py +++ b/openstack_dashboard/dashboards/project/images_and_snapshots/snapshots/views.py @@ -45,8 +45,8 @@ class CreateView(forms.ModalFormView): def get_object(self): if not hasattr(self, "_object"): try: - self._object = api.server_get(self.request, - self.kwargs["instance_id"]) + self._object = api.nova.server_get(self.request, + self.kwargs["instance_id"]) except: redirect = reverse('horizon:project:instances:index') exceptions.handle(self.request, diff --git a/openstack_dashboard/dashboards/project/images_and_snapshots/tests.py b/openstack_dashboard/dashboards/project/images_and_snapshots/tests.py index 52ee152b8..0f2f29c41 100644 --- a/openstack_dashboard/dashboards/project/images_and_snapshots/tests.py +++ b/openstack_dashboard/dashboards/project/images_and_snapshots/tests.py @@ -32,8 +32,9 @@ INDEX_URL = reverse('horizon:project:images_and_snapshots:index') class ImagesAndSnapshotsTests(test.TestCase): - @test.create_stubs({api: ('image_list_detailed', 'snapshot_list_detailed', - 'volume_snapshot_list', 'volume_get',)}) + @test.create_stubs({api.glance: ('image_list_detailed', + 'snapshot_list_detailed'), + api.cinder: ('volume_snapshot_list', 'volume_get')}) def test_index(self): images = self.images.list() snapshots = self.snapshots.list() @@ -42,19 +43,19 @@ class ImagesAndSnapshotsTests(test.TestCase): for volume in volumes: volume.volume_id = volume.id for volume in volumes: - api.volume_get(IsA(http.HttpRequest), volume.volume_id) \ + api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \ .AndReturn(volume) for volume in volumes: - api.volume_get(IsA(http.HttpRequest), volume.volume_id) \ + api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \ .AndReturn(volume) - api.volume_get(IsA(http.HttpRequest), volume.volume_id) + api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) - api.volume_snapshot_list(IsA(http.HttpRequest)) \ + api.cinder.volume_snapshot_list(IsA(http.HttpRequest)) \ .AndReturn(volumes) - api.image_list_detailed(IsA(http.HttpRequest), - marker=None).AndReturn([images, False]) - api.snapshot_list_detailed(IsA(http.HttpRequest), - marker=None).AndReturn([snapshots, False]) + api.glance.image_list_detailed(IsA(http.HttpRequest), + marker=None).AndReturn([images, False]) + api.glance.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \ + .AndReturn([snapshots, False]) self.mox.ReplayAll() res = self.client.get(INDEX_URL) @@ -65,60 +66,64 @@ class ImagesAndSnapshotsTests(test.TestCase): filtered_images = filter(filter_func, images) self.assertItemsEqual(images, filtered_images) - @test.create_stubs({api: ('image_list_detailed', 'snapshot_list_detailed', - 'volume_snapshot_list', 'volume_get',)}) + @test.create_stubs({api.glance: ('image_list_detailed', + 'snapshot_list_detailed'), + api.cinder: ('volume_snapshot_list', 'volume_get')}) def test_index_no_images(self): volumes = self.volumes.list() for volume in volumes: volume.volume_id = volume.id for volume in volumes: - api.volume_get(IsA(http.HttpRequest), volume.volume_id) \ + api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \ .AndReturn(volume) for volume in volumes: - api.volume_get(IsA(http.HttpRequest), volume.volume_id) \ + api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \ .AndReturn(volume) - api.volume_get(IsA(http.HttpRequest), volume.volume_id) + api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) - api.volume_snapshot_list(IsA(http.HttpRequest)) \ + api.cinder.volume_snapshot_list(IsA(http.HttpRequest)) \ .AndReturn(volumes) - api.image_list_detailed(IsA(http.HttpRequest), - marker=None).AndReturn([(), False]) - api.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \ + api.glance.image_list_detailed(IsA(http.HttpRequest), + marker=None).AndReturn([(), False]) + api.glance.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \ .AndReturn([self.snapshots.list(), False]) self.mox.ReplayAll() res = self.client.get(INDEX_URL) self.assertTemplateUsed(res, 'project/images_and_snapshots/index.html') - @test.create_stubs({api: ('image_list_detailed', 'snapshot_list_detailed', - 'volume_snapshot_list', 'volume_get',)}) + @test.create_stubs({api.glance: ('image_list_detailed', + 'snapshot_list_detailed'), + api.cinder: ('volume_snapshot_list', 'volume_get')}) def test_index_error(self): volumes = self.volumes.list() for volume in volumes: volume.volume_id = volume.id for volume in volumes: - api.volume_get(IsA(http.HttpRequest), volume.volume_id) \ + api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \ .AndReturn(volume) for volume in volumes: - api.volume_get(IsA(http.HttpRequest), volume.volume_id) \ + api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \ .AndReturn(volume) - api.volume_get(IsA(http.HttpRequest), volume.volume_id) + api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) - api.volume_snapshot_list(IsA(http.HttpRequest)) \ + api.cinder.volume_snapshot_list(IsA(http.HttpRequest)) \ .AndReturn(volumes) - api.image_list_detailed(IsA(http.HttpRequest), - marker=None).AndRaise(self.exceptions.glance) - api.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \ + api.glance.image_list_detailed(IsA(http.HttpRequest), + marker=None) \ + .AndRaise(self.exceptions.glance) + api.glance.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \ .AndReturn([self.snapshots.list(), False]) self.mox.ReplayAll() res = self.client.get(INDEX_URL) self.assertTemplateUsed(res, 'project/images_and_snapshots/index.html') - @test.create_stubs({api: ('image_list_detailed', 'snapshot_list_detailed', - 'volume_snapshot_list', 'volume_get',)}) + @test.create_stubs({api.glance: ('image_list_detailed', + 'snapshot_list_detailed'), + api.cinder: ('volume_snapshot_list', 'volume_get')}) def test_queued_snapshot_actions(self): images = self.images.list() snapshots = self.snapshots.list() @@ -127,19 +132,19 @@ class ImagesAndSnapshotsTests(test.TestCase): for volume in volumes: volume.volume_id = volume.id for volume in volumes: - api.volume_get(IsA(http.HttpRequest), volume.volume_id) \ + api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \ .AndReturn(volume) for volume in volumes: - api.volume_get(IsA(http.HttpRequest), volume.volume_id) \ + api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) \ .AndReturn(volume) - api.volume_get(IsA(http.HttpRequest), volume.volume_id) + api.cinder.volume_get(IsA(http.HttpRequest), volume.volume_id) - api.volume_snapshot_list(IsA(http.HttpRequest)) \ - .AndReturn(volumes) - api.image_list_detailed(IsA(http.HttpRequest), - marker=None).AndReturn([images, False]) - api.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \ - .AndReturn([snapshots, False]) + api.cinder.volume_snapshot_list(IsA(http.HttpRequest)) \ + .AndReturn(volumes) + api.glance.image_list_detailed(IsA(http.HttpRequest), + marker=None).AndReturn([images, False]) + api.glance.snapshot_list_detailed(IsA(http.HttpRequest), marker=None) \ + .AndReturn([snapshots, False]) self.mox.ReplayAll() res = self.client.get(INDEX_URL) diff --git a/openstack_dashboard/dashboards/project/images_and_snapshots/views.py b/openstack_dashboard/dashboards/project/images_and_snapshots/views.py index 4126ab4af..6b7eabc59 100644 --- a/openstack_dashboard/dashboards/project/images_and_snapshots/views.py +++ b/openstack_dashboard/dashboards/project/images_and_snapshots/views.py @@ -54,8 +54,8 @@ class IndexView(tables.MultiTableView): # FIXME(gabriel): The paging is going to be strange here due to # our filtering after the fact. (all_images, - self._more_images) = api.image_list_detailed(self.request, - marker=marker) + self._more_images) = api.glance.image_list_detailed(self.request, + marker=marker) images = [im for im in all_images if im.container_format not in ['aki', 'ari'] and im.properties.get("image_type", '') != "snapshot"] @@ -68,8 +68,8 @@ class IndexView(tables.MultiTableView): req = self.request marker = req.GET.get(SnapshotsTable._meta.pagination_param, None) try: - snaps, self._more_snapshots = api.snapshot_list_detailed(req, - marker=marker) + snaps, self._more_snapshots = api.glance.snapshot_list_detailed( + req, marker=marker) except: snaps = [] exceptions.handle(req, _("Unable to retrieve snapshots.")) @@ -78,7 +78,7 @@ class IndexView(tables.MultiTableView): def get_volume_snapshots_data(self): if is_service_enabled(self.request, 'volume'): try: - snapshots = api.volume_snapshot_list(self.request) + snapshots = api.cinder.volume_snapshot_list(self.request) except: snapshots = [] exceptions.handle(self.request, _("Unable to retrieve " diff --git a/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tables.py b/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tables.py index be6b334e1..2311e5c70 100644 --- a/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tables.py +++ b/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tables.py @@ -37,7 +37,7 @@ class DeleteVolumeSnapshot(tables.DeleteAction): action_past = _("Scheduled deletion of") def delete(self, request, obj_id): - api.volume_snapshot_delete(request, obj_id) + api.cinder.volume_snapshot_delete(request, obj_id) class CreateVolumeFromSnapshot(tables.LinkAction): @@ -66,11 +66,13 @@ class UpdateRow(tables.Row): class SnapshotVolumeNameColumn(tables.Column): def get_raw_data(self, snapshot): request = self.table.request - volume_name = api.volume_get(request, snapshot.volume_id).display_name + volume_name = api.cinder.volume_get(request, + snapshot.volume_id).display_name return safestring.mark_safe(volume_name) def get_link_url(self, snapshot): - volume_id = api.volume_get(self.table.request, snapshot.volume_id).id + volume_id = api.cinder.volume_get(self.table.request, + snapshot.volume_id).id return reverse(self.link, args=(volume_id,)) diff --git a/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tests.py b/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tests.py index 8de32e2bd..27800b43d 100644 --- a/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tests.py +++ b/openstack_dashboard/dashboards/project/images_and_snapshots/volume_snapshots/tests.py @@ -61,27 +61,27 @@ class VolumeSnapshotsViewTests(test.TestCase): res = self.client.post(url, formData) self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ['image_list_detailed', - 'snapshot_list_detailed', - 'volume_snapshot_list', - 'volume_snapshot_delete', ], }) + @test.create_stubs({api.glance: ('image_list_detailed', + 'snapshot_list_detailed'), + api.cinder: ('volume_snapshot_list', + 'volume_snapshot_delete')}) def test_delete_volume_snapshot(self): vol_snapshots = self.volume_snapshots.list() snapshot = self.volume_snapshots.first() - api.image_list_detailed(IsA(http.HttpRequest), - marker=None).AndReturn(([], False)) - api.snapshot_list_detailed(IsA(http.HttpRequest), - marker=None).AndReturn(([], False)) - api.volume_snapshot_list(IsA(http.HttpRequest)). \ - AndReturn(vol_snapshots) - api.volume_snapshot_delete(IsA(http.HttpRequest), snapshot.id) - api.image_list_detailed(IsA(http.HttpRequest), - marker=None).AndReturn(([], False)) - api.snapshot_list_detailed(IsA(http.HttpRequest), - marker=None).AndReturn(([], False)) - api.volume_snapshot_list(IsA(http.HttpRequest)). \ - AndReturn([]) + api.glance.image_list_detailed(IsA(http.HttpRequest), + marker=None).AndReturn(([], False)) + api.glance.snapshot_list_detailed(IsA(http.HttpRequest), + marker=None).AndReturn(([], False)) + api.cinder.volume_snapshot_list(IsA(http.HttpRequest)). \ + AndReturn(vol_snapshots) + api.cinder.volume_snapshot_delete(IsA(http.HttpRequest), snapshot.id) + api.glance.image_list_detailed(IsA(http.HttpRequest), + marker=None).AndReturn(([], False)) + api.glance.snapshot_list_detailed(IsA(http.HttpRequest), + marker=None).AndReturn(([], False)) + api.cinder.volume_snapshot_list(IsA(http.HttpRequest)). \ + AndReturn([]) self.mox.ReplayAll() formData = {'action': diff --git a/openstack_dashboard/dashboards/project/instances/forms.py b/openstack_dashboard/dashboards/project/instances/forms.py index 569053d22..518a9a04c 100644 --- a/openstack_dashboard/dashboards/project/instances/forms.py +++ b/openstack_dashboard/dashboards/project/instances/forms.py @@ -40,7 +40,8 @@ class UpdateInstance(forms.SelfHandlingForm): def handle(self, request, data): try: - server = api.server_update(request, data['instance'], data['name']) + server = api.nova.server_update(request, data['instance'], + data['name']) messages.success(request, _('Instance "%s" updated.') % data['name']) return server diff --git a/openstack_dashboard/dashboards/project/instances/tables.py b/openstack_dashboard/dashboards/project/instances/tables.py index bffb1a9e2..6caffc810 100644 --- a/openstack_dashboard/dashboards/project/instances/tables.py +++ b/openstack_dashboard/dashboards/project/instances/tables.py @@ -83,7 +83,7 @@ class TerminateInstance(tables.BatchAction): return True def action(self, request, obj_id): - api.server_delete(request, obj_id) + api.nova.server_delete(request, obj_id) class RebootInstance(tables.BatchAction): @@ -100,7 +100,7 @@ class RebootInstance(tables.BatchAction): and not is_deleting(instance)) def action(self, request, obj_id): - api.server_reboot(request, obj_id) + api.nova.server_reboot(request, obj_id) class TogglePause(tables.BatchAction): @@ -125,10 +125,10 @@ class TogglePause(tables.BatchAction): def action(self, request, obj_id): if self.paused: - api.server_unpause(request, obj_id) + api.nova.server_unpause(request, obj_id) self.current_past_action = UNPAUSE else: - api.server_pause(request, obj_id) + api.nova.server_pause(request, obj_id) self.current_past_action = PAUSE @@ -154,10 +154,10 @@ class ToggleSuspend(tables.BatchAction): def action(self, request, obj_id): if self.suspended: - api.server_resume(request, obj_id) + api.nova.server_resume(request, obj_id) self.current_past_action = RESUME else: - api.server_suspend(request, obj_id) + api.nova.server_suspend(request, obj_id) self.current_past_action = SUSPEND @@ -169,7 +169,7 @@ class LaunchLink(tables.LinkAction): def allowed(self, request, datum): try: - limits = api.tenant_absolute_limits(request, reserved=True) + limits = api.nova.tenant_absolute_limits(request, reserved=True) instances_available = limits['maxTotalInstances'] \ - limits['totalInstancesUsed'] @@ -254,7 +254,7 @@ class ConfirmResize(tables.Action): return instance.status == 'VERIFY_RESIZE' def single(self, table, request, instance): - api.server_confirm_resize(request, instance) + api.nova.server_confirm_resize(request, instance) class RevertResize(tables.Action): @@ -266,7 +266,7 @@ class RevertResize(tables.Action): return instance.status == 'VERIFY_RESIZE' def single(self, table, request, instance): - api.server_revert_resize(request, instance) + api.nova.server_revert_resize(request, instance) class AssociateIP(tables.LinkAction): @@ -355,8 +355,9 @@ class UpdateRow(tables.Row): ajax = True def get_data(self, request, instance_id): - instance = api.server_get(request, instance_id) - instance.full_flavor = api.flavor_get(request, instance.flavor["id"]) + instance = api.nova.server_get(request, instance_id) + instance.full_flavor = api.nova.flavor_get(request, + instance.flavor["id"]) return instance diff --git a/openstack_dashboard/dashboards/project/instances/tabs.py b/openstack_dashboard/dashboards/project/instances/tabs.py index 87dbb2818..fd15ff854 100644 --- a/openstack_dashboard/dashboards/project/instances/tabs.py +++ b/openstack_dashboard/dashboards/project/instances/tabs.py @@ -41,9 +41,9 @@ class LogTab(tabs.Tab): def get_context_data(self, request): instance = self.tab_group.kwargs['instance'] try: - data = api.server_console_output(request, - instance.id, - tail_length=35) + data = api.nova.server_console_output(request, + instance.id, + tail_length=35) except: data = _('Unable to get log for instance "%s".') % instance.id exceptions.handle(request, ignore=True) diff --git a/openstack_dashboard/dashboards/project/instances/tests.py b/openstack_dashboard/dashboards/project/instances/tests.py index 9db24e0d9..f5eea1005 100644 --- a/openstack_dashboard/dashboards/project/instances/tests.py +++ b/openstack_dashboard/dashboards/project/instances/tests.py @@ -40,12 +40,15 @@ INDEX_URL = reverse('horizon:project:instances:index') class InstanceTests(test.TestCase): - @test.create_stubs({api: ('flavor_list', 'server_list', - 'tenant_absolute_limits')}) + @test.create_stubs({api.nova: ('flavor_list', + 'server_list', + 'tenant_absolute_limits')}) def test_index(self): - api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) - api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) - api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \ + api.nova.flavor_list(IsA(http.HttpRequest)) \ + .AndReturn(self.flavors.list()) + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndReturn(self.servers.list()) + api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \ .MultipleTimes().AndReturn(self.limits['absolute']) self.mox.ReplayAll() @@ -59,10 +62,12 @@ class InstanceTests(test.TestCase): self.assertItemsEqual(instances, self.servers.list()) - @test.create_stubs({api: ('server_list', 'tenant_absolute_limits')}) + @test.create_stubs({api.nova: ('server_list', + 'tenant_absolute_limits')}) def test_index_server_list_exception(self): - api.server_list(IsA(http.HttpRequest)).AndRaise(self.exceptions.nova) - api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \ + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndRaise(self.exceptions.nova) + api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \ .MultipleTimes().AndReturn(self.limits['absolute']) self.mox.ReplayAll() @@ -73,19 +78,22 @@ class InstanceTests(test.TestCase): self.assertEqual(len(res.context['instances_table'].data), 0) self.assertMessageCount(res, error=1) - @test.create_stubs({api: ('flavor_list', 'server_list', 'flavor_get', - 'tenant_absolute_limits')}) + @test.create_stubs({api.nova: ('flavor_list', + 'server_list', + 'flavor_get', + 'tenant_absolute_limits')}) def test_index_flavor_list_exception(self): servers = self.servers.list() flavors = self.flavors.list() full_flavors = SortedDict([(f.id, f) for f in flavors]) - api.server_list(IsA(http.HttpRequest)).AndReturn(servers) - api.flavor_list(IsA(http.HttpRequest)).AndRaise(self.exceptions.nova) + api.nova.server_list(IsA(http.HttpRequest)).AndReturn(servers) + api.nova.flavor_list(IsA(http.HttpRequest)) \ + .AndRaise(self.exceptions.nova) for server in servers: - api.flavor_get(IsA(http.HttpRequest), server.flavor["id"]). \ + api.nova.flavor_get(IsA(http.HttpRequest), server.flavor["id"]). \ AndReturn(full_flavors[server.flavor["id"]]) - api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \ + api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \ .MultipleTimes().AndReturn(self.limits['absolute']) self.mox.ReplayAll() @@ -97,8 +105,10 @@ class InstanceTests(test.TestCase): self.assertItemsEqual(instances, self.servers.list()) - @test.create_stubs({api: ('flavor_list', 'server_list', 'flavor_get', - 'tenant_absolute_limits')}) + @test.create_stubs({api.nova: ('flavor_list', + 'server_list', + 'flavor_get', + 'tenant_absolute_limits')}) def test_index_flavor_get_exception(self): servers = self.servers.list() flavors = self.flavors.list() @@ -107,12 +117,12 @@ class InstanceTests(test.TestCase): for i, server in enumerate(servers): server.flavor['id'] = str(uuid.UUID(int=i)) - api.server_list(IsA(http.HttpRequest)).AndReturn(servers) - api.flavor_list(IsA(http.HttpRequest)).AndReturn(flavors) + api.nova.server_list(IsA(http.HttpRequest)).AndReturn(servers) + api.nova.flavor_list(IsA(http.HttpRequest)).AndReturn(flavors) for server in servers: - api.flavor_get(IsA(http.HttpRequest), server.flavor["id"]). \ + api.nova.flavor_get(IsA(http.HttpRequest), server.flavor["id"]). \ AndRaise(self.exceptions.nova) - api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \ + api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \ .MultipleTimes().AndReturn(self.limits['absolute']) self.mox.ReplayAll() @@ -125,15 +135,16 @@ class InstanceTests(test.TestCase): self.assertMessageCount(res, error=len(servers)) self.assertItemsEqual(instances, self.servers.list()) - @test.create_stubs({api: ('server_list', - 'flavor_list', - 'server_delete',)}) + @test.create_stubs({api.nova: ('server_list', + 'flavor_list', + 'server_delete',)}) def test_terminate_instance(self): server = self.servers.first() - api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) - api.flavor_list(IgnoreArg()).AndReturn(self.flavors.list()) - api.server_delete(IsA(http.HttpRequest), server.id) + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndReturn(self.servers.list()) + api.nova.flavor_list(IgnoreArg()).AndReturn(self.flavors.list()) + api.nova.server_delete(IsA(http.HttpRequest), server.id) self.mox.ReplayAll() @@ -142,15 +153,16 @@ class InstanceTests(test.TestCase): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('server_list', - 'flavor_list', - 'server_delete',)}) + @test.create_stubs({api.nova: ('server_list', + 'flavor_list', + 'server_delete',)}) def test_terminate_instance_exception(self): server = self.servers.first() - api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) - api.flavor_list(IgnoreArg()).AndReturn(self.flavors.list()) - api.server_delete(IsA(http.HttpRequest), server.id) \ + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndReturn(self.servers.list()) + api.nova.flavor_list(IgnoreArg()).AndReturn(self.flavors.list()) + api.nova.server_delete(IsA(http.HttpRequest), server.id) \ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() @@ -160,15 +172,17 @@ class InstanceTests(test.TestCase): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('server_pause', - 'server_list', - 'flavor_list',)}) + @test.create_stubs({api.nova: ('server_pause', + 'server_list', + 'flavor_list',)}) def test_pause_instance(self): server = self.servers.first() - api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) - api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) - api.server_pause(IsA(http.HttpRequest), server.id) + api.nova.flavor_list(IsA(http.HttpRequest)) \ + .AndReturn(self.flavors.list()) + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndReturn(self.servers.list()) + api.nova.server_pause(IsA(http.HttpRequest), server.id) self.mox.ReplayAll() @@ -177,15 +191,17 @@ class InstanceTests(test.TestCase): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('server_pause', - 'server_list', - 'flavor_list',)}) + @test.create_stubs({api.nova: ('server_pause', + 'server_list', + 'flavor_list',)}) def test_pause_instance_exception(self): server = self.servers.first() - api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) - api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) - api.server_pause(IsA(http.HttpRequest), server.id) \ + api.nova.flavor_list(IsA(http.HttpRequest)) \ + .AndReturn(self.flavors.list()) + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndReturn(self.servers.list()) + api.nova.server_pause(IsA(http.HttpRequest), server.id) \ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() @@ -195,16 +211,18 @@ class InstanceTests(test.TestCase): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('server_unpause', - 'server_list', - 'flavor_list',)}) + @test.create_stubs({api.nova: ('server_unpause', + 'server_list', + 'flavor_list',)}) def test_unpause_instance(self): server = self.servers.first() server.status = "PAUSED" - api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) - api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) - api.server_unpause(IsA(http.HttpRequest), server.id) + api.nova.flavor_list(IsA(http.HttpRequest)) \ + .AndReturn(self.flavors.list()) + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndReturn(self.servers.list()) + api.nova.server_unpause(IsA(http.HttpRequest), server.id) self.mox.ReplayAll() @@ -213,16 +231,18 @@ class InstanceTests(test.TestCase): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('server_unpause', - 'server_list', - 'flavor_list',)}) + @test.create_stubs({api.nova: ('server_unpause', + 'server_list', + 'flavor_list',)}) def test_unpause_instance_exception(self): server = self.servers.first() server.status = "PAUSED" - api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) - api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) - api.server_unpause(IsA(http.HttpRequest), server.id) \ + api.nova.flavor_list(IsA(http.HttpRequest)) \ + .AndReturn(self.flavors.list()) + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndReturn(self.servers.list()) + api.nova.server_unpause(IsA(http.HttpRequest), server.id) \ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() @@ -232,15 +252,17 @@ class InstanceTests(test.TestCase): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('server_reboot', - 'server_list', - 'flavor_list',)}) + @test.create_stubs({api.nova: ('server_reboot', + 'server_list', + 'flavor_list',)}) def test_reboot_instance(self): server = self.servers.first() - api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) - api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) - api.server_reboot(IsA(http.HttpRequest), server.id) + api.nova.flavor_list(IsA(http.HttpRequest)) \ + .AndReturn(self.flavors.list()) + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndReturn(self.servers.list()) + api.nova.server_reboot(IsA(http.HttpRequest), server.id) self.mox.ReplayAll() @@ -249,16 +271,18 @@ class InstanceTests(test.TestCase): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('server_reboot', - 'server_list', - 'flavor_list',)}) + @test.create_stubs({api.nova: ('server_reboot', + 'server_list', + 'flavor_list',)}) def test_reboot_instance_exception(self): server = self.servers.first() - api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) - api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) - api.server_reboot(IsA(http.HttpRequest), server.id) \ - .AndRaise(self.exceptions.nova) + api.nova.flavor_list(IsA(http.HttpRequest)) \ + .AndReturn(self.flavors.list()) + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndReturn(self.servers.list()) + api.nova.server_reboot(IsA(http.HttpRequest), server.id) \ + .AndRaise(self.exceptions.nova) self.mox.ReplayAll() @@ -267,15 +291,17 @@ class InstanceTests(test.TestCase): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('server_suspend', - 'server_list', - 'flavor_list',)}) + @test.create_stubs({api.nova: ('server_suspend', + 'server_list', + 'flavor_list',)}) def test_suspend_instance(self): server = self.servers.first() - api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) - api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) - api.server_suspend(IsA(http.HttpRequest), unicode(server.id)) + api.nova.flavor_list(IsA(http.HttpRequest)) \ + .AndReturn(self.flavors.list()) + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndReturn(self.servers.list()) + api.nova.server_suspend(IsA(http.HttpRequest), unicode(server.id)) self.mox.ReplayAll() @@ -284,16 +310,18 @@ class InstanceTests(test.TestCase): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('server_suspend', - 'server_list', - 'flavor_list',)}) + @test.create_stubs({api.nova: ('server_suspend', + 'server_list', + 'flavor_list',)}) def test_suspend_instance_exception(self): server = self.servers.first() - api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) - api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) - api.server_suspend(IsA(http.HttpRequest), - unicode(server.id)).AndRaise(self.exceptions.nova) + api.nova.flavor_list(IsA(http.HttpRequest)) \ + .AndReturn(self.flavors.list()) + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndReturn(self.servers.list()) + api.nova.server_suspend(IsA(http.HttpRequest), unicode(server.id)) \ + .AndRaise(self.exceptions.nova) self.mox.ReplayAll() @@ -302,16 +330,18 @@ class InstanceTests(test.TestCase): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('server_resume', - 'server_list', - 'flavor_list',)}) + @test.create_stubs({api.nova: ('server_resume', + 'server_list', + 'flavor_list',)}) def test_resume_instance(self): server = self.servers.first() server.status = "SUSPENDED" - api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) - api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) - api.server_resume(IsA(http.HttpRequest), unicode(server.id)) + api.nova.flavor_list(IsA(http.HttpRequest)) \ + .AndReturn(self.flavors.list()) + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndReturn(self.servers.list()) + api.nova.server_resume(IsA(http.HttpRequest), unicode(server.id)) self.mox.ReplayAll() @@ -320,17 +350,20 @@ class InstanceTests(test.TestCase): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('server_resume', - 'server_list', - 'flavor_list',)}) + @test.create_stubs({api.nova: ('server_resume', + 'server_list', + 'flavor_list',)}) def test_resume_instance_exception(self): server = self.servers.first() server.status = "SUSPENDED" - api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) - api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) - api.server_resume(IsA(http.HttpRequest), - unicode(server.id)).AndRaise(self.exceptions.nova) + api.nova.flavor_list(IsA(http.HttpRequest)) \ + .AndReturn(self.flavors.list()) + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndReturn(self.servers.list()) + api.nova.server_resume(IsA(http.HttpRequest), + unicode(server.id)) \ + .AndRaise(self.exceptions.nova) self.mox.ReplayAll() @@ -339,21 +372,21 @@ class InstanceTests(test.TestCase): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ("server_get", - "instance_volumes_list", - "flavor_get", - "server_security_groups")}) + @test.create_stubs({api.nova: ("server_get", + "instance_volumes_list", + "flavor_get", + "server_security_groups")}) def test_instance_details_volumes(self): server = self.servers.first() volumes = [self.volumes.list()[1]] - api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) - api.instance_volumes_list(IsA(http.HttpRequest), - server.id).AndReturn(volumes) - api.flavor_get(IsA(http.HttpRequest), - server.flavor['id']).AndReturn(self.flavors.first()) - api.server_security_groups(IsA(http.HttpRequest), - server.id).AndReturn(self.security_groups.first()) + api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) + api.nova.instance_volumes_list(IsA(http.HttpRequest), + server.id).AndReturn(volumes) + api.nova.flavor_get(IsA(http.HttpRequest), server.flavor['id']) \ + .AndReturn(self.flavors.first()) + api.nova.server_security_groups(IsA(http.HttpRequest), server.id) \ + .AndReturn(self.security_groups.first()) self.mox.ReplayAll() @@ -363,21 +396,21 @@ class InstanceTests(test.TestCase): self.assertItemsEqual(res.context['instance'].volumes, volumes) - @test.create_stubs({api: ("server_get", - "instance_volumes_list", - "flavor_get", - "server_security_groups")}) + @test.create_stubs({api.nova: ("server_get", + "instance_volumes_list", + "flavor_get", + "server_security_groups")}) def test_instance_details_volume_sorting(self): server = self.servers.first() volumes = self.volumes.list()[1:3] - api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) - api.instance_volumes_list(IsA(http.HttpRequest), - server.id).AndReturn(volumes) - api.flavor_get(IsA(http.HttpRequest), - server.flavor['id']).AndReturn(self.flavors.first()) - api.server_security_groups(IsA(http.HttpRequest), - server.id).AndReturn(self.security_groups.first()) + api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) + api.nova.instance_volumes_list(IsA(http.HttpRequest), + server.id).AndReturn(volumes) + api.nova.flavor_get(IsA(http.HttpRequest), server.flavor['id']) \ + .AndReturn(self.flavors.first()) + api.nova.server_security_groups(IsA(http.HttpRequest), server.id) \ + .AndReturn(self.security_groups.first()) self.mox.ReplayAll() @@ -391,20 +424,20 @@ class InstanceTests(test.TestCase): self.assertEquals(res.context['instance'].volumes[1].device, "/dev/hdk") - @test.create_stubs({api: ("server_get", - "instance_volumes_list", - "flavor_get", - "server_security_groups",)}) + @test.create_stubs({api.nova: ("server_get", + "instance_volumes_list", + "flavor_get", + "server_security_groups",)}) def test_instance_details_metadata(self): server = self.servers.first() - api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) - api.instance_volumes_list(IsA(http.HttpRequest), - server.id).AndReturn([]) - api.flavor_get(IsA(http.HttpRequest), - server.flavor['id']).AndReturn(self.flavors.first()) - api.server_security_groups(IsA(http.HttpRequest), - server.id).AndReturn(self.security_groups.list()) + api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) + api.nova.instance_volumes_list(IsA(http.HttpRequest), + server.id).AndReturn([]) + api.nova.flavor_get(IsA(http.HttpRequest), server.flavor['id']) \ + .AndReturn(self.flavors.first()) + api.nova.server_security_groups(IsA(http.HttpRequest), server.id) \ + .AndReturn(self.security_groups.list()) self.mox.ReplayAll() @@ -423,13 +456,13 @@ class InstanceTests(test.TestCase): self.assertContains(res, "
empty
", 1) self.assertContains(res, "
N/A
", 1) - @test.create_stubs({api: ('server_console_output',)}) + @test.create_stubs({api.nova: ('server_console_output',)}) def test_instance_log(self): server = self.servers.first() CONSOLE_OUTPUT = 'output' - api.server_console_output(IsA(http.HttpRequest), - server.id, tail_length=None) \ + api.nova.server_console_output(IsA(http.HttpRequest), + server.id, tail_length=None) \ .AndReturn(CONSOLE_OUTPUT) self.mox.ReplayAll() @@ -444,12 +477,12 @@ class InstanceTests(test.TestCase): self.assertIsInstance(res, http.HttpResponse) self.assertContains(res, CONSOLE_OUTPUT) - @test.create_stubs({api: ('server_console_output',)}) + @test.create_stubs({api.nova: ('server_console_output',)}) def test_instance_log_exception(self): server = self.servers.first() - api.server_console_output(IsA(http.HttpRequest), - server.id, tail_length=None) \ + api.nova.server_console_output(IsA(http.HttpRequest), + server.id, tail_length=None) \ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() @@ -466,13 +499,15 @@ class InstanceTests(test.TestCase): server = self.servers.first() CONSOLE_OUTPUT = '/vncserver' - console_mock = self.mox.CreateMock(api.VNCConsole) + console_mock = self.mox.CreateMock(api.nova.VNCConsole) console_mock.url = CONSOLE_OUTPUT - self.mox.StubOutWithMock(api, 'server_vnc_console') - self.mox.StubOutWithMock(api, 'server_get') - api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) - api.server_vnc_console(IgnoreArg(), server.id).AndReturn(console_mock) + self.mox.StubOutWithMock(api.nova, 'server_vnc_console') + self.mox.StubOutWithMock(api.nova, 'server_get') + api.nova.server_get(IsA(http.HttpRequest), server.id) \ + .AndReturn(server) + api.nova.server_vnc_console(IgnoreArg(), server.id) \ + .AndReturn(console_mock) self.mox.ReplayAll() url = reverse('horizon:project:instances:vnc', @@ -481,11 +516,11 @@ class InstanceTests(test.TestCase): redirect = CONSOLE_OUTPUT + '&title=%s(1)' % server.name self.assertRedirectsNoFollow(res, redirect) - @test.create_stubs({api: ('server_vnc_console',)}) + @test.create_stubs({api.nova: ('server_vnc_console',)}) def test_instance_vnc_exception(self): server = self.servers.first() - api.server_vnc_console(IsA(http.HttpRequest), server.id) \ + api.nova.server_vnc_console(IsA(http.HttpRequest), server.id) \ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() @@ -496,27 +531,27 @@ class InstanceTests(test.TestCase): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('server_get', - 'snapshot_create', - 'snapshot_list_detailed', - 'image_list_detailed', - 'volume_snapshot_list', - 'server_list', - 'flavor_list', - 'server_delete',)}) + @test.create_stubs({api.nova: ('server_get', + 'snapshot_create', + 'server_list', + 'flavor_list', + 'server_delete'), + cinder: ('volume_snapshot_list',), + api.glance: ('snapshot_list_detailed', + 'image_list_detailed')}) def test_create_instance_snapshot(self): server = self.servers.first() - api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) - api.snapshot_create(IsA(http.HttpRequest), - server.id, - "snapshot1").AndReturn(self.snapshots.first()) + api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) + api.nova.snapshot_create(IsA(http.HttpRequest), + server.id, + "snapshot1").AndReturn(self.snapshots.first()) - api.snapshot_list_detailed(IsA(http.HttpRequest), - marker=None).AndReturn([[], False]) - api.image_list_detailed(IsA(http.HttpRequest), - marker=None).AndReturn([[], False]) - api.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn([]) + api.glance.snapshot_list_detailed(IsA(http.HttpRequest), + marker=None).AndReturn([[], False]) + api.glance.image_list_detailed(IsA(http.HttpRequest), + marker=None).AndReturn([[], False]) + cinder.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn([]) self.mox.ReplayAll() @@ -529,11 +564,11 @@ class InstanceTests(test.TestCase): res = self.client.post(url, formData) self.assertRedirects(res, redir_url) - @test.create_stubs({api: ('server_get',)}) + @test.create_stubs({api.nova: ('server_get',)}) def test_instance_update_get(self): server = self.servers.first() - api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) + api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) self.mox.ReplayAll() @@ -542,11 +577,11 @@ class InstanceTests(test.TestCase): self.assertTemplateUsed(res, 'project/instances/update.html') - @test.create_stubs({api: ('server_get',)}) + @test.create_stubs({api.nova: ('server_get',)}) def test_instance_update_get_server_get_exception(self): server = self.servers.first() - api.server_get(IsA(http.HttpRequest), server.id) \ + api.nova.server_get(IsA(http.HttpRequest), server.id) \ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() @@ -557,14 +592,14 @@ class InstanceTests(test.TestCase): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('server_get', 'server_update')}) + @test.create_stubs({api.nova: ('server_get', 'server_update')}) def test_instance_update_post(self): server = self.servers.first() - api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) - api.server_update(IsA(http.HttpRequest), - server.id, - server.name).AndReturn(server) + api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) + api.nova.server_update(IsA(http.HttpRequest), + server.id, + server.name).AndReturn(server) self.mox.ReplayAll() @@ -578,12 +613,12 @@ class InstanceTests(test.TestCase): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api: ('server_get', 'server_update')}) + @test.create_stubs({api.nova: ('server_get', 'server_update')}) def test_instance_update_post_api_exception(self): server = self.servers.first() - api.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) - api.server_update(IsA(http.HttpRequest), server.id, server.name) \ + api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) + api.nova.server_update(IsA(http.HttpRequest), server.id, server.name) \ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() @@ -617,7 +652,7 @@ class InstanceTests(test.TestCase): api.glance.image_list_detailed(IsA(http.HttpRequest), filters={'is_public': True, 'status': 'active'}) \ - .AndReturn([self.images.list(), False]) + .AndReturn([self.images.list(), False]) api.glance.image_list_detailed(IsA(http.HttpRequest), filters={'property-owner_id': self.tenant.id, 'status': 'active'}) \ @@ -995,16 +1030,18 @@ class InstanceTests(test.TestCase): self.assertContains(res, "greater than or equal to 1") - @test.create_stubs({api: ('flavor_list', 'server_list', - 'tenant_absolute_limits',)}) + @test.create_stubs({api.nova: ('flavor_list', 'server_list', + 'tenant_absolute_limits',)}) def test_launch_button_disabled_when_quota_exceeded(self): limits = self.limits['absolute'] limits['totalInstancesUsed'] = limits['maxTotalInstances'] - api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) - api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) - api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \ - .MultipleTimes().AndReturn(limits) + api.nova.flavor_list(IsA(http.HttpRequest)) \ + .AndReturn(self.flavors.list()) + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndReturn(self.servers.list()) + api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \ + .MultipleTimes().AndReturn(limits) self.mox.ReplayAll() @@ -1021,15 +1058,17 @@ class InstanceTests(test.TestCase): html=True, msg_prefix="The launch button is not disabled") - @test.create_stubs({api: ('flavor_list', 'server_list', - 'tenant_absolute_limits')}) + @test.create_stubs({api.nova: ('flavor_list', 'server_list', + 'tenant_absolute_limits')}) def test_index_options_after_migrate(self): server = self.servers.first() server.status = "VERIFY_RESIZE" - api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) - api.server_list(IsA(http.HttpRequest)).AndReturn(self.servers.list()) - api.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \ + api.nova.flavor_list(IsA(http.HttpRequest)) \ + .AndReturn(self.flavors.list()) + api.nova.server_list(IsA(http.HttpRequest)) \ + .AndReturn(self.servers.list()) + api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \ .MultipleTimes().AndReturn(self.limits['absolute']) self.mox.ReplayAll() diff --git a/openstack_dashboard/dashboards/project/instances/views.py b/openstack_dashboard/dashboards/project/instances/views.py index c4df849cb..4a0799e20 100644 --- a/openstack_dashboard/dashboards/project/instances/views.py +++ b/openstack_dashboard/dashboards/project/instances/views.py @@ -52,7 +52,7 @@ class IndexView(tables.DataTableView): def get_data(self): # Gather our instances try: - instances = api.server_list(self.request) + instances = api.nova.server_list(self.request) except: instances = [] exceptions.handle(self.request, @@ -60,7 +60,7 @@ class IndexView(tables.DataTableView): # Gather our flavors and correlate our instances to them if instances: try: - flavors = api.flavor_list(self.request) + flavors = api.nova.flavor_list(self.request) except: flavors = [] exceptions.handle(self.request, ignore=True) @@ -76,8 +76,8 @@ class IndexView(tables.DataTableView): else: # If the flavor_id is not in full_flavors list, # get it via nova api. - instance.full_flavor = api.flavor_get(self.request, - flavor_id) + instance.full_flavor = api.nova.flavor_get( + self.request, flavor_id) except: msg = _('Unable to retrieve instance size information.') exceptions.handle(self.request, msg) @@ -99,9 +99,9 @@ def console(request, instance_id): try: # TODO(jakedahn): clean this up once the api supports tailing. tail = request.GET.get('length', None) - data = api.server_console_output(request, - instance_id, - tail_length=tail) + data = api.nova.server_console_output(request, + instance_id, + tail_length=tail) except: data = _('Unable to get log for instance "%s".') % instance_id exceptions.handle(request, ignore=True) @@ -113,8 +113,8 @@ def console(request, instance_id): def vnc(request, instance_id): try: - console = api.server_vnc_console(request, instance_id) - instance = api.server_get(request, instance_id) + console = api.nova.server_vnc_console(request, instance_id) + instance = api.nova.server_get(request, instance_id) return shortcuts.redirect(console.url + ("&title=%s(%s)" % (instance.name, instance_id))) except: @@ -138,7 +138,7 @@ class UpdateView(forms.ModalFormView): if not hasattr(self, "_object"): instance_id = self.kwargs['instance_id'] try: - self._object = api.server_get(self.request, instance_id) + self._object = api.nova.server_get(self.request, instance_id) except: redirect = reverse("horizon:project:instances:index") msg = _('Unable to retrieve instance details.') @@ -164,14 +164,14 @@ class DetailView(tabs.TabView): if not hasattr(self, "_instance"): try: instance_id = self.kwargs['instance_id'] - instance = api.server_get(self.request, instance_id) - instance.volumes = api.instance_volumes_list(self.request, - instance_id) + instance = api.nova.server_get(self.request, instance_id) + instance.volumes = api.nova.instance_volumes_list(self.request, + instance_id) # Sort by device name instance.volumes.sort(key=lambda vol: vol.device) - instance.full_flavor = api.flavor_get(self.request, - instance.flavor["id"]) - instance.security_groups = api.server_security_groups( + instance.full_flavor = api.nova.flavor_get( + self.request, instance.flavor["id"]) + instance.security_groups = api.nova.server_security_groups( self.request, instance_id) except: redirect = reverse('horizon:project:instances:index') diff --git a/openstack_dashboard/dashboards/project/instances/workflows.py b/openstack_dashboard/dashboards/project/instances/workflows.py index d3a327b01..f05985e69 100644 --- a/openstack_dashboard/dashboards/project/instances/workflows.py +++ b/openstack_dashboard/dashboards/project/instances/workflows.py @@ -30,6 +30,7 @@ from horizon import workflows from openstack_dashboard import api from openstack_dashboard.api import cinder +from openstack_dashboard.api import glance from openstack_dashboard.usage import quotas @@ -119,7 +120,7 @@ class VolumeOptionsAction(workflows.Action): volume_options = [("", _("Select Volume"))] try: volumes = [v for v in cinder.volume_list(self.request) - if v.status == api.VOLUME_STATE_AVAILABLE] + if v.status == api.cinder.VOLUME_STATE_AVAILABLE] volume_options.extend([self._get_volume_display_name(vol) for vol in volumes]) except: @@ -132,7 +133,7 @@ class VolumeOptionsAction(workflows.Action): try: snapshots = cinder.volume_snapshot_list(self.request) snapshots = [s for s in snapshots - if s.status == api.VOLUME_STATE_AVAILABLE] + if s.status == api.cinder.VOLUME_STATE_AVAILABLE] volume_options.extend([self._get_volume_display_name(snap) for snap in snapshots]) except: @@ -223,8 +224,8 @@ class SetInstanceDetailsAction(workflows.Action): public = {"is_public": True, "status": "active"} try: - public_images, _more = api.glance.image_list_detailed(request, - filters=public) + public_images, _more = glance.image_list_detailed( + request, filters=public) except: public_images = [] exceptions.handle(request, @@ -239,8 +240,8 @@ class SetInstanceDetailsAction(workflows.Action): owner = {"property-owner_id": project_id, "status": "active"} try: - owned_images, _more = api.glance.image_list_detailed(request, - filters=owner) + owned_images, _more = glance.image_list_detailed( + request, filters=owner) except: exceptions.handle(request, _("Unable to retrieve images for " diff --git a/openstack_dashboard/dashboards/project/overview/tests.py b/openstack_dashboard/dashboards/project/overview/tests.py index a16873f51..811f7286e 100644 --- a/openstack_dashboard/dashboards/project/overview/tests.py +++ b/openstack_dashboard/dashboards/project/overview/tests.py @@ -40,12 +40,12 @@ class UsageViewTests(test.TestCase): now = timezone.now() usage_obj = api.nova.NovaUsage(self.usages.first()) quota_data = self.quota_usages.first() - self.mox.StubOutWithMock(api, 'usage_get') + self.mox.StubOutWithMock(api.nova, 'usage_get') self.mox.StubOutWithMock(quotas, 'tenant_quota_usages') - api.usage_get(IsA(http.HttpRequest), self.tenant.id, - datetime.datetime(now.year, now.month, 1, 0, 0, 0), - Func(usage.almost_now)) \ - .AndReturn(usage_obj) + api.nova.usage_get(IsA(http.HttpRequest), self.tenant.id, + datetime.datetime(now.year, now.month, 1, 0, 0, 0), + Func(usage.almost_now)) \ + .AndReturn(usage_obj) quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data) self.mox.ReplayAll() @@ -57,11 +57,11 @@ class UsageViewTests(test.TestCase): def test_unauthorized(self): exc = self.exceptions.keystone_unauthorized now = timezone.now() - self.mox.StubOutWithMock(api, 'usage_get') - api.usage_get(IsA(http.HttpRequest), self.tenant.id, - datetime.datetime(now.year, now.month, 1, 0, 0, 0), - Func(usage.almost_now)) \ - .AndRaise(exc) + self.mox.StubOutWithMock(api.nova, 'usage_get') + api.nova.usage_get(IsA(http.HttpRequest), self.tenant.id, + datetime.datetime(now.year, now.month, 1, 0, 0, 0), + Func(usage.almost_now)) \ + .AndRaise(exc) self.mox.ReplayAll() url = reverse('horizon:project:overview:index') @@ -72,14 +72,14 @@ class UsageViewTests(test.TestCase): now = timezone.now() usage_obj = api.nova.NovaUsage(self.usages.first()) quota_data = self.quota_usages.first() - self.mox.StubOutWithMock(api, 'usage_get') + self.mox.StubOutWithMock(api.nova, 'usage_get') self.mox.StubOutWithMock(quotas, 'tenant_quota_usages') timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0) - api.usage_get(IsA(http.HttpRequest), - self.tenant.id, - timestamp, - Func(usage.almost_now)) \ - .AndReturn(usage_obj) + api.nova.usage_get(IsA(http.HttpRequest), + self.tenant.id, + timestamp, + Func(usage.almost_now)) \ + .AndReturn(usage_obj) quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data) self.mox.ReplayAll() @@ -91,14 +91,14 @@ class UsageViewTests(test.TestCase): def test_usage_exception_usage(self): now = timezone.now() quota_data = self.quota_usages.first() - self.mox.StubOutWithMock(api, 'usage_get') + self.mox.StubOutWithMock(api.nova, 'usage_get') self.mox.StubOutWithMock(quotas, 'tenant_quota_usages') timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0) - api.usage_get(IsA(http.HttpRequest), - self.tenant.id, - timestamp, - Func(usage.almost_now)) \ - .AndRaise(self.exceptions.nova) + api.nova.usage_get(IsA(http.HttpRequest), + self.tenant.id, + timestamp, + Func(usage.almost_now)) \ + .AndRaise(self.exceptions.nova) quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data) self.mox.ReplayAll() @@ -109,14 +109,14 @@ class UsageViewTests(test.TestCase): def test_usage_exception_quota(self): now = timezone.now() usage_obj = api.nova.NovaUsage(self.usages.first()) - self.mox.StubOutWithMock(api, 'usage_get') + self.mox.StubOutWithMock(api.nova, 'usage_get') self.mox.StubOutWithMock(quotas, 'tenant_quota_usages') timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0) - api.usage_get(IsA(http.HttpRequest), - self.tenant.id, - timestamp, - Func(usage.almost_now)) \ - .AndReturn(usage_obj) + api.nova.usage_get(IsA(http.HttpRequest), + self.tenant.id, + timestamp, + Func(usage.almost_now)) \ + .AndReturn(usage_obj) quotas.tenant_quota_usages(IsA(http.HttpRequest))\ .AndRaise(self.exceptions.nova) self.mox.ReplayAll() @@ -129,14 +129,14 @@ class UsageViewTests(test.TestCase): now = timezone.now() usage_obj = api.nova.NovaUsage(self.usages.first()) quota_data = self.quota_usages.first() - self.mox.StubOutWithMock(api, 'usage_get') + self.mox.StubOutWithMock(api.nova, 'usage_get') self.mox.StubOutWithMock(quotas, 'tenant_quota_usages') timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0) - api.usage_get(IsA(http.HttpRequest), - self.tenant.id, - timestamp, - Func(usage.almost_now)) \ - .AndReturn(usage_obj) + api.nova.usage_get(IsA(http.HttpRequest), + self.tenant.id, + timestamp, + Func(usage.almost_now)) \ + .AndReturn(usage_obj) quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data) self.mox.ReplayAll() diff --git a/openstack_dashboard/dashboards/project/routers/tables.py b/openstack_dashboard/dashboards/project/routers/tables.py index e643a74a2..843b7699a 100644 --- a/openstack_dashboard/dashboards/project/routers/tables.py +++ b/openstack_dashboard/dashboards/project/routers/tables.py @@ -38,7 +38,7 @@ class DeleteRouter(tables.DeleteAction): obj = self.table.get_object_by_id(obj_id) name = self.table.get_object_display(obj) try: - api.router_delete(request, obj_id) + api.quantum.router_delete(request, obj_id) except q_ext.QuantumClientException as e: msg = _('Unable to delete router "%s"') % e.message LOG.info(msg) @@ -65,7 +65,7 @@ class UpdateRow(tables.Row): ajax = True def get_data(self, request, router_id): - router = api.router_get(request, router_id) + router = api.quantum.router_get(request, router_id) return router diff --git a/openstack_dashboard/dashboards/project/routers/tabs.py b/openstack_dashboard/dashboards/project/routers/tabs.py index 0cc7eb274..1c4f522c1 100644 --- a/openstack_dashboard/dashboards/project/routers/tabs.py +++ b/openstack_dashboard/dashboards/project/routers/tabs.py @@ -31,7 +31,7 @@ class OverviewTab(tabs.Tab): def get_context_data(self, request): router_id = self.tab_group.kwargs['router_id'] try: - router = api.router_get(request, router_id) + router = api.quantum.router_get(request, router_id) except: redirect = reverse(redirect_url) exceptions.handle(self.request, diff --git a/openstack_dashboard/dashboards/project/volumes/forms.py b/openstack_dashboard/dashboards/project/volumes/forms.py index 309f81579..6d04d0c8c 100644 --- a/openstack_dashboard/dashboards/project/volumes/forms.py +++ b/openstack_dashboard/dashboards/project/volumes/forms.py @@ -188,10 +188,10 @@ class AttachForm(forms.SelfHandlingForm): # it, so let's slice that off... instance_name = instance_name.rsplit(" (")[0] try: - attach = api.instance_volume_attach(request, - data['volume_id'], - data['instance'], - data.get('device', '')) + attach = api.nova.instance_volume_attach(request, + data['volume_id'], + data['instance'], + data.get('device', '')) volume = cinder.volume_get(request, data['volume_id']) if not volume.display_name: volume_name = volume.id diff --git a/openstack_dashboard/dashboards/project/volumes/tables.py b/openstack_dashboard/dashboards/project/volumes/tables.py index 8627f007b..b14145b8d 100644 --- a/openstack_dashboard/dashboards/project/volumes/tables.py +++ b/openstack_dashboard/dashboards/project/volumes/tables.py @@ -196,9 +196,9 @@ class DetachVolume(tables.BatchAction): def action(self, request, obj_id): attachment = self.table.get_object_by_id(obj_id) - api.instance_volume_detach(request, - attachment.get('server_id', None), - obj_id) + api.nova.instance_volume_detach(request, + attachment.get('server_id', None), + obj_id) def get_success_url(self, request): return reverse('horizon:project:volumes:index') diff --git a/openstack_dashboard/dashboards/settings/ec2/forms.py b/openstack_dashboard/dashboards/settings/ec2/forms.py index 14ca1501b..76ea5c2b0 100644 --- a/openstack_dashboard/dashboards/settings/ec2/forms.py +++ b/openstack_dashboard/dashboards/settings/ec2/forms.py @@ -73,13 +73,14 @@ class DownloadX509Credentials(forms.SelfHandlingForm): keys = find_or_create_access_keys(request, data.get('tenant')) context = {'ec2_access_key': keys.access, 'ec2_secret_key': keys.secret, - 'ec2_endpoint': api.url_for(request, - 'ec2', - endpoint_type='publicURL')} + 'ec2_endpoint': api.base.url_for( + request, + 'ec2', + endpoint_type='publicURL')} try: - s3_endpoint = api.url_for(request, - 's3', - endpoint_type='publicURL') + s3_endpoint = api.base.url_for(request, + 's3', + endpoint_type='publicURL') except exceptions.ServiceCatalogException: s3_endpoint = None context['s3_endpoint'] = s3_endpoint diff --git a/openstack_dashboard/dashboards/settings/project/forms.py b/openstack_dashboard/dashboards/settings/project/forms.py index 80909ea89..cbf55648f 100644 --- a/openstack_dashboard/dashboards/settings/project/forms.py +++ b/openstack_dashboard/dashboards/settings/project/forms.py @@ -41,7 +41,7 @@ class DownloadOpenRCForm(forms.SelfHandlingForm): # Populate tenant choices tenant_choices = [] try: - tenants = api.tenant_list(request) + tenants = api.keystone.tenant_list(request) except: tenants = [] exceptions.handle(request, _("Unable to retrieve project list.")) @@ -55,9 +55,9 @@ class DownloadOpenRCForm(forms.SelfHandlingForm): tenant_id = data['tenant'] tenant_name = dict(self.fields['tenant'].choices)[tenant_id] - keystone_url = api.url_for(request, - 'identity', - endpoint_type='publicURL') + keystone_url = api.base.url_for(request, + 'identity', + endpoint_type='publicURL') context = {'user': request.user, 'auth_url': keystone_url, diff --git a/openstack_dashboard/test/api_tests/nova_tests.py b/openstack_dashboard/test/api_tests/nova_tests.py index 074d9e432..1e979c46e 100644 --- a/openstack_dashboard/test/api_tests/nova_tests.py +++ b/openstack_dashboard/test/api_tests/nova_tests.py @@ -41,7 +41,7 @@ class ServerWrapperTests(test.TestCase): image.id).AndReturn(image) self.mox.ReplayAll() - server = api.Server(self.servers.first(), self.request) + server = api.nova.Server(self.servers.first(), self.request) self.assertEqual(server.image_name, image.name) @@ -70,9 +70,9 @@ class ComputeApiTests(test.APITestCase): console_type).AndReturn(console) self.mox.ReplayAll() - ret_val = api.server_vnc_console(self.request, - server.id, - console_type) + ret_val = api.nova.server_vnc_console(self.request, + server.id, + console_type) self.assertIsInstance(ret_val, api.nova.VNCConsole) def test_server_list(self): @@ -85,7 +85,7 @@ class ComputeApiTests(test.APITestCase): ret_val = api.nova.server_list(self.request, all_tenants=True) for server in ret_val: - self.assertIsInstance(server, api.Server) + self.assertIsInstance(server, api.nova.Server) def test_usage_get(self): novaclient = self.stub_novaclient() @@ -95,7 +95,8 @@ class ComputeApiTests(test.APITestCase): 'end').AndReturn(self.usages.first()) self.mox.ReplayAll() - ret_val = api.usage_get(self.request, self.tenant.id, 'start', 'end') + ret_val = api.nova.usage_get(self.request, self.tenant.id, + 'start', 'end') self.assertIsInstance(ret_val, api.nova.NovaUsage) def test_usage_list(self): @@ -106,9 +107,9 @@ class ComputeApiTests(test.APITestCase): novaclient.usage.list('start', 'end', True).AndReturn(usages) self.mox.ReplayAll() - ret_val = api.usage_list(self.request, 'start', 'end') + ret_val = api.nova.usage_list(self.request, 'start', 'end') for usage in ret_val: - self.assertIsInstance(usage, api.NovaUsage) + self.assertIsInstance(usage, api.nova.NovaUsage) def test_server_get(self): server = self.servers.first() @@ -118,7 +119,7 @@ class ComputeApiTests(test.APITestCase): novaclient.servers.get(server.id).AndReturn(server) self.mox.ReplayAll() - ret_val = api.server_get(self.request, server.id) + ret_val = api.nova.server_get(self.request, server.id) self.assertIsInstance(ret_val, api.nova.Server) def test_server_remove_floating_ip(self): @@ -134,9 +135,9 @@ class ComputeApiTests(test.APITestCase): .AndReturn(server) self.mox.ReplayAll() - server = api.server_remove_floating_ip(self.request, - server.id, - floating_ip.id) + server = api.nova.server_remove_floating_ip(self.request, + server.id, + floating_ip.id) self.assertIsInstance(server, api.nova.Server) def test_server_add_floating_ip(self): @@ -152,9 +153,9 @@ class ComputeApiTests(test.APITestCase): .AndReturn(server) self.mox.ReplayAll() - server = api.server_add_floating_ip(self.request, - server.id, - floating_ip.id) + server = api.nova.server_add_floating_ip(self.request, + server.id, + floating_ip.id) self.assertIsInstance(server, api.nova.Server) def test_absolute_limits_handle_unlimited(self): @@ -172,7 +173,7 @@ class ComputeApiTests(test.APITestCase): novaclient.limits.get(reserved=True).AndReturn(limits) self.mox.ReplayAll() - ret_val = api.tenant_absolute_limits(self.request, reserved=True) + ret_val = api.nova.tenant_absolute_limits(self.request, reserved=True) expected_results = {"maxTotalCores": float("inf"), "maxTotalInstances": 10} for key in expected_results.keys(): diff --git a/openstack_dashboard/test/api_tests/swift_tests.py b/openstack_dashboard/test/api_tests/swift_tests.py index 071eced90..d0ef9382e 100644 --- a/openstack_dashboard/test/api_tests/swift_tests.py +++ b/openstack_dashboard/test/api_tests/swift_tests.py @@ -37,7 +37,7 @@ class SwiftApiTests(test.APITestCase): full_listing=True).AndReturn([{}, cont_data]) self.mox.ReplayAll() - (conts, more) = api.swift_get_containers(self.request) + (conts, more) = api.swift.swift_get_containers(self.request) self.assertEqual(len(conts), len(containers)) self.assertFalse(more) @@ -50,7 +50,7 @@ class SwiftApiTests(test.APITestCase): swift_api.put_container(container.name).AndReturn(container) self.mox.ReplayAll() # Verification handled by mox, no assertions needed. - api.swift_create_container(self.request, container.name) + api.swift.swift_create_container(self.request, container.name) def test_swift_create_container(self): container = self.containers.first() @@ -59,7 +59,7 @@ class SwiftApiTests(test.APITestCase): self.mox.ReplayAll() # Verification handled by mox, no assertions needed. with self.assertRaises(exceptions.AlreadyExists): - api.swift_create_container(self.request, container.name) + api.swift.swift_create_container(self.request, container.name) def test_swift_get_objects(self): container = self.containers.first() @@ -74,7 +74,8 @@ class SwiftApiTests(test.APITestCase): full_listing=True).AndReturn([{}, objects]) self.mox.ReplayAll() - (objs, more) = api.swift_get_objects(self.request, container.name) + (objs, more) = api.swift.swift_get_objects(self.request, + container.name) self.assertEqual(len(objs), len(objects)) self.assertFalse(more) @@ -98,10 +99,10 @@ class SwiftApiTests(test.APITestCase): headers=headers) self.mox.ReplayAll() - api.swift_upload_object(self.request, - container.name, - obj.name, - FakeFile()) + api.swift.swift_upload_object(self.request, + container.name, + obj.name, + FakeFile()) def test_swift_object_exists(self): container = self.containers.first() @@ -115,6 +116,6 @@ class SwiftApiTests(test.APITestCase): self.mox.ReplayAll() args = self.request, container.name, obj.name - self.assertTrue(api.swift_object_exists(*args)) + self.assertTrue(api.swift.swift_object_exists(*args)) # Again, for a "non-existent" object - self.assertFalse(api.swift_object_exists(*args)) + self.assertFalse(api.swift.swift_object_exists(*args)) diff --git a/openstack_dashboard/usage/base.py b/openstack_dashboard/usage/base.py index ac696ca13..e67eb441d 100644 --- a/openstack_dashboard/usage/base.py +++ b/openstack_dashboard/usage/base.py @@ -127,7 +127,7 @@ class GlobalUsage(BaseUsage): show_terminated = True def get_usage_list(self, start, end): - return api.usage_list(self.request, start, end) + return api.nova.usage_list(self.request, start, end) class TenantUsage(BaseUsage): @@ -139,7 +139,7 @@ class TenantUsage(BaseUsage): self.show_terminated) instances = [] terminated_instances = [] - usage = api.usage_get(self.request, self.tenant_id, start, end) + usage = api.nova.usage_get(self.request, self.tenant_id, start, end) # Attribute may not exist if there are no instances if hasattr(usage, 'server_usages'): now = self.today