)]}'
{"openstackclient/identity/common.py":[{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"2c75dab6e0bd864853d5e0103f56b16b119d8b9a","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            token_dict \u003d token_dict[\u0027project\u0027]"},{"line_number":76,"context_line":"        obj \u003d token_dict[resource]"},{"line_number":77,"context_line":"        return obj[\u0027id\u0027] if obj[\u0027name\u0027] \u003d\u003d parsed_name else parsed_name"},{"line_number":78,"context_line":"    # diaper defense in case parsing the token fails"},{"line_number":79,"context_line":"    except Exception:  # noqa"},{"line_number":80,"context_line":"        return parsed_name"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_946f76c4","line":78,"range":{"start_line":78,"start_character":6,"end_line":78,"end_character":20},"updated":"2016-06-23 12:25:52.000000000","message":"This is a good defense.  :)","commit_id":"337d013c94378a4b3f0e8f90e4f5bd745448658f"}],"openstackclient/identity/v3/domain.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d61082ee3744141d1b9cc5432350f2e7cf683228","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def take_action(self, parsed_args):"},{"line_number":185,"context_line":"        identity_client \u003d self.app.client_manager.identity"},{"line_number":186,"context_line":"        domain \u003d parsed_args.domain"},{"line_number":187,"context_line":"        tok \u003d identity_client.auth.client.get_token()"},{"line_number":188,"context_line":"        tok_data \u003d identity_client.tokens.get_token_data(tok)"},{"line_number":189,"context_line":"        tok_domain \u003d tok_data[\u0027token\u0027][\u0027project\u0027][\u0027domain\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_8c8b4d1e","line":186,"range":{"start_line":186,"start_character":8,"end_line":186,"end_character":35},"updated":"2016-05-03 06:02:05.000000000","message":"this isn\u0027t used until line 190, move it down","commit_id":"e929d84758b7dc5ec3ebbaf4beb34732751739b7"},{"author":{"_account_id":18416,"name":"David Rosales","email":"darosale@us.ibm.com","username":"darosale"},"change_message_id":"c7ee2223acd235bfab8b5aab230ad8c159781259","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def take_action(self, parsed_args):"},{"line_number":185,"context_line":"        identity_client \u003d self.app.client_manager.identity"},{"line_number":186,"context_line":"        domain \u003d parsed_args.domain"},{"line_number":187,"context_line":"        tok \u003d identity_client.auth.client.get_token()"},{"line_number":188,"context_line":"        tok_data \u003d identity_client.tokens.get_token_data(tok)"},{"line_number":189,"context_line":"        tok_domain \u003d tok_data[\u0027token\u0027][\u0027project\u0027][\u0027domain\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_d5b8142d","line":186,"range":{"start_line":186,"start_character":8,"end_line":186,"end_character":35},"in_reply_to":"1a122d0e_8c8b4d1e","updated":"2016-05-03 16:45:26.000000000","message":"Done","commit_id":"e929d84758b7dc5ec3ebbaf4beb34732751739b7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d61082ee3744141d1b9cc5432350f2e7cf683228","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        domain \u003d parsed_args.domain"},{"line_number":187,"context_line":"        tok \u003d identity_client.auth.client.get_token()"},{"line_number":188,"context_line":"        tok_data \u003d identity_client.tokens.get_token_data(tok)"},{"line_number":189,"context_line":"        tok_domain \u003d tok_data[\u0027token\u0027][\u0027project\u0027][\u0027domain\u0027]"},{"line_number":190,"context_line":"        if domain \u003d\u003d tok_domain[\u0027name\u0027]:"},{"line_number":191,"context_line":"            domain \u003d tok_domain[\u0027id\u0027]"},{"line_number":192,"context_line":"        domain \u003d utils.find_resource(identity_client.domains,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_2cc9595b","line":189,"range":{"start_line":189,"start_character":8,"end_line":189,"end_character":59},"updated":"2016-05-03 06:02:05.000000000","message":"this assumes you want to show the project\u0027s domain and not the user\u0027s domain, this could have easily been [token][user][domain]\n\nusually they will exist in the same domain, but maybe add a comment that says that","commit_id":"e929d84758b7dc5ec3ebbaf4beb34732751739b7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d61082ee3744141d1b9cc5432350f2e7cf683228","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        domain \u003d parsed_args.domain"},{"line_number":187,"context_line":"        tok \u003d identity_client.auth.client.get_token()"},{"line_number":188,"context_line":"        tok_data \u003d identity_client.tokens.get_token_data(tok)"},{"line_number":189,"context_line":"        tok_domain \u003d tok_data[\u0027token\u0027][\u0027project\u0027][\u0027domain\u0027]"},{"line_number":190,"context_line":"        if domain \u003d\u003d tok_domain[\u0027name\u0027]:"},{"line_number":191,"context_line":"            domain \u003d tok_domain[\u0027id\u0027]"},{"line_number":192,"context_line":"        domain \u003d utils.find_resource(identity_client.domains,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_cc9c2560","line":189,"range":{"start_line":189,"start_character":21,"end_line":189,"end_character":59},"updated":"2016-05-03 06:02:05.000000000","message":"you probably want something like...\n\n  tok_domain \u003d tok_data.get(\u0027token\u0027, {}).get(\u0027project\u0027, {}).get(\u0027domain\u0027, {})\n\njust in case a key does not exist","commit_id":"e929d84758b7dc5ec3ebbaf4beb34732751739b7"},{"author":{"_account_id":18416,"name":"David Rosales","email":"darosale@us.ibm.com","username":"darosale"},"change_message_id":"c7ee2223acd235bfab8b5aab230ad8c159781259","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        domain \u003d parsed_args.domain"},{"line_number":187,"context_line":"        tok \u003d identity_client.auth.client.get_token()"},{"line_number":188,"context_line":"        tok_data \u003d identity_client.tokens.get_token_data(tok)"},{"line_number":189,"context_line":"        tok_domain \u003d tok_data[\u0027token\u0027][\u0027project\u0027][\u0027domain\u0027]"},{"line_number":190,"context_line":"        if domain \u003d\u003d tok_domain[\u0027name\u0027]:"},{"line_number":191,"context_line":"            domain \u003d tok_domain[\u0027id\u0027]"},{"line_number":192,"context_line":"        domain \u003d utils.find_resource(identity_client.domains,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_b5b3d84c","line":189,"range":{"start_line":189,"start_character":8,"end_line":189,"end_character":59},"in_reply_to":"1a122d0e_2cc9595b","updated":"2016-05-03 16:45:26.000000000","message":"Done","commit_id":"e929d84758b7dc5ec3ebbaf4beb34732751739b7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d61082ee3744141d1b9cc5432350f2e7cf683228","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        if domain \u003d\u003d tok_domain[\u0027name\u0027]:"},{"line_number":191,"context_line":"            domain \u003d tok_domain[\u0027id\u0027]"},{"line_number":192,"context_line":"        domain \u003d utils.find_resource(identity_client.domains,"},{"line_number":193,"context_line":"                                     parsed_args.domain)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        domain._info.pop(\u0027links\u0027)"},{"line_number":196,"context_line":"        return zip(*sorted(six.iteritems(domain._info)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_6cc35139","line":193,"range":{"start_line":193,"start_character":37,"end_line":193,"end_character":55},"updated":"2016-05-03 06:02:05.000000000","message":"i think you want to pass in the \u0027domain\u0027 ID from line 191 here, or the parsed_args version the token domain and parsed_args domain don\u0027t match","commit_id":"e929d84758b7dc5ec3ebbaf4beb34732751739b7"},{"author":{"_account_id":18416,"name":"David Rosales","email":"darosale@us.ibm.com","username":"darosale"},"change_message_id":"c7ee2223acd235bfab8b5aab230ad8c159781259","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        if domain \u003d\u003d tok_domain[\u0027name\u0027]:"},{"line_number":191,"context_line":"            domain \u003d tok_domain[\u0027id\u0027]"},{"line_number":192,"context_line":"        domain \u003d utils.find_resource(identity_client.domains,"},{"line_number":193,"context_line":"                                     parsed_args.domain)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        domain._info.pop(\u0027links\u0027)"},{"line_number":196,"context_line":"        return zip(*sorted(six.iteritems(domain._info)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_1581ec4d","line":193,"range":{"start_line":193,"start_character":37,"end_line":193,"end_character":55},"in_reply_to":"1a122d0e_6cc35139","updated":"2016-05-03 16:45:26.000000000","message":"Done","commit_id":"e929d84758b7dc5ec3ebbaf4beb34732751739b7"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"c4d6ce147040e53b5caa7fa97a1e064eb3a2f169","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        identity_client \u003d self.app.client_manager.identity"},{"line_number":186,"context_line":"        tok \u003d identity_client.auth.client.get_token()"},{"line_number":187,"context_line":"        tok_data \u003d identity_client.tokens.get_token_data(tok)"},{"line_number":188,"context_line":"        # Try to get the domain for the project"},{"line_number":189,"context_line":"        tok_domain \u003d tok_data.get(\u0027token\u0027, {}).get(\u0027project\u0027, {}).\\"},{"line_number":190,"context_line":"            get(\u0027domain\u0027, {})"},{"line_number":191,"context_line":"        domain \u003d parsed_args.domain"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_bd2354a6","line":188,"updated":"2016-05-10 14:10:48.000000000","message":"I suppose it could also be a domain-scoped rather than project-scoped token, right? We should also handle that case.","commit_id":"59d3075d464fce3aa59da08b1de6bb8ac722119e"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8fd5dc02ee4379fbf9479dd090506220edea483c","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        tok_domain \u003d tok_data.get(\u0027token\u0027, {}).get(\u0027project\u0027, {}).\\"},{"line_number":190,"context_line":"            get(\u0027domain\u0027, {})"},{"line_number":191,"context_line":"        domain \u003d parsed_args.domain"},{"line_number":192,"context_line":"        if domain \u003d\u003d tok_domain[\u0027name\u0027]:"},{"line_number":193,"context_line":"            domain \u003d tok_domain[\u0027id\u0027]"},{"line_number":194,"context_line":"        domain \u003d utils.find_resource(identity_client.domains,"},{"line_number":195,"context_line":"                                     domain)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        domain._info.pop(\u0027links\u0027)"},{"line_number":198,"context_line":"        return zip(*sorted(six.iteritems(domain._info)))"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_49c1c3e3","line":195,"range":{"start_line":192,"start_character":8,"end_line":195,"end_character":44},"updated":"2016-05-05 07:47:00.000000000","message":"a slight optimization here... if the parsed arg and the token are the same, we still end up doing a look up, that seems unnecessary, we already established it\u0027s real since it\u0027s in the token. how about:\n\n  # set the domain to token domain by default\n  domain \u003d tok_domain[\u0027id\u0027]\n  if parsed_args.domain not in [tok_domain[\u0027name\u0027], tok_domain[\u0027id\u0027]]:\n    # we didn\u0027t match, look up the parsed args domain\n    domain \u003d utils.find_resource(identity_client.domains,\n      parsed_args.domain)","commit_id":"59d3075d464fce3aa59da08b1de6bb8ac722119e"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"c4d6ce147040e53b5caa7fa97a1e064eb3a2f169","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        tok_domain \u003d tok_data.get(\u0027token\u0027, {}).get(\u0027project\u0027, {}).\\"},{"line_number":190,"context_line":"            get(\u0027domain\u0027, {})"},{"line_number":191,"context_line":"        domain \u003d parsed_args.domain"},{"line_number":192,"context_line":"        if domain \u003d\u003d tok_domain[\u0027name\u0027]:"},{"line_number":193,"context_line":"            domain \u003d tok_domain[\u0027id\u0027]"},{"line_number":194,"context_line":"        domain \u003d utils.find_resource(identity_client.domains,"},{"line_number":195,"context_line":"                                     domain)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        domain._info.pop(\u0027links\u0027)"},{"line_number":198,"context_line":"        return zip(*sorted(six.iteritems(domain._info)))"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_4202450c","line":195,"range":{"start_line":192,"start_character":8,"end_line":195,"end_character":44},"in_reply_to":"1a122d0e_49c1c3e3","updated":"2016-05-10 14:10:48.000000000","message":"The lookup is still necessary because before the lookup \"domain\" is just an id or name, and the lookup turns that into a full resource instance. It\u0027s confusing because the \u0027domain\u0027 variable is used to store 2 different types of data at different times. I suggest we split that into 2 separate variables for better clarity.","commit_id":"59d3075d464fce3aa59da08b1de6bb8ac722119e"},{"author":{"_account_id":8410,"name":"Richard Theis","email":"rtheis@us.ibm.com","username":"rtheis"},"change_message_id":"f476c87760a4fcb80a022ed6436101f5b541fc9a","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def take_action(self, parsed_args):"},{"line_number":185,"context_line":"        identity_client \u003d self.app.client_manager.identity"},{"line_number":186,"context_line":"        tok \u003d identity_client.auth.client.get_token()"},{"line_number":187,"context_line":"        tok_data \u003d identity_client.tokens.get_token_data(tok)"},{"line_number":188,"context_line":"        # Try to get the domain for the project"},{"line_number":189,"context_line":"        tok_domain \u003d tok_data.get(\u0027token\u0027, {}).get(\u0027domain\u0027, {})"},{"line_number":190,"context_line":"        if not tok_domain:"},{"line_number":191,"context_line":"            tok_domain \u003d tok_data.get(\u0027token\u0027, {}).get(\u0027project\u0027, {}).\\"},{"line_number":192,"context_line":"                get(\u0027domain\u0027, {})"},{"line_number":193,"context_line":"        id_or_name \u003d parsed_args.domain"},{"line_number":194,"context_line":"        if id_or_name \u003d\u003d tok_domain[\u0027name\u0027]:"},{"line_number":195,"context_line":"            id_or_name \u003d tok_domain[\u0027id\u0027]"},{"line_number":196,"context_line":"        domain \u003d utils.find_resource(identity_client.domains,"},{"line_number":197,"context_line":"                                     id_or_name)"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_3870f8a3","line":195,"range":{"start_line":186,"start_character":7,"end_line":195,"end_character":41},"updated":"2016-05-26 17:50:53.000000000","message":"There\u0027s a lot of similar logic here...would it be worth a method in identity/common.py to hide these details?","commit_id":"9babc5fe36644fa96da75b775fc2d9b04578c9e3"}],"openstackclient/identity/v3/project.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d61082ee3744141d1b9cc5432350f2e7cf683228","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1a122d0e_ccea65ac","updated":"2016-05-03 06:02:05.000000000","message":"similar comments as /v3/domain","commit_id":"e929d84758b7dc5ec3ebbaf4beb34732751739b7"},{"author":{"_account_id":18416,"name":"David Rosales","email":"darosale@us.ibm.com","username":"darosale"},"change_message_id":"c7ee2223acd235bfab8b5aab230ad8c159781259","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1a122d0e_d58f7473","in_reply_to":"1a122d0e_ccea65ac","updated":"2016-05-03 16:45:26.000000000","message":"Done","commit_id":"e929d84758b7dc5ec3ebbaf4beb34732751739b7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8fd5dc02ee4379fbf9479dd090506220edea483c","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        tok \u003d identity_client.auth.client.get_token()"},{"line_number":321,"context_line":"        tok_data \u003d identity_client.tokens.get_token_data(tok)"},{"line_number":322,"context_line":"        tok_project \u003d tok_data.get(\u0027token\u0027, {}).get(\u0027project\u0027, {})"},{"line_number":323,"context_line":"        project \u003d parsed_args.project"},{"line_number":324,"context_line":"        if project \u003d\u003d tok_project[\u0027name\u0027]:"},{"line_number":325,"context_line":"            project \u003d tok_project[\u0027id\u0027]"},{"line_number":326,"context_line":"        if parsed_args.domain:"},{"line_number":327,"context_line":"            domain \u003d common.find_domain(identity_client, parsed_args.domain)"},{"line_number":328,"context_line":"            project \u003d utils.find_resource("}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_c9095333","line":325,"range":{"start_line":323,"start_character":8,"end_line":325,"end_character":39},"updated":"2016-05-05 07:47:00.000000000","message":"we can follow the same pattern as i mentioned in v3/domains","commit_id":"59d3075d464fce3aa59da08b1de6bb8ac722119e"}]}
