)]}'
{"doc/source/configure_tokenless_x509.rst":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0c089e77b95f321f8b406b5d98d8e27f7d63f517","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        }"},{"line_number":199,"context_line":"    }"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"When user\u0027s ``type`` is not defined or set to ``federated``, the mapped user"},{"line_number":202,"context_line":"does not have to be a valid local user but the mapping must yield at least"},{"line_number":203,"context_line":"one valid local group. For example:"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"fa0719c6_e1ee1f8a","line":201,"updated":"2016-03-22 15:43:12.000000000","message":"I hope I\u0027m just overlooking it, but I don\u0027t see any real support for not setting \"type\" in the implementation.","commit_id":"3832da9ad4adc90b1fd44d83b59a1ed9c7eef02a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0c089e77b95f321f8b406b5d98d8e27f7d63f517","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                         {"},{"line_number":213,"context_line":"                            \"user\": {"},{"line_number":214,"context_line":"                                \"name\": \"{0}\","},{"line_number":215,"context_line":"                                \"type\": \"federated\""},{"line_number":216,"context_line":"                            }"},{"line_number":217,"context_line":"                         },"},{"line_number":218,"context_line":"                         {"}],"source_content_type":"text/x-rst","patch_set":13,"id":"fa0719c6_41e38b05","line":215,"updated":"2016-03-22 15:43:12.000000000","message":"I imagine that since all users are going to be the same now, the \"type\" attribute can just be undocumented and ignored moving forward?","commit_id":"3832da9ad4adc90b1fd44d83b59a1ed9c7eef02a"}],"doc/source/mapping_combinations.rst":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0c089e77b95f321f8b406b5d98d8e27f7d63f517","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                {"},{"line_number":297,"context_line":"                    \"id\": \"Federated\" or \"\u003clocal-domain-id\u003e\""},{"line_number":298,"context_line":"                },"},{"line_number":299,"context_line":"            \"type\": \"federated\" or \"local\","},{"line_number":300,"context_line":"            \"name\": \"\u003clocal-user-name\u003e\","},{"line_number":301,"context_line":"            \"id\": \"\u003clocal-user-id\u003e\""},{"line_number":302,"context_line":"            },"}],"source_content_type":"text/x-rst","patch_set":13,"id":"fa0719c6_41854bab","line":299,"updated":"2016-03-22 15:43:12.000000000","message":"It\u0027d be nice if our examples of JSON were actually valid JSON.","commit_id":"3832da9ad4adc90b1fd44d83b59a1ed9c7eef02a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0c089e77b95f321f8b406b5d98d8e27f7d63f517","unresolved":false,"context_lines":[{"line_number":328,"context_line":"The ``type`` parameter specifies the type of user being mapped. The 2 possible"},{"line_number":329,"context_line":"user types are ``local`` and ``federated``.``local`` is displayed if the user"},{"line_number":330,"context_line":"has a domain specified. The user is treated as existing in the backend, hence"},{"line_number":331,"context_line":"the server will fetch user details (id, name, roles, groups).``federated`` is"},{"line_number":332,"context_line":"displayed for a user that does not exist in the backend."},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"The ``id`` parameter in the service domain specifies the domain a user belongs"}],"source_content_type":"text/x-rst","patch_set":13,"id":"fa0719c6_61b16f8f","line":331,"updated":"2016-03-22 15:43:12.000000000","message":"There was a missing space here after the period.","commit_id":"3832da9ad4adc90b1fd44d83b59a1ed9c7eef02a"}],"keystone/common/config.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"122e67b4c067b6d180373769e14fd1c329c09ce3","unresolved":false,"context_lines":[{"line_number":533,"context_line":"                        \u0027using the mod_shib plugin this value is \u0027"},{"line_number":534,"context_line":"                        \u0027`Shib-Identity-Provider`).\u0027),"},{"line_number":535,"context_line":"        cfg.StrOpt(\u0027federated_domain_name\u0027, default\u003d\u0027Federated\u0027,"},{"line_number":536,"context_line":"                   help\u003d\u0027A domain name that is reserved to allow federated \u0027"},{"line_number":537,"context_line":"                        \u0027federated users to have a domain concept. Note that \u0027"},{"line_number":538,"context_line":"                        \u0027an admin will not be able to create a domain with \u0027"},{"line_number":539,"context_line":"                        \u0027this name or update an existing domain to this \u0027"},{"line_number":540,"context_line":"                        \u0027name. You are not advised to change this value \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_572c2b4a","line":537,"range":{"start_line":536,"start_character":65,"end_line":537,"end_character":34},"updated":"2016-03-16 02:18:44.000000000","message":"federated x2","commit_id":"a6bbf61b117f844ec6bdd00a2e2f4de4f4b9ced7"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"15030571a641d028590fa2ec58859515b54de153","unresolved":false,"context_lines":[{"line_number":533,"context_line":"                        \u0027using the mod_shib plugin this value is \u0027"},{"line_number":534,"context_line":"                        \u0027`Shib-Identity-Provider`).\u0027),"},{"line_number":535,"context_line":"        cfg.StrOpt(\u0027federated_domain_name\u0027, default\u003d\u0027Federated\u0027,"},{"line_number":536,"context_line":"                   help\u003d\u0027A domain name that is reserved to allow federated \u0027"},{"line_number":537,"context_line":"                        \u0027federated users to have a domain concept. Note that \u0027"},{"line_number":538,"context_line":"                        \u0027an admin will not be able to create a domain with \u0027"},{"line_number":539,"context_line":"                        \u0027this name or update an existing domain to this \u0027"},{"line_number":540,"context_line":"                        \u0027name. You are not advised to change this value \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1af94dfe_b7748fcf","line":537,"range":{"start_line":536,"start_character":65,"end_line":537,"end_character":34},"in_reply_to":"1af94dfe_572c2b4a","updated":"2016-03-16 02:40:37.000000000","message":"Done","commit_id":"a6bbf61b117f844ec6bdd00a2e2f4de4f4b9ced7"}],"keystone/common/tokenless_auth.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0c089e77b95f321f8b406b5d98d8e27f7d63f517","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        # if user is federated type, we don\u0027t care if the user exists"},{"line_number":130,"context_line":"        # or not, but just care if the mapped group(s) is valid."},{"line_number":131,"context_line":"        if user_type \u003d\u003d utils.UserType.FEDERATED:"},{"line_number":132,"context_line":"            user_ref \u003d {\u0027type\u0027: utils.UserType.FEDERATED}"},{"line_number":133,"context_line":"            group_ids \u003d mapped_properties[\u0027group_ids\u0027]"},{"line_number":134,"context_line":"            utils.validate_groups_in_backend(group_ids,"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_8145a3b4","line":131,"updated":"2016-03-22 15:43:12.000000000","message":"We MUST provide backwards compatibility for mappings that have already been created with \"ephemeral\" as the value, such as by ignoring the configured user \"type\" entirely and unifying the mapping process.","commit_id":"3832da9ad4adc90b1fd44d83b59a1ed9c7eef02a"}],"keystone/federation/utils.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d5b1506ca0db97b484574e836f5b4f836889a44f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"CONF \u003d cfg.CONF"},{"line_number":29,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":30,"context_line":"# supporting ephemeral user type to be backwards compatible"},{"line_number":31,"context_line":"DEPRECATED_USER_TYPE \u003d \u0027ephemeral\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class UserType(object):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_31deca6d","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":34},"updated":"2016-03-16 04:10:20.000000000","message":"put this on line 39?","commit_id":"297e19331802d413bafa154041c092061525b621"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"201d93de3aa4f13f12a1b7a0f9d06a663ab2a2c1","unresolved":false,"context_lines":[{"line_number":28,"context_line":"CONF \u003d cfg.CONF"},{"line_number":29,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":30,"context_line":"# supporting ephemeral user type to be backwards compatible"},{"line_number":31,"context_line":"DEPRECATED_USER_TYPE \u003d \u0027ephemeral\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class UserType(object):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_14a1fc94","line":31,"range":{"start_line":31,"start_character":0,"end_line":31,"end_character":34},"in_reply_to":"1af94dfe_31deca6d","updated":"2016-03-16 05:27:21.000000000","message":"Done","commit_id":"297e19331802d413bafa154041c092061525b621"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d5b1506ca0db97b484574e836f5b4f836889a44f","unresolved":false,"context_lines":[{"line_number":579,"context_line":"                for group in list({g[\u0027name\u0027]: g for g in groups}.values()):"},{"line_number":580,"context_line":"                    yield group"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        def normalize_user(user):"},{"line_number":583,"context_line":"            \"\"\"Parse and validate user mapping.\"\"\""},{"line_number":584,"context_line":"            user_type \u003d user.get(\u0027type\u0027)"},{"line_number":585,"context_line":"            if user_type and user_type not in (UserType.FEDERATED,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_71bfb2fb","line":582,"range":{"start_line":582,"start_character":12,"end_line":582,"end_character":26},"updated":"2016-03-16 04:10:20.000000000","message":"add another IF here to check if the deprecated version is passed in and issue a message stating we\u0027ll remove it in O or P","commit_id":"297e19331802d413bafa154041c092061525b621"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"201d93de3aa4f13f12a1b7a0f9d06a663ab2a2c1","unresolved":false,"context_lines":[{"line_number":579,"context_line":"                for group in list({g[\u0027name\u0027]: g for g in groups}.values()):"},{"line_number":580,"context_line":"                    yield group"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        def normalize_user(user):"},{"line_number":583,"context_line":"            \"\"\"Parse and validate user mapping.\"\"\""},{"line_number":584,"context_line":"            user_type \u003d user.get(\u0027type\u0027)"},{"line_number":585,"context_line":"            if user_type and user_type not in (UserType.FEDERATED,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_f499f06f","line":582,"range":{"start_line":582,"start_character":12,"end_line":582,"end_character":26},"in_reply_to":"1af94dfe_71bfb2fb","updated":"2016-03-16 05:27:21.000000000","message":"Done","commit_id":"297e19331802d413bafa154041c092061525b621"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"79abd6c77649496ae919d389cebb694605f12242","unresolved":false,"context_lines":[{"line_number":591,"context_line":"                raise exception.ValidationError(msg)"},{"line_number":592,"context_line":"            elif user_type \u003d\u003d UserType.DEPRECATED_EPHEMERAL:"},{"line_number":593,"context_line":"                msg \u003d _(\u0027User type ephemeral has been deprecated and will be \u0027"},{"line_number":594,"context_line":"                        \u0027removed in O or P\u0027)"},{"line_number":595,"context_line":"                versionutils.report_deprecated_feature(LOG, msg)"},{"line_number":596,"context_line":"                user_type \u003d user[\u0027type\u0027] \u003d UserType.FEDERATED"},{"line_number":597,"context_line":"            elif user_type is None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1af94dfe_de057d7a","line":594,"updated":"2016-03-17 21:58:39.000000000","message":"Ocata* \n\nCan we provide an \"in favor of\" statement with this message? User type ephemeral has been deprecated in favor or federated?","commit_id":"9ce9d6a9f0132bd3de35c1695751c9bda297325f"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"59b23132e7ff08de97ddd2aa6f1eff77961bb82f","unresolved":false,"context_lines":[{"line_number":591,"context_line":"                raise exception.ValidationError(msg)"},{"line_number":592,"context_line":"            elif user_type \u003d\u003d UserType.DEPRECATED_EPHEMERAL:"},{"line_number":593,"context_line":"                msg \u003d _(\u0027User type ephemeral has been deprecated and will be \u0027"},{"line_number":594,"context_line":"                        \u0027removed in O or P\u0027)"},{"line_number":595,"context_line":"                versionutils.report_deprecated_feature(LOG, msg)"},{"line_number":596,"context_line":"                user_type \u003d user[\u0027type\u0027] \u003d UserType.FEDERATED"},{"line_number":597,"context_line":"            elif user_type is None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1af94dfe_09f691f8","line":594,"in_reply_to":"1af94dfe_de057d7a","updated":"2016-03-17 22:16:27.000000000","message":"Done","commit_id":"9ce9d6a9f0132bd3de35c1695751c9bda297325f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0c089e77b95f321f8b406b5d98d8e27f7d63f517","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"\"\"User mapping type.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    EPHEMERAL \u003d \u0027ephemeral\u0027"},{"line_number":36,"context_line":"    LOCAL \u003d \u0027local\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"MAPPING_SCHEMA \u003d {"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_a14f07bc","side":"PARENT","line":36,"updated":"2016-03-22 15:43:12.000000000","message":"What is the meaningful difference between FEDERATED and LOCAL moving forward? They should all just be shadow users at the end of the day, right?","commit_id":"0285254b7635a7400a8c2d87e4297ed4e143ab80"}],"keystone/middleware/auth.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d5b1506ca0db97b484574e836f5b4f836889a44f","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        # NOTE(gyee): if it is an federated user, the"},{"line_number":120,"context_line":"        # given X.509 SSL client cert does not need to map to"},{"line_number":121,"context_line":"        # an existing user."},{"line_number":122,"context_line":"        if user_ref[\u0027type\u0027] \u003d\u003d utils.UserType.FEDERATED:"},{"line_number":123,"context_line":"            auth_context \u003d {}"},{"line_number":124,"context_line":"            auth_context[\u0027group_ids\u0027] \u003d user_ref[\u0027group_ids\u0027]"},{"line_number":125,"context_line":"            auth_context[federation_constants.IDENTITY_PROVIDER] \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_715692d3","line":122,"range":{"start_line":122,"start_character":8,"end_line":122,"end_character":56},"updated":"2016-03-16 04:10:20.000000000","message":"this would also need to be updated to include deprecated version","commit_id":"297e19331802d413bafa154041c092061525b621"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"201d93de3aa4f13f12a1b7a0f9d06a663ab2a2c1","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        # NOTE(gyee): if it is an federated user, the"},{"line_number":120,"context_line":"        # given X.509 SSL client cert does not need to map to"},{"line_number":121,"context_line":"        # an existing user."},{"line_number":122,"context_line":"        if user_ref[\u0027type\u0027] \u003d\u003d utils.UserType.FEDERATED:"},{"line_number":123,"context_line":"            auth_context \u003d {}"},{"line_number":124,"context_line":"            auth_context[\u0027group_ids\u0027] \u003d user_ref[\u0027group_ids\u0027]"},{"line_number":125,"context_line":"            auth_context[federation_constants.IDENTITY_PROVIDER] \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_f40c5096","line":122,"range":{"start_line":122,"start_character":8,"end_line":122,"end_character":56},"in_reply_to":"1af94dfe_715692d3","updated":"2016-03-16 05:27:21.000000000","message":"Done","commit_id":"297e19331802d413bafa154041c092061525b621"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9292b635b69e01d312115ae5b9b52dfd1d2a7510","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            project_id,"},{"line_number":117,"context_line":"            domain_id)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        # TODO(rderose): this is for backwards compatibility, remove in O or P"},{"line_number":120,"context_line":"        if user_ref[\u0027type\u0027] \u003d\u003d utils.UserType.DEPRECATED_EPHEMERAL:"},{"line_number":121,"context_line":"            msg \u003d _(\u0027User type ephemeral has been deprecated and will be \u0027"},{"line_number":122,"context_line":"                    \u0027removed in O or P\u0027)"},{"line_number":123,"context_line":"            versionutils.report_deprecated_feature(LOG, msg)"},{"line_number":124,"context_line":"            user_ref[\u0027type\u0027] \u003d utils.UserType.FEDERATED"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # NOTE(gyee): if it is an federated user, the"},{"line_number":127,"context_line":"        # given X.509 SSL client cert does not need to map to"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_32d511b9","line":124,"range":{"start_line":119,"start_character":7,"end_line":124,"end_character":55},"updated":"2016-03-16 14:14:49.000000000","message":"i don\u0027t think this is necessary, it already logs it in utils","commit_id":"ffb8dbcebbaa8bb5252a99faef9b52e5b7920399"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"c75bfb09930ef239fe5e934548283f6d5e4ac945","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            project_id,"},{"line_number":117,"context_line":"            domain_id)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        # TODO(rderose): this is for backwards compatibility, remove in O or P"},{"line_number":120,"context_line":"        if user_ref[\u0027type\u0027] \u003d\u003d utils.UserType.DEPRECATED_EPHEMERAL:"},{"line_number":121,"context_line":"            msg \u003d _(\u0027User type ephemeral has been deprecated and will be \u0027"},{"line_number":122,"context_line":"                    \u0027removed in O or P\u0027)"},{"line_number":123,"context_line":"            versionutils.report_deprecated_feature(LOG, msg)"},{"line_number":124,"context_line":"            user_ref[\u0027type\u0027] \u003d utils.UserType.FEDERATED"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        # NOTE(gyee): if it is an federated user, the"},{"line_number":127,"context_line":"        # given X.509 SSL client cert does not need to map to"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_811c9114","line":124,"range":{"start_line":119,"start_character":7,"end_line":124,"end_character":55},"in_reply_to":"1af94dfe_32d511b9","updated":"2016-03-16 16:31:14.000000000","message":"Done","commit_id":"ffb8dbcebbaa8bb5252a99faef9b52e5b7920399"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9292b635b69e01d312115ae5b9b52dfd1d2a7510","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        # NOTE(gyee): if it is an federated user, the"},{"line_number":127,"context_line":"        # given X.509 SSL client cert does not need to map to"},{"line_number":128,"context_line":"        # an existing user."},{"line_number":129,"context_line":"        if user_ref[\u0027type\u0027] \u003d\u003d utils.UserType.FEDERATED:"},{"line_number":130,"context_line":"            auth_context \u003d {}"},{"line_number":131,"context_line":"            auth_context[\u0027group_ids\u0027] \u003d user_ref[\u0027group_ids\u0027]"},{"line_number":132,"context_line":"            auth_context[federation_constants.IDENTITY_PROVIDER] \u003d ("}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_72695925","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":56},"updated":"2016-03-16 14:14:49.000000000","message":"if user_ref[\u0027type\u0027] \u003d\u003d utils.UserType.FEDERATED or user_ref[\u0027type\u0027] \u003d\u003d  utils.UserType.DEPRECATED_EPHEMERAL):","commit_id":"ffb8dbcebbaa8bb5252a99faef9b52e5b7920399"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"c75bfb09930ef239fe5e934548283f6d5e4ac945","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        # NOTE(gyee): if it is an federated user, the"},{"line_number":127,"context_line":"        # given X.509 SSL client cert does not need to map to"},{"line_number":128,"context_line":"        # an existing user."},{"line_number":129,"context_line":"        if user_ref[\u0027type\u0027] \u003d\u003d utils.UserType.FEDERATED:"},{"line_number":130,"context_line":"            auth_context \u003d {}"},{"line_number":131,"context_line":"            auth_context[\u0027group_ids\u0027] \u003d user_ref[\u0027group_ids\u0027]"},{"line_number":132,"context_line":"            auth_context[federation_constants.IDENTITY_PROVIDER] \u003d ("}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_e11bd519","line":129,"range":{"start_line":129,"start_character":8,"end_line":129,"end_character":56},"in_reply_to":"1af94dfe_72695925","updated":"2016-03-16 16:31:14.000000000","message":"Done","commit_id":"ffb8dbcebbaa8bb5252a99faef9b52e5b7920399"}],"keystone/tests/unit/contrib/federation/test_utils.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0c089e77b95f321f8b406b5d98d8e27f7d63f517","unresolved":false,"context_lines":[{"line_number":487,"context_line":"        try:"},{"line_number":488,"context_line":"            mapping_utils.validate_mapping_structure(mapping)"},{"line_number":489,"context_line":"        except exception.ValidationError:"},{"line_number":490,"context_line":"            validation_exception_raised \u003d True"},{"line_number":491,"context_line":"        self.assertFalse(validation_exception_raised)"},{"line_number":492,"context_line":"        rp \u003d mapping_utils.RuleProcessor(FAKE_MAPPING_ID, mapping[\u0027rules\u0027])"},{"line_number":493,"context_line":"        assertion \u003d mapping_fixtures.CONTRACTOR_ASSERTION"}],"source_content_type":"text/x-python","patch_set":13,"id":"fa0719c6_24d30206","line":490,"updated":"2016-03-22 15:43:12.000000000","message":"use self.assertRaises() instead of using try/excepts in tests (which is an anti-pattern)","commit_id":"3832da9ad4adc90b1fd44d83b59a1ed9c7eef02a"}]}
