)]}'
{"keystone/auth/plugins/mapped.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"467a7381d8ab66fe8cb8c1593d51da25f473c724","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        # NOTE(marek-denis): We update group_ids only here to avoid fetching"},{"line_number":153,"context_line":"        # groups identified by name/domain twice."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        group_ids \u003d mapped_properties[\u0027group_ids\u0027]"},{"line_number":156,"context_line":"        group_ids.extend("},{"line_number":157,"context_line":"            utils.transform_to_group_ids("},{"line_number":158,"context_line":"                mapped_properties[\u0027group_names\u0027], mapping[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_14592d36","line":155,"updated":"2014-12-10 13:53:20.000000000","message":"the presence of \u0027group_ids\u0027 is checked before?","commit_id":"e42d41cfa6b746ee237722bf8daeb5f7e54977fe"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"582698ecbb5257be97a902bf2c5f284438b1ac67","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        # NOTE(marek-denis): We update group_ids only here to avoid fetching"},{"line_number":153,"context_line":"        # groups identified by name/domain twice."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        group_ids \u003d mapped_properties[\u0027group_ids\u0027]"},{"line_number":156,"context_line":"        group_ids.extend("},{"line_number":157,"context_line":"            utils.transform_to_group_ids("},{"line_number":158,"context_line":"                mapped_properties[\u0027group_names\u0027], mapping[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_1485adcf","line":155,"in_reply_to":"3a961159_14592d36","updated":"2014-12-10 14:01:16.000000000","message":"it never was and don\u0027t  think it needs to as we know where mapped_properties comes from and what is inside:\n\nhttps://github.com/openstack/keystone/blob/master/keystone/contrib/federation/utils.py#L228 and https://github.com/openstack/keystone/blob/master/keystone/contrib/federation/utils.py#L232-L265","commit_id":"e42d41cfa6b746ee237722bf8daeb5f7e54977fe"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"98c31d801cf44bd35687fe0ee057a29705890645","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        # NOTE(marek-denis): We update group_ids only here to avoid fetching"},{"line_number":153,"context_line":"        # groups identified by name/domain twice."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        group_ids \u003d mapped_properties[\u0027group_ids\u0027]"},{"line_number":156,"context_line":"        group_ids.extend("},{"line_number":157,"context_line":"            utils.transform_to_group_ids("},{"line_number":158,"context_line":"                mapped_properties[\u0027group_names\u0027], mapping[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_da518f0f","line":155,"in_reply_to":"3a961159_1485adcf","updated":"2014-12-10 14:11:32.000000000","message":"++","commit_id":"e42d41cfa6b746ee237722bf8daeb5f7e54977fe"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8fa5c6c3a14517710c3d416d47ec0083a603af24","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        # NOTE(marek-denis): We update group_ids only here to avoid fetching"},{"line_number":153,"context_line":"        # groups identified by name/domain twice."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        group_ids \u003d mapped_properties[\u0027group_ids\u0027]"},{"line_number":156,"context_line":"        group_ids.extend("},{"line_number":157,"context_line":"            utils.transform_to_group_ids("},{"line_number":158,"context_line":"                mapped_properties[\u0027group_names\u0027], mapping[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_f2f01500","line":155,"updated":"2014-12-11 06:35:19.000000000","message":"i\u0027m not clear on why this is being done here, instead of in utils.py?","commit_id":"085a0fff54430d766c5ce58164907cc7afe07d63"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"1727c0da39adcd5dd472228cf91109931e81e922","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        # NOTE(marek-denis): We update group_ids only here to avoid fetching"},{"line_number":153,"context_line":"        # groups identified by name/domain twice."},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        group_ids \u003d mapped_properties[\u0027group_ids\u0027]"},{"line_number":156,"context_line":"        group_ids.extend("},{"line_number":157,"context_line":"            utils.transform_to_group_ids("},{"line_number":158,"context_line":"                mapped_properties[\u0027group_names\u0027], mapping[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_f21f356a","line":155,"in_reply_to":"3a961159_f2f01500","updated":"2014-12-11 07:14:23.000000000","message":"we need mapping_id as well as assignment_api and identity_api objects accessible only from here.","commit_id":"085a0fff54430d766c5ce58164907cc7afe07d63"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"764120708ccdd55e68271a7c048ac342494f008a","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        group_ids.extend("},{"line_number":161,"context_line":"            utils.transform_to_group_ids("},{"line_number":162,"context_line":"                mapped_properties[\u0027group_names\u0027], mapping[\u0027id\u0027],"},{"line_number":163,"context_line":"                self.identity_api, self.assignment_api))"},{"line_number":164,"context_line":"        mapped_properties[\u0027group_ids\u0027] \u003d list(set(group_ids))"},{"line_number":165,"context_line":"        utils.validate_groups(mapped_properties[\u0027group_ids\u0027],"},{"line_number":166,"context_line":"                              mapping[\u0027id\u0027], self.identity_api)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_3caa9d85","line":163,"updated":"2015-01-13 20:00:45.000000000","message":"Any group that is populated here is *also* being looked up in the validate_groups call. This looks to be doing a lot of duplicated work. I think we should see if we can improve the logic to limit the duplicated \"ask identity for group information\", this could get expensive from a chatty to the backend perspective (Especially if caching is not enabled/available).\n\nSuggest always making either the transform handle all the identity lookups or having a way to avoid doing the identity look ups again for transformed groups in the next call. on line 165","commit_id":"407e03a35de0632420da592927f90e604ecdd1e5"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"6625c2244612b450ecb6ea6b92102c623474954b","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        group_ids.extend("},{"line_number":161,"context_line":"            utils.transform_to_group_ids("},{"line_number":162,"context_line":"                mapped_properties[\u0027group_names\u0027], mapping[\u0027id\u0027],"},{"line_number":163,"context_line":"                self.identity_api, self.assignment_api))"},{"line_number":164,"context_line":"        mapped_properties[\u0027group_ids\u0027] \u003d list(set(group_ids))"},{"line_number":165,"context_line":"        utils.validate_groups(mapped_properties[\u0027group_ids\u0027],"},{"line_number":166,"context_line":"                              mapping[\u0027id\u0027], self.identity_api)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_57d9ed20","line":163,"in_reply_to":"3a961159_3caa9d85","updated":"2015-01-14 11:03:49.000000000","message":"I moved utils.validate_groups() to line 161 so only groups specified by their ids are being validated.","commit_id":"407e03a35de0632420da592927f90e604ecdd1e5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5507c410373e4dc90c8821ce9cd3028065a5e5de","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                mapped_properties[\u0027group_names\u0027], mapping[\u0027id\u0027],"},{"line_number":163,"context_line":"                self.identity_api, self.assignment_api))"},{"line_number":164,"context_line":"        mapped_properties[\u0027group_ids\u0027] \u003d list(set(group_ids))"},{"line_number":165,"context_line":"        utils.validate_groups(mapped_properties[\u0027group_ids\u0027],"},{"line_number":166,"context_line":"                              mapping[\u0027id\u0027], self.identity_api)"},{"line_number":167,"context_line":"        return mapped_properties"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_43493a31","line":165,"updated":"2015-01-14 06:00:16.000000000","message":"good point, you could write:\n\n  # NOTE(marekd): group names have already been validated, so no\n  # need to re-validate.\n  if not mapped_properties[\u0027group_names\u0027]:\n    utils.validate_groups(...)","commit_id":"407e03a35de0632420da592927f90e604ecdd1e5"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"6625c2244612b450ecb6ea6b92102c623474954b","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                mapped_properties[\u0027group_names\u0027], mapping[\u0027id\u0027],"},{"line_number":163,"context_line":"                self.identity_api, self.assignment_api))"},{"line_number":164,"context_line":"        mapped_properties[\u0027group_ids\u0027] \u003d list(set(group_ids))"},{"line_number":165,"context_line":"        utils.validate_groups(mapped_properties[\u0027group_ids\u0027],"},{"line_number":166,"context_line":"                              mapping[\u0027id\u0027], self.identity_api)"},{"line_number":167,"context_line":"        return mapped_properties"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_77bd09b1","line":165,"in_reply_to":"3a961159_43493a31","updated":"2015-01-14 11:03:49.000000000","message":"not sure if I understood your suggestion correctly :(","commit_id":"407e03a35de0632420da592927f90e604ecdd1e5"}],"keystone/contrib/federation/utils.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"467a7381d8ab66fe8cb8c1593d51da25f473c724","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                     domain.get(\u0027name\u0027)).get(\u0027id\u0027))"},{"line_number":155,"context_line":"        return domain_id"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    for group in group_names:"},{"line_number":158,"context_line":"        try:"},{"line_number":159,"context_line":"            group_dict \u003d identity_api.get_group_by_name("},{"line_number":160,"context_line":"                group[\u0027name\u0027], resolve_domain(group[\u0027domain\u0027]))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_74ca716f","line":157,"updated":"2014-12-10 13:53:20.000000000","message":"group_names sounds strange since it is a dict with domain and name, would use something like \"group_entries\"","commit_id":"e42d41cfa6b746ee237722bf8daeb5f7e54977fe"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"582698ecbb5257be97a902bf2c5f284438b1ac67","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                     domain.get(\u0027name\u0027)).get(\u0027id\u0027))"},{"line_number":155,"context_line":"        return domain_id"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    for group in group_names:"},{"line_number":158,"context_line":"        try:"},{"line_number":159,"context_line":"            group_dict \u003d identity_api.get_group_by_name("},{"line_number":160,"context_line":"                group[\u0027name\u0027], resolve_domain(group[\u0027domain\u0027]))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_b4e1399c","line":157,"in_reply_to":"3a961159_74ca716f","updated":"2014-12-10 14:01:16.000000000","message":"Since almost all objects identified by name must also has domain, group_names seem logical to me. Probably docstring may be change to indicate what is expected input, but i\u0027d hold this patch on this issue here :-)","commit_id":"e42d41cfa6b746ee237722bf8daeb5f7e54977fe"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"98c31d801cf44bd35687fe0ee057a29705890645","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                     domain.get(\u0027name\u0027)).get(\u0027id\u0027))"},{"line_number":155,"context_line":"        return domain_id"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    for group in group_names:"},{"line_number":158,"context_line":"        try:"},{"line_number":159,"context_line":"            group_dict \u003d identity_api.get_group_by_name("},{"line_number":160,"context_line":"                group[\u0027name\u0027], resolve_domain(group[\u0027domain\u0027]))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_1414cd4c","line":157,"in_reply_to":"3a961159_b4e1399c","updated":"2014-12-10 14:11:32.000000000","message":"if I\u0027d call this method somewhere else the first thing I\u0027d pass would be a list of strings, not a dict containing domain and name.","commit_id":"e42d41cfa6b746ee237722bf8daeb5f7e54977fe"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"cbc4c4c26d3b09ac6bb90ece4dcc0fd061e384f2","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        ]"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"       :param group_names: list of group identified by name and its domain."},{"line_number":159,"context_line":"       :type group_names: list"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"       :param mapping_id: id of the mapping used for mapping assertion into"},{"line_number":162,"context_line":"       local credentials"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_5dd91982","line":159,"updated":"2014-12-10 14:36:07.000000000","message":"nice","commit_id":"b8e7c344cedd502896750fe8defffe1adaf830f2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8fa5c6c3a14517710c3d416d47ec0083a603af24","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def transform_to_group_ids(group_names, mapping_id,"},{"line_number":138,"context_line":"                           identity_api, assignment_api):"},{"line_number":139,"context_line":"    \"\"\"Transform groups identitified by name/domain to their ids"},{"line_number":140,"context_line":"       Function accetps list of groups identified by a name and domain giving"},{"line_number":141,"context_line":"       a list of group ids in return."},{"line_number":142,"context_line":"       Example of group_names parameter:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a961159_127be17b","line":139,"updated":"2014-12-11 06:35:19.000000000","message":"the docstring isn\u0027t formatted correctly.","commit_id":"085a0fff54430d766c5ce58164907cc7afe07d63"},{"author":{"_account_id":13140,"name":"Victor Silva","email":"victor@lsd.ufcg.edu.br","username":"victsou"},"change_message_id":"055d86e33121baae790be109ac2ad6d69ff940d5","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                group_id\u003dgroup_id, mapping_id\u003dmapping_id)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def transform_to_group_ids(group_names, mapping_id,"},{"line_number":138,"context_line":"                           identity_api, assignment_api):"},{"line_number":139,"context_line":"    \"\"\"Transform groups identitified by name/domain to their ids"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_d4c2e951","line":137,"updated":"2014-12-12 18:06:37.000000000","message":"I don\u0027t think group_names is the best naming choice here; it sounds like a list of names, definitely not a list of dictionaries. What about group_dicts or something like that?","commit_id":"f639f1b04a6ca66f1dbee2baba0cead5101b3996"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"3122f7235a8a9658b9e6f63a0fb4146152f5c790","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                group_id\u003dgroup_id, mapping_id\u003dmapping_id)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def transform_to_group_ids(group_names, mapping_id,"},{"line_number":138,"context_line":"                           identity_api, assignment_api):"},{"line_number":139,"context_line":"    \"\"\"Transform groups identitified by name/domain to their ids"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_bc069f1f","line":137,"in_reply_to":"3a961159_a423faa5","updated":"2014-12-17 18:45:48.000000000","message":"While developing the whitelist/blacklist work item, we got stuck for several minutes because we forgot that group_names is not a list of strings.","commit_id":"f639f1b04a6ca66f1dbee2baba0cead5101b3996"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"f716e95f2d32a268c2228a4e5ea86990f2759360","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                group_id\u003dgroup_id, mapping_id\u003dmapping_id)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def transform_to_group_ids(group_names, mapping_id,"},{"line_number":138,"context_line":"                           identity_api, assignment_api):"},{"line_number":139,"context_line":"    \"\"\"Transform groups identitified by name/domain to their ids"},{"line_number":140,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_a423faa5","line":137,"in_reply_to":"3a961159_d4c2e951","updated":"2014-12-17 07:41:16.000000000","message":"I changed it but  we all should expect that groups shouldn\u0027t (cannot?) be identified by names only and domain should somewhere there. Also docstring clearly explains what should be in the function arguments.","commit_id":"f639f1b04a6ca66f1dbee2baba0cead5101b3996"},{"author":{"_account_id":13140,"name":"Victor Silva","email":"victor@lsd.ufcg.edu.br","username":"victsou"},"change_message_id":"055d86e33121baae790be109ac2ad6d69ff940d5","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                \u0027orgPersonType\u0027: \u0027Tester\u0027"},{"line_number":251,"context_line":"            }"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        :returns: dictionary with user and group_ids"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        The expected return structure is::"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_34996d6e","line":253,"updated":"2014-12-12 18:06:37.000000000","message":"What about the group names?","commit_id":"f639f1b04a6ca66f1dbee2baba0cead5101b3996"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"6b6dfbc3459d34cd0995deff5aa16f3ffc2e269d","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                \u0027orgPersonType\u0027: \u0027Tester\u0027"},{"line_number":251,"context_line":"            }"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        :returns: dictionary with user and group_ids"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        The expected return structure is::"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_e2714e45","line":253,"in_reply_to":"3a961159_34996d6e","updated":"2014-12-18 07:41:55.000000000","message":"Done","commit_id":"f639f1b04a6ca66f1dbee2baba0cead5101b3996"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"764120708ccdd55e68271a7c048ac342494f008a","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    for group in group_names:"},{"line_number":195,"context_line":"        try:"},{"line_number":196,"context_line":"            group_dict \u003d identity_api.get_group_by_name("},{"line_number":197,"context_line":"                group[\u0027name\u0027], resolve_domain(group[\u0027domain\u0027]))"},{"line_number":198,"context_line":"            yield group_dict[\u0027id\u0027]"},{"line_number":199,"context_line":"        except exception.GroupNotFound:"},{"line_number":200,"context_line":"            raise exception.MappedGroupNotFound("}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_5cf5a9eb","line":197,"updated":"2015-01-13 20:00:45.000000000","message":"As a point, this could get expensive without caching on the assignment api side depending on the size of the group list.\n\nAt a certain point it makes sense to resolve the domain id once. but not sure how wide-spread this is going to be.","commit_id":"407e03a35de0632420da592927f90e604ecdd1e5"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"b4b6598d3605732e1112b96c314dfe343e0c4031","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    for group in group_names:"},{"line_number":195,"context_line":"        try:"},{"line_number":196,"context_line":"            group_dict \u003d identity_api.get_group_by_name("},{"line_number":197,"context_line":"                group[\u0027name\u0027], resolve_domain(group[\u0027domain\u0027]))"},{"line_number":198,"context_line":"            yield group_dict[\u0027id\u0027]"},{"line_number":199,"context_line":"        except exception.GroupNotFound:"},{"line_number":200,"context_line":"            raise exception.MappedGroupNotFound("}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_d7b25248","line":197,"in_reply_to":"3a961159_5cf5a9eb","updated":"2015-01-13 20:22:56.000000000","message":"groups can from various domains, so caching the domain once is not a solution. I am trying to think whether some customized SQL statements would help here (so we don\u0027t query n times, but query once asking for n objects)","commit_id":"407e03a35de0632420da592927f90e604ecdd1e5"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"6625c2244612b450ecb6ea6b92102c623474954b","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    for group in group_names:"},{"line_number":195,"context_line":"        try:"},{"line_number":196,"context_line":"            group_dict \u003d identity_api.get_group_by_name("},{"line_number":197,"context_line":"                group[\u0027name\u0027], resolve_domain(group[\u0027domain\u0027]))"},{"line_number":198,"context_line":"            yield group_dict[\u0027id\u0027]"},{"line_number":199,"context_line":"        except exception.GroupNotFound:"},{"line_number":200,"context_line":"            raise exception.MappedGroupNotFound("}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_d7fcfd74","line":197,"in_reply_to":"3a961159_83bc0208","updated":"2015-01-14 11:03:49.000000000","message":"Done","commit_id":"407e03a35de0632420da592927f90e604ecdd1e5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5507c410373e4dc90c8821ce9cd3028065a5e5de","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    for group in group_names:"},{"line_number":195,"context_line":"        try:"},{"line_number":196,"context_line":"            group_dict \u003d identity_api.get_group_by_name("},{"line_number":197,"context_line":"                group[\u0027name\u0027], resolve_domain(group[\u0027domain\u0027]))"},{"line_number":198,"context_line":"            yield group_dict[\u0027id\u0027]"},{"line_number":199,"context_line":"        except exception.GroupNotFound:"},{"line_number":200,"context_line":"            raise exception.MappedGroupNotFound("}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_83bc0208","line":197,"in_reply_to":"3a961159_d7b25248","updated":"2015-01-14 06:00:16.000000000","message":"I think just make a note of this for now in the code","commit_id":"407e03a35de0632420da592927f90e604ecdd1e5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5507c410373e4dc90c8821ce9cd3028065a5e5de","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                \u0027group_ids\u0027: [\u0027abc123\u0027, \u0027def456\u0027],"},{"line_number":260,"context_line":"                \u0027group_names\u0027: ["},{"line_number":261,"context_line":"                    {"},{"line_number":262,"context_line":"                        \u0027name\u0027: \u0027group_name_1\u0027,"},{"line_number":263,"context_line":"                        \u0027domain\u0027: {"},{"line_number":264,"context_line":"                            \u0027name\u0027: \u0027domain1\u0027"},{"line_number":265,"context_line":"                        }"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_63d63655","line":262,"updated":"2015-01-14 06:00:16.000000000","message":"might want to add another here:\n\n  \u0027name\u0027: \u0027another_group\u0027\n\nI initially didn\u0027t know you were sorting them out by domain, good call, but it\u0027s just not intuitive.","commit_id":"407e03a35de0632420da592927f90e604ecdd1e5"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"6625c2244612b450ecb6ea6b92102c623474954b","unresolved":false,"context_lines":[{"line_number":259,"context_line":"                \u0027group_ids\u0027: [\u0027abc123\u0027, \u0027def456\u0027],"},{"line_number":260,"context_line":"                \u0027group_names\u0027: ["},{"line_number":261,"context_line":"                    {"},{"line_number":262,"context_line":"                        \u0027name\u0027: \u0027group_name_1\u0027,"},{"line_number":263,"context_line":"                        \u0027domain\u0027: {"},{"line_number":264,"context_line":"                            \u0027name\u0027: \u0027domain1\u0027"},{"line_number":265,"context_line":"                        }"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_5791edef","line":262,"in_reply_to":"3a961159_63d63655","updated":"2015-01-14 11:03:49.000000000","message":"Done","commit_id":"407e03a35de0632420da592927f90e604ecdd1e5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c07f6c60aefe137850e06c07df11cb1662ce8d76","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"def validate_groups_cardinality(group_ids, mapping_id):"},{"line_number":126,"context_line":"    \"\"\"Check  if groups list is non-empty."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    :param group_ids: list of group ids"},{"line_number":129,"context_line":"    :type group_ids: list of str"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_9150b62d","line":126,"updated":"2015-01-14 16:42:33.000000000","message":"double space?","commit_id":"f4075b4571045c1d55c45612d68abd3eba35504a"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"abfe90b72bd55b12c501f7bc045b79f376c4d322","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"def validate_groups_cardinality(group_ids, mapping_id):"},{"line_number":126,"context_line":"    \"\"\"Check  if groups list is non-empty."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    :param group_ids: list of group ids"},{"line_number":129,"context_line":"    :type group_ids: list of str"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_895315dd","line":126,"in_reply_to":"3a961159_9150b62d","updated":"2015-01-15 08:48:50.000000000","message":"Done","commit_id":"f4075b4571045c1d55c45612d68abd3eba35504a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c07f6c60aefe137850e06c07df11cb1662ce8d76","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    :param group_ids: list of group ids"},{"line_number":129,"context_line":"    :type group_ids: list of str"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    :raises exception.MissingGroups  - if the number of group ids is equal to 0"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    \"\"\""},{"line_number":134,"context_line":"    if not group_ids:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_71a50a47","line":131,"updated":"2015-01-14 16:42:33.000000000","message":"double space?","commit_id":"f4075b4571045c1d55c45612d68abd3eba35504a"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"abfe90b72bd55b12c501f7bc045b79f376c4d322","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    :param group_ids: list of group ids"},{"line_number":129,"context_line":"    :type group_ids: list of str"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    :raises exception.MissingGroups  - if the number of group ids is equal to 0"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    \"\"\""},{"line_number":134,"context_line":"    if not group_ids:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_696269ae","line":131,"in_reply_to":"3a961159_71a50a47","updated":"2015-01-15 08:48:50.000000000","message":"Done","commit_id":"f4075b4571045c1d55c45612d68abd3eba35504a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c07f6c60aefe137850e06c07df11cb1662ce8d76","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    :type mapping_id: str"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    :param identity_api: Identity Manager object used for communication with"},{"line_number":149,"context_line":"    backend"},{"line_number":150,"context_line":"    :type identity_api: identity.Manager"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    :raises: exception.MappedGroupNotFound"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_1145a66e","line":149,"updated":"2015-01-14 16:42:33.000000000","message":"not indented enough?","commit_id":"f4075b4571045c1d55c45612d68abd3eba35504a"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"abfe90b72bd55b12c501f7bc045b79f376c4d322","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    :type mapping_id: str"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    :param identity_api: Identity Manager object used for communication with"},{"line_number":149,"context_line":"    backend"},{"line_number":150,"context_line":"    :type identity_api: identity.Manager"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    :raises: exception.MappedGroupNotFound"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_e9465920","line":149,"in_reply_to":"3a961159_1145a66e","updated":"2015-01-15 08:48:50.000000000","message":"Done","commit_id":"f4075b4571045c1d55c45612d68abd3eba35504a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"c07f6c60aefe137850e06c07df11cb1662ce8d76","unresolved":false,"context_lines":[{"line_number":171,"context_line":"    :type mapping_id: str"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    :param identity_api: Identity Manager object used for communication with"},{"line_number":174,"context_line":"    backend"},{"line_number":175,"context_line":"    :type identity_api: identity.Manager"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    :raises: exception.MappedGroupNotFound"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_b1493290","line":174,"updated":"2015-01-14 16:42:33.000000000","message":"not indented enough?","commit_id":"f4075b4571045c1d55c45612d68abd3eba35504a"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"abfe90b72bd55b12c501f7bc045b79f376c4d322","unresolved":false,"context_lines":[{"line_number":171,"context_line":"    :type mapping_id: str"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    :param identity_api: Identity Manager object used for communication with"},{"line_number":174,"context_line":"    backend"},{"line_number":175,"context_line":"    :type identity_api: identity.Manager"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    :raises: exception.MappedGroupNotFound"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a961159_294dc13b","line":174,"in_reply_to":"3a961159_b1493290","updated":"2015-01-15 08:48:50.000000000","message":"Done","commit_id":"f4075b4571045c1d55c45612d68abd3eba35504a"}],"keystone/tests/mapping_fixtures.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"764120708ccdd55e68271a7c048ac342494f008a","unresolved":false,"context_lines":[{"line_number":19,"context_line":"DEVELOPER_GROUP_ID \u003d \"xyz\""},{"line_number":20,"context_line":"DEVELOPER_GROUP_NAME \u003d \"developer\""},{"line_number":21,"context_line":"DEVELOPER_GROUP_DOMAIN_NAME \u003d \"outsourcing\""},{"line_number":22,"context_line":"DEVELOPER_GROUP_DOMAIN_ID \u003d \"6tyu45\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"# Mapping summary:"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_7c70a573","line":22,"updated":"2015-01-13 20:00:45.000000000","message":"Wouldn\u0027t/shouldn\u0027t domain ids always be hex?","commit_id":"407e03a35de0632420da592927f90e604ecdd1e5"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"6625c2244612b450ecb6ea6b92102c623474954b","unresolved":false,"context_lines":[{"line_number":19,"context_line":"DEVELOPER_GROUP_ID \u003d \"xyz\""},{"line_number":20,"context_line":"DEVELOPER_GROUP_NAME \u003d \"developer\""},{"line_number":21,"context_line":"DEVELOPER_GROUP_DOMAIN_NAME \u003d \"outsourcing\""},{"line_number":22,"context_line":"DEVELOPER_GROUP_DOMAIN_ID \u003d \"6tyu45\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"# Mapping summary:"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a961159_371e2175","line":22,"in_reply_to":"3a961159_7c70a573","updated":"2015-01-14 11:03:49.000000000","message":"Done","commit_id":"407e03a35de0632420da592927f90e604ecdd1e5"}]}
