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:
Morgan Fainberg 2014-03-26 14:02:10 -07:00
parent 6ddd530637
commit 9ad8037310
2 changed files with 0 additions and 228 deletions

View File

@ -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

View File

@ -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):