yahoo-eng-team team mailing list archive
-
yahoo-eng-team team
-
Mailing list archive
-
Message #20637
[Bug 1217017] Re: dependency injection fails to init domain-specific identity drivers
** Changed in: keystone
Status: Invalid => New
--
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to Keystone.
https://bugs.launchpad.net/bugs/1217017
Title:
dependency injection fails to init domain-specific identity drivers
Status in OpenStack Identity (Keystone):
New
Bug description:
File “/keystone/common/dependency.py” has a method named “requires”
which is a decorator for the “Assignment” class of both files
“/keystone/assignment/backends/ldap.py” and
“/keystone/assignment/backends/sql.py”.
File “/keystone/assignment/backends/ldap.py”:
@dependency.requires('identity_api')
class Assignment(assignment.Driver):
File “/keystone/assignment/backends/sql.py”:
@dependency.requires('identity_api')
class Assignment(sql.Base, assignment.Driver):
When I specify the following contents for file
“/etc/keystone/domains/keystone.Default.conf” I am telling Keystone to
use an SQL backend for the default domain:
[assignment]
driver = keystone.assignment.backends.sql.Assignment
[identity]
driver = keystone.identity.backends.sql.Identity
[ldap]
However, there is a problem with the following line in method requires
of file “dependency.py”:
def wrapper(self, *args, **kwargs):
"""Inject each dependency from the registry."""
self.__wrapped_init__(*args, **kwargs)
for dependency in self._dependencies:
if dependency not in REGISTRY:
if dependency in _future_dependencies:
_future_dependencies[dependency] += [self]
else:
_future_dependencies[dependency] = [self]
continue
setattr(self, dependency, REGISTRY[dependency])
because it is passing arguments to the constructor of the Assignment
class in file “/keystone/assignment/backends/sql.py” which extends the
sql.Base class (i.e. class Base(object) of file
“/keystone/common/sql/core.py“) that extends class “object” which does
not accept any parameters for its constructor. It took me a full day
to pin this one down.
To get around this problem I added the following lines to class
Base(object) of file “/keystone/common/sql/core.py“ in order to accept
any number of parameters:
def __init__(self, *args, **kwargs):
super(Base, self).__init__()
To manage notifications about this bug go to:
https://bugs.launchpad.net/keystone/+bug/1217017/+subscriptions