)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"51e30ddaced5eaf6ec2f65ba28aab4c713cd1e86","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Marek Denis \u003cmarek.denis@cern.ch\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-18 17:14:16 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Make user an object in mapping engine"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"With advent of direct users mapping we need to treat users as objects,"},{"line_number":10,"context_line":"not single identifiers (name, id). This patch introduces user"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"da86d52c_e02c7f95","line":7,"updated":"2015-02-19 08:05:18.000000000","message":"aren\u0027t we making it a dictionary?","commit_id":"52cede19039df5932773f59e11103d7faddb86e9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"31e2ef5d74ba8866f37b391074b26a77c198b4be","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Marek Denis \u003cmarek.denis@cern.ch\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-20 13:48:16 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Ehncance user identification in mapping engine"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"With advent of direct users mapping we need to treat users as objects,"},{"line_number":10,"context_line":"not single identifiers (name, id). This patch introduces user"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"ba7be1f8_0704f479","line":7,"updated":"2015-02-20 16:35:10.000000000","message":"Enhance*","commit_id":"3a83834885b412a42d3651659e0905a97bb1e55b"}],"keystone/auth/plugins/mapped.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"51e30ddaced5eaf6ec2f65ba28aab4c713cd1e86","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    :returns: dictionary with user identification"},{"line_number":205,"context_line":"    :rtype: dict"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    \"\"\""},{"line_number":208,"context_line":"    user \u003d mapped_properties[\u0027user\u0027]"},{"line_number":209,"context_line":"    user_id \u003d user.get(\u0027id\u0027)"},{"line_number":210,"context_line":"    user_name \u003d user.get(\u0027name\u0027) or context[\u0027environment\u0027].get(\u0027REMOTE_USER\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_a0ca876b","line":207,"updated":"2015-02-19 08:05:18.000000000","message":"one of the issues i\u0027m having trouble grasping is that before we basically required {user:{name}} to be present. now we are just attaching the entire {user} object.\n\nwe should probably have a check that makes sure that id or name exists, and bring up an error if both are missing.\n\ni think once we do that the code will probably read a bit better too.","commit_id":"52cede19039df5932773f59e11103d7faddb86e9"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"e5a8c4557996161e697c47a76cc22d9805702dc0","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    :returns: dictionary with user identification"},{"line_number":205,"context_line":"    :rtype: dict"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    \"\"\""},{"line_number":208,"context_line":"    user \u003d mapped_properties[\u0027user\u0027]"},{"line_number":209,"context_line":"    user_id \u003d user.get(\u0027id\u0027)"},{"line_number":210,"context_line":"    user_name \u003d user.get(\u0027name\u0027) or context[\u0027environment\u0027].get(\u0027REMOTE_USER\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_f94d1a3c","line":207,"in_reply_to":"da86d52c_a0ca876b","updated":"2015-02-19 09:43:40.000000000","message":"I refactored the method, however it\u0027s still very liberal due to to backwards compatibility requirements :(","commit_id":"52cede19039df5932773f59e11103d7faddb86e9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"51e30ddaced5eaf6ec2f65ba28aab4c713cd1e86","unresolved":false,"context_lines":[{"line_number":215,"context_line":"    elif user_name is None:"},{"line_number":216,"context_line":"            raise exception.Unauthorized(_(\"Could not map user\"))"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    if user.get(\u0027id\u0027) is None:"},{"line_number":219,"context_line":"        user[\u0027id\u0027] \u003d parse.quote(user_name)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    return user"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_e0c0ff4b","line":218,"updated":"2015-02-19 08:05:18.000000000","message":"you can use user_id here","commit_id":"52cede19039df5932773f59e11103d7faddb86e9"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"e5a8c4557996161e697c47a76cc22d9805702dc0","unresolved":false,"context_lines":[{"line_number":215,"context_line":"    elif user_name is None:"},{"line_number":216,"context_line":"            raise exception.Unauthorized(_(\"Could not map user\"))"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    if user.get(\u0027id\u0027) is None:"},{"line_number":219,"context_line":"        user[\u0027id\u0027] \u003d parse.quote(user_name)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    return user"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_c37ea5ae","line":218,"in_reply_to":"da86d52c_e0c0ff4b","updated":"2015-02-19 09:43:40.000000000","message":"Done","commit_id":"52cede19039df5932773f59e11103d7faddb86e9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6c1551a3220bec29244a70aba2ec26bb6272e7e6","unresolved":false,"context_lines":[{"line_number":189,"context_line":"def setup_username(context, mapped_properties):"},{"line_number":190,"context_line":"    \"\"\"Setup federated username."},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    The function covers following use cases:"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    1) If neither user_name nor user_id is set raise exception.Unauthorized"},{"line_number":195,"context_line":"    2) If user_id is set and user_name not, set user_name equal to user_id"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_86ef4486","line":192,"updated":"2015-02-19 18:30:35.000000000","message":"covers *the* following...","commit_id":"93e639fc7e210866220e6dd236ad40a2ced55a90"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"3eef83f2b2f3385954bfb6e7cfb5314acf18741a","unresolved":false,"context_lines":[{"line_number":189,"context_line":"def setup_username(context, mapped_properties):"},{"line_number":190,"context_line":"    \"\"\"Setup federated username."},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    The function covers following use cases:"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    1) If neither user_name nor user_id is set raise exception.Unauthorized"},{"line_number":195,"context_line":"    2) If user_id is set and user_name not, set user_name equal to user_id"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_ddae3de7","line":192,"in_reply_to":"da86d52c_86ef4486","updated":"2015-02-20 09:50:22.000000000","message":"Done","commit_id":"93e639fc7e210866220e6dd236ad40a2ced55a90"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6c1551a3220bec29244a70aba2ec26bb6272e7e6","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    user_id \u003d user.get(\u0027id\u0027)"},{"line_number":212,"context_line":"    user_name \u003d user.get(\u0027name\u0027) or context[\u0027environment\u0027].get(\u0027REMOTE_USER\u0027)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    if not any((user_id, user_name)):"},{"line_number":215,"context_line":"        raise exception.Unauthorized(_(\"Could not map user\"))"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    if user_id:"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_e6d1e0cc","line":214,"updated":"2015-02-19 18:30:35.000000000","message":"unnecessary brackets here","commit_id":"93e639fc7e210866220e6dd236ad40a2ced55a90"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"3eef83f2b2f3385954bfb6e7cfb5314acf18741a","unresolved":false,"context_lines":[{"line_number":211,"context_line":"    user_id \u003d user.get(\u0027id\u0027)"},{"line_number":212,"context_line":"    user_name \u003d user.get(\u0027name\u0027) or context[\u0027environment\u0027].get(\u0027REMOTE_USER\u0027)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    if not any((user_id, user_name)):"},{"line_number":215,"context_line":"        raise exception.Unauthorized(_(\"Could not map user\"))"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    if user_id:"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_4950f82b","line":214,"in_reply_to":"da86d52c_e6d1e0cc","updated":"2015-02-20 09:50:22.000000000","message":"they are necessary as any() accepts single iterable.","commit_id":"93e639fc7e210866220e6dd236ad40a2ced55a90"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e173115cc14fd8e8510bfadc8f4093b1f5c295e1","unresolved":false,"context_lines":[{"line_number":212,"context_line":"    user_name \u003d user.get(\u0027name\u0027) or context[\u0027environment\u0027].get(\u0027REMOTE_USER\u0027)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    if not any((user_id, user_name)):"},{"line_number":215,"context_line":"        raise exception.Unauthorized(_(\"Could not map user\"))"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    if user_id:"},{"line_number":218,"context_line":"        if user_name is None:"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_b130049f","line":215,"updated":"2015-02-19 18:31:57.000000000","message":"if you do end up doing an if/elif structure, this could be an else block","commit_id":"93e639fc7e210866220e6dd236ad40a2ced55a90"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"3eef83f2b2f3385954bfb6e7cfb5314acf18741a","unresolved":false,"context_lines":[{"line_number":212,"context_line":"    user_name \u003d user.get(\u0027name\u0027) or context[\u0027environment\u0027].get(\u0027REMOTE_USER\u0027)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    if not any((user_id, user_name)):"},{"line_number":215,"context_line":"        raise exception.Unauthorized(_(\"Could not map user\"))"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    if user_id:"},{"line_number":218,"context_line":"        if user_name is None:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_9d7cc574","line":215,"in_reply_to":"da86d52c_b130049f","updated":"2015-02-20 09:50:22.000000000","message":"i wanted to make it a distinct check, indicating that if neither id nor name are set something somewhere went terribly wrond, but one if/elif/else clause will work me as well.","commit_id":"93e639fc7e210866220e6dd236ad40a2ced55a90"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6c1551a3220bec29244a70aba2ec26bb6272e7e6","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        raise exception.Unauthorized(_(\"Could not map user\"))"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    if user_id:"},{"line_number":218,"context_line":"        if user_name is None:"},{"line_number":219,"context_line":"            user[\u0027name\u0027] \u003d user_id"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    if user_id is None:"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_a667e823","line":218,"updated":"2015-02-19 18:30:35.000000000","message":"this could technically be one line:\n\n  if user_id and not user_name:\n    user[\u0027name\u0027] \u003d user_id","commit_id":"93e639fc7e210866220e6dd236ad40a2ced55a90"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"3eef83f2b2f3385954bfb6e7cfb5314acf18741a","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        raise exception.Unauthorized(_(\"Could not map user\"))"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    if user_id:"},{"line_number":218,"context_line":"        if user_name is None:"},{"line_number":219,"context_line":"            user[\u0027name\u0027] \u003d user_id"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    if user_id is None:"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_bdcfc9af","line":218,"in_reply_to":"da86d52c_a667e823","updated":"2015-02-20 09:50:22.000000000","message":"Done","commit_id":"93e639fc7e210866220e6dd236ad40a2ced55a90"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6c1551a3220bec29244a70aba2ec26bb6272e7e6","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        if user_name is None:"},{"line_number":219,"context_line":"            user[\u0027name\u0027] \u003d user_id"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    if user_id is None:"},{"line_number":222,"context_line":"        user[\u0027id\u0027] \u003d parse.quote(user_name)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    return user"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_c6385cf0","line":221,"updated":"2015-02-19 18:30:35.000000000","message":"and this could be the inverse:\n\n  elif user_name and not user_id\n    user[\u0027id\u0027] \u003d parse.quote(user_name)","commit_id":"93e639fc7e210866220e6dd236ad40a2ced55a90"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"3eef83f2b2f3385954bfb6e7cfb5314acf18741a","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        if user_name is None:"},{"line_number":219,"context_line":"            user[\u0027name\u0027] \u003d user_id"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    if user_id is None:"},{"line_number":222,"context_line":"        user[\u0027id\u0027] \u003d parse.quote(user_name)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    return user"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_3dbbd90f","line":221,"in_reply_to":"da86d52c_c6385cf0","updated":"2015-02-20 09:50:22.000000000","message":"Done","commit_id":"93e639fc7e210866220e6dd236ad40a2ced55a90"},{"author":{"_account_id":13161,"name":"Kamil Rykowski","email":"kamil.rykowski@gmail.com","username":"krykowski"},"change_message_id":"8ad10605fc6b4e84e155e3fbb083d1f171c088c4","unresolved":false,"context_lines":[{"line_number":215,"context_line":"    if not any((user_id, user_name)):"},{"line_number":216,"context_line":"        raise exception.Unauthorized(_(\"Could not map user\"))"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    elif user_id and not user_name:"},{"line_number":219,"context_line":"        user[\u0027name\u0027] \u003d user_id"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    elif not user_id and user_name:"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba7be1f8_4e8ff523","line":218,"updated":"2015-02-20 11:46:10.000000000","message":"In both elif statements you can skip the positive checks, because you have already checked situation where user_id and user_name is empty. The same effect can be achieved with simply:\n\nelif not user_name:\n  user[\u0027name\u0027] \u003d user_id\nelif not user_id:\n  user[\u0027id\u0027] \u003d parse.quote(user_name)","commit_id":"59215eeba1f39052c64c9e4fe2aa8c566be949e1"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"16aa4feba951731952ec150ce49359ab8ba41f85","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    1) If neither user_name nor user_id is set raise exception.Unauthorized"},{"line_number":196,"context_line":"    2) If user_id is set and user_name not, set user_name equal to user_id"},{"line_number":197,"context_line":"    3) If user_id is not set and user_name is, set user_id as url safe version"},{"line_number":198,"context_line":"       of user_name."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    :param context: authentication context"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba7be1f8_504a0e81","line":198,"updated":"2015-02-21 06:31:27.000000000","message":"So while I agree this comment describes what the code does below, it does not explain why this fancy decision making is appropriate. In 2 months, will anyone remember why this logic was necessary? Could you please for choice 2 and 3 explain the motivation for why you are doing these esoteric things :-)","commit_id":"3a83834885b412a42d3651659e0905a97bb1e55b"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"2184da11d2dd2fdbe1d34924b5c4bfeda981c29a","unresolved":false,"context_lines":[{"line_number":194,"context_line":"    identifier for identity objects. Initial version of the mapping engine"},{"line_number":195,"context_line":"    assumed user is identified by ``name`` and his ``id`` is built from the"},{"line_number":196,"context_line":"    name. We, however need to be able to accept local rules that identify user"},{"line_number":197,"context_line":"    by either id or name/domain. This function"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    Followed use-cases are covered:"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_2ca210fd","line":197,"updated":"2015-02-25 20:48:23.000000000","message":"This function what?","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"2184da11d2dd2fdbe1d34924b5c4bfeda981c29a","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    name. We, however need to be able to accept local rules that identify user"},{"line_number":197,"context_line":"    by either id or name/domain. This function"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    Followed use-cases are covered:"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    1) If neither user_name nor user_id is set raise exception.Unauthorized"},{"line_number":202,"context_line":"    2) If user_id is set and user_name not, set user_name equal to user_id"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_ccb8942c","line":199,"updated":"2015-02-25 20:48:23.000000000","message":"(nit) The following","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"30bb9776d089889f5bea4f82a157723820599601","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    name. We, however need to be able to accept local rules that identify user"},{"line_number":197,"context_line":"    by either id or name/domain. This function"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    Followed use-cases are covered:"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    1) If neither user_name nor user_id is set raise exception.Unauthorized"},{"line_number":202,"context_line":"    2) If user_id is set and user_name not, set user_name equal to user_id"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_3187aeb6","line":199,"in_reply_to":"ba7be1f8_ccb8942c","updated":"2015-02-26 11:00:06.000000000","message":"Done","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"2184da11d2dd2fdbe1d34924b5c4bfeda981c29a","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    Followed use-cases are covered:"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    1) If neither user_name nor user_id is set raise exception.Unauthorized"},{"line_number":202,"context_line":"    2) If user_id is set and user_name not, set user_name equal to user_id"},{"line_number":203,"context_line":"    3) If user_id is not set and user_name is, set user_id as url safe version"},{"line_number":204,"context_line":"       of user_name."},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_ecbe38ad","line":202,"updated":"2015-02-25 20:48:23.000000000","message":"These doesn\u0027t appear to be test for these new scenarios. Did I miss them?","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"30bb9776d089889f5bea4f82a157723820599601","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    Followed use-cases are covered:"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    1) If neither user_name nor user_id is set raise exception.Unauthorized"},{"line_number":202,"context_line":"    2) If user_id is set and user_name not, set user_name equal to user_id"},{"line_number":203,"context_line":"    3) If user_id is not set and user_name is, set user_id as url safe version"},{"line_number":204,"context_line":"       of user_name."},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_d1b5727e","line":202,"in_reply_to":"ba7be1f8_35c7b097","updated":"2015-02-26 11:00:06.000000000","message":"This is a service domain and even though it\u0027s not in the backend, user/admin cannot manipulate that domain (cannot add, update, delete, list).","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"8f2b7f8e1692e896c4957838c2bc6b40dc0ab2c9","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    Followed use-cases are covered:"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    1) If neither user_name nor user_id is set raise exception.Unauthorized"},{"line_number":202,"context_line":"    2) If user_id is set and user_name not, set user_name equal to user_id"},{"line_number":203,"context_line":"    3) If user_id is not set and user_name is, set user_id as url safe version"},{"line_number":204,"context_line":"       of user_name."},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_35c7b097","line":202,"in_reply_to":"ba7be1f8_ecbe38ad","updated":"2015-02-25 22:36:32.000000000","message":"So if only \u0027user_name\u0027 is set, we assume user is in the \"Federated\" domain? Are we checking for domain as well?","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"2184da11d2dd2fdbe1d34924b5c4bfeda981c29a","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    1) If neither user_name nor user_id is set raise exception.Unauthorized"},{"line_number":202,"context_line":"    2) If user_id is set and user_name not, set user_name equal to user_id"},{"line_number":203,"context_line":"    3) If user_id is not set and user_name is, set user_id as url safe version"},{"line_number":204,"context_line":"       of user_name."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    :param context: authentication context"},{"line_number":207,"context_line":"    :param mapped_properties: Properties issued by a RuleProcessor."}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_0ced4c26","line":204,"updated":"2015-02-25 20:48:23.000000000","message":"What about if both are set?","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"8f2b7f8e1692e896c4957838c2bc6b40dc0ab2c9","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    1) If neither user_name nor user_id is set raise exception.Unauthorized"},{"line_number":202,"context_line":"    2) If user_id is set and user_name not, set user_name equal to user_id"},{"line_number":203,"context_line":"    3) If user_id is not set and user_name is, set user_id as url safe version"},{"line_number":204,"context_line":"       of user_name."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    :param context: authentication context"},{"line_number":207,"context_line":"    :param mapped_properties: Properties issued by a RuleProcessor."}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_95e13c2c","line":204,"in_reply_to":"ba7be1f8_0ced4c26","updated":"2015-02-25 22:36:32.000000000","message":"We should error out in that case. Identity should be unambiguous.","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"30bb9776d089889f5bea4f82a157723820599601","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    1) If neither user_name nor user_id is set raise exception.Unauthorized"},{"line_number":202,"context_line":"    2) If user_id is set and user_name not, set user_name equal to user_id"},{"line_number":203,"context_line":"    3) If user_id is not set and user_name is, set user_id as url safe version"},{"line_number":204,"context_line":"       of user_name."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    :param context: authentication context"},{"line_number":207,"context_line":"    :param mapped_properties: Properties issued by a RuleProcessor."}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_9134dafc","line":204,"in_reply_to":"ba7be1f8_95e13c2c","updated":"2015-02-26 11:00:06.000000000","message":"the initial idea wouuld be that id has always higher priority over name/domain. \nSo, answering David\u0027s  question, if both name and id are set we would simply pass through and do nothing here, being happy that \u0027id\u0027 is set. \nI think this is the case if I set id, name, domain while authenticating with password today, right?\nI think we should become as compliant as possible.\nHowever, if there is a string desire to raise exception i will happily do this.","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"8f2b7f8e1692e896c4957838c2bc6b40dc0ab2c9","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    user_id \u003d user.get(\u0027id\u0027)"},{"line_number":218,"context_line":"    user_name \u003d user.get(\u0027name\u0027) or context[\u0027environment\u0027].get(\u0027REMOTE_USER\u0027)"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    if not any((user_id, user_name)):"},{"line_number":221,"context_line":"        raise exception.Unauthorized(_(\"Could not map user\"))"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    elif not user_name:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_95993c7b","line":220,"updated":"2015-02-25 22:36:32.000000000","message":"why double parenthesis?","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"30bb9776d089889f5bea4f82a157723820599601","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    user_id \u003d user.get(\u0027id\u0027)"},{"line_number":218,"context_line":"    user_name \u003d user.get(\u0027name\u0027) or context[\u0027environment\u0027].get(\u0027REMOTE_USER\u0027)"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    if not any((user_id, user_name)):"},{"line_number":221,"context_line":"        raise exception.Unauthorized(_(\"Could not map user\"))"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"    elif not user_name:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_7143e6ae","line":220,"in_reply_to":"ba7be1f8_95993c7b","updated":"2015-02-26 11:00:06.000000000","message":"any() accepts an iterable only.\n\nany(\u0027a\u0027, \u0027b\u0027)\n\n---------------------------------------------------------------------------\nTypeError                                 Traceback (most recent call last)\n\u003cipython-input-3-d8d997429345\u003e in \u003cmodule\u003e()\n----\u003e 1 any(\u0027a\u0027,\u0027b\u0027)\n\nTypeError: any() takes exactly one argument (2 given)","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5c5fee2faaba826658f8016d4c0dabf9ca58c901","unresolved":false,"context_lines":[{"line_number":190,"context_line":"def setup_username(context, mapped_properties):"},{"line_number":191,"context_line":"    \"\"\"Setup federated username."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    Function covers all the cases for proper setting user id, a primary"},{"line_number":194,"context_line":"    identifier for identity objects. Initial version of the mapping engine"},{"line_number":195,"context_line":"    assumed user is identified by ``name`` and his ``id`` is built from the"},{"line_number":196,"context_line":"    name. We, however need to be able to accept local rules that identify user"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba7be1f8_b270dd74","line":193,"updated":"2015-02-26 23:04:54.000000000","message":"properly","commit_id":"09091893c28eac366cdab31166f3b0b34eff6f74"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"bd6cfa13015f03d50f5236eb0049b1b0e9bdd6d2","unresolved":false,"context_lines":[{"line_number":190,"context_line":"def setup_username(context, mapped_properties):"},{"line_number":191,"context_line":"    \"\"\"Setup federated username."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    Function covers all the cases for proper setting user id, a primary"},{"line_number":194,"context_line":"    identifier for identity objects. Initial version of the mapping engine"},{"line_number":195,"context_line":"    assumed user is identified by ``name`` and his ``id`` is built from the"},{"line_number":196,"context_line":"    name. We, however need to be able to accept local rules that identify user"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba7be1f8_c51bcd1a","line":193,"in_reply_to":"ba7be1f8_b270dd74","updated":"2015-02-27 00:18:06.000000000","message":"Done","commit_id":"09091893c28eac366cdab31166f3b0b34eff6f74"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"5c5fee2faaba826658f8016d4c0dabf9ca58c901","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    name. We, however need to be able to accept local rules that identify user"},{"line_number":197,"context_line":"    by either id or name/domain."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    Followed use-cases are covered:"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    1) If neither user_name nor user_id is set raise exception.Unauthorized"},{"line_number":202,"context_line":"    2) If user_id is set and user_name not, set user_name equal to user_id"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba7be1f8_32814d4e","line":199,"updated":"2015-02-26 23:04:54.000000000","message":"The following","commit_id":"09091893c28eac366cdab31166f3b0b34eff6f74"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"bd6cfa13015f03d50f5236eb0049b1b0e9bdd6d2","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    name. We, however need to be able to accept local rules that identify user"},{"line_number":197,"context_line":"    by either id or name/domain."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    Followed use-cases are covered:"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    1) If neither user_name nor user_id is set raise exception.Unauthorized"},{"line_number":202,"context_line":"    2) If user_id is set and user_name not, set user_name equal to user_id"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba7be1f8_e518d120","line":199,"in_reply_to":"ba7be1f8_32814d4e","updated":"2015-02-27 00:18:06.000000000","message":"Done","commit_id":"09091893c28eac366cdab31166f3b0b34eff6f74"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d1357d903990773d56d070b0c04df3fb3fc93d2d","unresolved":false,"context_lines":[{"line_number":124,"context_line":"                                                 assertion, assignment_api,"},{"line_number":125,"context_line":"                                                 federation_api, identity_api)"},{"line_number":126,"context_line":"        user \u003d setup_username(context, mapped_properties)"},{"line_number":127,"context_line":"        user_id \u003d user.get(\u0027id\u0027)"},{"line_number":128,"context_line":"        group_ids \u003d mapped_properties[\u0027group_ids\u0027]"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    except Exception:"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba7be1f8_8209792e","line":127,"updated":"2015-03-02 04:55:27.000000000","message":"As a point of note, it looks like we don\u0027t ever consume user_name from setup_username, we could simply always consume ID and save passing the dict back... That said, this is not a reason to hold up the patch.","commit_id":"7a7b79673b43de4b081700709c2bc657866b51ff"}],"keystone/contrib/federation/utils.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6c1551a3220bec29244a70aba2ec26bb6272e7e6","unresolved":false,"context_lines":[{"line_number":429,"context_line":""},{"line_number":430,"context_line":"            if user_type \u003d\u003d self._UserType.EPHEMERAL:"},{"line_number":431,"context_line":"                user[\u0027domain\u0027] \u003d {"},{"line_number":432,"context_line":"                    \u0027id\u0027: federation.FEDERATED_DOMAIN_KEYWORD"},{"line_number":433,"context_line":"                }"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        # initialize the group_ids as a set to eliminate duplicates"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_71b68c26","line":432,"updated":"2015-02-19 18:30:35.000000000","message":"this should be:\n\n  CONF.federation.federated_domain_name or federation.FEDERATED_DOMAIN_KEYWORD","commit_id":"93e639fc7e210866220e6dd236ad40a2ced55a90"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"3eef83f2b2f3385954bfb6e7cfb5314acf18741a","unresolved":false,"context_lines":[{"line_number":429,"context_line":""},{"line_number":430,"context_line":"            if user_type \u003d\u003d self._UserType.EPHEMERAL:"},{"line_number":431,"context_line":"                user[\u0027domain\u0027] \u003d {"},{"line_number":432,"context_line":"                    \u0027id\u0027: federation.FEDERATED_DOMAIN_KEYWORD"},{"line_number":433,"context_line":"                }"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"        # initialize the group_ids as a set to eliminate duplicates"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_5d5ecdea","line":432,"in_reply_to":"da86d52c_71b68c26","updated":"2015-02-20 09:50:22.000000000","message":"oh shit. It\u0027s fixed now.","commit_id":"93e639fc7e210866220e6dd236ad40a2ced55a90"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"2184da11d2dd2fdbe1d34924b5c4bfeda981c29a","unresolved":false,"context_lines":[{"line_number":419,"context_line":"                for group in {g[\u0027name\u0027]: g for g in groups}.values():"},{"line_number":420,"context_line":"                    yield group"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"        def parse_user(user):"},{"line_number":423,"context_line":"            \"\"\"Parse and validate user mapping.\"\"\""},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"            user_type \u003d user.get(\u0027type\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_cc9ed462","line":422,"updated":"2015-02-25 20:48:23.000000000","message":"I\u0027m not fond of this name since nothing is actually parsed, but I could live with it for now.","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"30bb9776d089889f5bea4f82a157723820599601","unresolved":false,"context_lines":[{"line_number":419,"context_line":"                for group in {g[\u0027name\u0027]: g for g in groups}.values():"},{"line_number":420,"context_line":"                    yield group"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"        def parse_user(user):"},{"line_number":423,"context_line":"            \"\"\"Parse and validate user mapping.\"\"\""},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"            user_type \u003d user.get(\u0027type\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_e3b1cd47","line":422,"in_reply_to":"ba7be1f8_5bc8d554","updated":"2015-02-26 11:00:06.000000000","message":"Done.\nIn the future i\u0027d expect this function to grow in power a little bit.","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"8f2b7f8e1692e896c4957838c2bc6b40dc0ab2c9","unresolved":false,"context_lines":[{"line_number":419,"context_line":"                for group in {g[\u0027name\u0027]: g for g in groups}.values():"},{"line_number":420,"context_line":"                    yield group"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"        def parse_user(user):"},{"line_number":423,"context_line":"            \"\"\"Parse and validate user mapping.\"\"\""},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"            user_type \u003d user.get(\u0027type\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_5bc8d554","line":422,"in_reply_to":"ba7be1f8_cc9ed462","updated":"2015-02-25 22:36:32.000000000","message":"more like normalize_user()","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"8f2b7f8e1692e896c4957838c2bc6b40dc0ab2c9","unresolved":false,"context_lines":[{"line_number":422,"context_line":"        def parse_user(user):"},{"line_number":423,"context_line":"            \"\"\"Parse and validate user mapping.\"\"\""},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"            user_type \u003d user.get(\u0027type\u0027)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"            if user_type is None:"},{"line_number":428,"context_line":"                user_type \u003d user[\u0027type\u0027] \u003d self._UserType.EPHEMERAL"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_d5f4945c","line":425,"updated":"2015-02-25 22:36:32.000000000","message":"if user_type and user_type not in (self._USERTYPE.EPHEMERAL, self.USERTYPE.LOCAL):\n    raise some error (i.e. User type is not supported)","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"30bb9776d089889f5bea4f82a157723820599601","unresolved":false,"context_lines":[{"line_number":422,"context_line":"        def parse_user(user):"},{"line_number":423,"context_line":"            \"\"\"Parse and validate user mapping.\"\"\""},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"            user_type \u003d user.get(\u0027type\u0027)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"            if user_type is None:"},{"line_number":428,"context_line":"                user_type \u003d user[\u0027type\u0027] \u003d self._UserType.EPHEMERAL"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_a340b507","line":425,"in_reply_to":"ba7be1f8_d5f4945c","updated":"2015-02-26 11:00:06.000000000","message":"Done","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"8f2b7f8e1692e896c4957838c2bc6b40dc0ab2c9","unresolved":false,"context_lines":[{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        for identity_value in identity_values:"},{"line_number":443,"context_line":"            if \u0027user\u0027 in identity_value:"},{"line_number":444,"context_line":"                # if a mapping outputs more than one user name, log it"},{"line_number":445,"context_line":"                if user:"},{"line_number":446,"context_line":"                    LOG.warning(_LW(\u0027Ignoring user name\u0027))"},{"line_number":447,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_5bf61590","line":444,"updated":"2015-02-25 22:36:32.000000000","message":"log it? shouldn\u0027t we be erroring out?\n\nambiguity \u003d potential security problem\n\njust saying :)","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"30bb9776d089889f5bea4f82a157723820599601","unresolved":false,"context_lines":[{"line_number":441,"context_line":""},{"line_number":442,"context_line":"        for identity_value in identity_values:"},{"line_number":443,"context_line":"            if \u0027user\u0027 in identity_value:"},{"line_number":444,"context_line":"                # if a mapping outputs more than one user name, log it"},{"line_number":445,"context_line":"                if user:"},{"line_number":446,"context_line":"                    LOG.warning(_LW(\u0027Ignoring user name\u0027))"},{"line_number":447,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_a3a43508","line":444,"in_reply_to":"ba7be1f8_5bf61590","updated":"2015-02-26 11:00:06.000000000","message":"it is being logged 2 lines down","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"}],"keystone/tests/unit/mapping_fixtures.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6c1551a3220bec29244a70aba2ec26bb6272e7e6","unresolved":false,"context_lines":[{"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 \"5abc43\""},{"line_number":23,"context_line":"FEDERATED_DOMAIN \u003d \"Federated\""},{"line_number":24,"context_line":"LOCAL_DOMAIN \u003d \"Local\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_714dac3a","line":23,"updated":"2015-02-19 18:30:35.000000000","message":"this could also be: CONF.federation.federated_domain_name or\n+                    federation.FEDERATED_DOMAIN_KEYWORD","commit_id":"93e639fc7e210866220e6dd236ad40a2ced55a90"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"3eef83f2b2f3385954bfb6e7cfb5314acf18741a","unresolved":false,"context_lines":[{"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 \"5abc43\""},{"line_number":23,"context_line":"FEDERATED_DOMAIN \u003d \"Federated\""},{"line_number":24,"context_line":"LOCAL_DOMAIN \u003d \"Local\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba7be1f8_9db045df","line":23,"in_reply_to":"da86d52c_714dac3a","updated":"2015-02-20 09:50:22.000000000","message":"these are all fixtures....","commit_id":"93e639fc7e210866220e6dd236ad40a2ced55a90"}],"keystone/tests/unit/test_v3_federation.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"51e30ddaced5eaf6ec2f65ba28aab4c713cd1e86","unresolved":false,"context_lines":[{"line_number":595,"context_line":"class MappingRuleEngineTests(FederationTests):"},{"line_number":596,"context_line":"    \"\"\"A class for testing the mapping rule engine.\"\"\""},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"    def assertValidUserObject(self, mapped_properties, user_type\u003d\u0027ephemeral\u0027,"},{"line_number":599,"context_line":"                              domain_id\u003dNone):"},{"line_number":600,"context_line":"        \"\"\"Check whether mapped properties object has \u0027user\u0027 within."},{"line_number":601,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_807d831e","line":598,"updated":"2015-02-19 08:05:18.000000000","message":"assertValidMappedUserObject?","commit_id":"52cede19039df5932773f59e11103d7faddb86e9"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"e5a8c4557996161e697c47a76cc22d9805702dc0","unresolved":false,"context_lines":[{"line_number":595,"context_line":"class MappingRuleEngineTests(FederationTests):"},{"line_number":596,"context_line":"    \"\"\"A class for testing the mapping rule engine.\"\"\""},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"    def assertValidUserObject(self, mapped_properties, user_type\u003d\u0027ephemeral\u0027,"},{"line_number":599,"context_line":"                              domain_id\u003dNone):"},{"line_number":600,"context_line":"        \"\"\"Check whether mapped properties object has \u0027user\u0027 within."},{"line_number":601,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_03143d9e","line":598,"in_reply_to":"da86d52c_807d831e","updated":"2015-02-19 09:43:40.000000000","message":"Done","commit_id":"52cede19039df5932773f59e11103d7faddb86e9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"51e30ddaced5eaf6ec2f65ba28aab4c713cd1e86","unresolved":false,"context_lines":[{"line_number":601,"context_line":""},{"line_number":602,"context_line":"        According to today\u0027s rules, RuleProcessor does not have to issue user\u0027s"},{"line_number":603,"context_line":"        id or name. What\u0027s actually  required is user\u0027s type and for ephemeral"},{"line_number":604,"context_line":"        uses that would be service domain."},{"line_number":605,"context_line":"        \"\"\""},{"line_number":606,"context_line":"        self.assertIn(\u0027user\u0027, mapped_properties,"},{"line_number":607,"context_line":"                      message\u003d\u0027Missing user object in mapped properties\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_2004d713","line":604,"updated":"2015-02-19 08:05:18.000000000","message":"typo on \u0027users\u0027\nand do you mean \u0027federated\u0027 domain?","commit_id":"52cede19039df5932773f59e11103d7faddb86e9"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"e5a8c4557996161e697c47a76cc22d9805702dc0","unresolved":false,"context_lines":[{"line_number":601,"context_line":""},{"line_number":602,"context_line":"        According to today\u0027s rules, RuleProcessor does not have to issue user\u0027s"},{"line_number":603,"context_line":"        id or name. What\u0027s actually  required is user\u0027s type and for ephemeral"},{"line_number":604,"context_line":"        uses that would be service domain."},{"line_number":605,"context_line":"        \"\"\""},{"line_number":606,"context_line":"        self.assertIn(\u0027user\u0027, mapped_properties,"},{"line_number":607,"context_line":"                      message\u003d\u0027Missing user object in mapped properties\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_e3f48956","line":604,"in_reply_to":"da86d52c_2004d713","updated":"2015-02-19 09:43:40.000000000","message":"i meant service domain that is by default called \u0027Federated\u0027 :-)","commit_id":"52cede19039df5932773f59e11103d7faddb86e9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"51e30ddaced5eaf6ec2f65ba28aab4c713cd1e86","unresolved":false,"context_lines":[{"line_number":632,"context_line":"        ln \u003d assertion.get(\u0027LastName\u0027)"},{"line_number":633,"context_line":"        full_name \u003d \u0027%s %s\u0027 % (fn, ln)"},{"line_number":634,"context_line":"        group_ids \u003d values.get(\u0027group_ids\u0027)"},{"line_number":635,"context_line":"        user_name \u003d values.get(\u0027user\u0027, {}).get(\u0027name\u0027)"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"        self.assertIn(mapping_fixtures.EMPLOYEE_GROUP_ID, group_ids)"},{"line_number":638,"context_line":"        self.assertEqual(user_name, full_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_c0aa1b70","line":635,"updated":"2015-02-19 08:05:18.000000000","message":"why defaulting to empty {}, calling .get(\u0027name\u0027) will result in None, and the test case must pass by matching full_name","commit_id":"52cede19039df5932773f59e11103d7faddb86e9"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"e5a8c4557996161e697c47a76cc22d9805702dc0","unresolved":false,"context_lines":[{"line_number":632,"context_line":"        ln \u003d assertion.get(\u0027LastName\u0027)"},{"line_number":633,"context_line":"        full_name \u003d \u0027%s %s\u0027 % (fn, ln)"},{"line_number":634,"context_line":"        group_ids \u003d values.get(\u0027group_ids\u0027)"},{"line_number":635,"context_line":"        user_name \u003d values.get(\u0027user\u0027, {}).get(\u0027name\u0027)"},{"line_number":636,"context_line":""},{"line_number":637,"context_line":"        self.assertIn(mapping_fixtures.EMPLOYEE_GROUP_ID, group_ids)"},{"line_number":638,"context_line":"        self.assertEqual(user_name, full_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_c3aa2570","line":635,"in_reply_to":"da86d52c_c0aa1b70","updated":"2015-02-19 09:43:40.000000000","message":"If there was no \u0027user\u0027 in values .get() would return None and .get(\u0027name\u0027) would fail. I decided to let it endup with user_name set to None so it fails later in self.assertEqla(user_name, full_name). In fact arguments ordering should be swapped.","commit_id":"52cede19039df5932773f59e11103d7faddb86e9"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"51e30ddaced5eaf6ec2f65ba28aab4c713cd1e86","unresolved":false,"context_lines":[{"line_number":674,"context_line":"        self.assertValidUserObject(values)"},{"line_number":675,"context_line":"        user_name \u003d assertion.get(\u0027UserName\u0027)"},{"line_number":676,"context_line":"        group_ids \u003d values.get(\u0027group_ids\u0027)"},{"line_number":677,"context_line":"        name \u003d values.get(\u0027user\u0027, {}).get(\u0027name\u0027)"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        self.assertEqual(user_name, name)"},{"line_number":680,"context_line":"        self.assertIn(mapping_fixtures.TESTER_GROUP_ID, group_ids)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_40ae2b82","line":677,"updated":"2015-02-19 08:05:18.000000000","message":"same comment as above","commit_id":"52cede19039df5932773f59e11103d7faddb86e9"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"e5a8c4557996161e697c47a76cc22d9805702dc0","unresolved":false,"context_lines":[{"line_number":674,"context_line":"        self.assertValidUserObject(values)"},{"line_number":675,"context_line":"        user_name \u003d assertion.get(\u0027UserName\u0027)"},{"line_number":676,"context_line":"        group_ids \u003d values.get(\u0027group_ids\u0027)"},{"line_number":677,"context_line":"        name \u003d values.get(\u0027user\u0027, {}).get(\u0027name\u0027)"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        self.assertEqual(user_name, name)"},{"line_number":680,"context_line":"        self.assertIn(mapping_fixtures.TESTER_GROUP_ID, group_ids)"}],"source_content_type":"text/x-python","patch_set":9,"id":"da86d52c_e3a5699f","line":677,"in_reply_to":"da86d52c_40ae2b82","updated":"2015-02-19 09:43:40.000000000","message":"If there was no \u0027user\u0027 in values .get() would return None and .get(\u0027name\u0027) would fail. I decided to let it endup with user_name set to None so it fails later in self.assertEqla(user_name, full_name). In fact arguments ordering should be swapped.","commit_id":"52cede19039df5932773f59e11103d7faddb86e9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"2184da11d2dd2fdbe1d34924b5c4bfeda981c29a","unresolved":false,"context_lines":[{"line_number":920,"context_line":"        self.assertNotIn(\u0027name\u0027, mapped_properties[\u0027user\u0027])"},{"line_number":921,"context_line":""},{"line_number":922,"context_line":"    def test_set_ephemeral_domain_to_ephemeral_users(self):"},{"line_number":923,"context_line":"        \"\"\"Test that ephemeral users will always become members of federated"},{"line_number":924,"context_line":"        service domain. The check depends on ``type`` value which must be set"},{"line_number":925,"context_line":"        to ``ephemeral`` in case of ephemeral user."},{"line_number":926,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_ac70c072","line":923,"updated":"2015-02-25 20:48:23.000000000","message":"Bad docstring format. The first line should be a short summary.","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"30bb9776d089889f5bea4f82a157723820599601","unresolved":false,"context_lines":[{"line_number":920,"context_line":"        self.assertNotIn(\u0027name\u0027, mapped_properties[\u0027user\u0027])"},{"line_number":921,"context_line":""},{"line_number":922,"context_line":"    def test_set_ephemeral_domain_to_ephemeral_users(self):"},{"line_number":923,"context_line":"        \"\"\"Test that ephemeral users will always become members of federated"},{"line_number":924,"context_line":"        service domain. The check depends on ``type`` value which must be set"},{"line_number":925,"context_line":"        to ``ephemeral`` in case of ephemeral user."},{"line_number":926,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ba7be1f8_c384c90c","line":923,"in_reply_to":"ba7be1f8_ac70c072","updated":"2015-02-26 11:00:06.000000000","message":"Done","commit_id":"e3914e0beaeb7557bf4401d00ad0f7d5fc453425"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6fdc6b629220438dd5841383a0221d18b8585174","unresolved":false,"context_lines":[{"line_number":1002,"context_line":"        - Check if the user has propert type set (\u0027ephemeral\u0027)"},{"line_number":1003,"context_line":"        - Check if user\u0027s id is properly mapped from the assertion"},{"line_number":1004,"context_line":"        - Check if user\u0027s name is properly set and equal to id, as it was not"},{"line_number":1005,"context_line":"        explicitely specified in the mapping."},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"        \"\"\""},{"line_number":1008,"context_line":"        mapping \u003d mapping_fixtures.MAPPING_USER_IDS"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba7be1f8_bfea2baa","line":1005,"updated":"2015-02-28 03:23:18.000000000","message":"nit: explicitly* and i think it should be tabbed over a bit for proper formatting","commit_id":"7a7b79673b43de4b081700709c2bc657866b51ff"}]}
