diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 307cf4e17f..1f05fd395d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,11 +22,11 @@ repos: # rev: v1.1.1 # hooks: # - id: doc8 - # - repo: https://github.com/asottile/pyupgrade - # rev: v3.15.2 - # hooks: - # - id: pyupgrade - # args: ['--py38-plus'] + - repo: https://github.com/asottile/pyupgrade + rev: v3.15.2 + hooks: + - id: pyupgrade + args: ['--py38-plus'] - repo: https://github.com/psf/black rev: 24.4.0 hooks: diff --git a/api-ref/source/conf.py b/api-ref/source/conf.py index 12fb4307c6..1bbea93868 100644 --- a/api-ref/source/conf.py +++ b/api-ref/source/conf.py @@ -61,7 +61,7 @@ source_suffix = '.rst' master_doc = 'index' # General information about the project. -copyright = u'2010-present, OpenStack Foundation' +copyright = '2010-present, OpenStack Foundation' # -- Options for openstackdocstheme ------------------------------------------- openstackdocs_repo_name = 'openstack/keystone' diff --git a/devstack/tools/oidc/setup_keycloak_client.py b/devstack/tools/oidc/setup_keycloak_client.py index cc296a624d..406ad1f914 100644 --- a/devstack/tools/oidc/setup_keycloak_client.py +++ b/devstack/tools/oidc/setup_keycloak_client.py @@ -7,7 +7,7 @@ KEYCLOAK_URL = os.environ.get('KEYCLOAK_URL') HOST_IP = os.environ.get('HOST_IP', 'localhost') -class KeycloakClient(object): +class KeycloakClient: def __init__(self): self.session = requests.session() diff --git a/keystone/api/auth.py b/keystone/api/auth.py index 3224848032..5f582f2e0c 100644 --- a/keystone/api/auth.py +++ b/keystone/api/auth.py @@ -95,7 +95,7 @@ def _get_sso_origin_host(): ] if host not in trusted_dashboards: - msg = '%(host)s is not a trusted dashboard host' % {'host': host} + msg = f'{host} is not a trusted dashboard host' tr_msg = _('%(host)s is not a trusted dashboard host') % {'host': host} LOG.error(msg) raise exception.Unauthorized(tr_msg) diff --git a/keystone/api/credentials.py b/keystone/api/credentials.py index 9c9f343b32..20f287c049 100644 --- a/keystone/api/credentials.py +++ b/keystone/api/credentials.py @@ -102,7 +102,7 @@ class CredentialResource(ks_flask.ResourceBase): ref['blob'] = jsonutils.dumps(blob) return ref else: - return super(CredentialResource, self)._assign_unique_id(ref) + return super()._assign_unique_id(ref) def _list_credentials(self): filters = ['user_id', 'type'] diff --git a/keystone/api/discovery.py b/keystone/api/discovery.py index 3829b54650..615f36bd0f 100644 --- a/keystone/api/discovery.py +++ b/keystone/api/discovery.py @@ -44,7 +44,7 @@ def _get_versions_list(identity_url): return versions -class MimeTypes(object): +class MimeTypes: JSON = 'application/json' JSON_HOME = 'application/json-home' @@ -107,7 +107,7 @@ def get_version_v3(): ) -class DiscoveryAPI(object): +class DiscoveryAPI: # NOTE(morgan): The Discovery Bits are so special they cannot conform to # Flask-RESTful-isms. We are using straight flask Blueprint(s) here so that # we have a lot more control over what the heck is going on. This is just diff --git a/keystone/api/os_federation.py b/keystone/api/os_federation.py index 01eecf911e..eb3ee8d79a 100644 --- a/keystone/api/os_federation.py +++ b/keystone/api/os_federation.py @@ -438,9 +438,9 @@ class SAML2MetadataResource(flask_restful.Resource): """ metadata_path = CONF.saml.idp_metadata_path try: - with open(metadata_path, 'r') as metadata_handler: + with open(metadata_path) as metadata_handler: metadata = metadata_handler.read() - except IOError as e: + except OSError as e: # Raise HTTP 500 in case Metadata file cannot be read. raise exception.MetadataFileError(reason=e) resp = flask.make_response(metadata, http.client.OK) diff --git a/keystone/api/os_oauth1.py b/keystone/api/os_oauth1.py index b31a6fa2b4..0afb669c2a 100644 --- a/keystone/api/os_oauth1.py +++ b/keystone/api/os_oauth1.py @@ -190,10 +190,10 @@ class RequestTokenResource(_OAuth1ResourceBase): initiator=notifications.build_audit_initiator(), ) - result = 'oauth_token=%(key)s&oauth_token_secret=%(secret)s' % { - 'key': token_ref['id'], - 'secret': token_ref['request_secret'], - } + result = 'oauth_token={key}&oauth_token_secret={secret}'.format( + key=token_ref['id'], + secret=token_ref['request_secret'], + ) if CONF.oauth1.request_token_duration > 0: expiry_bit = '&oauth_expires_at=%s' % token_ref['expires_at'] @@ -293,10 +293,10 @@ class AccessTokenResource(_OAuth1ResourceBase): initiator=notifications.build_audit_initiator(), ) - result = 'oauth_token=%(key)s&oauth_token_secret=%(secret)s' % { - 'key': token_ref['id'], - 'secret': token_ref['access_secret'], - } + result = 'oauth_token={key}&oauth_token_secret={secret}'.format( + key=token_ref['id'], + secret=token_ref['access_secret'], + ) if CONF.oauth1.access_token_duration > 0: expiry_bit = '&oauth_expires_at=%s' % (token_ref['expires_at']) diff --git a/keystone/api/role_assignments.py b/keystone/api/role_assignments.py index b90ca0f2e1..adfba1efa3 100644 --- a/keystone/api/role_assignments.py +++ b/keystone/api/role_assignments.py @@ -397,10 +397,10 @@ class RoleAssignmentsResource(ks_flask.ResourceBase): prior_role_link = '' if 'role_id' in entity.get('indirect', {}): formatted_link += '/roles/%s' % entity['indirect']['role_id'] - prior_role_link = '/prior_role/%(prior)s/implies/%(implied)s' % { - 'prior': entity['role_id'], - 'implied': entity['indirect']['role_id'], - } + prior_role_link = '/prior_role/{prior}/implies/{implied}'.format( + prior=entity['role_id'], + implied=entity['indirect']['role_id'], + ) else: formatted_link += '/roles/%s' % entity['role_id'] diff --git a/keystone/api/users.py b/keystone/api/users.py index 3a4c157e20..94745ad022 100644 --- a/keystone/api/users.py +++ b/keystone/api/users.py @@ -488,9 +488,9 @@ class _OAuth1ResourceBase(ks_flask.ResourceBase): # method. This was chosen as it more closely mirrors the pre-flask # code (for transition). ref.setdefault('links', {}) - path = '/users/%(user_id)s/OS-OAUTH1/access_tokens' % { - 'user_id': ref.get('authorizing_user_id', '') - } + path = '/users/{user_id}/OS-OAUTH1/access_tokens'.format( + user_id=ref.get('authorizing_user_id', '') + ) ref['links']['self'] = ks_flask.base_url(path) + '/' + ref['id'] diff --git a/keystone/application_credential/backends/base.py b/keystone/application_credential/backends/base.py index 0edcc8277d..68c3f731ed 100644 --- a/keystone/application_credential/backends/base.py +++ b/keystone/application_credential/backends/base.py @@ -17,7 +17,7 @@ import abc from keystone import exception -class ApplicationCredentialDriverBase(object, metaclass=abc.ABCMeta): +class ApplicationCredentialDriverBase(metaclass=abc.ABCMeta): @abc.abstractmethod def authenticate(self, application_credential_id, secret): diff --git a/keystone/application_credential/core.py b/keystone/application_credential/core.py index 2ae27302a6..7faad548ce 100644 --- a/keystone/application_credential/core.py +++ b/keystone/application_credential/core.py @@ -43,7 +43,7 @@ class Manager(manager.Manager): _ACCESS_RULE = 'access_rule' def __init__(self): - super(Manager, self).__init__(CONF.application_credential.driver) + super().__init__(CONF.application_credential.driver) self._register_callback_listeners() def _register_callback_listeners(self): @@ -83,7 +83,7 @@ class Manager(manager.Manager): assignment_list = self.assignment_api.list_role_assignments( user_id=user_id, project_id=project_id, effective=True ) - return list(set([x['role_id'] for x in assignment_list])) + return list({x['role_id'] for x in assignment_list}) def _require_user_has_role_in_project(self, roles, user_id, project_id): user_roles = self._get_user_roles(user_id, project_id) diff --git a/keystone/assignment/backends/base.py b/keystone/assignment/backends/base.py index 468be16982..195e856b50 100644 --- a/keystone/assignment/backends/base.py +++ b/keystone/assignment/backends/base.py @@ -21,7 +21,7 @@ from keystone import exception CONF = keystone.conf.CONF -class AssignmentDriverBase(object, metaclass=abc.ABCMeta): +class AssignmentDriverBase(metaclass=abc.ABCMeta): def _get_list_limit(self): return CONF.assignment.list_limit or CONF.list_limit diff --git a/keystone/assignment/backends/sql.py b/keystone/assignment/backends/sql.py index f58621e2f7..cf480fd294 100644 --- a/keystone/assignment/backends/sql.py +++ b/keystone/assignment/backends/sql.py @@ -18,7 +18,7 @@ from keystone import exception from keystone.i18n import _ -class AssignmentType(object): +class AssignmentType: USER_PROJECT = 'UserProject' GROUP_PROJECT = 'GroupProject' USER_DOMAIN = 'UserDomain' @@ -182,7 +182,7 @@ class Assignment(base.AssignmentDriverBase): ) ) except sql.DBDuplicateEntry: - msg = 'User %s already has role %s in tenant %s' % ( + msg = 'User {} already has role {} in tenant {}'.format( user_id, role_id, project_id, diff --git a/keystone/assignment/core.py b/keystone/assignment/core.py index 7c0b284774..738c7d7e69 100644 --- a/keystone/assignment/core.py +++ b/keystone/assignment/core.py @@ -68,7 +68,7 @@ class Manager(manager.Manager): def __init__(self): assignment_driver = CONF.assignment.driver - super(Manager, self).__init__(assignment_driver) + super().__init__(assignment_driver) self.event_callbacks = { notifications.ACTIONS.deleted: { @@ -96,7 +96,7 @@ class Manager(manager.Manager): project_id=project_id, effective=True ) # Use set() to process the list to remove any duplicates - return list(set([x['user_id'] for x in assignment_list])) + return list({x['user_id'] for x in assignment_list}) def _send_app_cred_notification_for_role_removal(self, role_id): """Delete all application credential for a specific role. @@ -133,7 +133,7 @@ class Manager(manager.Manager): user_id=user_id, project_id=project_id, effective=True ) # Use set() to process the list to remove any duplicates - return list(set([x['role_id'] for x in assignment_list])) + return list({x['role_id'] for x in assignment_list}) @MEMOIZE_COMPUTED_ASSIGNMENTS def get_roles_for_trustor_and_project(self, trustor_id, project_id): @@ -156,7 +156,7 @@ class Manager(manager.Manager): strip_domain_roles=False, ) # Use set() to process the list to remove any duplicates - return list(set([x['role_id'] for x in assignment_list])) + return list({x['role_id'] for x in assignment_list}) @MEMOIZE_COMPUTED_ASSIGNMENTS def get_roles_for_user_and_domain(self, user_id, domain_id): @@ -171,7 +171,7 @@ class Manager(manager.Manager): user_id=user_id, domain_id=domain_id, effective=True ) # Use set() to process the list to remove any duplicates - return list(set([x['role_id'] for x in assignment_list])) + return list({x['role_id'] for x in assignment_list}) def get_roles_for_groups(self, group_ids, project_id=None, domain_id=None): """Get a list of roles for this group on domain and/or project.""" @@ -196,7 +196,7 @@ class Manager(manager.Manager): else: raise AttributeError(_("Must specify either domain or project")) - role_ids = list(set([x['role_id'] for x in assignment_list])) + role_ids = list({x['role_id'] for x in assignment_list}) return PROVIDERS.role_api.list_roles_from_ids(role_ids) @notifications.role_assignment('created') @@ -241,13 +241,7 @@ class Manager(manager.Manager): ) # Use set() to process the list to remove any duplicates project_ids = list( - set( - [ - x['project_id'] - for x in assignment_list - if x.get('project_id') - ] - ) + {x['project_id'] for x in assignment_list if x.get('project_id')} ) return PROVIDERS.resource_api.list_projects_from_ids(project_ids) @@ -260,9 +254,7 @@ class Manager(manager.Manager): ) # Use set() to process the list to remove any duplicates domain_ids = list( - set( - [x['domain_id'] for x in assignment_list if x.get('domain_id')] - ) + {x['domain_id'] for x in assignment_list if x.get('domain_id')} ) return PROVIDERS.resource_api.list_domains_from_ids(domain_ids) @@ -271,9 +263,7 @@ class Manager(manager.Manager): source_from_group_ids=group_ids, effective=True ) domain_ids = list( - set( - [x['domain_id'] for x in assignment_list if x.get('domain_id')] - ) + {x['domain_id'] for x in assignment_list if x.get('domain_id')} ) return PROVIDERS.resource_api.list_domains_from_ids(domain_ids) @@ -282,13 +272,7 @@ class Manager(manager.Manager): source_from_group_ids=group_ids, effective=True ) project_ids = list( - set( - [ - x['project_id'] - for x in assignment_list - if x.get('project_id') - ] - ) + {x['project_id'] for x in assignment_list if x.get('project_id')} ) return PROVIDERS.resource_api.list_projects_from_ids(project_ids) @@ -1497,7 +1481,7 @@ class RoleManager(manager.Manager): ) role_driver = assignment_manager_obj.default_role_driver() - super(RoleManager, self).__init__(role_driver) + super().__init__(role_driver) @MEMOIZE def get_role(self, role_id): diff --git a/keystone/assignment/role_backends/base.py b/keystone/assignment/role_backends/base.py index f7a0340f11..d91608477a 100644 --- a/keystone/assignment/role_backends/base.py +++ b/keystone/assignment/role_backends/base.py @@ -29,7 +29,7 @@ NULL_DOMAIN_ID = '<>' CONF = keystone.conf.CONF -class RoleDriverBase(object, metaclass=abc.ABCMeta): +class RoleDriverBase(metaclass=abc.ABCMeta): def _get_list_limit(self): return CONF.role.list_limit or CONF.list_limit diff --git a/keystone/assignment/role_backends/sql_model.py b/keystone/assignment/role_backends/sql_model.py index 2ce78dbe6b..602b2c8ad7 100644 --- a/keystone/assignment/role_backends/sql_model.py +++ b/keystone/assignment/role_backends/sql_model.py @@ -21,9 +21,7 @@ from keystone.common import sql class RoleTable(sql.ModelBase, sql.ModelDictMixinWithExtras): def to_dict(self, include_extra_dict=False): - d = super(RoleTable, self).to_dict( - include_extra_dict=include_extra_dict - ) + d = super().to_dict(include_extra_dict=include_extra_dict) if d['domain_id'] == base.NULL_DOMAIN_ID: d['domain_id'] = None # NOTE(notmorgan): Eventually it may make sense to drop the empty @@ -48,7 +46,7 @@ class RoleTable(sql.ModelBase, sql.ModelDictMixinWithExtras): if opt_value is not None: opt.validator(opt_value) resource_options[opt.option_id] = opt_value - role_obj = super(RoleTable, cls).from_dict(new_dict) + role_obj = super().from_dict(new_dict) setattr(role_obj, '_resource_options', resource_options) return role_obj diff --git a/keystone/auth/core.py b/keystone/auth/core.py index fe025fe7d1..4b499ebb8f 100644 --- a/keystone/auth/core.py +++ b/keystone/auth/core.py @@ -103,7 +103,7 @@ class AuthContext(dict): 'as it has conflicting values %(new)s and %(old)s' ) % ({'attribute': key, 'new': val, 'old': existing_val}) raise exception.Unauthorized(msg) - return super(AuthContext, self).__setitem__(key, val) + return super().__setitem__(key, val) def update(self, E=None, **F): """Override update to prevent conflicting values.""" @@ -118,7 +118,7 @@ class AuthContext(dict): self[key] = val -class AuthInfo(provider_api.ProviderAPIMixin, object): +class AuthInfo(provider_api.ProviderAPIMixin): """Encapsulation of "auth" request.""" @staticmethod @@ -445,7 +445,7 @@ class AuthInfo(provider_api.ProviderAPIMixin, object): self._scope_data = (domain_id, project_id, trust, unscoped, system) -class UserMFARulesValidator(provider_api.ProviderAPIMixin, object): +class UserMFARulesValidator(provider_api.ProviderAPIMixin): """Helper object that can validate the MFA Rules.""" @classmethod diff --git a/keystone/auth/plugins/base.py b/keystone/auth/plugins/base.py index 7f6fa0347a..d8015a5f1e 100644 --- a/keystone/auth/plugins/base.py +++ b/keystone/auth/plugins/base.py @@ -24,9 +24,7 @@ AuthHandlerResponse = collections.namedtuple( ) -class AuthMethodHandler( - provider_api.ProviderAPIMixin, object, metaclass=abc.ABCMeta -): +class AuthMethodHandler(provider_api.ProviderAPIMixin, metaclass=abc.ABCMeta): """Abstract base class for an authentication plugin.""" def __init__(self): diff --git a/keystone/auth/plugins/core.py b/keystone/auth/plugins/core.py index 18e1b7e24d..6704b7a072 100644 --- a/keystone/auth/plugins/core.py +++ b/keystone/auth/plugins/core.py @@ -99,7 +99,7 @@ def convert_integer_to_method_list(method_int): return methods -class BaseUserInfo(provider_api.ProviderAPIMixin, object): +class BaseUserInfo(provider_api.ProviderAPIMixin): @classmethod def create(cls, auth_payload, method_name): @@ -216,13 +216,11 @@ class BaseUserInfo(provider_api.ProviderAPIMixin, object): class UserAuthInfo(BaseUserInfo): def __init__(self): - super(UserAuthInfo, self).__init__() + super().__init__() self.password = None def _validate_and_normalize_auth_data(self, auth_payload): - super(UserAuthInfo, self)._validate_and_normalize_auth_data( - auth_payload - ) + super()._validate_and_normalize_auth_data(auth_payload) user_info = auth_payload['user'] self.password = user_info.get('password') @@ -230,20 +228,18 @@ class UserAuthInfo(BaseUserInfo): class TOTPUserInfo(BaseUserInfo): def __init__(self): - super(TOTPUserInfo, self).__init__() + super().__init__() self.passcode = None def _validate_and_normalize_auth_data(self, auth_payload): - super(TOTPUserInfo, self)._validate_and_normalize_auth_data( - auth_payload - ) + super()._validate_and_normalize_auth_data(auth_payload) user_info = auth_payload['user'] self.passcode = user_info.get('passcode') class AppCredInfo(BaseUserInfo): def __init__(self): - super(AppCredInfo, self).__init__() + super().__init__() self.id = None self.secret = None @@ -257,13 +253,9 @@ class AppCredInfo(BaseUserInfo): if not auth_payload.get('user'): auth_payload['user'] = {} auth_payload['user']['id'] = self.user_id - super(AppCredInfo, self)._validate_and_normalize_auth_data( - auth_payload - ) + super()._validate_and_normalize_auth_data(auth_payload) elif auth_payload.get('name'): - super(AppCredInfo, self)._validate_and_normalize_auth_data( - auth_payload - ) + super()._validate_and_normalize_auth_data(auth_payload) hints = driver_hints.Hints() hints.add_filter('name', auth_payload['name']) app_cred = app_cred_api.list_application_credentials( diff --git a/keystone/auth/plugins/external.py b/keystone/auth/plugins/external.py index a6b4c13d02..c4deec9865 100644 --- a/keystone/auth/plugins/external.py +++ b/keystone/auth/plugins/external.py @@ -94,4 +94,4 @@ class KerberosDomain(Domain): def _authenticate(self): if flask.request.environ.get('AUTH_TYPE') != 'Negotiate': raise exception.Unauthorized(_("auth_type is not Negotiate")) - return super(KerberosDomain, self)._authenticate() + return super()._authenticate() diff --git a/keystone/catalog/backends/base.py b/keystone/catalog/backends/base.py index 9e5eb2edde..e71d214fb6 100644 --- a/keystone/catalog/backends/base.py +++ b/keystone/catalog/backends/base.py @@ -22,9 +22,7 @@ from keystone import exception CONF = keystone.conf.CONF -class CatalogDriverBase( - provider_api.ProviderAPIMixin, object, metaclass=abc.ABCMeta -): +class CatalogDriverBase(provider_api.ProviderAPIMixin, metaclass=abc.ABCMeta): """Interface description for the Catalog driver.""" def _get_list_limit(self): diff --git a/keystone/catalog/backends/sql.py b/keystone/catalog/backends/sql.py index f7721db201..800023985e 100644 --- a/keystone/catalog/backends/sql.py +++ b/keystone/catalog/backends/sql.py @@ -100,7 +100,7 @@ class Endpoint(sql.ModelBase, sql.ModelDictMixinWithExtras): new_dict = endpoint_dict.copy() if new_dict.get('enabled') is None: new_dict['enabled'] = True - return super(Endpoint, cls).from_dict(new_dict) + return super().from_dict(new_dict) class Catalog(base.CatalogDriverBase): diff --git a/keystone/catalog/backends/templated.py b/keystone/catalog/backends/templated.py index ab615b4cca..1bbe366ce3 100644 --- a/keystone/catalog/backends/templated.py +++ b/keystone/catalog/backends/templated.py @@ -82,7 +82,7 @@ class Catalog(base.CatalogDriverBase): """ def __init__(self, templates=None): - super(Catalog, self).__init__() + super().__init__() LOG.warning( 'The templated catalog driver has been deprecated and ' 'will be removed in a future release.' @@ -99,7 +99,7 @@ class Catalog(base.CatalogDriverBase): try: with open(template_file) as f: self.templates = parse_templates(f) - except IOError: + except OSError: LOG.critical('Unable to open template file %s', template_file) raise @@ -167,7 +167,7 @@ class Catalog(base.CatalogDriverBase): for key in service_ref: if key.endswith('URL'): interface = key[:-3] - endpoint_id = '%s-%s-%s' % ( + endpoint_id = '{}-{}-{}'.format( region_id, service_type, interface, diff --git a/keystone/catalog/core.py b/keystone/catalog/core.py index 39ed06cbe4..8702f94934 100644 --- a/keystone/catalog/core.py +++ b/keystone/catalog/core.py @@ -58,7 +58,7 @@ class Manager(manager.Manager): _REGION = 'region' def __init__(self): - super(Manager, self).__init__(CONF.catalog.driver) + super().__init__(CONF.catalog.driver) notifications.register_event_callback( notifications.ACTIONS.deleted, 'project', diff --git a/keystone/cmd/bootstrap.py b/keystone/cmd/bootstrap.py index 227101ecbf..688e9cc8bf 100644 --- a/keystone/cmd/bootstrap.py +++ b/keystone/cmd/bootstrap.py @@ -25,7 +25,7 @@ LOG = log.getLogger(__name__) PROVIDERS = provider_api.ProviderAPIs -class Bootstrapper(object): +class Bootstrapper: def __init__(self): backends.load_backends() diff --git a/keystone/cmd/cli.py b/keystone/cmd/cli.py index cc68a23cef..1f11d64c73 100644 --- a/keystone/cmd/cli.py +++ b/keystone/cmd/cli.py @@ -50,7 +50,7 @@ CONF = keystone.conf.CONF LOG = log.getLogger(__name__) -class BaseApp(object): +class BaseApp: name = None @@ -71,7 +71,7 @@ class BootStrap(BaseApp): @classmethod def add_argument_parser(cls, subparsers): - parser = super(BootStrap, cls).add_argument_parser(subparsers) + parser = super().add_argument_parser(subparsers) parser.add_argument( '--bootstrap-username', default='admin', @@ -272,7 +272,7 @@ class ProjectSetup(BaseApp): @classmethod def add_argument_parser(cls, subparsers): - parser = super(ProjectSetup, cls).add_argument_parser(subparsers) + parser = super().add_argument_parser(subparsers) parser.add_argument( '--project-name', default=None, @@ -308,7 +308,7 @@ class UserSetup(BaseApp): @classmethod def add_argument_parser(cls, subparsers): - parser = super(UserSetup, cls).add_argument_parser(subparsers) + parser = super().add_argument_parser(subparsers) parser.add_argument( '--username', default=None, @@ -349,7 +349,7 @@ class Doctor(BaseApp): @classmethod def add_argument_parser(cls, subparsers): - parser = super(Doctor, cls).add_argument_parser(subparsers) + parser = super().add_argument_parser(subparsers) return parser @staticmethod @@ -365,7 +365,7 @@ class DbSync(BaseApp): @classmethod def add_argument_parser(cls, subparsers): - parser = super(DbSync, cls).add_argument_parser(subparsers) + parser = super().add_argument_parser(subparsers) parser.add_argument( 'version', default=None, @@ -507,9 +507,7 @@ class BasePermissionsSetup(BaseApp): @classmethod def add_argument_parser(cls, subparsers): - parser = super(BasePermissionsSetup, cls).add_argument_parser( - subparsers - ) + parser = super().add_argument_parser(subparsers) running_as_root = os.geteuid() == 0 parser.add_argument('--keystone-user', required=running_as_root) parser.add_argument('--keystone-group', required=running_as_root) @@ -651,7 +649,7 @@ class CreateJWSKeyPair(BasePermissionsSetup): @classmethod def add_argument_parser(cls, subparsers): - parser = super(CreateJWSKeyPair, cls).add_argument_parser(subparsers) + parser = super().add_argument_parser(subparsers) parser.add_argument( '--force', @@ -934,7 +932,7 @@ class TrustFlush(BaseApp): @classmethod def add_argument_parser(cls, subparsers): - parser = super(TrustFlush, cls).add_argument_parser(subparsers) + parser = super().add_argument_parser(subparsers) parser.add_argument( '--project-id', @@ -1013,7 +1011,7 @@ class MappingPurge(BaseApp): @classmethod def add_argument_parser(cls, subparsers): - parser = super(MappingPurge, cls).add_argument_parser(subparsers) + parser = super().add_argument_parser(subparsers) parser.add_argument( '--all', default=False, @@ -1139,10 +1137,10 @@ def _domain_config_finder(conf_dir): ) -class DomainConfigUploadFiles(object): +class DomainConfigUploadFiles: def __init__(self, domain_config_finder=_domain_config_finder): - super(DomainConfigUploadFiles, self).__init__() + super().__init__() self.load_backends() self._domain_config_finder = domain_config_finder @@ -1324,7 +1322,7 @@ class DomainConfigUpload(BaseApp): @classmethod def add_argument_parser(cls, subparsers): - parser = super(DomainConfigUpload, cls).add_argument_parser(subparsers) + parser = super().add_argument_parser(subparsers) parser.add_argument( '--all', default=False, @@ -1369,7 +1367,7 @@ class MappingEngineTester(BaseApp): name = 'mapping_engine' def __init__(self): - super(MappingEngineTester, self).__init__() + super().__init__() self.mapping_id = uuid.uuid4().hex self.rules_pathname = None self.rules = None @@ -1392,7 +1390,7 @@ class MappingEngineTester(BaseApp): try: with open(path) as file: self.assertion = file.read().strip() - except IOError as e: + except OSError as e: raise SystemExit( _("Error while opening file " "%(path)s: %(err)s") % {'path': path, 'err': e} @@ -1496,9 +1494,7 @@ class MappingEngineTester(BaseApp): @classmethod def add_argument_parser(cls, subparsers): - parser = super(MappingEngineTester, cls).add_argument_parser( - subparsers - ) + parser = super().add_argument_parser(subparsers) parser.formatter_class = argparse.RawTextHelpFormatter parser.add_argument( @@ -1579,7 +1575,7 @@ class MappingPopulate(BaseApp): @classmethod def add_argument_parser(cls, subparsers): - parser = super(MappingPopulate, cls).add_argument_parser(subparsers) + parser = super().add_argument_parser(subparsers) parser.add_argument( '--domain-name', diff --git a/keystone/cmd/idutils.py b/keystone/cmd/idutils.py index dd09e18f63..2ed18306b3 100644 --- a/keystone/cmd/idutils.py +++ b/keystone/cmd/idutils.py @@ -27,7 +27,7 @@ LOG = log.getLogger(__name__) PROVIDERS = provider_api.ProviderAPIs -class Identity(object): +class Identity: def __init__(self): backends.load_backends() diff --git a/keystone/common/cache/core.py b/keystone/common/cache/core.py index 6a67ba824a..5649c412d1 100644 --- a/keystone/common/cache/core.py +++ b/keystone/common/cache/core.py @@ -27,7 +27,7 @@ import keystone.conf CONF = keystone.conf.CONF -class RegionInvalidationManager(object): +class RegionInvalidationManager: REGION_KEY_PREFIX = '<<>>:' @@ -84,7 +84,7 @@ def key_mangler_factory(invalidation_manager, orig_key_mangler): # If it were there would be no way to get to it, making the cache # effectively useless. if not invalidation_manager.is_region_key(key): - key = '%s:%s' % (key, invalidation_manager.region_id) + key = f'{key}:{invalidation_manager.region_id}' if orig_key_mangler: key = orig_key_mangler(key) return key diff --git a/keystone/common/context.py b/keystone/common/context.py index a4694c6ba4..49be0945d5 100644 --- a/keystone/common/context.py +++ b/keystone/common/context.py @@ -38,7 +38,7 @@ class RequestContext(oslo_context.RequestContext): self.oauth_access_token_id = kwargs.pop('oauth_access_token_id', None) self.authenticated = kwargs.pop('authenticated', False) - super(RequestContext, self).__init__(**kwargs) + super().__init__(**kwargs) def to_policy_values(self): """Add keystone-specific policy values to policy representation. @@ -62,7 +62,7 @@ class RequestContext(oslo_context.RequestContext): # needs reworking of how we handle the context in oslo.policy. Until # this is reworked, it is not possible to merge the token render # function into keystone.api - values = super(RequestContext, self).to_policy_values() + values = super().to_policy_values() values['token'] = self.token_reference['token'] values['domain_id'] = self.domain_id if self.domain_id else None return values diff --git a/keystone/common/driver_hints.py b/keystone/common/driver_hints.py index 54903d45ce..d270e0e65d 100644 --- a/keystone/common/driver_hints.py +++ b/keystone/common/driver_hints.py @@ -63,7 +63,7 @@ def truncated(f): return wrapper -class Hints(object): +class Hints: """Encapsulate driver hints for listing entities. Hints are modifiers that affect the return of entities from a diff --git a/keystone/common/fernet_utils.py b/keystone/common/fernet_utils.py index 913fcfe32b..0ce7daac13 100644 --- a/keystone/common/fernet_utils.py +++ b/keystone/common/fernet_utils.py @@ -34,7 +34,7 @@ CONF = keystone.conf.CONF NULL_KEY = base64.urlsafe_b64encode(b'\x00' * 32) -class FernetUtils(object): +class FernetUtils: def __init__(self, key_repository, max_active_keys, config_group): self.key_repository = key_repository @@ -128,7 +128,7 @@ class FernetUtils(object): f.write(key.decode('utf-8')) f.flush() create_success = True - except IOError: + except OSError: LOG.error('Failed to create new temporary key: %s', key_file) raise finally: @@ -163,7 +163,7 @@ class FernetUtils(object): for filename in os.listdir(key_repo): path = os.path.join(key_repo, str(filename)) if os.path.isfile(path): - with open(path, 'r') as key_file: + with open(path) as key_file: try: key_id = int(filename) except ValueError: # nosec : name is not a number diff --git a/keystone/common/json_home.py b/keystone/common/json_home.py index ec64ae7485..9f539becc5 100644 --- a/keystone/common/json_home.py +++ b/keystone/common/json_home.py @@ -50,7 +50,7 @@ def build_v3_extension_parameter_relation( ) -class Parameters(object): +class Parameters: """Relationships for Common parameters.""" DOMAIN_ID = build_v3_parameter_relation('domain_id') @@ -71,7 +71,7 @@ class Parameters(object): ACCESS_RULE_ID = build_v3_parameter_relation('access_rule_id') -class Status(object): +class Status: """Status values supported.""" DEPRECATED = 'deprecated' @@ -95,7 +95,7 @@ class Status(object): ) -class JsonHomeResources(object): +class JsonHomeResources: """JSON Home resource data.""" __resources = {} diff --git a/keystone/common/manager.py b/keystone/common/manager.py index 89cc272fda..7e59615bf9 100644 --- a/keystone/common/manager.py +++ b/keystone/common/manager.py @@ -87,11 +87,11 @@ class _TraceMeta(type): @staticmethod def wrapper(__f, __classname): __argspec = inspect.getfullargspec(__f) - __fn_info = '%(module)s.%(classname)s.%(funcname)s' % { - 'module': inspect.getmodule(__f).__name__, - 'classname': __classname, - 'funcname': __f.__name__, - } + __fn_info = '{module}.{classname}.{funcname}'.format( + module=inspect.getmodule(__f).__name__, + classname=__classname, + funcname=__f.__name__, + ) # NOTE(morganfainberg): Omit "cls" and "self" when printing trace logs # the index can be calculated at wrap time rather than at runtime. if __argspec.args and __argspec.args[0] in ('self', 'cls'): @@ -120,10 +120,7 @@ class _TraceMeta(type): [ ', '.join([repr(a) for a in args[__arg_idx:]]), ', '.join( - [ - '%(k)s=%(v)r' % {'k': k, 'v': v} - for k, v in kwargs.items() - ] + [f'{k}={v!r}' for k, v in kwargs.items()] ), ] ), @@ -161,7 +158,7 @@ class _TraceMeta(type): return type.__new__(meta, classname, bases, final_cls_dict) -class Manager(object, metaclass=_TraceMeta): +class Manager(metaclass=_TraceMeta): """Base class for intermediary request layer. The Manager layer exists to support additional logic that applies to all diff --git a/keystone/common/provider_api.py b/keystone/common/provider_api.py index 6edebace60..1f0c7f29de 100644 --- a/keystone/common/provider_api.py +++ b/keystone/common/provider_api.py @@ -11,7 +11,7 @@ # under the License. -class ProviderAPIRegistry(object): +class ProviderAPIRegistry: __shared_object_state = {} __registry = {} __iter__ = __registry.__iter__ @@ -28,9 +28,7 @@ class ProviderAPIRegistry(object): # # Use "super" to bypass the __setattr__ preventing changes to the # object itself. - super(ProviderAPIRegistry, self).__setattr__( - '__dict__', self.__shared_object_state - ) + super().__setattr__('__dict__', self.__shared_object_state) def __getattr__(self, item): """Do attr lookup.""" @@ -70,11 +68,11 @@ class ProviderAPIRegistry(object): """ONLY USED FOR TESTING.""" self.__registry.clear() # Use super to allow setting around class implementation of __setattr__ - super(ProviderAPIRegistry, self).__setattr__('locked', False) + super().__setattr__('locked', False) def lock_provider_registry(self): # Use super to allow setting around class implementation of __setattr__ - super(ProviderAPIRegistry, self).__setattr__('locked', True) + super().__setattr__('locked', True) def deferred_provider_lookup(self, api, method): """Create descriptor that performs lookup of api and method on demand. @@ -90,7 +88,7 @@ class ProviderAPIRegistry(object): :type method: str """ - class DeferredProviderLookup(object): + class DeferredProviderLookup: def __init__(self, api, method): self.__api = api self.__method = method @@ -106,7 +104,7 @@ class DuplicateProviderError(Exception): """Attempting to register a duplicate API provider.""" -class ProviderAPIMixin(object): +class ProviderAPIMixin: """Allow referencing provider apis on self via __getattr__. Be sure this class is first in the class definition for inheritance. diff --git a/keystone/common/rbac_enforcer/enforcer.py b/keystone/common/rbac_enforcer/enforcer.py index d00138188b..437d10d1a5 100644 --- a/keystone/common/rbac_enforcer/enforcer.py +++ b/keystone/common/rbac_enforcer/enforcer.py @@ -50,7 +50,7 @@ DEFAULT_POLICY_FILE = 'policy.yaml' opts.set_defaults(CONF, DEFAULT_POLICY_FILE) -class RBACEnforcer(object): +class RBACEnforcer: """Enforce RBAC on API calls.""" __shared_state__ = {} @@ -184,7 +184,7 @@ class RBACEnforcer(object): if LOG.logger.getEffectiveLevel() <= log.DEBUG: LOG.debug( 'RBAC: Adding query filter params (%s)', - ', '.join(['%s=%s' % (k, v) for k, v in target.items()]), + ', '.join([f'{k}={v}' for k, v in target.items()]), ) return target @@ -496,7 +496,7 @@ class RBACEnforcer(object): # LOG the Args args_str = ', '.join( [ - '%s=%s' % (k, v) + f'{k}={v}' for k, v in (flask.request.view_args or {}).items() ] ) diff --git a/keystone/common/resource_options/core.py b/keystone/common/resource_options/core.py index 79a630a462..304f51f40f 100644 --- a/keystone/common/resource_options/core.py +++ b/keystone/common/resource_options/core.py @@ -105,14 +105,14 @@ def resource_options_ref_to_mapper(ref, option_class): ref._resource_option_mapper[r_opt_id] = opt_obj -class ResourceOptionRegistry(object): +class ResourceOptionRegistry: def __init__(self, registry_name): self._registered_options = {} self._registry_type = registry_name @property def option_names(self): - return set([opt.option_name for opt in self.options]) + return {opt.option_name for opt in self.options} @property def options_by_name(self): @@ -182,7 +182,7 @@ class ResourceOptionRegistry(object): self._registered_options[option.option_id] = option -class ResourceOption(object): +class ResourceOption: def __init__( self, diff --git a/keystone/common/tokenless_auth.py b/keystone/common/tokenless_auth.py index 4fcb8987a8..671ad187ac 100644 --- a/keystone/common/tokenless_auth.py +++ b/keystone/common/tokenless_auth.py @@ -30,7 +30,7 @@ CONF = keystone.conf.CONF LOG = log.getLogger(__name__) -class TokenlessAuthHelper(provider_api.ProviderAPIMixin, object): +class TokenlessAuthHelper(provider_api.ProviderAPIMixin): def __init__(self, env): """A init class for TokenlessAuthHelper. diff --git a/keystone/common/utils.py b/keystone/common/utils.py index 5b2849efa3..2d9a46f533 100644 --- a/keystone/common/utils.py +++ b/keystone/common/utils.py @@ -112,7 +112,7 @@ class SmarterEncoder(jsonutils.json.JSONEncoder): def default(self, obj): if not isinstance(obj, dict) and hasattr(obj, 'items'): return dict(obj.items()) - return super(SmarterEncoder, self).default(obj) + return super().default(obj) def hash_access_key(access): @@ -304,7 +304,7 @@ def get_unix_group(group=None): return group_info.gr_gid, group_info.gr_name -class WhiteListedItemFilter(object): +class WhiteListedItemFilter: def __init__(self, whitelist, data): self._whitelist = set(whitelist or []) diff --git a/keystone/common/validation/validators.py b/keystone/common/validation/validators.py index 63428f3000..b8d7b24708 100644 --- a/keystone/common/validation/validators.py +++ b/keystone/common/validation/validators.py @@ -52,7 +52,7 @@ def validate_password(password): raise exception.PasswordValidationError(detail=detail) -class SchemaValidator(object): +class SchemaValidator: """Resource reference validator class.""" validator_org = jsonschema.Draft4Validator diff --git a/keystone/credential/backends/base.py b/keystone/credential/backends/base.py index 83ac492ac6..c656947435 100644 --- a/keystone/credential/backends/base.py +++ b/keystone/credential/backends/base.py @@ -22,7 +22,7 @@ from keystone import exception LOG = log.getLogger(__name__) -class CredentialDriverBase(object, metaclass=abc.ABCMeta): +class CredentialDriverBase(metaclass=abc.ABCMeta): # credential crud @abc.abstractmethod diff --git a/keystone/credential/core.py b/keystone/credential/core.py index be8b96199e..b64db7b83a 100644 --- a/keystone/credential/core.py +++ b/keystone/credential/core.py @@ -44,7 +44,7 @@ class Manager(manager.Manager): _CRED = 'credential' def __init__(self): - super(Manager, self).__init__(CONF.credential.driver) + super().__init__(CONF.credential.driver) def _decrypt_credential(self, credential): """Return a decrypted credential reference.""" diff --git a/keystone/credential/provider.py b/keystone/credential/provider.py index defd49f239..74de124505 100644 --- a/keystone/credential/provider.py +++ b/keystone/credential/provider.py @@ -23,4 +23,4 @@ class Manager(manager.Manager): _provides_api = 'credential_provider_api' def __init__(self): - super(Manager, self).__init__(CONF.credential.provider) + super().__init__(CONF.credential.provider) diff --git a/keystone/credential/providers/core.py b/keystone/credential/providers/core.py index 79f8e3a728..ec637f7408 100644 --- a/keystone/credential/providers/core.py +++ b/keystone/credential/providers/core.py @@ -13,7 +13,7 @@ import abc -class Provider(object, metaclass=abc.ABCMeta): +class Provider(metaclass=abc.ABCMeta): """Interface for credential providers that support encryption.""" @abc.abstractmethod diff --git a/keystone/endpoint_policy/backends/base.py b/keystone/endpoint_policy/backends/base.py index 7b5db48c55..1f69ce34d6 100644 --- a/keystone/endpoint_policy/backends/base.py +++ b/keystone/endpoint_policy/backends/base.py @@ -15,7 +15,7 @@ import abc from keystone import exception -class EndpointPolicyDriverBase(object, metaclass=abc.ABCMeta): +class EndpointPolicyDriverBase(metaclass=abc.ABCMeta): """Interface description for an Endpoint Policy driver.""" @abc.abstractmethod diff --git a/keystone/endpoint_policy/core.py b/keystone/endpoint_policy/core.py index c28df895cf..ecafeb284b 100644 --- a/keystone/endpoint_policy/core.py +++ b/keystone/endpoint_policy/core.py @@ -38,7 +38,7 @@ class Manager(manager.Manager): _provides_api = 'endpoint_policy_api' def __init__(self): - super(Manager, self).__init__(CONF.endpoint_policy.driver) + super().__init__(CONF.endpoint_policy.driver) def _assert_valid_association(self, endpoint_id, service_id, region_id): """Assert that the association is supported. diff --git a/keystone/exception.py b/keystone/exception.py index 8070fd463f..6fe53642f4 100644 --- a/keystone/exception.py +++ b/keystone/exception.py @@ -23,7 +23,7 @@ from keystone.i18n import _ CONF = keystone.conf.CONF LOG = log.getLogger(__name__) -KEYSTONE_API_EXCEPTIONS = set([]) +KEYSTONE_API_EXCEPTIONS = set() # Tests use this to make exception message format errors fatal _FATAL_EXCEPTION_FORMAT_ERRORS = False @@ -81,7 +81,7 @@ class Error(Exception, metaclass=_KeystoneExceptionMeta): LOG.warning('missing exception kwargs (programmer error)') message = self.message_format - super(Error, self).__init__(message) + super().__init__(message) def _build_message(self, message, **kwargs): """Build and returns an exception message. @@ -328,9 +328,7 @@ class InsufficientAuthMethods(Error): def __init__(self, message=None, user_id=None, methods=None): methods_str = '[%s]' % ','.join(methods) - super(InsufficientAuthMethods, self).__init__( - message, user_id=user_id, methods=methods_str - ) + super().__init__(message, user_id=user_id, methods=methods_str) self.user_id = user_id self.methods = methods @@ -351,7 +349,7 @@ class AuthPluginException(Unauthorized): message_format = _("Authentication plugin error.") def __init__(self, *args, **kwargs): - super(AuthPluginException, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.authentication = {} @@ -367,7 +365,7 @@ class AuthMethodNotSupported(AuthPluginException): message_format = _("Attempted to authenticate with an unsupported method.") def __init__(self, *args, **kwargs): - super(AuthMethodNotSupported, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) self.authentication = {'methods': CONF.auth.methods} @@ -381,7 +379,7 @@ class AdditionalAuthRequired(AuthPluginException): message_format = _("Additional authentications steps required.") def __init__(self, auth_response=None, **kwargs): - super(AdditionalAuthRequired, self).__init__(message=None, **kwargs) + super().__init__(message=None, **kwargs) self.authentication = auth_response @@ -427,7 +425,7 @@ class InvalidLimit(Forbidden): class LimitTreeExceedError(Exception): def __init__(self, project_id, max_limit_depth): - super(LimitTreeExceedError, self).__init__( + super().__init__( _( "Keystone cannot start due to project hierarchical depth in the " "current deployment (project_ids: %(project_id)s) exceeds the " @@ -646,7 +644,7 @@ class UnexpectedError(SecurityError): # exception. kwargs.setdefault('exception', '') - return super(UnexpectedError, self)._build_message( + return super()._build_message( message or self.debug_message_format, **kwargs ) @@ -734,7 +732,7 @@ class MultipleSQLDriversInConfig(UnexpectedError): class MigrationNotProvided(Exception): def __init__(self, mod_name, path): - super(MigrationNotProvided, self).__init__( + super().__init__( _( "%(mod_name)s doesn't provide database migrations. The migration" " repository path at %(path)s doesn't exist or isn't a directory." @@ -806,7 +804,7 @@ class LDAPSizeLimitExceeded(UnexpectedError): class CacheDeserializationError(Exception): def __init__(self, obj, data): - super(CacheDeserializationError, self).__init__( + super().__init__( _('Failed to deserialize %(obj)s. Data is %(data)s') % {'obj': obj, 'data': data} ) @@ -875,4 +873,4 @@ class RedirectRequired(Exception): def __init__(self, redirect_url, **kwargs): self.redirect_url = redirect_url - super(RedirectRequired, self).__init__(**kwargs) + super().__init__(**kwargs) diff --git a/keystone/federation/backends/base.py b/keystone/federation/backends/base.py index cc25a4aa36..7f608a2c39 100644 --- a/keystone/federation/backends/base.py +++ b/keystone/federation/backends/base.py @@ -17,7 +17,7 @@ import abc from keystone import exception -class FederationDriverBase(object, metaclass=abc.ABCMeta): +class FederationDriverBase(metaclass=abc.ABCMeta): @abc.abstractmethod def create_idp(self, idp_id, idp): diff --git a/keystone/federation/core.py b/keystone/federation/core.py index b7b15c94ee..4fab7f6121 100644 --- a/keystone/federation/core.py +++ b/keystone/federation/core.py @@ -47,7 +47,7 @@ class Manager(manager.Manager): _provides_api = 'federation_api' def __init__(self): - super(Manager, self).__init__(CONF.federation.driver) + super().__init__(CONF.federation.driver) notifications.register_event_callback( notifications.ACTIONS.internal, notifications.DOMAIN_DELETED, diff --git a/keystone/federation/idp.py b/keystone/federation/idp.py index ce2f0fa5ad..77a8a16f82 100644 --- a/keystone/federation/idp.py +++ b/keystone/federation/idp.py @@ -42,7 +42,7 @@ LOG = log.getLogger(__name__) CONF = keystone.conf.CONF -class SAMLGenerator(object): +class SAMLGenerator: """A class to generate SAML assertions.""" def __init__(self): @@ -502,10 +502,10 @@ def _sign_assertion(assertion): ) # xmlsec1 --sign --privkey-pem privkey,cert --id-attr:ID - certificates = '%(idp_private_key)s,%(idp_public_key)s' % { - 'idp_public_key': CONF.saml.certfile, - 'idp_private_key': CONF.saml.keyfile, - } + certificates = '{idp_private_key},{idp_public_key}'.format( + idp_public_key=CONF.saml.certfile, + idp_private_key=CONF.saml.keyfile, + ) # Verify that the binary used to create the assertion actually exists on # the system. If it doesn't, log a warning for operators to go and install @@ -570,7 +570,7 @@ def _sign_assertion(assertion): return saml2.create_class_from_xml_string(saml.Assertion, stdout) -class MetadataGenerator(object): +class MetadataGenerator: """A class for generating SAML IdP Metadata.""" def generate_metadata(self): @@ -598,7 +598,7 @@ class MetadataGenerator(object): def get_cert(): try: return sigver.read_cert_from_file(CONF.saml.certfile, 'pem') - except (IOError, sigver.CertificateError) as e: + except (OSError, sigver.CertificateError) as e: msg = ( 'Cannot open certificate %(cert_file)s.' 'Reason: %(reason)s' @@ -608,7 +608,7 @@ class MetadataGenerator(object): 'Reason: %(reason)s' ) % {'cert_file': CONF.saml.certfile, 'reason': e} LOG.error(msg) - raise IOError(tr_msg) + raise OSError(tr_msg) def key_descriptor(): cert = get_cert() @@ -717,7 +717,7 @@ class MetadataGenerator(object): return True -class ECPGenerator(object): +class ECPGenerator: """A class for generating an ECP assertion.""" @staticmethod diff --git a/keystone/federation/utils.py b/keystone/federation/utils.py index ca0e7c56e1..a546d24b0b 100644 --- a/keystone/federation/utils.py +++ b/keystone/federation/utils.py @@ -34,7 +34,7 @@ LOG = log.getLogger(__name__) PROVIDERS = provider_api.ProviderAPIs -class UserType(object): +class UserType: """User mapping type.""" EPHEMERAL = 'ephemeral' @@ -230,7 +230,7 @@ def get_default_attribute_mapping_schema_version(): return CONF.federation.attribute_mapping_default_schema_version -class DirectMaps(object): +class DirectMaps: """An abstraction around the remote matches. Each match is treated internally as a list. @@ -460,10 +460,10 @@ def get_assertion_params_from_env(): yield (k, v) -class RuleProcessor(object): +class RuleProcessor: """A class to process assertions and mapping rules.""" - class _EvalType(object): + class _EvalType: """Mapping rule evaluation types.""" ANY_ONE_OF = 'any_one_of' @@ -638,8 +638,7 @@ class RuleProcessor(object): def extract_groups(self, groups_by_domain): for groups in list(groups_by_domain.values()): - for group in list({g['name']: g for g in groups}.values()): - yield group + yield from list({g['name']: g for g in groups}.values()) def _transform(self, identity_values): """Transform local mappings, to an easier to understand format. @@ -974,7 +973,7 @@ class RuleProcessor(object): def assert_enabled_identity_provider(federation_api, idp_id): identity_provider = federation_api.get_idp(idp_id) if identity_provider.get('enabled') is not True: - msg = 'Identity Provider %(idp)s is disabled' % {'idp': idp_id} + msg = f'Identity Provider {idp_id} is disabled' tr_msg = _('Identity Provider %(idp)s is disabled') % {'idp': idp_id} LOG.debug(msg) raise exception.Forbidden(tr_msg) @@ -983,7 +982,7 @@ def assert_enabled_identity_provider(federation_api, idp_id): def assert_enabled_service_provider_object(service_provider): if service_provider.get('enabled') is not True: sp_id = service_provider['id'] - msg = 'Service Provider %(sp)s is disabled' % {'sp': sp_id} + msg = f'Service Provider {sp_id} is disabled' tr_msg = _('Service Provider %(sp)s is disabled') % {'sp': sp_id} LOG.debug(msg) raise exception.Forbidden(tr_msg) @@ -1001,9 +1000,7 @@ class RuleProcessorToHonorDomainOption(RuleProcessor): """ def __init__(self, mapping_id, rules): - super(RuleProcessorToHonorDomainOption, self).__init__( - mapping_id, rules - ) + super().__init__(mapping_id, rules) def extract_projects(self, identity_value): projects = identity_value.get("projects", []) @@ -1019,9 +1016,7 @@ class RuleProcessorToHonorDomainOption(RuleProcessor): return projects def normalize_user(self, user, default_mapping_domain): - super(RuleProcessorToHonorDomainOption, self).normalize_user( - user, default_mapping_domain - ) + super().normalize_user(user, default_mapping_domain) if not user.get("domain"): LOG.debug( "Configuring the domain [%s] for user [%s].", diff --git a/keystone/identity/backends/base.py b/keystone/identity/backends/base.py index 057a5252e8..b83b332935 100644 --- a/keystone/identity/backends/base.py +++ b/keystone/identity/backends/base.py @@ -46,7 +46,7 @@ def filter_user(user_ref): return user_ref -class IdentityDriverBase(object, metaclass=abc.ABCMeta): +class IdentityDriverBase(metaclass=abc.ABCMeta): """Interface description for an Identity driver. The schema for users and groups is different depending on whether the diff --git a/keystone/identity/backends/ldap/common.py b/keystone/identity/backends/ldap/common.py index 21ffbde5a9..31ac8b91f6 100644 --- a/keystone/identity/backends/ldap/common.py +++ b/keystone/identity/backends/ldap/common.py @@ -122,7 +122,7 @@ def py2ldap(val): :returns: unicode string representation of value. """ if isinstance(val, bool): - return u'TRUE' if val else u'FALSE' + return 'TRUE' if val else 'FALSE' else: return str(val) @@ -202,8 +202,7 @@ def safe_iter(attrs): if attrs is None: return elif isinstance(attrs, list): - for e in attrs: - yield e + yield from attrs else: yield attrs @@ -353,7 +352,7 @@ def dn_startswith(descendant_dn, dn): return is_dn_equal(descendant_dn[-len(dn) :], dn) -class LDAPHandler(object, metaclass=abc.ABCMeta): +class LDAPHandler(metaclass=abc.ABCMeta): """Abstract class which defines methods for a LDAP API provider. Native Keystone values cannot be passed directly into and from the @@ -713,7 +712,7 @@ def _common_ldap_initialization( # works but these values are ignored when setting them on the # connection if not os.path.isfile(tls_cacertfile): - raise IOError( + raise OSError( _("tls_cacertfile %s not found " "or is not a file") % tls_cacertfile ) @@ -726,7 +725,7 @@ def _common_ldap_initialization( # works but these values are ignored when setting them on the # connection if not os.path.isdir(tls_cacertdir): - raise IOError( + raise OSError( _("tls_cacertdir %s not found " "or is not a directory") % tls_cacertdir ) @@ -739,7 +738,7 @@ def _common_ldap_initialization( ) -class AsynchronousMessage(object): +class AsynchronousMessage: """A container for handling asynchronous LDAP responses. Some LDAP APIs, like `search_ext`, are asynchronous and return a message ID @@ -823,7 +822,7 @@ class PooledLDAPHandler(LDAPHandler): connection_pools = {} # static connector pool dict def __init__(self, conn=None, use_auth_pool=False): - super(PooledLDAPHandler, self).__init__(conn=conn) + super().__init__(conn=conn) self.who = '' self.cred = '' self.conn_options = {} # connection specific options @@ -1057,7 +1056,7 @@ class KeystoneLDAPHandler(LDAPHandler): """ def __init__(self, conn=None): - super(KeystoneLDAPHandler, self).__init__(conn=conn) + super().__init__(conn=conn) self.page_size = 0 def __enter__(self): @@ -1371,7 +1370,7 @@ def filter_entity(entity_ref): return entity_ref -class BaseLdap(object): +class BaseLdap: DEFAULT_OU = None DEFAULT_STRUCTURAL_CLASSES = None DEFAULT_ID_ATTR = 'cn' @@ -1422,9 +1421,10 @@ class BaseLdap(object): self.auth_pool_conn_lifetime = conf.ldap.auth_pool_connection_lifetime if self.options_name is not None: - self.tree_dn = getattr( - conf.ldap, '%s_tree_dn' % self.options_name - ) or '%s,%s' % (self.DEFAULT_OU, conf.ldap.suffix) + self.tree_dn = ( + getattr(conf.ldap, '%s_tree_dn' % self.options_name) + or f'{self.DEFAULT_OU},{conf.ldap.suffix}' + ) idatt = '%s_id_attribute' % self.options_name self.id_attr = getattr(conf.ldap, idatt) or self.DEFAULT_ID_ATTR @@ -1435,7 +1435,7 @@ class BaseLdap(object): ) for k, v in self.attribute_options_names.items(): - v = '%s_%s_attribute' % (self.options_name, v) + v = f'{self.options_name}_{v}_attribute' self.attribute_mapping[k] = getattr(conf.ldap, v) attr_mapping_opt = ( @@ -1546,7 +1546,7 @@ class BaseLdap(object): raise exception.LDAPServerConnectionError(url=self.LDAP_URL) def _id_to_dn_string(self, object_id): - return u'%s=%s,%s' % ( + return '{}={},{}'.format( self.id_attr, ldap.dn.escape_dn_chars(str(object_id)), self.tree_dn, @@ -1559,7 +1559,7 @@ class BaseLdap(object): search_result = conn.search_s( self.tree_dn, self.LDAP_SCOPE, - u'(&(%(id_attr)s=%(id)s)(objectclass=%(objclass)s))' + '(&(%(id_attr)s=%(id)s)(objectclass=%(objclass)s))' % { 'id_attr': self.id_attr, 'id': ldap.filter.escape_filter_chars(str(object_id)), @@ -1743,7 +1743,7 @@ class BaseLdap(object): # To ensure that ldap attribute value is not empty in ldap config. if not attr: - attr_name = '%s_%s_attribute' % ( + attr_name = '{}_{}_attribute'.format( self.options_name, self.attribute_options_names[ldap_attr_name], ) @@ -1783,9 +1783,9 @@ class BaseLdap(object): def _ldap_get(self, object_id, ldap_filter=None): query = ( - u'(&(%(id_attr)s=%(id)s)' - u'%(filter)s' - u'(objectClass=%(object_class)s))' + '(&(%(id_attr)s=%(id)s)' + '%(filter)s' + '(objectClass=%(object_class)s))' % { 'id_attr': self.id_attr, 'id': ldap.filter.escape_filter_chars(str(object_id)), @@ -1797,11 +1797,9 @@ class BaseLdap(object): try: attrs = list( set( - ( - [self.id_attr] - + list(self.attribute_mapping.values()) - + list(self.extra_attr_mapping.keys()) - ) + [self.id_attr] + + list(self.attribute_mapping.values()) + + list(self.extra_attr_mapping.keys()) ) ) res = conn.search_s( @@ -1838,7 +1836,7 @@ class BaseLdap(object): @driver_hints.truncated def _ldap_get_all(self, hints, ldap_filter=None): - query = u'(&%s(objectClass=%s)(%s=*))' % ( + query = '(&{}(objectClass={})({}=*))'.format( ldap_filter or self.ldap_filter or '', self.object_class, self.id_attr, @@ -1846,11 +1844,9 @@ class BaseLdap(object): sizelimit = 0 attrs = list( set( - ( - [self.id_attr] - + list(self.attribute_mapping.values()) - + list(self.extra_attr_mapping.keys()) - ) + [self.id_attr] + + list(self.attribute_mapping.values()) + + list(self.extra_attr_mapping.keys()) ) ) if hints.limit: @@ -1878,14 +1874,14 @@ class BaseLdap(object): def _ldap_get_list( self, search_base, scope, query_params=None, attrlist=None ): - query = u'(objectClass=%s)' % self.object_class + query = '(objectClass=%s)' % self.object_class if query_params: def calc_filter(attrname, value): val_esc = ldap.filter.escape_filter_chars(value) - return '(%s=%s)' % (attrname, val_esc) + return f'({attrname}={val_esc})' - query = u'(&%s%s)' % ( + query = '(&{}{})'.format( query, ''.join([calc_filter(k, v) for k, v in query_params.items()]), ) @@ -1900,7 +1896,7 @@ class BaseLdap(object): return self._ldap_res_to_model(res) def get_by_name(self, name, ldap_filter=None): - query = u'(%s=%s)' % ( + query = '({}={})'.format( self.attribute_mapping['name'], ldap.filter.escape_filter_chars(str(name)), ) @@ -2053,25 +2049,25 @@ class BaseLdap(object): # booleans (this is related to bug #1411478). if filter_['comparator'] == 'equals': - query_term = u'(%(attr)s=%(val)s)' % { - 'attr': ldap_attr, - 'val': val_esc, - } + query_term = '({attr}={val})'.format( + attr=ldap_attr, + val=val_esc, + ) elif filter_['comparator'] == 'contains': - query_term = u'(%(attr)s=*%(val)s*)' % { - 'attr': ldap_attr, - 'val': val_esc, - } + query_term = '({attr}=*{val}*)'.format( + attr=ldap_attr, + val=val_esc, + ) elif filter_['comparator'] == 'startswith': - query_term = u'(%(attr)s=%(val)s*)' % { - 'attr': ldap_attr, - 'val': val_esc, - } + query_term = '({attr}={val}*)'.format( + attr=ldap_attr, + val=val_esc, + ) elif filter_['comparator'] == 'endswith': - query_term = u'(%(attr)s=*%(val)s)' % { - 'attr': ldap_attr, - 'val': val_esc, - } + query_term = '({attr}=*{val})'.format( + attr=ldap_attr, + val=val_esc, + ) else: # It's a filter we don't understand, so let the caller # work out if they need to do something with it. @@ -2099,7 +2095,7 @@ class BaseLdap(object): satisfied_filters.append(filter_) if filter_list: - query = u'(&%s%s)' % (query, ''.join(filter_list)) + query = '(&{}{})'.format(query, ''.join(filter_list)) # Remove satisfied filters, then the caller will know remaining filters for filter_ in satisfied_filters: @@ -2130,7 +2126,7 @@ class EnabledEmuMixIn(BaseLdap): DEFAULT_GROUP_MEMBERS_ARE_IDS = False def __init__(self, conf): - super(EnabledEmuMixIn, self).__init__(conf) + super().__init__(conf) enabled_emulation = '%s_enabled_emulation' % self.options_name self.enabled_emulation = getattr(conf.ldap, enabled_emulation) @@ -2175,7 +2171,7 @@ class EnabledEmuMixIn(BaseLdap): return self._is_member_enabled(member_attr_val, conn) def _is_member_enabled(self, member_attr_val, conn): - query = '(%s=%s)' % ( + query = '({}={})'.format( self.member_attribute, ldap.filter.escape_filter_chars(member_attr_val), ) @@ -2221,18 +2217,18 @@ class EnabledEmuMixIn(BaseLdap): def create(self, values): if self.enabled_emulation: enabled_value = values.pop('enabled', True) - ref = super(EnabledEmuMixIn, self).create(values) + ref = super().create(values) if 'enabled' not in self.attribute_ignore: if enabled_value: self._add_enabled(ref['id']) ref['enabled'] = enabled_value return ref else: - return super(EnabledEmuMixIn, self).create(values) + return super().create(values) def get(self, object_id, ldap_filter=None): with self.get_connection() as conn: - ref = super(EnabledEmuMixIn, self).get(object_id, ldap_filter) + ref = super().get(object_id, ldap_filter) if ( 'enabled' not in self.attribute_ignore and self.enabled_emulation @@ -2256,13 +2252,13 @@ class EnabledEmuMixIn(BaseLdap): ) return obj_list else: - return super(EnabledEmuMixIn, self).get_all(ldap_filter, hints) + return super().get_all(ldap_filter, hints) def update(self, object_id, values, old_obj=None): if 'enabled' not in self.attribute_ignore and self.enabled_emulation: data = values.copy() enabled_value = data.pop('enabled', None) - ref = super(EnabledEmuMixIn, self).update(object_id, data, old_obj) + ref = super().update(object_id, data, old_obj) if enabled_value is not None: if enabled_value: self._add_enabled(object_id) @@ -2271,6 +2267,4 @@ class EnabledEmuMixIn(BaseLdap): ref['enabled'] = enabled_value return ref else: - return super(EnabledEmuMixIn, self).update( - object_id, values, old_obj - ) + return super().update(object_id, values, old_obj) diff --git a/keystone/identity/backends/ldap/core.py b/keystone/identity/backends/ldap/core.py index a054bc2b69..f88ad1c2f6 100644 --- a/keystone/identity/backends/ldap/core.py +++ b/keystone/identity/backends/ldap/core.py @@ -41,7 +41,7 @@ LDAP_MATCHING_RULE_IN_CHAIN = "1.2.840.113556.1.4.1941" class Identity(base.IdentityDriverBase): def __init__(self, conf=None): - super(Identity, self).__init__() + super().__init__() if conf is None: self.conf = CONF else: @@ -256,14 +256,14 @@ class UserApi(common_ldap.EnabledEmuMixIn, common_ldap.BaseLdap): model = models.User def __init__(self, conf): - super(UserApi, self).__init__(conf) + super().__init__(conf) self.enabled_mask = conf.ldap.user_enabled_mask self.enabled_default = conf.ldap.user_enabled_default self.enabled_invert = conf.ldap.user_enabled_invert self.enabled_emulation = conf.ldap.user_enabled_emulation def _ldap_res_to_model(self, res): - obj = super(UserApi, self)._ldap_res_to_model(res) + obj = super()._ldap_res_to_model(res) if self.enabled_mask != 0: enabled = int(obj.get('enabled', self.enabled_default)) obj['enabled'] = (enabled & self.enabled_mask) != self.enabled_mask @@ -303,7 +303,7 @@ class UserApi(common_ldap.EnabledEmuMixIn, common_ldap.BaseLdap): values['enabled'] = not orig_enabled else: values['enabled'] = self.enabled_default - values = super(UserApi, self).create(values) + values = super().create(values) if self.enabled_mask or ( self.enabled_invert and not self.enabled_emulation ): @@ -312,7 +312,7 @@ class UserApi(common_ldap.EnabledEmuMixIn, common_ldap.BaseLdap): return values def get(self, user_id, ldap_filter=None): - obj = super(UserApi, self).get(user_id, ldap_filter=ldap_filter) + obj = super().get(user_id, ldap_filter=ldap_filter) obj['options'] = {} # options always empty return obj @@ -324,9 +324,7 @@ class UserApi(common_ldap.EnabledEmuMixIn, common_ldap.BaseLdap): raise self.NotFound(user_id=user_id) def get_all(self, ldap_filter=None, hints=None): - objs = super(UserApi, self).get_all( - ldap_filter=ldap_filter, hints=hints - ) + objs = super().get_all(ldap_filter=ldap_filter, hints=hints) for obj in objs: obj['options'] = {} # options always empty return objs @@ -357,7 +355,7 @@ class UserApi(common_ldap.EnabledEmuMixIn, common_ldap.BaseLdap): old_obj.pop('options') if 'options' in values: values.pop('options') - values = super(UserApi, self).update(user_id, values, old_obj) + values = super().update(user_id, values, old_obj) values['options'] = {} # options always empty return values @@ -375,12 +373,12 @@ class GroupApi(common_ldap.BaseLdap): model = models.Group def _ldap_res_to_model(self, res): - model = super(GroupApi, self)._ldap_res_to_model(res) + model = super()._ldap_res_to_model(res) model['dn'] = res[0] return model def __init__(self, conf): - super(GroupApi, self).__init__(conf) + super().__init__(conf) self.group_ad_nesting = conf.ldap.group_ad_nesting self.member_attribute = ( conf.ldap.group_member_attribute or self.DEFAULT_MEMBER_ATTRIBUTE @@ -392,17 +390,17 @@ class GroupApi(common_ldap.BaseLdap): data['id'] = uuid.uuid4().hex if 'description' in data and data['description'] in ['', None]: data.pop('description') - return super(GroupApi, self).create(data) + return super().create(data) def update(self, group_id, values): old_obj = self.get(group_id) - return super(GroupApi, self).update(group_id, values, old_obj) + return super().update(group_id, values, old_obj) def add_user(self, user_dn, group_id, user_id): group_ref = self.get(group_id) group_dn = group_ref['dn'] try: - super(GroupApi, self).add_member(user_dn, group_dn) + super().add_member(user_dn, group_dn) except exception.Conflict: raise exception.Conflict( _('User %(user_id)s is already a member of group %(group_id)s') @@ -413,13 +411,13 @@ class GroupApi(common_ldap.BaseLdap): """Return a list of groups for which the user is a member.""" user_dn_esc = ldap.filter.escape_filter_chars(user_dn) if self.group_ad_nesting: - query = '(%s:%s:=%s)' % ( + query = '({}:{}:={})'.format( self.member_attribute, LDAP_MATCHING_RULE_IN_CHAIN, user_dn_esc, ) else: - query = '(%s=%s)' % (self.member_attribute, user_dn_esc) + query = f'({self.member_attribute}={user_dn_esc})' return self.get_all(query) def list_user_groups_filtered(self, user_dn, hints): @@ -429,12 +427,12 @@ class GroupApi(common_ldap.BaseLdap): # Hardcoded to member as that is how the Matching Rule in Chain # Mechanisms expects it. The member_attribute might actually be # member_of elsewhere, so they are not the same. - query = '(member:%s:=%s)' % ( + query = '(member:{}:={})'.format( LDAP_MATCHING_RULE_IN_CHAIN, user_dn_esc, ) else: - query = '(%s=%s)' % (self.member_attribute, user_dn_esc) + query = f'({self.member_attribute}={user_dn_esc})' return self.get_all_filtered(hints, query) def list_group_users(self, group_id): diff --git a/keystone/identity/backends/sql.py b/keystone/identity/backends/sql.py index 46b09380d6..4ac19ac3dc 100644 --- a/keystone/identity/backends/sql.py +++ b/keystone/identity/backends/sql.py @@ -41,7 +41,7 @@ class Identity(base.IdentityDriverBase): # config parameter to enable sql to be used as a domain-specific driver. def __init__(self, conf=None): self.conf = conf - super(Identity, self).__init__() + super().__init__() @property def is_sql(self): diff --git a/keystone/identity/backends/sql_model.py b/keystone/identity/backends/sql_model.py index 3ff2c52b3a..cf2ed8c455 100644 --- a/keystone/identity/backends/sql_model.py +++ b/keystone/identity/backends/sql_model.py @@ -258,7 +258,7 @@ class User(sql.ModelBase, sql.ModelDictMixinWithExtras): return None def to_dict(self, include_extra_dict=False): - d = super(User, self).to_dict(include_extra_dict=include_extra_dict) + d = super().to_dict(include_extra_dict=include_extra_dict) if 'default_project_id' in d and d['default_project_id'] is None: del d['default_project_id'] # NOTE(notmorgan): Eventually it may make sense to drop the empty @@ -291,7 +291,7 @@ class User(sql.ModelBase, sql.ModelDictMixinWithExtras): if opt_value is not None: opt.validator(opt_value) resource_options[opt.option_id] = opt_value - user_obj = super(User, cls).from_dict(new_dict) + user_obj = super().from_dict(new_dict) setattr(user_obj, '_resource_options', resource_options) return user_obj diff --git a/keystone/identity/core.py b/keystone/identity/core.py index 0eff2aefc9..1fa9cd078e 100644 --- a/keystone/identity/core.py +++ b/keystone/identity/core.py @@ -605,7 +605,7 @@ class Manager(manager.Manager): _GROUP = 'group' def __init__(self): - super(Manager, self).__init__(CONF.identity.driver) + super().__init__(CONF.identity.driver) self.domain_configs = DomainConfigs() notifications.register_event_callback( notifications.ACTIONS.internal, @@ -1785,7 +1785,7 @@ class MappingManager(manager.Manager): _provides_api = 'id_mapping_api' def __init__(self): - super(MappingManager, self).__init__(CONF.identity_mapping.driver) + super().__init__(CONF.identity_mapping.driver) @MEMOIZE_ID_MAPPING def _get_public_id(self, domain_id, local_id, entity_type): @@ -1851,4 +1851,4 @@ class ShadowUsersManager(manager.Manager): def __init__(self): shadow_driver = CONF.shadow_users.driver - super(ShadowUsersManager, self).__init__(shadow_driver) + super().__init__(shadow_driver) diff --git a/keystone/identity/generator.py b/keystone/identity/generator.py index b390b55843..f4f55a331e 100644 --- a/keystone/identity/generator.py +++ b/keystone/identity/generator.py @@ -31,10 +31,10 @@ class Manager(manager.Manager): _provides_api = 'id_generator_api' def __init__(self): - super(Manager, self).__init__(CONF.identity_mapping.generator) + super().__init__(CONF.identity_mapping.generator) -class IDGenerator(object, metaclass=abc.ABCMeta): +class IDGenerator(metaclass=abc.ABCMeta): """Interface description for an ID Generator provider.""" @abc.abstractmethod diff --git a/keystone/identity/mapping_backends/base.py b/keystone/identity/mapping_backends/base.py index 2fee949578..cfe4064eff 100644 --- a/keystone/identity/mapping_backends/base.py +++ b/keystone/identity/mapping_backends/base.py @@ -18,9 +18,7 @@ from keystone.common import provider_api from keystone import exception -class MappingDriverBase( - provider_api.ProviderAPIMixin, object, metaclass=abc.ABCMeta -): +class MappingDriverBase(provider_api.ProviderAPIMixin, metaclass=abc.ABCMeta): """Interface description for an ID Mapping driver.""" @abc.abstractmethod diff --git a/keystone/identity/mapping_backends/mapping.py b/keystone/identity/mapping_backends/mapping.py index dddf36c116..ca738188ce 100644 --- a/keystone/identity/mapping_backends/mapping.py +++ b/keystone/identity/mapping_backends/mapping.py @@ -13,6 +13,6 @@ # under the License. -class EntityType(object): +class EntityType: USER = 'user' GROUP = 'group' diff --git a/keystone/identity/shadow_backends/base.py b/keystone/identity/shadow_backends/base.py index 4106a242b3..1ec911b998 100644 --- a/keystone/identity/shadow_backends/base.py +++ b/keystone/identity/shadow_backends/base.py @@ -45,7 +45,7 @@ def federated_objects_to_list(fed_ref): return list(fed.values()) -class ShadowUsersDriverBase(object, metaclass=abc.ABCMeta): +class ShadowUsersDriverBase(metaclass=abc.ABCMeta): """Interface description for an Shadow Users driver.""" @abc.abstractmethod diff --git a/keystone/limit/backends/base.py b/keystone/limit/backends/base.py index e3f2d436b3..397862f9b0 100644 --- a/keystone/limit/backends/base.py +++ b/keystone/limit/backends/base.py @@ -22,7 +22,7 @@ from keystone import exception CONF = keystone.conf.CONF -class UnifiedLimitDriverBase(object, metaclass=abc.ABCMeta): +class UnifiedLimitDriverBase(metaclass=abc.ABCMeta): def _get_list_limit(self): return CONF.unified_limit.list_limit or CONF.list_limit diff --git a/keystone/limit/backends/sql.py b/keystone/limit/backends/sql.py index 254907c54a..3062f891a8 100644 --- a/keystone/limit/backends/sql.py +++ b/keystone/limit/backends/sql.py @@ -49,7 +49,7 @@ class RegisteredLimitModel(sql.ModelBase, sql.ModelDictMixin): description = sql.Column(sql.Text()) def to_dict(self): - ref = super(RegisteredLimitModel, self).to_dict() + ref = super().to_dict() ref.pop('internal_id') return ref @@ -112,7 +112,7 @@ class LimitModel(sql.ModelBase, sql.ModelDictMixin): return RegisteredLimitModel.resource_name def to_dict(self): - ref = super(LimitModel, self).to_dict() + ref = super().to_dict() if self.registered_limit: ref['service_id'] = self.registered_limit.service_id ref['region_id'] = self.registered_limit.region_id diff --git a/keystone/limit/core.py b/keystone/limit/core.py index 1b83e335c5..3e760c9632 100644 --- a/keystone/limit/core.py +++ b/keystone/limit/core.py @@ -34,7 +34,7 @@ class Manager(manager.Manager): def __init__(self): unified_limit_driver = CONF.unified_limit.driver - super(Manager, self).__init__(unified_limit_driver) + super().__init__(unified_limit_driver) self.enforcement_model = base.load_driver( CONF.unified_limit.enforcement_model diff --git a/keystone/limit/models/base.py b/keystone/limit/models/base.py index 12e79734a8..beda0196b7 100644 --- a/keystone/limit/models/base.py +++ b/keystone/limit/models/base.py @@ -31,7 +31,7 @@ def load_driver(driver_name, *args): raise ImportError(msg % {'name': driver_name, 'namespace': namespace}) -class ModelBase(object, metaclass=abc.ABCMeta): +class ModelBase(metaclass=abc.ABCMeta): """Interface for a limit model driver.""" NAME = None diff --git a/keystone/models/receipt_model.py b/keystone/models/receipt_model.py index 3d7eddb83b..b46ceea4eb 100644 --- a/keystone/models/receipt_model.py +++ b/keystone/models/receipt_model.py @@ -26,7 +26,7 @@ LOG = log.getLogger(__name__) PROVIDERS = provider_api.ProviderAPIs -class ReceiptModel(object): +class ReceiptModel: """An object that represents a receipt emitted by keystone. This is a queryable object that other parts of keystone can use to reason @@ -121,7 +121,7 @@ class ReceiptModel(object): self.issued_at = issued_at -class _ReceiptModelHandler(object): +class _ReceiptModelHandler: identity = 125 handles = (ReceiptModel,) diff --git a/keystone/models/revoke_model.py b/keystone/models/revoke_model.py index daea2a8c27..422a0efda3 100644 --- a/keystone/models/revoke_model.py +++ b/keystone/models/revoke_model.py @@ -80,7 +80,7 @@ def blank_token_data(issued_at): return token_data -class RevokeEvent(object): +class RevokeEvent: def __init__(self, **kwargs): for k in REVOKE_KEYS: v = kwargs.get(k) @@ -287,7 +287,7 @@ def build_token_values(token): return token_values -class _RevokeEventHandler(object): +class _RevokeEventHandler: # NOTE(morganfainberg): There needs to be reserved "registry" entries set # in oslo_serialization for application-specific handlers. We picked 127 # here since it's waaaaaay far out before oslo_serialization will use it. diff --git a/keystone/models/token_model.py b/keystone/models/token_model.py index 0f48eb9d54..f43c93f84e 100644 --- a/keystone/models/token_model.py +++ b/keystone/models/token_model.py @@ -33,7 +33,7 @@ VERSIONS = frozenset([V3]) ACCESS_RULES_MIN_VERSION = 1.0 -class TokenModel(object): +class TokenModel: """An object that represents a token emitted by keystone. This is a queryable object that other parts of keystone can use to reason @@ -314,9 +314,9 @@ class TokenModel(object): effective_trust_roles = PROVIDERS.assignment_api.add_implied_roles( trust_roles ) - effective_trust_role_ids = set( - [r['role_id'] for r in effective_trust_roles] - ) + effective_trust_role_ids = { + r['role_id'] for r in effective_trust_roles + } current_effective_trustor_roles = ( PROVIDERS.assignment_api.get_roles_for_trustor_and_project( @@ -436,7 +436,7 @@ class TokenModel(object): domain_id=self.domain_id, effective=True, ) - user_roles = list(set([x['role_id'] for x in assignment_list])) + user_roles = list({x['role_id'] for x in assignment_list}) for role in app_cred_roles: if role['id'] in user_roles: @@ -561,9 +561,9 @@ class TokenModel(object): effective_trust_roles = PROVIDERS.assignment_api.add_implied_roles( refs ) - effective_trust_role_ids = set( - [r['role_id'] for r in effective_trust_roles] - ) + effective_trust_role_ids = { + r['role_id'] for r in effective_trust_roles + } current_effective_trustor_roles = ( PROVIDERS.assignment_api.get_roles_for_trustor_and_project( self.trustor['id'], self.trust.get('project_id') @@ -603,7 +603,7 @@ class TokenModel(object): self.issued_at = issued_at -class _TokenModelHandler(object): +class _TokenModelHandler: identity = 126 handles = (TokenModel,) diff --git a/keystone/notifications.py b/keystone/notifications.py index 68fe6c76e6..f98e7a65a4 100644 --- a/keystone/notifications.py +++ b/keystone/notifications.py @@ -120,7 +120,7 @@ def build_audit_initiator(): return initiator -class Audit(object): +class Audit: """Namespace for audit notification functions. This is a namespace object to contain all of the direct notification @@ -567,8 +567,8 @@ def _create_cadf_payload( target = resource.Resource(typeURI=target_uri, id=resource_id) audit_kwargs = {'resource_info': resource_id} - cadf_action = '%s.%s' % (operation, resource_type) - event_type = '%s.%s.%s' % (SERVICE, resource_type, operation) + cadf_action = f'{operation}.{resource_type}' + event_type = f'{SERVICE}.{resource_type}.{operation}' _send_audit_notification( cadf_action, @@ -577,7 +577,7 @@ def _create_cadf_payload( target, event_type, reason=reason, - **audit_kwargs + **audit_kwargs, ) @@ -625,11 +625,11 @@ def _send_notification( notifier = _get_notifier() if notifier: context = {} - event_type = '%(service)s.%(resource_type)s.%(operation)s' % { - 'service': SERVICE, - 'resource_type': resource_type, - 'operation': operation, - } + event_type = '{service}.{resource_type}.{operation}'.format( + service=SERVICE, + resource_type=resource_type, + operation=operation, + ) if _check_notification_opt_out(event_type, outcome=None): return try: @@ -685,7 +685,7 @@ def _get_request_audit_info(context, user_id=None): return initiator -class CadfNotificationWrapper(object): +class CadfNotificationWrapper: """Send CADF event notifications for various methods. This function is only used for Authentication events. Its ``action`` and @@ -703,7 +703,7 @@ class CadfNotificationWrapper(object): def __init__(self, operation): self.action = operation - self.event_type = '%s.%s' % (SERVICE, operation) + self.event_type = f'{SERVICE}.{operation}' def __call__(self, f): @functools.wraps(f) @@ -754,7 +754,7 @@ class CadfNotificationWrapper(object): return wrapper -class CadfRoleAssignmentNotificationWrapper(object): +class CadfRoleAssignmentNotificationWrapper: """Send CADF notifications for ``role_assignment`` methods. This function is only used for role assignment events. Its ``action`` and @@ -773,8 +773,8 @@ class CadfRoleAssignmentNotificationWrapper(object): ROLE_ASSIGNMENT = 'role_assignment' def __init__(self, operation): - self.action = '%s.%s' % (operation, self.ROLE_ASSIGNMENT) - self.event_type = '%s.%s.%s' % ( + self.action = f'{operation}.{self.ROLE_ASSIGNMENT}' + self.event_type = '{}.{}.{}'.format( SERVICE, self.ROLE_ASSIGNMENT, operation, @@ -849,7 +849,7 @@ class CadfRoleAssignmentNotificationWrapper(object): taxonomy.OUTCOME_FAILURE, target, self.event_type, - **audit_kwargs + **audit_kwargs, ) raise else: @@ -859,7 +859,7 @@ class CadfRoleAssignmentNotificationWrapper(object): taxonomy.OUTCOME_SUCCESS, target, self.event_type, - **audit_kwargs + **audit_kwargs, ) return result @@ -900,11 +900,11 @@ def send_saml_audit_notification( groups=group_ids, ) initiator.credential = cred - event_type = '%s.%s' % (SERVICE, action) + event_type = f'{SERVICE}.{action}' _send_audit_notification(action, initiator, outcome, target, event_type) -class _CatalogHelperObj(provider_api.ProviderAPIMixin, object): +class _CatalogHelperObj(provider_api.ProviderAPIMixin): """A helper object to allow lookups of identity service id.""" diff --git a/keystone/oauth1/backends/base.py b/keystone/oauth1/backends/base.py index e8f8ad89d8..67c42df46a 100644 --- a/keystone/oauth1/backends/base.py +++ b/keystone/oauth1/backends/base.py @@ -53,7 +53,7 @@ def filter_consumer(consumer_ref): return consumer_ref -class Oauth1DriverBase(object, metaclass=abc.ABCMeta): +class Oauth1DriverBase(metaclass=abc.ABCMeta): """Interface description for an OAuth1 driver.""" @abc.abstractmethod diff --git a/keystone/oauth1/backends/sql.py b/keystone/oauth1/backends/sql.py index 04cd56bf11..5d59101568 100644 --- a/keystone/oauth1/backends/sql.py +++ b/keystone/oauth1/backends/sql.py @@ -131,7 +131,7 @@ class OAuth1(base.Oauth1DriverBase): def _delete_request_tokens(self, session, consumer_id): q = session.query(RequestToken) req_tokens = q.filter_by(consumer_id=consumer_id) - req_tokens_list = set([x.id for x in req_tokens]) + req_tokens_list = {x.id for x in req_tokens} for token_id in req_tokens_list: token_ref = self._get_request_token(session, token_id) session.delete(token_ref) @@ -139,7 +139,7 @@ class OAuth1(base.Oauth1DriverBase): def _delete_access_tokens(self, session, consumer_id): q = session.query(AccessToken) acc_tokens = q.filter_by(consumer_id=consumer_id) - acc_tokens_list = set([x.id for x in acc_tokens]) + acc_tokens_list = {x.id for x in acc_tokens} for token_id in acc_tokens_list: token_ref = self._get_access_token(session, token_id) session.delete(token_ref) diff --git a/keystone/oauth1/core.py b/keystone/oauth1/core.py index ce7cb67218..8815946e3d 100644 --- a/keystone/oauth1/core.py +++ b/keystone/oauth1/core.py @@ -37,7 +37,7 @@ RequestTokenEndpoint = oauth1.RequestTokenEndpoint oRequest = oauthlib.common.Request -class Token(object): +class Token: def __init__(self, key, secret): self.key = key self.secret = secret @@ -130,7 +130,7 @@ class Manager(manager.Manager): _CONSUMER = "OS-OAUTH1:consumer" def __init__(self): - super(Manager, self).__init__(CONF.oauth1.driver) + super().__init__(CONF.oauth1.driver) def create_consumer(self, consumer_ref, initiator=None): consumer_ref = consumer_ref.copy() diff --git a/keystone/policy/backends/base.py b/keystone/policy/backends/base.py index fc661dacdf..c3da9fce2d 100644 --- a/keystone/policy/backends/base.py +++ b/keystone/policy/backends/base.py @@ -19,7 +19,7 @@ from keystone import exception CONF = keystone.conf.CONF -class PolicyDriverBase(object, metaclass=abc.ABCMeta): +class PolicyDriverBase(metaclass=abc.ABCMeta): def _get_list_limit(self): return CONF.policy.list_limit or CONF.list_limit diff --git a/keystone/policy/core.py b/keystone/policy/core.py index e4578a9954..390da101f6 100644 --- a/keystone/policy/core.py +++ b/keystone/policy/core.py @@ -37,7 +37,7 @@ class Manager(manager.Manager): _POLICY = 'policy' def __init__(self): - super(Manager, self).__init__(CONF.policy.driver) + super().__init__(CONF.policy.driver) def create_policy(self, policy_id, policy, initiator=None): ref = self.driver.create_policy(policy_id, policy) diff --git a/keystone/receipt/provider.py b/keystone/receipt/provider.py index 8bdd9208fd..423bd46b8d 100644 --- a/keystone/receipt/provider.py +++ b/keystone/receipt/provider.py @@ -66,7 +66,7 @@ class Manager(manager.Manager): _provides_api = 'receipt_provider_api' def __init__(self): - super(Manager, self).__init__(CONF.receipt.provider) + super().__init__(CONF.receipt.provider) self._register_callback_listeners() def _register_callback_listeners(self): diff --git a/keystone/receipt/providers/base.py b/keystone/receipt/providers/base.py index 47c8b52c17..7334495ebb 100644 --- a/keystone/receipt/providers/base.py +++ b/keystone/receipt/providers/base.py @@ -17,7 +17,7 @@ import abc from keystone import exception -class Provider(object, metaclass=abc.ABCMeta): +class Provider(metaclass=abc.ABCMeta): """Interface description for a Receipt provider.""" @abc.abstractmethod diff --git a/keystone/receipt/providers/fernet/core.py b/keystone/receipt/providers/fernet/core.py index 8a51caca5c..0ac4d9af09 100644 --- a/keystone/receipt/providers/fernet/core.py +++ b/keystone/receipt/providers/fernet/core.py @@ -28,7 +28,7 @@ CONF = keystone.conf.CONF class Provider(base.Provider): def __init__(self, *args, **kwargs): - super(Provider, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # NOTE(lbragstad): We add these checks here because if the fernet # provider is going to be used and either the `key_repository` is empty diff --git a/keystone/receipt/receipt_formatters.py b/keystone/receipt/receipt_formatters.py index e63e70208c..2ad0e38be2 100644 --- a/keystone/receipt/receipt_formatters.py +++ b/keystone/receipt/receipt_formatters.py @@ -39,7 +39,7 @@ TIMESTAMP_START = 1 TIMESTAMP_END = 9 -class ReceiptFormatter(object): +class ReceiptFormatter: """Packs and unpacks payloads into receipts for transport.""" @property @@ -181,7 +181,7 @@ class ReceiptFormatter(object): return (user_id, methods, issued_at, expires_at) -class ReceiptPayload(object): +class ReceiptPayload: @classmethod def assemble(cls, user_id, methods, expires_at): diff --git a/keystone/resource/backends/base.py b/keystone/resource/backends/base.py index ceabf87e8b..98a6207f5a 100644 --- a/keystone/resource/backends/base.py +++ b/keystone/resource/backends/base.py @@ -37,7 +37,7 @@ def get_project_from_domain(domain_ref): NULL_DOMAIN_ID = '<>' -class ResourceDriverBase(object, metaclass=abc.ABCMeta): +class ResourceDriverBase(metaclass=abc.ABCMeta): def _get_list_limit(self): return CONF.resource.list_limit or CONF.list_limit diff --git a/keystone/resource/backends/sql.py b/keystone/resource/backends/sql.py index 54e262f7f2..a2f008d143 100644 --- a/keystone/resource/backends/sql.py +++ b/keystone/resource/backends/sql.py @@ -136,7 +136,7 @@ class Resource(base.ResourceDriverBase): with sql.session_for_read() as session: children = self._get_children(session, [project_id]) subtree = [] - examined = set([project_id]) + examined = {project_id} while children: children_ids = set() for ref in children: diff --git a/keystone/resource/backends/sql_model.py b/keystone/resource/backends/sql_model.py index caef6928cd..d341181d59 100644 --- a/keystone/resource/backends/sql_model.py +++ b/keystone/resource/backends/sql_model.py @@ -28,7 +28,7 @@ class Project(sql.ModelBase, sql.ModelDictMixinWithExtras): # to represent null, as defined in NULL_DOMAIN_ID above. def to_dict(self, include_extra_dict=False): - d = super(Project, self).to_dict(include_extra_dict=include_extra_dict) + d = super().to_dict(include_extra_dict=include_extra_dict) if d['domain_id'] == base.NULL_DOMAIN_ID: d['domain_id'] = None # NOTE(notmorgan): Eventually it may make sense to drop the empty @@ -49,7 +49,7 @@ class Project(sql.ModelBase, sql.ModelDictMixinWithExtras): if opt_value is not None: opt.validator(opt_value) resource_options[opt.option_id] = opt_value - project_obj = super(Project, cls).from_dict(new_dict) + project_obj = super().from_dict(new_dict) setattr(project_obj, '_resource_options', resource_options) return project_obj @@ -118,7 +118,7 @@ class Project(sql.ModelBase, sql.ModelDictMixinWithExtras): class ProjectTag(sql.ModelBase, sql.ModelDictMixin): def to_dict(self): - d = super(ProjectTag, self).to_dict() + d = super().to_dict() return d __tablename__ = 'project_tag' diff --git a/keystone/resource/config_backends/base.py b/keystone/resource/config_backends/base.py index f3225880ef..cf5b43a974 100644 --- a/keystone/resource/config_backends/base.py +++ b/keystone/resource/config_backends/base.py @@ -17,7 +17,7 @@ import abc from keystone import exception -class DomainConfigDriverBase(object, metaclass=abc.ABCMeta): +class DomainConfigDriverBase(metaclass=abc.ABCMeta): """Interface description for a Domain Config driver.""" @abc.abstractmethod diff --git a/keystone/resource/config_backends/sql.py b/keystone/resource/config_backends/sql.py index 3e8c20a297..facc25cd9d 100644 --- a/keystone/resource/config_backends/sql.py +++ b/keystone/resource/config_backends/sql.py @@ -24,7 +24,7 @@ class WhiteListedConfig(sql.ModelBase, sql.ModelDictMixin): value = sql.Column(sql.JsonBlob(), nullable=False) def to_dict(self): - d = super(WhiteListedConfig, self).to_dict() + d = super().to_dict() d.pop('domain_id') return d @@ -37,7 +37,7 @@ class SensitiveConfig(sql.ModelBase, sql.ModelDictMixin): value = sql.Column(sql.JsonBlob(), nullable=False) def to_dict(self): - d = super(SensitiveConfig, self).to_dict() + d = super().to_dict() d.pop('domain_id') return d diff --git a/keystone/resource/core.py b/keystone/resource/core.py index 00b9e7f6f0..55561ff108 100644 --- a/keystone/resource/core.py +++ b/keystone/resource/core.py @@ -54,7 +54,7 @@ class Manager(manager.Manager): def __init__(self): resource_driver = CONF.resource.driver - super(Manager, self).__init__(resource_driver) + super().__init__(resource_driver) def _get_hierarchy_depth(self, parents_list): return len(parents_list) + 1 @@ -625,7 +625,7 @@ class Manager(manager.Manager): user_projects = PROVIDERS.assignment_api.list_projects_for_user( user_id ) - user_projects_ids = set([proj['id'] for proj in user_projects]) + user_projects_ids = {proj['id'] for proj in user_projects} # Keep only the projects present in user_projects return [ proj for proj in projects_list if proj['id'] in user_projects_ids @@ -1229,7 +1229,7 @@ class DomainConfigManager(manager.Manager): sensitive_options = {'identity': [], 'ldap': ['password']} def __init__(self): - super(DomainConfigManager, self).__init__(CONF.domain_config.driver) + super().__init__(CONF.domain_config.driver) def _assert_valid_config(self, config): """Ensure the options in the config are valid. diff --git a/keystone/revoke/backends/base.py b/keystone/revoke/backends/base.py index c100ca5936..641092fa9e 100644 --- a/keystone/revoke/backends/base.py +++ b/keystone/revoke/backends/base.py @@ -32,7 +32,7 @@ def revoked_before_cutoff_time(): return oldest -class RevokeDriverBase(object, metaclass=abc.ABCMeta): +class RevokeDriverBase(metaclass=abc.ABCMeta): """Interface for recording and reporting revocation events.""" @abc.abstractmethod diff --git a/keystone/revoke/core.py b/keystone/revoke/core.py index 45d67b5650..4d12abd486 100644 --- a/keystone/revoke/core.py +++ b/keystone/revoke/core.py @@ -44,7 +44,7 @@ class Manager(manager.Manager): _provides_api = 'revoke_api' def __init__(self): - super(Manager, self).__init__(CONF.revoke.driver) + super().__init__(CONF.revoke.driver) self._register_listeners() self.model = revoke_model diff --git a/keystone/server/flask/common.py b/keystone/server/flask/common.py index 9a70fc45ca..bbb738f10c 100644 --- a/keystone/server/flask/common.py +++ b/keystone/server/flask/common.py @@ -180,7 +180,7 @@ def _remove_content_type_on_204(resp): return resp -class APIBase(object, metaclass=abc.ABCMeta): +class APIBase(metaclass=abc.ABCMeta): @property @abc.abstractmethod @@ -373,12 +373,12 @@ class APIBase(object, metaclass=abc.ABCMeta): # sure to use the correct path-key for ID. member_id_key = getattr(r, '_id_path_param_name_override') else: - member_id_key = '%(member_key)s_id' % {'member_key': m_key} + member_id_key = f'{m_key}_id' - entity_path = '/%(collection)s/' % { - 'collection': c_key, - 'member': member_id_key, - } + entity_path = '/{collection}/'.format( + collection=c_key, + member=member_id_key, + ) # NOTE(morgan): The json-home form of the entity path is different # from the flask-url routing form. Must also include the prefix jh_e_path = _URL_SUBST.sub( @@ -419,10 +419,10 @@ class APIBase(object, metaclass=abc.ABCMeta): ) # NOTE(morgan): Add the prefix explicitly for JSON Home documents # to the collection path. - href_val = '%(pfx)s%(collection_path)s' % { - 'pfx': self._api_url_prefix, - 'collection_path': collection_path, - } + href_val = '{pfx}{collection_path}'.format( + pfx=self._api_url_prefix, + collection_path=collection_path, + ) # If additional parameters exist in the URL, add them to the # href-vars dict. @@ -522,10 +522,10 @@ class APIBase(object, metaclass=abc.ABCMeta): resource_data = {} # NOTE(morgan): JSON Home form of the URL is different # from FLASK, do the conversion here. - conv_url = '%(pfx)s/%(url)s' % { - 'url': _URL_SUBST.sub('{\\1}', r.url).lstrip('/'), - 'pfx': self._api_url_prefix, - } + conv_url = '{pfx}/{url}'.format( + url=_URL_SUBST.sub('{\\1}', r.url).lstrip('/'), + pfx=self._api_url_prefix, + ) if r.json_home_data.path_vars: resource_data['href-template'] = conv_url @@ -650,7 +650,7 @@ class APIBase(object, metaclass=abc.ABCMeta): return inst -class _AttributeRaisesError(object): +class _AttributeRaisesError: # NOTE(morgan): This is a special case class that exists to effectively # create a @classproperty style function. We use __get__ to raise the # exception. diff --git a/keystone/server/flask/request_processing/middleware/auth_context.py b/keystone/server/flask/request_processing/middleware/auth_context.py index 7fe7e9913e..a72fe9b666 100644 --- a/keystone/server/flask/request_processing/middleware/auth_context.py +++ b/keystone/server/flask/request_processing/middleware/auth_context.py @@ -50,7 +50,7 @@ CONF = keystone.conf.CONF LOG = log.getLogger(__name__) -JSON_ENCODE_CONTENT_TYPES = set(['application/json', 'application/json-home']) +JSON_ENCODE_CONTENT_TYPES = {'application/json', 'application/json-home'} # minimum access rules support ACCESS_RULES_MIN_VERSION = token_model.ACCESS_RULES_MIN_VERSION @@ -240,9 +240,7 @@ class AuthContextMiddleware( kwargs_to_fetch_token = True def __init__(self, app): - super(AuthContextMiddleware, self).__init__( - app, log=LOG, service_type='identity' - ) + super().__init__(app, log=LOG, service_type='identity') self.token = None def fetch_token(self, token, **kwargs): @@ -364,7 +362,7 @@ class AuthContextMiddleware( request.environ[CONTEXT_ENV] = context_env if not context_env.get('is_admin', False): - resp = super(AuthContextMiddleware, self).process_request(request) + resp = super().process_request(request) if resp: return resp if ( diff --git a/keystone/server/flask/request_processing/middleware/url_normalize.py b/keystone/server/flask/request_processing/middleware/url_normalize.py index faf9824903..c2ba4be89e 100644 --- a/keystone/server/flask/request_processing/middleware/url_normalize.py +++ b/keystone/server/flask/request_processing/middleware/url_normalize.py @@ -13,7 +13,7 @@ # Flask Native URL Normalizing Middleware -class URLNormalizingMiddleware(object): +class URLNormalizingMiddleware: """Middleware filter to handle URL normalization.""" # NOTE(morgan): This must be a middleware as changing 'PATH_INFO' after diff --git a/keystone/tests/common/auth.py b/keystone/tests/common/auth.py index c5dd62250b..be7ef1e499 100644 --- a/keystone/tests/common/auth.py +++ b/keystone/tests/common/auth.py @@ -13,7 +13,7 @@ from keystone.i18n import _ -class AuthTestMixin(object): +class AuthTestMixin: """To hold auth building helper functions.""" def _build_auth_scope( diff --git a/keystone/tests/functional/core.py b/keystone/tests/functional/core.py index bcf9dd552f..26b75ece0d 100644 --- a/keystone/tests/functional/core.py +++ b/keystone/tests/functional/core.py @@ -45,7 +45,7 @@ class BaseTestCase(testtools.TestCase, common_auth.AuthTestMixin): self.project_name = os.environ.get('KSTEST_PROJECT_NAME') self.project_domain_id = os.environ.get('KSTEST_PROJECT_DOMAIN_ID') - super(BaseTestCase, self).setUp() + super().setUp() def _http_headers(self, token=None): headers = {'content-type': 'application/json'} diff --git a/keystone/tests/hacking/checks.py b/keystone/tests/hacking/checks.py index cbdb40c2c4..ab3c7c5835 100644 --- a/keystone/tests/hacking/checks.py +++ b/keystone/tests/hacking/checks.py @@ -93,7 +93,7 @@ class CheckForMutableDefaultArgs(BaseASTChecker): if isinstance(arg, self.MUTABLES): self.add_error(arg) - super(CheckForMutableDefaultArgs, self).generic_visit(node) + super().generic_visit(node) @core.flake8ext @@ -139,7 +139,7 @@ class CheckForTranslationIssues(BaseASTChecker): } def __init__(self, tree, filename): - super(CheckForTranslationIssues, self).__init__(tree, filename) + super().__init__(tree, filename) self.logger_names = [] self.logger_module_names = [] @@ -171,13 +171,13 @@ class CheckForTranslationIssues(BaseASTChecker): def visit_Import(self, node): for alias in node.names: self._filter_imports(alias.name, alias) - return super(CheckForTranslationIssues, self).generic_visit(node) + return super().generic_visit(node) def visit_ImportFrom(self, node): for alias in node.names: - full_name = '%s.%s' % (node.module, alias.name) + full_name = f'{node.module}.{alias.name}' self._filter_imports(full_name, alias) - return super(CheckForTranslationIssues, self).generic_visit(node) + return super().generic_visit(node) def _find_name(self, node): """Return the fully qualified name or a Name or Attribute.""" @@ -220,7 +220,7 @@ class CheckForTranslationIssues(BaseASTChecker): node.targets[0], attr_node_types ): # say no to: "x, y = ..." - return super(CheckForTranslationIssues, self).generic_visit(node) + return super().generic_visit(node) target_name = self._find_name(node.targets[0]) @@ -239,7 +239,7 @@ class CheckForTranslationIssues(BaseASTChecker): if not isinstance(node.value, ast.Call): # node.value must be a call to getLogger self.assignments.pop(target_name, None) - return super(CheckForTranslationIssues, self).generic_visit(node) + return super().generic_visit(node) # is this a call to an i18n function? if ( @@ -247,14 +247,14 @@ class CheckForTranslationIssues(BaseASTChecker): and node.value.func.id in self.i18n_names ): self.assignments[target_name] = node.value.func.id - return super(CheckForTranslationIssues, self).generic_visit(node) + return super().generic_visit(node) if not isinstance(node.value.func, ast.Attribute) or not isinstance( node.value.func.value, attr_node_types ): # function must be an attribute on an object like # logging.getLogger - return super(CheckForTranslationIssues, self).generic_visit(node) + return super().generic_visit(node) object_name = self._find_name(node.value.func.value) func_name = node.value.func.attr @@ -265,7 +265,7 @@ class CheckForTranslationIssues(BaseASTChecker): ): self.logger_names.append(target_name) - return super(CheckForTranslationIssues, self).generic_visit(node) + return super().generic_visit(node) def visit_Call(self, node): """Look for the 'LOG.*' calls.""" @@ -278,9 +278,7 @@ class CheckForTranslationIssues(BaseASTChecker): obj_name = self._find_name(node.func.value) method_name = node.func.attr else: # could be Subscript, Call or many more - return super(CheckForTranslationIssues, self).generic_visit( - node - ) + return super().generic_visit(node) # if dealing with a logger the method can't be "warn" if obj_name in self.logger_names and method_name == 'warn': @@ -292,19 +290,15 @@ class CheckForTranslationIssues(BaseASTChecker): obj_name not in self.logger_names or method_name not in self.TRANS_HELPER_MAP ): - return super(CheckForTranslationIssues, self).generic_visit( - node - ) + return super().generic_visit(node) # the call must have arguments if not node.args: - return super(CheckForTranslationIssues, self).generic_visit( - node - ) + return super().generic_visit(node) self._process_log_messages(node) - return super(CheckForTranslationIssues, self).generic_visit(node) + return super().generic_visit(node) def _process_log_messages(self, node): msg = node.args[0] # first arg to a logging method is the msg diff --git a/keystone/tests/protection/v3/test_access_rules.py b/keystone/tests/protection/v3/test_access_rules.py index 64b3ef4caf..26cfe6f7b9 100644 --- a/keystone/tests/protection/v3/test_access_rules.py +++ b/keystone/tests/protection/v3/test_access_rules.py @@ -26,7 +26,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _UserAccessRuleTests(object): +class _UserAccessRuleTests: """Test cases for anyone that has a valid user token.""" def test_user_can_get_their_access_rules(self): @@ -50,7 +50,7 @@ class _UserAccessRuleTests(object): app_cred ) with self.test_client() as c: - path = '/v3/users/%s/access_rules/%s' % ( + path = '/v3/users/{}/access_rules/{}'.format( self.user_id, app_cred['access_rules'][0]['id'], ) @@ -106,14 +106,14 @@ class _UserAccessRuleTests(object): app_cred['id'] ) with self.test_client() as c: - path = '/v3/users/%s/access_rules/%s' % ( + path = '/v3/users/{}/access_rules/{}'.format( self.user_id, access_rule_id, ) c.delete(path, headers=self.headers) -class _ProjectUsersTests(object): +class _ProjectUsersTests: """Users who have project role authorization observe the same behavior.""" def test_user_cannot_get_access_rules_for_other_users(self): @@ -149,7 +149,7 @@ class _ProjectUsersTests(object): app_cred ) with self.test_client() as c: - path = '/v3/users/%s/access_rules/%s' % ( + path = '/v3/users/{}/access_rules/{}'.format( user['id'], access_rule_id, ) @@ -253,7 +253,7 @@ class _ProjectUsersTests(object): app_cred['id'] ) with self.test_client() as c: - path = '/v3/users/%s/access_rules/%s' % ( + path = '/v3/users/{}/access_rules/{}'.format( user['id'], access_rule_id, ) @@ -275,7 +275,7 @@ class _ProjectUsersTests(object): ) -class _SystemUserAccessRuleTests(object): +class _SystemUserAccessRuleTests: """Tests that are common across all system users.""" def test_user_can_list_access_rules_for_other_users(self): @@ -335,7 +335,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -397,7 +397,7 @@ class SystemReaderTests( app_cred['id'] ) with self.test_client() as c: - path = '/v3/users/%s/access_rules/%s' % ( + path = '/v3/users/{}/access_rules/{}'.format( user['id'], access_rule_id, ) @@ -426,7 +426,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -488,7 +488,7 @@ class SystemMemberTests( app_cred['id'] ) with self.test_client() as c: - path = '/v3/users/%s/access_rules/%s' % ( + path = '/v3/users/{}/access_rules/{}'.format( user['id'], access_rule_id, ) @@ -499,7 +499,7 @@ class SystemMemberTests( ) with self.test_client() as c: - path = '/v3/users/%s/access_rules/%s' % ( + path = '/v3/users/{}/access_rules/{}'.format( user['id'], access_rule_id, ) @@ -528,7 +528,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -585,7 +585,7 @@ class SystemAdminTests( ) with self.test_client() as c: - path = '/v3/users/%s/access_rules/%s' % ( + path = '/v3/users/{}/access_rules/{}'.format( user['id'], access_rule_id, ) @@ -611,7 +611,7 @@ class ProjectReaderTests( ): def setUp(self): - super(ProjectReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -654,7 +654,7 @@ class ProjectMemberTests( ): def setUp(self): - super(ProjectMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -697,7 +697,7 @@ class ProjectAdminTests( ): def setUp(self): - super(ProjectAdminTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) diff --git a/keystone/tests/protection/v3/test_application_credential.py b/keystone/tests/protection/v3/test_application_credential.py index d45a3f244c..664c3f5a2c 100644 --- a/keystone/tests/protection/v3/test_application_credential.py +++ b/keystone/tests/protection/v3/test_application_credential.py @@ -67,7 +67,7 @@ class _TestAppCredBase(base_classes.TestCaseWithBootstrap): return app_cred_data def setUp(self): - super(_TestAppCredBase, self).setUp() + super().setUp() # create a user and project for app cred testing new_user_ref = unit.new_user_ref( @@ -122,7 +122,7 @@ class _TestAppCredBase(base_classes.TestCaseWithBootstrap): f.write(jsonutils.dumps(overridden_policies)) -class _DomainAndProjectUserTests(object): +class _DomainAndProjectUserTests: """Domain and project user tests. Domain and project users should not be able to manage application @@ -208,7 +208,7 @@ class _DomainAndProjectUserTests(object): ) -class _SystemUserAndOwnerTests(object): +class _SystemUserAndOwnerTests: """Common default functionality for all system users and owner.""" def test_user_can_list_application_credentials(self): @@ -291,7 +291,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -328,7 +328,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -365,7 +365,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -393,7 +393,7 @@ class OwnerTests( ): def setUp(self): - super(OwnerTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) @@ -509,7 +509,7 @@ class DomainAdminTests( ): def setUp(self): - super(DomainAdminTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) @@ -552,7 +552,7 @@ class DomainReaderTests( ): def setUp(self): - super(DomainReaderTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) @@ -595,7 +595,7 @@ class DomainMemberTests( ): def setUp(self): - super(DomainMemberTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) @@ -638,7 +638,7 @@ class ProjectAdminTests( ): def setUp(self): - super(ProjectAdminTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) @@ -682,7 +682,7 @@ class ProjectReaderTests( ): def setUp(self): - super(ProjectReaderTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) @@ -726,7 +726,7 @@ class ProjectMemberTests( ): def setUp(self): - super(ProjectMemberTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) diff --git a/keystone/tests/protection/v3/test_assignment.py b/keystone/tests/protection/v3/test_assignment.py index 9da31ddb87..cbb36911f8 100644 --- a/keystone/tests/protection/v3/test_assignment.py +++ b/keystone/tests/protection/v3/test_assignment.py @@ -29,7 +29,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _AssignmentTestUtilities(object): +class _AssignmentTestUtilities: """Useful utilities for setting up test assignments and assertions.""" def _setup_test_role_assignments(self): @@ -119,7 +119,7 @@ class _AssignmentTestUtilities(object): return assignments -class _SystemUserTests(object): +class _SystemUserTests: """Common functionality for system users regardless of default role.""" def test_user_can_list_all_role_assignments_in_the_deployment(self): @@ -765,7 +765,7 @@ class _SystemUserTests(object): self.assertIn(assignment, expected) -class _DomainUserTests(object): +class _DomainUserTests: """Common functionality for domain users.""" def _setup_test_role_assignments_for_domain(self): @@ -1104,7 +1104,7 @@ class _DomainUserTests(object): ) -class _ProjectUserTests(object): +class _ProjectUserTests: def test_user_cannot_list_all_assignments_in_their_project(self): with self.test_client() as c: @@ -1195,7 +1195,7 @@ class _ProjectUserTests(object): ) -class _ProjectReaderMemberTests(object): +class _ProjectReaderMemberTests: def test_user_cannot_list_assignments_for_subtree(self): user = PROVIDERS.identity_api.create_user( unit.new_user_ref(domain_id=self.domain_id) @@ -1230,7 +1230,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -1273,7 +1273,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -1316,7 +1316,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -1346,7 +1346,7 @@ class DomainReaderTests( ): def setUp(self): - super(DomainReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -1393,7 +1393,7 @@ class DomainMemberTests( ): def setUp(self): - super(DomainMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -1460,7 +1460,7 @@ class DomainAdminTests( f.write(jsonutils.dumps(overridden_policies)) def setUp(self): - super(DomainAdminTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) self.policy_file_name = self.policy_file.file_name @@ -1515,7 +1515,7 @@ class ProjectReaderTests( ): def setUp(self): - super(ProjectReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -1569,7 +1569,7 @@ class ProjectMemberTests( ): def setUp(self): - super(ProjectMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -1622,7 +1622,7 @@ class ProjectAdminTests( ): def setUp(self): - super(ProjectAdminTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) self.policy_file_name = self.policy_file.file_name diff --git a/keystone/tests/protection/v3/test_consumer.py b/keystone/tests/protection/v3/test_consumer.py index e7c3373fc0..274bfe919d 100644 --- a/keystone/tests/protection/v3/test_consumer.py +++ b/keystone/tests/protection/v3/test_consumer.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserOauth1ConsumerTests(object): +class _SystemUserOauth1ConsumerTests: """Common default functionality for all system users.""" def test_user_can_get_consumer(self): @@ -41,7 +41,7 @@ class _SystemUserOauth1ConsumerTests(object): c.get('/v3/OS-OAUTH1/consumers', headers=self.headers) -class _SystemReaderAndMemberOauth1ConsumerTests(object): +class _SystemReaderAndMemberOauth1ConsumerTests: def test_user_cannot_create_consumer(self): with self.test_client() as c: @@ -80,7 +80,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -115,7 +115,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -149,7 +149,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) diff --git a/keystone/tests/protection/v3/test_credentials.py b/keystone/tests/protection/v3/test_credentials.py index 0074089790..f2c03420d3 100644 --- a/keystone/tests/protection/v3/test_credentials.py +++ b/keystone/tests/protection/v3/test_credentials.py @@ -28,7 +28,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _UserCredentialTests(object): +class _UserCredentialTests: """Test cases for anyone that has a valid user token.""" def test_user_can_create_credentials_for_themselves(self): @@ -147,7 +147,7 @@ class _UserCredentialTests(object): c.delete(path, headers=self.headers) -class _ProjectUsersTests(object): +class _ProjectUsersTests: """Users who have project role authorization observe the same behavior.""" def test_user_cannot_get_credentials_for_other_users(self): @@ -444,7 +444,7 @@ class _ProjectUsersTests(object): ) -class _SystemUserCredentialTests(object): +class _SystemUserCredentialTests: """Tests that are common across all system users.""" def test_user_can_list_credentials_for_other_users(self): @@ -599,7 +599,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -759,7 +759,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -919,7 +919,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -1063,7 +1063,7 @@ class ProjectReaderTests( ): def setUp(self): - super(ProjectReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -1106,7 +1106,7 @@ class ProjectMemberTests( ): def setUp(self): - super(ProjectMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -1149,7 +1149,7 @@ class ProjectAdminTests( ): def setUp(self): - super(ProjectAdminTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) @@ -1206,7 +1206,7 @@ class ProjectReaderTestsEnforceScopeFalse( ): def setUp(self): - super(ProjectReaderTestsEnforceScopeFalse, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=False) @@ -1249,7 +1249,7 @@ class ProjectMemberTestsEnforceScopeFalse( ): def setUp(self): - super(ProjectMemberTestsEnforceScopeFalse, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=False) @@ -1292,7 +1292,7 @@ class ProjectAdminTestsEnforceScopeFalse( ): def setUp(self): - super(ProjectAdminTestsEnforceScopeFalse, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=False) diff --git a/keystone/tests/protection/v3/test_domain_config.py b/keystone/tests/protection/v3/test_domain_config.py index b4b264b54d..9d97f0f161 100644 --- a/keystone/tests/protection/v3/test_domain_config.py +++ b/keystone/tests/protection/v3/test_domain_config.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemDomainAndProjectUserDomainConfigTests(object): +class _SystemDomainAndProjectUserDomainConfigTests: def test_user_can_get_security_compliance_domain_config(self): # Set the security compliance configuration options @@ -94,7 +94,7 @@ class _SystemDomainAndProjectUserDomainConfigTests(object): ) -class _SystemUserDomainConfigTests(object): +class _SystemUserDomainConfigTests: def test_user_can_get_domain_config(self): domain = PROVIDERS.resource_api.create_domain( @@ -264,7 +264,7 @@ class _SystemUserDomainConfigTests(object): c.get('/v3/domains/config/ldap/url/default', headers=self.headers) -class _SystemReaderMemberDomainAndProjectUserDomainConfigTests(object): +class _SystemReaderMemberDomainAndProjectUserDomainConfigTests: def test_user_cannot_create_domain_config(self): domain = PROVIDERS.resource_api.create_domain( @@ -374,7 +374,7 @@ class _SystemReaderMemberDomainAndProjectUserDomainConfigTests(object): ) -class _DomainAndProjectUserDomainConfigTests(object): +class _DomainAndProjectUserDomainConfigTests: def test_user_cannot_get_domain_config(self): domain = PROVIDERS.resource_api.create_domain( @@ -463,7 +463,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -499,7 +499,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -534,7 +534,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -690,7 +690,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -730,7 +730,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -759,7 +759,7 @@ class ProjectUserTestsWithoutEnforceScope( ): def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) diff --git a/keystone/tests/protection/v3/test_domain_roles.py b/keystone/tests/protection/v3/test_domain_roles.py index 45c7dd65ee..a3194eac61 100644 --- a/keystone/tests/protection/v3/test_domain_roles.py +++ b/keystone/tests/protection/v3/test_domain_roles.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserDomainRoleTests(object): +class _SystemUserDomainRoleTests: """Common default functionality for all system users.""" def test_user_can_list_domain_roles(self): @@ -52,7 +52,7 @@ class _SystemUserDomainRoleTests(object): self.assertEqual(role['id'], r.json['role']['id']) -class _SystemReaderAndMemberDomainRoleTests(object): +class _SystemReaderAndMemberDomainRoleTests: """Common default functionality for system readers and system members.""" def test_user_cannot_create_domain_roles(self): @@ -100,7 +100,7 @@ class _SystemReaderAndMemberDomainRoleTests(object): ) -class _DomainAndProjectUserDomainRoleTests(object): +class _DomainAndProjectUserDomainRoleTests: """Common functionality for all domain and project users.""" def test_user_cannot_list_domain_roles(self): @@ -182,7 +182,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -217,7 +217,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -251,7 +251,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -314,7 +314,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -352,7 +352,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -379,7 +379,7 @@ class ProjectUserTestsWithoutEnforceScope( ): def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) diff --git a/keystone/tests/protection/v3/test_domains.py b/keystone/tests/protection/v3/test_domains.py index b9525bddaa..8e904b0374 100644 --- a/keystone/tests/protection/v3/test_domains.py +++ b/keystone/tests/protection/v3/test_domains.py @@ -28,7 +28,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserDomainTests(object): +class _SystemUserDomainTests: def test_user_can_list_domains(self): domain = PROVIDERS.resource_api.create_domain( @@ -91,7 +91,7 @@ class _SystemUserDomainTests(object): self.assertEqual(domain['id'], r.json['domain']['id']) -class _SystemMemberAndReaderDomainTests(object): +class _SystemMemberAndReaderDomainTests: def test_user_cannot_create_a_domain(self): create = {'domain': {'name': uuid.uuid4().hex}} @@ -131,7 +131,7 @@ class _SystemMemberAndReaderDomainTests(object): ) -class _DomainReaderDomainTests(object): +class _DomainReaderDomainTests: def test_user_can_list_domains(self): # second domain, should be invisible to scoped reader @@ -198,7 +198,7 @@ class _DomainReaderDomainTests(object): self.assertEqual(0, len(r.json['domains'])) -class _ProjectUserDomainTests(object): +class _ProjectUserDomainTests: def test_user_can_get_a_domain(self): with self.test_client() as c: @@ -317,7 +317,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -354,7 +354,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -390,7 +390,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -447,7 +447,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -487,7 +487,7 @@ class ProjectReaderTests( ): def setUp(self): - super(ProjectReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -533,7 +533,7 @@ class ProjectMemberTests( ): def setUp(self): - super(ProjectMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -579,7 +579,7 @@ class ProjectAdminTests( ): def setUp(self): - super(ProjectAdminTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) self.policy_file_name = self.policy_file.file_name diff --git a/keystone/tests/protection/v3/test_ec2_credential.py b/keystone/tests/protection/v3/test_ec2_credential.py index 9b70f76bc0..a30ae58b1b 100644 --- a/keystone/tests/protection/v3/test_ec2_credential.py +++ b/keystone/tests/protection/v3/test_ec2_credential.py @@ -26,7 +26,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _UserEC2CredentialTests(object): +class _UserEC2CredentialTests: def test_user_can_get_their_ec2_credentials(self): project = unit.new_project_ref( @@ -48,7 +48,7 @@ class _UserEC2CredentialTests(object): credential_id = r.json['credential']['access'] - path = '/v3/users/%s/credentials/OS-EC2/%s' % ( + path = '/v3/users/{}/credentials/OS-EC2/{}'.format( self.user_id, credential_id, ) @@ -182,7 +182,7 @@ class _UserEC2CredentialTests(object): ) -class _SystemUserTests(object): +class _SystemUserTests: def test_user_can_get_ec2_credentials_for_others(self): user = unit.new_user_ref(domain_id=CONF.identity.default_domain_id) @@ -214,7 +214,7 @@ class _SystemUserTests(object): ) credential_id = r.json['credential']['access'] - path = '/v3/users/%s/credentials/OS-EC2/%s' % ( + path = '/v3/users/{}/credentials/OS-EC2/{}'.format( self.user_id, credential_id, ) @@ -223,7 +223,7 @@ class _SystemUserTests(object): ) -class _SystemReaderAndMemberTests(object): +class _SystemReaderAndMemberTests: def test_user_cannot_list_ec2_credentials_for_others(self): user = unit.new_user_ref(domain_id=CONF.identity.default_domain_id) @@ -267,7 +267,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -302,7 +302,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -336,7 +336,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -478,7 +478,7 @@ class ProjectAdminTests( f.write(jsonutils.dumps(overridden_policies)) def setUp(self): - super(ProjectAdminTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) diff --git a/keystone/tests/protection/v3/test_endpoint_group.py b/keystone/tests/protection/v3/test_endpoint_group.py index fb82e4caa8..b6b65fe9f5 100644 --- a/keystone/tests/protection/v3/test_endpoint_group.py +++ b/keystone/tests/protection/v3/test_endpoint_group.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserEndpointGroupsTests(object): +class _SystemUserEndpointGroupsTests: """Common default functionality for all system users.""" def test_user_can_list_endpoint_groups(self): @@ -152,7 +152,7 @@ class _SystemUserEndpointGroupsTests(object): endpoint_groups.append(endpoint_group['id']) -class _SystemReaderAndMemberUserEndpointGroupsTests(object): +class _SystemReaderAndMemberUserEndpointGroupsTests: """Common default functionality for system readers and system members.""" def test_user_cannot_create_endpoint_groups(self): @@ -245,7 +245,7 @@ class _SystemReaderAndMemberUserEndpointGroupsTests(object): ) -class _DomainAndProjectUserEndpointGroupTests(object): +class _DomainAndProjectUserEndpointGroupTests: def test_user_cannot_list_endpoint_groups(self): endpoint_group = unit.new_endpoint_group_ref( @@ -461,7 +461,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -496,7 +496,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -530,7 +530,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -646,7 +646,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -684,7 +684,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -711,7 +711,7 @@ class ProjectUserTestsWithoutEnforceScope( ): def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) diff --git a/keystone/tests/protection/v3/test_endpoints.py b/keystone/tests/protection/v3/test_endpoints.py index a32409c28c..4ea2ea2fbf 100644 --- a/keystone/tests/protection/v3/test_endpoints.py +++ b/keystone/tests/protection/v3/test_endpoints.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserEndpointTests(object): +class _SystemUserEndpointTests: """Common default functionality for all system users.""" def test_user_can_list_endpoints(self): @@ -59,7 +59,7 @@ class _SystemUserEndpointTests(object): c.get('/v3/endpoints/%s' % endpoint['id'], headers=self.headers) -class _SystemReaderAndMemberUserEndpointTests(object): +class _SystemReaderAndMemberUserEndpointTests: """Common default functionality for system readers and system members.""" def test_user_cannot_create_endpoints(self): @@ -115,7 +115,7 @@ class _SystemReaderAndMemberUserEndpointTests(object): ) -class _DomainAndProjectUserEndpointTests(object): +class _DomainAndProjectUserEndpointTests: def test_user_cannot_create_endpoints(self): create = { @@ -213,7 +213,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -248,7 +248,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -282,7 +282,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -359,7 +359,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -397,7 +397,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -424,7 +424,7 @@ class ProjectUserTestsWithoutEnforceScope( ): def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) diff --git a/keystone/tests/protection/v3/test_grants.py b/keystone/tests/protection/v3/test_grants.py index d841b327b9..27c75bba2b 100644 --- a/keystone/tests/protection/v3/test_grants.py +++ b/keystone/tests/protection/v3/test_grants.py @@ -28,7 +28,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserGrantTests(object): +class _SystemUserGrantTests: def test_can_list_grants_for_user_on_project(self): user = PROVIDERS.identity_api.create_user( @@ -48,7 +48,9 @@ class _SystemUserGrantTests(object): with self.test_client() as c: r = c.get( - '/v3/projects/%s/users/%s/roles' % (project['id'], user['id']), + '/v3/projects/{}/users/{}/roles'.format( + project['id'], user['id'] + ), headers=self.headers, ) self.assertEqual(1, len(r.json['roles'])) @@ -70,7 +72,9 @@ class _SystemUserGrantTests(object): with self.test_client() as c: r = c.get( - '/v3/domains/%s/users/%s/roles' % (domain['id'], user['id']), + '/v3/domains/{}/users/{}/roles'.format( + domain['id'], user['id'] + ), headers=self.headers, ) self.assertEqual(1, len(r.json['roles'])) @@ -116,7 +120,9 @@ class _SystemUserGrantTests(object): with self.test_client() as c: r = c.get( - '/v3/domains/%s/groups/%s/roles' % (domain['id'], group['id']), + '/v3/domains/{}/groups/{}/roles'.format( + domain['id'], group['id'] + ), headers=self.headers, ) self.assertEqual(1, len(r.json['roles'])) @@ -228,7 +234,7 @@ class _SystemUserGrantTests(object): ) -class _SystemMemberAndReaderGrantTests(object): +class _SystemMemberAndReaderGrantTests: def test_cannot_create_grant_for_user_on_project(self): user = PROVIDERS.identity_api.create_user( @@ -419,7 +425,7 @@ class _SystemMemberAndReaderGrantTests(object): ) -class _DomainUserTests(object): +class _DomainUserTests: def test_can_list_grants_for_user_on_project(self): user = PROVIDERS.identity_api.create_user( @@ -438,7 +444,9 @@ class _DomainUserTests(object): with self.test_client() as c: r = c.get( - '/v3/projects/%s/users/%s/roles' % (project['id'], user['id']), + '/v3/projects/{}/users/{}/roles'.format( + project['id'], user['id'] + ), headers=self.headers, ) self.assertEqual(1, len(r.json['roles'])) @@ -456,7 +464,9 @@ class _DomainUserTests(object): with self.test_client() as c: r = c.get( - '/v3/domains/%s/users/%s/roles' % (self.domain_id, user['id']), + '/v3/domains/{}/users/{}/roles'.format( + self.domain_id, user['id'] + ), headers=self.headers, ) self.assertEqual(1, len(r.json['roles'])) @@ -625,7 +635,9 @@ class _DomainUserTests(object): with self.test_client() as c: c.get( - '/v3/projects/%s/users/%s/roles' % (project['id'], user['id']), + '/v3/projects/{}/users/{}/roles'.format( + project['id'], user['id'] + ), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -652,7 +664,9 @@ class _DomainUserTests(object): with self.test_client() as c: c.get( - '/v3/projects/%s/users/%s/roles' % (project['id'], user['id']), + '/v3/projects/{}/users/{}/roles'.format( + project['id'], user['id'] + ), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -673,7 +687,7 @@ class _DomainUserTests(object): with self.test_client() as c: c.get( - '/v3/domains/%s/users/%s/roles' % (domain_id, user['id']), + '/v3/domains/{}/users/{}/roles'.format(domain_id, user['id']), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -694,7 +708,7 @@ class _DomainUserTests(object): with self.test_client() as c: c.get( - '/v3/domains/%s/users/%s/roles' % (domain_id, user['id']), + '/v3/domains/{}/users/{}/roles'.format(domain_id, user['id']), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -771,7 +785,9 @@ class _DomainUserTests(object): with self.test_client() as c: c.get( - '/v3/domains/%s/groups/%s/roles' % (domain_id, group['id']), + '/v3/domains/{}/groups/{}/roles'.format( + domain_id, group['id'] + ), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -792,7 +808,9 @@ class _DomainUserTests(object): with self.test_client() as c: c.get( - '/v3/domains/%s/groups/%s/roles' % (domain_id, group['id']), + '/v3/domains/{}/groups/{}/roles'.format( + domain_id, group['id'] + ), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -1679,7 +1697,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -1714,7 +1732,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -1748,7 +1766,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -1948,7 +1966,7 @@ class SystemAdminTests( ) -class _DomainMemberAndReaderTests(object): +class _DomainMemberAndReaderTests: def test_cannot_create_grant_for_user_on_project(self): user = PROVIDERS.identity_api.create_user( @@ -2145,7 +2163,7 @@ class DomainReaderTests( ): def setUp(self): - super(DomainReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -2184,7 +2202,7 @@ class DomainMemberTests( ): def setUp(self): - super(DomainMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -2221,7 +2239,7 @@ class DomainAdminTests( ): def setUp(self): - super(DomainAdminTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) self.policy_file_name = self.policy_file.file_name diff --git a/keystone/tests/protection/v3/test_groups.py b/keystone/tests/protection/v3/test_groups.py index 35c22b6374..d8441aad33 100644 --- a/keystone/tests/protection/v3/test_groups.py +++ b/keystone/tests/protection/v3/test_groups.py @@ -28,7 +28,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserGroupTests(object): +class _SystemUserGroupTests: """Common default functionality for all system users.""" def test_user_can_list_groups(self): @@ -109,7 +109,7 @@ class _SystemUserGroupTests(object): with self.test_client() as c: c.get( - '/v3/groups/%s/users/%s' % (group['id'], user['id']), + '/v3/groups/{}/users/{}'.format(group['id'], user['id']), headers=self.headers, expected_status_code=http.client.NO_CONTENT, ) @@ -123,7 +123,7 @@ class _SystemUserGroupTests(object): ) -class _SystemAndDomainMemberAndReaderGroupTests(object): +class _SystemAndDomainMemberAndReaderGroupTests: """Common default functionality for system readers and system members.""" def test_user_cannot_create_group(self): @@ -189,7 +189,7 @@ class _SystemAndDomainMemberAndReaderGroupTests(object): with self.test_client() as c: c.put( - '/v3/groups/%s/users/%s' % (group['id'], user['id']), + '/v3/groups/{}/users/{}'.format(group['id'], user['id']), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -209,7 +209,7 @@ class _SystemAndDomainMemberAndReaderGroupTests(object): with self.test_client() as c: c.delete( - '/v3/groups/%s/users/%s' % (group['id'], user['id']), + '/v3/groups/{}/users/{}'.format(group['id'], user['id']), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -223,7 +223,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -258,7 +258,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -292,7 +292,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -364,7 +364,7 @@ class SystemAdminTests( with self.test_client() as c: c.put( - '/v3/groups/%s/users/%s' % (group['id'], user['id']), + '/v3/groups/{}/users/{}'.format(group['id'], user['id']), headers=self.headers, ) @@ -383,12 +383,12 @@ class SystemAdminTests( with self.test_client() as c: c.delete( - '/v3/groups/%s/users/%s' % (group['id'], user['id']), + '/v3/groups/{}/users/{}'.format(group['id'], user['id']), headers=self.headers, ) -class _DomainUserGroupTests(object): +class _DomainUserGroupTests: def test_user_can_list_groups_in_domain(self): # second domain @@ -638,7 +638,7 @@ class DomainReaderTests( ): def setUp(self): - super(DomainReaderTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) self.policy_file_name = self.policy_file.file_name @@ -703,7 +703,7 @@ class DomainMemberTests( ): def setUp(self): - super(DomainMemberTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) self.policy_file_name = self.policy_file.file_name @@ -767,7 +767,7 @@ class DomainAdminTests( ): def setUp(self): - super(DomainAdminTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) self.policy_file_name = self.policy_file.file_name @@ -1061,7 +1061,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -1195,7 +1195,7 @@ class ProjectUserTests( with self.test_client() as c: c.get( - '/v3/groups/%s/users/%s' % (group['id'], user['id']), + '/v3/groups/{}/users/{}'.format(group['id'], user['id']), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) diff --git a/keystone/tests/protection/v3/test_identity_providers.py b/keystone/tests/protection/v3/test_identity_providers.py index 0b36013e15..80dc4d62a1 100644 --- a/keystone/tests/protection/v3/test_identity_providers.py +++ b/keystone/tests/protection/v3/test_identity_providers.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserIdentityProviderTests(object): +class _SystemUserIdentityProviderTests: """Common default functionality for all system users.""" def test_user_can_list_identity_providers(self): @@ -55,7 +55,7 @@ class _SystemUserIdentityProviderTests(object): ) -class _SystemReaderAndMemberIdentityProviderTests(object): +class _SystemReaderAndMemberIdentityProviderTests: """Common default functionality for system readers and system members.""" def test_user_cannot_create_identity_providers(self): @@ -97,7 +97,7 @@ class _SystemReaderAndMemberIdentityProviderTests(object): ) -class _DomainAndProjectUserIdentityProviderTests(object): +class _DomainAndProjectUserIdentityProviderTests: """Common functionality for all domain and project users.""" def test_user_cannot_create_identity_providers(self): @@ -171,7 +171,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -206,7 +206,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -240,7 +240,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -305,7 +305,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -343,7 +343,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -370,7 +370,7 @@ class ProjectUserTestsWithoutEnforceScope( ): def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) diff --git a/keystone/tests/protection/v3/test_implied_roles.py b/keystone/tests/protection/v3/test_implied_roles.py index eefc416cce..bcbd0c332d 100644 --- a/keystone/tests/protection/v3/test_implied_roles.py +++ b/keystone/tests/protection/v3/test_implied_roles.py @@ -23,7 +23,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _ImpliedRolesSetupMixin(object): +class _ImpliedRolesSetupMixin: def _create_test_roles(self): ref = unit.new_role_ref() role = PROVIDERS.role_api.create_role(ref['id'], ref) @@ -33,7 +33,7 @@ class _ImpliedRolesSetupMixin(object): self.implied_role_id = role['id'] -class _SystemUserImpliedRoleTests(object): +class _SystemUserImpliedRoleTests: """Common default functionality for all system users.""" def test_user_can_list_implied_roles(self): @@ -78,7 +78,7 @@ class _SystemUserImpliedRoleTests(object): self.assertEqual(3, len(r.json['role_inferences'])) -class _SystemReaderAndMemberImpliedRoleTests(object): +class _SystemReaderAndMemberImpliedRoleTests: """Common default functionality for system readers and system members.""" def test_user_cannot_create_implied_roles(self): @@ -113,7 +113,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -151,7 +151,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -188,7 +188,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) diff --git a/keystone/tests/protection/v3/test_limits.py b/keystone/tests/protection/v3/test_limits.py index 5c4e9fb05f..fd40a22e03 100644 --- a/keystone/tests/protection/v3/test_limits.py +++ b/keystone/tests/protection/v3/test_limits.py @@ -76,7 +76,7 @@ def _create_limits_and_dependencies(domain_id=None): return (project_limit_id, domain_limit_id) -class _UserLimitTests(object): +class _UserLimitTests: """Common default functionality for all users except system admins.""" def test_user_can_get_limit_model(self): @@ -172,7 +172,7 @@ class SystemReaderTests( _UserLimitTests, ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -206,7 +206,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -238,7 +238,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -335,7 +335,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -675,7 +675,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -845,5 +845,5 @@ class ProjectUserTests( class ProjectUserTestsWithoutEnforceScope(ProjectUserTests): def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.config_fixture.config(group='oslo_policy', enforce_scope=False) diff --git a/keystone/tests/protection/v3/test_mappings.py b/keystone/tests/protection/v3/test_mappings.py index a1af1b6a73..803f10f3d0 100644 --- a/keystone/tests/protection/v3/test_mappings.py +++ b/keystone/tests/protection/v3/test_mappings.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserMappingTests(object): +class _SystemUserMappingTests: """Common default functionality for all system users.""" def test_user_can_list_mappings(self): @@ -52,7 +52,7 @@ class _SystemUserMappingTests(object): ) -class _SystemReaderAndMemberUserMappingTests(object): +class _SystemReaderAndMemberUserMappingTests: """Common default functionality for system readers and system members.""" def test_user_cannot_create_mappings(self): @@ -116,7 +116,7 @@ class _SystemReaderAndMemberUserMappingTests(object): ) -class _DomainAndProjectUserMappingTests(object): +class _DomainAndProjectUserMappingTests: def test_user_cannot_create_mappings(self): create = { @@ -213,7 +213,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -308,7 +308,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -342,7 +342,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -429,7 +429,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -467,7 +467,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -494,7 +494,7 @@ class ProjectUserTestsWithoutEnforceScope( ): def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) diff --git a/keystone/tests/protection/v3/test_policy.py b/keystone/tests/protection/v3/test_policy.py index ff6585a50a..913a3c5ff9 100644 --- a/keystone/tests/protection/v3/test_policy.py +++ b/keystone/tests/protection/v3/test_policy.py @@ -26,7 +26,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserPoliciesTests(object): +class _SystemUserPoliciesTests: """Common default functionality for all system users.""" def test_user_can_list_policies(self): @@ -49,7 +49,7 @@ class _SystemUserPoliciesTests(object): c.get('/v3/policies/%s' % policy['id'], headers=self.headers) -class _SystemReaderAndMemberPoliciesTests(object): +class _SystemReaderAndMemberPoliciesTests: """Common default functionality for system readers and system members.""" def test_user_cannot_create_policy(self): @@ -100,7 +100,7 @@ class _SystemReaderAndMemberPoliciesTests(object): ) -class _DomainAndProjectUserPolicyTests(object): +class _DomainAndProjectUserPolicyTests: def test_user_cannot_list_policies(self): policy = unit.new_policy_ref() @@ -180,7 +180,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -215,7 +215,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -249,7 +249,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -318,7 +318,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -356,7 +356,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -383,7 +383,7 @@ class ProjectUserTestsWithoutEnforceScope( ): def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) diff --git a/keystone/tests/protection/v3/test_policy_association.py b/keystone/tests/protection/v3/test_policy_association.py index a1ab966bd3..16ec1bbcd1 100644 --- a/keystone/tests/protection/v3/test_policy_association.py +++ b/keystone/tests/protection/v3/test_policy_association.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserPoliciesAssociationTests(object): +class _SystemUserPoliciesAssociationTests: """Common default functionality for all system users.""" def test_user_can_check_policy_association_for_endpoint(self): @@ -137,7 +137,7 @@ class _SystemUserPoliciesAssociationTests(object): self.assertIn(endpoint['id'], endpoint_itr['id']) -class _SystemReaderAndMemberPoliciesAssociationTests(object): +class _SystemReaderAndMemberPoliciesAssociationTests: def test_user_cannot_create_policy_association_for_endpoint(self): policy = unit.new_policy_ref() @@ -239,7 +239,7 @@ class _SystemReaderAndMemberPoliciesAssociationTests(object): ) -class _DomainAndProjectUserPolicyAssociationsTests(object): +class _DomainAndProjectUserPolicyAssociationsTests: def test_user_cannot_check_policy_association_for_endpoint(self): policy = unit.new_policy_ref() @@ -457,7 +457,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -492,7 +492,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -526,7 +526,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -654,7 +654,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -692,7 +692,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -719,7 +719,7 @@ class ProjectUserTestsWithoutEnforceScope( ): def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) diff --git a/keystone/tests/protection/v3/test_project_endpoint.py b/keystone/tests/protection/v3/test_project_endpoint.py index f8f770be72..653a84cd0e 100644 --- a/keystone/tests/protection/v3/test_project_endpoint.py +++ b/keystone/tests/protection/v3/test_project_endpoint.py @@ -28,7 +28,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserProjectEndpointTests(object): +class _SystemUserProjectEndpointTests: """Common default functionality for all system users.""" def test_user_can_list_projects_for_endpoint(self): @@ -107,7 +107,7 @@ class _SystemUserProjectEndpointTests(object): self.assertIn(endpoint['id'], endpoint_itr['id']) -class _SystemReaderAndMemberProjectEndpointTests(object): +class _SystemReaderAndMemberProjectEndpointTests: def test_user_cannot_add_endpoint_to_project(self): project = PROVIDERS.resource_api.create_project( @@ -152,7 +152,7 @@ class _SystemReaderAndMemberProjectEndpointTests(object): ) -class _DomainAndProjectUserProjectEndpointTests(object): +class _DomainAndProjectUserProjectEndpointTests: def test_user_cannot_list_projects_for_endpoint(self): project = PROVIDERS.resource_api.create_project( @@ -236,7 +236,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -271,7 +271,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -305,7 +305,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -380,7 +380,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -419,7 +419,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -466,7 +466,7 @@ class ProjectUserTestsWithoutEnforceScope( f.write(jsonutils.dumps(overridden_policies)) def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) self.policy_file_name = self.policy_file.file_name diff --git a/keystone/tests/protection/v3/test_project_tags.py b/keystone/tests/protection/v3/test_project_tags.py index 2b2df64bfb..c1d6048baf 100644 --- a/keystone/tests/protection/v3/test_project_tags.py +++ b/keystone/tests/protection/v3/test_project_tags.py @@ -61,7 +61,7 @@ def _override_policy(policy_file): f.write(jsonutils.dumps(overridden_policies)) -class _SystemUserTests(object): +class _SystemUserTests: def test_user_can_get_project_tag(self): project = PROVIDERS.resource_api.create_project( uuid.uuid4().hex, @@ -73,7 +73,7 @@ class _SystemUserTests(object): with self.test_client() as c: c.get( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.NO_CONTENT, ) @@ -95,7 +95,7 @@ class _SystemUserTests(object): self.assertEqual(tag, r.json['tags'][0]) -class _SystemMemberAndReaderTagTests(object): +class _SystemMemberAndReaderTagTests: def test_user_cannot_create_project_tag(self): project = PROVIDERS.resource_api.create_project( @@ -107,7 +107,7 @@ class _SystemMemberAndReaderTagTests(object): with self.test_client() as c: c.put( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -142,13 +142,13 @@ class _SystemMemberAndReaderTagTests(object): with self.test_client() as c: c.delete( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) -class _DomainAndProjectUserTagTests(object): +class _DomainAndProjectUserTagTests: def test_user_cannot_create_project_tag(self): project = PROVIDERS.resource_api.create_project( @@ -160,7 +160,7 @@ class _DomainAndProjectUserTagTests(object): with self.test_client() as c: c.put( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -195,7 +195,7 @@ class _DomainAndProjectUserTagTests(object): with self.test_client() as c: c.delete( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -209,7 +209,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -244,7 +244,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -278,7 +278,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -307,7 +307,7 @@ class SystemAdminTests( with self.test_client() as c: c.put( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.CREATED, ) @@ -342,12 +342,12 @@ class SystemAdminTests( with self.test_client() as c: c.delete( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, ) -class _DomainUserTagTests(object): +class _DomainUserTagTests: def test_user_can_get_tag_for_project_in_domain(self): project = PROVIDERS.resource_api.create_project( @@ -359,7 +359,7 @@ class _DomainUserTagTests(object): with self.test_client() as c: c.get( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.NO_CONTENT, ) @@ -389,7 +389,7 @@ class _DomainUserTagTests(object): with self.test_client() as c: c.put( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -425,7 +425,7 @@ class _DomainUserTagTests(object): with self.test_client() as c: c.delete( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -441,7 +441,7 @@ class _DomainUserTagTests(object): with self.test_client() as c: c.get( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -463,7 +463,7 @@ class _DomainUserTagTests(object): ) -class _DomainMemberAndReaderTagTests(object): +class _DomainMemberAndReaderTagTests: def test_user_cannot_create_project_tag_in_domain(self): project = PROVIDERS.resource_api.create_project( @@ -474,7 +474,7 @@ class _DomainMemberAndReaderTagTests(object): with self.test_client() as c: c.put( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -508,7 +508,7 @@ class _DomainMemberAndReaderTagTests(object): with self.test_client() as c: c.delete( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -521,7 +521,7 @@ class DomainAdminUserTests( ): def setUp(self): - super(DomainAdminUserTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) @@ -569,7 +569,7 @@ class DomainAdminUserTests( with self.test_client() as c: c.put( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.CREATED, ) @@ -605,7 +605,7 @@ class DomainAdminUserTests( with self.test_client() as c: c.delete( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, ) @@ -618,7 +618,7 @@ class DomainMemberUserTests( ): def setUp(self): - super(DomainMemberUserTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) @@ -666,7 +666,7 @@ class DomainReaderUserTests( ): def setUp(self): - super(DomainReaderUserTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) @@ -706,7 +706,7 @@ class DomainReaderUserTests( self.headers = {'X-Auth-Token': self.token_id} -class _ProjectUserTagTests(object): +class _ProjectUserTagTests: def test_user_can_get_tag_for_project(self): tag = uuid.uuid4().hex @@ -714,7 +714,7 @@ class _ProjectUserTagTests(object): with self.test_client() as c: c.get( - '/v3/projects/%s/tags/%s' % (self.project_id, tag), + f'/v3/projects/{self.project_id}/tags/{tag}', headers=self.headers, expected_status_code=http.client.NO_CONTENT, ) @@ -740,7 +740,7 @@ class _ProjectUserTagTests(object): with self.test_client() as c: c.put( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -775,7 +775,7 @@ class _ProjectUserTagTests(object): with self.test_client() as c: c.delete( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -791,7 +791,7 @@ class _ProjectUserTagTests(object): with self.test_client() as c: c.get( - '/v3/projects/%s/tags/%s' % (project['id'], tag), + '/v3/projects/{}/tags/{}'.format(project['id'], tag), headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -813,13 +813,13 @@ class _ProjectUserTagTests(object): ) -class _ProjectMemberAndReaderTagTests(object): +class _ProjectMemberAndReaderTagTests: def test_user_cannot_create_project_tag(self): tag = uuid.uuid4().hex with self.test_client() as c: c.put( - '/v3/projects/%s/tags/%s' % (self.project_id, tag), + f'/v3/projects/{self.project_id}/tags/{tag}', headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -844,7 +844,7 @@ class _ProjectMemberAndReaderTagTests(object): with self.test_client() as c: c.delete( - '/v3/projects/%s/tags/%s' % (self.project_id, tag), + f'/v3/projects/{self.project_id}/tags/{tag}', headers=self.headers, expected_status_code=http.client.FORBIDDEN, ) @@ -857,7 +857,7 @@ class ProjectAdminTests( ): def setUp(self): - super(ProjectAdminTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) @@ -895,7 +895,7 @@ class ProjectAdminTests( tag = uuid.uuid4().hex with self.test_client() as c: c.put( - '/v3/projects/%s/tags/%s' % (self.project_id, tag), + f'/v3/projects/{self.project_id}/tags/{tag}', headers=self.headers, expected_status_code=http.client.CREATED, ) @@ -920,7 +920,7 @@ class ProjectAdminTests( with self.test_client() as c: c.delete( - '/v3/projects/%s/tags/%s' % (self.project_id, tag), + f'/v3/projects/{self.project_id}/tags/{tag}', headers=self.headers, ) @@ -933,7 +933,7 @@ class ProjectMemberTests( ): def setUp(self): - super(ProjectMemberTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) @@ -981,7 +981,7 @@ class ProjectReaderTests( ): def setUp(self): - super(ProjectReaderTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) diff --git a/keystone/tests/protection/v3/test_projects.py b/keystone/tests/protection/v3/test_projects.py index 909e6df95d..7b941cf8db 100644 --- a/keystone/tests/protection/v3/test_projects.py +++ b/keystone/tests/protection/v3/test_projects.py @@ -28,7 +28,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserTests(object): +class _SystemUserTests: """Common default functionality for all system users.""" def test_user_can_list_projects(self): @@ -86,7 +86,7 @@ class _SystemUserTests(object): ) -class _SystemMemberAndReaderProjectTests(object): +class _SystemMemberAndReaderProjectTests: """Common default functionality for system members and system readers.""" def test_user_cannot_create_projects(self): @@ -153,7 +153,7 @@ class _SystemMemberAndReaderProjectTests(object): ) -class _DomainUsersTests(object): +class _DomainUsersTests: """Common default functionality for all domain users.""" def test_user_can_list_projects_within_domain(self): @@ -246,7 +246,7 @@ class _DomainUsersTests(object): ) -class _DomainMemberAndReaderProjectTests(object): +class _DomainMemberAndReaderProjectTests: """Common default functionality for domain member and domain readers.""" def test_user_cannot_create_projects_within_domain(self): @@ -359,7 +359,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -394,7 +394,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -428,7 +428,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -540,7 +540,7 @@ class DomainReaderTests( ): def setUp(self): - super(DomainReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -579,7 +579,7 @@ class DomainMemberTests( ): def setUp(self): - super(DomainMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -617,7 +617,7 @@ class DomainAdminTests( ): def setUp(self): - super(DomainAdminTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) @@ -789,7 +789,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) diff --git a/keystone/tests/protection/v3/test_protocols.py b/keystone/tests/protection/v3/test_protocols.py index d437b6a23f..ec596e8e21 100644 --- a/keystone/tests/protection/v3/test_protocols.py +++ b/keystone/tests/protection/v3/test_protocols.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _CommonUtilities(object): +class _CommonUtilities: def _create_protocol_and_deps(self): identity_provider = unit.new_identity_provider_ref() @@ -43,7 +43,7 @@ class _CommonUtilities(object): return (protocol, mapping, identity_provider) -class _SystemUserProtocolTests(object): +class _SystemUserProtocolTests: """Common default functionality for all system users.""" def test_user_can_list_protocols(self): @@ -62,14 +62,16 @@ class _SystemUserProtocolTests(object): protocol, mapping, identity_provider = self._create_protocol_and_deps() with self.test_client() as c: - path = '/v3/OS-FEDERATION/identity_providers/%s/protocols/%s' % ( - identity_provider['id'], - protocol['id'], + path = ( + '/v3/OS-FEDERATION/identity_providers/{}/protocols/{}'.format( + identity_provider['id'], + protocol['id'], + ) ) c.get(path, headers=self.headers) -class _SystemReaderAndMemberProtocolTests(object): +class _SystemReaderAndMemberProtocolTests: def test_user_cannot_create_protocols(self): identity_provider = unit.new_identity_provider_ref() @@ -85,9 +87,11 @@ class _SystemReaderAndMemberProtocolTests(object): create = {'protocol': {'mapping_id': mapping['id']}} with self.test_client() as c: - path = '/v3/OS-FEDERATION/identity_providers/%s/protocols/%s' % ( - identity_provider['id'], - protocol_id, + path = ( + '/v3/OS-FEDERATION/identity_providers/{}/protocols/{}'.format( + identity_provider['id'], + protocol_id, + ) ) c.put( path, @@ -105,9 +109,11 @@ class _SystemReaderAndMemberProtocolTests(object): update = {'protocol': {'mapping_id': new_mapping['id']}} with self.test_client() as c: - path = '/v3/OS-FEDERATION/identity_providers/%s/protocols/%s' % ( - identity_provider['id'], - protocol['id'], + path = ( + '/v3/OS-FEDERATION/identity_providers/{}/protocols/{}'.format( + identity_provider['id'], + protocol['id'], + ) ) c.patch( path, @@ -120,9 +126,11 @@ class _SystemReaderAndMemberProtocolTests(object): protocol, mapping, identity_provider = self._create_protocol_and_deps() with self.test_client() as c: - path = '/v3/OS-FEDERATION/identity_providers/%s/protocols/%s' % ( - identity_provider['id'], - protocol['id'], + path = ( + '/v3/OS-FEDERATION/identity_providers/{}/protocols/{}'.format( + identity_provider['id'], + protocol['id'], + ) ) c.delete( path, @@ -131,7 +139,7 @@ class _SystemReaderAndMemberProtocolTests(object): ) -class _DomainAndProjectUserProtocolTests(object): +class _DomainAndProjectUserProtocolTests: def test_user_cannot_create_protocols(self): identity_provider = unit.new_identity_provider_ref() @@ -147,9 +155,11 @@ class _DomainAndProjectUserProtocolTests(object): create = {'protocol': {'mapping_id': mapping['id']}} with self.test_client() as c: - path = '/v3/OS-FEDERATION/identity_providers/%s/protocols/%s' % ( - identity_provider['id'], - protocol_id, + path = ( + '/v3/OS-FEDERATION/identity_providers/{}/protocols/{}'.format( + identity_provider['id'], + protocol_id, + ) ) c.put( path, @@ -167,9 +177,11 @@ class _DomainAndProjectUserProtocolTests(object): update = {'protocol': {'mapping_id': new_mapping['id']}} with self.test_client() as c: - path = '/v3/OS-FEDERATION/identity_providers/%s/protocols/%s' % ( - identity_provider['id'], - protocol['id'], + path = ( + '/v3/OS-FEDERATION/identity_providers/{}/protocols/{}'.format( + identity_provider['id'], + protocol['id'], + ) ) c.patch( path, @@ -182,9 +194,11 @@ class _DomainAndProjectUserProtocolTests(object): protocol, mapping, identity_provider = self._create_protocol_and_deps() with self.test_client() as c: - path = '/v3/OS-FEDERATION/identity_providers/%s/protocols/%s' % ( - identity_provider['id'], - protocol['id'], + path = ( + '/v3/OS-FEDERATION/identity_providers/{}/protocols/{}'.format( + identity_provider['id'], + protocol['id'], + ) ) c.delete( path, @@ -210,9 +224,11 @@ class _DomainAndProjectUserProtocolTests(object): protocol, mapping, identity_provider = self._create_protocol_and_deps() with self.test_client() as c: - path = '/v3/OS-FEDERATION/identity_providers/%s/protocols/%s' % ( - identity_provider['id'], - protocol['id'], + path = ( + '/v3/OS-FEDERATION/identity_providers/{}/protocols/{}'.format( + identity_provider['id'], + protocol['id'], + ) ) c.get( path, @@ -230,7 +246,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -266,7 +282,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -301,7 +317,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -336,9 +352,11 @@ class SystemAdminTests( create = {'protocol': {'mapping_id': mapping['id']}} with self.test_client() as c: - path = '/v3/OS-FEDERATION/identity_providers/%s/protocols/%s' % ( - identity_provider['id'], - protocol_id, + path = ( + '/v3/OS-FEDERATION/identity_providers/{}/protocols/{}'.format( + identity_provider['id'], + protocol_id, + ) ) c.put( path, @@ -356,9 +374,11 @@ class SystemAdminTests( update = {'protocol': {'mapping_id': new_mapping['id']}} with self.test_client() as c: - path = '/v3/OS-FEDERATION/identity_providers/%s/protocols/%s' % ( - identity_provider['id'], - protocol['id'], + path = ( + '/v3/OS-FEDERATION/identity_providers/{}/protocols/{}'.format( + identity_provider['id'], + protocol['id'], + ) ) c.patch(path, json=update, headers=self.headers) @@ -366,9 +386,11 @@ class SystemAdminTests( protocol, mapping, identity_provider = self._create_protocol_and_deps() with self.test_client() as c: - path = '/v3/OS-FEDERATION/identity_providers/%s/protocols/%s' % ( - identity_provider['id'], - protocol['id'], + path = ( + '/v3/OS-FEDERATION/identity_providers/{}/protocols/{}'.format( + identity_provider['id'], + protocol['id'], + ) ) c.delete(path, headers=self.headers) @@ -381,7 +403,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -420,7 +442,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -448,7 +470,7 @@ class ProjectUserTestsWithoutEnforceScope( ): def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) diff --git a/keystone/tests/protection/v3/test_regions.py b/keystone/tests/protection/v3/test_regions.py index d8a4b3ddb7..25cdf667bb 100644 --- a/keystone/tests/protection/v3/test_regions.py +++ b/keystone/tests/protection/v3/test_regions.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _UserRegionTests(object): +class _UserRegionTests: """Common default functionality for all users.""" def test_user_can_get_a_region(self): @@ -46,7 +46,7 @@ class _UserRegionTests(object): self.assertIn(region['id'], expected_regions) -class _SystemReaderAndMemberUserRegionTests(object): +class _SystemReaderAndMemberUserRegionTests: """Common default functionality for system readers and system members.""" def test_user_cannot_create_regions(self): @@ -83,7 +83,7 @@ class _SystemReaderAndMemberUserRegionTests(object): ) -class _DomainAndProjectUserRegionTests(object): +class _DomainAndProjectUserRegionTests: """Common default functionality for all domain and project users.""" def test_user_cannot_create_regions(self): @@ -128,7 +128,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -163,7 +163,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -197,7 +197,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -250,7 +250,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -289,7 +289,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -319,7 +319,7 @@ class ProjectUserTestsWithoutEnforceScope( ): def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) diff --git a/keystone/tests/protection/v3/test_registered_limits.py b/keystone/tests/protection/v3/test_registered_limits.py index 7f7bee7fcf..12040cc24a 100644 --- a/keystone/tests/protection/v3/test_registered_limits.py +++ b/keystone/tests/protection/v3/test_registered_limits.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _UserRegisteredLimitTests(object): +class _UserRegisteredLimitTests: """Common default functionality for all users except system admins.""" def test_user_can_get_a_registered_limit(self): @@ -134,7 +134,7 @@ class SystemReaderTests( _UserRegisteredLimitTests, ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -168,7 +168,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -200,7 +200,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -320,7 +320,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -358,7 +358,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -387,7 +387,7 @@ class ProjectUserTestsWithoutEnforceScope( ): def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) diff --git a/keystone/tests/protection/v3/test_roles.py b/keystone/tests/protection/v3/test_roles.py index 2b96290554..659436221f 100644 --- a/keystone/tests/protection/v3/test_roles.py +++ b/keystone/tests/protection/v3/test_roles.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserRoleTests(object): +class _SystemUserRoleTests: """Common default functionality for all system users.""" def test_user_can_list_roles(self): @@ -48,7 +48,7 @@ class _SystemUserRoleTests(object): self.assertEqual(role['id'], r.json['role']['id']) -class _SystemReaderAndMemberRoleTests(object): +class _SystemReaderAndMemberRoleTests: """Common default functionality for system readers and system members.""" def test_user_cannot_create_roles(self): @@ -90,7 +90,7 @@ class _SystemReaderAndMemberRoleTests(object): ) -class _DomainAndProjectUserRoleTests(object): +class _DomainAndProjectUserRoleTests: """Common functionality for all domain and project users.""" def test_user_cannot_list_roles(self): @@ -162,7 +162,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -197,7 +197,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -231,7 +231,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -288,7 +288,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -326,7 +326,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -353,7 +353,7 @@ class ProjectUserTestsWithoutEnforceScope( ): def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) diff --git a/keystone/tests/protection/v3/test_service_providers.py b/keystone/tests/protection/v3/test_service_providers.py index 0f1ef89122..b2b6bddd0f 100644 --- a/keystone/tests/protection/v3/test_service_providers.py +++ b/keystone/tests/protection/v3/test_service_providers.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserServiceProviderTests(object): +class _SystemUserServiceProviderTests: """Common default functionality for all system users.""" def test_user_can_list_service_providers(self): @@ -58,7 +58,7 @@ class _SystemUserServiceProviderTests(object): ) -class _SystemReaderAndMemberUserServiceProviderTests(object): +class _SystemReaderAndMemberUserServiceProviderTests: """Common default functionality for system readers and system members.""" def test_user_cannot_create_service_providers(self): @@ -107,7 +107,7 @@ class _SystemReaderAndMemberUserServiceProviderTests(object): ) -class _DomainAndProjectUserServiceProviderTests(object): +class _DomainAndProjectUserServiceProviderTests: """Common functionality for all domain and project users.""" def test_user_cannot_create_service_providers(self): @@ -189,7 +189,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -224,7 +224,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -258,7 +258,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -330,7 +330,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -368,7 +368,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -395,7 +395,7 @@ class ProjectUserTestsWithoutEnforceScope( ): def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) diff --git a/keystone/tests/protection/v3/test_services.py b/keystone/tests/protection/v3/test_services.py index 87cd52a57e..c543a2041d 100644 --- a/keystone/tests/protection/v3/test_services.py +++ b/keystone/tests/protection/v3/test_services.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserServiceTests(object): +class _SystemUserServiceTests: """Common default functionality for all system users.""" def test_user_can_list_services(self): @@ -54,7 +54,7 @@ class _SystemUserServiceTests(object): self.assertEqual(r.json['service']['id'], service['id']) -class _SystemReaderAndMemberUserServiceTests(object): +class _SystemReaderAndMemberUserServiceTests: """Common default functionality for system readers and system members.""" def test_user_cannot_create_services(self): @@ -99,7 +99,7 @@ class _SystemReaderAndMemberUserServiceTests(object): ) -class _DomainAndProjectUserServiceTests(object): +class _DomainAndProjectUserServiceTests: def test_user_cannot_create_services(self): create = { @@ -173,7 +173,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -208,7 +208,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -242,7 +242,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -302,7 +302,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -340,7 +340,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -367,7 +367,7 @@ class ProjectUserTestsWithoutEnforceScope( ): def setUp(self): - super(ProjectUserTestsWithoutEnforceScope, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) diff --git a/keystone/tests/protection/v3/test_system_assignments.py b/keystone/tests/protection/v3/test_system_assignments.py index 3203127bb7..5ebcf3907a 100644 --- a/keystone/tests/protection/v3/test_system_assignments.py +++ b/keystone/tests/protection/v3/test_system_assignments.py @@ -28,7 +28,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserSystemAssignmentTests(object): +class _SystemUserSystemAssignmentTests: def test_user_can_list_user_system_role_assignments(self): user = PROVIDERS.identity_api.create_user( @@ -102,7 +102,7 @@ class _SystemUserSystemAssignmentTests(object): ) -class _SystemMemberAndReaderSystemAssignmentTests(object): +class _SystemMemberAndReaderSystemAssignmentTests: def test_user_cannot_grant_system_assignments(self): user = PROVIDERS.identity_api.create_user( @@ -165,7 +165,7 @@ class _SystemMemberAndReaderSystemAssignmentTests(object): ) -class _DomainAndProjectUserSystemAssignmentTests(object): +class _DomainAndProjectUserSystemAssignmentTests: def test_user_cannot_list_system_role_assignments(self): user = PROVIDERS.identity_api.create_user( @@ -302,7 +302,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -337,7 +337,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -379,7 +379,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -464,7 +464,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -504,7 +504,7 @@ class ProjectReaderTests( ): def setUp(self): - super(ProjectReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -550,7 +550,7 @@ class ProjectMemberTests( ): def setUp(self): - super(ProjectMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -596,7 +596,7 @@ class ProjectAdminTests( ): def setUp(self): - super(ProjectAdminTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) self.policy_file_name = self.policy_file.file_name diff --git a/keystone/tests/protection/v3/test_tokens.py b/keystone/tests/protection/v3/test_tokens.py index 5cc55768d3..87d64afb78 100644 --- a/keystone/tests/protection/v3/test_tokens.py +++ b/keystone/tests/protection/v3/test_tokens.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _SystemUserTokenTests(object): +class _SystemUserTokenTests: def test_user_can_validate_system_scoped_token(self): user = unit.new_user_ref(domain_id=CONF.identity.default_domain_id) @@ -105,7 +105,7 @@ class _SystemUserTokenTests(object): c.get('/v3/auth/tokens', headers=self.headers) -class _SystemMemberAndReaderTokenTests(object): +class _SystemMemberAndReaderTokenTests: def test_user_cannot_revoke_a_system_scoped_token(self): user = unit.new_user_ref(domain_id=CONF.identity.default_domain_id) @@ -205,7 +205,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -240,7 +240,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -274,7 +274,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -371,7 +371,7 @@ class SystemAdminTests( c.delete('/v3/auth/tokens', headers=self.headers) -class _DomainAndProjectUserTests(object): +class _DomainAndProjectUserTests: def test_user_can_validate_their_own_tokens(self): with self.test_client() as c: @@ -569,7 +569,7 @@ class DomainUserTests( ): def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -609,7 +609,7 @@ class ProjectUserTests( ): def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) diff --git a/keystone/tests/protection/v3/test_trusts.py b/keystone/tests/protection/v3/test_trusts.py index 3bd7dc8f88..b6ff6e9234 100644 --- a/keystone/tests/protection/v3/test_trusts.py +++ b/keystone/tests/protection/v3/test_trusts.py @@ -36,7 +36,7 @@ class TrustTests( """ def setUp(self): - super(TrustTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) self.policy_file_name = self.policy_file.file_name @@ -124,7 +124,7 @@ class TrustTests( f.write(jsonutils.dumps(overridden_policies)) -class _AdminTestsMixin(object): +class _AdminTestsMixin: """Tests for all admin users. This exercises both the is_admin user and users granted the admin role on @@ -159,7 +159,7 @@ class AdminTokenTests(TrustTests, _AdminTestsMixin): """ def setUp(self): - super(AdminTokenTests, self).setUp() + super().setUp() self.config_fixture.config(admin_token='ADMIN') self.headers = {'X-Auth-Token': 'ADMIN'} @@ -218,7 +218,7 @@ class AdminTokenTests(TrustTests, _AdminTestsMixin): ) -class _SystemUserTests(object): +class _SystemUserTests: """Tests for system admin, member, and reader.""" def test_user_can_get_non_existent_trust(self): @@ -320,7 +320,7 @@ class SystemReaderTests(TrustTests, _SystemReaderMemberTests): """Tests for system reader users.""" def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.config_fixture.config(group='oslo_policy', enforce_scope=True) system_reader = unit.new_user_ref( @@ -349,7 +349,7 @@ class SystemMemberTests(TrustTests, _SystemReaderMemberTests): """Tests for system member users.""" def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.config_fixture.config(group='oslo_policy', enforce_scope=True) system_member = unit.new_user_ref( @@ -378,7 +378,7 @@ class SystemAdminTests(TrustTests, _AdminTestsMixin, _SystemUserTests): """Tests for system admin users.""" def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.config_fixture.config(group='oslo_policy', enforce_scope=True) self.user_id = self.bootstrapper.admin_user_id @@ -468,7 +468,7 @@ class ProjectUserTests(TrustTests): """Tests for all project users.""" def setUp(self): - super(ProjectUserTests, self).setUp() + super().setUp() other_user = unit.new_user_ref(domain_id=self.domain_id) self.other_user_id = PROVIDERS.identity_api.create_user(other_user)[ 'id' @@ -967,7 +967,7 @@ class DomainUserTests(TrustTests): """ def setUp(self): - super(DomainUserTests, self).setUp() + super().setUp() self.config_fixture.config(group='oslo_policy', enforce_scope=True) domain_admin = unit.new_user_ref(domain_id=self.domain_id) self.user_id = PROVIDERS.identity_api.create_user(domain_admin)['id'] diff --git a/keystone/tests/protection/v3/test_users.py b/keystone/tests/protection/v3/test_users.py index dee35c6e73..85b6b55e55 100644 --- a/keystone/tests/protection/v3/test_users.py +++ b/keystone/tests/protection/v3/test_users.py @@ -28,7 +28,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class _CommonUserTests(object): +class _CommonUserTests: """Common default functionality for all users.""" def test_user_can_get_their_own_user_reference(self): @@ -37,7 +37,7 @@ class _CommonUserTests(object): self.assertEqual(self.user_id, r.json['user']['id']) -class _SystemUserTests(object): +class _SystemUserTests: """Common default functionality for all system users.""" def test_user_can_get_other_users(self): @@ -75,7 +75,7 @@ class _SystemUserTests(object): self.assertIn(user_id, returned_user_ids) -class _SystemMemberAndReaderUserTests(object): +class _SystemMemberAndReaderUserTests: """Common functionality for system readers and system members.""" def test_user_cannot_create_users(self): @@ -144,7 +144,7 @@ class _SystemMemberAndReaderUserTests(object): ) -class _DomainUserTests(object): +class _DomainUserTests: """Commont default functionality for all domain users.""" def test_user_can_get_user_within_domain(self): @@ -203,7 +203,7 @@ class _DomainUserTests(object): self.assertNotIn(user['id'], user_ids) -class _DomainMemberAndReaderUserTests(object): +class _DomainMemberAndReaderUserTests: """Functionality for all domain members and domain readers.""" def test_user_cannot_create_users_within_domain(self): @@ -317,7 +317,7 @@ class _DomainMemberAndReaderUserTests(object): ) -class _ProjectUserTests(object): +class _ProjectUserTests: """Common tests cases for all project users.""" def test_user_cannot_get_users_within_their_domain(self): @@ -494,7 +494,7 @@ class SystemReaderTests( ): def setUp(self): - super(SystemReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -530,7 +530,7 @@ class SystemMemberTests( ): def setUp(self): - super(SystemMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -565,7 +565,7 @@ class SystemAdminTests( ): def setUp(self): - super(SystemAdminTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -642,7 +642,7 @@ class DomainReaderTests( ): def setUp(self): - super(DomainReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -682,7 +682,7 @@ class DomainMemberTests( ): def setUp(self): - super(DomainMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -721,7 +721,7 @@ class DomainAdminTests( ): def setUp(self): - super(DomainAdminTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) @@ -923,7 +923,7 @@ class ProjectReaderTests( ): def setUp(self): - super(ProjectReaderTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -967,7 +967,7 @@ class ProjectMemberTests( ): def setUp(self): - super(ProjectMemberTests, self).setUp() + super().setUp() self.loadapp() self.useFixture(ksfixtures.Policy(self.config_fixture)) self.config_fixture.config(group='oslo_policy', enforce_scope=True) @@ -1011,7 +1011,7 @@ class ProjectAdminTests( ): def setUp(self): - super(ProjectAdminTests, self).setUp() + super().setUp() self.loadapp() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) diff --git a/keystone/tests/unit/application_credential/backends/test_sql.py b/keystone/tests/unit/application_credential/backends/test_sql.py index 8245955761..2d2ffda52c 100644 --- a/keystone/tests/unit/application_credential/backends/test_sql.py +++ b/keystone/tests/unit/application_credential/backends/test_sql.py @@ -68,6 +68,6 @@ class SQLDriverTestCase( def setUp(self): self.useFixture(database.Database()) self.driver = sql_driver.ApplicationCredential() - super(SQLDriverTestCase, self).setUp() + super().setUp() self.app_cred_api = PROVIDERS.application_credential_api diff --git a/keystone/tests/unit/application_credential/test_backends.py b/keystone/tests/unit/application_credential/test_backends.py index 78c7e64a6e..196df3b598 100644 --- a/keystone/tests/unit/application_credential/test_backends.py +++ b/keystone/tests/unit/application_credential/test_backends.py @@ -25,7 +25,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class ApplicationCredentialTests(object): +class ApplicationCredentialTests: def _new_app_cred_data( self, user_id, project_id=None, name=None, expires=None, system=None diff --git a/keystone/tests/unit/assignment/test_backends.py b/keystone/tests/unit/assignment/test_backends.py index 7893de1c96..b3c0df0668 100644 --- a/keystone/tests/unit/assignment/test_backends.py +++ b/keystone/tests/unit/assignment/test_backends.py @@ -26,7 +26,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class AssignmentTestHelperMixin(object): +class AssignmentTestHelperMixin: """Mixin class to aid testing of assignments. This class supports data driven test plans that enable: @@ -813,7 +813,7 @@ class AssignmentTests(AssignmentTestHelperMixin): user_ref['id'], project_ref['id'] ) - self.assertEqual(set([r['id'] for r in role_ref_list]), set(role_list)) + self.assertEqual({r['id'] for r in role_ref_list}, set(role_list)) def test_get_role_by_user_and_project(self): roles_ref = PROVIDERS.assignment_api.get_roles_for_user_and_project( diff --git a/keystone/tests/unit/assignment/test_core.py b/keystone/tests/unit/assignment/test_core.py index b053faae8f..6497125114 100644 --- a/keystone/tests/unit/assignment/test_core.py +++ b/keystone/tests/unit/assignment/test_core.py @@ -24,7 +24,7 @@ from keystone.tests.unit import default_fixtures PROVIDERS = provider_api.ProviderAPIs -class RoleTests(object): +class RoleTests: def test_get_role_returns_not_found(self): self.assertRaises( @@ -126,8 +126,8 @@ class RoleTests(object): def test_list_roles(self): roles = PROVIDERS.role_api.list_roles() self.assertEqual(len(default_fixtures.ROLES), len(roles)) - role_ids = set(role['id'] for role in roles) - expected_role_ids = set(role['id'] for role in default_fixtures.ROLES) + role_ids = {role['id'] for role in roles} + expected_role_ids = {role['id'] for role in default_fixtures.ROLES} self.assertEqual(expected_role_ids, role_ids) @unit.skip_if_cache_disabled('role') diff --git a/keystone/tests/unit/auth/plugins/test_mapped.py b/keystone/tests/unit/auth/plugins/test_mapped.py index 6b943da6bb..4320f3166c 100644 --- a/keystone/tests/unit/auth/plugins/test_mapped.py +++ b/keystone/tests/unit/auth/plugins/test_mapped.py @@ -22,10 +22,10 @@ from keystone.tests import unit class TestMappedPlugin(unit.TestCase): def __init__(self, *args, **kwargs): - super(TestMappedPlugin, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) def setUp(self): - super(TestMappedPlugin, self).setUp() + super().setUp() self.resource_api_mock = mock.Mock(spec=ResourceApi) self.assignment_api_mock = mock.Mock(spec=AssignmentApi) self.domain_uuid_mock = uuid.uuid4().hex diff --git a/keystone/tests/unit/backend/core_ldap.py b/keystone/tests/unit/backend/core_ldap.py index 85e6d0c135..a6c5a17350 100644 --- a/keystone/tests/unit/backend/core_ldap.py +++ b/keystone/tests/unit/backend/core_ldap.py @@ -36,11 +36,11 @@ def create_group_container(identity_api): ) -class BaseBackendLdapCommon(object): +class BaseBackendLdapCommon: """Mixin class to set up generic LDAP backends.""" def setUp(self): - super(BaseBackendLdapCommon, self).setUp() + super().setUp() self.useFixture(ldapdb.LDAPDatabase()) self.load_backends() @@ -57,11 +57,11 @@ class BaseBackendLdapCommon(object): return CONF def config_overrides(self): - super(BaseBackendLdapCommon, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='identity', driver='ldap') def config_files(self): - config_files = super(BaseBackendLdapCommon, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap.conf')) return config_files @@ -73,7 +73,7 @@ class BaseBackendLdapCommon(object): ldap_ = PROVIDERS.identity_api.driver.user.get_connection() res = ldap_.search_s( - user_dn, ldap.SCOPE_BASE, u'(sn=%s)' % user['name'] + user_dn, ldap.SCOPE_BASE, '(sn=%s)' % user['name'] ) if enabled_attr_name in res[0][1]: return res[0][1][enabled_attr_name] @@ -81,7 +81,7 @@ class BaseBackendLdapCommon(object): return None -class BaseBackendLdap(object): +class BaseBackendLdap: """Mixin class to set up an all-LDAP configuration.""" def setUp(self): @@ -89,27 +89,25 @@ class BaseBackendLdap(object): # parent's setUp. The parent's setUp uses services (like # credentials) that require a database. self.useFixture(database.Database()) - super(BaseBackendLdap, self).setUp() + super().setUp() def load_fixtures(self, fixtures): # Override super impl since need to create group container. create_group_container(PROVIDERS.identity_api) - super(BaseBackendLdap, self).load_fixtures(fixtures) + super().load_fixtures(fixtures) class BaseBackendLdapIdentitySqlEverythingElse(unit.SQLDriverOverrides): """Mixin base for Identity LDAP, everything else SQL backend tests.""" def config_files(self): - config_files = super( - BaseBackendLdapIdentitySqlEverythingElse, self - ).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap_sql.conf')) return config_files def setUp(self): sqldb = self.useFixture(database.Database()) - super(BaseBackendLdapIdentitySqlEverythingElse, self).setUp() + super().setUp() self.load_backends() cache.configure_cache() @@ -119,15 +117,13 @@ class BaseBackendLdapIdentitySqlEverythingElse(unit.SQLDriverOverrides): self.user_foo['enabled'] = True def config_overrides(self): - super( - BaseBackendLdapIdentitySqlEverythingElse, self - ).config_overrides() + super().config_overrides() self.config_fixture.config(group='identity', driver='ldap') self.config_fixture.config(group='resource', driver='sql') self.config_fixture.config(group='assignment', driver='sql') -class BaseBackendLdapIdentitySqlEverythingElseWithMapping(object): +class BaseBackendLdapIdentitySqlEverythingElseWithMapping: """Mixin base class to test mapping of default LDAP backend. The default configuration is not to enable mapping when using a single @@ -138,9 +134,7 @@ class BaseBackendLdapIdentitySqlEverythingElseWithMapping(object): """ def config_overrides(self): - super( - BaseBackendLdapIdentitySqlEverythingElseWithMapping, self - ).config_overrides() + super().config_overrides() self.config_fixture.config( group='identity_mapping', backward_compatible_ids=False ) diff --git a/keystone/tests/unit/backend/core_sql.py b/keystone/tests/unit/backend/core_sql.py index 0ddebdbd1e..008528fbeb 100644 --- a/keystone/tests/unit/backend/core_sql.py +++ b/keystone/tests/unit/backend/core_sql.py @@ -31,7 +31,7 @@ class BaseBackendSqlTests(unit.SQLDriverOverrides, unit.TestCase): self.user_foo['enabled'] = True def config_files(self): - config_files = super(BaseBackendSqlTests, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_sql.conf')) return config_files diff --git a/keystone/tests/unit/base_classes.py b/keystone/tests/unit/base_classes.py index 9bf3b50ebe..5457cd7944 100644 --- a/keystone/tests/unit/base_classes.py +++ b/keystone/tests/unit/base_classes.py @@ -39,7 +39,7 @@ class TestCaseWithBootstrap(core.BaseTestCase): def setUp(self): self.useFixture(database.Database()) - super(TestCaseWithBootstrap, self).setUp() + super().setUp() self.config_fixture = self.useFixture(config_fixture.Config(CONF)) CONF(args=[], project='keystone') self.useFixture( diff --git a/keystone/tests/unit/catalog/test_backends.py b/keystone/tests/unit/catalog/test_backends.py index 726e74e5f2..64c8f0e067 100644 --- a/keystone/tests/unit/catalog/test_backends.py +++ b/keystone/tests/unit/catalog/test_backends.py @@ -25,7 +25,7 @@ from keystone.tests import unit PROVIDERS = provider_api.ProviderAPIs -class CatalogTests(object): +class CatalogTests: _legacy_endpoint_id_in_endpoint = True _enabled_default_to_true_when_creating_endpoint = False @@ -657,7 +657,7 @@ class CatalogTests(object): service = unit.new_service_ref() PROVIDERS.catalog_api.create_service(service['id'], service) - expected_ids = set([uuid.uuid4().hex for _ in range(3)]) + expected_ids = {uuid.uuid4().hex for _ in range(3)} for endpoint_id in expected_ids: endpoint = unit.new_endpoint_ref( service_id=service['id'], id=endpoint_id, region_id=None @@ -665,7 +665,7 @@ class CatalogTests(object): PROVIDERS.catalog_api.create_endpoint(endpoint['id'], endpoint) endpoints = PROVIDERS.catalog_api.list_endpoints() - self.assertEqual(expected_ids, set(e['id'] for e in endpoints)) + self.assertEqual(expected_ids, {e['id'] for e in endpoints}) def test_get_v3_catalog_endpoint_disabled(self): """Get back only enabled endpoints when get the v3 catalog.""" diff --git a/keystone/tests/unit/catalog/test_core.py b/keystone/tests/unit/catalog/test_core.py index 766cab13a5..405d8b774a 100644 --- a/keystone/tests/unit/catalog/test_core.py +++ b/keystone/tests/unit/catalog/test_core.py @@ -27,7 +27,7 @@ class FormatUrlTests(unit.BaseTestCase): values = {'tenant_id': 'A', 'user_id': 'B', 'project_id': project_id} actual_url = utils.format_url(url_template, values) - expected_url = 'http://server:9090/A/B/%s' % (project_id,) + expected_url = f'http://server:9090/A/B/{project_id}' self.assertEqual(expected_url, actual_url) def test_raises_malformed_on_missing_key(self): diff --git a/keystone/tests/unit/common/test_cache.py b/keystone/tests/unit/common/test_cache.py index 49cf7587b8..dd5f77bc79 100644 --- a/keystone/tests/unit/common/test_cache.py +++ b/keystone/tests/unit/common/test_cache.py @@ -27,7 +27,7 @@ CONF = keystone.conf.CONF class TestCacheRegion(unit.BaseTestCase): def setUp(self): - super(TestCacheRegion, self).setUp() + super().setUp() self.config_fixture = self.useFixture(config_fixture.Config(CONF)) self.config_fixture.config( # TODO(morganfainberg): Make Cache Testing a separate test case diff --git a/keystone/tests/unit/common/test_notifications.py b/keystone/tests/unit/common/test_notifications.py index d4c7b1fbb3..3030a1ed02 100644 --- a/keystone/tests/unit/common/test_notifications.py +++ b/keystone/tests/unit/common/test_notifications.py @@ -60,7 +60,7 @@ def register_callback(operation, resource_type=EXP_RESOURCE_TYPE): class AuditNotificationsTestCase(unit.BaseTestCase): def setUp(self): - super(AuditNotificationsTestCase, self).setUp() + super().setUp() self.config_fixture = self.useFixture(config_fixture.Config(CONF)) self.addCleanup(notifications.clear_subscribers) @@ -143,7 +143,7 @@ class AuditNotificationsTestCase(unit.BaseTestCase): class NotificationsTestCase(unit.BaseTestCase): def setUp(self): - super(NotificationsTestCase, self).setUp() + super().setUp() self.config_fixture = self.useFixture(config_fixture.Config(CONF)) self.config_fixture.config( group='oslo_messaging_notifications', transport_url='rabbit://' @@ -246,7 +246,7 @@ class NotificationsTestCase(unit.BaseTestCase): target = mock outcome = 'success' event_type = 'identity.authenticate' - meter_name = '%s.%s' % (event_type, outcome) + meter_name = f'{event_type}.{outcome}' conf = self.useFixture(config_fixture.Config(CONF)) conf.config(notification_opt_out=[meter_name]) @@ -264,7 +264,7 @@ class NotificationsTestCase(unit.BaseTestCase): class BaseNotificationTest(test_v3.RestfulTestCase): def setUp(self): - super(BaseNotificationTest, self).setUp() + super().setUp() self._notifications = [] self._audits = [] @@ -304,7 +304,7 @@ class BaseNotificationTest(test_v3.RestfulTestCase): target, event_type, reason=None, - **kwargs + **kwargs, ): service_security = cadftaxonomy.SERVICE_SECURITY @@ -398,7 +398,7 @@ class BaseNotificationTest(test_v3.RestfulTestCase): self.assertEqual(self.project_id, payload['initiator']['project_id']) self.assertEqual(typeURI, payload['target']['typeURI']) self.assertIn('request_id', payload['initiator']) - action = '%s.%s' % (operation, resource_type) + action = f'{operation}.{resource_type}' self.assertEqual(action, payload['action']) def _assert_notify_not_sent( @@ -945,7 +945,7 @@ class NotificationsForEntities(BaseNotificationTest): class CADFNotificationsForPCIDSSEvents(BaseNotificationTest): def setUp(self): - super(CADFNotificationsForPCIDSSEvents, self).setUp() + super().setUp() conf = self.useFixture(config_fixture.Config(CONF)) conf.config(notification_format='cadf') conf.config(group='security_compliance', password_expires_days=2) @@ -1156,7 +1156,7 @@ class CADFNotificationsForPCIDSSEvents(BaseNotificationTest): class CADFNotificationsForEntities(NotificationsForEntities): def setUp(self): - super(CADFNotificationsForEntities, self).setUp() + super().setUp() self.config_fixture.config(notification_format='cadf') def test_initiator_data_is_set(self): @@ -1208,7 +1208,7 @@ class CADFNotificationsForEntities(NotificationsForEntities): class TestEventCallbacks(test_v3.RestfulTestCase): - class FakeManager(object): + class FakeManager: def _project_deleted_callback( self, service, resource_type, operation, payload @@ -1261,7 +1261,7 @@ class TestEventCallbacks(test_v3.RestfulTestCase): callback_called = [] @notifications.listener - class Foo(object): + class Foo: def __init__(self): self.event_callbacks = { CREATED_OPERATION: {'project': self.foo_callback} @@ -1280,7 +1280,7 @@ class TestEventCallbacks(test_v3.RestfulTestCase): callback_called = [] @notifications.listener - class Foo(object): + class Foo: def __init__(self): self.event_callbacks = { CREATED_OPERATION: { @@ -1303,7 +1303,7 @@ class TestEventCallbacks(test_v3.RestfulTestCase): def test_invalid_event_callbacks(self): @notifications.listener - class Foo(object): + class Foo: def __init__(self): self.event_callbacks = 'bogus' @@ -1311,7 +1311,7 @@ class TestEventCallbacks(test_v3.RestfulTestCase): def test_invalid_event_callbacks_event(self): @notifications.listener - class Foo(object): + class Foo: def __init__(self): self.event_callbacks = {CREATED_OPERATION: 'bogus'} @@ -1327,7 +1327,7 @@ class TestEventCallbacks(test_v3.RestfulTestCase): # (think functools.partial). Obviously is we don't have an # instance then we can't call the method. @notifications.listener - class Foo(object): + class Foo: def __init__(self): self.event_callbacks = { CREATED_OPERATION: {'project': Foo.callback} @@ -1356,7 +1356,7 @@ class CadfNotificationsWrapperTestCase(test_v3.RestfulTestCase): ROLE_ASSIGNMENT = 'role_assignment' def setUp(self): - super(CadfNotificationsWrapperTestCase, self).setUp() + super().setUp() self._notifications = [] def fake_notify( @@ -1366,7 +1366,7 @@ class CadfNotificationsWrapperTestCase(test_v3.RestfulTestCase): target, event_type, reason=None, - **kwargs + **kwargs, ): service_security = cadftaxonomy.SERVICE_SECURITY @@ -1566,8 +1566,8 @@ class CadfNotificationsWrapperTestCase(test_v3.RestfulTestCase): self, url, role, project=None, domain=None, user=None, group=None ): self.put(url) - action = "%s.%s" % (CREATED_OPERATION, self.ROLE_ASSIGNMENT) - event_type = '%s.%s.%s' % ( + action = f"{CREATED_OPERATION}.{self.ROLE_ASSIGNMENT}" + event_type = '{}.{}.{}'.format( notifications.SERVICE, self.ROLE_ASSIGNMENT, CREATED_OPERATION, @@ -1575,8 +1575,8 @@ class CadfNotificationsWrapperTestCase(test_v3.RestfulTestCase): self._assert_last_note(action, self.user_id, event_type) self._assert_event(role, project, domain, user, group) self.delete(url) - action = "%s.%s" % (DELETED_OPERATION, self.ROLE_ASSIGNMENT) - event_type = '%s.%s.%s' % ( + action = f"{DELETED_OPERATION}.{self.ROLE_ASSIGNMENT}" + event_type = '{}.{}.{}'.format( notifications.SERVICE, self.ROLE_ASSIGNMENT, DELETED_OPERATION, @@ -1585,7 +1585,7 @@ class CadfNotificationsWrapperTestCase(test_v3.RestfulTestCase): self._assert_event(role, project, domain, user, None) def test_user_project_grant(self): - url = '/projects/%s/users/%s/roles/%s' % ( + url = '/projects/{}/users/{}/roles/{}'.format( self.project_id, self.user_id, self.role_id, @@ -1598,7 +1598,7 @@ class CadfNotificationsWrapperTestCase(test_v3.RestfulTestCase): group_ref = unit.new_group_ref(domain_id=self.domain_id) group = PROVIDERS.identity_api.create_group(group_ref) PROVIDERS.identity_api.add_user_to_group(self.user_id, group['id']) - url = '/domains/%s/groups/%s/roles/%s' % ( + url = '/domains/{}/groups/{}/roles/{}'.format( self.domain_id, group['id'], self.role_id, @@ -1648,7 +1648,7 @@ class CadfNotificationsWrapperTestCase(test_v3.RestfulTestCase): class TestCallbackRegistration(unit.BaseTestCase): def setUp(self): - super(TestCallbackRegistration, self).setUp() + super().setUp() self.mock_log = mock.Mock() # Force the callback logging to occur self.mock_log.logger.getEffectiveLevel.return_value = log.DEBUG @@ -1685,7 +1685,7 @@ class TestCallbackRegistration(unit.BaseTestCase): self.verify_log_message([expected_log_data]) def test_a_method_callback(self): - class C(object): + class C: def callback(self, *args, **kwargs): pass @@ -1705,7 +1705,7 @@ class TestCallbackRegistration(unit.BaseTestCase): def callback(*args, **kwargs): pass - class C(object): + class C: def callback(self, *args, **kwargs): pass @@ -1745,7 +1745,7 @@ class TestCallbackRegistration(unit.BaseTestCase): class CADFNotificationsDataTestCase(test_v3.RestfulTestCase): def config_overrides(self): - super(CADFNotificationsDataTestCase, self).config_overrides() + super().config_overrides() # NOTE(lbragstad): This is a workaround since oslo.messaging version # 9.0.0 had a broken default for transport_url. This makes it so that # we are able to use version 9.0.0 in tests because we are supplying diff --git a/keystone/tests/unit/common/test_provider_api.py b/keystone/tests/unit/common/test_provider_api.py index 5ebb28b448..e1e4623c5a 100644 --- a/keystone/tests/unit/common/test_provider_api.py +++ b/keystone/tests/unit/common/test_provider_api.py @@ -21,7 +21,7 @@ from keystone.tests import unit class TestProviderAPIRegistry(unit.BaseTestCase): def setUp(self): - super(TestProviderAPIRegistry, self).setUp() + super().setUp() provider_api.ProviderAPIs._clear_registry_instances() self.addCleanup(provider_api.ProviderAPIs._clear_registry_instances) @@ -40,7 +40,7 @@ class TestProviderAPIRegistry(unit.BaseTestCase): def test_deferred_gettr(self): api_name = '%s_api' % uuid.uuid4().hex - class TestClass(object): + class TestClass: descriptor = provider_api.ProviderAPIs.deferred_provider_lookup( api=api_name, method='do_something' ) @@ -69,7 +69,7 @@ class TestProviderAPIRegistry(unit.BaseTestCase): def test_provider_api_mixin(self): test_manager = self._create_manager_instance() - class Testing(provider_api.ProviderAPIMixin, object): + class Testing(provider_api.ProviderAPIMixin): pass instance = Testing() diff --git a/keystone/tests/unit/common/test_rbac_enforcer.py b/keystone/tests/unit/common/test_rbac_enforcer.py index 1ef5ef367b..499a762855 100644 --- a/keystone/tests/unit/common/test_rbac_enforcer.py +++ b/keystone/tests/unit/common/test_rbac_enforcer.py @@ -54,7 +54,7 @@ class TestRBACEnforcer(unit.TestCase): class _TestRBACEnforcerBase(rest.RestfulTestCase): def setUp(self): - super(_TestRBACEnforcerBase, self).setUp() + super().setUp() self._setup_enforcer_object() self._setup_dynamic_flask_blueprint_api() self._setup_flask_restful_api() @@ -198,7 +198,7 @@ class _TestRBACEnforcerBase(rest.RestfulTestCase): class TestRBACEnforcerRestAdminAuthToken(_TestRBACEnforcerBase): def config_overrides(self): - super(TestRBACEnforcerRestAdminAuthToken, self).config_overrides() + super().config_overrides() self.config_fixture.config(admin_token='ADMIN') def test_enforcer_is_admin_check_with_token(self): @@ -297,12 +297,12 @@ class TestRBACEnforcerRest(_TestRBACEnforcerBase): # Populate the query-string with two params, one that should # exist and one that should not in the resulting policy # dict. - qs = '%(expected)s=EXPECTED&%(unexpected)s=UNEXPECTED' % { - 'expected': expected_param, - 'unexpected': unexpected_param, - } + qs = '{expected}=EXPECTED&{unexpected}=UNEXPECTED'.format( + expected=expected_param, + unexpected=unexpected_param, + ) # Perform the get with the query-string - c.get('%(path)s?%(qs)s' % {'path': get_path, 'qs': qs}) + c.get(f'{get_path}?{qs}') # Extract the filter values. extracted_filter = self.enforcer._extract_filter_values( [expected_param] @@ -386,7 +386,9 @@ class TestRBACEnforcerRest(_TestRBACEnforcerBase): with self.test_client() as c: c.get( - '%s/argument/%s' % (self.restful_api_url_prefix, argument_id) + '{}/argument/{}'.format( + self.restful_api_url_prefix, argument_id + ) ) extracted = self.enforcer._extract_member_target_data( member_target_type=None, member_target=None @@ -430,7 +432,9 @@ class TestRBACEnforcerRest(_TestRBACEnforcerBase): token_id = r.headers['X-Subject-Token'] c.get( - '%s/argument/%s' % (self.restful_api_url_prefix, argument_id), + '{}/argument/{}'.format( + self.restful_api_url_prefix, argument_id + ), headers={'X-Auth-Token': token_id}, ) @@ -508,7 +512,9 @@ class TestRBACEnforcerRest(_TestRBACEnforcerBase): token_id = r.headers['X-Subject-Token'] c.get( - '%s/argument/%s' % (self.restful_api_url_prefix, argument_id), + '{}/argument/{}'.format( + self.restful_api_url_prefix, argument_id + ), headers={'X-Auth-Token': token_id}, ) self.enforcer.enforce_call( diff --git a/keystone/tests/unit/common/test_utils.py b/keystone/tests/unit/common/test_utils.py index dfd4b73bac..288ebc8eba 100644 --- a/keystone/tests/unit/common/test_utils.py +++ b/keystone/tests/unit/common/test_utils.py @@ -1,4 +1,3 @@ -# encoding: utf-8 # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at @@ -39,30 +38,30 @@ class UtilsTestCase(unit.BaseTestCase): OPTIONAL = object() def setUp(self): - super(UtilsTestCase, self).setUp() + super().setUp() self.config_fixture = self.useFixture(config_fixture.Config(CONF)) def test_resource_uuid(self): # Basic uuid test, most IDs issued by keystone look like this: - value = u'536e28c2017e405e89b25a1ed777b952' + value = '536e28c2017e405e89b25a1ed777b952' self.assertEqual(value, common_utils.resource_uuid(value)) def test_resource_64_char_uuid(self): # Exact 64 length string, like ones used by mapping_id backend, are not # valid UUIDs, so they will be UUID5 namespaced - value = u'f13de678ac714bb1b7d1e9a007c10db5' * 2 + value = 'f13de678ac714bb1b7d1e9a007c10db5' * 2 expected_id = uuid.uuid5(common_utils.RESOURCE_ID_NAMESPACE, value).hex self.assertEqual(expected_id, common_utils.resource_uuid(value)) def test_resource_non_ascii_chars(self): # IDs with non-ASCII characters will be UUID5 namespaced - value = u'ß' * 32 + value = 'ß' * 32 expected_id = uuid.uuid5(common_utils.RESOURCE_ID_NAMESPACE, value).hex self.assertEqual(expected_id, common_utils.resource_uuid(value)) def test_resource_invalid_id(self): # This input is invalid because it's length is more than 64. - value = u'x' * 65 + value = 'x' * 65 self.assertRaises(ValueError, common_utils.resource_uuid, value) def test_hash(self): @@ -110,7 +109,7 @@ class UtilsTestCase(unit.BaseTestCase): ) def test_verify_length_and_trunc_password_throws_validation_error(self): - class SpecialObject(object): + class SpecialObject: pass special_object = SpecialObject() @@ -195,7 +194,7 @@ class UtilsTestCase(unit.BaseTestCase): self.assertFalse(common_utils.check_password(None, hashed)) def test_hash_unicode(self): - password = u'Comment \xe7a va' + password = 'Comment \xe7a va' wrong = 'Comment ?a va' hashed = common_utils.hash_password(password) self.assertTrue(common_utils.check_password(password, hashed)) @@ -214,7 +213,7 @@ class UtilsTestCase(unit.BaseTestCase): self.assertTrue(common_utils.is_not_url_safe(base_str + i)) def test_url_safe_with_unicode_check(self): - base_str = u'i am \xe7afe' + base_str = 'i am \xe7afe' self.assertFalse(common_utils.is_not_url_safe(base_str)) for i in common_utils.URL_RESERVED_CHARS: self.assertTrue(common_utils.is_not_url_safe(base_str + i)) @@ -375,7 +374,7 @@ class ServiceHelperTests(unit.BaseTestCase): class FernetUtilsTestCase(unit.BaseTestCase): def setUp(self): - super(FernetUtilsTestCase, self).setUp() + super().setUp() self.config_fixture = self.useFixture(config_fixture.Config(CONF)) def test_debug_message_logged_when_loading_fernet_token_keys(self): diff --git a/keystone/tests/unit/contrib/federation/test_utils.py b/keystone/tests/unit/contrib/federation/test_utils.py index 33dc9e1d00..698567df58 100644 --- a/keystone/tests/unit/contrib/federation/test_utils.py +++ b/keystone/tests/unit/contrib/federation/test_utils.py @@ -34,7 +34,7 @@ class MappingRuleEngineTests(unit.BaseTestCase): """A class for testing the mapping rule engine.""" def setUp(self): - super(MappingRuleEngineTests, self).setUp() + super().setUp() # create dummy app so we can setup a request context for our # tests. self.flask_app = flask.Flask(__name__) @@ -77,7 +77,7 @@ class MappingRuleEngineTests(unit.BaseTestCase): fn = assertion.get('FirstName') ln = assertion.get('LastName') - full_name = '%s %s' % (fn, ln) + full_name = f'{fn} {ln}' group_ids = values.get('group_ids') user_name = values.get('user', {}).get('name') @@ -962,7 +962,7 @@ class TestUnicodeAssertionData(unit.BaseTestCase): """ def setUp(self): - super(TestUnicodeAssertionData, self).setUp() + super().setUp() self.config_fixture = self.useFixture(config_fixture.Config(CONF)) self.config_fixture.config(group='federation', assertion_prefix='PFX') @@ -1001,7 +1001,7 @@ class TestUnicodeAssertionData(unit.BaseTestCase): fn = assertion.get('PFX_FirstName') ln = assertion.get('PFX_LastName') - full_name = '%s %s' % (fn, ln) + full_name = f'{fn} {ln}' user_name = values.get('user', {}).get('name') self.assertEqual(full_name, user_name) diff --git a/keystone/tests/unit/core.py b/keystone/tests/unit/core.py index c6fea39e38..834123be21 100644 --- a/keystone/tests/unit/core.py +++ b/keystone/tests/unit/core.py @@ -95,7 +95,7 @@ os.makedirs(TMPDIR) atexit.register(shutil.rmtree, TMPDIR) -class dirs(object): +class dirs: @staticmethod def root(*p): return os.path.join(ROOTDIR, *p) @@ -408,7 +408,7 @@ def new_cert_credential(user_id, project_id=None, blob=None, **kwargs): project_id=project_id, blob=json.dumps(blob), type='cert', - **kwargs + **kwargs, ) return blob, credential @@ -430,7 +430,7 @@ def new_ec2_credential(user_id, project_id=None, blob=None, **kwargs): project_id=project_id, blob=json.dumps(blob), type='ec2', - **kwargs + **kwargs, ) return blob, credential @@ -598,7 +598,7 @@ def new_trust_ref( remaining_uses=None, allow_redelegation=False, redelegation_count=None, - **kwargs + **kwargs, ): ref = { 'id': uuid.uuid4().hex, @@ -738,27 +738,27 @@ class KeystoneFlaskTestClient(flask_testing.FlaskClient): @_assert_expected_status def get(self, *args, **kwargs): - return super(KeystoneFlaskTestClient, self).get(*args, **kwargs) + return super().get(*args, **kwargs) @_assert_expected_status def head(self, *args, **kwargs): - return super(KeystoneFlaskTestClient, self).head(*args, **kwargs) + return super().head(*args, **kwargs) @_assert_expected_status def post(self, *args, **kwargs): - return super(KeystoneFlaskTestClient, self).post(*args, **kwargs) + return super().post(*args, **kwargs) @_assert_expected_status def patch(self, *args, **kwargs): - return super(KeystoneFlaskTestClient, self).patch(*args, **kwargs) + return super().patch(*args, **kwargs) @_assert_expected_status def put(self, *args, **kwargs): - return super(KeystoneFlaskTestClient, self).put(*args, **kwargs) + return super().put(*args, **kwargs) @_assert_expected_status def delete(self, *args, **kwargs): - return super(KeystoneFlaskTestClient, self).delete(*args, **kwargs) + return super().delete(*args, **kwargs) class BaseTestCase(testtools.TestCase): @@ -771,7 +771,7 @@ class BaseTestCase(testtools.TestCase): """ def setUp(self): - super(BaseTestCase, self).setUp() + super().setUp() self.useFixture(fixtures.NestedTempfile()) self.useFixture(fixtures.TempHomeDir()) @@ -834,7 +834,7 @@ class BaseTestCase(testtools.TestCase): def skip_test_overrides(self, *args, **kwargs): if self._check_for_method_in_parents(self._testMethodName): - return super(BaseTestCase, self).skipTest(*args, **kwargs) + return super().skipTest(*args, **kwargs) raise Exception( '%r is not a previously defined test method' % self._testMethodName ) @@ -889,7 +889,7 @@ class TestCase(BaseTestCase): query_string = kwargs.pop('query_string', None) if query_string: # Make sure query string is properly added to the context - path = '{path}?{qs}'.format(path=path, qs=query_string) + path = f'{path}?{query_string}' if not environ.get(context.REQUEST_CONTEXT_ENV): environ[context.REQUEST_CONTEXT_ENV] = context.RequestContext( @@ -973,7 +973,7 @@ class TestCase(BaseTestCase): assert self.__config_overrides_called is True def setUp(self): - super(TestCase, self).setUp() + super().setUp() self.__config_overrides_called = False self.__load_backends_called = False self.config_fixture = self.useFixture(config_fixture.Config(CONF)) @@ -1126,7 +1126,7 @@ class TestCase(BaseTestCase): # Short-circuit if the values are the same. return - msg = '%s != %s within %s delta' % (a, b, delta) + msg = f'{a} != {b} within {delta} delta' self.assertLessEqual(abs(a - b).seconds, delta, msg) @@ -1136,7 +1136,7 @@ class TestCase(BaseTestCase): # is working to eliminate microseconds from it's datetimes used. expected = timeutils.parse_isotime(expected).replace(microsecond=0) value = timeutils.parse_isotime(value).replace(microsecond=0) - self.assertEqual(expected, value, "%s != %s" % (expected, value)) + self.assertEqual(expected, value, f"{expected} != {value}") def assertNotEmpty(self, iterable): self.assertGreater(len(iterable), 0) @@ -1171,7 +1171,7 @@ class TestCase(BaseTestCase): # NOTE(Mouad): Try to bind to IPv6 loopback ip address. sock.bind(("::1", 0)) return True - except socket.error: + except OSError: pass finally: if sock: @@ -1183,11 +1183,11 @@ class TestCase(BaseTestCase): raise self.skipTest("IPv6 is not enabled in the system") -class SQLDriverOverrides(object): +class SQLDriverOverrides: """A mixin for consolidating sql-specific test overrides.""" def config_overrides(self): - super(SQLDriverOverrides, self).config_overrides() + super().config_overrides() # SQL specific driver overrides self.config_fixture.config(group='catalog', driver='sql') self.config_fixture.config(group='identity', driver='sql') diff --git a/keystone/tests/unit/credential/test_backend_sql.py b/keystone/tests/unit/credential/test_backend_sql.py index 74cf312f5f..01a4a94ec4 100644 --- a/keystone/tests/unit/credential/test_backend_sql.py +++ b/keystone/tests/unit/credential/test_backend_sql.py @@ -30,7 +30,7 @@ PROVIDERS = provider_api.ProviderAPIs class SqlTests(unit.SQLDriverOverrides, unit.TestCase): def setUp(self): - super(SqlTests, self).setUp() + super().setUp() self.useFixture(database.Database()) self.load_backends() # populate the engine with tables & fixtures @@ -39,7 +39,7 @@ class SqlTests(unit.SQLDriverOverrides, unit.TestCase): self.user_foo['enabled'] = True def config_files(self): - config_files = super(SqlTests, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_sql.conf')) return config_files @@ -66,7 +66,7 @@ class SqlCredential(SqlTests): self.assertIn(cred['id'], retrieved_ids) def setUp(self): - super(SqlCredential, self).setUp() + super().setUp() self.useFixture( ksfixtures.KeyRepository( self.config_fixture, diff --git a/keystone/tests/unit/credential/test_fernet_provider.py b/keystone/tests/unit/credential/test_fernet_provider.py index c519f61253..7a59330d8e 100644 --- a/keystone/tests/unit/credential/test_fernet_provider.py +++ b/keystone/tests/unit/credential/test_fernet_provider.py @@ -25,7 +25,7 @@ from keystone.tests.unit.ksfixtures import database class TestFernetCredentialProvider(unit.TestCase): def setUp(self): - super(TestFernetCredentialProvider, self).setUp() + super().setUp() self.provider = credential_fernet.Provider() self.useFixture(database.Database()) self.useFixture( @@ -48,7 +48,7 @@ class TestFernetCredentialProvider(unit.TestCase): class TestFernetCredentialProviderWithNullKey(unit.TestCase): def setUp(self): - super(TestFernetCredentialProviderWithNullKey, self).setUp() + super().setUp() self.provider = credential_fernet.Provider() self.useFixture(database.Database()) # Only do this to set the key_repository location in configuration. To diff --git a/keystone/tests/unit/default_fixtures.py b/keystone/tests/unit/default_fixtures.py index 44208ef6d7..e4ceb9d22d 100644 --- a/keystone/tests/unit/default_fixtures.py +++ b/keystone/tests/unit/default_fixtures.py @@ -186,10 +186,10 @@ ROOT_DOMAIN = { DOMAINS = [ { - 'description': (u'The default domain'), + 'description': ('The default domain'), 'enabled': True, 'id': DEFAULT_DOMAIN_ID, - 'name': u'Default', + 'name': 'Default', } ] diff --git a/keystone/tests/unit/endpoint_policy/backends/test_base.py b/keystone/tests/unit/endpoint_policy/backends/test_base.py index 931ab28205..b3e5316cde 100644 --- a/keystone/tests/unit/endpoint_policy/backends/test_base.py +++ b/keystone/tests/unit/endpoint_policy/backends/test_base.py @@ -15,7 +15,7 @@ import uuid from keystone import exception -class DriverTestCase(object): +class DriverTestCase: """Test cases to validate the endpoint policy driver behavior.""" @property diff --git a/keystone/tests/unit/endpoint_policy/backends/test_sql.py b/keystone/tests/unit/endpoint_policy/backends/test_sql.py index 5cd9f3ad4d..5dc5e0e8c1 100644 --- a/keystone/tests/unit/endpoint_policy/backends/test_sql.py +++ b/keystone/tests/unit/endpoint_policy/backends/test_sql.py @@ -36,7 +36,7 @@ class SQLModelTestCase(core_sql.BaseBackendSqlModels): class SQLDriverTestCase(test_base.DriverTestCase, unit.TestCase): def setUp(self): - super(SQLDriverTestCase, self).setUp() + super().setUp() self.useFixture(database.Database()) self._driver = sql_driver.EndpointPolicy() diff --git a/keystone/tests/unit/fakeldap.py b/keystone/tests/unit/fakeldap.py index c99ce6b894..2c1b8defaa 100644 --- a/keystone/tests/unit/fakeldap.py +++ b/keystone/tests/unit/fakeldap.py @@ -241,7 +241,7 @@ class FakeLdap(common.LDAPHandler): __prefix = 'ldap:' def __init__(self, conn=None): - super(FakeLdap, self).__init__(conn=conn) + super().__init__(conn=conn) self._ldap_options = {ldap.OPT_DEREF: ldap.DEREF_NEVER} def connect( @@ -306,7 +306,7 @@ class FakeLdap(common.LDAPHandler): return ldap.dn.str2dn(dn)[0][0][1] def key(self, dn): - return '%s%s' % (self.__prefix, dn) + return f'{self.__prefix}{dn}' def simple_bind_s( self, who='', cred='', serverctrls=None, clientctrls=None @@ -392,9 +392,7 @@ class FakeLdap(common.LDAPHandler): return [ k for k, v in self.db.items() - if re.match( - '%s.*,%s' % (re.escape(self.__prefix), re.escape(dn)), k - ) + if re.match(f'{re.escape(self.__prefix)}.*,{re.escape(dn)}', k) ] def delete_ext_s(self, dn, serverctrls, clientctrls=None): @@ -522,7 +520,10 @@ class FakeLdap(common.LDAPHandler): (k[len(self.__prefix) :], v) for k, v in self.db.items() if re.match( - '%s.*,%s' % (re.escape(self.__prefix), re.escape(base)), k + '{}.*,{}'.format( + re.escape(self.__prefix), re.escape(base) + ), + k, ) ] results.extend(extraresults) @@ -658,7 +659,7 @@ class FakeLdapPool(FakeLdap): """ def __init__(self, uri, retry_max=None, retry_delay=None, conn=None): - super(FakeLdapPool, self).__init__(conn=conn) + super().__init__(conn=conn) self.url = uri self._uri = uri self.connected = None @@ -683,7 +684,7 @@ class FakeLdapPool(FakeLdap): if not cred: cred = 'password' - super(FakeLdapPool, self).simple_bind_s( + super().simple_bind_s( who=who, cred=cred, serverctrls=serverctrls, @@ -716,6 +717,4 @@ class FakeLdapNoSubtreeDelete(FakeLdap): except KeyError: LOG.debug('delete item failed: dn=%s not found.', dn) raise ldap.NO_SUCH_OBJECT - super(FakeLdapNoSubtreeDelete, self).delete_ext_s( - dn, serverctrls, clientctrls - ) + super().delete_ext_s(dn, serverctrls, clientctrls) diff --git a/keystone/tests/unit/federation/test_core.py b/keystone/tests/unit/federation/test_core.py index fc4a592a0d..8c2b397644 100644 --- a/keystone/tests/unit/federation/test_core.py +++ b/keystone/tests/unit/federation/test_core.py @@ -25,7 +25,7 @@ PROVIDERS = provider_api.ProviderAPIs class TestFederationProtocol(unit.TestCase): def setUp(self): - super(TestFederationProtocol, self).setUp() + super().setUp() self.useFixture(database.Database()) self.load_backends() PROVIDERS.resource_api.create_domain( diff --git a/keystone/tests/unit/federation/test_utils.py b/keystone/tests/unit/federation/test_utils.py index 3de170e735..d0ceab42d9 100644 --- a/keystone/tests/unit/federation/test_utils.py +++ b/keystone/tests/unit/federation/test_utils.py @@ -20,7 +20,7 @@ from keystone.tests import unit class TestFederationUtils(unit.TestCase): def setUp(self): - super(TestFederationUtils, self).setUp() + super().setUp() self.mapping_id_mock = uuid.uuid4().hex self.domain_id_mock = uuid.uuid4().hex self.domain_mock = {'id': self.domain_id_mock} diff --git a/keystone/tests/unit/filtering.py b/keystone/tests/unit/filtering.py index b40607fbbf..7ed2b0f4ef 100644 --- a/keystone/tests/unit/filtering.py +++ b/keystone/tests/unit/filtering.py @@ -23,7 +23,7 @@ PROVIDERS = provider_api.ProviderAPIs CONF = keystone.conf.CONF -class FilterTests(object): +class FilterTests: # Provide support for checking if a batch of list items all # exist within a contiguous range in a total list diff --git a/keystone/tests/unit/identity/backends/test_base.py b/keystone/tests/unit/identity/backends/test_base.py index 2f21ead811..59044e525b 100644 --- a/keystone/tests/unit/identity/backends/test_base.py +++ b/keystone/tests/unit/identity/backends/test_base.py @@ -16,7 +16,7 @@ from keystone.common import driver_hints from keystone import exception -class IdentityDriverTests(object): +class IdentityDriverTests: driver = None # subclasses must override driver to the actual driver. # subclasses that don't allow name updates must set this to False. diff --git a/keystone/tests/unit/identity/backends/test_ldap.py b/keystone/tests/unit/identity/backends/test_ldap.py index 99cc3af9da..fed139bafb 100644 --- a/keystone/tests/unit/identity/backends/test_ldap.py +++ b/keystone/tests/unit/identity/backends/test_ldap.py @@ -28,7 +28,7 @@ class TestIdentityDriver(core.BaseTestCase, test_base.IdentityDriverTests): expected_generates_uuids = False def setUp(self): - super(TestIdentityDriver, self).setUp() + super().setUp() config_fixture_ = self.useFixture(config_fixture.Config()) config_fixture_.config( diff --git a/keystone/tests/unit/identity/backends/test_ldap_common.py b/keystone/tests/unit/identity/backends/test_ldap_common.py index ce1d749314..8428ad336d 100644 --- a/keystone/tests/unit/identity/backends/test_ldap_common.py +++ b/keystone/tests/unit/identity/backends/test_ldap_common.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at @@ -135,7 +134,7 @@ class DnCompareTest(unit.BaseTestCase): def test_dn_equal_unicode(self): # is_dn_equal can accept unicode - dn = u'cn=fäké,ou=OpenStack' + dn = 'cn=fäké,ou=OpenStack' self.assertTrue(common_ldap.is_dn_equal(dn, dn)) def test_dn_diff_length(self): @@ -199,15 +198,15 @@ class DnCompareTest(unit.BaseTestCase): def test_startswith_unicode(self): # dn_startswith accepts unicode. - child = u'cn=fäké,ou=OpenStäck' - parent = u'ou=OpenStäck' + child = 'cn=fäké,ou=OpenStäck' + parent = 'ou=OpenStäck' self.assertTrue(common_ldap.dn_startswith(child, parent)) class LDAPDeleteTreeTest(unit.TestCase): def setUp(self): - super(LDAPDeleteTreeTest, self).setUp() + super().setUp() self.useFixture( ldapdb.LDAPDatabase(dbclass=fakeldap.FakeLdapNoSubtreeDelete) @@ -218,11 +217,11 @@ class LDAPDeleteTreeTest(unit.TestCase): self.load_fixtures(default_fixtures) def config_overrides(self): - super(LDAPDeleteTreeTest, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='identity', driver='ldap') def config_files(self): - config_files = super(LDAPDeleteTreeTest, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap.conf')) return config_files @@ -347,7 +346,7 @@ class SslTlsTest(unit.BaseTestCase): """Test for the SSL/TLS functionality in keystone.common.ldap.core.""" def setUp(self): - super(SslTlsTest, self).setUp() + super().setUp() self.config_fixture = self.useFixture(config_fixture.Config(CONF)) @mock.patch.object(common_ldap.KeystoneLDAPHandler, 'simple_bind_s') @@ -426,7 +425,7 @@ class LDAPPagedResultsTest(unit.TestCase): """Test the paged results functionality in keystone.common.ldap.core.""" def setUp(self): - super(LDAPPagedResultsTest, self).setUp() + super().setUp() self.useFixture(ldapdb.LDAPDatabase()) self.useFixture(database.Database()) @@ -435,11 +434,11 @@ class LDAPPagedResultsTest(unit.TestCase): self.load_fixtures(default_fixtures) def config_overrides(self): - super(LDAPPagedResultsTest, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='identity', driver='ldap') def config_files(self): - config_files = super(LDAPPagedResultsTest, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap.conf')) return config_files @@ -485,7 +484,7 @@ class CommonLdapTestCase(unit.BaseTestCase): self.assertNotIn('binary_attr', py_result[0][1]) def test_utf8_conversion(self): - value_unicode = u'fäké1' + value_unicode = 'fäké1' value_utf8 = value_unicode.encode('utf-8') result_utf8 = common_ldap.utf8_encode(value_unicode) @@ -503,7 +502,7 @@ class CommonLdapTestCase(unit.BaseTestCase): self.assertRaises(TypeError, common_ldap.utf8_encode, 100) result_unicode = common_ldap.utf8_decode(100) - self.assertEqual(u'100', result_unicode) + self.assertEqual('100', result_unicode) def test_user_id_begins_with_0(self): user_id = '0123456' @@ -596,7 +595,7 @@ class LDAPFilterQueryCompositionTest(unit.BaseTestCase): """These test cases test LDAP filter generation.""" def setUp(self): - super(LDAPFilterQueryCompositionTest, self).setUp() + super().setUp() self.config_fixture = self.useFixture(config_fixture.Config(CONF)) self.base_ldap = common_ldap.BaseLdap(self.config_fixture.conf) @@ -629,7 +628,7 @@ class LDAPFilterQueryCompositionTest(unit.BaseTestCase): comparator='equals', case_sensitive=False, ) - expected_ldap_filter = '(&(%s=%s))' % ( + expected_ldap_filter = '(&({}={}))'.format( self.filter_attribute_name, username, ) @@ -665,7 +664,7 @@ class LDAPFilterQueryCompositionTest(unit.BaseTestCase): comparator='equals', case_sensitive=False, ) - expected_ldap_filter = '(&(%s=%s))' % ( + expected_ldap_filter = '(&({}={}))'.format( self.filter_attribute_name, username, ) @@ -679,7 +678,7 @@ class LDAPSizeLimitTest(unit.TestCase): """Test the size limit exceeded handling in keystone.common.ldap.core.""" def setUp(self): - super(LDAPSizeLimitTest, self).setUp() + super().setUp() self.useFixture(ldapdb.LDAPDatabase()) self.useFixture(database.Database()) @@ -688,11 +687,11 @@ class LDAPSizeLimitTest(unit.TestCase): self.load_fixtures(default_fixtures) def config_overrides(self): - super(LDAPSizeLimitTest, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='identity', driver='ldap') def config_files(self): - config_files = super(LDAPSizeLimitTest, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap.conf')) return config_files diff --git a/keystone/tests/unit/identity/backends/test_sql.py b/keystone/tests/unit/identity/backends/test_sql.py index 6bd971e653..3f3b068c5f 100644 --- a/keystone/tests/unit/identity/backends/test_sql.py +++ b/keystone/tests/unit/identity/backends/test_sql.py @@ -32,7 +32,7 @@ class TestIdentityDriver( expected_generates_uuids = True def setUp(self): - super(TestIdentityDriver, self).setUp() + super().setUp() self.engine = enginefacade.writer.get_engine() self.sessionmaker = enginefacade.writer.get_sessionmaker() diff --git a/keystone/tests/unit/identity/shadow_users/test_backend.py b/keystone/tests/unit/identity/shadow_users/test_backend.py index 2dc0827558..dd23f22b3e 100644 --- a/keystone/tests/unit/identity/shadow_users/test_backend.py +++ b/keystone/tests/unit/identity/shadow_users/test_backend.py @@ -27,7 +27,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class ShadowUsersBackendTests(object): +class ShadowUsersBackendTests: def test_create_nonlocal_user_unique_constraint(self): user = unit.new_user_ref(domain_id=CONF.identity.default_domain_id) user_created = PROVIDERS.shadow_users_api.create_nonlocal_user(user) diff --git a/keystone/tests/unit/identity/shadow_users/test_core.py b/keystone/tests/unit/identity/shadow_users/test_core.py index 51c225488e..37d4c508f8 100644 --- a/keystone/tests/unit/identity/shadow_users/test_core.py +++ b/keystone/tests/unit/identity/shadow_users/test_core.py @@ -19,7 +19,7 @@ from keystone.common import provider_api PROVIDERS = provider_api.ProviderAPIs -class ShadowUsersCoreTests(object): +class ShadowUsersCoreTests: def test_shadow_federated_user(self): federated_user1 = copy.deepcopy(self.federated_user) ShadowUsersCoreTests.normalize_federated_user_properties_for_test( diff --git a/keystone/tests/unit/identity/test_backend_sql.py b/keystone/tests/unit/identity/test_backend_sql.py index 8be06d534e..1863a7a570 100644 --- a/keystone/tests/unit/identity/test_backend_sql.py +++ b/keystone/tests/unit/identity/test_backend_sql.py @@ -34,7 +34,7 @@ PROVIDERS = provider_api.ProviderAPIs class UserPasswordCreatedAtIntTests(test_backend_sql.SqlTests): def config_overrides(self): - super(UserPasswordCreatedAtIntTests, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='security_compliance', password_expires_days=1 ) @@ -66,7 +66,7 @@ class UserPasswordCreatedAtIntTests(test_backend_sql.SqlTests): class UserPasswordHashingTestsNoCompat(test_backend_sql.SqlTests): def config_overrides(self): - super(UserPasswordHashingTestsNoCompat, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='identity', password_hash_algorithm='scrypt' ) @@ -84,7 +84,7 @@ class UserPasswordHashingTestsNoCompat(test_backend_sql.SqlTests): class UserResourceOptionTests(test_backend_sql.SqlTests): def setUp(self): - super(UserResourceOptionTests, self).setUp() + super().setUp() # RESET STATE OF REGISTRY OPTIONS self.addCleanup(iro.register_user_options) self.addCleanup(iro.USER_OPTIONS_REGISTRY._registered_options.clear) @@ -285,7 +285,7 @@ class UserResourceOptionTests(test_backend_sql.SqlTests): class DisableInactiveUserTests(test_backend_sql.SqlTests): def setUp(self): - super(DisableInactiveUserTests, self).setUp() + super().setUp() self.password = uuid.uuid4().hex self.user_dict = self._get_user_dict(self.password) self.max_inactive_days = 90 @@ -454,7 +454,7 @@ class DisableInactiveUserTests(test_backend_sql.SqlTests): class PasswordHistoryValidationTests(test_backend_sql.SqlTests): def setUp(self): - super(PasswordHistoryValidationTests, self).setUp() + super().setUp() self.max_cnt = 3 self.config_fixture.config( group='security_compliance', @@ -652,7 +652,7 @@ class PasswordHistoryValidationTests(test_backend_sql.SqlTests): class LockingOutUserTests(test_backend_sql.SqlTests): def setUp(self): - super(LockingOutUserTests, self).setUp() + super().setUp() self.config_fixture.config( group='security_compliance', lockout_failure_attempts=6 ) @@ -804,7 +804,7 @@ class LockingOutUserTests(test_backend_sql.SqlTests): class PasswordExpiresValidationTests(test_backend_sql.SqlTests): def setUp(self): - super(PasswordExpiresValidationTests, self).setUp() + super().setUp() self.password = uuid.uuid4().hex self.user_dict = self._get_test_user_dict(self.password) self.config_fixture.config( @@ -890,7 +890,7 @@ class PasswordExpiresValidationTests(test_backend_sql.SqlTests): class MinimumPasswordAgeTests(test_backend_sql.SqlTests): def setUp(self): - super(MinimumPasswordAgeTests, self).setUp() + super().setUp() self.config_fixture.config( group='security_compliance', minimum_password_age=1 ) diff --git a/keystone/tests/unit/identity/test_backends.py b/keystone/tests/unit/identity/test_backends.py index 5b061ea515..025dccd2aa 100644 --- a/keystone/tests/unit/identity/test_backends.py +++ b/keystone/tests/unit/identity/test_backends.py @@ -29,7 +29,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class IdentityTests(object): +class IdentityTests: def _get_domain_fixture(self): domain = unit.new_domain_ref() @@ -116,7 +116,7 @@ class IdentityTests(object): ) def test_create_unicode_user_name(self): - unicode_name = u'name \u540d\u5b57' + unicode_name = 'name \u540d\u5b57' user = unit.new_user_ref( name=unicode_name, domain_id=CONF.identity.default_domain_id ) @@ -470,11 +470,11 @@ class IdentityTests(object): ) ) self.assertEqual(len(default_fixtures.USERS), len(users)) - user_ids = set(user['id'] for user in users) - expected_user_ids = set( + user_ids = {user['id'] for user in users} + expected_user_ids = { getattr(self, 'user_%s' % user['name'])['id'] for user in default_fixtures.USERS - ) + } for user_ref in users: self.assertNotIn('password', user_ref) self.assertEqual(expected_user_ids, user_ids) @@ -1140,7 +1140,9 @@ class IdentityTests(object): # The test is designed for multiple domains only def create_domains(domain_count, domain_name_prefix): for _ in range(domain_count): - domain_name = '%s-%s' % (domain_name_prefix, uuid.uuid4().hex) + domain_name = '{}-{}'.format( + domain_name_prefix, uuid.uuid4().hex + ) domain = unit.new_domain_ref(name=domain_name) self.domain_list[domain_name] = ( PROVIDERS.resource_api.create_domain(domain['id'], domain) diff --git a/keystone/tests/unit/identity/test_core.py b/keystone/tests/unit/identity/test_core.py index 918942b1de..08aa68699a 100644 --- a/keystone/tests/unit/identity/test_core.py +++ b/keystone/tests/unit/identity/test_core.py @@ -38,7 +38,7 @@ PROVIDERS = provider_api.ProviderAPIs class TestDomainConfigs(unit.BaseTestCase): def setUp(self): - super(TestDomainConfigs, self).setUp() + super().setUp() self.addCleanup(CONF.reset) self.tmp_dir = unit.dirs.tmp() @@ -108,7 +108,7 @@ class TestDomainConfigs(unit.BaseTestCase): for idx, is_sql in enumerate((True, False, True)): drv = mock.Mock(is_sql=is_sql) drivers.append(drv) - name = 'dummy.{0}'.format(idx) + name = f'dummy.{idx}' files.append( ''.join( ( @@ -150,7 +150,7 @@ class TestDomainConfigs(unit.BaseTestCase): class TestDatabaseDomainConfigs(unit.TestCase): def setUp(self): - super(TestDatabaseDomainConfigs, self).setUp() + super().setUp() self.useFixture(database.Database()) self.load_backends() PROVIDERS.resource_api.create_domain( diff --git a/keystone/tests/unit/ksfixtures/auth_plugins.py b/keystone/tests/unit/ksfixtures/auth_plugins.py index 1e1c7ac1cf..301dd01522 100644 --- a/keystone/tests/unit/ksfixtures/auth_plugins.py +++ b/keystone/tests/unit/ksfixtures/auth_plugins.py @@ -21,13 +21,13 @@ class ConfigAuthPlugins(fixtures.Fixture): """A fixture for setting up and tearing down a auth plugins.""" def __init__(self, config_fixture, methods, **method_classes): - super(ConfigAuthPlugins, self).__init__() + super().__init__() self.methods = methods self.config_fixture = config_fixture self.method_classes = method_classes def setUp(self): - super(ConfigAuthPlugins, self).setUp() + super().setUp() if self.methods: self.config_fixture.config(group='auth', methods=self.methods) keystone.conf.auth.setup_authentication() @@ -38,7 +38,7 @@ class ConfigAuthPlugins(fixtures.Fixture): class LoadAuthPlugins(fixtures.Fixture): def __init__(self, *method_names): - super(LoadAuthPlugins, self).__init__() + super().__init__() self.method_names = method_names # NOTE(dstanek): This fixture will load the requested auth # methods as part of its setup. We need to save any existing @@ -46,7 +46,7 @@ class LoadAuthPlugins(fixtures.Fixture): self.saved = {} def setUp(self): - super(LoadAuthPlugins, self).setUp() + super().setUp() AUTH_METHODS = auth.core.AUTH_METHODS for method_name in self.method_names: diff --git a/keystone/tests/unit/ksfixtures/backendloader.py b/keystone/tests/unit/ksfixtures/backendloader.py index 834a0a9166..e00a5cf0ff 100644 --- a/keystone/tests/unit/ksfixtures/backendloader.py +++ b/keystone/tests/unit/ksfixtures/backendloader.py @@ -21,11 +21,11 @@ class BackendLoader(fixtures.Fixture): """Initialize each manager and assigns them to an attribute.""" def __init__(self, testcase): - super(BackendLoader, self).__init__() + super().__init__() self._testcase = testcase def setUp(self): - super(BackendLoader, self).setUp() + super().setUp() self.clear_auth_plugin_registry() drivers, _unused = keystone.server.setup_backends() diff --git a/keystone/tests/unit/ksfixtures/cache.py b/keystone/tests/unit/ksfixtures/cache.py index 9707c7a4e8..0c1fd4aaec 100644 --- a/keystone/tests/unit/ksfixtures/cache.py +++ b/keystone/tests/unit/ksfixtures/cache.py @@ -32,7 +32,7 @@ class Cache(fixtures.Fixture): """ def setUp(self): - super(Cache, self).setUp() + super().setUp() # NOTE(dstanek): We must remove the existing cache backend in the # setUp instead of the tearDown because it defaults to a no-op cache diff --git a/keystone/tests/unit/ksfixtures/database.py b/keystone/tests/unit/ksfixtures/database.py index 126d6f11a8..20fbe75e49 100644 --- a/keystone/tests/unit/ksfixtures/database.py +++ b/keystone/tests/unit/ksfixtures/database.py @@ -105,13 +105,13 @@ class Database(fixtures.Fixture): """A fixture for setting up and tearing down a database.""" def __init__(self): - super(Database, self).__init__() + super().__init__() initialize_sql_session() _load_sqlalchemy_models() sql.enable_sqlite_foreign_key() def setUp(self): - super(Database, self).setUp() + super().setUp() with sql.session_for_write() as session: self.engine = session.get_bind() diff --git a/keystone/tests/unit/ksfixtures/jws_key_repository.py b/keystone/tests/unit/ksfixtures/jws_key_repository.py index 2ba354706a..2080aee4d0 100644 --- a/keystone/tests/unit/ksfixtures/jws_key_repository.py +++ b/keystone/tests/unit/ksfixtures/jws_key_repository.py @@ -20,12 +20,12 @@ from keystone.common import utils class JWSKeyRepository(fixtures.Fixture): def __init__(self, config_fixture): - super(JWSKeyRepository, self).__init__() + super().__init__() self.config_fixture = config_fixture self.key_group = 'jwt_tokens' def setUp(self): - super(JWSKeyRepository, self).setUp() + super().setUp() # grab a couple of temporary directory file paths private_key_directory = self.useFixture(fixtures.TempDir()).path diff --git a/keystone/tests/unit/ksfixtures/key_repository.py b/keystone/tests/unit/ksfixtures/key_repository.py index c43fc11095..f62ef3785b 100644 --- a/keystone/tests/unit/ksfixtures/key_repository.py +++ b/keystone/tests/unit/ksfixtures/key_repository.py @@ -17,13 +17,13 @@ from keystone.common import fernet_utils as utils class KeyRepository(fixtures.Fixture): def __init__(self, config_fixture, key_group, max_active_keys): - super(KeyRepository, self).__init__() + super().__init__() self.config_fixture = config_fixture self.max_active_keys = max_active_keys self.key_group = key_group def setUp(self): - super(KeyRepository, self).setUp() + super().setUp() directory = self.useFixture(fixtures.TempDir()).path self.config_fixture.config( group=self.key_group, key_repository=directory diff --git a/keystone/tests/unit/ksfixtures/ldapdb.py b/keystone/tests/unit/ksfixtures/ldapdb.py index fe24fab42a..61c82f3e6c 100644 --- a/keystone/tests/unit/ksfixtures/ldapdb.py +++ b/keystone/tests/unit/ksfixtures/ldapdb.py @@ -24,7 +24,7 @@ class LDAPDatabase(fixtures.Fixture): self._dbclass = dbclass def setUp(self): - super(LDAPDatabase, self).setUp() + super().setUp() self.clear() common_ldap.WRITABLE = True common_ldap._HANDLERS.clear() diff --git a/keystone/tests/unit/ksfixtures/policy.py b/keystone/tests/unit/ksfixtures/policy.py index 4a7c24c703..6a6c2be84e 100644 --- a/keystone/tests/unit/ksfixtures/policy.py +++ b/keystone/tests/unit/ksfixtures/policy.py @@ -25,7 +25,7 @@ class Policy(fixtures.Fixture): self._config_fixture = config_fixture def setUp(self): - super(Policy, self).setUp() + super().setUp() opts.set_defaults(self._config_fixture.conf) self._config_fixture.config( group='oslo_policy', policy_file=self._policy_file diff --git a/keystone/tests/unit/ksfixtures/temporaryfile.py b/keystone/tests/unit/ksfixtures/temporaryfile.py index a4be06f81c..02e7fe5f34 100644 --- a/keystone/tests/unit/ksfixtures/temporaryfile.py +++ b/keystone/tests/unit/ksfixtures/temporaryfile.py @@ -21,7 +21,7 @@ class SecureTempFile(fixtures.Fixture): """A fixture for creating a secure temp file.""" def setUp(self): - super(SecureTempFile, self).setUp() + super().setUp() _fd, self.file_name = tempfile.mkstemp() # Make sure no file descriptors are leaked, close the unused FD. diff --git a/keystone/tests/unit/limit/test_backends.py b/keystone/tests/unit/limit/test_backends.py index a046bf59b9..4dcc780bab 100644 --- a/keystone/tests/unit/limit/test_backends.py +++ b/keystone/tests/unit/limit/test_backends.py @@ -20,7 +20,7 @@ from keystone.tests import unit PROVIDERS = provider_api.ProviderAPIs -class RegisteredLimitTests(object): +class RegisteredLimitTests: def test_create_registered_limit_crud(self): # create one, return it. @@ -562,7 +562,7 @@ class RegisteredLimitTests(object): ) -class LimitTests(object): +class LimitTests: def test_default_enforcement_model_is_flat(self): expected = { diff --git a/keystone/tests/unit/mapping_fixtures.py b/keystone/tests/unit/mapping_fixtures.py index 4beb7328c3..de22719b4f 100644 --- a/keystone/tests/unit/mapping_fixtures.py +++ b/keystone/tests/unit/mapping_fixtures.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at diff --git a/keystone/tests/unit/policy/backends/test_base.py b/keystone/tests/unit/policy/backends/test_base.py index 7d8d975c55..993c0b27c0 100644 --- a/keystone/tests/unit/policy/backends/test_base.py +++ b/keystone/tests/unit/policy/backends/test_base.py @@ -15,11 +15,11 @@ import uuid from keystone import exception -class DriverTestCase(object): +class DriverTestCase: """Test cases to validate the current policy driver behavior.""" def setUp(self): - super(DriverTestCase, self).setUp() + super().setUp() self.policy = { 'id': uuid.uuid4().hex, diff --git a/keystone/tests/unit/policy/backends/test_sql.py b/keystone/tests/unit/policy/backends/test_sql.py index ce29429193..e4ecff0e7e 100644 --- a/keystone/tests/unit/policy/backends/test_sql.py +++ b/keystone/tests/unit/policy/backends/test_sql.py @@ -37,7 +37,7 @@ class SQLDriverTestCase(test_base.DriverTestCase, unit.TestCase): def setUp(self): # Load database first since parent's setUp will use it self.useFixture(database.Database()) - super(SQLDriverTestCase, self).setUp() + super().setUp() @property def driver(self): diff --git a/keystone/tests/unit/policy/test_backends.py b/keystone/tests/unit/policy/test_backends.py index b259dcaecb..177cf07fe4 100644 --- a/keystone/tests/unit/policy/test_backends.py +++ b/keystone/tests/unit/policy/test_backends.py @@ -19,7 +19,7 @@ from keystone.tests import unit PROVIDERS = provider_api.ProviderAPIs -class PolicyTests(object): +class PolicyTests: def test_create(self): ref = unit.new_policy_ref() res = PROVIDERS.policy_api.create_policy(ref['id'], ref) diff --git a/keystone/tests/unit/receipt/test_fernet_provider.py b/keystone/tests/unit/receipt/test_fernet_provider.py index 3deba23ab5..60b499bae4 100644 --- a/keystone/tests/unit/receipt/test_fernet_provider.py +++ b/keystone/tests/unit/receipt/test_fernet_provider.py @@ -40,7 +40,7 @@ PROVIDERS = provider_api.ProviderAPIs class TestFernetReceiptProvider(unit.TestCase): def setUp(self): - super(TestFernetReceiptProvider, self).setUp() + super().setUp() self.provider = fernet.Provider() def test_invalid_receipt_raises_receipt_not_found(self): @@ -50,12 +50,12 @@ class TestFernetReceiptProvider(unit.TestCase): self.provider.validate_receipt, receipt_id, ) - self.assertIn(receipt_id, u'%s' % e) + self.assertIn(receipt_id, '%s' % e) class TestValidate(unit.TestCase): def setUp(self): - super(TestValidate, self).setUp() + super().setUp() self.useFixture(database.Database()) self.useFixture( ksfixtures.ConfigAuthPlugins( @@ -68,7 +68,7 @@ class TestValidate(unit.TestCase): ) def config_overrides(self): - super(TestValidate, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='receipt', provider='fernet') def test_validate_v3_receipt_simple(self): @@ -101,8 +101,8 @@ class TestValidate(unit.TestCase): self.assertIsInstance(receipt.issued_at, str) self.assertEqual(set(method_names), set(receipt.methods)) self.assertEqual( - set(frozenset(r) for r in rule_list), - set(frozenset(r) for r in receipt.required_methods), + {frozenset(r) for r in rule_list}, + {frozenset(r) for r in receipt.required_methods}, ) self.assertEqual(user_ref['id'], receipt.user_id) @@ -143,7 +143,7 @@ class TestReceiptFormatter(unit.TestCase): class TestPayloads(unit.TestCase): def setUp(self): - super(TestPayloads, self).setUp() + super().setUp() self.useFixture( ksfixtures.ConfigAuthPlugins( self.config_fixture, ['totp', 'token', 'password'] @@ -246,7 +246,7 @@ class TestPayloads(unit.TestCase): class TestFernetKeyRotation(unit.TestCase): def setUp(self): - super(TestFernetKeyRotation, self).setUp() + super().setUp() # A collection of all previously-seen signatures of the key # repository's contents. diff --git a/keystone/tests/unit/receipt/test_receipt_serialization.py b/keystone/tests/unit/receipt/test_receipt_serialization.py index c6e2ffef63..7a99ff784f 100644 --- a/keystone/tests/unit/receipt/test_receipt_serialization.py +++ b/keystone/tests/unit/receipt/test_receipt_serialization.py @@ -24,7 +24,7 @@ from keystone.tests.unit import base_classes class TestReceiptSerialization(base_classes.TestCaseWithBootstrap): def setUp(self): - super(TestReceiptSerialization, self).setUp() + super().setUp() self.admin_user_id = self.bootstrapper.admin_user_id self.receipt_id = uuid.uuid4().hex diff --git a/keystone/tests/unit/resource/backends/test_sql.py b/keystone/tests/unit/resource/backends/test_sql.py index a31d246b64..c255a8ff0d 100644 --- a/keystone/tests/unit/resource/backends/test_sql.py +++ b/keystone/tests/unit/resource/backends/test_sql.py @@ -21,7 +21,7 @@ class TestSqlResourceDriver( unit.BaseTestCase, test_backends.ResourceDriverTests ): def setUp(self): - super(TestSqlResourceDriver, self).setUp() + super().setUp() self.useFixture(database.Database()) self.driver = sql.Resource() root_domain = default_fixtures.ROOT_DOMAIN diff --git a/keystone/tests/unit/resource/config_backends/test_sql.py b/keystone/tests/unit/resource/config_backends/test_sql.py index ba3fea5d04..ef74694e9f 100644 --- a/keystone/tests/unit/resource/config_backends/test_sql.py +++ b/keystone/tests/unit/resource/config_backends/test_sql.py @@ -44,7 +44,7 @@ class SqlDomainConfigDriver( unit.BaseTestCase, test_core.DomainConfigDriverTests ): def setUp(self): - super(SqlDomainConfigDriver, self).setUp() + super().setUp() self.useFixture(database.Database()) self.driver = config_sql.DomainConfig() @@ -53,7 +53,7 @@ class SqlDomainConfig( core_sql.BaseBackendSqlTests, test_core.DomainConfigTests ): def setUp(self): - super(SqlDomainConfig, self).setUp() + super().setUp() # test_core.DomainConfigTests is effectively a mixin class, so make # sure we call its setup test_core.DomainConfigTests.setUp(self) diff --git a/keystone/tests/unit/resource/test_backends.py b/keystone/tests/unit/resource/test_backends.py index a377d140cc..4db66394aa 100644 --- a/keystone/tests/unit/resource/test_backends.py +++ b/keystone/tests/unit/resource/test_backends.py @@ -31,7 +31,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class ResourceTests(object): +class ResourceTests: domain_count = len(default_fixtures.DOMAINS) @@ -212,7 +212,7 @@ class ResourceTests(object): ) def test_create_update_delete_unicode_project(self): - unicode_project_name = u'name \u540d\u5b57' + unicode_project_name = 'name \u540d\u5b57' project = unit.new_project_ref( name=unicode_project_name, domain_id=CONF.identity.default_domain_id, @@ -2249,7 +2249,7 @@ class ResourceTests(object): ) -class ResourceDriverTests(object): +class ResourceDriverTests: """Test for the resource driver. Subclasses must set self.driver to the driver instance. diff --git a/keystone/tests/unit/resource/test_core.py b/keystone/tests/unit/resource/test_core.py index d2ff52e05f..130d470c7f 100644 --- a/keystone/tests/unit/resource/test_core.py +++ b/keystone/tests/unit/resource/test_core.py @@ -32,7 +32,7 @@ PROVIDERS = provider_api.ProviderAPIs class TestResourceManagerNoFixtures(unit.SQLDriverOverrides, unit.TestCase): def setUp(self): - super(TestResourceManagerNoFixtures, self).setUp() + super().setUp() self.useFixture(database.Database()) self.load_backends() PROVIDERS.resource_api.create_domain( @@ -69,7 +69,7 @@ class TestResourceManagerNoFixtures(unit.SQLDriverOverrides, unit.TestCase): ) -class DomainConfigDriverTests(object): +class DomainConfigDriverTests: def _domain_config_crud(self, sensitive): domain = uuid.uuid4().hex @@ -262,7 +262,7 @@ class DomainConfigDriverTests(object): self._create_domain_config_twice(True) -class DomainConfigTests(object): +class DomainConfigTests: def setUp(self): self.domain = unit.new_domain_ref() diff --git a/keystone/tests/unit/rest.py b/keystone/tests/unit/rest.py index fb1fe4994f..bcdb240485 100644 --- a/keystone/tests/unit/rest.py +++ b/keystone/tests/unit/rest.py @@ -53,7 +53,7 @@ class RestfulTestCase(unit.TestCase): content_type = 'json' def setUp(self): - super(RestfulTestCase, self).setUp() + super().setUp() self.auth_plugin_config_override() diff --git a/keystone/tests/unit/server/test_keystone_flask.py b/keystone/tests/unit/server/test_keystone_flask.py index b90b736ca9..c2f3e798ea 100644 --- a/keystone/tests/unit/server/test_keystone_flask.py +++ b/keystone/tests/unit/server/test_keystone_flask.py @@ -40,7 +40,7 @@ class _TestResourceWithCollectionInfo(flask_common.ResourceBase): _storage_dict = {} def __init__(self): - super(_TestResourceWithCollectionInfo, self).__init__() + super().__init__() # Share State, this is for "dummy" backend storage. self.__dict__ = self.__shared_state__ @@ -127,7 +127,7 @@ class _TestRestfulAPI(flask_common.APIBase): self.resources = kwargs.pop( 'resources', [_TestResourceWithCollectionInfo] ) - super(_TestRestfulAPI, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) class TestKeystoneFlaskCommon(rest.RestfulTestCase): @@ -138,7 +138,7 @@ class TestKeystoneFlaskCommon(rest.RestfulTestCase): ] def setUp(self): - super(TestKeystoneFlaskCommon, self).setUp() + super().setUp() enf = rbac_enforcer.enforcer.RBACEnforcer() def register_rules(enf_obj): @@ -216,21 +216,21 @@ class TestKeystoneFlaskCommon(rest.RestfulTestCase): # GET non-existent ref c.get( - '%s/%s' % (url, unknown_id), + f'{url}/{unknown_id}', headers=headers, expected_status_code=404, ) # HEAD non-existent ref c.head( - '%s/%s' % (url, unknown_id), + f'{url}/{unknown_id}', headers=headers, expected_status_code=404, ) # PUT non-existent ref c.put( - '%s/%s' % (url, unknown_id), + f'{url}/{unknown_id}', json={}, headers=headers, expected_status_code=404, @@ -238,7 +238,7 @@ class TestKeystoneFlaskCommon(rest.RestfulTestCase): # PATCH non-existent ref c.patch( - '%s/%s' % (url, unknown_id), + f'{url}/{unknown_id}', json={}, headers=headers, expected_status_code=404, @@ -246,7 +246,7 @@ class TestKeystoneFlaskCommon(rest.RestfulTestCase): # DELETE non-existent ref c.delete( - '%s/%s' % (url, unknown_id), + f'{url}/{unknown_id}', headers=headers, expected_status_code=404, ) @@ -270,13 +270,13 @@ class TestKeystoneFlaskCommon(rest.RestfulTestCase): # GET first ref get_resp = c.get( - '%s/%s' % (url, new_argument_resp['id']), headers=headers + '{}/{}'.format(url, new_argument_resp['id']), headers=headers ).json['argument'] self.assertEqual(new_argument_resp, get_resp) # HEAD first ref head_resp = c.head( - '%s/%s' % (url, new_argument_resp['id']), headers=headers + '{}/{}'.format(url, new_argument_resp['id']), headers=headers ).data # NOTE(morgan): For python3 compat, explicitly binary type self.assertEqual(head_resp, b'') @@ -284,33 +284,33 @@ class TestKeystoneFlaskCommon(rest.RestfulTestCase): # PUT update first ref replacement_argument = {'new_arg': True, 'id': uuid.uuid4().hex} c.put( - '%s/%s' % (url, new_argument_resp['id']), + '{}/{}'.format(url, new_argument_resp['id']), headers=headers, json=replacement_argument, expected_status_code=400, ) replacement_argument.pop('id') c.put( - '%s/%s' % (url, new_argument_resp['id']), + '{}/{}'.format(url, new_argument_resp['id']), headers=headers, json=replacement_argument, ) put_resp = c.get( - '%s/%s' % (url, new_argument_resp['id']), headers=headers + '{}/{}'.format(url, new_argument_resp['id']), headers=headers ).json['argument'] self.assertNotIn(new_argument_resp['testing'], put_resp) self.assertTrue(put_resp['new_arg']) # GET first ref (check for replacement) get_replacement_resp = c.get( - '%s/%s' % (url, new_argument_resp['id']), headers=headers + '{}/{}'.format(url, new_argument_resp['id']), headers=headers ).json['argument'] self.assertEqual(put_resp, get_replacement_resp) # PATCH update first ref patch_ref = {'uuid': uuid.uuid4().hex} patch_resp = c.patch( - '%s/%s' % (url, new_argument_resp['id']), + '{}/{}'.format(url, new_argument_resp['id']), headers=headers, json=patch_ref, ).json['argument'] @@ -319,15 +319,17 @@ class TestKeystoneFlaskCommon(rest.RestfulTestCase): # GET first ref (check for update) get_patched_ref_resp = c.get( - '%s/%s' % (url, new_argument_resp['id']), headers=headers + '{}/{}'.format(url, new_argument_resp['id']), headers=headers ).json['argument'] self.assertEqual(patch_resp, get_patched_ref_resp) # DELETE first ref - c.delete('%s/%s' % (url, new_argument_resp['id']), headers=headers) + c.delete( + '{}/{}'.format(url, new_argument_resp['id']), headers=headers + ) # Check that it was in-fact deleted c.get( - '%s/%s' % (url, new_argument_resp['id']), + '{}/{}'.format(url, new_argument_resp['id']), headers=headers, expected_status_code=404, ) @@ -350,7 +352,7 @@ class TestKeystoneFlaskCommon(rest.RestfulTestCase): class TestAPIDuplicateBefore(_TestRestfulAPI): def __init__(self): - super(TestAPIDuplicateBefore, self).__init__() + super().__init__() self._register_before_request_functions() self.assertRaises(AssertionError, TestAPIDuplicateBefore) @@ -359,7 +361,7 @@ class TestKeystoneFlaskCommon(rest.RestfulTestCase): class TestAPIDuplicateAfter(_TestRestfulAPI): def __init__(self): - super(TestAPIDuplicateAfter, self).__init__() + super().__init__() self._register_after_request_functions() self.assertRaises(AssertionError, TestAPIDuplicateAfter) @@ -391,9 +393,7 @@ class TestKeystoneFlaskCommon(rest.RestfulTestCase): def _register_before_request_functions(self, functions=None): functions = functions or [] functions.append(do_something) - super(TestAPI, self)._register_before_request_functions( - functions - ) + super()._register_before_request_functions(functions) api = TestAPI(resources=[_TestResourceWithCollectionInfo]) self.public_app.app.register_blueprint(api.blueprint) @@ -416,9 +416,7 @@ class TestKeystoneFlaskCommon(rest.RestfulTestCase): def _register_after_request_functions(self, functions=None): functions = functions or [] functions.append(do_something) - super(TestAPI, self)._register_after_request_functions( - functions - ) + super()._register_after_request_functions(functions) api = TestAPI(resources=[_TestResourceWithCollectionInfo]) self.public_app.app.register_blueprint(api.blueprint) @@ -555,13 +553,8 @@ class TestKeystoneFlaskCommon(rest.RestfulTestCase): # even if hash-seeds change order. `r.data` will be an empty # byte-string. `Content-Length` will be 0. self.assertEqual( - set(['OPTIONS', 'POST']), - set( - [ - v.lstrip().rstrip() - for v in r.headers['Allow'].split(',') - ] - ), + {'OPTIONS', 'POST'}, + {v.lstrip().rstrip() for v in r.headers['Allow'].split(',')}, ) self.assertEqual(r.headers['Content-Length'], '0') self.assertEqual(r.data, b'') @@ -661,7 +654,7 @@ class TestKeystoneFlaskCommon(rest.RestfulTestCase): # Make a dummy request.. ANY request is fine to push the whole # context stack. c.get( - '%s/%s' % (url, uuid.uuid4().hex), + f'{url}/{uuid.uuid4().hex}', headers=headers, expected_status_code=404, ) @@ -829,14 +822,14 @@ class TestKeystoneFlaskCommon(rest.RestfulTestCase): class TestKeystoneFlaskUnrouted404(rest.RestfulTestCase): def setUp(self): - super(TestKeystoneFlaskUnrouted404, self).setUp() + super().setUp() # unregister the 404 handler we explicitly set in loadapp. This # makes the 404 error fallback to a standard werkzeug handling. self.public_app.app.error_handler_spec[None].pop(404) def test_unrouted_path_is_not_jsonified_404(self): with self.test_client() as c: - path = '/{unrouted_path}'.format(unrouted_path=uuid.uuid4()) + path = f'/{uuid.uuid4()}' resp = c.get(path, expected_status_code=404) # Make sure we're emitting a html error self.assertIn('text/html', resp.headers['Content-Type']) diff --git a/keystone/tests/unit/test_app_config.py b/keystone/tests/unit/test_app_config.py index 160aeb81d3..ebe30a8d5a 100644 --- a/keystone/tests/unit/test_app_config.py +++ b/keystone/tests/unit/test_app_config.py @@ -1,4 +1,3 @@ -# encoding: utf-8 # # Copyright 2012 OpenStack Foundation # diff --git a/keystone/tests/unit/test_associate_project_endpoint_extension.py b/keystone/tests/unit/test_associate_project_endpoint_extension.py index b45e048a6b..5b39d3aaa9 100644 --- a/keystone/tests/unit/test_associate_project_endpoint_extension.py +++ b/keystone/tests/unit/test_associate_project_endpoint_extension.py @@ -28,7 +28,7 @@ PROVIDERS = provider_api.ProviderAPIs class EndpointFilterTestCase(test_v3.RestfulTestCase): def setUp(self): - super(EndpointFilterTestCase, self).setUp() + super().setUp() self.default_request_url = ( '/OS-EP-FILTER/projects/%(project_id)s' '/endpoints/%(endpoint_id)s' @@ -201,9 +201,9 @@ class EndpointFilterCRUDTestCase(EndpointFilterTestCase): """ self.put(self.default_request_url) - resource_url = '/OS-EP-FILTER/projects/%(project_id)s/endpoints' % { - 'project_id': self.default_domain_project_id - } + resource_url = '/OS-EP-FILTER/projects/{project_id}/endpoints'.format( + project_id=self.default_domain_project_id + ) r = self.get(resource_url) self.assertValidEndpointListResponse( r, self.endpoint, resource_url=resource_url @@ -217,9 +217,9 @@ class EndpointFilterCRUDTestCase(EndpointFilterTestCase): """ self.put(self.default_request_url) - url = '/OS-EP-FILTER/projects/%(project_id)s/endpoints' % { - 'project_id': uuid.uuid4().hex - } + url = '/OS-EP-FILTER/projects/{project_id}/endpoints'.format( + project_id=uuid.uuid4().hex + ) self.get(url, expected_status=http.client.NOT_FOUND) self.head(url, expected_status=http.client.NOT_FOUND) @@ -230,9 +230,9 @@ class EndpointFilterCRUDTestCase(EndpointFilterTestCase): """ self.put(self.default_request_url) - resource_url = '/OS-EP-FILTER/endpoints/%(endpoint_id)s/projects' % { - 'endpoint_id': self.endpoint_id - } + resource_url = '/OS-EP-FILTER/endpoints/{endpoint_id}/projects'.format( + endpoint_id=self.endpoint_id + ) r = self.get(resource_url, expected_status=http.client.OK) self.assertValidProjectListResponse( r, self.default_domain_project, resource_url=resource_url @@ -245,9 +245,9 @@ class EndpointFilterCRUDTestCase(EndpointFilterTestCase): Valid endpoint id but no endpoint-project associations test case. """ - url = '/OS-EP-FILTER/endpoints/%(endpoint_id)s/projects' % { - 'endpoint_id': self.endpoint_id - } + url = '/OS-EP-FILTER/endpoints/{endpoint_id}/projects'.format( + endpoint_id=self.endpoint_id + ) r = self.get(url, expected_status=http.client.OK) self.assertValidProjectListResponse(r, expected_length=0) self.head(url, expected_status=http.client.OK) @@ -258,9 +258,9 @@ class EndpointFilterCRUDTestCase(EndpointFilterTestCase): Invalid endpoint id test case. """ - url = '/OS-EP-FILTER/endpoints/%(endpoint_id)s/projects' % { - 'endpoint_id': uuid.uuid4().hex - } + url = '/OS-EP-FILTER/endpoints/{endpoint_id}/projects'.format( + endpoint_id=uuid.uuid4().hex + ) self.get(url, expected_status=http.client.NOT_FOUND) self.head(url, expected_status=http.client.NOT_FOUND) @@ -333,15 +333,15 @@ class EndpointFilterCRUDTestCase(EndpointFilterTestCase): def test_endpoint_project_association_cleanup_when_endpoint_deleted(self): self.put(self.default_request_url) - association_url = '/OS-EP-FILTER/projects/%(project_id)s/endpoints' % { - 'project_id': self.default_domain_project_id - } + association_url = ( + '/OS-EP-FILTER/projects/{project_id}/endpoints'.format( + project_id=self.default_domain_project_id + ) + ) r = self.get(association_url) self.assertValidEndpointListResponse(r, expected_length=1) - self.delete( - '/endpoints/%(endpoint_id)s' % {'endpoint_id': self.endpoint_id} - ) + self.delete(f'/endpoints/{self.endpoint_id}') r = self.get(association_url) self.assertValidEndpointListResponse(r, expected_length=0) @@ -521,7 +521,7 @@ class EndpointFilterTokenRequestTestCase(EndpointFilterTestCase): # set the user's preferred project body = {'user': {'default_project_id': project['id']}} r = self.patch( - '/users/%(user_id)s' % {'user_id': self.user['id']}, body=body + '/users/{user_id}'.format(user_id=self.user['id']), body=body ) self.assertValidUserResponse(r) @@ -898,9 +898,9 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): endpoint_group_id = response.result['endpoint_group']['id'] endpoint_group_filters = response.result['endpoint_group']['filters'] endpoint_group_name = response.result['endpoint_group']['name'] - url = '/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s' % { - 'endpoint_group_id': endpoint_group_id - } + url = '/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}'.format( + endpoint_group_id=endpoint_group_id + ) self.get(url) self.assertEqual( endpoint_group_id, response.result['endpoint_group']['id'] @@ -924,9 +924,9 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): """ endpoint_group_id = 'foobar' - url = '/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s' % { - 'endpoint_group_id': endpoint_group_id - } + url = '/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}'.format( + endpoint_group_id=endpoint_group_id + ) self.get(url, expected_status=http.client.NOT_FOUND) def test_check_endpoint_group(self): @@ -939,9 +939,9 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): endpoint_group_id = self._create_valid_endpoint_group( self.DEFAULT_ENDPOINT_GROUP_URL, self.DEFAULT_ENDPOINT_GROUP_BODY ) - url = '/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s' % { - 'endpoint_group_id': endpoint_group_id - } + url = '/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}'.format( + endpoint_group_id=endpoint_group_id + ) self.head(url, expected_status=http.client.OK) def test_check_invalid_endpoint_group(self): @@ -951,9 +951,9 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): """ endpoint_group_id = 'foobar' - url = '/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s' % { - 'endpoint_group_id': endpoint_group_id - } + url = '/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}'.format( + endpoint_group_id=endpoint_group_id + ) self.head(url, expected_status=http.client.NOT_FOUND) def test_patch_endpoint_group(self): @@ -969,9 +969,9 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): endpoint_group_id = self._create_valid_endpoint_group( self.DEFAULT_ENDPOINT_GROUP_URL, self.DEFAULT_ENDPOINT_GROUP_BODY ) - url = '/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s' % { - 'endpoint_group_id': endpoint_group_id - } + url = '/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}'.format( + endpoint_group_id=endpoint_group_id + ) r = self.patch(url, body=body) self.assertEqual(endpoint_group_id, r.result['endpoint_group']['id']) self.assertEqual( @@ -989,9 +989,9 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): """ body = {'endpoint_group': {'name': 'patch_test'}} - url = '/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s' % { - 'endpoint_group_id': 'ABC' - } + url = '/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}'.format( + endpoint_group_id='ABC' + ) self.patch(url, body=body, expected_status=http.client.NOT_FOUND) def test_patch_invalid_endpoint_group(self): @@ -1011,17 +1011,17 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): endpoint_group_id = self._create_valid_endpoint_group( self.DEFAULT_ENDPOINT_GROUP_URL, self.DEFAULT_ENDPOINT_GROUP_BODY ) - url = '/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s' % { - 'endpoint_group_id': endpoint_group_id - } + url = '/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}'.format( + endpoint_group_id=endpoint_group_id + ) self.patch(url, body=body, expected_status=http.client.BAD_REQUEST) # Perform a GET call to ensure that the content remains # the same (as DEFAULT_ENDPOINT_GROUP_BODY) after attempting to update # with an invalid filter - url = '/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s' % { - 'endpoint_group_id': endpoint_group_id - } + url = '/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}'.format( + endpoint_group_id=endpoint_group_id + ) r = self.get(url) del r.result['endpoint_group']['id'] del r.result['endpoint_group']['links'] @@ -1037,9 +1037,9 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): endpoint_group_id = self._create_valid_endpoint_group( self.DEFAULT_ENDPOINT_GROUP_URL, self.DEFAULT_ENDPOINT_GROUP_BODY ) - url = '/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s' % { - 'endpoint_group_id': endpoint_group_id - } + url = '/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}'.format( + endpoint_group_id=endpoint_group_id + ) self.delete(url) self.get(url, expected_status=http.client.NOT_FOUND) @@ -1050,9 +1050,9 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): """ endpoint_group_id = 'foobar' - url = '/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s' % { - 'endpoint_group_id': endpoint_group_id - } + url = '/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}'.format( + endpoint_group_id=endpoint_group_id + ) self.delete(url, expected_status=http.client.NOT_FOUND) def test_add_endpoint_group_to_project(self): @@ -1122,9 +1122,9 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): ) self.put(url) - url = '/OS-EP-FILTER/projects/%(project_id)s/endpoint_groups' % { - 'project_id': self.project_id - } + url = '/OS-EP-FILTER/projects/{project_id}/endpoint_groups'.format( + project_id=self.project_id + ) response = self.get(url, expected_status=http.client.OK) self.assertEqual( @@ -1136,17 +1136,17 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): def test_list_endpoint_groups_in_invalid_project(self): """Test retrieving from invalid project.""" project_id = uuid.uuid4().hex - url = '/OS-EP-FILTER/projects/%(project_id)s/endpoint_groups' % { - 'project_id': project_id - } + url = '/OS-EP-FILTER/projects/{project_id}/endpoint_groups'.format( + project_id=project_id + ) self.get(url, expected_status=http.client.NOT_FOUND) self.head(url, expected_status=http.client.NOT_FOUND) def test_empty_endpoint_groups_in_project(self): """Test when no endpoint groups associated with the project.""" - url = '/OS-EP-FILTER/projects/%(project_id)s/endpoint_groups' % { - 'project_id': self.project_id - } + url = '/OS-EP-FILTER/projects/{project_id}/endpoint_groups'.format( + project_id=self.project_id + ) response = self.get(url, expected_status=http.client.OK) self.assertEqual(0, len(response.result['endpoint_groups'])) @@ -1211,9 +1211,9 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): ) # retrieve the single endpointgroup by name - url = '/OS-EP-FILTER/endpoint_groups?name=%(name)s' % { - 'name': 'endpoint_group_name' - } + url = '/OS-EP-FILTER/endpoint_groups?name={name}'.format( + name='endpoint_group_name' + ) r = self.get(url, expected_status=http.client.OK) self.assertNotEmpty(r.result['endpoint_groups']) self.assertEqual(1, len(r.result['endpoint_groups'])) @@ -1224,7 +1224,7 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): self.head(url, expected_status=http.client.OK) # try to retrieve a non existant one - url = '/OS-EP-FILTER/endpoint_groups?name=%(name)s' % {'name': 'fake'} + url = '/OS-EP-FILTER/endpoint_groups?name={name}'.format(name='fake') r = self.get(url, expected_status=http.client.OK) self.assertEqual(0, len(r.result['endpoint_groups'])) @@ -1326,9 +1326,9 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): ) # Now get a list of the filtered endpoints - endpoints_url = '/OS-EP-FILTER/projects/%(project_id)s/endpoints' % { - 'project_id': self.default_domain_project_id - } + endpoints_url = '/OS-EP-FILTER/projects/{project_id}/endpoints'.format( + project_id=self.default_domain_project_id + ) r = self.get(endpoints_url, expected_status=http.client.OK) endpoints = self.assertValidEndpointListResponse(r) self.assertEqual(2, len(endpoints)) @@ -1350,9 +1350,9 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): self.delete(url) # Now remove endpoint group - url = '/OS-EP-FILTER/endpoint_groups/%(endpoint_group_id)s' % { - 'endpoint_group_id': endpoint_group_id - } + url = '/OS-EP-FILTER/endpoint_groups/{endpoint_group_id}'.format( + endpoint_group_id=endpoint_group_id + ) self.delete(url) r = self.get(endpoints_url) @@ -1385,7 +1385,7 @@ class EndpointGroupCRUDTestCase(EndpointFilterTestCase): # Now delete the project and then try and retrieve the project # endpoint group association again - self.delete('/projects/%(project_id)s' % {'project_id': project['id']}) + self.delete('/projects/{project_id}'.format(project_id=project['id'])) self.get(url, expected_status=http.client.NOT_FOUND) self.head(url, expected_status=http.client.NOT_FOUND) diff --git a/keystone/tests/unit/test_auth_plugin.py b/keystone/tests/unit/test_auth_plugin.py index a672cee2b9..3140f6106e 100644 --- a/keystone/tests/unit/test_auth_plugin.py +++ b/keystone/tests/unit/test_auth_plugin.py @@ -136,13 +136,13 @@ class TestAuthPlugin(unit.SQLDriverOverrides, unit.TestCase): class TestAuthPluginDynamicOptions(TestAuthPlugin): def config_overrides(self): - super(TestAuthPluginDynamicOptions, self).config_overrides() + super().config_overrides() # Clear the override for the [auth] ``methods`` option so it is # possible to load the options from the config file. self.config_fixture.conf.clear_override('methods', group='auth') def config_files(self): - config_files = super(TestAuthPluginDynamicOptions, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('test_auth_plugin.conf')) return config_files @@ -150,7 +150,7 @@ class TestAuthPluginDynamicOptions(TestAuthPlugin): class TestMapped(unit.TestCase): def config_files(self): - config_files = super(TestMapped, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('test_auth_plugin.conf')) return config_files diff --git a/keystone/tests/unit/test_backend_endpoint_policy.py b/keystone/tests/unit/test_backend_endpoint_policy.py index 64c4cab489..79fc483441 100644 --- a/keystone/tests/unit/test_backend_endpoint_policy.py +++ b/keystone/tests/unit/test_backend_endpoint_policy.py @@ -23,7 +23,7 @@ from keystone.tests import unit PROVIDERS = provider_api.ProviderAPIs -class PolicyAssociationTests(object): +class PolicyAssociationTests: def _assert_correct_policy(self, endpoint, policy): ref = PROVIDERS.endpoint_policy_api.get_policy_for_endpoint( diff --git a/keystone/tests/unit/test_backend_endpoint_policy_sql.py b/keystone/tests/unit/test_backend_endpoint_policy_sql.py index c86ce06ff5..20e93d06e0 100644 --- a/keystone/tests/unit/test_backend_endpoint_policy_sql.py +++ b/keystone/tests/unit/test_backend_endpoint_policy_sql.py @@ -37,5 +37,5 @@ class SqlPolicyAssociationTests( ): def load_fixtures(self, fixtures): - super(SqlPolicyAssociationTests, self).load_fixtures(fixtures) + super().load_fixtures(fixtures) self.load_sample_data() diff --git a/keystone/tests/unit/test_backend_id_mapping_sql.py b/keystone/tests/unit/test_backend_id_mapping_sql.py index 6b87068c52..52c542fdfd 100644 --- a/keystone/tests/unit/test_backend_id_mapping_sql.py +++ b/keystone/tests/unit/test_backend_id_mapping_sql.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2014 IBM Corp. # # Licensed under the Apache License, Version 2.0 (the "License"); you may @@ -43,7 +42,7 @@ class SqlIDMappingTable(test_backend_sql.SqlModels): class SqlIDMapping(test_backend_sql.SqlTests): def setUp(self): - super(SqlIDMapping, self).setUp() + super().setUp() self.load_sample_data() def load_sample_data(self): @@ -155,7 +154,7 @@ class SqlIDMapping(test_backend_sql.SqlTests): def test_id_mapping_handles_unicode(self): initial_mappings = len(mapping_sql.list_id_mappings()) - local_id = u'fäké1' + local_id = 'fäké1' local_entity = { 'domain_id': self.domainA['id'], 'local_id': local_id, diff --git a/keystone/tests/unit/test_backend_ldap.py b/keystone/tests/unit/test_backend_ldap.py index 5935da4b11..088ad2ae8d 100644 --- a/keystone/tests/unit/test_backend_ldap.py +++ b/keystone/tests/unit/test_backend_ldap.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2012 OpenStack Foundation # Copyright 2013 IBM Corp. # @@ -78,7 +77,7 @@ def _assert_backends(testcase, **kwargs): 'but observed %(observed_cls)r' ) if domain: - subsystem = '%s[domain=%s]' % (subsystem, domain) + subsystem = f'{subsystem}[domain={domain}]' assert expected_cls == observed_cls, msg % { 'expected_cls': expected_cls, 'observed_cls': observed_cls, @@ -352,11 +351,11 @@ class ResourceTests(resource_tests.ResourceTests): self.skip_test_overrides('N/A: LDAP does not support multiple domains') -class LDAPTestSetup(object): +class LDAPTestSetup: """Common setup for LDAP tests.""" def setUp(self): - super(LDAPTestSetup, self).setUp() + super().setUp() self.ldapdb = self.useFixture(ldapdb.LDAPDatabase()) self.useFixture(database.Database()) @@ -380,11 +379,11 @@ class BaseLDAPIdentity( return CONF def config_overrides(self): - super(BaseLDAPIdentity, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='identity', driver='ldap') def config_files(self): - config_files = super(BaseLDAPIdentity, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap.conf')) return config_files @@ -404,7 +403,7 @@ class BaseLDAPIdentity( ldap_ = PROVIDERS.identity_api.driver.user.get_connection() res = ldap_.search_s( - user_dn, ldap.SCOPE_BASE, u'(sn=%s)' % user['name'] + user_dn, ldap.SCOPE_BASE, '(sn=%s)' % user['name'] ) if enabled_attr_name in res[0][1]: return res[0][1][enabled_attr_name] @@ -422,7 +421,7 @@ class BaseLDAPIdentity( user = PROVIDERS.identity_api.create_user(user) PROVIDERS.identity_api.get_user(user['id']) - user['password'] = u'fäképass2' + user['password'] = 'fäképass2' PROVIDERS.identity_api.update_user(user['id'], user) self.assertRaises( @@ -455,7 +454,7 @@ class BaseLDAPIdentity( hints.add_filter('name', self.user_foo['name']) domain_id = self.user_foo['domain_id'] driver = PROVIDERS.identity_api._select_identity_driver(domain_id) - driver.user.ldap_filter = '(|(cn=%s)(cn=%s))' % ( + driver.user.ldap_filter = '(|(cn={})(cn={}))'.format( self.user_sna['id'], self.user_two['id'], ) @@ -1008,7 +1007,7 @@ class BaseLDAPIdentity( """A user's name cannot be changed through the LDAP driver.""" self.assertRaises( exception.Conflict, - super(BaseLDAPIdentity, self).test_update_user_name, + super().test_update_user_name, ) def test_user_id_comma(self): @@ -1018,7 +1017,7 @@ class BaseLDAPIdentity( # Since we want to fake up this special ID, we'll squirt this # direct into the driver and bypass the manager layer. - user_id = u'Doe, John' + user_id = 'Doe, John' user = self.new_user_ref( id=user_id, domain_id=CONF.identity.default_domain_id ) @@ -1066,7 +1065,7 @@ class BaseLDAPIdentity( # Since we want to fake up this special ID, we'll squirt this # direct into the driver and bypass the manager layer - user_id = u'Doe, John' + user_id = 'Doe, John' user = self.new_user_ref( id=user_id, domain_id=CONF.identity.default_domain_id ) @@ -1159,7 +1158,7 @@ class BaseLDAPIdentity( exception.DomainNotFound, exception.ValidationError, ), - super(BaseLDAPIdentity, self).test_list_role_assignment_by_domain, + super().test_list_role_assignment_by_domain, ) def test_list_role_assignment_by_user_with_domain_group_roles(self): @@ -1170,9 +1169,7 @@ class BaseLDAPIdentity( exception.DomainNotFound, exception.ValidationError, ), - super( - BaseLDAPIdentity, self - ).test_list_role_assignment_by_user_with_domain_group_roles, + super().test_list_role_assignment_by_user_with_domain_group_roles, ) def test_list_role_assignment_using_sourced_groups_with_domains(self): @@ -1183,36 +1180,28 @@ class BaseLDAPIdentity( exception.ValidationError, exception.DomainNotFound, ), - super( - BaseLDAPIdentity, self - ).test_list_role_assignment_using_sourced_groups_with_domains, + super().test_list_role_assignment_using_sourced_groups_with_domains, ) def test_create_project_with_domain_id_and_without_parent_id(self): """Multiple domains are not supported.""" self.assertRaises( exception.ValidationError, - super( - BaseLDAPIdentity, self - ).test_create_project_with_domain_id_and_without_parent_id, + super().test_create_project_with_domain_id_and_without_parent_id, ) def test_create_project_with_domain_id_mismatch_to_parent_domain(self): """Multiple domains are not supported.""" self.assertRaises( exception.ValidationError, - super( - BaseLDAPIdentity, self - ).test_create_project_with_domain_id_mismatch_to_parent_domain, + super().test_create_project_with_domain_id_mismatch_to_parent_domain, ) def test_remove_foreign_assignments_when_deleting_a_domain(self): """Multiple domains are not supported.""" self.assertRaises( (exception.ValidationError, exception.DomainNotFound), - super( - BaseLDAPIdentity, self - ).test_remove_foreign_assignments_when_deleting_a_domain, + super().test_remove_foreign_assignments_when_deleting_a_domain, ) @@ -1226,9 +1215,9 @@ class LDAPIdentity(BaseLDAPIdentity): def test_list_domains(self): domains = PROVIDERS.resource_api.list_domains() default_domain = unit.new_domain_ref( - description=u'The default domain', + description='The default domain', id=CONF.identity.default_domain_id, - name=u'Default', + name='Default', ) self.assertEqual([default_domain], domains) @@ -1499,7 +1488,7 @@ class LDAPIdentity(BaseLDAPIdentity): user_enabled_attribute='passwordisexpired', ) mock_ldap_get.return_value = ( - u'uid=123456789,c=us,ou=our_ldap,o=acme.com', + 'uid=123456789,c=us,ou=our_ldap,o=acme.com', { 'uid': [123456789], 'mail': ['shaun@acme.com'], @@ -1523,12 +1512,12 @@ class LDAPIdentity(BaseLDAPIdentity): user_enabled_attribute='passwordisexpired', ) mock_ldap_get.return_value = ( - u'uid=123456789,c=us,ou=our_ldap,o=acme.com', + 'uid=123456789,c=us,ou=our_ldap,o=acme.com', { 'uid': [123456789], - 'mail': [u'shaun@acme.com'], - 'passwordisexpired': [u'false'], - 'cn': [u'uid=123456789,c=us,ou=our_ldap,o=acme.com'], + 'mail': ['shaun@acme.com'], + 'passwordisexpired': ['false'], + 'cn': ['uid=123456789,c=us,ou=our_ldap,o=acme.com'], }, ) @@ -1646,7 +1635,7 @@ class LDAPIdentity(BaseLDAPIdentity): # the live tests. ldap_id_field = 'sn' ldap_id_value = uuid.uuid4().hex - dn = '%s=%s,ou=Users,cn=example,cn=com' % ( + dn = '{}={},ou=Users,cn=example,cn=com'.format( ldap_id_field, ldap_id_value, ) @@ -1721,14 +1710,14 @@ class LDAPIdentity(BaseLDAPIdentity): ) def test_domain_rename_invalidates_get_domain_by_name_cache(self): - parent = super(LDAPIdentity, self) + parent = super() self.assertRaises( exception.Forbidden, parent.test_domain_rename_invalidates_get_domain_by_name_cache, ) def test_project_rename_invalidates_get_project_by_name_cache(self): - parent = super(LDAPIdentity, self) + parent = super() self.assertRaises( exception.Forbidden, parent.test_project_rename_invalidates_get_project_by_name_cache, @@ -1930,11 +1919,11 @@ class LDAPIdentity(BaseLDAPIdentity): def test_list_users_no_dn(self): users = PROVIDERS.identity_api.list_users() self.assertEqual(len(default_fixtures.USERS), len(users)) - user_ids = set(user['id'] for user in users) - expected_user_ids = set( + user_ids = {user['id'] for user in users} + expected_user_ids = { getattr(self, 'user_%s' % user['name'])['id'] for user in default_fixtures.USERS - ) + } for user_ref in users: self.assertNotIn('dn', user_ref) self.assertEqual(expected_user_ids, user_ids) @@ -1951,7 +1940,7 @@ class LDAPIdentity(BaseLDAPIdentity): # Fetch the test groups and ensure that they don't contain a dn. groups = PROVIDERS.identity_api.list_groups() self.assertEqual(numgroups, len(groups)) - group_ids = set(group['id'] for group in groups) + group_ids = {group['id'] for group in groups} for group_ref in groups: self.assertNotIn('dn', group_ref) self.assertEqual(set(expected_group_ids), group_ids) @@ -1973,7 +1962,7 @@ class LDAPIdentity(BaseLDAPIdentity): # and ensure they don't contain a dn. groups = PROVIDERS.identity_api.list_groups_for_user(user['id']) self.assertEqual(numgroups, len(groups)) - group_ids = set(group['id'] for group in groups) + group_ids = {group['id'] for group in groups} for group_ref in groups: self.assertNotIn('dn', group_ref) self.assertEqual(set(expected_group_ids), group_ids) @@ -2149,7 +2138,7 @@ class LDAPIdentity(BaseLDAPIdentity): class LDAPLimitTests(unit.TestCase, identity_tests.LimitTests): def setUp(self): - super(LDAPLimitTests, self).setUp() + super().setUp() self.useFixture(ldapdb.LDAPDatabase()) self.useFixture(database.Database()) @@ -2161,21 +2150,21 @@ class LDAPLimitTests(unit.TestCase, identity_tests.LimitTests): ) def config_overrides(self): - super(LDAPLimitTests, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='identity', driver='ldap') self.config_fixture.config( group='identity', list_limit=len(default_fixtures.USERS) - 1 ) def config_files(self): - config_files = super(LDAPLimitTests, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap.conf')) return config_files class LDAPIdentityEnabledEmulation(LDAPIdentity, unit.TestCase): def setUp(self): - super(LDAPIdentityEnabledEmulation, self).setUp() + super().setUp() _assert_backends(self, identity='ldap') def load_fixtures(self, fixtures): @@ -2191,12 +2180,12 @@ class LDAPIdentityEnabledEmulation(LDAPIdentity, unit.TestCase): obj.setdefault('enabled', True) def config_files(self): - config_files = super(LDAPIdentityEnabledEmulation, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap.conf')) return config_files def config_overrides(self): - super(LDAPIdentityEnabledEmulation, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='ldap', user_enabled_emulation=True) def test_project_crud(self): @@ -2249,7 +2238,7 @@ class LDAPIdentityEnabledEmulation(LDAPIdentity, unit.TestCase): driver = PROVIDERS.identity_api._select_identity_driver( CONF.identity.default_domain_id ) - group_dn = 'cn=%s,%s' % (group_name, driver.group.tree_dn) + group_dn = f'cn={group_name},{driver.group.tree_dn}' self.config_fixture.config( group='ldap', @@ -2287,7 +2276,7 @@ class LDAPIdentityEnabledEmulation(LDAPIdentity, unit.TestCase): driver = PROVIDERS.identity_api._select_identity_driver( CONF.identity.default_domain_id ) - group_dn = 'cn=%s,%s' % (group_name, driver.group.tree_dn) + group_dn = f'cn={group_name},{driver.group.tree_dn}' self.config_fixture.config( group='ldap', @@ -2387,12 +2376,12 @@ class LDAPIdentityEnabledEmulation(LDAPIdentity, unit.TestCase): user_enabled_attribute='passwordisexpired', ) mock_ldap_get.return_value = ( - u'uid=123456789,c=us,ou=our_ldap,o=acme.com', + 'uid=123456789,c=us,ou=our_ldap,o=acme.com', { 'uid': [123456789], - 'mail': [u'shaun@acme.com'], - 'passwordisexpired': [u'false'], - 'cn': [u'uid=123456789,c=us,ou=our_ldap,o=acme.com'], + 'mail': ['shaun@acme.com'], + 'passwordisexpired': ['false'], + 'cn': ['uid=123456789,c=us,ou=our_ldap,o=acme.com'], }, ) @@ -2422,7 +2411,7 @@ class LDAPIdentityEnabledEmulation(LDAPIdentity, unit.TestCase): # The filter, which _is_id_enabled is going to build, contains the # tree_dn, which better be escaped in this case. - exp_filter = '(%s=%s=%s,%s)' % ( + exp_filter = '({}={}={},{})'.format( mixin_impl.member_attribute, mixin_impl.id_attr, object_id, @@ -2444,7 +2433,7 @@ class LDAPPosixGroupsTest(LDAPTestSetup, unit.TestCase): _assert_backends(self, identity='ldap') def config_overrides(self): - super(LDAPPosixGroupsTest, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='identity', driver='ldap') self.config_fixture.config( group='ldap', @@ -2453,7 +2442,7 @@ class LDAPPosixGroupsTest(LDAPTestSetup, unit.TestCase): ) def config_files(self): - config_files = super(LDAPPosixGroupsTest, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap.conf')) return config_files @@ -2507,19 +2496,19 @@ class LdapIdentityWithMapping( """ def config_files(self): - config_files = super(LdapIdentityWithMapping, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap_sql.conf')) return config_files def setUp(self): - super(LdapIdentityWithMapping, self).setUp() + super().setUp() cache.configure_cache() def assert_backends(self): _assert_backends(self, identity='ldap') def config_overrides(self): - super(LdapIdentityWithMapping, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='identity', driver='ldap') self.config_fixture.config( group='identity_mapping', backward_compatible_ids=False @@ -2567,14 +2556,14 @@ class LdapIdentityWithMapping( def test_list_domains(self): domains = PROVIDERS.resource_api.list_domains() default_domain = unit.new_domain_ref( - description=u'The default domain', + description='The default domain', id=CONF.identity.default_domain_id, - name=u'Default', + name='Default', ) self.assertEqual([default_domain], domains) -class BaseMultiLDAPandSQLIdentity(object): +class BaseMultiLDAPandSQLIdentity: """Mixin class with support methods for domain-specific config testing.""" def create_users_across_domains(self): @@ -2707,7 +2696,7 @@ class MultiLDAPandSQLIdentity( # for separate backends per domain. self.enable_multi_domain() - super(MultiLDAPandSQLIdentity, self).load_fixtures(fixtures) + super().load_fixtures(fixtures) def assert_backends(self): _assert_backends( @@ -2723,7 +2712,7 @@ class MultiLDAPandSQLIdentity( ) def config_overrides(self): - super(MultiLDAPandSQLIdentity, self).config_overrides() + super().config_overrides() # Make sure identity and assignment are actually SQL drivers, # BaseLDAPIdentity sets these options to use LDAP. self.config_fixture.config(group='identity', driver='sql') @@ -2765,11 +2754,11 @@ class MultiLDAPandSQLIdentity( ) ) self.assertEqual(len(default_fixtures.USERS) + 1, len(users)) - user_ids = set(user['id'] for user in users) - expected_user_ids = set( + user_ids = {user['id'] for user in users} + expected_user_ids = { getattr(self, 'user_%s' % user['name'])['id'] for user in default_fixtures.USERS - ) + } expected_user_ids.add(_users['user0']['id']) for user_ref in users: self.assertNotIn('password', user_ref) @@ -3354,14 +3343,14 @@ class DomainSpecificLDAPandSQLIdentity( self.domain_count = self.DOMAIN_COUNT self.domain_specific_count = self.DOMAIN_SPECIFIC_COUNT - super(DomainSpecificLDAPandSQLIdentity, self).setUp() + super().setUp() def load_fixtures(self, fixtures): PROVIDERS.resource_api.create_domain( default_fixtures.ROOT_DOMAIN['id'], default_fixtures.ROOT_DOMAIN ) self.setup_initial_domains() - super(DomainSpecificLDAPandSQLIdentity, self).load_fixtures(fixtures) + super().load_fixtures(fixtures) def assert_backends(self): _assert_backends( @@ -3376,7 +3365,7 @@ class DomainSpecificLDAPandSQLIdentity( ) def config_overrides(self): - super(DomainSpecificLDAPandSQLIdentity, self).config_overrides() + super().config_overrides() # Make sure resource & assignment are actually SQL drivers, # BaseLDAPIdentity causes this option to use LDAP. self.config_fixture.config(group='resource', driver='sql') @@ -3424,11 +3413,11 @@ class DomainSpecificLDAPandSQLIdentity( ) ) self.assertEqual(len(default_fixtures.USERS) + 1, len(users)) - user_ids = set(user['id'] for user in users) - expected_user_ids = set( + user_ids = {user['id'] for user in users} + expected_user_ids = { getattr(self, 'user_%s' % user['name'])['id'] for user in default_fixtures.USERS - ) + } expected_user_ids.add(_users['user0']['id']) for user_ref in users: self.assertNotIn('password', user_ref) @@ -3579,7 +3568,7 @@ class DomainSpecificSQLIdentity(DomainSpecificLDAPandSQLIdentity): ) def config_overrides(self): - super(DomainSpecificSQLIdentity, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='identity', driver='ldap') # We aren't setting up any initial data ahead of switching to @@ -3669,11 +3658,11 @@ class LdapFilterTests( _assert_backends(self, identity='ldap') def config_overrides(self): - super(LdapFilterTests, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='identity', driver='ldap') def config_files(self): - config_files = super(LdapFilterTests, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap.conf')) return config_files @@ -3691,7 +3680,7 @@ class LdapFilterTests( class LDAPMatchingRuleInChainTests(LDAPTestSetup, unit.TestCase): def setUp(self): - super(LDAPMatchingRuleInChainTests, self).setUp() + super().setUp() group = unit.new_group_ref(domain_id=CONF.identity.default_domain_id) self.group = PROVIDERS.identity_api.create_group(group) @@ -3707,7 +3696,7 @@ class LDAPMatchingRuleInChainTests(LDAPTestSetup, unit.TestCase): _assert_backends(self, identity='ldap') def config_overrides(self): - super(LDAPMatchingRuleInChainTests, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='identity', driver='ldap') self.config_fixture.config( group='ldap', @@ -3719,7 +3708,7 @@ class LDAPMatchingRuleInChainTests(LDAPTestSetup, unit.TestCase): ) def config_files(self): - config_files = super(LDAPMatchingRuleInChainTests, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap.conf')) return config_files diff --git a/keystone/tests/unit/test_backend_ldap_pool.py b/keystone/tests/unit/test_backend_ldap_pool.py index 5f5c22a030..63b9e20c06 100644 --- a/keystone/tests/unit/test_backend_ldap_pool.py +++ b/keystone/tests/unit/test_backend_ldap_pool.py @@ -31,7 +31,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class LdapPoolCommonTestMixin(object): +class LdapPoolCommonTestMixin: """LDAP pool specific common tests used here and in live tests.""" def cleanup_pools(self): @@ -344,7 +344,7 @@ class LDAPIdentity( fakeldap.FakeLdapPool, ) ) - super(LDAPIdentity, self).setUp() + super().setUp() self.addCleanup(self.cleanup_pools) # storing to local variable to avoid long references @@ -355,6 +355,6 @@ class LDAPIdentity( PROVIDERS.identity_api.get_user(self.user_foo['id']) def config_files(self): - config_files = super(LDAPIdentity, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap_pool.conf')) return config_files diff --git a/keystone/tests/unit/test_backend_rules.py b/keystone/tests/unit/test_backend_rules.py index 61083ab0cc..d4db778425 100644 --- a/keystone/tests/unit/test_backend_rules.py +++ b/keystone/tests/unit/test_backend_rules.py @@ -20,52 +20,42 @@ from keystone.tests.unit.policy import test_backends as policy_tests class RulesPolicy(unit.TestCase, policy_tests.PolicyTests): def setUp(self): - super(RulesPolicy, self).setUp() + super().setUp() self.load_backends() def config_overrides(self): - super(RulesPolicy, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='policy', driver='rules') def test_create(self): - self.assertRaises( - exception.NotImplemented, super(RulesPolicy, self).test_create - ) + self.assertRaises(exception.NotImplemented, super().test_create) def test_get(self): - self.assertRaises( - exception.NotImplemented, super(RulesPolicy, self).test_get - ) + self.assertRaises(exception.NotImplemented, super().test_get) def test_list(self): - self.assertRaises( - exception.NotImplemented, super(RulesPolicy, self).test_list - ) + self.assertRaises(exception.NotImplemented, super().test_list) def test_update(self): - self.assertRaises( - exception.NotImplemented, super(RulesPolicy, self).test_update - ) + self.assertRaises(exception.NotImplemented, super().test_update) def test_delete(self): - self.assertRaises( - exception.NotImplemented, super(RulesPolicy, self).test_delete - ) + self.assertRaises(exception.NotImplemented, super().test_delete) def test_get_policy_returns_not_found(self): self.assertRaises( exception.NotImplemented, - super(RulesPolicy, self).test_get_policy_returns_not_found, + super().test_get_policy_returns_not_found, ) def test_update_policy_returns_not_found(self): self.assertRaises( exception.NotImplemented, - super(RulesPolicy, self).test_update_policy_returns_not_found, + super().test_update_policy_returns_not_found, ) def test_delete_policy_returns_not_found(self): self.assertRaises( exception.NotImplemented, - super(RulesPolicy, self).test_delete_policy_returns_not_found, + super().test_delete_policy_returns_not_found, ) diff --git a/keystone/tests/unit/test_backend_sql.py b/keystone/tests/unit/test_backend_sql.py index 5d43a13ceb..0f5de7300f 100644 --- a/keystone/tests/unit/test_backend_sql.py +++ b/keystone/tests/unit/test_backend_sql.py @@ -65,7 +65,7 @@ class SqlTests(unit.SQLDriverOverrides, unit.TestCase): self.user_foo['enabled'] = True def config_files(self): - config_files = super(SqlTests, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_sql.conf')) return config_files @@ -1010,7 +1010,7 @@ class SqlIdentity( # sqlalchemy emits various events and allows to listen to them. Here # bound method `query_counter` will be called each time when a query # is compiled - class CallCounter(object): + class CallCounter: def __init__(self): self.calls = 0 @@ -1398,7 +1398,7 @@ class SqlFilterTests(SqlTests, identity_tests.FilterTests): class SqlLimitTests(SqlTests, identity_tests.LimitTests): def setUp(self): - super(SqlLimitTests, self).setUp() + super().setUp() identity_tests.LimitTests.setUp(self) @@ -1472,7 +1472,7 @@ class SqlCredential(SqlTests): def setUp(self): self.useFixture(database.Database()) - super(SqlCredential, self).setUp() + super().setUp() self.useFixture( ksfixtures.KeyRepository( self.config_fixture, @@ -1558,7 +1558,7 @@ class SqlCredential(SqlTests): class SqlRegisteredLimit(SqlTests, limit_tests.RegisteredLimitTests): def setUp(self): - super(SqlRegisteredLimit, self).setUp() + super().setUp() fixtures_to_cleanup = [] for service in default_fixtures.SERVICES: @@ -1578,7 +1578,7 @@ class SqlRegisteredLimit(SqlTests, limit_tests.RegisteredLimitTests): class SqlLimit(SqlTests, limit_tests.LimitTests): def setUp(self): - super(SqlLimit, self).setUp() + super().setUp() fixtures_to_cleanup = [] for service in default_fixtures.SERVICES: diff --git a/keystone/tests/unit/test_backend_templated.py b/keystone/tests/unit/test_backend_templated.py index 6153a6c18c..b871aa0c7a 100644 --- a/keystone/tests/unit/test_backend_templated.py +++ b/keystone/tests/unit/test_backend_templated.py @@ -51,13 +51,13 @@ class TestTemplatedCatalog(unit.TestCase, catalog_tests.CatalogTests): } def setUp(self): - super(TestTemplatedCatalog, self).setUp() + super().setUp() self.useFixture(database.Database()) self.load_backends() self.load_fixtures(default_fixtures) def config_overrides(self): - super(TestTemplatedCatalog, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='catalog', driver='templated', @@ -387,15 +387,13 @@ class TestTemplatedCatalog(unit.TestCase, catalog_tests.CatalogTests): self.skip_test_overrides(BROKEN_WRITE_FUNCTIONALITY_MSG) def test_list_endpoints(self): - expected_urls = set( - [ - 'http://localhost:5000/v3', - 'http://localhost:35357/v3', - 'http://localhost:8774/v1.1/$(tenant_id)s', - ] - ) + expected_urls = { + 'http://localhost:5000/v3', + 'http://localhost:35357/v3', + 'http://localhost:8774/v1.1/$(tenant_id)s', + } endpoints = PROVIDERS.catalog_api.list_endpoints() - self.assertEqual(expected_urls, set(e['url'] for e in endpoints)) + self.assertEqual(expected_urls, {e['url'] for e in endpoints}) @unit.skip_if_cache_disabled('catalog') def test_invalidate_cache_when_updating_endpoint(self): diff --git a/keystone/tests/unit/test_cli.py b/keystone/tests/unit/test_cli.py index f37bdf2c83..5eb35df426 100644 --- a/keystone/tests/unit/test_cli.py +++ b/keystone/tests/unit/test_cli.py @@ -72,11 +72,11 @@ class CliLoggingTestCase(unit.BaseTestCase): ) fd = self.useFixture(temporaryfile.SecureTempFile()) self.fake_config_file = fd.file_name - super(CliLoggingTestCase, self).setUp() + super().setUp() # NOTE(crinkle): the command call doesn't have to actually work, # that's what the other unit tests are for. So just mock it out. - class FakeConfCommand(object): + class FakeConfCommand: def __init__(self): self.cmd_class = mock.Mock() @@ -107,12 +107,12 @@ class CliBootStrapTestCase(unit.SQLDriverOverrides, unit.TestCase): def setUp(self): self.useFixture(database.Database()) - super(CliBootStrapTestCase, self).setUp() + super().setUp() self.bootstrap = cli.BootStrap() def config_files(self): self.config_fixture.register_cli_opt(cli.command_opt) - config_files = super(CliBootStrapTestCase, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_sql.conf')) return config_files @@ -183,7 +183,7 @@ class CliBootStrapTestCase(unit.SQLDriverOverrides, unit.TestCase): self.assertEqual(self.service_name, svc['name']) self.assertEqual( - set(['admin', 'public', 'internal']), set(bootstrap.endpoints) + {'admin', 'public', 'internal'}, set(bootstrap.endpoints) ) urls = { @@ -419,7 +419,7 @@ class CliBootStrapTestCaseWithEnvironment(CliBootStrapTestCase): ) def setUp(self): - super(CliBootStrapTestCaseWithEnvironment, self).setUp() + super().setUp() self.password = uuid.uuid4().hex self.username = uuid.uuid4().hex self.project_name = uuid.uuid4().hex @@ -578,7 +578,7 @@ class CliDomainConfigAllTestCase(unit.SQLDriverOverrides, unit.TestCase): def setUp(self): self.useFixture(database.Database()) - super(CliDomainConfigAllTestCase, self).setUp() + super().setUp() self.load_backends() self.config_fixture.config( group='identity', @@ -590,7 +590,7 @@ class CliDomainConfigAllTestCase(unit.SQLDriverOverrides, unit.TestCase): def config_files(self): self.config_fixture.register_cli_opt(cli.command_opt) - config_files = super(CliDomainConfigAllTestCase, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_sql.conf')) return config_files @@ -635,9 +635,9 @@ class CliDomainConfigAllTestCase(unit.SQLDriverOverrides, unit.TestCase): {'id': uuid.uuid4().hex, 'name': domain} ) self.default_domain = unit.new_domain_ref( - description=u'The default domain', + description='The default domain', id=CONF.identity.default_domain_id, - name=u'Default', + name='Default', ) self.domains['domain_default'] = create_domain(self.default_domain) @@ -849,7 +849,7 @@ class CliDomainConfigInvalidDomainTestCase(CliDomainConfigAllTestCase): class TestDomainConfigFinder(unit.BaseTestCase): def setUp(self): - super(TestDomainConfigFinder, self).setUp() + super().setUp() self.logging = self.useFixture(fixtures.LoggerFixture()) @mock.patch('os.walk') @@ -880,7 +880,7 @@ class TestDomainConfigFinder(unit.BaseTestCase): class CliDBSyncTestCase(unit.BaseTestCase): - class FakeConfCommand(object): + class FakeConfCommand: def __init__(self, parent): self.extension = False self.check = parent.command_check @@ -968,7 +968,7 @@ class TestMappingPopulate(unit.SQLDriverOverrides, unit.TestCase): def setUp(self): sqldb = self.useFixture(database.Database()) - super(TestMappingPopulate, self).setUp() + super().setUp() self.ldapdb = self.useFixture(ldapdb.LDAPDatabase()) self.ldapdb.clear() @@ -979,12 +979,12 @@ class TestMappingPopulate(unit.SQLDriverOverrides, unit.TestCase): def config_files(self): self.config_fixture.register_cli_opt(cli.command_opt) - config_files = super(TestMappingPopulate, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap_sql.conf')) return config_files def config_overrides(self): - super(TestMappingPopulate, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='identity', driver='ldap') self.config_fixture.config( group='identity_mapping', backward_compatible_ids=False @@ -1047,7 +1047,7 @@ class TestMappingPopulate(unit.SQLDriverOverrides, unit.TestCase): class CliDomainConfigUploadNothing(unit.BaseTestCase): def setUp(self): - super(CliDomainConfigUploadNothing, self).setUp() + super().setUp() config_fixture = self.useFixture(oslo_config.fixture.Config(CONF)) config_fixture.register_cli_opt(cli.command_opt) @@ -1714,7 +1714,7 @@ class TokenFernetDoctorTests(unit.TestCase): class TestMappingPurge(unit.SQLDriverOverrides, unit.BaseTestCase): - class FakeConfCommand(object): + class FakeConfCommand: def __init__(self, parent): self.extension = False self.all = parent.command_all @@ -1725,7 +1725,7 @@ class TestMappingPurge(unit.SQLDriverOverrides, unit.BaseTestCase): def setUp(self): # Set up preset cli options and a parser - super(TestMappingPurge, self).setUp() + super().setUp() self.config_fixture = self.useFixture(oslo_config.fixture.Config(CONF)) self.config_fixture.register_cli_opt(cli.command_opt) # For unit tests that should not throw any erorrs, @@ -1840,7 +1840,7 @@ class TestUserMappingPurgeFunctional(unit.SQLDriverOverrides, unit.TestCase): def setUp(self): sqldb = self.useFixture(database.Database()) - super(TestUserMappingPurgeFunctional, self).setUp() + super().setUp() self.ldapdb = self.useFixture(ldapdb.LDAPDatabase()) self.ldapdb.clear() @@ -1851,14 +1851,12 @@ class TestUserMappingPurgeFunctional(unit.SQLDriverOverrides, unit.TestCase): def config_files(self): self.config_fixture.register_cli_opt(cli.command_opt) - config_files = super( - TestUserMappingPurgeFunctional, self - ).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap_sql.conf')) return config_files def config_overrides(self): - super(TestUserMappingPurgeFunctional, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='identity', driver='ldap') self.config_fixture.config( group='identity_mapping', backward_compatible_ids=False @@ -1936,7 +1934,7 @@ class TestGroupMappingPurgeFunctional(unit.SQLDriverOverrides, unit.TestCase): def setUp(self): sqldb = self.useFixture(database.Database()) - super(TestGroupMappingPurgeFunctional, self).setUp() + super().setUp() self.ldapdb = self.useFixture(ldapdb.LDAPDatabase()) self.ldapdb.clear() @@ -1947,14 +1945,12 @@ class TestGroupMappingPurgeFunctional(unit.SQLDriverOverrides, unit.TestCase): def config_files(self): self.config_fixture.register_cli_opt(cli.command_opt) - config_files = super( - TestGroupMappingPurgeFunctional, self - ).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_ldap_sql.conf')) return config_files def config_overrides(self): - super(TestGroupMappingPurgeFunctional, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='identity', driver='ldap') self.config_fixture.config( group='identity_mapping', backward_compatible_ids=False @@ -2028,7 +2024,7 @@ class TestGroupMappingPurgeFunctional(unit.SQLDriverOverrides, unit.TestCase): class TestTrustFlush(unit.SQLDriverOverrides, unit.BaseTestCase): - class FakeConfCommand(object): + class FakeConfCommand: def __init__(self, parent): self.extension = False self.project_id = parent.command_project_id @@ -2038,7 +2034,7 @@ class TestTrustFlush(unit.SQLDriverOverrides, unit.BaseTestCase): def setUp(self): # Set up preset cli options and a parser - super(TestTrustFlush, self).setUp() + super().setUp() self.useFixture(database.Database()) self.config_fixture = self.useFixture(oslo_config.fixture.Config(CONF)) self.config_fixture.register_cli_opt(cli.command_opt) @@ -2049,7 +2045,7 @@ class TestTrustFlush(unit.SQLDriverOverrides, unit.BaseTestCase): self.parser = cli.TrustFlush.add_argument_parser(subparsers) def config_files(self): - config_files = super(TestTrustFlush, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_sql.conf')) return config_files @@ -2104,7 +2100,7 @@ class TestTrustFlush(unit.SQLDriverOverrides, unit.BaseTestCase): class TestMappingEngineTester(unit.BaseTestCase): - class FakeConfCommand(object): + class FakeConfCommand: def __init__(self, parent): self.extension = False self.rules = parent.command_rules @@ -2115,7 +2111,7 @@ class TestMappingEngineTester(unit.BaseTestCase): def setUp(self): # Set up preset cli options and a parser - super(TestMappingEngineTester, self).setUp() + super().setUp() self.mapping_id = uuid.uuid4().hex self.rules_pathname = None self.rules = None @@ -2134,7 +2130,7 @@ class TestMappingEngineTester(unit.BaseTestCase): self.mapping_schema_version = '1.0' def config_files(self): - config_files = super(TestMappingEngineTester, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_sql.conf')) return config_files @@ -2279,7 +2275,7 @@ class CliStatusTestCase(unit.SQLDriverOverrides, unit.TestCase): def setUp(self): self.useFixture(database.Database()) - super(CliStatusTestCase, self).setUp() + super().setUp() self.load_backends() self.policy_file = self.useFixture(temporaryfile.SecureTempFile()) self.policy_file_name = self.policy_file.file_name diff --git a/keystone/tests/unit/test_config.py b/keystone/tests/unit/test_config.py index bcf6b07e05..9f1ad44b2b 100644 --- a/keystone/tests/unit/test_config.py +++ b/keystone/tests/unit/test_config.py @@ -26,7 +26,7 @@ CONF = keystone.conf.CONF class ConfigTestCase(unit.TestCase): def config_files(self): - config_files = super(ConfigTestCase, self).config_files() + config_files = super().config_files() sample_file = 'keystone.conf.sample' args = [ diff --git a/keystone/tests/unit/test_contrib_ec2_core.py b/keystone/tests/unit/test_contrib_ec2_core.py index eaddb73fc3..61ab7d1095 100644 --- a/keystone/tests/unit/test_contrib_ec2_core.py +++ b/keystone/tests/unit/test_contrib_ec2_core.py @@ -30,7 +30,7 @@ PROVIDERS = provider_api.ProviderAPIs class EC2ContribCoreV3(test_v3.RestfulTestCase): def setUp(self): - super(EC2ContribCoreV3, self).setUp() + super().setUp() self.cred_blob, self.credential = unit.new_ec2_credential( self.user['id'], self.project_id diff --git a/keystone/tests/unit/test_contrib_s3_core.py b/keystone/tests/unit/test_contrib_s3_core.py index a3d9178879..77742ccc00 100644 --- a/keystone/tests/unit/test_contrib_s3_core.py +++ b/keystone/tests/unit/test_contrib_s3_core.py @@ -30,7 +30,7 @@ PROVIDERS = provider_api.ProviderAPIs class S3ContribCore(test_v3.RestfulTestCase): def setUp(self): - super(S3ContribCore, self).setUp() + super().setUp() self.load_backends() @@ -107,7 +107,7 @@ class S3ContribCore(test_v3.RestfulTestCase): ) def test_good_signature_v1(self): - creds_ref = {'secret': u'b121dd41cdcc42fe9f70e572e84295aa'} + creds_ref = {'secret': 'b121dd41cdcc42fe9f70e572e84295aa'} credentials = { 'token': 'UFVUCjFCMk0yWThBc2dUcGdBbVk3UGhDZmc9PQphcHB' 'saWNhdGlvbi9vY3RldC1zdHJlYW0KVHVlLCAxMSBEZWMgMjAxM' @@ -121,7 +121,7 @@ class S3ContribCore(test_v3.RestfulTestCase): ) def test_bad_signature_v1(self): - creds_ref = {'secret': u'b121dd41cdcc42fe9f70e572e84295aa'} + creds_ref = {'secret': 'b121dd41cdcc42fe9f70e572e84295aa'} credentials = { 'token': 'UFVUCjFCMk0yWThBc2dUcGdBbVk3UGhDZmc9PQphcHB' 'saWNhdGlvbi9vY3RldC1zdHJlYW0KVHVlLCAxMSBEZWMgMjAxM' @@ -138,7 +138,7 @@ class S3ContribCore(test_v3.RestfulTestCase): ) def test_good_signature_v4(self): - creds_ref = {'secret': u'e7a7a2240136494986991a6598d9fb9f'} + creds_ref = {'secret': 'e7a7a2240136494986991a6598d9fb9f'} credentials = { 'token': 'QVdTNC1ITUFDLVNIQTI1NgoyMDE1MDgyNFQxMTIwNDFaCjIw' 'MTUwODI0L1JlZ2lvbk9uZS9zMy9hd3M0X3JlcXVlc3QKZjIy' @@ -153,7 +153,7 @@ class S3ContribCore(test_v3.RestfulTestCase): ) def test_good_iam_signature_v4(self): - creds_ref = {'secret': u'e7a7a2240136494986991a6598d9fb9f'} + creds_ref = {'secret': 'e7a7a2240136494986991a6598d9fb9f'} credentials = { 'token': 'QVdTNC1ITUFDLVNIQTI1NgoyMDE1MDgyNFQxMTIwNDFaCjIw' 'MTUwODI0L1JlZ2lvbk9uZS9pYW0vYXdzNF9yZXF1ZXN0CmYy' @@ -168,7 +168,7 @@ class S3ContribCore(test_v3.RestfulTestCase): ) def test_good_sts_signature_v4(self): - creds_ref = {'secret': u'e7a7a2240136494986991a6598d9fb9f'} + creds_ref = {'secret': 'e7a7a2240136494986991a6598d9fb9f'} credentials = { 'token': 'QVdTNC1ITUFDLVNIQTI1NgoyMDE1MDgyNFQxMTIwNDFaCjIw' 'MTUwODI0L1JlZ2lvbk9uZS9zdHMvYXdzNF9yZXF1ZXN0CmYy' @@ -183,7 +183,7 @@ class S3ContribCore(test_v3.RestfulTestCase): ) def test_bad_signature_v4(self): - creds_ref = {'secret': u'e7a7a2240136494986991a6598d9fb9f'} + creds_ref = {'secret': 'e7a7a2240136494986991a6598d9fb9f'} # the signature is wrong on an otherwise correctly formed token credentials = { 'token': 'QVdTNC1ITUFDLVNIQTI1NgoyMDE1MDgyNFQxMTIwNDFaCjIw' @@ -201,7 +201,7 @@ class S3ContribCore(test_v3.RestfulTestCase): ) def test_bad_service_v4(self): - creds_ref = {'secret': u'e7a7a2240136494986991a6598d9fb9f'} + creds_ref = {'secret': 'e7a7a2240136494986991a6598d9fb9f'} # use 'bad' as the service scope instead of a recognised service credentials = { 'token': 'QVdTNC1ITUFDLVNIQTI1NgoyMDE1MDgyNFQxMTIwNDFaCjIw' @@ -220,7 +220,7 @@ class S3ContribCore(test_v3.RestfulTestCase): ) def test_bad_signing_key_v4(self): - creds_ref = {'secret': u'e7a7a2240136494986991a6598d9fb9f'} + creds_ref = {'secret': 'e7a7a2240136494986991a6598d9fb9f'} # signed with aws4_badrequest instead of aws4_request credentials = { 'token': 'QVdTNC1ITUFDLVNIQTI1NgoyMDE1MDgyNFQxMTIwNDFaCjIw' @@ -239,7 +239,7 @@ class S3ContribCore(test_v3.RestfulTestCase): ) def test_bad_short_scope_v4(self): - creds_ref = {'secret': u'e7a7a2240136494986991a6598d9fb9f'} + creds_ref = {'secret': 'e7a7a2240136494986991a6598d9fb9f'} # credential scope has too few parts, missing final /aws4_request credentials = { 'token': 'QVdTNC1ITUFDLVNIQTI1NgoyMDE1MDgyNFQxMTIwNDFaCjIw' @@ -258,7 +258,7 @@ class S3ContribCore(test_v3.RestfulTestCase): ) def test_bad_token_v4(self): - creds_ref = {'secret': u'e7a7a2240136494986991a6598d9fb9f'} + creds_ref = {'secret': 'e7a7a2240136494986991a6598d9fb9f'} # token has invalid format of first part credentials = {'token': 'QVdTNC1BQUEKWApYClg=', 'signature': ''} self.assertRaises( diff --git a/keystone/tests/unit/test_exception.py b/keystone/tests/unit/test_exception.py index c1ef5c30ca..8f5558b565 100644 --- a/keystone/tests/unit/test_exception.py +++ b/keystone/tests/unit/test_exception.py @@ -35,7 +35,7 @@ class ExceptionTestCase(unit.BaseTestCase): def assertValidJsonRendering(self, e): resp = auth_context.render_exception(e) self.assertEqual(e.code, resp.status_int) - self.assertEqual('%s %s' % (e.code, e.title), resp.status) + self.assertEqual(f'{e.code} {e.title}', resp.status) j = jsonutils.loads(resp.body) self.assertIsNotNone(j.get('error')) @@ -82,7 +82,7 @@ class ExceptionTestCase(unit.BaseTestCase): self.assertEqual('Forbidden', j['error'].get('title')) def test_unicode_message(self): - message = u'Comment \xe7a va' + message = 'Comment \xe7a va' e = exception.Error(message) try: @@ -111,7 +111,7 @@ class UnexpectedExceptionTestCase(ExceptionTestCase): debug_message_format = 'Debug Message: %(debug_info)s' def setUp(self): - super(UnexpectedExceptionTestCase, self).setUp() + super().setUp() self.exc_str = uuid.uuid4().hex self.config_fixture = self.useFixture(config_fixture.Config(CONF)) @@ -137,7 +137,7 @@ class UnexpectedExceptionTestCase(ExceptionTestCase): e = subclass(debug_info=self.exc_str) expected = subclass.debug_message_format % {'debug_info': self.exc_str} self.assertEqual( - '%s %s' % (expected, exception.SecurityError.amendment), str(e) + f'{expected} {exception.SecurityError.amendment}', str(e) ) def test_unexpected_error_custom_message_no_debug(self): @@ -149,7 +149,8 @@ class UnexpectedExceptionTestCase(ExceptionTestCase): self.config_fixture.config(debug=True, insecure_debug=True) e = exception.UnexpectedError(self.exc_str) self.assertEqual( - '%s %s' % (self.exc_str, exception.SecurityError.amendment), str(e) + f'{self.exc_str} {exception.SecurityError.amendment}', + str(e), ) def test_unexpected_error_custom_message_exception_debug(self): @@ -157,7 +158,8 @@ class UnexpectedExceptionTestCase(ExceptionTestCase): orig_e = exception.NotFound(target=uuid.uuid4().hex) e = exception.UnexpectedError(orig_e) self.assertEqual( - '%s %s' % (str(orig_e), exception.SecurityError.amendment), str(e) + f'{str(orig_e)} {exception.SecurityError.amendment}', + str(e), ) def test_unexpected_error_custom_message_binary_debug(self): @@ -165,7 +167,7 @@ class UnexpectedExceptionTestCase(ExceptionTestCase): binary_msg = b'something' e = exception.UnexpectedError(binary_msg) self.assertEqual( - '%s %s' % (str(binary_msg), exception.SecurityError.amendment), + f'{str(binary_msg)} {exception.SecurityError.amendment}', str(e), ) @@ -174,7 +176,7 @@ class SecurityErrorTestCase(ExceptionTestCase): """Test whether security-related info is exposed to the API user.""" def setUp(self): - super(SecurityErrorTestCase, self).setUp() + super().setUp() self.config_fixture = self.useFixture(config_fixture.Config(CONF)) self.config_fixture.config(public_endpoint='http://localhost:5050') @@ -262,7 +264,7 @@ class SecurityErrorTestCase(ExceptionTestCase): def test_unicode_argument_message(self): self.config_fixture.config(debug=False) - risky_info = u'\u7ee7\u7eed\u884c\u7f29\u8fdb\u6216' + risky_info = '\u7ee7\u7eed\u884c\u7f29\u8fdb\u6216' e = exception.Forbidden(message=risky_info) self.assertValidJsonRendering(e) self.assertNotIn(risky_info, str(e)) @@ -272,7 +274,7 @@ class TestSecurityErrorTranslation(unit.BaseTestCase): """Test i18n for SecurityError exceptions.""" def setUp(self): - super(TestSecurityErrorTranslation, self).setUp() + super().setUp() self.config_fixture = self.useFixture(config_fixture.Config(CONF)) self.config_fixture.config(insecure_debug=False) self.warning_log = self.useFixture(fixtures.FakeLogger(level=log.WARN)) diff --git a/keystone/tests/unit/test_hacking_checks.py b/keystone/tests/unit/test_hacking_checks.py index 3220fb01af..264867dd32 100644 --- a/keystone/tests/unit/test_hacking_checks.py +++ b/keystone/tests/unit/test_hacking_checks.py @@ -22,7 +22,7 @@ from keystone.tests.unit.ksfixtures import hacking as hacking_fixtures class BaseStyleCheck(unit.BaseTestCase): def setUp(self): - super(BaseStyleCheck, self).setUp() + super().setUp() self.code_ex = self.useFixture(self.get_fixture()) self.addCleanup(delattr, self, 'code_ex') diff --git a/keystone/tests/unit/test_ldap_livetest.py b/keystone/tests/unit/test_ldap_livetest.py index e0884dbcb1..b71a270a0c 100644 --- a/keystone/tests/unit/test_ldap_livetest.py +++ b/keystone/tests/unit/test_ldap_livetest.py @@ -40,7 +40,7 @@ class LiveLDAPIdentity(test_backend_ldap.LDAPIdentity): def setUp(self): self._ldap_skip_live() - super(LiveLDAPIdentity, self).setUp() + super().setUp() def _ldap_skip_live(self): self.skip_if_env_not_set('ENABLE_LDAP_LIVE_TEST') @@ -85,7 +85,7 @@ class LiveLDAPIdentity(test_backend_ldap.LDAPIdentity): ) def config_files(self): - config_files = super(LiveLDAPIdentity, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_liveldap.conf')) return config_files @@ -214,7 +214,7 @@ class LiveLDAPIdentity(test_backend_ldap.LDAPIdentity): user_enabled_emulation=False, user_enabled_attribute='employeeType', ) - super(LiveLDAPIdentity, self).test_user_enable_attribute_mask() + super().test_user_enable_attribute_mask() def test_create_project_case_sensitivity(self): # The attribute used for the live LDAP tests is case insensitive. diff --git a/keystone/tests/unit/test_ldap_pool_livetest.py b/keystone/tests/unit/test_ldap_pool_livetest.py index 6fe887f196..0304b4c998 100644 --- a/keystone/tests/unit/test_ldap_pool_livetest.py +++ b/keystone/tests/unit/test_ldap_pool_livetest.py @@ -39,13 +39,13 @@ class LiveLDAPPoolIdentity( """ def setUp(self): - super(LiveLDAPPoolIdentity, self).setUp() + super().setUp() self.addCleanup(self.cleanup_pools) # storing to local variable to avoid long references self.conn_pools = ldap_common.PooledLDAPHandler.connection_pools def config_files(self): - config_files = super(LiveLDAPPoolIdentity, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_pool_liveldap.conf')) return config_files diff --git a/keystone/tests/unit/test_ldap_tls_livetest.py b/keystone/tests/unit/test_ldap_tls_livetest.py index ebe1461117..8c22611509 100644 --- a/keystone/tests/unit/test_ldap_tls_livetest.py +++ b/keystone/tests/unit/test_ldap_tls_livetest.py @@ -41,7 +41,7 @@ class LiveTLSLDAPIdentity(test_ldap_livetest.LiveLDAPIdentity): self.skip_if_env_not_set('ENABLE_TLS_LDAP_LIVE_TEST') def config_files(self): - config_files = super(LiveTLSLDAPIdentity, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_tls_liveldap.conf')) return config_files diff --git a/keystone/tests/unit/test_limits.py b/keystone/tests/unit/test_limits.py index b4e2dbb855..6828ad33fd 100644 --- a/keystone/tests/unit/test_limits.py +++ b/keystone/tests/unit/test_limits.py @@ -84,7 +84,7 @@ class RegisteredLimitsTestCase(test_v3.RestfulTestCase): """Test registered_limits CRUD.""" def setUp(self): - super(RegisteredLimitsTestCase, self).setUp() + super().setUp() # Most of these tests require system-scoped tokens. Let's have one on # hand so that we can use it in tests when we need it. @@ -664,7 +664,7 @@ class LimitsTestCase(test_v3.RestfulTestCase): """Test limits CRUD.""" def setUp(self): - super(LimitsTestCase, self).setUp() + super().setUp() # FIXME(lbragstad): Remove all this duplicated logic once we get all # keystone tests using bootstrap consistently. This is something the # bootstrap utility already does for us. @@ -1376,7 +1376,7 @@ class LimitsTestCase(test_v3.RestfulTestCase): class StrictTwoLevelLimitsTestCase(LimitsTestCase): def setUp(self): - super(StrictTwoLevelLimitsTestCase, self).setUp() + super().setUp() # Most of these tests require system-scoped tokens. Let's have one on # hand so that we can use it in tests when we need it. PROVIDERS.assignment_api.create_system_grant_for_user( @@ -1434,7 +1434,7 @@ class StrictTwoLevelLimitsTestCase(LimitsTestCase): self.project_F = response.json_body['project'] def config_overrides(self): - super(StrictTwoLevelLimitsTestCase, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='unified_limit', enforcement_model='strict_two_level' ) diff --git a/keystone/tests/unit/test_middleware.py b/keystone/tests/unit/test_middleware.py index 1c06357937..1f5416573f 100644 --- a/keystone/tests/unit/test_middleware.py +++ b/keystone/tests/unit/test_middleware.py @@ -85,10 +85,7 @@ class MiddlewareRequestTestBase(unit.TestCase): def fill_context(i_self, *i_args, **i_kwargs): # i_ to distinguish it from and not clobber the outer vars e = self.assertRaises( - exc, - super(_Failing, i_self).fill_context, - *i_args, - **i_kwargs + exc, super().fill_context, *i_args, **i_kwargs ) i_self._called = True raise e @@ -119,7 +116,7 @@ class AuthContextMiddlewareTest( MIDDLEWARE_CLASS = auth_context.AuthContextMiddleware def setUp(self): - super(AuthContextMiddlewareTest, self).setUp() + super().setUp() self.client_issuer = uuid.uuid4().hex self.untrusted_client_issuer = uuid.uuid4().hex self.trusted_issuer = self.client_issuer diff --git a/keystone/tests/unit/test_policy.py b/keystone/tests/unit/test_policy.py index 5961fc7be1..3697e8fb22 100644 --- a/keystone/tests/unit/test_policy.py +++ b/keystone/tests/unit/test_policy.py @@ -39,7 +39,7 @@ class PolicyFileTestCase(unit.TestCase): # the config_overrides call. self.tempfile = self.useFixture(temporaryfile.SecureTempFile()) self.tmpfilename = self.tempfile.file_name - super(PolicyFileTestCase, self).setUp() + super().setUp() self.target = {} def _policy_fixture(self): @@ -67,7 +67,7 @@ class PolicyFileTestCase(unit.TestCase): class PolicyTestCase(unit.TestCase): def setUp(self): - super(PolicyTestCase, self).setUp() + super().setUp() self.rules = { "true": [], "example:allowed": [], @@ -157,7 +157,7 @@ class PolicyTestCase(unit.TestCase): class PolicyScopeTypesEnforcementTestCase(unit.TestCase): def setUp(self): - super(PolicyScopeTypesEnforcementTestCase, self).setUp() + super().setUp() rule = common_policy.RuleDefault( name='foo', check_str='', scope_types=['system'] ) @@ -217,7 +217,7 @@ class PolicyJsonTestCase(unit.TestCase): 'token': uuid.uuid4().hex, 'project_name': None, 'user_id': uuid.uuid4().hex, - 'roles': [u'admin'], + 'roles': ['admin'], 'is_admin': True, 'is_admin_project': True, 'project_id': None, diff --git a/keystone/tests/unit/test_receipt_provider.py b/keystone/tests/unit/test_receipt_provider.py index 3243cdf1d5..bf7e97b7b6 100644 --- a/keystone/tests/unit/test_receipt_provider.py +++ b/keystone/tests/unit/test_receipt_provider.py @@ -38,7 +38,7 @@ CURRENT_DATE = timeutils.utcnow() class TestReceiptProvider(unit.TestCase): def setUp(self): - super(TestReceiptProvider, self).setUp() + super().setUp() self.useFixture(database.Database()) self.useFixture( ksfixtures.KeyRepository( diff --git a/keystone/tests/unit/test_revoke.py b/keystone/tests/unit/test_revoke.py index c60dce225d..d26efb3e54 100644 --- a/keystone/tests/unit/test_revoke.py +++ b/keystone/tests/unit/test_revoke.py @@ -47,7 +47,7 @@ def _sample_blank_token(): return token_data -class RevokeTests(object): +class RevokeTests: def _assertTokenRevoked(self, token_data): self.assertRaises( @@ -492,7 +492,7 @@ class RevokeTests(object): class FernetSqlRevokeTests(test_backend_sql.SqlTests, RevokeTests): def config_overrides(self): - super(FernetSqlRevokeTests, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='token', provider='fernet', revoke_by_id=False ) diff --git a/keystone/tests/unit/test_shadow_users.py b/keystone/tests/unit/test_shadow_users.py index a8ed648616..1ca2796ebf 100644 --- a/keystone/tests/unit/test_shadow_users.py +++ b/keystone/tests/unit/test_shadow_users.py @@ -29,7 +29,7 @@ class ShadowUsersTests( test_core.ShadowUsersCoreTests, ): def setUp(self): - super(ShadowUsersTests, self).setUp() + super().setUp() self.useFixture(database.Database()) self.load_backends() PROVIDERS.resource_api.create_domain( @@ -70,7 +70,7 @@ class ShadowUsersTests( class TestUserWithFederatedUser(ShadowUsersTests): def setUp(self): - super(TestUserWithFederatedUser, self).setUp() + super().setUp() self.useFixture(database.Database()) self.load_backends() diff --git a/keystone/tests/unit/test_token_provider.py b/keystone/tests/unit/test_token_provider.py index af3984dba2..d2d532ef09 100644 --- a/keystone/tests/unit/test_token_provider.py +++ b/keystone/tests/unit/test_token_provider.py @@ -38,7 +38,7 @@ CURRENT_DATE = timeutils.utcnow() class TestTokenProvider(unit.TestCase): def setUp(self): - super(TestTokenProvider, self).setUp() + super().setUp() self.useFixture(database.Database()) self.useFixture( ksfixtures.KeyRepository( diff --git a/keystone/tests/unit/test_url_middleware.py b/keystone/tests/unit/test_url_middleware.py index f879b3531a..7a7b38ab15 100644 --- a/keystone/tests/unit/test_url_middleware.py +++ b/keystone/tests/unit/test_url_middleware.py @@ -16,7 +16,7 @@ from keystone.server.flask.request_processing.middleware import url_normalize from keystone.tests import unit -class FakeApp(object): +class FakeApp: """Fakes a WSGI app URL normalized.""" def __init__(self): @@ -29,7 +29,7 @@ class FakeApp(object): class UrlMiddlewareTest(unit.TestCase): def setUp(self): - super(UrlMiddlewareTest, self).setUp() + super().setUp() self.fake_app = FakeApp() self.middleware = url_normalize.URLNormalizingMiddleware(self.fake_app) diff --git a/keystone/tests/unit/test_v3.py b/keystone/tests/unit/test_v3.py index 1f61225e51..8d3497421f 100644 --- a/keystone/tests/unit/test_v3.py +++ b/keystone/tests/unit/test_v3.py @@ -201,13 +201,13 @@ class RestfulTestCase( return schema def config_files(self): - config_files = super(RestfulTestCase, self).config_files() + config_files = super().config_files() config_files.append(unit.dirs.tests_conf('backend_sql.conf')) return config_files def setUp(self): """Setup for v3 Restful Test Cases.""" - super(RestfulTestCase, self).setUp() + super().setUp() self.empty_context = {'environment': {}} @@ -215,7 +215,7 @@ class RestfulTestCase( # ensure the cache region instance is setup cache.configure_cache() - super(RestfulTestCase, self).load_backends() + super().load_backends() def load_fixtures(self, fixtures): self.load_sample_data() @@ -232,9 +232,9 @@ class RestfulTestCase( resource_base.NULL_DOMAIN_ID, root_domain ) domain = unit.new_domain_ref( - description=(u'The default domain'), + description=('The default domain'), id=DEFAULT_DOMAIN_ID, - name=u'Default', + name='Default', ) PROVIDERS.resource_api.create_domain(DEFAULT_DOMAIN_ID, domain) @@ -327,7 +327,7 @@ class RestfulTestCase( project = self.assertValidProjectResponse(r, ref) # set the user's preferred project body = {'user': {'default_project_id': project['id']}} - r = self.patch('/users/%(user_id)s' % {'user_id': user_id}, body=body) + r = self.patch(f'/users/{user_id}', body=body) self.assertValidUserResponse(r) return project @@ -640,7 +640,7 @@ class RestfulTestCase( keys = ['name', 'description', 'enabled'] for k in ['id'] + keys: - msg = '%s unexpectedly None in %s' % (k, entity) + msg = f'{k} unexpectedly None in {entity}' self.assertIsNotNone(entity.get(k), msg) self.assertIsNotNone(entity.get('links')) @@ -652,7 +652,7 @@ class RestfulTestCase( if ref: for k in keys: - msg = '%s not equal: %s != %s' % (k, ref[k], entity[k]) + msg = f'{k} not equal: {ref[k]} != {entity[k]}' self.assertEqual(ref[k], entity[k]) return entity @@ -816,7 +816,7 @@ class RestfulTestCase( # catalog validation def assertValidCatalogResponse(self, resp, *args, **kwargs): - self.assertEqual(set(['catalog', 'links']), set(resp.json.keys())) + self.assertEqual({'catalog', 'links'}, set(resp.json.keys())) self.assertValidCatalog(resp.json['catalog']) self.assertIn('links', resp.json) self.assertIsInstance(resp.json['links'], dict) @@ -859,7 +859,7 @@ class RestfulTestCase( self.assertValidRegion, keys_to_check=[], *args, - **kwargs + **kwargs, ) def assertValidRegionResponse(self, resp, *args, **kwargs): @@ -869,7 +869,7 @@ class RestfulTestCase( self.assertValidRegion, keys_to_check=[], *args, - **kwargs + **kwargs, ) def assertValidRegion(self, entity, ref=None): @@ -968,7 +968,7 @@ class RestfulTestCase( self.assertValidUser, keys_to_check=['name', 'enabled'], *args, - **kwargs + **kwargs, ) def assertValidUserResponse(self, resp, *args, **kwargs): @@ -978,7 +978,7 @@ class RestfulTestCase( self.assertValidUser, keys_to_check=['name', 'enabled'], *args, - **kwargs + **kwargs, ) def assertValidUser(self, entity, ref=None): @@ -1006,7 +1006,7 @@ class RestfulTestCase( self.assertValidGroup, keys_to_check=['name', 'description', 'domain_id'], *args, - **kwargs + **kwargs, ) def assertValidGroupResponse(self, resp, *args, **kwargs): @@ -1016,7 +1016,7 @@ class RestfulTestCase( self.assertValidGroup, keys_to_check=['name', 'description', 'domain_id'], *args, - **kwargs + **kwargs, ) def assertValidGroup(self, entity, ref=None): @@ -1034,7 +1034,7 @@ class RestfulTestCase( self.assertValidCredential, keys_to_check=['blob', 'user_id', 'type'], *args, - **kwargs + **kwargs, ) def assertValidCredentialResponse(self, resp, *args, **kwargs): @@ -1044,7 +1044,7 @@ class RestfulTestCase( self.assertValidCredential, keys_to_check=['blob', 'user_id', 'type'], *args, - **kwargs + **kwargs, ) def assertValidCredential(self, entity, ref=None): @@ -1069,7 +1069,7 @@ class RestfulTestCase( self.assertValidRole, keys_to_check=['name'], *args, - **kwargs + **kwargs, ) def assertRoleInListResponse(self, resp, ref, expected=1): @@ -1094,7 +1094,7 @@ class RestfulTestCase( self.assertValidRole, keys_to_check=['name'], *args, - **kwargs + **kwargs, ) def assertValidRole(self, entity, ref=None): @@ -1214,7 +1214,7 @@ class RestfulTestCase( 'impersonation', ], *args, - **kwargs + **kwargs, ) def assertValidTrustResponse(self, resp, *args, **kwargs): @@ -1228,7 +1228,7 @@ class RestfulTestCase( 'impersonation', ], *args, - **kwargs + **kwargs, ) def assertValidTrustSummary(self, entity, ref=None): @@ -1413,7 +1413,7 @@ class AuthContextMiddlewareTestCase(RestfulTestCase): def test_domain_scoped_token_auth_context(self): # grant the domain role to user - path = '/domains/%s/users/%s/roles/%s' % ( + path = '/domains/{}/users/{}/roles/{}'.format( self.domain['id'], self.user['id'], self.role['id'], @@ -1495,7 +1495,7 @@ class AuthContextMiddlewareTestCase(RestfulTestCase): self.assertEqual(b'body', resp.body) # just to make sure it worked -class JsonHomeTestMixin(object): +class JsonHomeTestMixin: """JSON Home test. Mixin this class to provide a test for the JSON-Home response for an @@ -1525,7 +1525,7 @@ class JsonHomeTestMixin(object): ) -class AssignmentTestMixin(object): +class AssignmentTestMixin: """To hold assignment helper functions.""" def build_role_assignment_query_url(self, effective=False, **filters): @@ -1549,7 +1549,7 @@ class AssignmentTestMixin(object): 'Invalid key \'%s\' in provided filters.' % k ) - query_params += '%s=%s' % (k.replace('_', '.'), v) + query_params += '{}={}'.format(k.replace('_', '.'), v) return '/role_assignments%s' % query_params @@ -1605,7 +1605,7 @@ class AssignmentTestMixin(object): entity['user'] = {'id': attribs['user_id']} if attribs.get('group_id'): - entity['links']['membership'] = '/groups/%s/users/%s' % ( + entity['links']['membership'] = '/groups/{}/users/{}'.format( attribs['group_id'], attribs['user_id'], ) diff --git a/keystone/tests/unit/test_v3_application_credential.py b/keystone/tests/unit/test_v3_application_credential.py index a57e68f2e6..fc0d10093d 100644 --- a/keystone/tests/unit/test_v3_application_credential.py +++ b/keystone/tests/unit/test_v3_application_credential.py @@ -31,7 +31,7 @@ class ApplicationCredentialTestCase(test_v3.RestfulTestCase): """Test CRUD operations for application credentials.""" def config_overrides(self): - super(ApplicationCredentialTestCase, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='auth', methods='password,application_credential' ) diff --git a/keystone/tests/unit/test_v3_assignment.py b/keystone/tests/unit/test_v3_assignment.py index a324deddd4..b48d18964a 100644 --- a/keystone/tests/unit/test_v3_assignment.py +++ b/keystone/tests/unit/test_v3_assignment.py @@ -30,7 +30,7 @@ CONF = keystone.conf.CONF PROVIDERS = provider_api.ProviderAPIs -class SystemRoleAssignmentMixin(object): +class SystemRoleAssignmentMixin: def _create_new_role(self): """Create a role available for use anywhere and return the ID.""" @@ -63,7 +63,7 @@ class AssignmentTestCase( """Test roles and role assignments.""" def setUp(self): - super(AssignmentTestCase, self).setUp() + super().setUp() self.group = unit.new_group_ref(domain_id=self.domain_id) self.group = PROVIDERS.identity_api.create_group(self.group) @@ -96,7 +96,7 @@ class AssignmentTestCase( def test_get_head_role(self): """Call ``GET & HEAD /roles/{role_id}``.""" - resource_url = '/roles/%(role_id)s' % {'role_id': self.role_id} + resource_url = f'/roles/{self.role_id}' r = self.get(resource_url) self.assertValidRoleResponse(r, self.role) self.head(resource_url, expected_status=http.client.OK) @@ -106,14 +106,14 @@ class AssignmentTestCase( ref = unit.new_role_ref() del ref['id'] r = self.patch( - '/roles/%(role_id)s' % {'role_id': self.role_id}, + f'/roles/{self.role_id}', body={'role': ref}, ) self.assertValidRoleResponse(r, ref) def test_delete_role(self): """Call ``DELETE /roles/{role_id}``.""" - self.delete('/roles/%(role_id)s' % {'role_id': self.role_id}) + self.delete(f'/roles/{self.role_id}') # Role Grants tests @@ -121,14 +121,14 @@ class AssignmentTestCase( role = unit.new_role_ref() PROVIDERS.role_api.create_role(role['id'], role) - collection_url = '/projects/%(project_id)s/users/%(user_id)s/roles' % { - 'project_id': self.project['id'], - 'user_id': self.user['id'], - } - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': role['id'], - } + collection_url = '/projects/{project_id}/users/{user_id}/roles'.format( + project_id=self.project['id'], + user_id=self.user['id'], + ) + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=role['id'], + ) # There is a role assignment for self.user on self.project r = self.get(collection_url) @@ -158,14 +158,14 @@ class AssignmentTestCase( """ user_id = uuid.uuid4().hex - collection_url = '/projects/%(project_id)s/users/%(user_id)s/roles' % { - 'project_id': self.project['id'], - 'user_id': user_id, - } - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': self.role_id, - } + collection_url = '/projects/{project_id}/users/{user_id}/roles'.format( + project_id=self.project['id'], + user_id=user_id, + ) + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=self.role_id, + ) self.put(member_url, expected_status=http.client.NOT_FOUND) self.head(member_url, expected_status=http.client.NOT_FOUND) @@ -178,10 +178,10 @@ class AssignmentTestCase( '/domains/%(domain_id)s/users/%(user_id)s/roles' % {'domain_id': self.domain_id, 'user_id': self.user['id']} ) - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': self.role_id, - } + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=self.role_id, + ) self.put(member_url) self.head(member_url) @@ -213,14 +213,14 @@ class AssignmentTestCase( """ user_id = uuid.uuid4().hex - collection_url = '/domains/%(domain_id)s/users/%(user_id)s/roles' % { - 'domain_id': self.domain_id, - 'user_id': user_id, - } - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': self.role_id, - } + collection_url = '/domains/{domain_id}/users/{user_id}/roles'.format( + domain_id=self.domain_id, + user_id=user_id, + ) + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=self.role_id, + ) self.put(member_url, expected_status=http.client.NOT_FOUND) self.head(member_url, expected_status=http.client.NOT_FOUND) @@ -233,10 +233,10 @@ class AssignmentTestCase( '/projects/%(project_id)s/groups/%(group_id)s/roles' % {'project_id': self.project_id, 'group_id': self.group_id} ) - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': self.role_id, - } + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=self.role_id, + ) self.put(member_url) self.head(member_url) @@ -272,10 +272,10 @@ class AssignmentTestCase( '/projects/%(project_id)s/groups/%(group_id)s/roles' % {'project_id': self.project_id, 'group_id': group_id} ) - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': self.role_id, - } + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=self.role_id, + ) self.put(member_url, expected_status=http.client.NOT_FOUND) self.head(member_url, expected_status=http.client.NOT_FOUND) @@ -288,10 +288,10 @@ class AssignmentTestCase( '/domains/%(domain_id)s/groups/%(group_id)s/roles' % {'domain_id': self.domain_id, 'group_id': self.group_id} ) - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': self.role_id, - } + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=self.role_id, + ) self.put(member_url) self.head(member_url) @@ -323,14 +323,14 @@ class AssignmentTestCase( """ group_id = uuid.uuid4().hex - collection_url = '/domains/%(domain_id)s/groups/%(group_id)s/roles' % { - 'domain_id': self.domain_id, - 'group_id': group_id, - } - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': self.role_id, - } + collection_url = '/domains/{domain_id}/groups/{group_id}/roles'.format( + domain_id=self.domain_id, + group_id=group_id, + ) + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=self.role_id, + ) self.put(member_url, expected_status=http.client.NOT_FOUND) self.head(member_url, expected_status=http.client.NOT_FOUND) @@ -342,14 +342,14 @@ class AssignmentTestCase( new_user = unit.new_user_ref(domain_id=self.domain_id) user_ref = PROVIDERS.identity_api.create_user(new_user) # Assign the user a role on the project - collection_url = '/projects/%(project_id)s/users/%(user_id)s/roles' % { - 'project_id': self.project_id, - 'user_id': user_ref['id'], - } - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': self.role_id, - } + collection_url = '/projects/{project_id}/users/{user_id}/roles'.format( + project_id=self.project_id, + user_id=user_ref['id'], + ) + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=self.role_id, + ) self.put(member_url) # Check the user has the role assigned self.head(member_url) @@ -380,10 +380,10 @@ class AssignmentTestCase( '/projects/%(project_id)s/groups/%(group_id)s/roles' % {'project_id': self.project_id, 'group_id': group_ref['id']} ) - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': self.role_id, - } + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=self.role_id, + ) self.put(member_url) # Check the user has the role assigned @@ -401,16 +401,16 @@ class AssignmentTestCase( def test_delete_user_before_removing_system_assignments_succeeds(self): system_role = self._create_new_role() user = self._create_user() - path = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': user['id'], - 'role_id': system_role, - } + path = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=user['id'], + role_id=system_role, + ) self.put(path) response = self.get('/role_assignments') number_of_assignments = len(response.json_body['role_assignments']) - path = '/users/%(user_id)s' % {'user_id': user['id']} + path = '/users/{user_id}'.format(user_id=user['id']) self.delete(path) # The user with the system role assignment is a new user and only has @@ -494,16 +494,16 @@ class AssignmentTestCase( def test_delete_group_before_removing_system_assignments_succeeds(self): system_role = self._create_new_role() group = self._create_group() - path = '/system/groups/%(group_id)s/roles/%(role_id)s' % { - 'group_id': group['id'], - 'role_id': system_role, - } + path = '/system/groups/{group_id}/roles/{role_id}'.format( + group_id=group['id'], + role_id=system_role, + ) self.put(path) response = self.get('/role_assignments') number_of_assignments = len(response.json_body['role_assignments']) - path = '/groups/%(group_id)s' % {'group_id': group['id']} + path = '/groups/{group_id}'.format(group_id=group['id']) self.delete(path) # The group with the system role assignment is a new group and only has @@ -520,14 +520,14 @@ class AssignmentTestCase( new_project = unit.new_project_ref(domain_id=self.domain_id) PROVIDERS.resource_api.create_project(new_project['id'], new_project) - collection_url = '/projects/%(project_id)s/users/%(user_id)s/roles' % { - 'project_id': new_project['id'], - 'user_id': self.user['id'], - } - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': self.role_id, - } + collection_url = '/projects/{project_id}/users/{user_id}/roles'.format( + project_id=new_project['id'], + user_id=self.user['id'], + ) + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=self.role_id, + ) # create the user a grant on the new project self.put(member_url) @@ -553,14 +553,14 @@ class AssignmentTestCase( new_domain = unit.new_domain_ref() PROVIDERS.resource_api.create_domain(new_domain['id'], new_domain) - collection_url = '/domains/%(domain_id)s/users/%(user_id)s/roles' % { - 'domain_id': new_domain['id'], - 'user_id': self.user['id'], - } - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': self.role_id, - } + collection_url = '/domains/{domain_id}/users/{user_id}/roles'.format( + domain_id=new_domain['id'], + user_id=self.user['id'], + ) + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=self.role_id, + ) # create the user a grant on the new domain self.put(member_url) @@ -590,10 +590,10 @@ class AssignmentTestCase( '/projects/%(project_id)s/groups/%(group_id)s/roles' % {'project_id': new_project['id'], 'group_id': self.group['id']} ) - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': self.role_id, - } + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=self.role_id, + ) # create the group a grant on the new project self.put(member_url) @@ -619,14 +619,14 @@ class AssignmentTestCase( new_domain = unit.new_domain_ref() PROVIDERS.resource_api.create_domain(new_domain['id'], new_domain) - collection_url = '/domains/%(domain_id)s/groups/%(group_id)s/roles' % { - 'domain_id': new_domain['id'], - 'group_id': self.group['id'], - } - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': self.role_id, - } + collection_url = '/domains/{domain_id}/groups/{group_id}/roles'.format( + domain_id=new_domain['id'], + group_id=self.group['id'], + ) + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=self.role_id, + ) # create the group a grant on the new domain self.put(member_url) @@ -1176,15 +1176,17 @@ class AssignmentTestCase( # create a user and grant the user a role on the system, domain, and # project user = self._create_user() - url = '/system/users/%s/roles/%s' % (user['id'], user_system_role_id) + url = '/system/users/{}/roles/{}'.format( + user['id'], user_system_role_id + ) self.put(url) - url = '/domains/%s/users/%s/roles/%s' % ( + url = '/domains/{}/users/{}/roles/{}'.format( self.domain_id, user['id'], user_domain_role_id, ) self.put(url) - url = '/projects/%s/users/%s/roles/%s' % ( + url = '/projects/{}/users/{}/roles/{}'.format( self.project_id, user['id'], user_project_role_id, @@ -1194,18 +1196,18 @@ class AssignmentTestCase( # create a group and grant the group a role on the system, domain, and # project group = self._create_group() - url = '/system/groups/%s/roles/%s' % ( + url = '/system/groups/{}/roles/{}'.format( group['id'], group_system_role_id, ) self.put(url) - url = '/domains/%s/groups/%s/roles/%s' % ( + url = '/domains/{}/groups/{}/roles/{}'.format( self.domain_id, group['id'], group_domain_role_id, ) self.put(url) - url = '/projects/%s/groups/%s/roles/%s' % ( + url = '/projects/{}/groups/{}/roles/{}'.format( self.project_id, group['id'], group_project_role_id, @@ -1316,7 +1318,7 @@ class RoleAssignmentBaseTestCase( new_parent = subprojects[random.randint(0, breadth - 1)] create_project_hierarchy(new_parent['id'], depth - 1) - super(RoleAssignmentBaseTestCase, self).load_sample_data() + super().load_sample_data() # Create a domain self.domain = unit.new_domain_ref() @@ -1609,9 +1611,9 @@ class RoleAssignmentInheritedTestCase(RoleAssignmentDirectTestCase): def _test_get_role_assignments(self, **filters): """Add inherited_to_project filter to expected entity in tests.""" - super( - RoleAssignmentInheritedTestCase, self - )._test_get_role_assignments(inherited_to_projects=True, **filters) + super()._test_get_role_assignments( + inherited_to_projects=True, **filters + ) class RoleAssignmentEffectiveTestCase(RoleAssignmentInheritedTestCase): @@ -1870,7 +1872,7 @@ class AssignmentInheritanceTestCase( PROVIDERS.role_api.create_role(role['id'], role) # Define URLs - direct_url = '%s/users/%s/roles/%s' % ( + direct_url = '{}/users/{}/roles/{}'.format( target_url, self.user_id, role['id'], @@ -1934,10 +1936,10 @@ class AssignmentInheritanceTestCase( '/OS-INHERIT/domains/%(domain_id)s/users/%(user_id)s/roles' % {'domain_id': self.domain_id, 'user_id': self.user['id']} ) - member_url = '%(collection_url)s/%(role_id)s/inherited_to_projects' % { - 'collection_url': base_collection_url, - 'role_id': role_list[0]['id'], - } + member_url = '{collection_url}/{role_id}/inherited_to_projects'.format( + collection_url=base_collection_url, + role_id=role_list[0]['id'], + ) collection_url = base_collection_url + '/inherited_to_projects' self.put(member_url) @@ -2004,10 +2006,10 @@ class AssignmentInheritanceTestCase( '/OS-INHERIT/domains/%(domain_id)s/users/%(user_id)s/roles' % {'domain_id': domain['id'], 'user_id': user1['id']} ) - member_url = '%(collection_url)s/%(role_id)s/inherited_to_projects' % { - 'collection_url': base_collection_url, - 'role_id': role_list[3]['id'], - } + member_url = '{collection_url}/{role_id}/inherited_to_projects'.format( + collection_url=base_collection_url, + role_id=role_list[3]['id'], + ) collection_url = base_collection_url + '/inherited_to_projects' self.put(member_url) @@ -2216,7 +2218,7 @@ class AssignmentInheritanceTestCase( ) self.assertRoleAssignmentInListResponse(result, assignment_domain) - domain_url = '/domains/%s/users/%s/roles/%s' % ( + domain_url = '/domains/{}/users/{}/roles/{}'.format( domain['id'], user['id'], role['id'], @@ -2345,10 +2347,10 @@ class AssignmentInheritanceTestCase( '/OS-INHERIT/domains/%(domain_id)s/users/%(user_id)s/roles' % {'domain_id': domain['id'], 'user_id': user1['id']} ) - member_url = '%(collection_url)s/%(role_id)s/inherited_to_projects' % { - 'collection_url': base_collection_url, - 'role_id': role_list[3]['id'], - } + member_url = '{collection_url}/{role_id}/inherited_to_projects'.format( + collection_url=base_collection_url, + role_id=role_list[3]['id'], + ) collection_url = base_collection_url + '/inherited_to_projects' self.put(member_url) @@ -2442,10 +2444,10 @@ class AssignmentInheritanceTestCase( '/OS-INHERIT/domains/%(domain_id)s/groups/%(group_id)s/roles' % {'domain_id': domain['id'], 'group_id': group1['id']} ) - member_url = '%(collection_url)s/%(role_id)s/inherited_to_projects' % { - 'collection_url': base_collection_url, - 'role_id': role_list[3]['id'], - } + member_url = '{collection_url}/{role_id}/inherited_to_projects'.format( + collection_url=base_collection_url, + role_id=role_list[3]['id'], + ) collection_url = base_collection_url + '/inherited_to_projects' self.put(member_url) @@ -2547,10 +2549,10 @@ class AssignmentInheritanceTestCase( '/OS-INHERIT/domains/%(domain_id)s/users/%(user_id)s/roles' % {'domain_id': domain['id'], 'user_id': user1['id']} ) - member_url = '%(collection_url)s/%(role_id)s/inherited_to_projects' % { - 'collection_url': base_collection_url, - 'role_id': role_list[3]['id'], - } + member_url = '{collection_url}/{role_id}/inherited_to_projects'.format( + collection_url=base_collection_url, + role_id=role_list[3]['id'], + ) collection_url = base_collection_url + '/inherited_to_projects' self.put(member_url) @@ -2565,10 +2567,10 @@ class AssignmentInheritanceTestCase( '/OS-INHERIT/domains/%(domain_id)s/groups/%(group_id)s/roles' % {'domain_id': domain['id'], 'group_id': group1['id']} ) - member_url = '%(collection_url)s/%(role_id)s/inherited_to_projects' % { - 'collection_url': base_collection_url, - 'role_id': role_list[4]['id'], - } + member_url = '{collection_url}/{role_id}/inherited_to_projects'.format( + collection_url=base_collection_url, + role_id=role_list[4]['id'], + ) collection_url = base_collection_url + '/inherited_to_projects' self.put(member_url) @@ -2955,9 +2957,9 @@ class AssignmentInheritanceTestCase( # Without the subtree, we should get the one assignment on the # root project - collection_url = '/role_assignments?scope.project.id=%(project)s' % { - 'project': root_id - } + collection_url = '/role_assignments?scope.project.id={project}'.format( + project=root_id + ) r = self.get(collection_url) self.assertValidRoleAssignmentListResponse( r, resource_url=collection_url @@ -3160,12 +3162,12 @@ class ImpliedRolesTests( def _create_implied_role(self, prior, implied): self.put( - '/roles/%s/implies/%s' % (prior['id'], implied['id']), + '/roles/{}/implies/{}'.format(prior['id'], implied['id']), expected_status=http.client.CREATED, ) def _delete_implied_role(self, prior, implied): - self.delete('/roles/%s/implies/%s' % (prior['id'], implied['id'])) + self.delete('/roles/{}/implies/{}'.format(prior['id'], implied['id'])) def _setup_prior_two_implied(self): self.prior = self._create_role() @@ -3199,7 +3201,9 @@ class ImpliedRolesTests( def _assert_expected_role_inference_rule_response( self, expected_prior_id, expected_implied_id ): - url = '/roles/%s/implies/%s' % (expected_prior_id, expected_implied_id) + url = '/roles/{}/implies/{}'.format( + expected_prior_id, expected_implied_id + ) response = self.get(url).json self.assertThat( response['links']['self'], matchers.EndsWith('/v3%s' % url) @@ -3237,7 +3241,9 @@ class ImpliedRolesTests( ) self.get( - '/roles/%s/implies/%s' % (self.prior['id'], self.implied2['id']), + '/roles/{}/implies/{}'.format( + self.prior['id'], self.implied2['id'] + ), expected_status=http.client.NOT_FOUND, ) @@ -3300,9 +3306,9 @@ class ImpliedRolesTests( ) def _build_effective_role_assignments_url(self, user): - return '/role_assignments?effective&user.id=%(user_id)s' % { - 'user_id': user['id'] - } + return '/role_assignments?effective&user.id={user_id}'.format( + user_id=user['id'] + ) def _assert_all_roles_in_assignment(self, response, user): # Now use the list role assignments api to check that all three roles @@ -3328,10 +3334,10 @@ class ImpliedRolesTests( ): # An effective role for an implied role will have the prior role # assignment in the links - prior_link = '/prior_roles/%(prior)s/implies/%(implied)s' % { - 'prior': self.role_list[prior_index]['id'], - 'implied': self.role_list[implied_index]['id'], - } + prior_link = '/prior_roles/{prior}/implies/{implied}'.format( + prior=self.role_list[prior_index]['id'], + implied=self.role_list[implied_index]['id'], + ) link = self.build_role_assignment_link( project_id=project['id'], user_id=user['id'], @@ -3526,7 +3532,9 @@ class ImpliedRolesTests( ) self.put( - '/roles/%s/implies/%s' % (global_role['id'], domain_role['id']), + '/roles/{}/implies/{}'.format( + global_role['id'], domain_role['id'] + ), expected_status=http.client.FORBIDDEN, ) @@ -3539,7 +3547,7 @@ class DomainSpecificRoleTests(test_v3.RestfulTestCase, unit.TestCase): r = self.post('/roles', body={'role': ref}) return self.assertValidRoleResponse(r, ref) - super(DomainSpecificRoleTests, self).setUp() + super().setUp() self.domainA = unit.new_domain_ref() PROVIDERS.resource_api.create_domain(self.domainA['id'], self.domainA) self.domainB = unit.new_domain_ref() @@ -3584,7 +3592,7 @@ class DomainSpecificRoleTests(test_v3.RestfulTestCase, unit.TestCase): def test_update_domain_specific_roles(self): self.domainA_role1['name'] = uuid.uuid4().hex self.patch( - '/roles/%(role_id)s' % {'role_id': self.domainA_role1['id']}, + '/roles/{role_id}'.format(role_id=self.domainA_role1['id']), body={'role': self.domainA_role1}, ) r = self.get('/roles/%s' % self.domainA_role1['id']) @@ -3593,7 +3601,7 @@ class DomainSpecificRoleTests(test_v3.RestfulTestCase, unit.TestCase): def test_delete_domain_specific_roles(self): # Check delete only removes that one domain role self.delete( - '/roles/%(role_id)s' % {'role_id': self.domainA_role1['id']} + '/roles/{role_id}'.format(role_id=self.domainA_role1['id']) ) self.get( @@ -3806,7 +3814,7 @@ class ListUserProjectsTestCase(test_v3.RestfulTestCase): auth = self.auths[i] # Try looking for projects with a non-existent domain_id - url = '/users/%s/projects?domain_id=%s' % ( + url = '/users/{}/projects?domain_id={}'.format( user['id'], uuid.uuid4().hex, ) @@ -3814,7 +3822,7 @@ class ListUserProjectsTestCase(test_v3.RestfulTestCase): self.assertEqual(0, len(result.json['projects'])) # Now try a valid one - url = '/users/%s/projects?domain_id=%s' % ( + url = '/users/{}/projects?domain_id={}'.format( user['id'], domain['id'], ) @@ -3837,19 +3845,19 @@ class UserSystemRoleAssignmentTestCase( system_role_id = self._create_new_role() # assign the user a role on the system - member_url = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': system_role_id, - } + member_url = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=system_role_id, + ) self.put(member_url) # validate the role assignment self.head(member_url) # list system roles - collection_url = '/system/users/%(user_id)s/roles' % { - 'user_id': self.user['id'] - } + collection_url = '/system/users/{user_id}/roles'.format( + user_id=self.user['id'] + ) roles = self.get(collection_url).json_body['roles'] self.assertEqual(len(roles), 1) self.assertEqual(roles[0]['id'], system_role_id) @@ -3865,10 +3873,10 @@ class UserSystemRoleAssignmentTestCase( system_role_id = self._create_new_role() # assign the user a role on the system - member_url = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': system_role_id, - } + member_url = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=system_role_id, + ) self.put(member_url) # the response should contain one role assignment for the system role @@ -3881,9 +3889,9 @@ class UserSystemRoleAssignmentTestCase( def test_list_system_roles_for_user_returns_none_without_assignment(self): # list system roles for user - collection_url = '/system/users/%(user_id)s/roles' % { - 'user_id': self.user['id'] - } + collection_url = '/system/users/{user_id}/roles'.format( + user_id=self.user['id'] + ) response = self.get(collection_url) # assert that the user doesn't have any system role assignments, which @@ -3901,10 +3909,10 @@ class UserSystemRoleAssignmentTestCase( system_role_id = self._create_new_role() # assign the user a role on the system - member_url = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': system_role_id, - } + member_url = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=system_role_id, + ) self.put(member_url) # list project role assignments and save the role id of that @@ -3917,9 +3925,9 @@ class UserSystemRoleAssignmentTestCase( project_role_id = response.json_body['roles'][0]['id'] # list system role assignments - collection_url = '/system/users/%(user_id)s/roles' % { - 'user_id': self.user['id'] - } + collection_url = '/system/users/{user_id}/roles'.format( + user_id=self.user['id'] + ) response = self.get(collection_url) # assert the project role assignment is not in the system role @@ -3965,10 +3973,10 @@ class UserSystemRoleAssignmentTestCase( self.put(domain_member_url) # assign the user a role on the system - member_url = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': system_role_id, - } + member_url = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=system_role_id, + ) self.put(member_url) # list domain role assignments @@ -3979,9 +3987,9 @@ class UserSystemRoleAssignmentTestCase( self.assertEqual(len(response.json_body['roles']), 1) # list system role assignments - collection_url = '/system/users/%(user_id)s/roles' % { - 'user_id': self.user['id'] - } + collection_url = '/system/users/{user_id}/roles'.format( + user_id=self.user['id'] + ) response = self.get(collection_url) # assert the domain role assignment is not in the system role @@ -4015,10 +4023,10 @@ class UserSystemRoleAssignmentTestCase( system_role_id = self._create_new_role() # assign the user a role on the system - member_url = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': system_role_id, - } + member_url = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=system_role_id, + ) self.put(member_url) # check the user has the system role assignment @@ -4028,10 +4036,10 @@ class UserSystemRoleAssignmentTestCase( system_role_id = self._create_new_role() # check the user does't have the system role assignment - member_url = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': system_role_id, - } + member_url = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=system_role_id, + ) self.head(member_url, expected_status=http.client.NOT_FOUND) response = self.get( @@ -4045,10 +4053,10 @@ class UserSystemRoleAssignmentTestCase( system_role_id = self._create_new_role() # assign the user a role on the system - member_url = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': system_role_id, - } + member_url = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=system_role_id, + ) self.put(member_url) # ensure the user has the role assignment @@ -4065,9 +4073,9 @@ class UserSystemRoleAssignmentTestCase( self.delete(member_url) # ensure the user doesn't have any system role assignments - collection_url = '/system/users/%(user_id)s/roles' % { - 'user_id': self.user['id'] - } + collection_url = '/system/users/{user_id}/roles'.format( + user_id=self.user['id'] + ) response = self.get(collection_url) self.assertEqual(len(response.json_body['roles']), 0) response = self.get( @@ -4100,10 +4108,10 @@ class UserSystemRoleAssignmentTestCase( system_role_id = self._create_new_role() # assign the user a role on the system - member_url = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': system_role_id, - } + member_url = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=system_role_id, + ) self.put(member_url) # Make sure we only get one role assignment back since the system role @@ -4129,19 +4137,19 @@ class GroupSystemRoleAssignmentTestCase( group = self._create_group() # assign the role to the group globally - member_url = '/system/groups/%(group_id)s/roles/%(role_id)s' % { - 'group_id': group['id'], - 'role_id': system_role_id, - } + member_url = '/system/groups/{group_id}/roles/{role_id}'.format( + group_id=group['id'], + role_id=system_role_id, + ) self.put(member_url) # validate the role assignment self.head(member_url) # list global roles - collection_url = '/system/groups/%(group_id)s/roles' % { - 'group_id': group['id'] - } + collection_url = '/system/groups/{group_id}/roles'.format( + group_id=group['id'] + ) roles = self.get(collection_url).json_body['roles'] self.assertEqual(len(roles), 1) self.assertEqual(roles[0]['id'], system_role_id) @@ -4162,10 +4170,10 @@ class GroupSystemRoleAssignmentTestCase( group_id = uuid.uuid4().hex # assign the role to the group globally - member_url = '/system/groups/%(group_id)s/roles/%(role_id)s' % { - 'group_id': group_id, - 'role_id': system_role_id, - } + member_url = '/system/groups/{group_id}/roles/{role_id}'.format( + group_id=group_id, + role_id=system_role_id, + ) self.put(member_url, expected_status=http.client.NOT_FOUND) def test_list_role_assignments_for_group_returns_all_assignments(self): @@ -4173,10 +4181,10 @@ class GroupSystemRoleAssignmentTestCase( group = self._create_group() # assign the role to the group globally and on a single project - member_url = '/system/groups/%(group_id)s/roles/%(role_id)s' % { - 'group_id': group['id'], - 'role_id': system_role_id, - } + member_url = '/system/groups/{group_id}/roles/{role_id}'.format( + group_id=group['id'], + role_id=system_role_id, + ) self.put(member_url) member_url = ( '/projects/%(project_id)s/groups/%(group_id)s/' 'roles/%(role_id)s' @@ -4198,9 +4206,9 @@ class GroupSystemRoleAssignmentTestCase( group = self._create_group() # list global roles for group - collection_url = '/system/groups/%(group_id)s/roles' % { - 'group_id': group['id'] - } + collection_url = '/system/groups/{group_id}/roles'.format( + group_id=group['id'] + ) response = self.get(collection_url) # assert that the group doesn't have any system role assignments, which @@ -4219,10 +4227,10 @@ class GroupSystemRoleAssignmentTestCase( group = self._create_group() # assign the group a role on the system and a role on a project - member_url = '/system/groups/%(group_id)s/roles/%(role_id)s' % { - 'group_id': group['id'], - 'role_id': system_role_id, - } + member_url = '/system/groups/{group_id}/roles/{role_id}'.format( + group_id=group['id'], + role_id=system_role_id, + ) self.put(member_url) member_url = ( '/projects/%(project_id)s/groups/%(group_id)s/' 'roles/%(role_id)s' @@ -4234,9 +4242,9 @@ class GroupSystemRoleAssignmentTestCase( self.put(member_url) # list system role assignments - collection_url = '/system/groups/%(group_id)s/roles' % { - 'group_id': group['id'] - } + collection_url = '/system/groups/{group_id}/roles'.format( + group_id=group['id'] + ) response = self.get(collection_url) # assert the project role assignment is not in the system role @@ -4268,10 +4276,10 @@ class GroupSystemRoleAssignmentTestCase( self.put(domain_member_url) # assign the group a role on the system - member_url = '/system/groups/%(group_id)s/roles/%(role_id)s' % { - 'group_id': group['id'], - 'role_id': system_role_id, - } + member_url = '/system/groups/{group_id}/roles/{role_id}'.format( + group_id=group['id'], + role_id=system_role_id, + ) self.put(member_url) # list domain role assignments @@ -4282,9 +4290,9 @@ class GroupSystemRoleAssignmentTestCase( self.assertEqual(len(response.json_body['roles']), 1) # list system role assignments - collection_url = '/system/groups/%(group_id)s/roles' % { - 'group_id': group['id'] - } + collection_url = '/system/groups/{group_id}/roles'.format( + group_id=group['id'] + ) response = self.get(collection_url) # assert the domain role assignment is not in the system role @@ -4303,10 +4311,10 @@ class GroupSystemRoleAssignmentTestCase( group = self._create_group() # assign the group a role on the system - member_url = '/system/groups/%(group_id)s/roles/%(role_id)s' % { - 'group_id': group['id'], - 'role_id': system_role_id, - } + member_url = '/system/groups/{group_id}/roles/{role_id}'.format( + group_id=group['id'], + role_id=system_role_id, + ) self.put(member_url) # check the group has the system role assignment @@ -4327,10 +4335,10 @@ class GroupSystemRoleAssignmentTestCase( group = self._create_group() # check the group does't have the system role assignment - member_url = '/system/groups/%(group_id)s/roles/%(role_id)s' % { - 'group_id': group['id'], - 'role_id': system_role_id, - } + member_url = '/system/groups/{group_id}/roles/{role_id}'.format( + group_id=group['id'], + role_id=system_role_id, + ) self.head(member_url, expected_status=http.client.NOT_FOUND) response = self.get( @@ -4344,10 +4352,10 @@ class GroupSystemRoleAssignmentTestCase( group = self._create_group() # assign the group a role on the system - member_url = '/system/groups/%(group_id)s/roles/%(role_id)s' % { - 'group_id': group['id'], - 'role_id': system_role_id, - } + member_url = '/system/groups/{group_id}/roles/{role_id}'.format( + group_id=group['id'], + role_id=system_role_id, + ) self.put(member_url) # ensure the group has the role assignment @@ -4364,9 +4372,9 @@ class GroupSystemRoleAssignmentTestCase( self.delete(member_url) # ensure the group doesn't have any system role assignments - collection_url = '/system/groups/%(group_id)s/roles' % { - 'group_id': group['id'] - } + collection_url = '/system/groups/{group_id}/roles'.format( + group_id=group['id'] + ) response = self.get(collection_url) self.assertEqual(len(response.json_body['roles']), 0) response = self.get( @@ -4380,10 +4388,10 @@ class GroupSystemRoleAssignmentTestCase( group = self._create_group() # assign the group a role on the system - member_url = '/system/groups/%(group_id)s/roles/%(role_id)s' % { - 'group_id': group['id'], - 'role_id': system_role_id, - } + member_url = '/system/groups/{group_id}/roles/{role_id}'.format( + group_id=group['id'], + role_id=system_role_id, + ) self.put(member_url) # assign the group a role on the system diff --git a/keystone/tests/unit/test_v3_auth.py b/keystone/tests/unit/test_v3_auth.py index dc8beb4074..76a1721d00 100644 --- a/keystone/tests/unit/test_v3_auth.py +++ b/keystone/tests/unit/test_v3_auth.py @@ -53,7 +53,7 @@ PROVIDERS = provider_api.ProviderAPIs class TestMFARules(test_v3.RestfulTestCase): def config_overrides(self): - super(TestMFARules, self).config_overrides() + super().config_overrides() self.useFixture( ksfixtures.KeyRepository( @@ -100,7 +100,7 @@ class TestMFARules(test_v3.RestfulTestCase): def auth_plugin_config_override(self, methods=None, **method_classes): methods = ['totp', 'token', 'password'] - super(TestMFARules, self).auth_plugin_config_override(methods) + super().auth_plugin_config_override(methods) def _update_user_with_MFA_rules(self, rule_list, rules_enabled=True): user = self.user.copy() @@ -312,8 +312,8 @@ class TestMFARules(test_v3.RestfulTestCase): {'password'}, set(resp_data.get('receipt').get('methods')) ) self.assertEqual( - set(frozenset(r) for r in rule_list), - set(frozenset(r) for r in resp_data.get('required_auth_methods')), + {frozenset(r) for r in rule_list}, + {frozenset(r) for r in resp_data.get('required_auth_methods')}, ) def test_MFA_requirements_makes_correct_receipt_for_totp(self): @@ -352,8 +352,8 @@ class TestMFARules(test_v3.RestfulTestCase): {'totp'}, set(resp_data.get('receipt').get('methods')) ) self.assertEqual( - set(frozenset(r) for r in rule_list), - set(frozenset(r) for r in resp_data.get('required_auth_methods')), + {frozenset(r) for r in rule_list}, + {frozenset(r) for r in resp_data.get('required_auth_methods')}, ) def test_MFA_requirements_makes_correct_receipt_for_pass_and_totp(self): @@ -393,8 +393,8 @@ class TestMFARules(test_v3.RestfulTestCase): {'password', 'totp'}, set(resp_data.get('receipt').get('methods')) ) self.assertEqual( - set(frozenset(r) for r in rule_list), - set(frozenset(r) for r in resp_data.get('required_auth_methods')), + {frozenset(r) for r in rule_list}, + {frozenset(r) for r in resp_data.get('required_auth_methods')}, ) def test_MFA_requirements_returns_correct_required_auth_methods(self): @@ -439,8 +439,8 @@ class TestMFARules(test_v3.RestfulTestCase): {'password'}, set(resp_data.get('receipt').get('methods')) ) self.assertEqual( - set(frozenset(r) for r in expect_rule_list), - set(frozenset(r) for r in resp_data.get('required_auth_methods')), + {frozenset(r) for r in expect_rule_list}, + {frozenset(r) for r in resp_data.get('required_auth_methods')}, ) def test_MFA_consuming_receipt_with_totp(self): @@ -478,8 +478,8 @@ class TestMFARules(test_v3.RestfulTestCase): {'password'}, set(resp_data.get('receipt').get('methods')) ) self.assertEqual( - set(frozenset(r) for r in rule_list), - set(frozenset(r) for r in resp_data.get('required_auth_methods')), + {frozenset(r) for r in rule_list}, + {frozenset(r) for r in resp_data.get('required_auth_methods')}, ) time = datetime.datetime.utcnow() + datetime.timedelta(seconds=5) @@ -517,7 +517,7 @@ class TestMFARules(test_v3.RestfulTestCase): class TestAuthInfo(common_auth.AuthTestMixin, testcase.TestCase): def setUp(self): - super(TestAuthInfo, self).setUp() + super().setUp() auth.core.load_auth_methods() def test_unsupported_auth_method(self): @@ -581,7 +581,7 @@ class TestAuthInfo(common_auth.AuthTestMixin, testcase.TestCase): ) -class TokenAPITests(object): +class TokenAPITests: # Why is this not just setUp? Because TokenAPITests is not a test class # itself. If TokenAPITests became a subclass of the testcase, it would get # called by the enumerate-tests-in-file code. The way the functions get @@ -703,7 +703,7 @@ class TokenAPITests(object): # make the new project the user's default project body = {'user': {'default_project_id': project['id']}} r = self.patch( - '/users/%(user_id)s' % {'user_id': self.user['id']}, body=body + '/users/{user_id}'.format(user_id=self.user['id']), body=body ) self.assertValidUserResponse(r) @@ -847,7 +847,7 @@ class TokenAPITests(object): # now disable the project domain body = {'domain': {'enabled': False}} r = self.patch( - '/domains/%(domain_id)s' % {'domain_id': domain['id']}, body=body + '/domains/{domain_id}'.format(domain_id=domain['id']), body=body ) self.assertValidDomainResponse(r) @@ -915,10 +915,10 @@ class TokenAPITests(object): ) def test_create_system_token_with_user_id(self): - path = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': self.role_id, - } + path = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=self.role_id, + ) self.put(path=path) auth_request_body = self.build_authentication_request( @@ -931,10 +931,10 @@ class TokenAPITests(object): self.assertValidSystemScopedTokenResponse(response) def test_create_system_token_with_username(self): - path = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': self.role_id, - } + path = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=self.role_id, + ) self.put(path=path) auth_request_body = self.build_authentication_request( @@ -958,10 +958,10 @@ class TokenAPITests(object): ) def test_system_token_is_invalid_after_disabling_user(self): - path = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': self.role_id, - } + path = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=self.role_id, + ) self.put(path=path) auth_request_body = self.build_authentication_request( @@ -980,7 +980,7 @@ class TokenAPITests(object): # apparently it's not possible to disable a group. user_ref = {'user': {'enabled': False}} self.patch( - '/users/%(user_id)s' % {'user_id': self.user['id']}, body=user_ref + '/users/{user_id}'.format(user_id=self.user['id']), body=user_ref ) self.admin_request( @@ -1004,16 +1004,16 @@ class TokenAPITests(object): } group = self.post('/groups', body=ref).json_body['group'] - path = '/system/groups/%(group_id)s/roles/%(role_id)s' % { - 'group_id': group['id'], - 'role_id': self.role_id, - } + path = '/system/groups/{group_id}/roles/{role_id}'.format( + group_id=group['id'], + role_id=self.role_id, + ) self.put(path=path) - path = '/groups/%(group_id)s/users/%(user_id)s' % { - 'group_id': group['id'], - 'user_id': self.user['id'], - } + path = '/groups/{group_id}/users/{user_id}'.format( + group_id=group['id'], + user_id=self.user['id'], + ) self.put(path=path) auth_request_body = self.build_authentication_request( @@ -1027,10 +1027,10 @@ class TokenAPITests(object): self._validate_token(token) def test_revoke_system_token(self): - path = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': self.role_id, - } + path = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=self.role_id, + ) self.put(path=path) auth_request_body = self.build_authentication_request( @@ -1051,10 +1051,10 @@ class TokenAPITests(object): ref = {'role': unit.new_role_ref()} system_role = self.post('/roles', body=ref).json_body['role'] - path = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': system_role['id'], - } + path = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=system_role['id'], + ) self.put(path=path) auth_request_body = self.build_authentication_request( @@ -1069,17 +1069,17 @@ class TokenAPITests(object): token = response.headers.get('X-Subject-Token') self._validate_token(token) - self.delete('/roles/%(role_id)s' % {'role_id': system_role['id']}) + self.delete('/roles/{role_id}'.format(role_id=system_role['id'])) self._validate_token(token, expected_status=http.client.NOT_FOUND) def test_rescoping_a_system_token_for_a_project_token_fails(self): ref = {'role': unit.new_role_ref()} system_role = self.post('/roles', body=ref).json_body['role'] - path = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': system_role['id'], - } + path = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=system_role['id'], + ) self.put(path=path) auth_request_body = self.build_authentication_request( @@ -1103,10 +1103,10 @@ class TokenAPITests(object): ref = {'role': unit.new_role_ref()} system_role = self.post('/roles', body=ref).json_body['role'] - path = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': system_role['id'], - } + path = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=system_role['id'], + ) self.put(path=path) auth_request_body = self.build_authentication_request( @@ -1128,7 +1128,7 @@ class TokenAPITests(object): def test_create_domain_token_scoped_with_domain_id_and_user_id(self): # grant the user a role on the domain - path = '/domains/%s/users/%s/roles/%s' % ( + path = '/domains/{}/users/{}/roles/{}'.format( self.domain['id'], self.user['id'], self.role['id'], @@ -1145,7 +1145,7 @@ class TokenAPITests(object): def test_create_domain_token_scoped_with_domain_id_and_username(self): # grant the user a role on the domain - path = '/domains/%s/users/%s/roles/%s' % ( + path = '/domains/{}/users/{}/roles/{}'.format( self.domain['id'], self.user['id'], self.role['id'], @@ -1163,7 +1163,7 @@ class TokenAPITests(object): def test_create_domain_token_scoped_with_domain_id(self): # grant the user a role on the domain - path = '/domains/%s/users/%s/roles/%s' % ( + path = '/domains/{}/users/{}/roles/{}'.format( self.domain['id'], self.user['id'], self.role['id'], @@ -1181,7 +1181,7 @@ class TokenAPITests(object): def test_create_domain_token_scoped_with_domain_name(self): # grant the user a role on the domain - path = '/domains/%s/users/%s/roles/%s' % ( + path = '/domains/{}/users/{}/roles/{}'.format( self.domain['id'], self.user['id'], self.role['id'], @@ -1198,7 +1198,7 @@ class TokenAPITests(object): def test_create_domain_token_scoped_with_domain_name_and_username(self): # grant the user a role on the domain - path = '/domains/%s/users/%s/roles/%s' % ( + path = '/domains/{}/users/{}/roles/{}'.format( self.domain['id'], self.user['id'], self.role['id'], @@ -1216,7 +1216,7 @@ class TokenAPITests(object): def test_create_domain_token_with_only_domain_name_and_username(self): # grant the user a role on the domain - path = '/domains/%s/users/%s/roles/%s' % ( + path = '/domains/{}/users/{}/roles/{}'.format( self.domain['id'], self.user['id'], self.role['id'], @@ -1240,7 +1240,7 @@ class TokenAPITests(object): PROVIDERS.identity_api.add_user_to_group(self.user['id'], group['id']) # grant the domain role to group - path = '/domains/%s/groups/%s/roles/%s' % ( + path = '/domains/{}/groups/{}/roles/{}'.format( self.domain['id'], group['id'], self.role['id'], @@ -1960,7 +1960,7 @@ class TokenAPITests(object): disable_body = {'domain': {'enabled': False}} self.patch( - '/domains/%(domain_id)s' % {'domain_id': new_domain_ref['id']}, + '/domains/{domain_id}'.format(domain_id=new_domain_ref['id']), body=disable_body, ) @@ -2182,12 +2182,12 @@ class TokenAPITests(object): def _create_implied_role(self, prior_id): implied = self._create_role() - url = '/roles/%s/implies/%s' % (prior_id, implied['id']) + url = '/roles/{}/implies/{}'.format(prior_id, implied['id']) self.put(url, expected_status=http.client.CREATED) return implied def _delete_implied_role(self, prior_role_id, implied_role_id): - url = '/roles/%s/implies/%s' % (prior_role_id, implied_role_id) + url = f'/roles/{prior_role_id}/implies/{implied_role_id}' self.delete(url) def _get_scoped_token_roles(self, is_domain=False): @@ -2369,7 +2369,7 @@ class TokenAPITests(object): self.assertEqual(2, len(token_roles)) unrelated = self._create_role() - url = '/roles/%s/implies/%s' % (unrelated['id'], implied['id']) + url = '/roles/{}/implies/{}'.format(unrelated['id'], implied['id']) self.put(url, expected_status=http.client.CREATED) token_roles = self._get_scoped_token_roles() @@ -2407,7 +2407,7 @@ class TokenAPITests(object): ) # give the new user a role on a project - path = '/projects/%s/users/%s/roles/%s' % ( + path = '/projects/{}/users/{}/roles/{}'.format( self.project['id'], new_user['id'], self.role['id'], @@ -2430,7 +2430,7 @@ class TokenAPITests(object): self.assertValidProjectScopedTokenResponse(r) # remove the roles from the user for the given scope - path = '/projects/%s/users/%s/roles/%s' % ( + path = '/projects/{}/users/{}/roles/{}'.format( self.project['id'], new_user['id'], self.role['id'], @@ -3028,7 +3028,7 @@ class TokenAPITests(object): CONF.token.caching = caching -class TokenDataTests(object): +class TokenDataTests: """Test the data in specific token types.""" def test_unscoped_token_format(self): @@ -3073,7 +3073,7 @@ class TokenDataTests(object): r = self.get('/auth/tokens', headers=self.headers) # populate the response result with some extra data - r.result['token'][u'extra'] = str(uuid.uuid4().hex) + r.result['token']['extra'] = str(uuid.uuid4().hex) self.assertRaises( exception.SchemaValidationError, self.assertValidUnscopedTokenResponse, @@ -3099,7 +3099,7 @@ class TokenDataTests(object): r = self.get('/auth/tokens', headers=self.headers) # populate the response result with some extra data - r.result['token'][u'extra'] = str(uuid.uuid4().hex) + r.result['token']['extra'] = str(uuid.uuid4().hex) self.assertRaises( exception.SchemaValidationError, self.assertValidDomainScopedTokenResponse, @@ -3119,7 +3119,7 @@ class TokenDataTests(object): resp = self.get('/auth/tokens', headers=self.headers) # populate the response result with some extra data - resp.result['token'][u'extra'] = str(uuid.uuid4().hex) + resp.result['token']['extra'] = str(uuid.uuid4().hex) self.assertRaises( exception.SchemaValidationError, self.assertValidProjectScopedTokenResponse, @@ -3129,7 +3129,7 @@ class TokenDataTests(object): class AllowRescopeScopedTokenDisabledTests(test_v3.RestfulTestCase): def config_overrides(self): - super(AllowRescopeScopedTokenDisabledTests, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='token', allow_rescope_scoped_token=False ) @@ -3174,7 +3174,7 @@ class TestFernetTokenAPIs( test_v3.RestfulTestCase, TokenAPITests, TokenDataTests ): def config_overrides(self): - super(TestFernetTokenAPIs, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='token', provider='fernet', cache_on_issue=True ) @@ -3187,11 +3187,11 @@ class TestFernetTokenAPIs( ) def setUp(self): - super(TestFernetTokenAPIs, self).setUp() + super().setUp() self.doSetUp() def _make_auth_request(self, auth_data): - token = super(TestFernetTokenAPIs, self)._make_auth_request(auth_data) + token = super()._make_auth_request(auth_data) self.assertLess(len(token), 255) return token @@ -3248,18 +3248,18 @@ class TestFernetTokenAPIs( class TestJWSTokenAPIs(test_v3.RestfulTestCase, TokenAPITests, TokenDataTests): def config_overrides(self): - super(TestJWSTokenAPIs, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='token', provider='jws', cache_on_issue=True ) self.useFixture(ksfixtures.JWSKeyRepository(self.config_fixture)) def setUp(self): - super(TestJWSTokenAPIs, self).setUp() + super().setUp() self.doSetUp() def _make_auth_request(self, auth_data): - token = super(TestJWSTokenAPIs, self)._make_auth_request(auth_data) + token = super()._make_auth_request(auth_data) self.assertLess(len(token), 350) return token @@ -3318,7 +3318,7 @@ class TestTokenRevokeById(test_v3.RestfulTestCase): """Test token revocation on the v3 Identity API.""" def config_overrides(self): - super(TestTokenRevokeById, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='token', provider='fernet', revoke_by_id=False ) @@ -3353,7 +3353,7 @@ class TestTokenRevokeById(test_v3.RestfulTestCase): - User1 has role2 assigned to domainA """ - super(TestTokenRevokeById, self).setUp() + super().setUp() # Start by creating a couple of domains and projects self.domainA = unit.new_domain_ref() @@ -3736,7 +3736,7 @@ class TestTokenRevokeById(test_v3.RestfulTestCase): # disable the project, which should invalidate the token self.patch( - '/projects/%(project_id)s' % {'project_id': self.projectA['id']}, + '/projects/{project_id}'.format(project_id=self.projectA['id']), body={'project': {'enabled': False}}, ) @@ -3773,7 +3773,7 @@ class TestTokenRevokeById(test_v3.RestfulTestCase): # delete the project, which should invalidate the token self.delete( - '/projects/%(project_id)s' % {'project_id': self.projectA['id']} + '/projects/{project_id}'.format(project_id=self.projectA['id']) ) # user should no longer have access to the project @@ -4077,7 +4077,7 @@ class TestTokenRevokeById(test_v3.RestfulTestCase): # delete the project, which should remove the roles self.delete( - '/projects/%(project_id)s' % {'project_id': self.projectA['id']} + '/projects/{project_id}'.format(project_id=self.projectA['id']) ) # Make sure that we get a 404 Not Found when heading that role. @@ -4158,7 +4158,7 @@ class TestTokenRevokeApi(TestTokenRevokeById): """Test token revocation on the v3 Identity API.""" def config_overrides(self): - super(TestTokenRevokeApi, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='token', provider='fernet', revoke_by_id=False ) @@ -4238,7 +4238,7 @@ class TestTokenRevokeApi(TestTokenRevokeById): events = self.get('/OS-REVOKE/events').json_body['events'] self.assertEqual([], events) self.delete( - '/projects/%(project_id)s' % {'project_id': self.projectA['id']} + '/projects/{project_id}'.format(project_id=self.projectA['id']) ) events_response = self.get('/OS-REVOKE/events').json_body @@ -4269,7 +4269,7 @@ class TestTokenRevokeApi(TestTokenRevokeById): '"%(expected)s" Events: "%(events)s"' % { 'expected': ','.join( - ["'%s=%s'" % (k, v) for k, v in kwargs.items()] + [f"'{k}={v}'" for k, v in kwargs.items()] ), 'events': events, }, @@ -4348,12 +4348,12 @@ class TestTokenRevokeApi(TestTokenRevokeById): class TestAuthExternalDisabled(test_v3.RestfulTestCase): def config_overrides(self): - super(TestAuthExternalDisabled, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='auth', methods=['password', 'token']) def test_remote_user_disabled(self): app = self.loadapp() - remote_user = '%s@%s' % (self.user['name'], self.domain['name']) + remote_user = '{}@{}'.format(self.user['name'], self.domain['name']) with app.test_client() as c: c.environ_base.update( self.build_external_auth_environ(remote_user) @@ -4482,13 +4482,13 @@ class TrustAPIBehavior(test_v3.RestfulTestCase): """ def config_overrides(self): - super(TrustAPIBehavior, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='trust', allow_redelegation=True, max_redelegation_count=10 ) def setUp(self): - super(TrustAPIBehavior, self).setUp() + super().setUp() # Create a trustee to delegate stuff to self.trustee_user = unit.create_user( PROVIDERS.identity_api, domain_id=self.domain_id @@ -4633,8 +4633,8 @@ class TrustAPIBehavior(test_v3.RestfulTestCase): r = self.post('/OS-TRUST/trusts', body={'trust': ref}) trust = self.assertValidTrustResponse(r) # Trust created with exact set of roles (checked by role id) - role_id_set = set(r['id'] for r in ref['roles']) - trust_role_id_set = set(r['id'] for r in trust['roles']) + role_id_set = {r['id'] for r in ref['roles']} + trust_role_id_set = {r['id'] for r in trust['roles']} self.assertEqual(role_id_set, trust_role_id_set) trust_token = self._get_trust_token(trust) @@ -4653,8 +4653,8 @@ class TrustAPIBehavior(test_v3.RestfulTestCase): trust2 = self.assertValidTrustResponse(r) # First trust contains roles superset # Second trust contains roles subset - role_id_set1 = set(r['id'] for r in trust['roles']) - role_id_set2 = set(r['id'] for r in trust2['roles']) + role_id_set1 = {r['id'] for r in trust['roles']} + role_id_set2 = {r['id'] for r in trust2['roles']} self.assertThat(role_id_set1, matchers.GreaterThan(role_id_set2)) def test_trust_with_implied_roles(self): @@ -4888,7 +4888,7 @@ class TrustAPIBehavior(test_v3.RestfulTestCase): # make sure the trust exists trust = self.assertValidTrustResponse(r, ref) r = self.get( - '/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust['id']} + '/OS-TRUST/trusts/{trust_id}'.format(trust_id=trust['id']) ) # get a token for the trustee auth_data = self.build_authentication_request( @@ -4934,7 +4934,7 @@ class TrustAPIBehavior(test_v3.RestfulTestCase): trust = self._initialize_test_consume_trust(2) # check decremented value r = self.get( - '/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust['id']} + '/OS-TRUST/trusts/{trust_id}'.format(trust_id=trust['id']) ) trust = r.result.get('trust') self.assertIsNotNone(trust) @@ -4946,7 +4946,7 @@ class TrustAPIBehavior(test_v3.RestfulTestCase): trust = self._initialize_test_consume_trust(1) # No more uses, the trust is made unavailable self.get( - '/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust['id']}, + '/OS-TRUST/trusts/{trust_id}'.format(trust_id=trust['id']), expected_status=http.client.NOT_FOUND, ) # this time we can't get a trust token @@ -4973,7 +4973,7 @@ class TrustAPIBehavior(test_v3.RestfulTestCase): trust = self.assertValidTrustResponse(r, ref) r = self.get( - '/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust['id']} + '/OS-TRUST/trusts/{trust_id}'.format(trust_id=trust['id']) ) auth_data = self.build_authentication_request( user_id=self.trustee_user['id'], @@ -4986,7 +4986,7 @@ class TrustAPIBehavior(test_v3.RestfulTestCase): ) r = self.v3_create_token(auth_data) r = self.get( - '/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust['id']} + '/OS-TRUST/trusts/{trust_id}'.format(trust_id=trust['id']) ) trust = r.result.get('trust') self.assertIsNone(trust['remaining_uses']) @@ -5180,7 +5180,7 @@ class TrustAPIBehavior(test_v3.RestfulTestCase): r = self.v3_create_token(auth_data) self.assertValidProjectScopedTokenResponse(r, self.trustee_user) trust_token = r.headers['X-Subject-Token'] - self.delete('/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust_id}) + self.delete(f'/OS-TRUST/trusts/{trust_id}') headers = {'X-Subject-Token': trust_token} self.head( '/auth/tokens', @@ -5269,9 +5269,7 @@ class TrustAPIBehavior(test_v3.RestfulTestCase): trust = self.assertValidTrustResponse(r, ref) - self.delete( - '/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust['id']} - ) + self.delete('/OS-TRUST/trusts/{trust_id}'.format(trust_id=trust['id'])) auth_data = self.build_authentication_request( user_id=self.trustee_user['id'], @@ -5331,7 +5329,7 @@ class TrustAPIBehavior(test_v3.RestfulTestCase): trust_token = self._get_trust_token(trust) resp = self.get( - '/OS-TRUST/trusts/%(trust_id)s/roles' % {'trust_id': trust['id']}, + '/OS-TRUST/trusts/{trust_id}/roles'.format(trust_id=trust['id']), token=trust_token, ) self.assertValidRoleListResponse(resp, self.role) @@ -5381,13 +5379,13 @@ class TrustAPIBehavior(test_v3.RestfulTestCase): class TestTrustChain(test_v3.RestfulTestCase): def config_overrides(self): - super(TestTrustChain, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='trust', allow_redelegation=True, max_redelegation_count=10 ) def setUp(self): - super(TestTrustChain, self).setUp() + super().setUp() """Create a trust chain using redelegation. A trust chain is a series of trusts that are redelegated. For example, @@ -5597,7 +5595,7 @@ class TestTrustChain(test_v3.RestfulTestCase): class TestAuthContext(unit.TestCase): def setUp(self): - super(TestAuthContext, self).setUp() + super().setUp() self.auth_context = auth.core.AuthContext() def test_pick_lowest_expires_at(self): @@ -5779,11 +5777,11 @@ class TestAuthSpecificData(test_v3.RestfulTestCase): r = self.post('/domains', body={'domain': ref}) authorized_domain_id = r.json['domain']['id'] - path = '/domains/%(domain_id)s/users/%(user_id)s/roles/%(role_id)s' % { - 'domain_id': authorized_domain_id, - 'user_id': self.user_id, - 'role_id': self.role_id, - } + path = '/domains/{domain_id}/users/{user_id}/roles/{role_id}'.format( + domain_id=authorized_domain_id, + user_id=self.user_id, + role_id=self.role_id, + ) self.put(path, expected_status=http.client.NO_CONTENT) r = self.get('/auth/domains', expected_status=http.client.OK) @@ -5818,10 +5816,10 @@ class TestAuthSpecificData(test_v3.RestfulTestCase): self.head('/auth/domains', expected_status=http.client.OK) def test_get_system_roles_with_unscoped_token(self): - path = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': self.role_id, - } + path = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=self.role_id, + ) self.put(path=path) unscoped_request = self.build_authentication_request( @@ -5873,10 +5871,10 @@ class TestAuthSpecificData(test_v3.RestfulTestCase): ) def test_get_system_roles_with_project_scoped_token(self): - path = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': self.role_id, - } + path = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=self.role_id, + ) self.put(path=path) self.put( @@ -5901,10 +5899,10 @@ class TestAuthSpecificData(test_v3.RestfulTestCase): ) def test_get_system_roles_with_domain_scoped_token(self): - path = '/system/users/%(user_id)s/roles/%(role_id)s' % { - 'user_id': self.user['id'], - 'role_id': self.role_id, - } + path = '/system/users/{user_id}/roles/{role_id}'.format( + user_id=self.user['id'], + role_id=self.role_id, + ) self.put(path=path) project_scoped_request = self.build_authentication_request( @@ -5926,7 +5924,7 @@ class TestAuthSpecificData(test_v3.RestfulTestCase): class TestTrustAuthFernetTokenProvider(TrustAPIBehavior, TestTrustChain): def config_overrides(self): - super(TestTrustAuthFernetTokenProvider, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='token', provider='fernet', revoke_by_id=False ) @@ -5943,7 +5941,7 @@ class TestTrustAuthFernetTokenProvider(TrustAPIBehavior, TestTrustChain): class TestAuthTOTP(test_v3.RestfulTestCase): def setUp(self): - super(TestAuthTOTP, self).setUp() + super().setUp() self.useFixture( ksfixtures.KeyRepository( self.config_fixture, @@ -5966,7 +5964,7 @@ class TestAuthTOTP(test_v3.RestfulTestCase): def auth_plugin_config_override(self): methods = ['totp', 'token', 'password'] - super(TestAuthTOTP, self).auth_plugin_config_override(methods) + super().auth_plugin_config_override(methods) def _make_credentials( self, cred_type, count=1, user_id=None, project_id=None, blob=None @@ -6243,7 +6241,7 @@ class TestFetchRevocationList(test_v3.RestfulTestCase): """Test fetch token revocation list on the v3 Identity API.""" def config_overrides(self): - super(TestFetchRevocationList, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='token', revoke_by_id=True) def test_get_ids_no_tokens_returns_forbidden(self): @@ -6268,11 +6266,11 @@ class TestFetchRevocationList(test_v3.RestfulTestCase): class ApplicationCredentialAuth(test_v3.RestfulTestCase): def setUp(self): - super(ApplicationCredentialAuth, self).setUp() + super().setUp() self.app_cred_api = PROVIDERS.application_credential_api def config_overrides(self): - super(ApplicationCredentialAuth, self).config_overrides() + super().config_overrides() self.auth_plugin_config_override( methods=['application_credential', 'password', 'token'] ) diff --git a/keystone/tests/unit/test_v3_catalog.py b/keystone/tests/unit/test_v3_catalog.py index 076b2ad5b5..38b79bf625 100644 --- a/keystone/tests/unit/test_v3_catalog.py +++ b/keystone/tests/unit/test_v3_catalog.py @@ -84,7 +84,7 @@ class CatalogTestCase(test_v3.RestfulTestCase): self.assertValidRegionResponse(r, ref) # we should be able to get the region, having defined the ID ourselves - r = self.get('/regions/%(region_id)s' % {'region_id': ref['id']}) + r = self.get('/regions/{region_id}'.format(region_id=ref['id'])) self.assertValidRegionResponse(r, ref) def test_create_region_with_empty_id(self): @@ -194,7 +194,7 @@ class CatalogTestCase(test_v3.RestfulTestCase): def test_get_head_region(self): """Call ``GET & HEAD /regions/{region_id}``.""" - resource_url = '/regions/%(region_id)s' % {'region_id': self.region_id} + resource_url = f'/regions/{self.region_id}' r = self.get(resource_url) self.assertValidRegionResponse(r, self.region) self.head(resource_url, expected_status=http.client.OK) @@ -204,7 +204,7 @@ class CatalogTestCase(test_v3.RestfulTestCase): region = unit.new_region_ref() del region['id'] r = self.patch( - '/regions/%(region_id)s' % {'region_id': self.region_id}, + f'/regions/{self.region_id}', body={'region': region}, ) self.assertValidRegionResponse(r, region) @@ -233,7 +233,7 @@ class CatalogTestCase(test_v3.RestfulTestCase): region = unit.new_region_ref(description=None) del region['id'] r = self.patch( - '/regions/%(region_id)s' % {'region_id': self.region_id}, + f'/regions/{self.region_id}', body={'region': region}, ) @@ -248,7 +248,7 @@ class CatalogTestCase(test_v3.RestfulTestCase): r = self.post('/regions', body={'region': ref}) self.assertValidRegionResponse(r, ref) - self.delete('/regions/%(region_id)s' % {'region_id': ref['id']}) + self.delete('/regions/{region_id}'.format(region_id=ref['id'])) # service crud tests @@ -371,9 +371,9 @@ class CatalogTestCase(test_v3.RestfulTestCase): def test_get_head_service(self): """Call ``GET & HEAD /services/{service_id}``.""" - resource_url = '/services/%(service_id)s' % { - 'service_id': self.service_id - } + resource_url = '/services/{service_id}'.format( + service_id=self.service_id + ) r = self.get(resource_url) self.assertValidServiceResponse(r, self.service) self.head(resource_url, expected_status=http.client.OK) @@ -383,16 +383,14 @@ class CatalogTestCase(test_v3.RestfulTestCase): service = unit.new_service_ref() del service['id'] r = self.patch( - '/services/%(service_id)s' % {'service_id': self.service_id}, + f'/services/{self.service_id}', body={'service': service}, ) self.assertValidServiceResponse(r, service) def test_delete_service(self): """Call ``DELETE /services/{service_id}``.""" - self.delete( - '/services/%(service_id)s' % {'service_id': self.service_id} - ) + self.delete(f'/services/{self.service_id}') # endpoint crud tests @@ -629,7 +627,7 @@ class CatalogTestCase(test_v3.RestfulTestCase): ) self.post('/endpoints', body={'endpoint': ref}) # Make sure the region is created - self.get('/regions/%(region_id)s' % {'region_id': ref["region"]}) + self.get('/regions/{region_id}'.format(region_id=ref["region"])) def test_create_endpoint_with_no_region(self): """EndpointV3 allows to creates the endpoint without region.""" @@ -648,9 +646,9 @@ class CatalogTestCase(test_v3.RestfulTestCase): def test_get_head_endpoint(self): """Call ``GET & HEAD /endpoints/{endpoint_id}``.""" - resource_url = '/endpoints/%(endpoint_id)s' % { - 'endpoint_id': self.endpoint_id - } + resource_url = '/endpoints/{endpoint_id}'.format( + endpoint_id=self.endpoint_id + ) r = self.get(resource_url) self.assertValidEndpointResponse(r, self.endpoint) self.head(resource_url, expected_status=http.client.OK) @@ -664,7 +662,7 @@ class CatalogTestCase(test_v3.RestfulTestCase): ) del ref['id'] r = self.patch( - '/endpoints/%(endpoint_id)s' % {'endpoint_id': self.endpoint_id}, + f'/endpoints/{self.endpoint_id}', body={'endpoint': ref}, ) ref['enabled'] = True @@ -673,7 +671,7 @@ class CatalogTestCase(test_v3.RestfulTestCase): def test_update_endpoint_enabled_true(self): """Call ``PATCH /endpoints/{endpoint_id}`` with enabled: True.""" r = self.patch( - '/endpoints/%(endpoint_id)s' % {'endpoint_id': self.endpoint_id}, + f'/endpoints/{self.endpoint_id}', body={'endpoint': {'enabled': True}}, ) self.assertValidEndpointResponse(r, self.endpoint) @@ -681,7 +679,7 @@ class CatalogTestCase(test_v3.RestfulTestCase): def test_update_endpoint_enabled_false(self): """Call ``PATCH /endpoints/{endpoint_id}`` with enabled: False.""" r = self.patch( - '/endpoints/%(endpoint_id)s' % {'endpoint_id': self.endpoint_id}, + f'/endpoints/{self.endpoint_id}', body={'endpoint': {'enabled': False}}, ) exp_endpoint = copy.copy(self.endpoint) @@ -691,7 +689,7 @@ class CatalogTestCase(test_v3.RestfulTestCase): def test_update_endpoint_enabled_str_true(self): """Call ``PATCH /endpoints/{endpoint_id}`` with enabled: 'True'.""" self.patch( - '/endpoints/%(endpoint_id)s' % {'endpoint_id': self.endpoint_id}, + f'/endpoints/{self.endpoint_id}', body={'endpoint': {'enabled': 'True'}}, expected_status=http.client.BAD_REQUEST, ) @@ -699,7 +697,7 @@ class CatalogTestCase(test_v3.RestfulTestCase): def test_update_endpoint_enabled_str_false(self): """Call ``PATCH /endpoints/{endpoint_id}`` with enabled: 'False'.""" self.patch( - '/endpoints/%(endpoint_id)s' % {'endpoint_id': self.endpoint_id}, + f'/endpoints/{self.endpoint_id}', body={'endpoint': {'enabled': 'False'}}, expected_status=http.client.BAD_REQUEST, ) @@ -707,16 +705,14 @@ class CatalogTestCase(test_v3.RestfulTestCase): def test_update_endpoint_enabled_str_random(self): """Call ``PATCH /endpoints/{endpoint_id}`` with enabled: 'kitties'.""" self.patch( - '/endpoints/%(endpoint_id)s' % {'endpoint_id': self.endpoint_id}, + f'/endpoints/{self.endpoint_id}', body={'endpoint': {'enabled': 'kitties'}}, expected_status=http.client.BAD_REQUEST, ) def test_delete_endpoint(self): """Call ``DELETE /endpoints/{endpoint_id}``.""" - self.delete( - '/endpoints/%(endpoint_id)s' % {'endpoint_id': self.endpoint_id} - ) + self.delete(f'/endpoints/{self.endpoint_id}') def test_deleting_endpoint_with_space_in_url(self): # add a space to all urls (intentional "i d" to test bug) @@ -863,7 +859,7 @@ class TestCatalogAPISQL(unit.TestCase): """Test for the catalog Manager against the SQL backend.""" def setUp(self): - super(TestCatalogAPISQL, self).setUp() + super().setUp() self.useFixture(database.Database()) self.load_backends() @@ -886,7 +882,7 @@ class TestCatalogAPISQL(unit.TestCase): return endpoint def config_overrides(self): - super(TestCatalogAPISQL, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='catalog', driver='sql') def test_get_catalog_ignores_endpoints_with_invalid_urls(self): @@ -977,7 +973,7 @@ class TestCatalogAPISQLRegions(unit.TestCase): """Test for the catalog Manager against the SQL backend.""" def setUp(self): - super(TestCatalogAPISQLRegions, self).setUp() + super().setUp() self.useFixture(database.Database()) self.load_backends() PROVIDERS.resource_api.create_domain( @@ -985,7 +981,7 @@ class TestCatalogAPISQLRegions(unit.TestCase): ) def config_overrides(self): - super(TestCatalogAPISQLRegions, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='catalog', driver='sql') def test_get_catalog_returns_proper_endpoints_with_no_region(self): @@ -1050,7 +1046,7 @@ class TestCatalogAPITemplatedProject(test_v3.RestfulTestCase): """ def config_overrides(self): - super(TestCatalogAPITemplatedProject, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='catalog', driver='templated') def load_fixtures(self, fixtures): @@ -1070,6 +1066,4 @@ class TestCatalogAPITemplatedProject(test_v3.RestfulTestCase): mechanism, but since we do not allow deletion of endpoints with the templated catalog, there is no testing to do for that action. """ - self.delete( - '/projects/%(project_id)s' % {'project_id': self.project_id} - ) + self.delete(f'/projects/{self.project_id}') diff --git a/keystone/tests/unit/test_v3_credential.py b/keystone/tests/unit/test_v3_credential.py index 875bc907e3..dad2d1040e 100644 --- a/keystone/tests/unit/test_v3_credential.py +++ b/keystone/tests/unit/test_v3_credential.py @@ -41,7 +41,7 @@ CRED_TYPE_EC2 = ec2tokens.CRED_TYPE_EC2 class CredentialBaseTestCase(test_v3.RestfulTestCase): def setUp(self): - super(CredentialBaseTestCase, self).setUp() + super().setUp() self.useFixture( ksfixtures.KeyRepository( self.config_fixture, @@ -106,7 +106,7 @@ class CredentialTestCase(CredentialBaseTestCase): def setUp(self): - super(CredentialTestCase, self).setUp() + super().setUp() self.credential = unit.new_credential_ref( user_id=self.user['id'], project_id=self.project_id @@ -471,7 +471,7 @@ class CredentialTestCase(CredentialBaseTestCase): 'sqlalchemy.orm.query.Query.delete', autospec=True ) - class FakeDeadlock(object): + class FakeDeadlock: def __init__(self, mock_patcher): self.deadlock_count = 2 self.mock_patcher = mock_patcher @@ -525,9 +525,7 @@ class CredentialTestCase(CredentialBaseTestCase): """Ensure non-JSON blob data is correctly converted.""" expected_blob, credential_id = self._create_dict_blob_credential() - r = self.get( - '/credentials/%(credential_id)s' % {'credential_id': credential_id} - ) + r = self.get(f'/credentials/{credential_id}') # use json.loads to transform the blobs back into Python dictionaries # to avoid problems with the keys being in different orders. @@ -617,7 +615,7 @@ class TestCredentialTrustScoped(CredentialBaseTestCase): """Test credential with trust scoped token.""" def setUp(self): - super(TestCredentialTrustScoped, self).setUp() + super().setUp() self.trustee_user = unit.new_user_ref(domain_id=self.domain_id) password = self.trustee_user['password'] @@ -635,7 +633,7 @@ class TestCredentialTrustScoped(CredentialBaseTestCase): ) def config_overrides(self): - super(TestCredentialTrustScoped, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='trust') def test_trust_scoped_ec2_credential(self): @@ -718,7 +716,7 @@ class TestCredentialAppCreds(CredentialBaseTestCase): """Test credential with application credential token.""" def setUp(self): - super(TestCredentialAppCreds, self).setUp() + super().setUp() self.useFixture( ksfixtures.KeyRepository( self.config_fixture, @@ -799,7 +797,7 @@ class TestCredentialAccessToken(CredentialBaseTestCase): """Test credential with access token.""" def setUp(self): - super(TestCredentialAccessToken, self).setUp() + super().setUp() self.useFixture( ksfixtures.KeyRepository( self.config_fixture, diff --git a/keystone/tests/unit/test_v3_domain_config.py b/keystone/tests/unit/test_v3_domain_config.py index 8ac9c2b613..8eeb412f80 100644 --- a/keystone/tests/unit/test_v3_domain_config.py +++ b/keystone/tests/unit/test_v3_domain_config.py @@ -30,7 +30,7 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): """Test domain config support.""" def setUp(self): - super(DomainConfigTestCase, self).setUp() + super().setUp() self.domain = unit.new_domain_ref() PROVIDERS.resource_api.create_domain(self.domain['id'], self.domain) @@ -44,9 +44,7 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): def test_create_config(self): """Call ``PUT /domains/{domain_id}/config``.""" - url = '/domains/%(domain_id)s/config' % { - 'domain_id': self.domain['id'] - } + url = '/domains/{domain_id}/config'.format(domain_id=self.domain['id']) r = self.put( url, body={'config': self.config}, @@ -64,9 +62,7 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): not found. """ invalid_domain_id = uuid.uuid4().hex - url = '/domains/%(domain_id)s/config' % { - 'domain_id': invalid_domain_id - } + url = f'/domains/{invalid_domain_id}/config' self.put( url, body={'config': self.config}, @@ -76,12 +72,12 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): def test_create_config_twice(self): """Check multiple creates don't throw error.""" self.put( - '/domains/%(domain_id)s/config' % {'domain_id': self.domain['id']}, + '/domains/{domain_id}/config'.format(domain_id=self.domain['id']), body={'config': self.config}, expected_status=http.client.CREATED, ) self.put( - '/domains/%(domain_id)s/config' % {'domain_id': self.domain['id']}, + '/domains/{domain_id}/config'.format(domain_id=self.domain['id']), body={'config': self.config}, expected_status=http.client.OK, ) @@ -92,10 +88,10 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): self.domain['id'], self.config ) self.delete( - '/domains/%(domain_id)s/config' % {'domain_id': self.domain['id']} + '/domains/{domain_id}/config'.format(domain_id=self.domain['id']) ) self.get( - '/domains/%(domain_id)s/config' % {'domain_id': self.domain['id']}, + '/domains/{domain_id}/config'.format(domain_id=self.domain['id']), expected_status=exception.DomainConfigNotFound.code, ) @@ -111,7 +107,7 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): ) invalid_domain_id = uuid.uuid4().hex self.delete( - '/domains/%(domain_id)s/config' % {'domain_id': invalid_domain_id}, + f'/domains/{invalid_domain_id}/config', expected_status=exception.DomainNotFound.code, ) @@ -149,9 +145,7 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): PROVIDERS.domain_config_api.create_config( self.domain['id'], self.config ) - url = '/domains/%(domain_id)s/config' % { - 'domain_id': self.domain['id'] - } + url = '/domains/{domain_id}/config'.format(domain_id=self.domain['id']) r = self.get(url) self.assertEqual(self.config, r.result['config']) self.head(url, expected_status=http.client.OK) @@ -161,9 +155,9 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): PROVIDERS.domain_config_api.create_config( self.domain['id'], self.config ) - url = '/domains/%(domain_id)s/config/ldap' % { - 'domain_id': self.domain['id'] - } + url = '/domains/{domain_id}/config/ldap'.format( + domain_id=self.domain['id'] + ) r = self.get(url) self.assertEqual({'ldap': self.config['ldap']}, r.result['config']) self.head(url, expected_status=http.client.OK) @@ -179,9 +173,9 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): self.domain['id'], self.config ) invalid_domain_id = uuid.uuid4().hex - url = '/domains/%(domain_id)s/config/ldap' % { - 'domain_id': invalid_domain_id - } + url = '/domains/{domain_id}/config/ldap'.format( + domain_id=invalid_domain_id + ) self.get(url, expected_status=exception.DomainNotFound.code) self.head(url, expected_status=exception.DomainNotFound.code) @@ -190,9 +184,9 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): PROVIDERS.domain_config_api.create_config( self.domain['id'], self.config ) - url = '/domains/%(domain_id)s/config/ldap/url' % { - 'domain_id': self.domain['id'] - } + url = '/domains/{domain_id}/config/ldap/url'.format( + domain_id=self.domain['id'] + ) r = self.get(url) self.assertEqual( {'url': self.config['ldap']['url']}, r.result['config'] @@ -210,17 +204,15 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): self.domain['id'], self.config ) invalid_domain_id = uuid.uuid4().hex - url = '/domains/%(domain_id)s/config/ldap/url' % { - 'domain_id': invalid_domain_id - } + url = '/domains/{domain_id}/config/ldap/url'.format( + domain_id=invalid_domain_id + ) self.get(url, expected_status=exception.DomainNotFound.code) self.head(url, expected_status=exception.DomainNotFound.code) def test_get_head_non_existant_config(self): """Call ``GET /domains{domain_id}/config when no config defined``.""" - url = '/domains/%(domain_id)s/config' % { - 'domain_id': self.domain['id'] - } + url = '/domains/{domain_id}/config'.format(domain_id=self.domain['id']) self.get(url, expected_status=http.client.NOT_FOUND) self.head(url, expected_status=http.client.NOT_FOUND) @@ -232,9 +224,7 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): response 404 domain not found. """ invalid_domain_id = uuid.uuid4().hex - url = '/domains/%(domain_id)s/config' % { - 'domain_id': invalid_domain_id - } + url = f'/domains/{invalid_domain_id}/config' self.get(url, expected_status=exception.DomainNotFound.code) self.head(url, expected_status=exception.DomainNotFound.code) @@ -242,9 +232,9 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): """Call ``GET /domains/{domain_id}/config/{group_not_exist}``.""" config = {'ldap': {'url': uuid.uuid4().hex}} PROVIDERS.domain_config_api.create_config(self.domain['id'], config) - url = '/domains/%(domain_id)s/config/identity' % { - 'domain_id': self.domain['id'] - } + url = '/domains/{domain_id}/config/identity'.format( + domain_id=self.domain['id'] + ) self.get(url, expected_status=http.client.NOT_FOUND) self.head(url, expected_status=http.client.NOT_FOUND) @@ -258,9 +248,9 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): config = {'ldap': {'url': uuid.uuid4().hex}} PROVIDERS.domain_config_api.create_config(self.domain['id'], config) invalid_domain_id = uuid.uuid4().hex - url = '/domains/%(domain_id)s/config/identity' % { - 'domain_id': invalid_domain_id - } + url = '/domains/{domain_id}/config/identity'.format( + domain_id=invalid_domain_id + ) self.get(url, expected_status=exception.DomainNotFound.code) self.head(url, expected_status=exception.DomainNotFound.code) @@ -273,9 +263,9 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): """ config = {'ldap': {'url': uuid.uuid4().hex}} PROVIDERS.domain_config_api.create_config(self.domain['id'], config) - url = '/domains/%(domain_id)s/config/ldap/user_tree_dn' % { - 'domain_id': self.domain['id'] - } + url = '/domains/{domain_id}/config/ldap/user_tree_dn'.format( + domain_id=self.domain['id'] + ) self.get(url, expected_status=http.client.NOT_FOUND) self.head(url, expected_status=http.client.NOT_FOUND) @@ -291,9 +281,9 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): config = {'ldap': {'url': uuid.uuid4().hex}} PROVIDERS.domain_config_api.create_config(self.domain['id'], config) invalid_domain_id = uuid.uuid4().hex - url = '/domains/%(domain_id)s/config/ldap/user_tree_dn' % { - 'domain_id': invalid_domain_id - } + url = '/domains/{domain_id}/config/ldap/user_tree_dn'.format( + domain_id=invalid_domain_id + ) self.get(url, expected_status=exception.DomainNotFound.code) self.head(url, expected_status=exception.DomainNotFound.code) @@ -307,7 +297,7 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): 'identity': {'driver': uuid.uuid4().hex}, } r = self.patch( - '/domains/%(domain_id)s/config' % {'domain_id': self.domain['id']}, + '/domains/{domain_id}/config'.format(domain_id=self.domain['id']), body={'config': new_config}, ) res = PROVIDERS.domain_config_api.get_config(self.domain['id']) @@ -335,7 +325,7 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): } invalid_domain_id = uuid.uuid4().hex self.patch( - '/domains/%(domain_id)s/config' % {'domain_id': invalid_domain_id}, + f'/domains/{invalid_domain_id}/config', body={'config': new_config}, expected_status=exception.DomainNotFound.code, ) @@ -616,7 +606,7 @@ class DomainConfigTestCase(test_v3.RestfulTestCase): class SecurityRequirementsTestCase(test_v3.RestfulTestCase): def setUp(self): - super(SecurityRequirementsTestCase, self).setUp() + super().setUp() # Create a user in the default domain self.non_admin_user = unit.create_user( @@ -688,10 +678,10 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): 'password_regex_description': password_regex_description, } } - url = '/domains/%(domain_id)s/config/%(group)s' % { - 'domain_id': CONF.identity.default_domain_id, - 'group': 'security_compliance', - } + url = '/domains/{domain_id}/config/{group}'.format( + domain_id=CONF.identity.default_domain_id, + group='security_compliance', + ) # Make sure regular users and administrators can get security # requirement information. @@ -731,10 +721,10 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): group='security_compliance', password_regex_description=password_regex_description, ) - url = '/domains/%(domain_id)s/config/%(group)s' % { - 'domain_id': domain['id'], - 'group': 'security_compliance', - } + url = '/domains/{domain_id}/config/{group}'.format( + domain_id=domain['id'], + group='security_compliance', + ) # Make sure regular users and administrators are forbidden from doing # this. @@ -772,11 +762,11 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): self.config_fixture.config( group='security_compliance', lockout_failure_attempts=1 ) - url = '/domains/%(domain_id)s/config/%(group)s/%(option)s' % { - 'domain_id': CONF.identity.default_domain_id, - 'group': 'security_compliance', - 'option': 'lockout_failure_attempts', - } + url = '/domains/{domain_id}/config/{group}/{option}'.format( + domain_id=CONF.identity.default_domain_id, + group='security_compliance', + option='lockout_failure_attempts', + ) # Make sure regular users and administrators are unable to ask for # sensitive information. @@ -811,11 +801,11 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): ) group = 'security_compliance' option = 'password_regex' - url = '/domains/%(domain_id)s/config/%(group)s/%(option)s' % { - 'domain_id': CONF.identity.default_domain_id, - 'group': group, - 'option': option, - } + url = '/domains/{domain_id}/config/{group}/{option}'.format( + domain_id=CONF.identity.default_domain_id, + group=group, + option=option, + ) # Make sure regular users and administrators can ask for the # password regular expression. @@ -847,11 +837,11 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): ) group = 'security_compliance' option = 'password_regex_description' - url = '/domains/%(domain_id)s/config/%(group)s/%(option)s' % { - 'domain_id': CONF.identity.default_domain_id, - 'group': group, - 'option': option, - } + url = '/domains/{domain_id}/config/{group}/{option}'.format( + domain_id=CONF.identity.default_domain_id, + group=group, + option=option, + ) # Make sure regular users and administrators can ask for the # password regular expression. @@ -879,11 +869,11 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): """When an option isn't set, we should explicitly return None.""" group = 'security_compliance' option = 'password_regex' - url = '/domains/%(domain_id)s/config/%(group)s/%(option)s' % { - 'domain_id': CONF.identity.default_domain_id, - 'group': group, - 'option': option, - } + url = '/domains/{domain_id}/config/{group}/{option}'.format( + domain_id=CONF.identity.default_domain_id, + group=group, + option=option, + ) # Make sure regular users and administrators can ask for the password # regular expression, but since it isn't set the returned value should @@ -907,11 +897,11 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): """When an option isn't set, we should explicitly return None.""" group = 'security_compliance' option = 'password_regex_description' - url = '/domains/%(domain_id)s/config/%(group)s/%(option)s' % { - 'domain_id': CONF.identity.default_domain_id, - 'group': group, - 'option': option, - } + url = '/domains/{domain_id}/config/{group}/{option}'.format( + domain_id=CONF.identity.default_domain_id, + group=group, + option=option, + ) # Make sure regular users and administrators can ask for the password # regular expression description, but since it isn't set the returned @@ -977,10 +967,10 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): project_id=project['id'], ) user_token = self.get_requested_token(user_token) - url = '/domains/%(domain_id)s/config/%(group)s' % { - 'domain_id': CONF.identity.default_domain_id, - 'group': group, - } + url = '/domains/{domain_id}/config/{group}'.format( + domain_id=CONF.identity.default_domain_id, + group=group, + ) response = self.get(url, token=user_token) self.assertEqual( response.result['config'][group]['password_regex'], password_regex @@ -1006,10 +996,10 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): 'password_regex_description': uuid.uuid4().hex, } } - url = '/domains/%(domain_id)s/config/%(group)s' % { - 'domain_id': CONF.identity.default_domain_id, - 'group': 'security_compliance', - } + url = '/domains/{domain_id}/config/{group}'.format( + domain_id=CONF.identity.default_domain_id, + group='security_compliance', + ) # Make sure regular users and administrators aren't allowed to modify # security compliance configuration through the API. @@ -1030,11 +1020,11 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): """Make sure any updates to security compliance options fail.""" group = 'security_compliance' option = 'password_regex' - url = '/domains/%(domain_id)s/config/%(group)s/%(option)s' % { - 'domain_id': CONF.identity.default_domain_id, - 'group': group, - 'option': option, - } + url = '/domains/{domain_id}/config/{group}/{option}'.format( + domain_id=CONF.identity.default_domain_id, + group=group, + option=option, + ) new_config = {group: {option: uuid.uuid4().hex}} # Make sure regular users and administrators aren't allowed to modify @@ -1056,11 +1046,11 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): """Make sure any updates to security compliance options fail.""" group = 'security_compliance' option = 'password_regex_description' - url = '/domains/%(domain_id)s/config/%(group)s/%(option)s' % { - 'domain_id': CONF.identity.default_domain_id, - 'group': group, - 'option': option, - } + url = '/domains/{domain_id}/config/{group}/{option}'.format( + domain_id=CONF.identity.default_domain_id, + group=group, + option=option, + ) new_config = {group: {option: uuid.uuid4().hex}} # Make sure regular users and administrators aren't allowed to modify @@ -1087,11 +1077,11 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): """ group = 'security_compliance' option = 'lockout_failure_attempts' - url = '/domains/%(domain_id)s/config/%(group)s/%(option)s' % { - 'domain_id': CONF.identity.default_domain_id, - 'group': group, - 'option': option, - } + url = '/domains/{domain_id}/config/{group}/{option}'.format( + domain_id=CONF.identity.default_domain_id, + group=group, + option=option, + ) new_config = {group: {option: 1}} # Make sure this behavior is not possible for regular users or @@ -1111,10 +1101,10 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): def test_delete_security_compliance_group_fails(self): """The security compliance group shouldn't be deleteable.""" - url = '/domains/%(domain_id)s/config/%(group)s/' % { - 'domain_id': CONF.identity.default_domain_id, - 'group': 'security_compliance', - } + url = '/domains/{domain_id}/config/{group}/'.format( + domain_id=CONF.identity.default_domain_id, + group='security_compliance', + ) # Make sure regular users and administrators can't delete the security # compliance configuration group. @@ -1131,11 +1121,11 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): def test_delete_security_compliance_password_regex_fails(self): """The security compliance options shouldn't be deleteable.""" - url = '/domains/%(domain_id)s/config/%(group)s/%(option)s' % { - 'domain_id': CONF.identity.default_domain_id, - 'group': 'security_compliance', - 'option': 'password_regex', - } + url = '/domains/{domain_id}/config/{group}/{option}'.format( + domain_id=CONF.identity.default_domain_id, + group='security_compliance', + option='password_regex', + ) # Make sure regular users and administrators can't delete the security # compliance configuration group. @@ -1152,11 +1142,11 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): def test_delete_security_compliance_password_regex_description_fails(self): """The security compliance options shouldn't be deleteable.""" - url = '/domains/%(domain_id)s/config/%(group)s/%(option)s' % { - 'domain_id': CONF.identity.default_domain_id, - 'group': 'security_compliance', - 'option': 'password_regex_description', - } + url = '/domains/{domain_id}/config/{group}/{option}'.format( + domain_id=CONF.identity.default_domain_id, + group='security_compliance', + option='password_regex_description', + ) # Make sure regular users and administrators can't delete the security # compliance configuration group. @@ -1173,11 +1163,11 @@ class SecurityRequirementsTestCase(test_v3.RestfulTestCase): def test_delete_non_whitelisted_security_compliance_options_fails(self): """The security compliance options shouldn't be deleteable.""" - url = '/domains/%(domain_id)s/config/%(group)s/%(option)s' % { - 'domain_id': CONF.identity.default_domain_id, - 'group': 'security_compliance', - 'option': 'lockout_failure_attempts', - } + url = '/domains/{domain_id}/config/{group}/{option}'.format( + domain_id=CONF.identity.default_domain_id, + group='security_compliance', + option='lockout_failure_attempts', + ) # Make sure regular users and administrators can't delete the security # compliance configuration group. diff --git a/keystone/tests/unit/test_v3_endpoint_policy.py b/keystone/tests/unit/test_v3_endpoint_policy.py index 48f9d8868b..8313161256 100644 --- a/keystone/tests/unit/test_v3_endpoint_policy.py +++ b/keystone/tests/unit/test_v3_endpoint_policy.py @@ -34,7 +34,7 @@ class EndpointPolicyTestCase(test_v3.RestfulTestCase): """ def setUp(self): - super(EndpointPolicyTestCase, self).setUp() + super().setUp() self.policy = unit.new_policy_ref() PROVIDERS.policy_api.create_policy(self.policy['id'], self.policy) self.service = unit.new_service_ref() @@ -156,7 +156,7 @@ class EndpointPolicyTestCase(test_v3.RestfulTestCase): self.head(url) self.delete( - '/endpoints/%(endpoint_id)s' % {'endpoint_id': self.endpoint['id']} + '/endpoints/{endpoint_id}'.format(endpoint_id=self.endpoint['id']) ) self.head(url, expected_status=http.client.NOT_FOUND) @@ -174,9 +174,7 @@ class EndpointPolicyTestCase(test_v3.RestfulTestCase): self.put(url) self.head(url) - self.delete( - '/regions/%(region_id)s' % {'region_id': self.region['id']} - ) + self.delete('/regions/{region_id}'.format(region_id=self.region['id'])) self.head(url, expected_status=http.client.NOT_FOUND) @@ -194,7 +192,7 @@ class EndpointPolicyTestCase(test_v3.RestfulTestCase): self.head(url) self.delete( - '/services/%(service_id)s' % {'service_id': self.service['id']} + '/services/{service_id}'.format(service_id=self.service['id']) ) self.head(url, expected_status=http.client.NOT_FOUND) @@ -209,7 +207,7 @@ class EndpointPolicyTestCase(test_v3.RestfulTestCase): self.get(url, expected_status=http.client.NO_CONTENT) self.delete( - '/policies/%(policy_id)s' % {'policy_id': self.policy['id']} + '/policies/{policy_id}'.format(policy_id=self.policy['id']) ) self.head(url, expected_status=http.client.NOT_FOUND) @@ -224,7 +222,7 @@ class EndpointPolicyTestCase(test_v3.RestfulTestCase): self.get(url, expected_status=http.client.NO_CONTENT) self.delete( - '/services/%(service_id)s' % {'service_id': self.service['id']} + '/services/{service_id}'.format(service_id=self.service['id']) ) self.head(url, expected_status=http.client.NOT_FOUND) diff --git a/keystone/tests/unit/test_v3_federation.py b/keystone/tests/unit/test_v3_federation.py index 815b80892f..79337cba28 100644 --- a/keystone/tests/unit/test_v3_federation.py +++ b/keystone/tests/unit/test_v3_federation.py @@ -62,7 +62,7 @@ def dummy_validator(*args, **kwargs): pass -class FederatedSetupMixin(object): +class FederatedSetupMixin: ACTION = 'authenticate' IDP = 'ORG_IDP' @@ -90,7 +90,7 @@ class FederatedSetupMixin(object): return (project['id'], project['name']) def _roles(self, roles): - return set([(r['id'], r['name']) for r in roles]) + return {(r['id'], r['name']) for r in roles} def _check_projects_and_roles(self, token, roles, projects): """Check whether the projects and the roles match.""" @@ -749,7 +749,7 @@ class FederatedIdentityProviderTests(test_v3.RestfulTestCase): url=None, mapping_id=None, validate=True, - **kwargs + **kwargs, ): if url is None: url = self.base_url(suffix='%(idp_id)s/protocols/%(protocol_id)s') @@ -774,7 +774,7 @@ class FederatedIdentityProviderTests(test_v3.RestfulTestCase): return (resp, idp_id, proto) def _get_protocol(self, idp_id, protocol_id): - url = '%s/protocols/%s' % (idp_id, protocol_id) + url = f'{idp_id}/protocols/{protocol_id}' url = self.base_url(suffix=url) r = self.get(url) return r @@ -1223,7 +1223,7 @@ class FederatedIdentityProviderTests(test_v3.RestfulTestCase): entities = self._fetch_attribute_from_response( resp, 'identity_providers' ) - entities_ids = set([e['id'] for e in entities]) + entities_ids = {e['id'] for e in entities} ids_intersection = entities_ids.intersection(ids) self.assertEqual(ids_intersection, ids) @@ -1599,7 +1599,7 @@ class FederatedIdentityProviderTests(test_v3.RestfulTestCase): expected_status=http.client.CREATED ) proto_id = self._fetch_attribute_from_response(resp, 'protocol')['id'] - url = "%s/protocols/%s" % (idp_id, proto_id) + url = f"{idp_id}/protocols/{proto_id}" url = self.base_url(suffix=url) resp = self.get(url) @@ -1644,7 +1644,7 @@ class FederatedIdentityProviderTests(test_v3.RestfulTestCase): resp, 'protocols', dummy_validator, keys_to_check=['id'] ) entities = self._fetch_attribute_from_response(resp, 'protocols') - entities = set([entity['id'] for entity in entities]) + entities = {entity['id'] for entity in entities} protocols_intersection = entities.intersection(protocol_ids) self.assertEqual(protocols_intersection, set(protocol_ids)) @@ -1658,7 +1658,7 @@ class FederatedIdentityProviderTests(test_v3.RestfulTestCase): new_mapping_id = uuid.uuid4().hex self._create_mapping(mapping_id=new_mapping_id) - url = "%s/protocols/%s" % (idp_id, proto) + url = f"{idp_id}/protocols/{proto}" url = self.base_url(suffix=url) body = {'mapping_id': new_mapping_id} resp = self.patch(url, body={'protocol': body}) @@ -1698,7 +1698,7 @@ class MappingCRUDTests(test_v3.RestfulTestCase): self.assertValidMapping, keys_to_check=[], *args, - **kwargs + **kwargs, ) def assertValidMappingResponse(self, resp, *args, **kwargs): @@ -1708,7 +1708,7 @@ class MappingCRUDTests(test_v3.RestfulTestCase): self.assertValidMapping, keys_to_check=[], *args, - **kwargs + **kwargs, ) def assertValidMapping(self, entity, ref=None): @@ -1987,10 +1987,10 @@ class FederatedTokenTests(test_v3.RestfulTestCase, FederatedSetupMixin): def auth_plugin_config_override(self): methods = ['saml2', 'token'] - super(FederatedTokenTests, self).auth_plugin_config_override(methods) + super().auth_plugin_config_override(methods) def setUp(self): - super(FederatedTokenTests, self).setUp() + super().setUp() self._notifications = [] def fake_saml_notify( @@ -2030,7 +2030,7 @@ class FederatedTokenTests(test_v3.RestfulTestCase, FederatedSetupMixin): self.assertTrue(note['send_notification_called']) def load_fixtures(self, fixtures): - super(FederatedTokenTests, self).load_fixtures(fixtures) + super().load_fixtures(fixtures) self.load_federation_sample_data() def test_issue_unscoped_token_notify(self): @@ -2114,9 +2114,9 @@ class FederatedTokenTests(test_v3.RestfulTestCase, FederatedSetupMixin): def test_issue_unscoped_token_group_names_in_mapping(self): r = self._issue_unscoped_token(assertion='ANOTHER_CUSTOMER_ASSERTION') - ref_groups = set([self.group_customers['id'], self.group_admins['id']]) + ref_groups = {self.group_customers['id'], self.group_admins['id']} token_groups = r.federated_groups - token_groups = set([group['id'] for group in token_groups]) + token_groups = {group['id'] for group in token_groups} self.assertEqual(ref_groups, token_groups) def test_issue_unscoped_tokens_nonexisting_group(self): @@ -2476,23 +2476,21 @@ class FederatedTokenTests(test_v3.RestfulTestCase, FederatedSetupMixin): ) projects_refs = ( - set([self.proj_customers['id'], self.project_inherited['id']]), - set([self.proj_employees['id'], self.project_all['id']]), - set( - [ - self.proj_employees['id'], - self.project_all['id'], - self.proj_customers['id'], - self.project_inherited['id'], - ] - ), + {self.proj_customers['id'], self.project_inherited['id']}, + {self.proj_employees['id'], self.project_all['id']}, + { + self.proj_employees['id'], + self.project_all['id'], + self.proj_customers['id'], + self.project_inherited['id'], + }, ) for token, projects_ref in zip(token, projects_refs): for url in urls: r = self.get(url, token=token) projects_resp = r.result['projects'] - projects = set(p['id'] for p in projects_resp) + projects = {p['id'] for p in projects_resp} self.assertEqual( projects_ref, projects, 'match failed for url %s' % url ) @@ -2554,16 +2552,16 @@ class FederatedTokenTests(test_v3.RestfulTestCase, FederatedSetupMixin): # within the domain) domain_refs = ( - set([self.domainA['id']]), - set([self.domainA['id'], self.domainB['id']]), - set([self.domainA['id'], self.domainB['id'], self.domainC['id']]), + {self.domainA['id']}, + {self.domainA['id'], self.domainB['id']}, + {self.domainA['id'], self.domainB['id'], self.domainC['id']}, ) for token, domains_ref in zip(tokens, domain_refs): for url in urls: r = self.get(url, token=token) domains_resp = r.result['domains'] - domains = set(p['id'] for p in domains_resp) + domains = {p['id'] for p in domains_resp} self.assertEqual( domains_ref, domains, 'match failed for url %s' % url ) @@ -2728,7 +2726,7 @@ class FederatedTokenTests(test_v3.RestfulTestCase, FederatedSetupMixin): ) group_no_exists = PROVIDERS.identity_api.create_group(group_no_exists) - group_ids = set([group_exists['id'], group_no_exists['id']]) + group_ids = {group_exists['id'], group_no_exists['id']} rules = { 'rules': [ @@ -2785,7 +2783,7 @@ class FederatedTokenTests(test_v3.RestfulTestCase, FederatedSetupMixin): ) group_no_exists = PROVIDERS.identity_api.create_group(group_no_exists) - group_ids = set([group_exists['id'], group_no_exists['id']]) + group_ids = {group_exists['id'], group_no_exists['id']} rules = { 'rules': [ @@ -2886,7 +2884,7 @@ class FederatedTokenTests(test_v3.RestfulTestCase, FederatedSetupMixin): ) group_no_exists = PROVIDERS.identity_api.create_group(group_no_exists) - group_ids = set([group_exists['id'], group_no_exists['id']]) + group_ids = {group_exists['id'], group_no_exists['id']} rules = { 'rules': [ @@ -3035,11 +3033,11 @@ class FernetFederatedTokenTests(test_v3.RestfulTestCase, FederatedSetupMixin): AUTH_METHOD = 'token' def load_fixtures(self, fixtures): - super(FernetFederatedTokenTests, self).load_fixtures(fixtures) + super().load_fixtures(fixtures) self.load_federation_sample_data() def config_overrides(self): - super(FernetFederatedTokenTests, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='token', provider='fernet') self.useFixture( ksfixtures.KeyRepository( @@ -3051,9 +3049,7 @@ class FernetFederatedTokenTests(test_v3.RestfulTestCase, FederatedSetupMixin): def auth_plugin_config_override(self): methods = ['saml2', 'token', 'password'] - super(FernetFederatedTokenTests, self).auth_plugin_config_override( - methods - ) + super().auth_plugin_config_override(methods) def test_federated_unscoped_token(self): resp = self._issue_unscoped_token() @@ -3105,19 +3101,17 @@ class JWSFederatedTokenTests(test_v3.RestfulTestCase, FederatedSetupMixin): AUTH_METHOD = 'token' def load_fixtures(self, fixtures): - super(JWSFederatedTokenTests, self).load_fixtures(fixtures) + super().load_fixtures(fixtures) self.load_federation_sample_data() def config_overrides(self): - super(JWSFederatedTokenTests, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='token', provider='jws') self.useFixture(ksfixtures.JWSKeyRepository(self.config_fixture)) def auth_plugin_config_override(self): methods = ['saml2', 'token', 'password'] - super(JWSFederatedTokenTests, self).auth_plugin_config_override( - methods - ) + super().auth_plugin_config_override(methods) def test_federated_unscoped_token(self): token_model = self._issue_unscoped_token() @@ -3218,10 +3212,10 @@ class FederatedUserTests(test_v3.RestfulTestCase, FederatedSetupMixin): def auth_plugin_config_override(self): methods = ['saml2', 'token'] - super(FederatedUserTests, self).auth_plugin_config_override(methods) + super().auth_plugin_config_override(methods) def load_fixtures(self, fixtures): - super(FederatedUserTests, self).load_fixtures(fixtures) + super().load_fixtures(fixtures) self.load_federation_sample_data() def test_user_id_persistense(self): @@ -3268,7 +3262,7 @@ class FederatedUserTests(test_v3.RestfulTestCase, FederatedSetupMixin): scoped_token = r.headers['X-Subject-Token'] # ensure user can access resource based on role assignment - path = '/projects/%(project_id)s' % {'project_id': project_ref['id']} + path = '/projects/{project_id}'.format(project_id=project_ref['id']) r = self.v3_request( path=path, method='GET', @@ -3284,7 +3278,7 @@ class FederatedUserTests(test_v3.RestfulTestCase, FederatedSetupMixin): PROVIDERS.resource_api.create_project(project_ref2['id'], project_ref2) # ensure the user cannot access the 2nd resource (forbidden) - path = '/projects/%(project_id)s' % {'project_id': project_ref2['id']} + path = '/projects/{project_id}'.format(project_id=project_ref2['id']) r = self.v3_request( path=path, method='GET', @@ -3570,7 +3564,7 @@ class ShadowMappingTests(test_v3.RestfulTestCase, FederatedSetupMixin): """ def setUp(self): - super(ShadowMappingTests, self).setUp() + super().setUp() # update the mapping we have already setup to have specific projects # and roles. PROVIDERS.federation_api.update_mapping( @@ -3608,10 +3602,10 @@ class ShadowMappingTests(test_v3.RestfulTestCase, FederatedSetupMixin): def auth_plugin_config_override(self): methods = ['saml2', 'token'] - super(ShadowMappingTests, self).auth_plugin_config_override(methods) + super().auth_plugin_config_override(methods) def load_fixtures(self, fixtures): - super(ShadowMappingTests, self).load_fixtures(fixtures) + super().load_fixtures(fixtures) self.load_federation_sample_data() def test_shadow_mapping_creates_projects(self): @@ -3854,7 +3848,7 @@ def _is_xmlsec1_installed(): def _load_xml(filename): - with open(os.path.join(XMLDIR, filename), 'r') as xml: + with open(os.path.join(XMLDIR, filename)) as xml: return xml.read() @@ -3886,7 +3880,7 @@ class SAMLGenerationTests(test_v3.RestfulTestCase): SERVICE_PROVDIER_ID = 'ACME' def setUp(self): - super(SAMLGenerationTests, self).setUp() + super().setUp() self.signed_assertion = saml2.create_class_from_xml_string( saml.Assertion, _load_xml(self.ASSERTION_FILE) ) @@ -4075,7 +4069,7 @@ class SAMLGenerationTests(test_v3.RestfulTestCase): # the last option is the assertion file to be signed if popenargs[0] != ['/usr/bin/which', CONF.saml.xmlsec1_binary]: filename = popenargs[0][-1] - with open(filename, 'r') as f: + with open(filename) as f: assertion_content = f.read() # since we are not testing the signature itself, we can return # the assertion as is without signing it @@ -4491,11 +4485,11 @@ class IdPMetadataGenerationTests(test_v3.RestfulTestCase): METADATA_URL = '/OS-FEDERATION/saml2/metadata' def setUp(self): - super(IdPMetadataGenerationTests, self).setUp() + super().setUp() self.generator = keystone_idp.MetadataGenerator() def config_overrides(self): - super(IdPMetadataGenerationTests, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='saml', idp_entity_id=federation_fixtures.IDP_ENTITY_ID, @@ -4652,7 +4646,7 @@ class ServiceProviderTests(test_v3.RestfulTestCase): ] def setUp(self): - super(ServiceProviderTests, self).setUp() + super().setUp() # Add a Service Provider url = self.base_url(suffix=self.SERVICE_PROVIDER_ID) self.SP_REF = core.new_service_provider_ref() @@ -5023,7 +5017,7 @@ class WebSSOTests(FederatedTokenTests): PROTOCOL_REMOTE_ID_ATTR = uuid.uuid4().hex def config_overrides(self): - super(WebSSOTests, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='federation', trusted_dashboard=[self.TRUSTED_DASHBOARD], @@ -5221,7 +5215,7 @@ class K2KServiceCatalogTests(test_v3.RestfulTestCase): SP3 = 'SP3' def setUp(self): - super(K2KServiceCatalogTests, self).setUp() + super().setUp() sp = core.new_service_provider_ref() PROVIDERS.federation_api.create_sp(self.SP1, sp) diff --git a/keystone/tests/unit/test_v3_filters.py b/keystone/tests/unit/test_v3_filters.py index 58929b280a..be1a0ea4b7 100644 --- a/keystone/tests/unit/test_v3_filters.py +++ b/keystone/tests/unit/test_v3_filters.py @@ -45,7 +45,7 @@ class IdentityTestFilteredCase(filtering.FilterTests, test_v3.RestfulTestCase): """Setup for Identity Filter Test Cases.""" self.tempfile = self.useFixture(temporaryfile.SecureTempFile()) self.tmpfilename = self.tempfile.file_name - super(IdentityTestFilteredCase, self).setUp() + super().setUp() def load_sample_data(self): """Create sample data for these tests. @@ -352,7 +352,7 @@ class IdentityPasswordExpiryFilteredTestCase( def setUp(self): """Setup for Identity Filter Test Cases.""" self.config_fixture = self.useFixture(config_fixture.Config(CONF)) - super(IdentityPasswordExpiryFilteredTestCase, self).setUp() + super().setUp() def load_sample_data(self): """Create sample data for password expiry tests. @@ -450,7 +450,7 @@ class IdentityPasswordExpiryFilteredTestCase( {operator}:{timestamp} """ - url = '/users?password_expires_at=%s:%s&password_expires_at=%s:%s' % ( + url = '/users?password_expires_at={}:{}&password_expires_at={}:{}'.format( first_operator, first_time, second_operator, @@ -837,7 +837,7 @@ class IdentityTestListLimitCase(IdentityTestFilteredCase): def setUp(self): """Setup for Identity Limit Test Cases.""" - super(IdentityTestListLimitCase, self).setUp() + super().setUp() # Create 10 entries for each of the entities we are going to test self.ENTITY_TYPES = ['user', 'group', 'project'] diff --git a/keystone/tests/unit/test_v3_identity.py b/keystone/tests/unit/test_v3_identity.py index 6f1771ae69..77d5787203 100644 --- a/keystone/tests/unit/test_v3_identity.py +++ b/keystone/tests/unit/test_v3_identity.py @@ -46,7 +46,7 @@ class IdentityTestCase(test_v3.RestfulTestCase): """Test users and groups.""" def setUp(self): - super(IdentityTestCase, self).setUp() + super().setUp() self.useFixture( ksfixtures.KeyRepository( self.config_fixture, @@ -282,9 +282,9 @@ class IdentityTestCase(test_v3.RestfulTestCase): ) # Now try with an explicit filter - resource_url = '/users?domain_id=%(domain_id)s' % { - 'domain_id': domain['id'] - } + resource_url = '/users?domain_id={domain_id}'.format( + domain_id=domain['id'] + ) r = self.get(resource_url) self.assertValidUserListResponse( r, ref=user, resource_url=resource_url @@ -302,7 +302,7 @@ class IdentityTestCase(test_v3.RestfulTestCase): def test_get_head_user(self): """Call ``GET & HEAD /users/{user_id}``.""" - resource_url = '/users/%(user_id)s' % {'user_id': self.user['id']} + resource_url = '/users/{user_id}'.format(user_id=self.user['id']) r = self.get(resource_url) self.assertValidUserResponse(r, self.user) self.head(resource_url, expected_status=http.client.OK) @@ -326,7 +326,7 @@ class IdentityTestCase(test_v3.RestfulTestCase): self.assertIn('name', user) self.assertIn('enabled', user) self.assertIn('password_expires_at', user) - r = self.get('/users/%(user_id)s' % {'user_id': user['id']}) + r = self.get('/users/{user_id}'.format(user_id=user['id'])) self.assertValidUserResponse(r, user) def test_get_user_with_default_project(self): @@ -335,7 +335,7 @@ class IdentityTestCase(test_v3.RestfulTestCase): domain_id=self.domain_id, project_id=self.project_id ) user = PROVIDERS.identity_api.create_user(user) - r = self.get('/users/%(user_id)s' % {'user_id': user['id']}) + r = self.get('/users/{user_id}'.format(user_id=user['id'])) self.assertValidUserResponse(r, user) def test_add_user_to_group(self): @@ -365,7 +365,7 @@ class IdentityTestCase(test_v3.RestfulTestCase): auth = self.build_authentication_request( user_id=user1['id'], password=user1['password'] ) - resource_url = '/users/%(user_id)s/groups' % {'user_id': user1['id']} + resource_url = '/users/{user_id}/groups'.format(user_id=user1['id']) r = self.get(resource_url, auth=auth) self.assertValidGroupListResponse( r, ref=self.group, resource_url=resource_url @@ -373,7 +373,7 @@ class IdentityTestCase(test_v3.RestfulTestCase): self.head(resource_url, auth=auth, expected_status=http.client.OK) # Administrator is allowed to list others' groups - resource_url = '/users/%(user_id)s/groups' % {'user_id': user1['id']} + resource_url = '/users/{user_id}/groups'.format(user_id=user1['id']) r = self.get(resource_url) self.assertValidGroupListResponse( r, ref=self.group, resource_url=resource_url @@ -384,7 +384,7 @@ class IdentityTestCase(test_v3.RestfulTestCase): auth = self.build_authentication_request( user_id=user2['id'], password=user2['password'] ) - resource_url = '/users/%(user_id)s/groups' % {'user_id': user1['id']} + resource_url = '/users/{user_id}/groups'.format(user_id=user1['id']) self.get( resource_url, auth=auth, @@ -413,15 +413,15 @@ class IdentityTestCase(test_v3.RestfulTestCase): '/groups/%(group_id)s/users/%(user_id)s' % {'group_id': self.group_id, 'user_id': self.user['id']} ) - resource_url = '/groups/%(group_id)s/users' % { - 'group_id': self.group_id - } + resource_url = '/groups/{group_id}/users'.format( + group_id=self.group_id + ) r = self.get(resource_url) self.assertValidUserListResponse( r, ref=self.user, resource_url=resource_url ) self.assertIn( - '/groups/%(group_id)s/users' % {'group_id': self.group_id}, + f'/groups/{self.group_id}/users', r.result['links']['self'], ) self.head(resource_url, expected_status=http.client.OK) @@ -462,7 +462,7 @@ class IdentityTestCase(test_v3.RestfulTestCase): user = unit.new_user_ref(domain_id=self.domain_id) del user['id'] r = self.patch( - '/users/%(user_id)s' % {'user_id': self.user['id']}, + '/users/{user_id}'.format(user_id=self.user['id']), body={'user': user}, ) self.assertValidUserResponse(r, user) @@ -562,7 +562,7 @@ class IdentityTestCase(test_v3.RestfulTestCase): user = PROVIDERS.identity_api.create_user(user) user['domain_id'] = CONF.identity.default_domain_id self.patch( - '/users/%(user_id)s' % {'user_id': user['id']}, + '/users/{user_id}'.format(user_id=user['id']), body={'user': user}, expected_status=exception.ValidationError.code, ) @@ -608,7 +608,7 @@ class IdentityTestCase(test_v3.RestfulTestCase): ) # Now delete the user - self.delete('/users/%(user_id)s' % {'user_id': self.user['id']}) + self.delete('/users/{user_id}'.format(user_id=self.user['id'])) # Deleting the user should have deleted any credentials # that reference this project @@ -626,7 +626,7 @@ class IdentityTestCase(test_v3.RestfulTestCase): 'sqlalchemy.orm.query.Query.delete', autospec=True ) - class FakeDeadlock(object): + class FakeDeadlock: def __init__(self, mock_patcher): self.deadlock_count = 2 self.mock_patcher = mock_patcher @@ -688,7 +688,7 @@ class IdentityTestCase(test_v3.RestfulTestCase): def test_get_head_group(self): """Call ``GET & HEAD /groups/{group_id}``.""" - resource_url = '/groups/%(group_id)s' % {'group_id': self.group_id} + resource_url = f'/groups/{self.group_id}' r = self.get(resource_url) self.assertValidGroupResponse(r, self.group) self.head(resource_url, expected_status=http.client.OK) @@ -698,7 +698,7 @@ class IdentityTestCase(test_v3.RestfulTestCase): group = unit.new_group_ref(domain_id=self.domain_id) del group['id'] r = self.patch( - '/groups/%(group_id)s' % {'group_id': self.group_id}, + f'/groups/{self.group_id}', body={'group': group}, ) self.assertValidGroupResponse(r, group) @@ -711,14 +711,14 @@ class IdentityTestCase(test_v3.RestfulTestCase): """ self.group['domain_id'] = CONF.identity.default_domain_id self.patch( - '/groups/%(group_id)s' % {'group_id': self.group['id']}, + '/groups/{group_id}'.format(group_id=self.group['id']), body={'group': self.group}, expected_status=exception.ValidationError.code, ) def test_delete_group(self): """Call ``DELETE /groups/{group_id}``.""" - self.delete('/groups/%(group_id)s' % {'group_id': self.group_id}) + self.delete(f'/groups/{self.group_id}') def test_create_user_password_not_logged(self): # When a user is created, the password isn't logged at any level. @@ -778,7 +778,7 @@ class IdentityTestCase(test_v3.RestfulTestCase): # in HTTP 400 user = {'default_project_id': self.domain_id} self.patch( - '/users/%(user_id)s' % {'user_id': self.user['id']}, + '/users/{user_id}'.format(user_id=self.user['id']), body={'user': user}, token=CONF.admin_token, expected_status=http.client.BAD_REQUEST, @@ -788,7 +788,7 @@ class IdentityTestCase(test_v3.RestfulTestCase): class ChangePasswordTestCase(test_v3.RestfulTestCase): def setUp(self): - super(ChangePasswordTestCase, self).setUp() + super().setUp() self.user_ref = unit.create_user( PROVIDERS.identity_api, domain_id=self.domain['id'] ) @@ -1137,7 +1137,7 @@ class UserSelfServiceChangingPasswordsTestCase(ChangePasswordTestCase): class PasswordValidationTestCase(ChangePasswordTestCase): def setUp(self): - super(PasswordValidationTestCase, self).setUp() + super().setUp() # passwords requires: 1 letter, 1 digit, 7 chars self.config_fixture.config( group='security_compliance', @@ -1160,7 +1160,7 @@ class PasswordValidationTestCase(ChangePasswordTestCase): ) user['password'] = 'simple' self.patch( - '/users/%(user_id)s' % {'user_id': user['id']}, + '/users/{user_id}'.format(user_id=user['id']), body={'user': user}, expected_status=http.client.BAD_REQUEST, ) @@ -1236,7 +1236,7 @@ class UserFederatedAttributesTests(test_v3.RestfulTestCase): return identity_base.filter_user(user_ref.to_dict()) def setUp(self): - super(UserFederatedAttributesTests, self).setUp() + super().setUp() self.useFixture(database.Database()) self.load_backends() # Create the federated object @@ -1275,12 +1275,12 @@ class UserFederatedAttributesTests(test_v3.RestfulTestCase): def _test_list_users_with_federated_parameter(self, parameter): # construct the resource url based off what's passed in parameter - resource_url = '/users?%s=%s' % ( + resource_url = '/users?{}={}'.format( parameter[0], self.fed_dict[parameter[0]], ) for attr in parameter[1:]: - resource_url += '&%s=%s' % (attr, self.fed_dict[attr]) + resource_url += f'&{attr}={self.fed_dict[attr]}' r = self.get(resource_url) # Check that only one out of 3 fed_users is matched by calling the api # and that it is a valid response @@ -1293,12 +1293,12 @@ class UserFederatedAttributesTests(test_v3.RestfulTestCase): if not any('unique_id' in x for x in parameter): # Check that we get two matches here since fed_user2 and fed_user3 # both have the same idp and protocol - resource_url = '/users?%s=%s' % ( + resource_url = '/users?{}={}'.format( parameter[0], self.fed_dict2[parameter[0]], ) for attr in parameter[1:]: - resource_url += '&%s=%s' % (attr, self.fed_dict2[attr]) + resource_url += f'&{attr}={self.fed_dict2[attr]}' r = self.get(resource_url) self.assertEqual(2, len(r.result['users'])) self.assertValidUserListResponse( @@ -1340,7 +1340,7 @@ class UserFederatedAttributesTests(test_v3.RestfulTestCase): self.assertIn('protocols', user['federated'][0]) self.assertIn('protocol_id', user['federated'][0]['protocols'][0]) self.assertIn('unique_id', user['federated'][0]['protocols'][0]) - r = self.get('/users/%(user_id)s' % {'user_id': user['id']}) + r = self.get('/users/{user_id}'.format(user_id=user['id'])) self.assertValidUserResponse(r, user) def test_create_user_with_federated_attributes(self): @@ -1409,7 +1409,7 @@ class UserFederatedAttributesTests(test_v3.RestfulTestCase): } ] r = self.patch( - '/users/%(user_id)s' % {'user_id': self.fed_user['id']}, + '/users/{user_id}'.format(user_id=self.fed_user['id']), body={'user': user}, ) resp_user = r.result['user'] @@ -1435,13 +1435,13 @@ class UserFederatedAttributesTests(test_v3.RestfulTestCase): ] self.patch( - '/users/%(user_id)s' % {'user_id': self.fed_user['id']}, + '/users/{user_id}'.format(user_id=self.fed_user['id']), body={'user': user}, expected_status=http.client.BAD_REQUEST, ) user['federated'][0]['idp_id'] = idp['id'] self.patch( - '/users/%(user_id)s' % {'user_id': self.fed_user['id']}, + '/users/{user_id}'.format(user_id=self.fed_user['id']), body={'user': user}, expected_status=http.client.BAD_REQUEST, ) diff --git a/keystone/tests/unit/test_v3_oauth1.py b/keystone/tests/unit/test_v3_oauth1.py index 9a9b64f4d9..66192f0efe 100644 --- a/keystone/tests/unit/test_v3_oauth1.py +++ b/keystone/tests/unit/test_v3_oauth1.py @@ -51,7 +51,7 @@ class OAuth1Tests(test_v3.RestfulTestCase): CONSUMER_URL = '/OS-OAUTH1/consumers' def setUp(self): - super(OAuth1Tests, self).setUp() + super().setUp() # Now that the app has been served, we can query CONF values self.base_url = 'http://localhost/v3' @@ -265,9 +265,9 @@ class ConsumerCRUDTests(OAuth1Tests): self.assertIsNotNone(consumer['secret']) def test_consumer_get_bad_id(self): - url = self.CONSUMER_URL + '/%(consumer_id)s' % { - 'consumer_id': uuid.uuid4().hex - } + url = self.CONSUMER_URL + '/{consumer_id}'.format( + consumer_id=uuid.uuid4().hex + ) self.get(url, expected_status=http.client.NOT_FOUND) self.head(url, expected_status=http.client.NOT_FOUND) @@ -349,9 +349,9 @@ class AccessTokenCRUDTests(OAuthFlowTests): ) def test_list_no_access_tokens(self): - url = '/users/%(user_id)s/OS-OAUTH1/access_tokens' % { - 'user_id': self.user_id - } + url = '/users/{user_id}/OS-OAUTH1/access_tokens'.format( + user_id=self.user_id + ) resp = self.get(url) entities = resp.result['access_tokens'] self.assertEqual([], entities) @@ -363,10 +363,10 @@ class AccessTokenCRUDTests(OAuthFlowTests): self.test_oauth_flow() access_token_key_string = self.access_token.key.decode() - url = '/users/%(user_id)s/OS-OAUTH1/access_tokens/%(key)s' % { - 'user_id': self.user_id, - 'key': access_token_key_string, - } + url = '/users/{user_id}/OS-OAUTH1/access_tokens/{key}'.format( + user_id=self.user_id, + key=access_token_key_string, + ) resp = self.get(url) entity = resp.result['access_token'] self.assertEqual(access_token_key_string, entity['id']) @@ -376,19 +376,19 @@ class AccessTokenCRUDTests(OAuthFlowTests): self.head(url, expected_status=http.client.OK) def test_get_access_token_dne(self): - url = '/users/%(user_id)s/OS-OAUTH1/access_tokens/%(key)s' % { - 'user_id': self.user_id, - 'key': uuid.uuid4().hex, - } + url = '/users/{user_id}/OS-OAUTH1/access_tokens/{key}'.format( + user_id=self.user_id, + key=uuid.uuid4().hex, + ) self.get(url, expected_status=http.client.NOT_FOUND) self.head(url, expected_status=http.client.NOT_FOUND) def test_list_all_roles_in_access_token(self): self.test_oauth_flow() - url = '/users/%(id)s/OS-OAUTH1/access_tokens/%(key)s/roles' % { - 'id': self.user_id, - 'key': self.access_token.key.decode(), - } + url = '/users/{id}/OS-OAUTH1/access_tokens/{key}/roles'.format( + id=self.user_id, + key=self.access_token.key.decode(), + ) resp = self.get(url) entities = resp.result['roles'] self.assertTrue(entities) @@ -432,9 +432,9 @@ class AccessTokenCRUDTests(OAuthFlowTests): def test_list_and_delete_access_tokens(self): self.test_oauth_flow() # List access_tokens should be > 0 - url = '/users/%(user_id)s/OS-OAUTH1/access_tokens' % { - 'user_id': self.user_id - } + url = '/users/{user_id}/OS-OAUTH1/access_tokens'.format( + user_id=self.user_id + ) resp = self.get(url) self.head(url, expected_status=http.client.OK) entities = resp.result['access_tokens'] @@ -457,7 +457,7 @@ class AccessTokenCRUDTests(OAuthFlowTests): self.assertValidListLinks(resp.result['links']) -class AuthTokenTests(object): +class AuthTokenTests: def test_keystone_token_is_valid(self): self.test_oauth_flow() @@ -555,7 +555,7 @@ class AuthTokenTests(object): user = {'password': uuid.uuid4().hex} r = self.patch( - '/users/%(user_id)s' % {'user_id': self.user['id']}, + '/users/{user_id}'.format(user_id=self.user['id']), body={'user': user}, ) headers = {'X-Subject-Token': self.keystone_token_id} @@ -577,9 +577,7 @@ class AuthTokenTests(object): r = self.get('/auth/tokens', headers=headers) self.assertValidTokenResponse(r, self.user) - r = self.delete( - '/projects/%(project_id)s' % {'project_id': self.project_id} - ) + r = self.delete(f'/projects/{self.project_id}') headers = {'X-Subject-Token': self.keystone_token_id} self.get( @@ -745,7 +743,7 @@ class AuthTokenTests(object): class FernetAuthTokenTests(AuthTokenTests, OAuthFlowTests): def config_overrides(self): - super(FernetAuthTokenTests, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='token', provider='fernet') self.useFixture( ksfixtures.KeyRepository( @@ -1380,7 +1378,7 @@ class OAuthCADFNotificationTests(OAuthNotificationTests): def setUp(self): """Repeat the tests for CADF notifications.""" - super(OAuthCADFNotificationTests, self).setUp() + super().setUp() self.config_fixture.config(notification_format='cadf') diff --git a/keystone/tests/unit/test_v3_oauth2.py b/keystone/tests/unit/test_v3_oauth2.py index b5f2e33bda..1facfa9884 100644 --- a/keystone/tests/unit/test_v3_oauth2.py +++ b/keystone/tests/unit/test_v3_oauth2.py @@ -45,7 +45,7 @@ class OAuth2AuthnMethodsTests(test_v3.OAuth2RestfulTestCase): ACCESS_TOKEN_URL = '/OS-OAUTH2/token' def setUp(self): - super(OAuth2AuthnMethodsTests, self).setUp() + super().setUp() self.config_fixture.config( group='oauth2', oauth2_authn_methods=['client_secret_basic', 'tls_client_auth'], @@ -214,7 +214,7 @@ class OAuth2SecretBasicTests(test_v3.OAuth2RestfulTestCase): ACCESS_TOKEN_URL = '/OS-OAUTH2/token' def setUp(self): - super(OAuth2SecretBasicTests, self).setUp() + super().setUp() log.set_defaults( logging_context_format_string='%(asctime)s.%(msecs)03d %(' 'color)s%(levelname)s %(name)s [^[[' @@ -720,7 +720,7 @@ class OAuth2CertificateTests(test_v3.OAuth2RestfulTestCase): ACCESS_TOKEN_URL = '/OS-OAUTH2/token' def setUp(self): - super(OAuth2CertificateTests, self).setUp() + super().setUp() self.log_fix = self.useFixture(fixtures.FakeLogger(level=log.DEBUG)) self.config_fixture.config( group='oauth2', oauth2_authn_methods=['tls_client_auth'] diff --git a/keystone/tests/unit/test_v3_os_revoke.py b/keystone/tests/unit/test_v3_os_revoke.py index 37bd05d792..091b09e02a 100644 --- a/keystone/tests/unit/test_v3_os_revoke.py +++ b/keystone/tests/unit/test_v3_os_revoke.py @@ -194,7 +194,7 @@ class OSRevokeTests(test_v3.RestfulTestCase, test_v3.JsonHomeTestMixin): # NOTE(mnikolaenko): raise 2 deadlocks and back to normal work of # method. Two attempts is enough to check that retry decorator works. # Otherwise it will take very much time to pass this test - class FakeDeadlock(object): + class FakeDeadlock: def __init__(self, mock_patcher): self.deadlock_count = 2 self.mock_patcher = mock_patcher diff --git a/keystone/tests/unit/test_v3_policy.py b/keystone/tests/unit/test_v3_policy.py index 4db15a471b..6106bae001 100644 --- a/keystone/tests/unit/test_v3_policy.py +++ b/keystone/tests/unit/test_v3_policy.py @@ -28,7 +28,7 @@ class PolicyTestCase(test_v3.RestfulTestCase): """Test policy CRUD.""" def setUp(self): - super(PolicyTestCase, self).setUp() + super().setUp() self.policy = unit.new_policy_ref() self.policy_id = self.policy['id'] PROVIDERS.policy_api.create_policy(self.policy_id, self.policy.copy()) @@ -50,9 +50,7 @@ class PolicyTestCase(test_v3.RestfulTestCase): def test_get_head_policy(self): """Call ``GET & HEAD /policies/{policy_id}``.""" - resource_url = '/policies/%(policy_id)s' % { - 'policy_id': self.policy_id - } + resource_url = f'/policies/{self.policy_id}' r = self.get(resource_url) self.assertValidPolicyResponse(r, self.policy) self.head(resource_url, expected_status=http.client.OK) @@ -65,11 +63,11 @@ class PolicyTestCase(test_v3.RestfulTestCase): } ) r = self.patch( - '/policies/%(policy_id)s' % {'policy_id': self.policy_id}, + f'/policies/{self.policy_id}', body={'policy': self.policy}, ) self.assertValidPolicyResponse(r, self.policy) def test_delete_policy(self): """Call ``DELETE /policies/{policy_id}``.""" - self.delete('/policies/%(policy_id)s' % {'policy_id': self.policy_id}) + self.delete(f'/policies/{self.policy_id}') diff --git a/keystone/tests/unit/test_v3_resource.py b/keystone/tests/unit/test_v3_resource.py index 1bc4e669f1..f812200f45 100644 --- a/keystone/tests/unit/test_v3_resource.py +++ b/keystone/tests/unit/test_v3_resource.py @@ -33,7 +33,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): """Test domains and projects.""" def setUp(self): - super(ResourceTestCase, self).setUp() + super().setUp() self.useFixture( ksfixtures.KeyRepository( self.config_fixture, @@ -134,7 +134,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): # Retrieve its correspondent domain r = self.get( - '/domains/%(domain_id)s' % {'domain_id': r.result['project']['id']} + '/domains/{domain_id}'.format(domain_id=r.result['project']['id']) ) self.assertValidDomainResponse(r) self.assertIsNotNone(r.result['domain']) @@ -148,9 +148,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): r = self.post('/domains', body={'domain': ref}) self.assertValidDomainResponse(r, ref) - r = self.get( - '/domains/%(domain_id)s' % {'domain_id': explicit_domain_id} - ) + r = self.get(f'/domains/{explicit_domain_id}') self.assertValidDomainResponse(r) self.assertIsNotNone(r.result['domain']) @@ -214,7 +212,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): def test_get_head_domain(self): """Call ``GET /domains/{domain_id}``.""" - resource_url = '/domains/%(domain_id)s' % {'domain_id': self.domain_id} + resource_url = f'/domains/{self.domain_id}' r = self.get(resource_url) self.assertValidDomainResponse(r, self.domain) self.head(resource_url, expected_status=http.client.OK) @@ -224,7 +222,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): ref = unit.new_domain_ref() del ref['id'] r = self.patch( - '/domains/%(domain_id)s' % {'domain_id': self.domain_id}, + f'/domains/{self.domain_id}', body={'domain': ref}, ) self.assertValidDomainResponse(r, ref) @@ -239,7 +237,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): ref = unit.new_domain_ref(name=unsafe_name) del ref['id'] self.patch( - '/domains/%(domain_id)s' % {'domain_id': self.domain_id}, + f'/domains/{self.domain_id}', body={'domain': ref}, ) @@ -251,7 +249,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): ref = unit.new_domain_ref(name=unsafe_name) del ref['id'] self.patch( - '/domains/%(domain_id)s' % {'domain_id': self.domain_id}, + f'/domains/{self.domain_id}', body={'domain': ref}, expected_status=http.client.BAD_REQUEST, ) @@ -264,7 +262,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): ref = unit.new_domain_ref(name=unsafe_name) del ref['id'] self.patch( - '/domains/%(domain_id)s' % {'domain_id': self.domain_id}, + f'/domains/{self.domain_id}', body={'domain': ref}, ) @@ -327,7 +325,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): # Now disable the domain domain2['enabled'] = False r = self.patch( - '/domains/%(domain_id)s' % {'domain_id': domain2['id']}, + '/domains/{domain_id}'.format(domain_id=domain2['id']), body={'domain': {'enabled': False}}, ) self.assertValidDomainResponse(r, domain2) @@ -356,7 +354,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): """Call ``DELETE /domains/{domain_id}`` (when domain enabled).""" # Try deleting an enabled domain, which should fail self.delete( - '/domains/%(domain_id)s' % {'domain_id': self.domain['id']}, + '/domains/{domain_id}'.format(domain_id=self.domain['id']), expected_status=exception.ForbiddenAction.code, ) @@ -418,11 +416,11 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): # Now disable the new domain and delete it domain2['enabled'] = False r = self.patch( - '/domains/%(domain_id)s' % {'domain_id': domain2['id']}, + '/domains/{domain_id}'.format(domain_id=domain2['id']), body={'domain': {'enabled': False}}, ) self.assertValidDomainResponse(r, domain2) - self.delete('/domains/%(domain_id)s' % {'domain_id': domain2['id']}) + self.delete('/domains/{domain_id}'.format(domain_id=domain2['id'])) # Check all the domain2 relevant entities are gone self.assertRaises( @@ -478,7 +476,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): ) # Disable and delete the domain with no error. self.patch( - '/domains/%(domain_id)s' % {'domain_id': domain_id}, + f'/domains/{domain_id}', body={'domain': {'enabled': False}}, ) self.delete('/domains/%s' % domain_id) @@ -564,7 +562,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): # now disable the domain domain['enabled'] = False - url = "/domains/%(domain_id)s" % {'domain_id': domain['id']} + url = "/domains/{domain_id}".format(domain_id=domain['id']) self.patch(url, body={'domain': {'enabled': False}}) # validates the same token again and it should be 'not found' @@ -592,11 +590,11 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): # Need to disable it first. self.patch( - '/domains/%(domain_id)s' % {'domain_id': domain['id']}, + '/domains/{domain_id}'.format(domain_id=domain['id']), body={'domain': {'enabled': False}}, ) - self.delete('/domains/%(domain_id)s' % {'domain_id': domain['id']}) + self.delete('/domains/{domain_id}'.format(domain_id=domain['id'])) self.assertRaises( exception.DomainNotFound, @@ -771,14 +769,14 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): def test_create_project_with_parent_id_none_and_domain_id_none(self): """Call ``POST /projects``.""" # Grant a domain role for the user - collection_url = '/domains/%(domain_id)s/users/%(user_id)s/roles' % { - 'domain_id': self.domain_id, - 'user_id': self.user['id'], - } - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': self.role_id, - } + collection_url = '/domains/{domain_id}/users/{user_id}/roles'.format( + domain_id=self.domain_id, + user_id=self.user['id'], + ) + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=self.role_id, + ) self.put(member_url) # Create an authentication request for a domain scoped token @@ -799,14 +797,14 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): def test_create_project_without_parent_id_and_without_domain_id(self): """Call ``POST /projects``.""" # Grant a domain role for the user - collection_url = '/domains/%(domain_id)s/users/%(user_id)s/roles' % { - 'domain_id': self.domain_id, - 'user_id': self.user['id'], - } - member_url = '%(collection_url)s/%(role_id)s' % { - 'collection_url': collection_url, - 'role_id': self.role_id, - } + collection_url = '/domains/{domain_id}/users/{user_id}/roles'.format( + domain_id=self.domain_id, + user_id=self.user['id'], + ) + member_url = '{collection_url}/{role_id}'.format( + collection_url=collection_url, + role_id=self.role_id, + ) self.put(member_url) # Create an authentication request for a domain scoped token @@ -898,7 +896,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): """Call ``GET /projects?tags={tags}``.""" project, tags = self._create_project_and_tags(num_of_tags=2) tag_string = ','.join(tags) - resp = self.get('/projects?tags=%(values)s' % {'values': tag_string}) + resp = self.get(f'/projects?tags={tag_string}') self.assertValidProjectListResponse(resp) self.assertEqual(project['id'], resp.result['projects'][0]['id']) @@ -907,9 +905,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): project, tags = self._create_project_and_tags(num_of_tags=2) project1, tags1 = self._create_project_and_tags(num_of_tags=2) tag_string = tags[0] + ',' + tags1[0] - resp = self.get( - '/projects?tags-any=%(values)s' % {'values': tag_string} - ) + resp = self.get(f'/projects?tags-any={tag_string}') pids = [p['id'] for p in resp.result['projects']] self.assertValidProjectListResponse(resp) self.assertIn(project['id'], pids) @@ -920,9 +916,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): project1, tags1 = self._create_project_and_tags(num_of_tags=2) project2, tags2 = self._create_project_and_tags(num_of_tags=2) tag_string = ','.join(tags1) - resp = self.get( - '/projects?not-tags=%(values)s' % {'values': tag_string} - ) + resp = self.get(f'/projects?not-tags={tag_string}') self.assertValidProjectListResponse(resp) pids = [p['id'] for p in resp.result['projects']] self.assertNotIn(project1['id'], pids) @@ -934,9 +928,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): project2, tags2 = self._create_project_and_tags(num_of_tags=2) project3, tags3 = self._create_project_and_tags(num_of_tags=2) tag_string = tags1[0] + ',' + tags2[0] - resp = self.get( - '/projects?not-tags-any=%(values)s' % {'values': tag_string} - ) + resp = self.get(f'/projects?not-tags-any={tag_string}') self.assertValidProjectListResponse(resp) pids = [p['id'] for p in resp.result['projects']] self.assertNotIn(project1['id'], pids) @@ -950,12 +942,12 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): project3, tags3 = self._create_project_and_tags(num_of_tags=2) tags1_query = ','.join(tags1) resp = self.patch( - '/projects/%(project_id)s' % {'project_id': project3['id']}, + '/projects/{project_id}'.format(project_id=project3['id']), body={'project': {'tags': tags1}}, ) tags1.append(tags2[0]) resp = self.patch( - '/projects/%(project_id)s' % {'project_id': project1['id']}, + '/projects/{project_id}'.format(project_id=project1['id']), body={'project': {'tags': tags1}}, ) url = '/projects?tags=%(value1)s&tags-any=%(value2)s' @@ -1000,7 +992,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): project, tags = self._create_project_and_tags(num_of_tags=2) ref = {'project': {'name': 'tags and name'}} resp = self.patch( - '/projects/%(project_id)s' % {'project_id': project['id']}, + '/projects/{project_id}'.format(project_id=project['id']), body=ref, ) url = '/projects?tags-any=%(values)s&name=%(name)s' @@ -1073,9 +1065,9 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): def test_get_head_project(self): """Call ``GET & HEAD /projects/{project_id}``.""" - resource_url = '/projects/%(project_id)s' % { - 'project_id': self.project_id - } + resource_url = '/projects/{project_id}'.format( + project_id=self.project_id + ) r = self.get(resource_url) self.assertValidProjectResponse(r, self.project) self.head(resource_url, expected_status=http.client.OK) @@ -1083,7 +1075,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): def test_get_project_with_parents_as_list_with_invalid_id(self): """Call ``GET /projects/{project_id}?parents_as_list``.""" self.get( - '/projects/%(project_id)s?parents_as_list' % {'project_id': None}, + f'/projects/{None}?parents_as_list', expected_status=http.client.NOT_FOUND, ) @@ -1096,7 +1088,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): def test_get_project_with_subtree_as_list_with_invalid_id(self): """Call ``GET /projects/{project_id}?subtree_as_list``.""" self.get( - '/projects/%(project_id)s?subtree_as_list' % {'project_id': None}, + f'/projects/{None}?subtree_as_list', expected_status=http.client.NOT_FOUND, ) @@ -1606,7 +1598,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): ) del ref['id'] r = self.patch( - '/projects/%(project_id)s' % {'project_id': self.project_id}, + f'/projects/{self.project_id}', body={'project': ref}, ) self.assertValidProjectResponse(r, ref) @@ -1625,7 +1617,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): ) del ref['id'] self.patch( - '/projects/%(project_id)s' % {'project_id': self.project_id}, + f'/projects/{self.project_id}', body={'project': ref}, ) @@ -1641,7 +1633,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): ) del ref['id'] self.patch( - '/projects/%(project_id)s' % {'project_id': self.project_id}, + f'/projects/{self.project_id}', body={'project': ref}, expected_status=http.client.BAD_REQUEST, ) @@ -1658,7 +1650,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): ) del ref['id'] self.patch( - '/projects/%(project_id)s' % {'project_id': self.project_id}, + f'/projects/{self.project_id}', body={'project': ref}, ) @@ -1672,7 +1664,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): project = PROVIDERS.resource_api.create_project(project['id'], project) project['domain_id'] = CONF.identity.default_domain_id self.patch( - '/projects/%(project_id)s' % {'project_id': project['id']}, + '/projects/{project_id}'.format(project_id=project['id']), body={'project': project}, expected_status=exception.ValidationError.code, ) @@ -1683,7 +1675,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): leaf_project = projects[1]['project'] leaf_project['parent_id'] = None self.patch( - '/projects/%(project_id)s' % {'project_id': leaf_project['id']}, + '/projects/{project_id}'.format(project_id=leaf_project['id']), body={'project': leaf_project}, expected_status=http.client.FORBIDDEN, ) @@ -1712,7 +1704,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): leaf_project = projects[1]['project'] leaf_project['enabled'] = False r = self.patch( - '/projects/%(project_id)s' % {'project_id': leaf_project['id']}, + '/projects/{project_id}'.format(project_id=leaf_project['id']), body={'project': leaf_project}, ) self.assertEqual( @@ -1725,7 +1717,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): root_project = projects[0]['project'] root_project['enabled'] = False self.patch( - '/projects/%(project_id)s' % {'project_id': root_project['id']}, + '/projects/{project_id}'.format(project_id=root_project['id']), body={'project': root_project}, expected_status=http.client.FORBIDDEN, ) @@ -1759,9 +1751,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): ) # Now delete the project - self.delete( - '/projects/%(project_id)s' % {'project_id': self.project_id} - ) + self.delete(f'/projects/{self.project_id}') # Deleting the project should have deleted any credentials # that reference this project @@ -1786,7 +1776,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): def test_create_project_with_tags(self): project, tags = self._create_project_and_tags(num_of_tags=10) ref = self.get( - '/projects/%(project_id)s' % {'project_id': project['id']}, + '/projects/{project_id}'.format(project_id=project['id']), expected_status=http.client.OK, ) self.assertIn('tags', ref.result['project']) @@ -1798,7 +1788,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): tag = uuid.uuid4().hex project['tags'].append(tag) ref = self.patch( - '/projects/%(project_id)s' % {'project_id': self.project_id}, + f'/projects/{self.project_id}', body={'project': {'tags': project['tags']}}, ) self.assertIn(tag, ref.result['project']['tags']) @@ -1824,7 +1814,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): expected_status=http.client.CREATED, ) resp = self.get( - '/projects/%(project_id)s' % {'project_id': self.project_id}, + f'/projects/{self.project_id}', expected_status=http.client.OK, ) for tag in case_tags: @@ -1867,7 +1857,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): def test_delete_project_tags(self): project, tags = self._create_project_and_tags(num_of_tags=5) self.delete( - '/projects/%(project_id)s/tags/' % {'project_id': project['id']}, + '/projects/{project_id}/tags/'.format(project_id=project['id']), expected_status=http.client.NO_CONTENT, ) self.get( @@ -1876,7 +1866,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): expected_status=http.client.NOT_FOUND, ) resp = self.get( - '/projects/%(project_id)s/tags/' % {'project_id': self.project_id}, + f'/projects/{self.project_id}/tags/', expected_status=http.client.OK, ) self.assertEqual(len(resp.result['tags']), 0) @@ -1937,7 +1927,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): def test_list_project_tags(self): project, tags = self._create_project_and_tags(num_of_tags=5) resp = self.get( - '/projects/%(project_id)s/tags' % {'project_id': project['id']}, + '/projects/{project_id}/tags'.format(project_id=project['id']), expected_status=http.client.OK, ) for tag in tags: @@ -1953,7 +1943,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): def test_list_project_tags_for_project_with_no_tags(self): resp = self.get( - '/projects/%(project_id)s/tags' % {'project_id': self.project_id}, + f'/projects/{self.project_id}/tags', expected_status=http.client.OK, ) self.assertEqual([], resp.result['tags']) @@ -1968,7 +1958,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): def test_update_project_tags(self): project, tags = self._create_project_and_tags(num_of_tags=5) resp = self.put( - '/projects/%(project_id)s/tags' % {'project_id': project['id']}, + '/projects/{project_id}/tags'.format(project_id=project['id']), body={'tags': tags}, expected_status=http.client.OK, ) @@ -1983,7 +1973,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): expected_status=http.client.CREATED, ) resp = self.put( - '/projects/%(project_id)s/tags' % {'project_id': project['id']}, + '/projects/{project_id}/tags'.format(project_id=project['id']), body={'tags': tags}, expected_status=http.client.OK, ) @@ -2007,7 +1997,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): tags = [uuid.uuid4().hex for i in range(81)] tags.append(uuid.uuid4().hex) self.put( - '/projects/%(project_id)s/tags' % {'project_id': project['id']}, + '/projects/{project_id}/tags'.format(project_id=project['id']), body={'tags': tags}, expected_status=http.client.BAD_REQUEST, ) @@ -2036,7 +2026,7 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): } ) - resp = self.get('/users/%(user)s/projects' % {'user': user['id']}) + resp = self.get('/users/{user}/projects'.format(user=user['id'])) self.assertValidProjectListResponse(resp) self.assertEqual([], resp.result['projects']) @@ -2044,17 +2034,17 @@ class ResourceTestCase(test_v3.RestfulTestCase, test_v3.AssignmentTestMixin): resp = self.post('/projects', body={'project': project_ref}) project = resp.result['project'] - resp = self.get('/users/%(user)s/projects' % {'user': user['id']}) + resp = self.get('/users/{user}/projects'.format(user=user['id'])) self.assertValidProjectListResponse(resp) self.assertEqual(project['id'], resp.result['projects'][0]['id']) class StrictTwoLevelLimitsResourceTestCase(ResourceTestCase): def setUp(self): - super(StrictTwoLevelLimitsResourceTestCase, self).setUp() + super().setUp() def config_overrides(self): - super(StrictTwoLevelLimitsResourceTestCase, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='unified_limit', enforcement_model='strict_two_level' ) @@ -2065,9 +2055,7 @@ class StrictTwoLevelLimitsResourceTestCase(ResourceTestCase): "Strict two level limit enforcement model doesn't allow the" "project tree depth > 2" ) - return super( - StrictTwoLevelLimitsResourceTestCase, self - )._create_projects_hierarchy(hierarchy_size) + return super()._create_projects_hierarchy(hierarchy_size) def test_create_hierarchical_project(self): projects = self._create_projects_hierarchy() diff --git a/keystone/tests/unit/test_v3_trust.py b/keystone/tests/unit/test_v3_trust.py index cdde77c1f5..90e933c134 100644 --- a/keystone/tests/unit/test_v3_trust.py +++ b/keystone/tests/unit/test_v3_trust.py @@ -35,7 +35,7 @@ class TestTrustOperations(test_v3.RestfulTestCase): """ def setUp(self): - super(TestTrustOperations, self).setUp() + super().setUp() # create a trustee to delegate stuff to self.trustee_user = unit.create_user( PROVIDERS.identity_api, domain_id=self.domain_id @@ -98,13 +98,13 @@ class TestTrustOperations(test_v3.RestfulTestCase): ) trust_id = r.json['trust']['id'] c.patch( - '/v3/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust_id}, + f'/v3/OS-TRUST/trusts/{trust_id}', json={'trust': ref}, headers={'X-Auth-Token': token}, expected_status_code=http.client.METHOD_NOT_ALLOWED, ) c.put( - '/v3/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust_id}, + f'/v3/OS-TRUST/trusts/{trust_id}', json={'trust': ref}, headers={'X-Auth-Token': token}, expected_status_code=http.client.METHOD_NOT_ALLOWED, @@ -123,13 +123,13 @@ class TestTrustOperations(test_v3.RestfulTestCase): # get the trust r = self.get( - '/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust['id']} + '/OS-TRUST/trusts/{trust_id}'.format(trust_id=trust['id']) ) self.assertValidTrustResponse(r, ref) # validate roles on the trust r = self.get( - '/OS-TRUST/trusts/%(trust_id)s/roles' % {'trust_id': trust['id']} + '/OS-TRUST/trusts/{trust_id}/roles'.format(trust_id=trust['id']) ) roles = self.assertValidRoleListResponse(r, self.role) self.assertIn(self.role['id'], [x['id'] for x in roles]) @@ -149,13 +149,11 @@ class TestTrustOperations(test_v3.RestfulTestCase): self.assertValidTrustListResponse(r, trust) # delete the trust - self.delete( - '/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust['id']} - ) + self.delete('/OS-TRUST/trusts/{trust_id}'.format(trust_id=trust['id'])) # ensure the trust is not found self.get( - '/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust['id']}, + '/OS-TRUST/trusts/{trust_id}'.format(trust_id=trust['id']), expected_status=http.client.NOT_FOUND, ) @@ -251,13 +249,11 @@ class TestTrustOperations(test_v3.RestfulTestCase): trust = self.assertValidTrustResponse(r, ref) # delete the trust - self.delete( - '/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust['id']} - ) + self.delete('/OS-TRUST/trusts/{trust_id}'.format(trust_id=trust['id'])) # ensure the trust isn't found self.get( - '/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust['id']}, + '/OS-TRUST/trusts/{trust_id}'.format(trust_id=trust['id']), expected_status=http.client.NOT_FOUND, ) @@ -546,11 +542,11 @@ class TestTrustOperations(test_v3.RestfulTestCase): # delete the trustee will delete the trust self.delete( - '/users/%(user_id)s' % {'user_id': trust['trustee_user_id']} + '/users/{user_id}'.format(user_id=trust['trustee_user_id']) ) self.get( - '/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust['id']}, + '/OS-TRUST/trusts/{trust_id}'.format(trust_id=trust['id']), expected_status=http.client.NOT_FOUND, ) @@ -569,7 +565,7 @@ class TestTrustOperations(test_v3.RestfulTestCase): # delete the trustor will delete the trust self.delete( - '/users/%(user_id)s' % {'user_id': trust['trustor_user_id']} + '/users/{user_id}'.format(user_id=trust['trustor_user_id']) ) # call the backend method directly to bypass authentication since the @@ -598,7 +594,7 @@ class TestTrustOperations(test_v3.RestfulTestCase): # delete the project will delete the trust. self.delete( - '/projects/%(project_id)s' % {'project_id': trust['project_id']} + '/projects/{project_id}'.format(project_id=trust['project_id']) ) # call the backend method directly to bypass authentication since the @@ -611,14 +607,14 @@ class TestTrustOperations(test_v3.RestfulTestCase): class TrustsWithApplicationCredentials(test_v3.RestfulTestCase): def setUp(self): - super(TrustsWithApplicationCredentials, self).setUp() + super().setUp() self.trustee_user = unit.create_user( PROVIDERS.identity_api, domain_id=self.domain_id ) self.trustee_user_id = self.trustee_user['id'] def config_overrides(self): - super(TrustsWithApplicationCredentials, self).config_overrides() + super().config_overrides() self.config_fixture.config( group='auth', methods='password,application_credential' ) @@ -683,7 +679,7 @@ class TrustsWithApplicationCredentials(test_v3.RestfulTestCase): ) # delete the trust self.delete( - path='/OS-TRUST/trusts/%(trust_id)s' % {'trust_id': trust['id']}, + path='/OS-TRUST/trusts/{trust_id}'.format(trust_id=trust['id']), token=token_data.headers['x-subject-token'], expected_status=http.client.FORBIDDEN, ) diff --git a/keystone/tests/unit/test_validation.py b/keystone/tests/unit/test_validation.py index 3499adad8a..af05b56fc6 100644 --- a/keystone/tests/unit/test_validation.py +++ b/keystone/tests/unit/test_validation.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at @@ -171,7 +170,7 @@ class CommonValidationTestCase(unit.BaseTestCase): class EntityValidationTestCase(unit.BaseTestCase): def setUp(self): - super(EntityValidationTestCase, self).setUp() + super().setUp() self.resource_name = 'some resource name' self.description = 'Some valid description' self.valid_enabled = True @@ -229,7 +228,7 @@ class EntityValidationTestCase(unit.BaseTestCase): def test_create_entity_with_unicode_name_validates(self): """Test that we successfully validate a unicode string.""" - request_to_validate = {'name': u'αβγδ'} + request_to_validate = {'name': 'αβγδ'} self.create_schema_validator.validate(request_to_validate) def test_create_entity_with_invalid_enabled_format_raises_exception(self): @@ -415,7 +414,7 @@ class ProjectValidationTestCase(unit.BaseTestCase): """Test for V3 Project API validation.""" def setUp(self): - super(ProjectValidationTestCase, self).setUp() + super().setUp() self.project_name = 'My Project' @@ -672,7 +671,7 @@ class DomainValidationTestCase(unit.BaseTestCase): """Test for V3 Domain API validation.""" def setUp(self): - super(DomainValidationTestCase, self).setUp() + super().setUp() self.domain_name = 'My Domain' @@ -877,7 +876,7 @@ class RoleValidationTestCase(unit.BaseTestCase): """Test for V3 Role API validation.""" def setUp(self): - super(RoleValidationTestCase, self).setUp() + super().setUp() self.role_name = 'My Role' @@ -967,7 +966,7 @@ class PolicyValidationTestCase(unit.BaseTestCase): """Test for V3 Policy API validation.""" def setUp(self): - super(PolicyValidationTestCase, self).setUp() + super().setUp() create = policy_schema.policy_create update = policy_schema.policy_update @@ -1060,7 +1059,7 @@ class CredentialValidationTestCase(unit.BaseTestCase): """Test for V3 Credential API validation.""" def setUp(self): - super(CredentialValidationTestCase, self).setUp() + super().setUp() create = credential_schema.credential_create update = credential_schema.credential_update @@ -1201,7 +1200,7 @@ class RegionValidationTestCase(unit.BaseTestCase): """Test for V3 Region API validation.""" def setUp(self): - super(RegionValidationTestCase, self).setUp() + super().setUp() self.region_name = 'My Region' @@ -1283,7 +1282,7 @@ class ServiceValidationTestCase(unit.BaseTestCase): """Test for V3 Service API validation.""" def setUp(self): - super(ServiceValidationTestCase, self).setUp() + super().setUp() create = catalog_schema.service_create update = catalog_schema.service_update @@ -1470,7 +1469,7 @@ class EndpointValidationTestCase(unit.BaseTestCase): """Test for V3 Endpoint API validation.""" def setUp(self): - super(EndpointValidationTestCase, self).setUp() + super().setUp() create = catalog_schema.endpoint_create update = catalog_schema.endpoint_update @@ -1757,7 +1756,7 @@ class EndpointGroupValidationTestCase(unit.BaseTestCase): """Test for V3 Endpoint Group API validation.""" def setUp(self): - super(EndpointGroupValidationTestCase, self).setUp() + super().setUp() create = catalog_schema.endpoint_group_create update = catalog_schema.endpoint_group_update @@ -1893,7 +1892,7 @@ class TrustValidationTestCase(unit.BaseTestCase): _invalid_roles = [False, True, 123, None] def setUp(self): - super(TrustValidationTestCase, self).setUp() + super().setUp() create = trust_schema.trust_create self.create_trust_validator = validators.SchemaValidator(create) @@ -2067,7 +2066,7 @@ class ServiceProviderValidationTestCase(unit.BaseTestCase): """Test for V3 Service Provider API validation.""" def setUp(self): - super(ServiceProviderValidationTestCase, self).setUp() + super().setUp() self.valid_auth_url = 'https://' + uuid.uuid4().hex + '.com' self.valid_sp_url = 'https://' + uuid.uuid4().hex + '.com' @@ -2254,7 +2253,7 @@ class UserValidationTestCase(unit.BaseTestCase): """Test for V3 User API validation.""" def setUp(self): - super(UserValidationTestCase, self).setUp() + super().setUp() self.user_name = uuid.uuid4().hex @@ -2527,7 +2526,7 @@ class GroupValidationTestCase(unit.BaseTestCase): """Test for V3 Group API validation.""" def setUp(self): - super(GroupValidationTestCase, self).setUp() + super().setUp() self.group_name = uuid.uuid4().hex @@ -2611,7 +2610,7 @@ class ChangePasswordValidationTestCase(unit.BaseTestCase): """Test for Change Password API validation.""" def setUp(self): - super(ChangePasswordValidationTestCase, self).setUp() + super().setUp() self.original_password = uuid.uuid4().hex self.password = uuid.uuid4().hex @@ -2662,7 +2661,7 @@ class IdentityProviderValidationTestCase(unit.BaseTestCase): """Test for V3 Identity Provider API validation.""" def setUp(self): - super(IdentityProviderValidationTestCase, self).setUp() + super().setUp() create = federation_schema.identity_provider_create update = federation_schema.identity_provider_update @@ -2786,7 +2785,7 @@ class FederationProtocolValidationTestCase(unit.BaseTestCase): """Test for V3 Federation Protocol API validation.""" def setUp(self): - super(FederationProtocolValidationTestCase, self).setUp() + super().setUp() create = federation_schema.protocol_create update = federation_schema.protocol_update @@ -2875,7 +2874,7 @@ class OAuth1ValidationTestCase(unit.BaseTestCase): """Test for V3 Identity OAuth1 API validation.""" def setUp(self): - super(OAuth1ValidationTestCase, self).setUp() + super().setUp() create = oauth1_schema.consumer_create update = oauth1_schema.consumer_update @@ -2982,7 +2981,7 @@ class OAuth1ValidationTestCase(unit.BaseTestCase): class PasswordValidationTestCase(unit.TestCase): def setUp(self): - super(PasswordValidationTestCase, self).setUp() + super().setUp() # passwords requires: 1 letter, 1 digit, 7 chars self.config_fixture.config( group='security_compliance', @@ -3038,7 +3037,7 @@ class LimitValidationTestCase(unit.BaseTestCase): """Test for V3 Limits API validation.""" def setUp(self): - super(LimitValidationTestCase, self).setUp() + super().setUp() create_registered_limits = limit_schema.registered_limit_create update_registered_limits = limit_schema.registered_limit_update @@ -3443,7 +3442,7 @@ class ApplicationCredentialValidatorTestCase(unit.TestCase): _invalid_roles = [True, 123, None, {'badkey': 'badval'}] def setUp(self): - super(ApplicationCredentialValidatorTestCase, self).setUp() + super().setUp() create = app_cred_schema.application_credential_create self.create_app_cred_validator = validators.SchemaValidator(create) diff --git a/keystone/tests/unit/test_versions.py b/keystone/tests/unit/test_versions.py index 432b128902..c12f247de4 100644 --- a/keystone/tests/unit/test_versions.py +++ b/keystone/tests/unit/test_versions.py @@ -842,7 +842,7 @@ V3_JSON_HOME_RESOURCES = { } -class TestClient(object): +class TestClient: def __init__(self, app=None, token=None): self.app = app self.token = token @@ -874,7 +874,7 @@ class TestClient(object): class _VersionsEqual(tt_matchers.MatchesListwise): def __init__(self, expected): - super(_VersionsEqual, self).__init__( + super().__init__( [ tt_matchers.KeysEqual(expected), tt_matchers.KeysEqual(expected['versions']), @@ -884,7 +884,7 @@ class _VersionsEqual(tt_matchers.MatchesListwise): ) def match(self, other): - return super(_VersionsEqual, self).match( + return super().match( [ other, other['versions'], @@ -896,7 +896,7 @@ class _VersionsEqual(tt_matchers.MatchesListwise): class VersionTestCase(unit.TestCase): def setUp(self): - super(VersionTestCase, self).setUp() + super().setUp() self.load_backends() self.public_app = self.loadapp('public') self.public_port = random.randint(40000, 60000) @@ -906,7 +906,7 @@ class VersionTestCase(unit.TestCase): ) def config_overrides(self): - super(VersionTestCase, self).config_overrides() + super().config_overrides() def _paste_in_port(self, response, port): for link in response['links']: @@ -1059,15 +1059,15 @@ class VersionTestCase(unit.TestCase): self.assertThat(make_request(JSON_HOME), JSON_HOME_MATCHER) # If request JSON, JSON Home get JSON. - accept_types = '%s, %s' % (JSON, JSON_HOME) + accept_types = f'{JSON}, {JSON_HOME}' self.assertThat(make_request(accept_types), JSON_MATCHER) # If request JSON Home, JSON get JSON. - accept_types = '%s, %s' % (JSON_HOME, JSON) + accept_types = f'{JSON_HOME}, {JSON}' self.assertThat(make_request(accept_types), JSON_MATCHER) # If request JSON Home, JSON;q=0.5 get JSON Home. - accept_types = '%s, %s;q=0.5' % (JSON_HOME, JSON) + accept_types = f'{JSON_HOME}, {JSON};q=0.5' self.assertThat(make_request(accept_types), JSON_HOME_MATCHER) # If request some unknown mime-type, get JSON. @@ -1083,7 +1083,7 @@ class VersionSingleAppTestCase(unit.TestCase): """ def setUp(self): - super(VersionSingleAppTestCase, self).setUp() + super().setUp() self.load_backends() self.public_port = random.randint(40000, 60000) @@ -1093,7 +1093,7 @@ class VersionSingleAppTestCase(unit.TestCase): ) def config_overrides(self): - super(VersionSingleAppTestCase, self).config_overrides() + super().config_overrides() def _paste_in_port(self, response, port): for link in response['links']: diff --git a/keystone/tests/unit/token/test_fernet_provider.py b/keystone/tests/unit/token/test_fernet_provider.py index a5a545b48a..0828988349 100644 --- a/keystone/tests/unit/token/test_fernet_provider.py +++ b/keystone/tests/unit/token/test_fernet_provider.py @@ -44,7 +44,7 @@ PROVIDERS = provider_api.ProviderAPIs class TestFernetTokenProvider(unit.TestCase): def setUp(self): - super(TestFernetTokenProvider, self).setUp() + super().setUp() self.provider = fernet.Provider() def test_invalid_token_raises_token_not_found(self): @@ -112,7 +112,7 @@ class TestFernetTokenProvider(unit.TestCase): class TestValidate(unit.TestCase): def setUp(self): - super(TestValidate, self).setUp() + super().setUp() self.useFixture(database.Database()) self.load_backends() PROVIDERS.resource_api.create_domain( @@ -120,7 +120,7 @@ class TestValidate(unit.TestCase): ) def config_overrides(self): - super(TestValidate, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='token', provider='fernet') def test_validate_v3_token_simple(self): @@ -289,7 +289,7 @@ class TestValidate(unit.TestCase): class TestValidateWithoutCache(TestValidate): def config_overrides(self): - super(TestValidateWithoutCache, self).config_overrides() + super().config_overrides() self.config_fixture.config(group='token', caching=False) self.config_fixture.config(group='token', cache_on_issue=False) @@ -768,7 +768,7 @@ class TestPayloads(unit.TestCase): class TestFernetKeyRotation(unit.TestCase): def setUp(self): - super(TestFernetKeyRotation, self).setUp() + super().setUp() # A collection of all previously-seen signatures of the key # repository's contents. diff --git a/keystone/tests/unit/token/test_jws_provider.py b/keystone/tests/unit/token/test_jws_provider.py index f835c5946a..885fe6ec94 100644 --- a/keystone/tests/unit/token/test_jws_provider.py +++ b/keystone/tests/unit/token/test_jws_provider.py @@ -31,7 +31,7 @@ PROVIDERS = provider_api.ProviderAPIs class TestJWSProvider(unit.TestCase): def setUp(self): - super(TestJWSProvider, self).setUp() + super().setUp() self.config_fixture.config(group='token', provider='jws') self.useFixture(ksfixtures.JWSKeyRepository(self.config_fixture)) self.provider = jws.Provider() diff --git a/keystone/tests/unit/token/test_token_serialization.py b/keystone/tests/unit/token/test_token_serialization.py index b2f6700e60..166d551179 100644 --- a/keystone/tests/unit/token/test_token_serialization.py +++ b/keystone/tests/unit/token/test_token_serialization.py @@ -24,7 +24,7 @@ from keystone.tests.unit import base_classes class TestTokenSerialization(base_classes.TestCaseWithBootstrap): def setUp(self): - super(TestTokenSerialization, self).setUp() + super().setUp() self.admin_user_id = self.bootstrapper.admin_user_id self.admin_username = self.bootstrapper.admin_username self.admin_password = self.bootstrapper.admin_password diff --git a/keystone/tests/unit/trust/test_backends.py b/keystone/tests/unit/trust/test_backends.py index 6889e2c525..6954df81fe 100644 --- a/keystone/tests/unit/trust/test_backends.py +++ b/keystone/tests/unit/trust/test_backends.py @@ -22,7 +22,7 @@ from keystone.tests.unit import core PROVIDERS = provider_api.ProviderAPIs -class TrustTests(object): +class TrustTests: def create_sample_trust(self, new_id, remaining_uses=None): self.trustor = self.user_foo self.trustee = self.user_two diff --git a/keystone/token/provider.py b/keystone/token/provider.py index 790f325b56..f9f503e4d2 100644 --- a/keystone/token/provider.py +++ b/keystone/token/provider.py @@ -91,7 +91,7 @@ class Manager(manager.Manager): VERSIONS = VERSIONS def __init__(self): - super(Manager, self).__init__(CONF.token.provider) + super().__init__(CONF.token.provider) self._register_callback_listeners() def _register_callback_listeners(self): diff --git a/keystone/token/providers/base.py b/keystone/token/providers/base.py index 9de93ccfaf..47d9697c4e 100644 --- a/keystone/token/providers/base.py +++ b/keystone/token/providers/base.py @@ -17,7 +17,7 @@ import abc from keystone import exception -class Provider(object, metaclass=abc.ABCMeta): +class Provider(metaclass=abc.ABCMeta): """Interface description for a Token provider.""" @abc.abstractmethod diff --git a/keystone/token/providers/fernet/core.py b/keystone/token/providers/fernet/core.py index da1bde81a3..62ee50cfd3 100644 --- a/keystone/token/providers/fernet/core.py +++ b/keystone/token/providers/fernet/core.py @@ -26,7 +26,7 @@ CONF = keystone.conf.CONF class Provider(base.Provider): def __init__(self, *args, **kwargs): - super(Provider, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # NOTE(lbragstad): We add these checks here because if the fernet # provider is going to be used and either the `key_repository` is empty diff --git a/keystone/token/providers/jws/core.py b/keystone/token/providers/jws/core.py index b29f4b30cd..12db734f9e 100644 --- a/keystone/token/providers/jws/core.py +++ b/keystone/token/providers/jws/core.py @@ -28,7 +28,7 @@ CONF = keystone.conf.CONF class Provider(base.Provider): def __init__(self, *args, **kwargs): - super(Provider, self).__init__(*args, **kwargs) + super().__init__(*args, **kwargs) # NOTE(lbragstad): We add these checks here because if the jws # provider is going to be used and either the `key_repository` is empty @@ -91,7 +91,7 @@ class Provider(base.Provider): return self.token_formatter.validate_token(token_id) -class JWSFormatter(object): +class JWSFormatter: # NOTE(lbragstad): If in the future we expand support for different # algorithms, make this configurable and validate it against a blessed list @@ -103,7 +103,7 @@ class JWSFormatter(object): private_key_path = os.path.join( CONF.jwt_tokens.jws_private_key_repository, 'private.pem' ) - with open(private_key_path, 'r') as f: + with open(private_key_path) as f: key = f.read() return key @@ -112,7 +112,7 @@ class JWSFormatter(object): keys = [] key_repo = CONF.jwt_tokens.jws_public_key_repository for keyfile in os.listdir(key_repo): - with open(os.path.join(key_repo, keyfile), 'r') as f: + with open(os.path.join(key_repo, keyfile)) as f: keys.append(f.read()) return keys diff --git a/keystone/token/token_formatters.py b/keystone/token/token_formatters.py index 3ac9a09d32..4de9000057 100644 --- a/keystone/token/token_formatters.py +++ b/keystone/token/token_formatters.py @@ -37,7 +37,7 @@ TIMESTAMP_START = 1 TIMESTAMP_END = 9 -class TokenFormatter(object): +class TokenFormatter: """Packs and unpacks payloads into tokens for transport.""" @property @@ -266,7 +266,7 @@ class TokenFormatter(object): ) -class BasePayload(object): +class BasePayload: # each payload variant should have a unique version version = None diff --git a/keystone/trust/backends/base.py b/keystone/trust/backends/base.py index 868993982f..1eeb6984d0 100644 --- a/keystone/trust/backends/base.py +++ b/keystone/trust/backends/base.py @@ -17,7 +17,7 @@ import abc from keystone import exception -class TrustDriverBase(object, metaclass=abc.ABCMeta): +class TrustDriverBase(metaclass=abc.ABCMeta): @abc.abstractmethod def create_trust(self, trust_id, trust, roles): diff --git a/keystone/trust/core.py b/keystone/trust/core.py index 68443d91e6..d2663f2287 100644 --- a/keystone/trust/core.py +++ b/keystone/trust/core.py @@ -40,7 +40,7 @@ class Manager(manager.Manager): _TRUST = "OS-TRUST:trust" def __init__(self): - super(Manager, self).__init__(CONF.trust.driver) + super().__init__(CONF.trust.driver) notifications.register_event_callback( notifications.ACTIONS.deleted, 'user', self._on_user_delete ) @@ -100,7 +100,7 @@ class Manager(manager.Manager): trust['expires_at'] = redelegated_expiry # trust roles is a subset of roles of the redelegated trust - parent_roles = set(role['id'] for role in redelegated_trust['roles']) + parent_roles = {role['id'] for role in redelegated_trust['roles']} if not all(role['id'] in parent_roles for role in trust['roles']): raise exception.Forbidden( _('Some of requested roles are not in redelegated trust')