keystone package

Subpackages

Submodules

keystone.backends module

keystone.backends.load_backends()[source]

keystone.clean module

keystone.clean.check_enabled(property_name, enabled)[source]
keystone.clean.check_length(property_name, value, min_length=1, max_length=64)[source]
keystone.clean.check_name(property_name, name, min_length=1, max_length=64)[source]
keystone.clean.check_type(property_name, value, expected_type, display_expected_type)[source]
keystone.clean.domain_enabled(enabled)[source]
keystone.clean.domain_name(name)[source]
keystone.clean.group_name(name)[source]
keystone.clean.project_enabled(enabled)[source]
keystone.clean.project_name(name)[source]
keystone.clean.user_enabled(enabled)[source]
keystone.clean.user_name(name)[source]

keystone.cli module

class keystone.cli.BaseApp[source]

Bases: object

classmethod add_argument_parser(subparsers)[source]
name = None
class keystone.cli.BaseCertificateSetup[source]

Bases: keystone.cli.BasePermissionsSetup

Provides common options for certificate setup.

classmethod add_argument_parser(subparsers)[source]
class keystone.cli.BasePermissionsSetup[source]

Bases: keystone.cli.BaseApp

Common user/group setup for file permissions.

classmethod add_argument_parser(subparsers)[source]
static get_user_group()[source]
class keystone.cli.DbSync[source]

Bases: keystone.cli.BaseApp

Sync the database.

classmethod add_argument_parser(subparsers)[source]
static main()[source]
name = 'db_sync'
class keystone.cli.DbVersion[source]

Bases: keystone.cli.BaseApp

Print the current migration version of the database.

classmethod add_argument_parser(subparsers)[source]
static main()[source]
name = 'db_version'
class keystone.cli.DomainConfigUpload[source]

Bases: keystone.cli.BaseApp

Upload the domain specific configuration files to the database.

classmethod add_argument_parser(subparsers)[source]
static main()[source]
name = 'domain_config_upload'
class keystone.cli.DomainConfigUploadFiles[source]

Bases: object

load_backends()[source]
read_domain_configs_from_files()[source]

Read configs from file(s) and load into database.

The command line parameters have already been parsed and the CONF command option will have been set. It is either set to the name of an explicit domain, or it’s None to indicate that we want all domain config files.

run()[source]
upload_config_to_database(file_name, domain_name)[source]

Upload a single config file to the database.

Parameters:
  • file_name – the file containing the config options
  • domain_name – the domain name
Raises:

ValueError: the domain does not exist or already has domain specific configurations defined

Raises:

Exceptions from oslo config: there is an issue with options defined in the config file or its format

The caller of this method should catch the errors raised and handle appropriately in order that the best UX experience can be provided for both the case of when a user has asked for a specific config file to be uploaded, as well as all config files in a directory.

upload_configs_to_database(file_name, domain_name)[source]

Upload configs from file and load into database.

This method will be called repeatedly for all the config files in the config directory. To provide a better UX, we differentiate the error handling in this case (versus when the user has asked for a single config file to be uploaded).

valid_options()[source]

Validate the options, returning True if they are indeed valid.

It would be nice to use the argparse automated checking for this validation, but the only way I can see doing that is to make the default (i.e. if no optional parameters are specified) to upload all configuration files - and that sounds too dangerous as a default. So we use it in a slightly unconventional way, where all parameters are optional, but you must specify at least one.

class keystone.cli.FernetRotate[source]

Bases: keystone.cli.BasePermissionsSetup

Rotate Fernet encryption keys.

This assumes you have already run keystone-manage fernet_setup.

A new primary key is placed into rotation, which is used for new tokens. The old primary key is demoted to secondary, which can then still be used for validating tokens. Excess secondary keys (beyond [fernet_tokens] max_active_keys) are revoked. Revoked keys are permanently deleted. A new staged key will be created and used to validate tokens. The next time key rotation takes place, the staged key will be put into rotation as the primary key.

Rotating keys too frequently, or with [fernet_tokens] max_active_keys set too low, will cause tokens to become invalid prior to their expiration.

classmethod main()[source]
name = 'fernet_rotate'
class keystone.cli.FernetSetup[source]

Bases: keystone.cli.BasePermissionsSetup

Setup a key repository for Fernet tokens.

This also creates a primary key used for both creating and validating Keystone Lightweight tokens. To improve security, you should rotate your keys (using keystone-manage fernet_rotate, for example).

classmethod main()[source]
name = 'fernet_setup'
class keystone.cli.MappingPurge[source]

Bases: keystone.cli.BaseApp

Purge the mapping table.

classmethod add_argument_parser(subparsers)[source]
static main()[source]
name = 'mapping_purge'
class keystone.cli.PKISetup[source]

Bases: keystone.cli.BaseCertificateSetup

Set up Key pairs and certificates for token signing and verification.

This is NOT intended for production use, see Keystone Configuration documentation for details.

classmethod main()[source]
name = 'pki_setup'
class keystone.cli.SSLSetup[source]

Bases: keystone.cli.BaseCertificateSetup

Create key pairs and certificates for HTTPS connections.

This is NOT intended for production use, see Keystone Configuration documentation for details.

classmethod main()[source]
name = 'ssl_setup'
class keystone.cli.SamlIdentityProviderMetadata[source]

Bases: keystone.cli.BaseApp

Generate Identity Provider metadata.

static main()[source]
name = 'saml_idp_metadata'
class keystone.cli.TokenFlush[source]

Bases: keystone.cli.BaseApp

Flush expired tokens from the backend.

classmethod main()[source]
name = 'token_flush'
keystone.cli.add_command_parsers(subparsers)[source]
keystone.cli.main(argv=None, config_files=None)[source]

keystone.config module

Wrapper for keystone.common.config that configures itself on import.

keystone.config.find_paste_config()[source]

Find Keystone’s paste.deploy configuration file.

Keystone’s paste.deploy configuration file is specified in the [paste_deploy] section of the main Keystone configuration file, keystone.conf.

For example:

[paste_deploy]
config_file = keystone-paste.ini
Returns:The selected configuration filename
Raises:exception.ConfigFileNotFound
keystone.config.set_default_for_default_log_levels()[source]

Set the default for the default_log_levels option for keystone.

Keystone uses some packages that other OpenStack services don’t use that do logging. This will set the default_log_levels default level for those packages.

This function needs to be called before CONF().

keystone.config.setup_logging()[source]

Sets up logging for the keystone package.

keystone.controllers module

class keystone.controllers.AdminExtensions(*args, **kwargs)[source]

Bases: keystone.controllers.Extensions

extensions[source]
class keystone.controllers.Extensions(*args, **kwargs)[source]

Bases: keystone.common.wsgi.Application

Base extensions controller to be extended by public and admin API’s.

extensions[source]
get_extension_info(context, extension_alias)[source]
get_extensions_info(context)[source]
class keystone.controllers.MimeTypes[source]

Bases: object

JSON = 'application/json'
JSON_HOME = 'application/json-home'
class keystone.controllers.PublicExtensions(*args, **kwargs)[source]

Bases: keystone.controllers.Extensions

extensions[source]
class keystone.controllers.Version(version_type, routers=None)[source]

Bases: keystone.common.wsgi.Application

get_version_v2(context)[source]
get_version_v3(context)[source]
get_versions(context)[source]
keystone.controllers.register_version(version)[source]
keystone.controllers.request_v3_json_home(new_prefix)[source]
keystone.controllers.v3_mime_type_best_match(context)[source]

keystone.exception module

exception keystone.exception.AdditionalAuthRequired(auth_response=None, **kwargs)[source]

Bases: keystone.exception.AuthPluginException

message_format = u'Additional authentications steps required.'
exception keystone.exception.AssignmentTypeCalculationError(message=None, **kwargs)[source]

Bases: keystone.exception.UnexpectedError

message_format = u'Unexpected combination of grant attributes - User: %(user_id)s, Group: %(group_id)s, Project: %(project_id)s, Domain: %(domain_id)s'
exception keystone.exception.AuthMethodNotSupported(*args, **kwargs)[source]

Bases: keystone.exception.AuthPluginException

message_format = u'Attempted to authenticate with an unsupported method.'
exception keystone.exception.AuthPluginException(*args, **kwargs)[source]

Bases: keystone.exception.Unauthorized

message_format = u'Authentication plugin error.'
exception keystone.exception.CertificateFilesUnavailable(message=None, **kwargs)[source]

Bases: keystone.exception.UnexpectedError

debug_message_format = u'Expected signing certificates are not available on the server. Please check Keystone configuration.'
exception keystone.exception.CircularRegionHierarchyError(message=None, **kwargs)[source]

Bases: keystone.exception.Error

code = 400
message_format = u'The specified parent region %(parent_region_id)s would create a circular region hierarchy.'
title = 'Bad Request'
exception keystone.exception.ConfigFileNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.UnexpectedError

debug_message_format = u'The Keystone configuration file %(config_file)s could not be found.'
exception keystone.exception.Conflict(message=None, **kwargs)[source]

Bases: keystone.exception.Error

code = 409
message_format = u'Conflict occurred attempting to store %(type)s - %(details)s'
title = 'Conflict'
exception keystone.exception.CredentialNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find credential: %(credential_id)s'
exception keystone.exception.CrossBackendNotAllowed(message=None, **kwargs)[source]

Bases: keystone.exception.Forbidden

message_format = u'Group membership across backend boundaries is not allowed, group in question is %(group_id)s, user is %(user_id)s'
exception keystone.exception.DomainConfigNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find %(group_or_option)s in domain configuration for domain %(domain_id)s'
exception keystone.exception.DomainNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find domain: %(domain_id)s'
exception keystone.exception.EndpointGroupNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find Endpoint Group: %(endpoint_group_id)s'
exception keystone.exception.EndpointNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find endpoint: %(endpoint_id)s'
exception keystone.exception.Error(message=None, **kwargs)[source]

Bases: exceptions.Exception

Base error class.

Child classes should define an HTTP status code, title, and a message_format.

code = None
message_format = None
title = None
exception keystone.exception.FederatedProtocolNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find federated protocol %(protocol_id)s for Identity Provider: %(idp_id)s'
exception keystone.exception.Forbidden(message=None, **kwargs)[source]

Bases: keystone.exception.SecurityError

code = 403
message_format = u'You are not authorized to perform the requested action.'
title = 'Forbidden'
exception keystone.exception.ForbiddenAction(message=None, **kwargs)[source]

Bases: keystone.exception.Forbidden

message_format = u'You are not authorized to perform the requested action: %(action)s'
exception keystone.exception.Gone(message=None, **kwargs)[source]

Bases: keystone.exception.Error

code = 410
message_format = u'The service you have requested is no longer available on this server.'
title = 'Gone'
exception keystone.exception.GroupNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find group: %(group_id)s'
exception keystone.exception.IdentityProviderNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find Identity Provider: %(idp_id)s'
exception keystone.exception.ImmutableAttributeError(message=None, **kwargs)[source]

Bases: keystone.exception.Forbidden

message_format = u"Could not change immutable attribute(s) '%(attributes)s' in target %(target)s"
exception keystone.exception.InvalidDomainConfig(message=None, **kwargs)[source]

Bases: keystone.exception.Forbidden

message_format = u'Invalid domain specific configuration: %(reason)s'
exception keystone.exception.InvalidParentProject(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Cannot create project with parent: %(project_id)s'
exception keystone.exception.InvalidPolicyAssociation(message=None, **kwargs)[source]

Bases: keystone.exception.Forbidden

message_format = u'Invalid mix of entities for policy association - only Endpoint, Service or Region+Service allowed. Request was - Endpoint: %(endpoint_id)s, Service: %(service_id)s, Region: %(region_id)s'
exception keystone.exception.KeysNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.UnexpectedError

message_format = u'No encryption keys found; run keystone-manage fernet_setup to bootstrap one.'
exception keystone.exception.MalformedEndpoint(message=None, **kwargs)[source]

Bases: keystone.exception.UnexpectedError

debug_message_format = u'Malformed endpoint URL (%(endpoint)s), see ERROR log for details.'
exception keystone.exception.MappedGroupNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.UnexpectedError

debug_message_format = u'Group %(group_id)s returned by mapping %(mapping_id)s was not found in the backend.'
exception keystone.exception.MappingNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find mapping: %(mapping_id)s'
exception keystone.exception.MetadataFileError(message=None, **kwargs)[source]

Bases: keystone.exception.UnexpectedError

message_format = u'Error while reading metadata file, %(reason)s'
exception keystone.exception.MetadataNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

(dolph): metadata is not a user-facing concept, so this exception should not be exposed

message_format = u'An unhandled exception has occurred: Could not find metadata.'
exception keystone.exception.MigrationNotProvided(mod_name, path)[source]

Bases: exceptions.Exception

exception keystone.exception.MissingGroups(message=None, **kwargs)[source]

Bases: keystone.exception.Unauthorized

message_format = u'Unable to find valid groups while using mapping %(mapping_id)s'
exception keystone.exception.MultipleSQLDriversInConfig(message=None, **kwargs)[source]

Bases: keystone.exception.UnexpectedError

message_format = u'The Keystone domain-specific configuration has specified more than one SQL driver (only one is permitted): %(source)s.'
exception keystone.exception.NotFound(message=None, **kwargs)[source]

Bases: keystone.exception.Error

code = 404
message_format = u'Could not find: %(target)s'
title = 'Not Found'
exception keystone.exception.NotImplemented(message=None, **kwargs)[source]

Bases: keystone.exception.Error

code = 501
message_format = u'The action you have requested has not been implemented.'
title = 'Not Implemented'
exception keystone.exception.OAuthHeadersMissingError(message=None, **kwargs)[source]

Bases: keystone.exception.UnexpectedError

debug_message_format = u'No Authorization headers found, cannot proceed with OAuth related calls, if running under HTTPd or Apache, ensure WSGIPassAuthorization is set to On.'
title = 'Error retrieving OAuth headers'
exception keystone.exception.PKITokenExpected(message=None, **kwargs)[source]

Bases: keystone.exception.Error

code = 403
message_format = u'The certificates you requested are not available. It is likely that this server does not use PKI tokens otherwise this is the result of misconfiguration.'
title = 'Cannot retrieve certificates'
exception keystone.exception.PasswordVerificationError(message=None, **kwargs)[source]

Bases: keystone.exception.Error

code = 403
message_format = u'The password length must be less than or equal to %(size)i. The server could not comply with the request because the password is invalid.'
title = 'Forbidden'
exception keystone.exception.PolicyAssociationNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find policy association'
exception keystone.exception.PolicyNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find policy: %(policy_id)s'
exception keystone.exception.ProjectNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find project: %(project_id)s'
exception keystone.exception.PublicIDNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = '%(id)s'
exception keystone.exception.RegionDeletionError(message=None, **kwargs)[source]

Bases: keystone.exception.Error

code = 403
message_format = u'Unable to delete region %(region_id)s because it or its child regions have associated endpoints.'
title = 'Forbidden'
exception keystone.exception.RegionNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find region: %(region_id)s'
exception keystone.exception.RoleAssignmentNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find role assignment with role: %(role_id)s, user or group: %(actor_id)s, project or domain: %(target_id)s'
exception keystone.exception.RoleNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find role: %(role_id)s'
exception keystone.exception.SAMLSigningError(message=None, **kwargs)[source]

Bases: keystone.exception.UnexpectedError

debug_message_format = u'Unable to sign SAML assertion. It is likely that this server does not have xmlsec1 installed, or this is the result of misconfiguration. Reason %(reason)s'
title = 'Error signing SAML assertion'
exception keystone.exception.SchemaValidationError(message=None, **kwargs)[source]

Bases: keystone.exception.ValidationError

message_format = u'%(detail)s'
exception keystone.exception.SecurityError(message=None, **kwargs)[source]

Bases: keystone.exception.Error

Avoids exposing details of security failures, unless in debug mode.

amendment = u'(Disable debug mode to suppress these details.)'
exception keystone.exception.ServiceNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find service: %(service_id)s'
exception keystone.exception.ServiceProviderNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find Service Provider: %(sp_id)s'
exception keystone.exception.StringLengthExceeded(message=None, **kwargs)[source]

Bases: keystone.exception.ValidationError

message_format = u"String length exceeded.The length of string '%(string)s' exceeded the limit of column %(type)s(CHAR(%(length)d))."
exception keystone.exception.TokenNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find token: %(token_id)s'
exception keystone.exception.TrustConsumeMaximumAttempt(message=None, **kwargs)[source]

Bases: keystone.exception.UnexpectedError

debug_message_format = u'Unable to consume trust %(trust_id)s, unable to acquire lock.'
exception keystone.exception.TrustNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find trust: %(trust_id)s'
exception keystone.exception.TrustUseLimitReached(message=None, **kwargs)[source]

Bases: keystone.exception.Forbidden

message_format = u'No remaining uses for trust: %(trust_id)s'
exception keystone.exception.Unauthorized(message=None, **kwargs)[source]

Bases: keystone.exception.SecurityError

code = 401
message_format = u'The request you have made requires authentication.'
title = 'Unauthorized'
exception keystone.exception.UnexpectedError(message=None, **kwargs)[source]

Bases: keystone.exception.SecurityError

Avoids exposing details of failures, unless in debug mode.

code = 500
debug_message_format = u'An unexpected error prevented the server from fulfilling your request: %(exception)s'
message_format[source]

Return the generic message format string unless debug is enabled.

title = 'Internal Server Error'
exception keystone.exception.UnsupportedTokenVersionException[source]

Bases: exceptions.Exception

Token version is unrecognizable or unsupported.

exception keystone.exception.UserNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find user: %(user_id)s'
exception keystone.exception.ValidationError(message=None, **kwargs)[source]

Bases: keystone.exception.Error

code = 400
message_format = u'Expecting to find %(attribute)s in %(target)s - the server could not comply with the request since it is either malformed or otherwise incorrect. The client is assumed to be in error.'
title = 'Bad Request'
exception keystone.exception.ValidationSizeError(message=None, **kwargs)[source]

Bases: keystone.exception.Error

code = 400
message_format = u'Request attribute %(attribute)s must be less than or equal to %(size)i. The server could not comply with the request because the attribute size is invalid (too large). The client is assumed to be in error.'
title = 'Bad Request'
exception keystone.exception.ValidationTimeStampError(message=None, **kwargs)[source]

Bases: keystone.exception.Error

code = 400
message_format = u'Timestamp not in expected format. The server could not comply with the request since it is either malformed or otherwise incorrect. The client is assumed to be in error.'
title = 'Bad Request'
exception keystone.exception.VersionNotFound(message=None, **kwargs)[source]

Bases: keystone.exception.NotFound

message_format = u'Could not find version: %(version)s'

keystone.i18n module

oslo.i18n integration module.

See http://docs.openstack.org/developer/oslo.i18n/usage.html .

keystone.notifications module

Notifications module for OpenStack Identity Service resources

class keystone.notifications.Audit[source]

Bases: object

Namespace for audit notification functions.

This is a namespace object to contain all of the direct notification functions utilized for Manager methods.

classmethod created(resource_type, resource_id, initiator=None, public=True)[source]
classmethod deleted(resource_type, resource_id, initiator=None, public=True)[source]
classmethod disabled(resource_type, resource_id, initiator=None, public=True)[source]
classmethod updated(resource_type, resource_id, initiator=None, public=True)[source]
class keystone.notifications.CadfNotificationWrapper(operation)[source]

Bases: object

Send CADF event notifications for various methods.

This function is only used for Authentication events. Its action and event_type are dictated below.

  • action: authenticate
  • event_type: identity.authenticate

Sends CADF notifications for events such as whether an authentication was successful or not.

Parameters:operation – The authentication related action being performed
class keystone.notifications.CadfRoleAssignmentNotificationWrapper(operation)[source]

Bases: object

Send CADF notifications for role_assignment methods.

This function is only used for role assignment events. Its action and event_type are dictated below.

  • action: created.role_assignment or deleted.role_assignment

  • event_type: identity.role_assignment.created or

    identity.role_assignment.deleted

Sends a CADF notification if the wrapped method does not raise an Exception (such as keystone.exception.NotFound).

Parameters:operation – one of the values from ACTIONS (create or delete)
ROLE_ASSIGNMENT = 'role_assignment'
class keystone.notifications.ManagerNotificationWrapper(operation, resource_type, public=True, resource_id_arg_index=1, result_id_arg_attr=None)[source]

Bases: object

Send event notifications for Manager methods.

Sends a notification if the wrapped Manager method does not raise an Exception (such as keystone.exception.NotFound).

Parameters:
  • operation – one of the values from ACTIONS
  • resource_type – type of resource being affected
  • public – If True (default), the event will be sent to the notifier API. If False, the event will only be sent via notify_event_callbacks to in process listeners
keystone.notifications.clear_subscribers()[source]

Empty subscribers dictionary.

This effectively stops notifications since there will be no subscribers to publish to.

keystone.notifications.created(*args, **kwargs)[source]

Decorator to send notifications for Manager.create_* methods.

keystone.notifications.deleted(*args, **kwargs)[source]

Decorator to send notifications for Manager.delete_* methods.

keystone.notifications.disabled(*args, **kwargs)[source]

Decorator to send notifications when an object is disabled.

keystone.notifications.emit_event

alias of CadfNotificationWrapper

keystone.notifications.internal(*args, **kwargs)[source]

Decorator to send notifications for internal notifications only.

keystone.notifications.list_opts()
keystone.notifications.notify_event_callbacks(service, resource_type, operation, payload)[source]

Sends a notification to registered extensions.

keystone.notifications.register_event_callback(event, resource_type, callbacks)[source]

Register each callback with the event.

Parameters:
  • event (keystone.notifications.ACTIONS) – Action being registered
  • resource_type (str) – Type of resource being operated on
  • callbacks (list) – Callback items to be registered with event
Raises:
  • ValueError – If event is not a valid ACTION
  • TypeError – If callback is not callable
keystone.notifications.reset_notifier()[source]

Reset the notifications internal state.

This is used only for testing purposes.

keystone.notifications.role_assignment

alias of CadfRoleAssignmentNotificationWrapper

keystone.notifications.send_saml_audit_notification(action, context, user_id, group_ids, identity_provider, protocol, token_id, outcome)[source]

Send notification to inform observers about SAML events.

Parameters:
  • action (str) – Action being audited
  • context (dict) – Current request context to collect request info from
  • user_id (str) – User ID from Keystone token
  • group_ids (list) – List of Group IDs from Keystone token
  • identity_provider (str or None) – ID of the IdP from the Keystone token
  • protocol (str) – Protocol ID for IdP from the Keystone token
  • token_id (str or None) – audit_id from Keystone token
  • outcome (str) – One of pycadf.cadftaxonomy
keystone.notifications.updated(*args, **kwargs)[source]

Decorator to send notifications for Manager.update_* methods.

keystone.routers module

The only types of routers in this file should be ComposingRouters.

The routers for the backends should be in the backend-specific router modules. For example, the ComposableRouter for identity belongs in:

keystone.identity.routers
class keystone.routers.Extension(is_admin=True)[source]

Bases: keystone.common.wsgi.ComposableRouter

add_routes(mapper)[source]
class keystone.routers.VersionV2(description)[source]

Bases: keystone.common.wsgi.ComposableRouter

add_routes(mapper)[source]
class keystone.routers.VersionV3(description, routers)[source]

Bases: keystone.common.wsgi.ComposableRouter

add_routes(mapper)[source]
class keystone.routers.Versions(description)[source]

Bases: keystone.common.wsgi.ComposableRouter

add_routes(mapper)[source]

keystone.service module

keystone.service.admin_app_factory(*args, **kw)[source]
keystone.service.admin_version_app_factory(*args, **kw)[source]
keystone.service.fail_gracefully(f)[source]

Logs exceptions and aborts.

keystone.service.loadapp(conf, name)[source]
keystone.service.public_app_factory(*args, **kw)[source]
keystone.service.public_version_app_factory(*args, **kw)[source]
keystone.service.v3_app_factory(*args, **kw)[source]

Module contents