':param tenant_name: Name of the project this user belongs to. Note:
When token_scope is set to project, this argument
control to which project to scope the token to.
:type tenant_name: ``str``
:param domain_name: Domain the user belongs to. Note: Then token_scope
is set to token, this argument controls to which
domain to scope the token to.
:type domain_name: ``str``
:param token_scope: Whether to scope a token to a "project", a
"domain" or "unscoped"
:type token_scope: ``str``'

def __init__(self, auth_url, user_id, key, tenant_name=None, domain_name='Default', token_scope=OpenStackIdentityTokenScope.PROJECT, timeout=None, parent_conn=None):

    super(OpenStackIdentity_3_0_Connection, self).__init__(auth_url=auth_url, user_id=user_id, key=key, tenant_name=tenant_name, domain_name=domain_name, token_scope=token_scope, timeout=timeout, parent_conn=parent_conn)
    if (self.token_scope not in self.VALID_TOKEN_SCOPES):
        raise ValueError(('Invalid    value    for    "token_scope"    argument:    %s' % self.token_scope))
    if ((self.token_scope == OpenStackIdentityTokenScope.PROJECT) and ((not self.tenant_name) or (not self.domain_name))):
        raise ValueError('Must    provide    tenant_name    and    domain_name    argument')
    elif ((self.token_scope == OpenStackIdentityTokenScope.DOMAIN) and (not self.domain_name)):
        raise ValueError('Must    provide    domain_name    argument')
    self.auth_user_roles = None
