From aaf0cc8fae7c1dcbaa6750734c9d472856764930 Mon Sep 17 00:00:00 2001 From: Artem Goncharov Date: Sat, 20 Jul 2024 07:54:31 +0200 Subject: [PATCH] Enable pyupgrade pyupgrade is a tool (and pre-commit hook) to automatically upgrade syntax for newer versions of the language. It helps getting rid of syntax required for older python versions not supported anymore and prepare us for easier support of newer python versions. The tool is already used in some other OpenStack projects, so it is time to start using it also for Keystone. The change is generated by uncommenting the pre-commit hook and executing `pre-commit run -a` to convert the data. The same could be also achieved by simply trying to commit and adding converted files in few iterations. Change-Id: Ia1f64709e57ebb4e44db128bfea4c5957b2071df --- .pre-commit-config.yaml | 10 +- api-ref/source/conf.py | 2 +- devstack/tools/oidc/setup_keycloak_client.py | 2 +- keystone/api/auth.py | 2 +- keystone/api/credentials.py | 2 +- keystone/api/discovery.py | 4 +- keystone/api/os_federation.py | 4 +- keystone/api/os_oauth1.py | 16 +- keystone/api/role_assignments.py | 8 +- keystone/api/users.py | 6 +- .../application_credential/backends/base.py | 2 +- keystone/application_credential/core.py | 4 +- keystone/assignment/backends/base.py | 2 +- keystone/assignment/backends/sql.py | 4 +- keystone/assignment/core.py | 38 +- keystone/assignment/role_backends/base.py | 2 +- .../assignment/role_backends/sql_model.py | 6 +- keystone/auth/core.py | 6 +- keystone/auth/plugins/base.py | 4 +- keystone/auth/plugins/core.py | 24 +- keystone/auth/plugins/external.py | 2 +- keystone/catalog/backends/base.py | 4 +- keystone/catalog/backends/sql.py | 2 +- keystone/catalog/backends/templated.py | 6 +- keystone/catalog/core.py | 2 +- keystone/cmd/bootstrap.py | 2 +- keystone/cmd/cli.py | 38 +- keystone/cmd/idutils.py | 2 +- keystone/common/cache/core.py | 4 +- keystone/common/context.py | 4 +- keystone/common/driver_hints.py | 2 +- keystone/common/fernet_utils.py | 6 +- keystone/common/json_home.py | 6 +- keystone/common/manager.py | 17 +- keystone/common/provider_api.py | 14 +- keystone/common/rbac_enforcer/enforcer.py | 6 +- keystone/common/resource_options/core.py | 6 +- keystone/common/tokenless_auth.py | 2 +- keystone/common/utils.py | 4 +- keystone/common/validation/validators.py | 2 +- keystone/credential/backends/base.py | 2 +- keystone/credential/core.py | 2 +- keystone/credential/provider.py | 2 +- keystone/credential/providers/core.py | 2 +- keystone/endpoint_policy/backends/base.py | 2 +- keystone/endpoint_policy/core.py | 2 +- keystone/exception.py | 24 +- keystone/federation/backends/base.py | 2 +- keystone/federation/core.py | 2 +- keystone/federation/idp.py | 18 +- keystone/federation/utils.py | 23 +- keystone/identity/backends/base.py | 2 +- keystone/identity/backends/ldap/common.py | 118 ++-- keystone/identity/backends/ldap/core.py | 34 +- keystone/identity/backends/sql.py | 2 +- keystone/identity/backends/sql_model.py | 4 +- keystone/identity/core.py | 6 +- keystone/identity/generator.py | 4 +- keystone/identity/mapping_backends/base.py | 4 +- keystone/identity/mapping_backends/mapping.py | 2 +- keystone/identity/shadow_backends/base.py | 2 +- keystone/limit/backends/base.py | 2 +- keystone/limit/backends/sql.py | 4 +- keystone/limit/core.py | 2 +- keystone/limit/models/base.py | 2 +- keystone/models/receipt_model.py | 4 +- keystone/models/revoke_model.py | 4 +- keystone/models/token_model.py | 18 +- keystone/notifications.py | 36 +- keystone/oauth1/backends/base.py | 2 +- keystone/oauth1/backends/sql.py | 4 +- keystone/oauth1/core.py | 4 +- keystone/policy/backends/base.py | 2 +- keystone/policy/core.py | 2 +- keystone/receipt/provider.py | 2 +- keystone/receipt/providers/base.py | 2 +- keystone/receipt/providers/fernet/core.py | 2 +- keystone/receipt/receipt_formatters.py | 4 +- keystone/resource/backends/base.py | 2 +- keystone/resource/backends/sql.py | 2 +- keystone/resource/backends/sql_model.py | 6 +- keystone/resource/config_backends/base.py | 2 +- keystone/resource/config_backends/sql.py | 4 +- keystone/resource/core.py | 6 +- keystone/revoke/backends/base.py | 2 +- keystone/revoke/core.py | 2 +- keystone/server/flask/common.py | 30 +- .../middleware/auth_context.py | 8 +- .../middleware/url_normalize.py | 2 +- keystone/tests/common/auth.py | 2 +- keystone/tests/functional/core.py | 2 +- keystone/tests/hacking/checks.py | 34 +- .../tests/protection/v3/test_access_rules.py | 34 +- .../v3/test_application_credential.py | 26 +- .../tests/protection/v3/test_assignment.py | 28 +- keystone/tests/protection/v3/test_consumer.py | 10 +- .../tests/protection/v3/test_credentials.py | 24 +- .../tests/protection/v3/test_domain_config.py | 20 +- .../tests/protection/v3/test_domain_roles.py | 18 +- keystone/tests/protection/v3/test_domains.py | 22 +- .../protection/v3/test_ec2_credential.py | 18 +- .../protection/v3/test_endpoint_group.py | 18 +- .../tests/protection/v3/test_endpoints.py | 18 +- keystone/tests/protection/v3/test_grants.py | 60 +- keystone/tests/protection/v3/test_groups.py | 32 +- .../protection/v3/test_identity_providers.py | 18 +- .../tests/protection/v3/test_implied_roles.py | 12 +- keystone/tests/protection/v3/test_limits.py | 14 +- keystone/tests/protection/v3/test_mappings.py | 18 +- keystone/tests/protection/v3/test_policy.py | 18 +- .../protection/v3/test_policy_association.py | 18 +- .../protection/v3/test_project_endpoint.py | 18 +- .../tests/protection/v3/test_project_tags.py | 78 +-- keystone/tests/protection/v3/test_projects.py | 22 +- .../tests/protection/v3/test_protocols.py | 108 ++-- keystone/tests/protection/v3/test_regions.py | 18 +- .../protection/v3/test_registered_limits.py | 14 +- keystone/tests/protection/v3/test_roles.py | 18 +- .../protection/v3/test_service_providers.py | 18 +- keystone/tests/protection/v3/test_services.py | 18 +- .../protection/v3/test_system_assignments.py | 20 +- keystone/tests/protection/v3/test_tokens.py | 16 +- keystone/tests/protection/v3/test_trusts.py | 18 +- keystone/tests/protection/v3/test_users.py | 30 +- .../backends/test_sql.py | 2 +- .../application_credential/test_backends.py | 2 +- .../tests/unit/assignment/test_backends.py | 4 +- keystone/tests/unit/assignment/test_core.py | 6 +- .../tests/unit/auth/plugins/test_mapped.py | 4 +- keystone/tests/unit/backend/core_ldap.py | 32 +- keystone/tests/unit/backend/core_sql.py | 2 +- keystone/tests/unit/base_classes.py | 2 +- keystone/tests/unit/catalog/test_backends.py | 6 +- keystone/tests/unit/catalog/test_core.py | 2 +- keystone/tests/unit/common/test_cache.py | 2 +- .../tests/unit/common/test_notifications.py | 52 +- .../tests/unit/common/test_provider_api.py | 6 +- .../tests/unit/common/test_rbac_enforcer.py | 26 +- keystone/tests/unit/common/test_utils.py | 19 +- .../unit/contrib/federation/test_utils.py | 8 +- keystone/tests/unit/core.py | 38 +- .../tests/unit/credential/test_backend_sql.py | 6 +- .../unit/credential/test_fernet_provider.py | 4 +- keystone/tests/unit/default_fixtures.py | 4 +- .../endpoint_policy/backends/test_base.py | 2 +- .../unit/endpoint_policy/backends/test_sql.py | 2 +- keystone/tests/unit/fakeldap.py | 21 +- keystone/tests/unit/federation/test_core.py | 2 +- keystone/tests/unit/federation/test_utils.py | 2 +- keystone/tests/unit/filtering.py | 2 +- .../tests/unit/identity/backends/test_base.py | 2 +- .../tests/unit/identity/backends/test_ldap.py | 2 +- .../identity/backends/test_ldap_common.py | 37 +- .../tests/unit/identity/backends/test_sql.py | 2 +- .../identity/shadow_users/test_backend.py | 2 +- .../unit/identity/shadow_users/test_core.py | 2 +- .../tests/unit/identity/test_backend_sql.py | 16 +- keystone/tests/unit/identity/test_backends.py | 14 +- keystone/tests/unit/identity/test_core.py | 6 +- .../tests/unit/ksfixtures/auth_plugins.py | 8 +- .../tests/unit/ksfixtures/backendloader.py | 4 +- keystone/tests/unit/ksfixtures/cache.py | 2 +- keystone/tests/unit/ksfixtures/database.py | 4 +- .../unit/ksfixtures/jws_key_repository.py | 4 +- .../tests/unit/ksfixtures/key_repository.py | 4 +- keystone/tests/unit/ksfixtures/ldapdb.py | 2 +- keystone/tests/unit/ksfixtures/policy.py | 2 +- .../tests/unit/ksfixtures/temporaryfile.py | 2 +- keystone/tests/unit/limit/test_backends.py | 4 +- keystone/tests/unit/mapping_fixtures.py | 2 - .../tests/unit/policy/backends/test_base.py | 4 +- .../tests/unit/policy/backends/test_sql.py | 2 +- keystone/tests/unit/policy/test_backends.py | 2 +- .../unit/receipt/test_fernet_provider.py | 16 +- .../receipt/test_receipt_serialization.py | 2 +- .../tests/unit/resource/backends/test_sql.py | 2 +- .../unit/resource/config_backends/test_sql.py | 4 +- keystone/tests/unit/resource/test_backends.py | 6 +- keystone/tests/unit/resource/test_core.py | 6 +- keystone/tests/unit/rest.py | 2 +- .../tests/unit/server/test_keystone_flask.py | 65 +-- keystone/tests/unit/test_app_config.py | 1 - ...st_associate_project_endpoint_extension.py | 146 ++--- keystone/tests/unit/test_auth_plugin.py | 6 +- .../unit/test_backend_endpoint_policy.py | 2 +- .../unit/test_backend_endpoint_policy_sql.py | 2 +- .../tests/unit/test_backend_id_mapping_sql.py | 5 +- keystone/tests/unit/test_backend_ldap.py | 151 +++-- keystone/tests/unit/test_backend_ldap_pool.py | 6 +- keystone/tests/unit/test_backend_rules.py | 30 +- keystone/tests/unit/test_backend_sql.py | 12 +- keystone/tests/unit/test_backend_templated.py | 18 +- keystone/tests/unit/test_cli.py | 66 ++- keystone/tests/unit/test_config.py | 2 +- keystone/tests/unit/test_contrib_ec2_core.py | 2 +- keystone/tests/unit/test_contrib_s3_core.py | 22 +- keystone/tests/unit/test_exception.py | 22 +- keystone/tests/unit/test_hacking_checks.py | 2 +- keystone/tests/unit/test_ldap_livetest.py | 6 +- .../tests/unit/test_ldap_pool_livetest.py | 4 +- keystone/tests/unit/test_ldap_tls_livetest.py | 2 +- keystone/tests/unit/test_limits.py | 8 +- keystone/tests/unit/test_middleware.py | 7 +- keystone/tests/unit/test_policy.py | 8 +- keystone/tests/unit/test_receipt_provider.py | 2 +- keystone/tests/unit/test_revoke.py | 4 +- keystone/tests/unit/test_shadow_users.py | 4 +- keystone/tests/unit/test_token_provider.py | 2 +- keystone/tests/unit/test_url_middleware.py | 4 +- keystone/tests/unit/test_v3.py | 52 +- .../unit/test_v3_application_credential.py | 2 +- keystone/tests/unit/test_v3_assignment.py | 522 +++++++++--------- keystone/tests/unit/test_v3_auth.py | 258 +++++---- keystone/tests/unit/test_v3_catalog.py | 60 +- keystone/tests/unit/test_v3_credential.py | 18 +- keystone/tests/unit/test_v3_domain_config.py | 236 ++++---- .../tests/unit/test_v3_endpoint_policy.py | 14 +- keystone/tests/unit/test_v3_federation.py | 110 ++-- keystone/tests/unit/test_v3_filters.py | 8 +- keystone/tests/unit/test_v3_identity.py | 70 +-- keystone/tests/unit/test_v3_oauth1.py | 56 +- keystone/tests/unit/test_v3_oauth2.py | 6 +- keystone/tests/unit/test_v3_os_revoke.py | 2 +- keystone/tests/unit/test_v3_policy.py | 10 +- keystone/tests/unit/test_v3_resource.py | 148 +++-- keystone/tests/unit/test_v3_trust.py | 36 +- keystone/tests/unit/test_validation.py | 45 +- keystone/tests/unit/test_versions.py | 20 +- .../tests/unit/token/test_fernet_provider.py | 10 +- .../tests/unit/token/test_jws_provider.py | 2 +- .../unit/token/test_token_serialization.py | 2 +- keystone/tests/unit/trust/test_backends.py | 2 +- keystone/token/provider.py | 2 +- keystone/token/providers/base.py | 2 +- keystone/token/providers/fernet/core.py | 2 +- keystone/token/providers/jws/core.py | 8 +- keystone/token/token_formatters.py | 4 +- keystone/trust/backends/base.py | 2 +- keystone/trust/core.py | 4 +- 239 files changed, 2102 insertions(+), 2207 deletions(-) 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')