summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDolph Mathews <dolph.mathews@gmail.com>2012-01-23 11:02:01 -0600
committerZiad Sawalha <github@highbridgellc.com>2012-01-25 00:29:37 -0600
commitb1581a1852142548814d72deb0eebee238b4fdbf (patch)
tree38febb44f6a570fec1ada8b38773f3570a787aa7
parent56f7ad831765bc0d5446cf8f7cd8675a7527dc9e (diff)
Migrated 'enabled' int columns to bool for postgres (bug 885426)
Also included additional fixes for bp portable-identifiers which were discovered by running existing tests against postgres, per the bug referenced above. Change-Id: I6c51bb817ec12df33866ff632f906d17c90c8d54
-rwxr-xr-xkeystone/backends/api.py6
-rwxr-xr-xkeystone/backends/sqlalchemy/__init__.py9
-rw-r--r--keystone/backends/sqlalchemy/api/service.py20
-rwxr-xr-xkeystone/backends/sqlalchemy/api/tenant.py4
-rwxr-xr-xkeystone/backends/sqlalchemy/api/token.py3
-rwxr-xr-xkeystone/backends/sqlalchemy/api/user.py21
-rw-r--r--keystone/backends/sqlalchemy/migrate_repo/versions/001_initial_migration.py2
-rw-r--r--keystone/backends/sqlalchemy/migrate_repo/versions/002_rename_token_table.py2
-rw-r--r--keystone/backends/sqlalchemy/migrate_repo/versions/003_add_endpoint_template_versions.py2
-rw-r--r--keystone/backends/sqlalchemy/migrate_repo/versions/004_add_service_owner.py2
-rw-r--r--keystone/backends/sqlalchemy/migrate_repo/versions/005_add_tenants_uid.py2
-rw-r--r--keystone/backends/sqlalchemy/migrate_repo/versions/006_populate_tenants_uid.py2
-rw-r--r--keystone/backends/sqlalchemy/migrate_repo/versions/007_make_tenants_uid_unique.py2
-rw-r--r--keystone/backends/sqlalchemy/migrate_repo/versions/008_add_users_uid.py2
-rw-r--r--keystone/backends/sqlalchemy/migrate_repo/versions/009_populate_users_uid.py2
-rw-r--r--keystone/backends/sqlalchemy/migrate_repo/versions/010_make_users_uid_unique.py2
-rw-r--r--keystone/backends/sqlalchemy/migrate_repo/versions/011_is_enabled_boolean.py58
-rw-r--r--keystone/backends/sqlalchemy/migrate_repo/versions/011_postgresql_downgrade.sql5
-rw-r--r--keystone/backends/sqlalchemy/migrate_repo/versions/011_postgresql_upgrade.sql5
-rwxr-xr-xkeystone/logic/service.py2
-rw-r--r--keystone/manage2/__init__.py54
-rw-r--r--keystone/managers/credential.py2
-rw-r--r--keystone/test/functional/test_token.py16
-rw-r--r--keystone/test/unit/test_commands_v1.py8
-rw-r--r--pylintrc3
25 files changed, 196 insertions, 40 deletions
diff --git a/keystone/backends/api.py b/keystone/backends/api.py
index 6fef80df..c44805b3 100755
--- a/keystone/backends/api.py
+++ b/keystone/backends/api.py
@@ -387,12 +387,18 @@ class BaseCredentialsAPI(object):
def create(self, values):
raise NotImplementedError
+ def update(self, id, credential):
+ raise NotImplementedError
+
def delete(self, id):
raise NotImplementedError
def get(self, id):
raise NotImplementedError
+ def get_all(self):
+ raise NotImplementedError
+
def get_by_access(self, access):
raise NotImplementedError
diff --git a/keystone/backends/sqlalchemy/__init__.py b/keystone/backends/sqlalchemy/__init__.py
index 24b2a240..cea111c1 100755
--- a/keystone/backends/sqlalchemy/__init__.py
+++ b/keystone/backends/sqlalchemy/__init__.py
@@ -15,7 +15,8 @@
# License for the specific language governing permissions and limitations
# under the License.
-# package import
+# pylint: disable=W0602,W0603
+
from sqlalchemy.orm import joinedload, aliased, sessionmaker
import ast
@@ -27,6 +28,7 @@ from sqlalchemy import create_engine
from sqlalchemy.pool import StaticPool
try:
+ # pylint: disable=E0611
from migrate.versioning import exceptions as versioning_exceptions
except ImportError:
from migrate import exceptions as versioning_exceptions
@@ -37,7 +39,7 @@ from keystone.backends.sqlalchemy import migration
import keystone.backends.api as top_api
import keystone.backends.models as top_models
-logger = logging.getLogger(__name__)
+logger = logging.getLogger(__name__) # pylint: disable=C0103
_DRIVER = None
@@ -96,7 +98,8 @@ class Driver():
(self.connection_str))
logging.warning(msg)
- def _init_models(self, model_list):
+ @staticmethod
+ def _init_models(model_list):
for model in model_list:
model_class = getattr(models, model)
top_models.set_value(model, model_class)
diff --git a/keystone/backends/sqlalchemy/api/service.py b/keystone/backends/sqlalchemy/api/service.py
index 7f15cf32..0ffb4f28 100644
--- a/keystone/backends/sqlalchemy/api/service.py
+++ b/keystone/backends/sqlalchemy/api/service.py
@@ -29,7 +29,7 @@ class ServiceAPI(api.BaseServiceAPI):
@staticmethod
def transpose(values):
""" Handles transposing field names from Keystone model to
- sqlalchemy mode
+ sqlalchemy model
Differences:
desc <-> description
@@ -38,10 +38,22 @@ class ServiceAPI(api.BaseServiceAPI):
if 'description' in values:
values['desc'] = values.pop('description')
+ if hasattr(api.USER, 'uid_to_id'):
+ if 'owner_id' in values:
+ values['owner_id'] = api.USER.uid_to_id(values['owner_id'])
+ elif hasattr(values, 'owner_id'):
+ values.owner_id = api.USER.uid_to_id(values.owner_id)
+
@staticmethod
def from_model(ref):
""" Returns SQLAlchemy model object based on Keystone model"""
if ref:
+ if hasattr(api.USER, 'uid_to_id'):
+ if 'owner_id' in ref:
+ ref['owner_id'] = api.USER.uid_to_id(ref['owner_id'])
+ elif hasattr(ref, 'owner_id'):
+ ref.owner_id = api.USER.uid_to_id(ref.owner_id)
+
result = models.Service()
try:
result.id = int(ref.id)
@@ -57,6 +69,12 @@ class ServiceAPI(api.BaseServiceAPI):
def to_model(ref):
""" Returns Keystone model object based on SQLAlchemy model"""
if ref:
+ if hasattr(api.USER, 'id_to_uid'):
+ if 'owner_id' in ref:
+ ref['owner_id'] = api.USER.id_to_uid(ref['owner_id'])
+ elif hasattr(ref, 'owner_id'):
+ ref.owner_id = api.USER.id_to_uid(ref.owner_id)
+
return Service(id=str(ref.id), name=ref.name, description=ref.desc,
type=ref.type, owner_id=ref.owner_id)
diff --git a/keystone/backends/sqlalchemy/api/tenant.py b/keystone/backends/sqlalchemy/api/tenant.py
index 88d60adf..32432e5a 100755
--- a/keystone/backends/sqlalchemy/api/tenant.py
+++ b/keystone/backends/sqlalchemy/api/tenant.py
@@ -45,9 +45,9 @@ class TenantAPI(api.BaseTenantAPI):
del values['description']
if 'enabled' in values:
if values['enabled'] in [1, 'true', 'True', True]:
- values['enabled'] = 1
+ values['enabled'] = True
else:
- values['enabled'] = 0
+ values['enabled'] = False
@staticmethod
def to_model(ref):
diff --git a/keystone/backends/sqlalchemy/api/token.py b/keystone/backends/sqlalchemy/api/token.py
index d3bf874b..e2624a9c 100755
--- a/keystone/backends/sqlalchemy/api/token.py
+++ b/keystone/backends/sqlalchemy/api/token.py
@@ -124,6 +124,9 @@ class TokenAPI(api.BaseTokenAPI):
if hasattr(api.USER, 'uid_to_id'):
user_id = api.USER.uid_to_id(user_id)
+ if hasattr(api.TENANT, 'uid_to_id'):
+ tenant_id = api.TENANT.uid_to_id(tenant_id)
+
result = session.query(models.Token).\
filter_by(user_id=user_id, tenant_id=tenant_id).\
order_by("expires desc").\
diff --git a/keystone/backends/sqlalchemy/api/user.py b/keystone/backends/sqlalchemy/api/user.py
index 4e9486e0..156d79db 100755
--- a/keystone/backends/sqlalchemy/api/user.py
+++ b/keystone/backends/sqlalchemy/api/user.py
@@ -33,8 +33,7 @@ class UserAPI(api.BaseUserAPI):
def transpose(ref):
""" Transposes field names from domain to sql model"""
if 'id' in ref:
- ref['uid'] = ref['id']
- del ref['id']
+ ref['uid'] = ref.pop('id')
if hasattr(api.TENANT, 'uid_to_id'):
if 'tenant_id' in ref:
@@ -42,12 +41,6 @@ class UserAPI(api.BaseUserAPI):
elif hasattr(ref, 'tenant_id'):
ref.tenant_id = api.TENANT.uid_to_id(ref.tenant_id)
- if hasattr(ref, 'enabled'):
- if ref.enabled in [1, 'true', 'True', True]:
- ref.enabled = 1
- else:
- ref.enabled = 0
-
@staticmethod
def to_model(ref):
""" Returns Keystone model object based on SQLAlchemy model"""
@@ -90,6 +83,7 @@ class UserAPI(api.BaseUserAPI):
if not session:
session = get_session()
+ id = str(id) if id is not None else None
result = session.query(models.User).filter_by(uid=id).first()
return UserAPI.to_model(result)
@@ -104,17 +98,20 @@ class UserAPI(api.BaseUserAPI):
if not session:
session = get_session()
+ id = str(id) if id is not None else None
return session.query(models.User).filter_by(id=id).first()
@staticmethod
def id_to_uid(id, session=None):
session = session or get_session()
+ id = str(id) if id is not None else None
user = session.query(models.User).filter_by(id=id).first()
return user.uid if user else None
@staticmethod
def uid_to_id(uid, session=None):
session = session or get_session()
+ uid = str(uid) if uid is not None else None
user = session.query(models.User).filter_by(uid=uid).first()
return user.id if user else None
@@ -276,10 +273,10 @@ class UserAPI(api.BaseUserAPI):
user_rolegrant.update(values)
user_rolegrant.save()
- if hasattr(api.USER, 'uid_to_id'):
- user_rolegrant.user_id = api.USER.uid_to_id(user_rolegrant.user_id)
- if hasattr(api.TENANT, 'uid_to_id'):
- user_rolegrant.tenant_id = api.TENANT.uid_to_id(
+ if hasattr(api.USER, 'id_to_uid'):
+ user_rolegrant.user_id = api.USER.id_to_uid(user_rolegrant.user_id)
+ if hasattr(api.TENANT, 'id_to_uid'):
+ user_rolegrant.tenant_id = api.TENANT.id_to_uid(
user_rolegrant.tenant_id)
return user_rolegrant
diff --git a/keystone/backends/sqlalchemy/migrate_repo/versions/001_initial_migration.py b/keystone/backends/sqlalchemy/migrate_repo/versions/001_initial_migration.py
index 9058ed1b..45b69685 100644
--- a/keystone/backends/sqlalchemy/migrate_repo/versions/001_initial_migration.py
+++ b/keystone/backends/sqlalchemy/migrate_repo/versions/001_initial_migration.py
@@ -1,4 +1,4 @@
-# pylint: disable=C0103
+# pylint: disable=C0103,R0801
import sqlalchemy
diff --git a/keystone/backends/sqlalchemy/migrate_repo/versions/002_rename_token_table.py b/keystone/backends/sqlalchemy/migrate_repo/versions/002_rename_token_table.py
index ab136ab7..e350b2a4 100644
--- a/keystone/backends/sqlalchemy/migrate_repo/versions/002_rename_token_table.py
+++ b/keystone/backends/sqlalchemy/migrate_repo/versions/002_rename_token_table.py
@@ -5,7 +5,7 @@ Renames the 'token' table to 'tokens',
in order to appear more consistent with
other table names.
"""
-# pylint: disable=C0103
+# pylint: disable=C0103,R0801
import sqlalchemy
diff --git a/keystone/backends/sqlalchemy/migrate_repo/versions/003_add_endpoint_template_versions.py b/keystone/backends/sqlalchemy/migrate_repo/versions/003_add_endpoint_template_versions.py
index 95ac175d..be5bde24 100644
--- a/keystone/backends/sqlalchemy/migrate_repo/versions/003_add_endpoint_template_versions.py
+++ b/keystone/backends/sqlalchemy/migrate_repo/versions/003_add_endpoint_template_versions.py
@@ -1,7 +1,7 @@
"""
Adds support for versioning endpoint templates
"""
-# pylint: disable=C0103
+# pylint: disable=C0103,R0801
import sqlalchemy
diff --git a/keystone/backends/sqlalchemy/migrate_repo/versions/004_add_service_owner.py b/keystone/backends/sqlalchemy/migrate_repo/versions/004_add_service_owner.py
index ac212136..4bf02c8e 100644
--- a/keystone/backends/sqlalchemy/migrate_repo/versions/004_add_service_owner.py
+++ b/keystone/backends/sqlalchemy/migrate_repo/versions/004_add_service_owner.py
@@ -1,7 +1,7 @@
"""
Adds support for owner id in services
"""
-# pylint: disable=C0103
+# pylint: disable=C0103,R0801
import sqlalchemy
diff --git a/keystone/backends/sqlalchemy/migrate_repo/versions/005_add_tenants_uid.py b/keystone/backends/sqlalchemy/migrate_repo/versions/005_add_tenants_uid.py
index 8b2325c4..ab8e7305 100644
--- a/keystone/backends/sqlalchemy/migrate_repo/versions/005_add_tenants_uid.py
+++ b/keystone/backends/sqlalchemy/migrate_repo/versions/005_add_tenants_uid.py
@@ -1,4 +1,4 @@
-# pylint: disable=C0103
+# pylint: disable=C0103,R0801
import sqlalchemy
diff --git a/keystone/backends/sqlalchemy/migrate_repo/versions/006_populate_tenants_uid.py b/keystone/backends/sqlalchemy/migrate_repo/versions/006_populate_tenants_uid.py
index eb5f25eb..8e5ea2d4 100644
--- a/keystone/backends/sqlalchemy/migrate_repo/versions/006_populate_tenants_uid.py
+++ b/keystone/backends/sqlalchemy/migrate_repo/versions/006_populate_tenants_uid.py
@@ -1,7 +1,7 @@
"""
Data migration to populate tenants.uid with existing tenants.id values.
"""
-# pylint: disable=C0103
+# pylint: disable=C0103,R0801
import sqlalchemy
diff --git a/keystone/backends/sqlalchemy/migrate_repo/versions/007_make_tenants_uid_unique.py b/keystone/backends/sqlalchemy/migrate_repo/versions/007_make_tenants_uid_unique.py
index c75bbcb4..555d3c7f 100644
--- a/keystone/backends/sqlalchemy/migrate_repo/versions/007_make_tenants_uid_unique.py
+++ b/keystone/backends/sqlalchemy/migrate_repo/versions/007_make_tenants_uid_unique.py
@@ -1,7 +1,7 @@
"""
Schema migration to enforce uniqueness on tenants.uid
"""
-# pylint: disable=C0103
+# pylint: disable=C0103,R0801
import sqlalchemy
diff --git a/keystone/backends/sqlalchemy/migrate_repo/versions/008_add_users_uid.py b/keystone/backends/sqlalchemy/migrate_repo/versions/008_add_users_uid.py
index 237bfa3e..c634cae9 100644
--- a/keystone/backends/sqlalchemy/migrate_repo/versions/008_add_users_uid.py
+++ b/keystone/backends/sqlalchemy/migrate_repo/versions/008_add_users_uid.py
@@ -1,4 +1,4 @@
-# pylint: disable=C0103
+# pylint: disable=C0103,R0801
import sqlalchemy
diff --git a/keystone/backends/sqlalchemy/migrate_repo/versions/009_populate_users_uid.py b/keystone/backends/sqlalchemy/migrate_repo/versions/009_populate_users_uid.py
index 3938d6c9..c769eaa5 100644
--- a/keystone/backends/sqlalchemy/migrate_repo/versions/009_populate_users_uid.py
+++ b/keystone/backends/sqlalchemy/migrate_repo/versions/009_populate_users_uid.py
@@ -1,7 +1,7 @@
"""
Data migration to populate users.uid with existing users.id values.
"""
-# pylint: disable=C0103
+# pylint: disable=C0103,R0801
import sqlalchemy
diff --git a/keystone/backends/sqlalchemy/migrate_repo/versions/010_make_users_uid_unique.py b/keystone/backends/sqlalchemy/migrate_repo/versions/010_make_users_uid_unique.py
index 12f84aca..164be7d4 100644
--- a/keystone/backends/sqlalchemy/migrate_repo/versions/010_make_users_uid_unique.py
+++ b/keystone/backends/sqlalchemy/migrate_repo/versions/010_make_users_uid_unique.py
@@ -1,7 +1,7 @@
"""
Schema migration to enforce uniqueness on users.uid
"""
-# pylint: disable=C0103
+# pylint: disable=C0103,R0801
import sqlalchemy
diff --git a/keystone/backends/sqlalchemy/migrate_repo/versions/011_is_enabled_boolean.py b/keystone/backends/sqlalchemy/migrate_repo/versions/011_is_enabled_boolean.py
new file mode 100644
index 00000000..47b4a0bf
--- /dev/null
+++ b/keystone/backends/sqlalchemy/migrate_repo/versions/011_is_enabled_boolean.py
@@ -0,0 +1,58 @@
+"""
+Change 'enabled' columns to boolean types
+"""
+# pylint: disable=C0103,R0801
+
+
+import sqlalchemy
+from migrate.changeset import constraint
+
+
+meta = sqlalchemy.MetaData()
+
+
+# define the previous state of users
+
+user = {}
+user['id'] = sqlalchemy.Column('id', sqlalchemy.Integer, primary_key=True,
+ autoincrement=True)
+user['uid'] = sqlalchemy.Column('uid', sqlalchemy.String(255), unique=False,
+ nullable=False)
+user['name'] = sqlalchemy.Column('name', sqlalchemy.String(255), unique=True)
+user['password'] = sqlalchemy.Column('password', sqlalchemy.String(255))
+user['email'] = sqlalchemy.Column('email', sqlalchemy.String(255))
+user['enabled'] = sqlalchemy.Column('enabled', sqlalchemy.Integer)
+user['tenant_id'] = sqlalchemy.Column('tenant_id', sqlalchemy.Integer)
+users = sqlalchemy.Table('users', meta, *user.values())
+constraint.UniqueConstraint(user['uid'])
+
+tenant = {}
+tenant['id'] = sqlalchemy.Column('id', sqlalchemy.Integer, primary_key=True,
+ autoincrement=True)
+tenant['uid'] = sqlalchemy.Column('uid', sqlalchemy.String(255), unique=False,
+ nullable=False)
+tenant['name'] = sqlalchemy.Column('name', sqlalchemy.String(255), unique=True)
+tenant['desc'] = sqlalchemy.Column('desc', sqlalchemy.String(255))
+tenant['enabled'] = sqlalchemy.Column('enabled', sqlalchemy.Integer)
+tenants = sqlalchemy.Table('tenants', meta, *tenant.values())
+constraint.UniqueConstraint(tenant['uid'])
+
+
+def upgrade(migrate_engine):
+ meta.bind = migrate_engine
+
+ user['enabled'].alter(type=sqlalchemy.Boolean)
+ assert users.c.enabled is user['enabled']
+
+ tenant['enabled'].alter(type=sqlalchemy.Boolean)
+ assert tenants.c.enabled is tenant['enabled']
+
+
+def downgrade(migrate_engine):
+ meta.bind = migrate_engine
+
+ user['enabled'].alter(type=sqlalchemy.Integer)
+ assert users.c.enabled is user['enabled']
+
+ tenant['enabled'].alter(type=sqlalchemy.Integer)
+ assert tenants.c.enabled is tenant['enabled']
diff --git a/keystone/backends/sqlalchemy/migrate_repo/versions/011_postgresql_downgrade.sql b/keystone/backends/sqlalchemy/migrate_repo/versions/011_postgresql_downgrade.sql
new file mode 100644
index 00000000..0d0bf99a
--- /dev/null
+++ b/keystone/backends/sqlalchemy/migrate_repo/versions/011_postgresql_downgrade.sql
@@ -0,0 +1,5 @@
+ALTER TABLE users ALTER COLUMN enabled DROP DEFAULT;
+ALTER TABLE users ALTER COLUMN enabled TYPE integer USING CASE enabled WHEN true THEN 1 ELSE 0 END;
+
+ALTER TABLE tenants ALTER COLUMN enabled DROP DEFAULT;
+ALTER TABLE tenants ALTER COLUMN enabled TYPE integer USING CASE enabled WHEN true THEN 1 ELSE 0 END;
diff --git a/keystone/backends/sqlalchemy/migrate_repo/versions/011_postgresql_upgrade.sql b/keystone/backends/sqlalchemy/migrate_repo/versions/011_postgresql_upgrade.sql
new file mode 100644
index 00000000..f0eafb7e
--- /dev/null
+++ b/keystone/backends/sqlalchemy/migrate_repo/versions/011_postgresql_upgrade.sql
@@ -0,0 +1,5 @@
+ALTER TABLE users ALTER COLUMN enabled DROP DEFAULT;
+ALTER TABLE users ALTER COLUMN enabled TYPE boolean USING CASE enabled WHEN '1' THEN true ELSE '0' END;
+
+ALTER TABLE tenants ALTER COLUMN enabled DROP DEFAULT;
+ALTER TABLE tenants ALTER COLUMN enabled TYPE boolean USING CASE enabled WHEN '1' THEN true ELSE '0' END;
diff --git a/keystone/logic/service.py b/keystone/logic/service.py
index 7aea1f60..9387464d 100755
--- a/keystone/logic/service.py
+++ b/keystone/logic/service.py
@@ -950,7 +950,7 @@ class IdentityService(object):
utils.check_empty_string(role.name, "Expecting a Role name")
- if self.role_manager.get(role.name) is not None:
+ if self.role_manager.get_by_name(role.name) is not None:
raise fault.RoleConflictFault(
"A role with that name '%s' already exists" % role.name)
diff --git a/keystone/manage2/__init__.py b/keystone/manage2/__init__.py
index 8e86fb7a..4336730b 100644
--- a/keystone/manage2/__init__.py
+++ b/keystone/manage2/__init__.py
@@ -2,12 +2,16 @@
import argparse
+import optparse
import os
import pkgutil
+import sys
+from keystone.common import config as legacy_config
+from keystone import config
from keystone.manage2 import commands
-from keystone.manage2 import common
+CONF = config.CONF
# builds a complete path to the commands package
PACKAGE_PATH = os.path.dirname(commands.__file__)
@@ -29,6 +33,53 @@ def load_module(module_name):
return module
+# pylint: disable=W0612
+def init_config():
+ """Uses legacy config module to parse out legacy settings and provide
+ them to the new cfg.py parser.
+
+ This is a hack until we find a better way to have cfg.py ignore
+ unknown arguments
+ """
+
+ class SilentOptParser(optparse.OptionParser):
+ """ Class used to prevent OptionParser from exiting when it detects
+ invalid options coming in """
+ def exit(self, status=0, msg=None):
+ pass
+
+ def error(self, msg):
+ pass
+
+ # Initialize a parser for our configuration paramaters
+ parser = SilentOptParser()
+ legacy_config.add_common_options(parser)
+ legacy_config.add_log_options(parser)
+
+ # Parse command-line and load config
+ (options, args) = legacy_config.parse_options(parser)
+ (legacy_args, unknown_args) = parser.parse_args()
+
+ cfgfile = getattr(legacy_args, 'config_file', None)
+ if cfgfile:
+ known_args = ['--config-file', cfgfile]
+ else:
+ known_args = []
+
+ # Use the legacy code to find the config file
+ config_file = legacy_config.find_config_file(options, known_args)
+
+ # Now init the CONF for the backends using only known args
+ old_args = sys.argv[:]
+ sys.argv = known_args
+ try:
+ CONF(config_files=[config_file])
+ except StandardError:
+ raise
+ finally:
+ sys.argv = old_args
+
+
def main():
# discover command modules
module_names = [name for _, name, _ in MODULES]
@@ -50,6 +101,7 @@ def main():
args = parser.parse_args()
# configure and run command
+ init_config()
module = load_module(args.command)
cmd = module.Command()
exit(cmd.run(args))
diff --git a/keystone/managers/credential.py b/keystone/managers/credential.py
index bee9bc2b..0fc8388a 100644
--- a/keystone/managers/credential.py
+++ b/keystone/managers/credential.py
@@ -20,7 +20,7 @@ import logging
import keystone.backends.api as api
-logger = logging.getLogger(__name__)
+logger = logging.getLogger(__name__) # pylint: disable=C0103
class Manager(object):
diff --git a/keystone/test/functional/test_token.py b/keystone/test/functional/test_token.py
index 4956ba0b..54a41ce0 100644
--- a/keystone/test/functional/test_token.py
+++ b/keystone/test/functional/test_token.py
@@ -14,8 +14,13 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+# pylint: disable=W0613
import unittest2 as unittest
+
+from keystone.backends import api
+from keystone.logic.types import fault
+from keystone.logic import service
from keystone.test.functional import common
@@ -124,6 +129,7 @@ class CheckToken(common.FunctionalTestCase):
self.check_token(common.unique_str(), assert_status=404)
+# pylint: disable=E1101,E1120
class TokenEndpointTest(unittest.TestCase):
def _noop_validate_admin_token(self, admin_token):
pass
@@ -164,10 +170,10 @@ class TokenEndpointTest(unittest.TestCase):
def test_endpoints_from_good_token(self):
"""Happy Day scenario."""
- self.stubout.SmartSet(keystone.backends.api.TOKEN,
+ self.stubout.SmartSet(api.TOKEN,
'get', self._fake_token_get)
- self.stubout.SmartSet(keystone.backends.api.BaseTenantAPI,
+ self.stubout.SmartSet(api.BaseTenantAPI,
'get_all_endpoints',
self._fake_tenant_get_all_endpoints)
@@ -177,7 +183,7 @@ class TokenEndpointTest(unittest.TestCase):
self.assertEquals(len(auth_data.base_urls), 1)
def test_endpoints_from_bad_token(self):
- self.stubout.SmartSet(keystone.backends.api.TOKEN,
+ self.stubout.SmartSet(api.TOKEN,
'get', self._fake_missing_token_get)
self.assertRaises(fault.ItemNotFoundFault,
@@ -185,10 +191,10 @@ class TokenEndpointTest(unittest.TestCase):
"admin token", "token id")
def test_bad_endpoints(self):
- self.stubout.SmartSet(keystone.backends.api.TOKEN,
+ self.stubout.SmartSet(api.TOKEN,
'get', self._fake_token_get)
- self.stubout.SmartSet(keystone.backends.api.TENANT,
+ self.stubout.SmartSet(api.TENANT,
'get_all_endpoints',
self._fake_exploding_tenant_get_all_endpoints)
diff --git a/keystone/test/unit/test_commands_v1.py b/keystone/test/unit/test_commands_v1.py
index a71edeff..abd722f6 100644
--- a/keystone/test/unit/test_commands_v1.py
+++ b/keystone/test/unit/test_commands_v1.py
@@ -30,12 +30,14 @@ class TestCommandsV1(unittest.TestCase):
def setUp(self):
self.clear_all_data()
manage_api.add_tenant('Test tenant')
- manage_api.add_user('Test user', 'Test password', 'Test tenant')
+ self.user = manage_api.add_user('Test user', 'Test password',
+ 'Test tenant')
def tearDown(self):
self.clear_all_data()
- def clear_all_data(self):
+ @staticmethod
+ def clear_all_data():
"""
Purges the database of all data
"""
@@ -52,7 +54,7 @@ class TestCommandsV1(unittest.TestCase):
'name': 'Test name',
'type': 'Test type',
'desc': 'Test description',
- 'owner_id': 'Test owner',
+ 'owner_id': self.user.id,
}
manage_api.add_service(**data)
result = manage_api.list_services()
diff --git a/pylintrc b/pylintrc
index 64f5cafe..a18c307b 100644
--- a/pylintrc
+++ b/pylintrc
@@ -10,7 +10,8 @@ ignore=test
# W0511: TODOs in code comments are fine.
# W0142: *args and **kwargs are fine.
# W0622: Redefining id is fine.
-disable=C0111,W0511,W0142,W0622
+# R0801: Duplicate lines of code fine.
+disable=C0111,W0511,W0142,W0622,R0801
[Basic]
# Variable names can be 1 to 31 characters long, with lowercase and underscores