Remove assignment proxy methods/controllers
Assignment proxy methods and controllers are removed as of Juno. Change-Id: I661a8b871884979dc9f046e6d98dd4eadca4ba11 bp: removed-as-of-juno
This commit is contained in:
parent
6ddd530637
commit
9ad8037310
@ -15,82 +15,20 @@
|
|||||||
"""Workflow Logic the Identity service."""
|
"""Workflow Logic the Identity service."""
|
||||||
|
|
||||||
import functools
|
import functools
|
||||||
import inspect
|
|
||||||
import six
|
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from keystone.assignment import controllers as assignment_controllers
|
|
||||||
from keystone.common import controller
|
from keystone.common import controller
|
||||||
from keystone.common import dependency
|
from keystone.common import dependency
|
||||||
from keystone import config
|
from keystone import config
|
||||||
from keystone import exception
|
from keystone import exception
|
||||||
from keystone.openstack.common.gettextutils import _
|
from keystone.openstack.common.gettextutils import _
|
||||||
from keystone.openstack.common import log
|
from keystone.openstack.common import log
|
||||||
from keystone.openstack.common import versionutils
|
|
||||||
|
|
||||||
|
|
||||||
CONF = config.CONF
|
CONF = config.CONF
|
||||||
LOG = log.getLogger(__name__)
|
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')
|
@dependency.requires('assignment_api', 'identity_api')
|
||||||
class User(controller.V2Controller):
|
class User(controller.V2Controller):
|
||||||
|
|
||||||
@ -421,34 +359,3 @@ class GroupV3(controller.V3Controller):
|
|||||||
def delete_group(self, context, group_id):
|
def delete_group(self, context, group_id):
|
||||||
domain_id = self._get_domain_id_for_request(context)
|
domain_id = self._get_domain_id_for_request(context)
|
||||||
self.identity_api.delete_group(group_id, domain_scope=domain_id)
|
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
|
|
||||||
|
@ -31,7 +31,6 @@ from keystone import notifications
|
|||||||
from keystone.openstack.common.gettextutils import _
|
from keystone.openstack.common.gettextutils import _
|
||||||
from keystone.openstack.common import importutils
|
from keystone.openstack.common import importutils
|
||||||
from keystone.openstack.common import log
|
from keystone.openstack.common import log
|
||||||
from keystone.openstack.common import versionutils
|
|
||||||
|
|
||||||
|
|
||||||
CONF = config.CONF
|
CONF = config.CONF
|
||||||
@ -43,15 +42,6 @@ DOMAIN_CONF_FHEAD = 'keystone.'
|
|||||||
DOMAIN_CONF_FTAIL = '.conf'
|
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):
|
def filter_user(user_ref):
|
||||||
"""Filter out private items in a user dict.
|
"""Filter out private items in a user dict.
|
||||||
|
|
||||||
@ -498,131 +488,6 @@ class Manager(manager.Manager):
|
|||||||
update_dict = {'password': new_password}
|
update_dict = {'password': new_password}
|
||||||
self.update_user(user_id, update_dict, domain_scope=domain_scope)
|
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)
|
@six.add_metaclass(abc.ABCMeta)
|
||||||
class Driver(object):
|
class Driver(object):
|
||||||
|
Loading…
Reference in New Issue
Block a user