diff --git a/keystone/identity/controllers.py b/keystone/identity/controllers.py index 48e32e30f..75cf452f6 100644 --- a/keystone/identity/controllers.py +++ b/keystone/identity/controllers.py @@ -15,82 +15,20 @@ """Workflow Logic the Identity service.""" import functools -import inspect -import six import uuid -from keystone.assignment import controllers as assignment_controllers from keystone.common import controller from keystone.common import dependency from keystone import config from keystone import exception from keystone.openstack.common.gettextutils import _ from keystone.openstack.common import log -from keystone.openstack.common import versionutils CONF = config.CONF LOG = log.getLogger(__name__) -class DeprecatedMeta(type): - """Metaclass that ensures that the correct methods on the deprecated - classes are reported as deprecated on call. - """ - @staticmethod - def moved_to_assignment(class_name): - # NOTE(morganfainberg): wrapper for versionutils.deprecated decorator - # with some values populated specifically for the migration for - # controllers from identity to assignment. - def inner(f): - subst = {'cls_name': class_name, 'meth_name': f.__name__} - what = 'identity.controllers.%(cls_name)s.%(meth_name)s' % subst - favor = 'assignment.controllers.%(cls_name)s.%(meth_name)s' % subst - - deprecated = versionutils.deprecated( - versionutils.deprecated.ICEHOUSE, - what=what, - in_favor_of=favor, - remove_in=+1) - return deprecated(f) - return inner - - @staticmethod - def _is_wrappable(item): - # NOTE(morganfainberg): Wrapping non-callables, non-methods, and - # builtins is not the point of the deprecation warnings. Simple test - # to ensure the item is one of the types that should be wrapped. - if (callable(item) and - inspect.ismethod(item) and - not inspect.isbuiltin(item)): - return True - return False - - def __new__(mcs, class_name, bases, namespace): - def get_attribute(self, item): - # NOTE(morganfainberg): This implementation of __getattribute__ - # is automatically added to any classes using the DeprecatedMeta - # metaclass. This will apply the moved_to_assignment wrapper to - # method calls (inherited or direct). - attr = super(bases[0], self).__getattribute__(item) - if DeprecatedMeta._is_wrappable(attr): - return DeprecatedMeta.moved_to_assignment(class_name)(attr) - return attr - - namespace['__getattribute__'] = get_attribute - return type.__new__(mcs, class_name, bases, namespace) - - def __getattribute__(cls, item): - # NOTE(morganfainberg): This implementation of __getattribute__ catches - # non-instantiated calls to @classmethods. - attr = type.__getattribute__(cls, item) - if DeprecatedMeta._is_wrappable(attr): - if (issubclass(cls, controller.V3Controller) and - DeprecatedMeta._is_wrappable(attr)): - attr = DeprecatedMeta.moved_to_assignment(cls.__name__)(attr) - return attr - - @dependency.requires('assignment_api', 'identity_api') class User(controller.V2Controller): @@ -421,34 +359,3 @@ class GroupV3(controller.V3Controller): def delete_group(self, context, group_id): domain_id = self._get_domain_id_for_request(context) self.identity_api.delete_group(group_id, domain_scope=domain_id) - - -# TODO(morganfainberg): Remove proxy compat classes once Icehouse is released. -@six.add_metaclass(DeprecatedMeta) -class Tenant(assignment_controllers.Tenant): - pass - - -@six.add_metaclass(DeprecatedMeta) -class Role(assignment_controllers.Role): - pass - - -@six.add_metaclass(DeprecatedMeta) -class DomainV3(assignment_controllers.DomainV3): - pass - - -@six.add_metaclass(DeprecatedMeta) -class ProjectV3(assignment_controllers.ProjectV3): - pass - - -@six.add_metaclass(DeprecatedMeta) -class RoleV3(assignment_controllers.RoleV3): - pass - - -@six.add_metaclass(DeprecatedMeta) -class RoleAssignmentV3(assignment_controllers.RoleAssignmentV3): - pass diff --git a/keystone/identity/core.py b/keystone/identity/core.py index 1ca67e48c..ea8a8df1e 100644 --- a/keystone/identity/core.py +++ b/keystone/identity/core.py @@ -31,7 +31,6 @@ from keystone import notifications from keystone.openstack.common.gettextutils import _ from keystone.openstack.common import importutils from keystone.openstack.common import log -from keystone.openstack.common import versionutils CONF = config.CONF @@ -43,15 +42,6 @@ DOMAIN_CONF_FHEAD = 'keystone.' DOMAIN_CONF_FTAIL = '.conf' -def moved_to_assignment(f): - name = f.__name__ - deprecated = versionutils.deprecated(versionutils.deprecated.ICEHOUSE, - what="identity_api." + name, - in_favor_of="assignment_api." + name, - remove_in=+1) - return deprecated(f) - - def filter_user(user_ref): """Filter out private items in a user dict. @@ -498,131 +488,6 @@ class Manager(manager.Manager): update_dict = {'password': new_password} self.update_user(user_id, update_dict, domain_scope=domain_scope) - # TODO(morganfainberg): Remove the following deprecated methods once - # Icehouse is released. Maintain identity -> assignment proxy for 1 - # release. - @moved_to_assignment - def get_domain_by_name(self, domain_name): - return self.assignment_api.get_domain_by_name(domain_name) - - @moved_to_assignment - def get_domain(self, domain_id): - return self.assignment_api.get_domain(domain_id) - - @moved_to_assignment - def update_domain(self, domain_id, domain): - return self.assignment_api.update_domain(domain_id, domain) - - @moved_to_assignment - def list_domains(self, hints=None): - return self.assignment_api.list_domains(hints=hints) - - @moved_to_assignment - def delete_domain(self, domain_id): - return self.assignment_api.delete_domain(domain_id) - - @moved_to_assignment - def create_domain(self, domain_id, domain): - return self.assignment_api.create_domain(domain_id, domain) - - @moved_to_assignment - def list_projects_for_user(self, user_id): - return self.assignment_api.list_projects_for_user(user_id) - - @moved_to_assignment - def add_user_to_project(self, tenant_id, user_id): - return self.assignment_api.add_user_to_project(tenant_id, user_id) - - @moved_to_assignment - def remove_user_from_project(self, tenant_id, user_id): - return self.assignment_api.remove_user_from_project(tenant_id, user_id) - - @moved_to_assignment - def get_project(self, tenant_id): - return self.assignment_api.get_project(tenant_id) - - @moved_to_assignment - def list_projects(self, hints=None): - return self.assignment_api.list_projects(hints=hints) - - @moved_to_assignment - def get_role(self, role_id): - return self.assignment_api.get_role(role_id) - - @moved_to_assignment - def list_roles(self, hints=None): - return self.assignment_api.list_roles(hints=hints) - - @moved_to_assignment - def get_project_users(self, tenant_id): - return self.assignment_api.get_project_users(tenant_id) - - @moved_to_assignment - def get_roles_for_user_and_project(self, user_id, tenant_id): - return self.assignment_api.get_roles_for_user_and_project( - user_id, tenant_id) - - @moved_to_assignment - def get_roles_for_user_and_domain(self, user_id, domain_id): - return (self.assignment_api.get_roles_for_user_and_domain - (user_id, domain_id)) - - @moved_to_assignment - def add_role_to_user_and_project(self, user_id, - tenant_id, role_id): - return (self.assignment_api.add_role_to_user_and_project - (user_id, tenant_id, role_id)) - - @moved_to_assignment - def create_role(self, role_id, role): - return self.assignment_api.create_role(role_id, role) - - @moved_to_assignment - def delete_role(self, role_id): - return self.assignment_api.delete_role(role_id) - - @moved_to_assignment - def remove_role_from_user_and_project(self, user_id, - tenant_id, role_id): - return (self.assignment_api.remove_role_from_user_and_project - (user_id, tenant_id, role_id)) - - @moved_to_assignment - def update_role(self, role_id, role): - return self.assignment_api.update_role(role_id, role) - - @moved_to_assignment - def create_grant(self, role_id, user_id=None, group_id=None, - domain_id=None, project_id=None, - inherited_to_projects=False): - return (self.assignment_api.create_grant - (role_id, user_id, group_id, domain_id, project_id, - inherited_to_projects)) - - @moved_to_assignment - def list_grants(self, user_id=None, group_id=None, - domain_id=None, project_id=None, - inherited_to_projects=False): - return (self.assignment_api.list_grants - (user_id, group_id, domain_id, project_id, - inherited_to_projects)) - - @moved_to_assignment - def get_grant(self, role_id, user_id=None, group_id=None, - domain_id=None, project_id=None, - inherited_to_projects=False): - return (self.assignment_api.get_grant - (role_id, user_id, group_id, domain_id, project_id, - inherited_to_projects)) - - @moved_to_assignment - def delete_grant(self, role_id, user_id=None, group_id=None, - domain_id=None, project_id=None, - inherited_to_projects=False): - return (self.assignment_api.delete_grant - (role_id, user_id, group_id, domain_id, project_id, - inherited_to_projects)) - @six.add_metaclass(abc.ABCMeta) class Driver(object):