)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0c352a9a4d3688d14166d128c7da3b9ea39b3701","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Olivier Pilotte \u003colivierpilotte@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-08-07 15:26:32 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Keystone accepts Group IDs from the IdP without any Domain reference"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Idd3c218684b946603701de902d14f6a718acca40"},{"line_number":10,"context_line":"Implements: blueprint federation-group-ids-mapped-without-domain-reference"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a4dcd0f_159f84b5","line":7,"updated":"2015-08-07 19:36:39.000000000","message":"This should be a 50 character or less summary: https://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"183542f16b4226a9e9dd9b0eed850439b173d44c"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"390a087543956a6e9f668b401c1c78b1ea18eff0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Olivier Pilotte \u003colivierpilotte@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-08-10 17:28:04 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Keystone accepts Group IDs from the IdP without any Domain reference"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Idd3c218684b946603701de902d14f6a718acca40"},{"line_number":10,"context_line":"Implements: blueprint federation-group-ids-mapped-without-domain-reference"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a4dcd0f_20da004c","line":7,"updated":"2015-08-11 15:09:48.000000000","message":"The title should say what the commit does. Like \"prevent keystone from accepting Group IDs...\" or \"allow keystone to accept Group IDs...\"","commit_id":"1431c2e191bc7d57009535b7b6b3f9848c798935"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"390a087543956a6e9f668b401c1c78b1ea18eff0","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-08-10 17:28:04 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Keystone accepts Group IDs from the IdP without any Domain reference"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Idd3c218684b946603701de902d14f6a718acca40"},{"line_number":10,"context_line":"Implements: blueprint federation-group-ids-mapped-without-domain-reference"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a4dcd0f_00da64e8","line":8,"updated":"2015-08-11 15:09:48.000000000","message":"Something should be here. What the commit does and why it is needed. A link to bp is not enough.","commit_id":"1431c2e191bc7d57009535b7b6b3f9848c798935"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"addcd580063195cd370cfad40bffb00f8bc7e8b9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Olivier Pilotte \u003colivierpilotte@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-08-11 11:13:01 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"allow Keystone to accept Group IDs from the IdP without any Domain reference"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If group_ids is explicitely set in the saml2 assertion, add those ids to the"},{"line_number":10,"context_line":"mapped_properties."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1a4dcd0f_35c5445b","line":7,"updated":"2015-08-12 04:06:43.000000000","message":"This should be a 50 character or less summary: https://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure\n\nSuggest something like:\n    Accepts Group IDs from the IdP without domain","commit_id":"efa5177de1fa0884f4c18f74bc93a85e0d6fab56"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5cf9863f16ee2bd9c47bc81be4fb6bd49a7dde1d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Accepts Group IDs from the IdP without domain"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If group_ids is explicitely set in the saml2 assertion, add those ids to the"},{"line_number":10,"context_line":"mapped_properties."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Idd3c218684b946603701de902d14f6a718acca40"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"7a2fa921_e4a49809","line":9,"updated":"2015-10-05 20:28:07.000000000","message":"change \"explicitely\" to \"explicitly\"","commit_id":"40a4154e1a7283e805c1a7044c9ce4d70df5653b"}],"keystone/contrib/federation/utils.py":[{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"bbd15da3b4d99e0523f1f937321b09c7c3eb4d3b","unresolved":false,"context_lines":[{"line_number":579,"context_line":"                group_names.extend(group_dicts)"},{"line_number":580,"context_line":"            if \u0027group_ids\u0027 in identity_value:"},{"line_number":581,"context_line":"                group_ids \u003d ast.literal_eval(identity_value[\u0027group_ids\u0027])"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"        normalize_user(user)"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        return {\u0027user\u0027: user,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_eea9b425","line":582,"updated":"2015-08-10 12:19:12.000000000","message":"so this change would discard all other group_ids allocated from \u0027local\u0027 section.\nalso, such ids should be black/whitelistable.","commit_id":"2c412d8906c5507fde2a3fe57cea1855cbb2a19a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"06af78e7aa7f47ffe3d09daacbd10e5422c2fa45","unresolved":false,"context_lines":[{"line_number":561,"context_line":"                # In this case, identity_value[\u0027groups\u0027] is a string"},{"line_number":562,"context_line":"                # representation of a list, and we want a real list.  This is"},{"line_number":563,"context_line":"                # due to the way we do direct mapping substitutions today (see"},{"line_number":564,"context_line":"                # function _update_local_mapping() )"},{"line_number":565,"context_line":"                try:"},{"line_number":566,"context_line":"                    group_names_list \u003d ast.literal_eval("},{"line_number":567,"context_line":"                        identity_value[\u0027groups\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_cacb6c52","side":"PARENT","line":564,"updated":"2015-09-15 09:26:49.000000000","message":"wow, that\u0027s a terrible bug to continue working around","commit_id":"7f279ad636de8ccd8025dd1c7f079c29005f177a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5cf9863f16ee2bd9c47bc81be4fb6bd49a7dde1d","unresolved":false,"context_lines":[{"line_number":579,"context_line":"                try:"},{"line_number":580,"context_line":"                    group_ids.update("},{"line_number":581,"context_line":"                        ast.literal_eval(identity_value[\u0027group_ids\u0027]))"},{"line_number":582,"context_line":"                except (ValueError, SyntaxError):"},{"line_number":583,"context_line":"                    group_ids.update([identity_value[\u0027group_ids\u0027]])"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"        normalize_user(user)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_62a71b50","line":582,"updated":"2015-10-05 20:28:07.000000000","message":"add a comment to explain why this is here.","commit_id":"40a4154e1a7283e805c1a7044c9ce4d70df5653b"}],"keystone/federation/utils.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"94dd2463ebdfb9958170f7ceff89f71d127b19d0","unresolved":false,"context_lines":[{"line_number":577,"context_line":"                        ast.literal_eval(identity_value[\u0027group_ids\u0027]))"},{"line_number":578,"context_line":"                except (ValueError, SyntaxError):"},{"line_number":579,"context_line":"                    # if literal_eval fails, use the group_ids"},{"line_number":580,"context_line":"                    # using the provided identity_value as is"},{"line_number":581,"context_line":"                    group_ids.update([identity_value[\u0027group_ids\u0027]])"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"        normalize_user(user)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba8a016a_e1718d45","line":580,"updated":"2015-11-23 19:51:27.000000000","message":"The comment needs to explain why this code needs to be so complicated. We don\u0027t need comments to explain what the code does, we can see that already. Why is it correct to use the identity_value as is if literal_eval fails?","commit_id":"d7dbdebd5d06fd603661d61d214955864a5f7f32"}],"keystone/tests/unit/contrib/federation/test_utils.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5cf9863f16ee2bd9c47bc81be4fb6bd49a7dde1d","unresolved":false,"context_lines":[{"line_number":634,"context_line":"        self.assertNotIn(\u0027name\u0027, mapped_properties[\u0027user\u0027])"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"    def test_rule_engine_group_ids_mapping_whitelist(self):"},{"line_number":637,"context_line":"        \"\"\"Test mapping engine when group_ids is explicitely set."},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"        Also test whitelists on group ids"},{"line_number":640,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_249b70cb","line":637,"updated":"2015-10-05 20:28:07.000000000","message":"change \"explicitely\" to \"explicitly\". (This applies throughout this change where \"explicitely\" is used.)","commit_id":"40a4154e1a7283e805c1a7044c9ce4d70df5653b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5cf9863f16ee2bd9c47bc81be4fb6bd49a7dde1d","unresolved":false,"context_lines":[{"line_number":651,"context_line":"        self.assertEqual(\u0027opilotte\u0027, mapped_properties[\u0027user\u0027][\u0027name\u0027])"},{"line_number":652,"context_line":"        self.assertListEqual([], mapped_properties[\u0027group_names\u0027])"},{"line_number":653,"context_line":"        self.assertListEqual([\u0027abc123\u0027, \u0027ghi789\u0027, \u0027klm012\u0027],"},{"line_number":654,"context_line":"                             sorted(mapped_properties[\u0027group_ids\u0027]))"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"    def test_rule_engine_group_ids_mapping_blacklist(self):"},{"line_number":657,"context_line":"        \"\"\"Test mapping engine when group_ids is explicitely set."}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_84b6043c","line":654,"updated":"2015-10-05 20:28:07.000000000","message":"use assertItemsEqual (This applies to the other tests, too.)","commit_id":"40a4154e1a7283e805c1a7044c9ce4d70df5653b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5cf9863f16ee2bd9c47bc81be4fb6bd49a7dde1d","unresolved":false,"context_lines":[{"line_number":676,"context_line":"    def test_rule_engine_group_ids_mapping_only_one_group(self):"},{"line_number":677,"context_line":"        \"\"\"Test mapping engine when group_ids is explicitely set."},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        If the group ids list is having only one group,"},{"line_number":680,"context_line":"        test if the transformation is done correctly"},{"line_number":681,"context_line":""},{"line_number":682,"context_line":"        For that, we use mapping rule MAPPING_GROUPS_IDS_BLACKLIST and"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_a4f9c0ca","line":679,"updated":"2015-10-05 20:28:07.000000000","message":"change \"is having\" to \"has\"","commit_id":"40a4154e1a7283e805c1a7044c9ce4d70df5653b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"19f1d5720b63e12a302e1b9e561931b19eaf97a0","unresolved":false,"context_lines":[{"line_number":640,"context_line":""},{"line_number":641,"context_line":"        For that, we use mapping rule MAPPING_GROUPS_IDS_WHITELIST and"},{"line_number":642,"context_line":"        assertion GROUP_IDS_ASSERTION"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"        \"\"\""},{"line_number":645,"context_line":""},{"line_number":646,"context_line":"        mapping \u003d mapping_fixtures.MAPPING_GROUPS_IDS_WHITELIST"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a2fa921_4ba970de","line":643,"updated":"2015-10-07 20:58:58.000000000","message":"i think we will have patches landing soon to make some changes to docstrings. \n\nhttps://review.openstack.org/#/c/229887/\n\njust a heads up incase that gets in before this does.","commit_id":"afc05ee3721a56f83ae20f03a22c9705bc26b569"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"a39b96e793fdfcd34b35f1bb31101cb74d6a0b26","unresolved":false,"context_lines":[{"line_number":649,"context_line":"        mapped_properties \u003d rp.process(assertion)"},{"line_number":650,"context_line":"        self.assertIsNotNone(mapped_properties)"},{"line_number":651,"context_line":"        self.assertEqual(\u0027opilotte\u0027, mapped_properties[\u0027user\u0027][\u0027name\u0027])"},{"line_number":652,"context_line":"        self.assertItemsEqual([], mapped_properties[\u0027group_names\u0027])"},{"line_number":653,"context_line":"        self.assertItemsEqual([\u0027abc123\u0027, \u0027ghi789\u0027, \u0027klm012\u0027],"},{"line_number":654,"context_line":"                              sorted(mapped_properties[\u0027group_ids\u0027]))"},{"line_number":655,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_e9e64114","line":652,"updated":"2015-10-31 01:22:49.000000000","message":"assertlistequal might be a better assert to use here https://docs.python.org/2/library/unittest.html#unittest.TestCase.assertListEqual","commit_id":"afc05ee3721a56f83ae20f03a22c9705bc26b569"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"a39b96e793fdfcd34b35f1bb31101cb74d6a0b26","unresolved":false,"context_lines":[{"line_number":650,"context_line":"        self.assertIsNotNone(mapped_properties)"},{"line_number":651,"context_line":"        self.assertEqual(\u0027opilotte\u0027, mapped_properties[\u0027user\u0027][\u0027name\u0027])"},{"line_number":652,"context_line":"        self.assertItemsEqual([], mapped_properties[\u0027group_names\u0027])"},{"line_number":653,"context_line":"        self.assertItemsEqual([\u0027abc123\u0027, \u0027ghi789\u0027, \u0027klm012\u0027],"},{"line_number":654,"context_line":"                              sorted(mapped_properties[\u0027group_ids\u0027]))"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"    def test_rule_engine_group_ids_mapping_blacklist(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_693311ac","line":653,"updated":"2015-10-31 01:22:49.000000000","message":"Ditto","commit_id":"afc05ee3721a56f83ae20f03a22c9705bc26b569"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"a39b96e793fdfcd34b35f1bb31101cb74d6a0b26","unresolved":false,"context_lines":[{"line_number":669,"context_line":"        mapped_properties \u003d rp.process(assertion)"},{"line_number":670,"context_line":"        self.assertIsNotNone(mapped_properties)"},{"line_number":671,"context_line":"        self.assertEqual(\u0027opilotte\u0027, mapped_properties[\u0027user\u0027][\u0027name\u0027])"},{"line_number":672,"context_line":"        self.assertItemsEqual([], mapped_properties[\u0027group_names\u0027])"},{"line_number":673,"context_line":"        self.assertItemsEqual([\u0027abc123\u0027, \u0027ghi789\u0027, \u0027klm012\u0027],"},{"line_number":674,"context_line":"                              sorted(mapped_properties[\u0027group_ids\u0027]))"},{"line_number":675,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_09db7d50","line":672,"updated":"2015-10-31 01:22:49.000000000","message":"Ditto","commit_id":"afc05ee3721a56f83ae20f03a22c9705bc26b569"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"a39b96e793fdfcd34b35f1bb31101cb74d6a0b26","unresolved":false,"context_lines":[{"line_number":670,"context_line":"        self.assertIsNotNone(mapped_properties)"},{"line_number":671,"context_line":"        self.assertEqual(\u0027opilotte\u0027, mapped_properties[\u0027user\u0027][\u0027name\u0027])"},{"line_number":672,"context_line":"        self.assertItemsEqual([], mapped_properties[\u0027group_names\u0027])"},{"line_number":673,"context_line":"        self.assertItemsEqual([\u0027abc123\u0027, \u0027ghi789\u0027, \u0027klm012\u0027],"},{"line_number":674,"context_line":"                              sorted(mapped_properties[\u0027group_ids\u0027]))"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"    def test_rule_engine_group_ids_mapping_only_one_group(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_8918ed1f","line":673,"updated":"2015-10-31 01:22:49.000000000","message":"Ditto","commit_id":"afc05ee3721a56f83ae20f03a22c9705bc26b569"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"a39b96e793fdfcd34b35f1bb31101cb74d6a0b26","unresolved":false,"context_lines":[{"line_number":690,"context_line":"        mapped_properties \u003d rp.process(assertion)"},{"line_number":691,"context_line":"        self.assertIsNotNone(mapped_properties)"},{"line_number":692,"context_line":"        self.assertEqual(\u0027opilotte\u0027, mapped_properties[\u0027user\u0027][\u0027name\u0027])"},{"line_number":693,"context_line":"        self.assertItemsEqual([], mapped_properties[\u0027group_names\u0027])"},{"line_number":694,"context_line":"        self.assertItemsEqual([\u0027321cba\u0027, \u0027210mlk\u0027],"},{"line_number":695,"context_line":"                              sorted(mapped_properties[\u0027group_ids\u0027]))"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_69da314e","line":693,"updated":"2015-10-31 01:22:49.000000000","message":"Ditto","commit_id":"afc05ee3721a56f83ae20f03a22c9705bc26b569"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"a39b96e793fdfcd34b35f1bb31101cb74d6a0b26","unresolved":false,"context_lines":[{"line_number":691,"context_line":"        self.assertIsNotNone(mapped_properties)"},{"line_number":692,"context_line":"        self.assertEqual(\u0027opilotte\u0027, mapped_properties[\u0027user\u0027][\u0027name\u0027])"},{"line_number":693,"context_line":"        self.assertItemsEqual([], mapped_properties[\u0027group_names\u0027])"},{"line_number":694,"context_line":"        self.assertItemsEqual([\u0027321cba\u0027, \u0027210mlk\u0027],"},{"line_number":695,"context_line":"                              sorted(mapped_properties[\u0027group_ids\u0027]))"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_49d5f519","line":694,"updated":"2015-10-31 01:22:49.000000000","message":"Ditto","commit_id":"afc05ee3721a56f83ae20f03a22c9705bc26b569"},{"author":{"_account_id":16523,"name":"ZhangLei","display_name":"ZhangLei","email":"zhang.lei@99cloud.net","username":"zhang.lei"},"change_message_id":"d705af7b028c979a2e72d2b912892dcc7d64fafb","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        assertion GROUP_IDS_ASSERTION"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"        \"\"\""},{"line_number":633,"context_line":""},{"line_number":634,"context_line":"        mapping \u003d mapping_fixtures.MAPPING_GROUPS_IDS_WHITELIST"},{"line_number":635,"context_line":"        assertion \u003d mapping_fixtures.GROUP_IDS_ASSERTION"},{"line_number":636,"context_line":"        rp \u003d mapping_utils.RuleProcessor(mapping[\u0027rules\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"da85f559_f4171b52","line":633,"updated":"2015-11-16 02:13:37.000000000","message":"remove L633\n\nhttps://github.com/GreenSteam/pep257/blob/master/src/pep257.py#L1387","commit_id":"1388241c87337e515c931022b622e50a90425db1"},{"author":{"_account_id":16523,"name":"ZhangLei","display_name":"ZhangLei","email":"zhang.lei@99cloud.net","username":"zhang.lei"},"change_message_id":"d705af7b028c979a2e72d2b912892dcc7d64fafb","unresolved":false,"context_lines":[{"line_number":650,"context_line":"        assertion GROUP_IDS_ASSERTION"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"        \"\"\""},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"        mapping \u003d mapping_fixtures.MAPPING_GROUPS_IDS_BLACKLIST"},{"line_number":655,"context_line":"        assertion \u003d mapping_fixtures.GROUP_IDS_ASSERTION"},{"line_number":656,"context_line":"        rp \u003d mapping_utils.RuleProcessor(mapping[\u0027rules\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"da85f559_141bbf81","line":653,"updated":"2015-11-16 02:13:37.000000000","message":"same","commit_id":"1388241c87337e515c931022b622e50a90425db1"},{"author":{"_account_id":16523,"name":"ZhangLei","display_name":"ZhangLei","email":"zhang.lei@99cloud.net","username":"zhang.lei"},"change_message_id":"d705af7b028c979a2e72d2b912892dcc7d64fafb","unresolved":false,"context_lines":[{"line_number":671,"context_line":"        assertion GROUP_IDS_ASSERTION_ONLY_ONE_GROUP"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        \"\"\""},{"line_number":674,"context_line":""},{"line_number":675,"context_line":"        mapping \u003d mapping_fixtures.MAPPING_GROUPS_IDS_WHITELIST"},{"line_number":676,"context_line":"        assertion \u003d mapping_fixtures.GROUP_IDS_ASSERTION_ONLY_ONE_GROUP"},{"line_number":677,"context_line":"        rp \u003d mapping_utils.RuleProcessor(mapping[\u0027rules\u0027])"}],"source_content_type":"text/x-python","patch_set":16,"id":"da85f559_b411935f","line":674,"updated":"2015-11-16 02:13:37.000000000","message":"save","commit_id":"1388241c87337e515c931022b622e50a90425db1"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"94dd2463ebdfb9958170f7ceff89f71d127b19d0","unresolved":false,"context_lines":[{"line_number":626,"context_line":""},{"line_number":627,"context_line":"        Also test whitelists on group ids"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"        For that, we use mapping rule MAPPING_GROUPS_IDS_WHITELIST and"},{"line_number":630,"context_line":"        assertion GROUP_IDS_ASSERTION"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"ba8a016a_41fe596c","line":629,"updated":"2015-11-23 19:51:27.000000000","message":"This extra documentation is just duplicating what\u0027s below so will get out of date. Remove it.","commit_id":"d7dbdebd5d06fd603661d61d214955864a5f7f32"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"94dd2463ebdfb9958170f7ceff89f71d127b19d0","unresolved":false,"context_lines":[{"line_number":637,"context_line":"        self.assertIsNotNone(mapped_properties)"},{"line_number":638,"context_line":"        self.assertEqual(\u0027opilotte\u0027, mapped_properties[\u0027user\u0027][\u0027name\u0027])"},{"line_number":639,"context_line":"        self.assertListEqual([], mapped_properties[\u0027group_names\u0027])"},{"line_number":640,"context_line":"        self.assertListEqual([\u0027abc123\u0027, \u0027ghi789\u0027, \u0027klm012\u0027],"},{"line_number":641,"context_line":"                             sorted(mapped_properties[\u0027group_ids\u0027]))"},{"line_number":642,"context_line":""},{"line_number":643,"context_line":"    def test_rule_engine_group_ids_mapping_blacklist(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba8a016a_61d4bdbc","line":640,"updated":"2015-11-23 19:51:27.000000000","message":"use assertItemsEqual since the order doesn\u0027t matter, then remove the call to sort the properties. (This applies to the other tests, too). Note that I made this same comment in patch set 11.","commit_id":"d7dbdebd5d06fd603661d61d214955864a5f7f32"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"94dd2463ebdfb9958170f7ceff89f71d127b19d0","unresolved":false,"context_lines":[{"line_number":645,"context_line":""},{"line_number":646,"context_line":"        Also test blacklists on group ids"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"        For that, we use mapping rule MAPPING_GROUPS_IDS_BLACKLIST and"},{"line_number":649,"context_line":"        assertion GROUP_IDS_ASSERTION"},{"line_number":650,"context_line":""},{"line_number":651,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"ba8a016a_416df902","line":648,"updated":"2015-11-23 19:51:27.000000000","message":"This extra documentation is just duplicating what\u0027s below so will get out of date. Remove it.","commit_id":"d7dbdebd5d06fd603661d61d214955864a5f7f32"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"94dd2463ebdfb9958170f7ceff89f71d127b19d0","unresolved":false,"context_lines":[{"line_number":656,"context_line":"        self.assertIsNotNone(mapped_properties)"},{"line_number":657,"context_line":"        self.assertEqual(\u0027opilotte\u0027, mapped_properties[\u0027user\u0027][\u0027name\u0027])"},{"line_number":658,"context_line":"        self.assertListEqual([], mapped_properties[\u0027group_names\u0027])"},{"line_number":659,"context_line":"        self.assertListEqual([\u0027abc123\u0027, \u0027ghi789\u0027, \u0027klm012\u0027],"},{"line_number":660,"context_line":"                             sorted(mapped_properties[\u0027group_ids\u0027]))"},{"line_number":661,"context_line":""},{"line_number":662,"context_line":"    def test_rule_engine_group_ids_mapping_only_one_group(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba8a016a_814a0182","line":659,"updated":"2015-11-23 19:51:27.000000000","message":"use assertItemsEqual","commit_id":"d7dbdebd5d06fd603661d61d214955864a5f7f32"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"94dd2463ebdfb9958170f7ceff89f71d127b19d0","unresolved":false,"context_lines":[{"line_number":665,"context_line":"        If the group ids list has only one group,"},{"line_number":666,"context_line":"        test if the transformation is done correctly"},{"line_number":667,"context_line":""},{"line_number":668,"context_line":"        For that, we use mapping rule MAPPING_GROUPS_IDS_BLACKLIST and"},{"line_number":669,"context_line":"        assertion GROUP_IDS_ASSERTION_ONLY_ONE_GROUP"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"ba8a016a_215a3551","line":668,"updated":"2015-11-23 19:51:27.000000000","message":"This extra documentation is just duplicating what\u0027s below so will get out of date. Remove it.","commit_id":"d7dbdebd5d06fd603661d61d214955864a5f7f32"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"94dd2463ebdfb9958170f7ceff89f71d127b19d0","unresolved":false,"context_lines":[{"line_number":676,"context_line":"        self.assertIsNotNone(mapped_properties)"},{"line_number":677,"context_line":"        self.assertEqual(\u0027opilotte\u0027, mapped_properties[\u0027user\u0027][\u0027name\u0027])"},{"line_number":678,"context_line":"        self.assertListEqual([], mapped_properties[\u0027group_names\u0027])"},{"line_number":679,"context_line":"        self.assertListEqual([\u0027210mlk\u0027, \u0027321cba\u0027],"},{"line_number":680,"context_line":"                             sorted(mapped_properties[\u0027group_ids\u0027]))"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba8a016a_844d2f74","line":679,"updated":"2015-11-23 19:51:27.000000000","message":"use assertItemsEqual","commit_id":"d7dbdebd5d06fd603661d61d214955864a5f7f32"}],"keystone/tests/unit/mapping_fixtures.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5cf9863f16ee2bd9c47bc81be4fb6bd49a7dde1d","unresolved":false,"context_lines":[{"line_number":1256,"context_line":"    ]"},{"line_number":1257,"context_line":"}"},{"line_number":1258,"context_line":""},{"line_number":1259,"context_line":"EMPLOYEE_ASSERTION \u003d {"},{"line_number":1260,"context_line":"    \u0027Email\u0027: \u0027tim@example.com\u0027,"},{"line_number":1261,"context_line":"    \u0027UserName\u0027: \u0027tbo\u0027,"},{"line_number":1262,"context_line":"    \u0027FirstName\u0027: \u0027Tim\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_44d8ec53","line":1259,"updated":"2015-10-05 20:28:07.000000000","message":"revert the whitespace change on the previous line.","commit_id":"40a4154e1a7283e805c1a7044c9ce4d70df5653b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5cf9863f16ee2bd9c47bc81be4fb6bd49a7dde1d","unresolved":false,"context_lines":[{"line_number":1390,"context_line":""},{"line_number":1391,"context_line":"GROUP_IDS_ASSERTION_ONLY_ONE_GROUP \u003d {"},{"line_number":1392,"context_line":"    \u0027name\u0027: \u0027opilotte\u0027,"},{"line_number":1393,"context_line":"    \u0027group_ids\u0027: \u0027abc123\u0027,"},{"line_number":1394,"context_line":"    \u0027group\u0027: \u0027klm012\u0027"},{"line_number":1395,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_24a130aa","line":1393,"updated":"2015-10-05 20:28:07.000000000","message":"this should use values different from GROUP_IDS_ASSERTION so that the test will be specific.","commit_id":"40a4154e1a7283e805c1a7044c9ce4d70df5653b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"19f1d5720b63e12a302e1b9e561931b19eaf97a0","unresolved":false,"context_lines":[{"line_number":1184,"context_line":"    ]"},{"line_number":1185,"context_line":"}"},{"line_number":1186,"context_line":""},{"line_number":1187,"context_line":""},{"line_number":1188,"context_line":"EMPLOYEE_ASSERTION \u003d {"},{"line_number":1189,"context_line":"    \u0027Email\u0027: \u0027tim@example.com\u0027,"},{"line_number":1190,"context_line":"    \u0027UserName\u0027: \u0027tbo\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a2fa921_eb971c8e","side":"PARENT","line":1187,"updated":"2015-10-07 20:58:58.000000000","message":"unrelated whitespace change?","commit_id":"9c7f42766dd9420cb9d432ebc9c32ea944c2b87f"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"a39b96e793fdfcd34b35f1bb31101cb74d6a0b26","unresolved":false,"context_lines":[{"line_number":1184,"context_line":"    ]"},{"line_number":1185,"context_line":"}"},{"line_number":1186,"context_line":""},{"line_number":1187,"context_line":""},{"line_number":1188,"context_line":"EMPLOYEE_ASSERTION \u003d {"},{"line_number":1189,"context_line":"    \u0027Email\u0027: \u0027tim@example.com\u0027,"},{"line_number":1190,"context_line":"    \u0027UserName\u0027: \u0027tbo\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"1a26ad4f_49bc15dc","side":"PARENT","line":1187,"in_reply_to":"7a2fa921_eb971c8e","updated":"2015-10-31 01:22:49.000000000","message":"++","commit_id":"9c7f42766dd9420cb9d432ebc9c32ea944c2b87f"},{"author":{"_account_id":18034,"name":"Olivier Pilotte","inactive":true},"change_message_id":"e38679dd4b7f5f2ebd5e4e1f59ff94644ff02c76","unresolved":false,"context_lines":[{"line_number":1184,"context_line":"    ]"},{"line_number":1185,"context_line":"}"},{"line_number":1186,"context_line":""},{"line_number":1187,"context_line":""},{"line_number":1188,"context_line":"EMPLOYEE_ASSERTION \u003d {"},{"line_number":1189,"context_line":"    \u0027Email\u0027: \u0027tim@example.com\u0027,"},{"line_number":1190,"context_line":"    \u0027UserName\u0027: \u0027tbo\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa80f949_eeb0e38d","side":"PARENT","line":1187,"updated":"2015-11-03 22:13:14.000000000","message":"I\u0027m confused, I don\u0027t have this extra line in the latest patchset.","commit_id":"9c7f42766dd9420cb9d432ebc9c32ea944c2b87f"}]}
