)]}'
{"openstackclient/compute/v2/server.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b930173c7d753eecfb4968ad1f9038b75ac452f5","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    return info"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def _wait_for_status(poll_fn, obj_id, action, final_ok_states,"},{"line_number":89,"context_line":"                     poll_period\u003d5, show_progress\u003dTrue,"},{"line_number":90,"context_line":"                     status_field\u003d\"status\", silent\u003dFalse):"},{"line_number":91,"context_line":"    \"\"\"Block while an action is being performed, periodically printing"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FnB8%3D","line":88,"updated":"2012-08-27 20:20:22.000000000","message":"Could you update the docstring with descriptions of the arguments to this function? It looks like \"action\" is a string describing the action, is that right? What values are expected in final_ok_states?","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"67726ea5ba5971e95c913079c2d4b298c0bd2ffc","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    return info"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"def _wait_for_status(poll_fn, obj_id, action, final_ok_states,"},{"line_number":89,"context_line":"                     poll_period\u003d5, show_progress\u003dTrue,"},{"line_number":90,"context_line":"                     status_field\u003d\"status\", silent\u003dFalse):"},{"line_number":91,"context_line":"    \"\"\"Block while an action is being performed, periodically printing"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fg7Y%3D","line":88,"in_reply_to":"AAAALH%2F%2FnB8%3D","updated":"2012-09-05 21:00:59.000000000","message":"The values in final_ok_states are specific to the object type being waited on; here it is only [\u0027active\u0027].\n\nI\u0027ve removed the progress reporting for now as in my mind the --wait option shouldn\u0027t necessarily change the output just delay the exit.  Reporting status with logging makes more sense to me, I\u0027ll loop back and add that later.","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b930173c7d753eecfb4968ad1f9038b75ac452f5","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        if status in final_ok_states:"},{"line_number":117,"context_line":"            if not silent:"},{"line_number":118,"context_line":"                print_progress(100)"},{"line_number":119,"context_line":"                print \"\\nFinished\""},{"line_number":120,"context_line":"            break"},{"line_number":121,"context_line":"        elif status \u003d\u003d \"error\":"},{"line_number":122,"context_line":"            if not silent:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FnB4%3D","line":119,"updated":"2012-08-27 20:20:22.000000000","message":"Are we still trying to keep the client code compatible with python 3? If so, these print statements will need to change to write to stdout/stderr. If you use the logging module to report status, then show_progress could be eliminated because cliff already sets different levels of verbosity for the logging output. It would also mean \"progress\" info wouldn\u0027t end up in real output that something might want to parse.","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"67726ea5ba5971e95c913079c2d4b298c0bd2ffc","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        if status in final_ok_states:"},{"line_number":117,"context_line":"            if not silent:"},{"line_number":118,"context_line":"                print_progress(100)"},{"line_number":119,"context_line":"                print \"\\nFinished\""},{"line_number":120,"context_line":"            break"},{"line_number":121,"context_line":"        elif status \u003d\u003d \"error\":"},{"line_number":122,"context_line":"            if not silent:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fg7U%3D","line":119,"in_reply_to":"AAAALH%2F%2FnB4%3D","updated":"2012-09-05 21:00:59.000000000","message":"Good points about the output; I\u0027ve stripped it from _wait_for_status() for now and will put back a bit of logging output later.","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b930173c7d753eecfb4968ad1f9038b75ac452f5","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            required\u003dTrue,"},{"line_number":155,"context_line":"            help\u003d\u0027Create server with this flavor\u0027,"},{"line_number":156,"context_line":"            )"},{"line_number":157,"context_line":"        parser.add_argument("},{"line_number":158,"context_line":"            \u0027--security-groups\u0027,"},{"line_number":159,"context_line":"            metavar\u003d\u0027\u003csecurity-group-list\u003e\u0027,"},{"line_number":160,"context_line":"            help\u003d\u0027List of security groups to assign to this server\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FnBs%3D","line":157,"updated":"2012-08-27 20:20:22.000000000","message":"Why not use the \"append\" action here instead of parsing a comma separated list?","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"4ec465927ec2b2ee23c65044d9820d6735bae062","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            required\u003dTrue,"},{"line_number":155,"context_line":"            help\u003d\u0027Create server with this flavor\u0027,"},{"line_number":156,"context_line":"            )"},{"line_number":157,"context_line":"        parser.add_argument("},{"line_number":158,"context_line":"            \u0027--security-groups\u0027,"},{"line_number":159,"context_line":"            metavar\u003d\u0027\u003csecurity-group-list\u003e\u0027,"},{"line_number":160,"context_line":"            help\u003d\u0027List of security groups to assign to this server\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FewQ%3D","line":157,"in_reply_to":"AAAALH%2F%2Fg7E%3D","updated":"2012-09-07 11:17:52.000000000","message":"I pointed it out because it\u0027s not consistent with the --meta-data or --file options, just below.","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"67726ea5ba5971e95c913079c2d4b298c0bd2ffc","unresolved":false,"context_lines":[{"line_number":154,"context_line":"            required\u003dTrue,"},{"line_number":155,"context_line":"            help\u003d\u0027Create server with this flavor\u0027,"},{"line_number":156,"context_line":"            )"},{"line_number":157,"context_line":"        parser.add_argument("},{"line_number":158,"context_line":"            \u0027--security-groups\u0027,"},{"line_number":159,"context_line":"            metavar\u003d\u0027\u003csecurity-group-list\u003e\u0027,"},{"line_number":160,"context_line":"            help\u003d\u0027List of security groups to assign to this server\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fg7E%3D","line":157,"in_reply_to":"AAAALH%2F%2FnBs%3D","updated":"2012-09-05 21:00:59.000000000","message":"Mostly because I think the list with a single option is simpler.  And because this was copied form novaclient.","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b930173c7d753eecfb4968ad1f9038b75ac452f5","unresolved":false,"context_lines":[{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        min_count \u003d 1"},{"line_number":264,"context_line":"        max_count \u003d 1"},{"line_number":265,"context_line":"        if parsed_args.min is not None:"},{"line_number":266,"context_line":"            min_count \u003d parsed_args.min"},{"line_number":267,"context_line":"        if parsed_args.max is not None:"},{"line_number":268,"context_line":"            max_count \u003d parsed_args.max"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FnBg%3D","line":265,"updated":"2012-08-27 20:20:22.000000000","message":"Why not set a default for the min argument and then just use parsed_args.min? Same question for max.","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"67726ea5ba5971e95c913079c2d4b298c0bd2ffc","unresolved":false,"context_lines":[{"line_number":262,"context_line":""},{"line_number":263,"context_line":"        min_count \u003d 1"},{"line_number":264,"context_line":"        max_count \u003d 1"},{"line_number":265,"context_line":"        if parsed_args.min is not None:"},{"line_number":266,"context_line":"            min_count \u003d parsed_args.min"},{"line_number":267,"context_line":"        if parsed_args.max is not None:"},{"line_number":268,"context_line":"            max_count \u003d parsed_args.max"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fg54%3D","line":265,"in_reply_to":"AAAALH%2F%2FnBg%3D","updated":"2012-09-05 21:00:59.000000000","message":"Yup, simplified.","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b930173c7d753eecfb4968ad1f9038b75ac452f5","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                    (parsed_args.user_data, e))"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        # use the os-keypair extension"},{"line_number":289,"context_line":"        key_name \u003d None"},{"line_number":290,"context_line":"        if parsed_args.key_name is not None:"},{"line_number":291,"context_line":"            key_name \u003d parsed_args.key_name"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FnBU%3D","line":289,"updated":"2012-08-27 20:20:22.000000000","message":"The standard default for an argument is None, so you can just say key_name \u003d parsed_args.key_name (or use parsed_args.key_name).","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b930173c7d753eecfb4968ad1f9038b75ac452f5","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            availability_zone \u003d parsed_args.availability_zone"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        block_device_mapping \u003d {}"},{"line_number":298,"context_line":"        for bdm in parsed_args.block_device_mapping:"},{"line_number":299,"context_line":"            device_name, mapping \u003d bdm.split(\u0027\u003d\u0027, 1)"},{"line_number":300,"context_line":"            block_device_mapping[device_name] \u003d mapping"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FnBM%3D","line":298,"updated":"2012-08-27 20:20:22.000000000","message":"I like the generator expression used on line 253 better than a loop like this.","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"67726ea5ba5971e95c913079c2d4b298c0bd2ffc","unresolved":false,"context_lines":[{"line_number":295,"context_line":"            availability_zone \u003d parsed_args.availability_zone"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        block_device_mapping \u003d {}"},{"line_number":298,"context_line":"        for bdm in parsed_args.block_device_mapping:"},{"line_number":299,"context_line":"            device_name, mapping \u003d bdm.split(\u0027\u003d\u0027, 1)"},{"line_number":300,"context_line":"            block_device_mapping[device_name] \u003d mapping"},{"line_number":301,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fg5E%3D","line":298,"in_reply_to":"AAAALH%2F%2FnBM%3D","updated":"2012-09-05 21:00:59.000000000","message":"Done","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b930173c7d753eecfb4968ad1f9038b75ac452f5","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        nics \u003d []"},{"line_number":303,"context_line":"        for nic_str in parsed_args.nic:"},{"line_number":304,"context_line":"            nic_info \u003d {\"net-id\": \"\", \"v4-fixed-ip\": \"\"}"},{"line_number":305,"context_line":"            for kv_str in nic_str.split(\",\"):"},{"line_number":306,"context_line":"                k, v \u003d kv_str.split(\"\u003d\", 1)"},{"line_number":307,"context_line":"                nic_info[k] \u003d v"},{"line_number":308,"context_line":"            nics.append(nic_info)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FnBI%3D","line":305,"updated":"2012-08-27 20:20:22.000000000","message":"Ditto on using generator expression here. It leaves fewer variables to leak into the namespace.","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"67726ea5ba5971e95c913079c2d4b298c0bd2ffc","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        nics \u003d []"},{"line_number":303,"context_line":"        for nic_str in parsed_args.nic:"},{"line_number":304,"context_line":"            nic_info \u003d {\"net-id\": \"\", \"v4-fixed-ip\": \"\"}"},{"line_number":305,"context_line":"            for kv_str in nic_str.split(\",\"):"},{"line_number":306,"context_line":"                k, v \u003d kv_str.split(\"\u003d\", 1)"},{"line_number":307,"context_line":"                nic_info[k] \u003d v"},{"line_number":308,"context_line":"            nics.append(nic_info)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fg5A%3D","line":305,"in_reply_to":"AAAALH%2F%2FnBI%3D","updated":"2012-09-05 21:00:59.000000000","message":"Done","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b930173c7d753eecfb4968ad1f9038b75ac452f5","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            nics.append(nic_info)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        hints \u003d {}"},{"line_number":311,"context_line":"        if parsed_args.hint:"},{"line_number":312,"context_line":"            for hint in parsed_args.hint:"},{"line_number":313,"context_line":"                key, _sep, value \u003d hint.partition(\u0027\u003d\u0027)"},{"line_number":314,"context_line":"                # NOTE(vish): multiple copies of the same hint will"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FnBE%3D","line":311,"updated":"2012-08-27 20:20:22.000000000","message":"This conditional check is redundant. If the list is empty, the loop will not be entered.","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"67726ea5ba5971e95c913079c2d4b298c0bd2ffc","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            nics.append(nic_info)"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        hints \u003d {}"},{"line_number":311,"context_line":"        if parsed_args.hint:"},{"line_number":312,"context_line":"            for hint in parsed_args.hint:"},{"line_number":313,"context_line":"                key, _sep, value \u003d hint.partition(\u0027\u003d\u0027)"},{"line_number":314,"context_line":"                # NOTE(vish): multiple copies of the same hint will"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fg48%3D","line":311,"in_reply_to":"AAAALH%2F%2FnBE%3D","updated":"2012-09-05 21:00:59.000000000","message":"Done","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b930173c7d753eecfb4968ad1f9038b75ac452f5","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        self.log.debug(\u0027boot_kwargs: %s\u0027 % boot_kwargs)"},{"line_number":351,"context_line":"        server \u003d compute_client.servers.create(*boot_args, **boot_kwargs)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        # TODO(dtroyer): force silent\u003dTrue if output filter !\u003d table"},{"line_number":354,"context_line":"        if parsed_args.wait:"},{"line_number":355,"context_line":"            _wait_for_status(compute_client.servers.get, server._info[\u0027id\u0027],"},{"line_number":356,"context_line":"                \u0027building\u0027, [\u0027active\u0027], show_progress\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FnBA%3D","line":353,"updated":"2012-08-27 20:20:22.000000000","message":"Use the framework\u0027s verbosity controls instead of checking a condition like that directly.","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"67726ea5ba5971e95c913079c2d4b298c0bd2ffc","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        self.log.debug(\u0027boot_kwargs: %s\u0027 % boot_kwargs)"},{"line_number":351,"context_line":"        server \u003d compute_client.servers.create(*boot_args, **boot_kwargs)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        # TODO(dtroyer): force silent\u003dTrue if output filter !\u003d table"},{"line_number":354,"context_line":"        if parsed_args.wait:"},{"line_number":355,"context_line":"            _wait_for_status(compute_client.servers.get, server._info[\u0027id\u0027],"},{"line_number":356,"context_line":"                \u0027building\u0027, [\u0027active\u0027], show_progress\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fg44%3D","line":353,"in_reply_to":"AAAALH%2F%2FnBA%3D","updated":"2012-09-05 21:00:59.000000000","message":"moot now","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"b930173c7d753eecfb4968ad1f9038b75ac452f5","unresolved":false,"context_lines":[{"line_number":501,"context_line":"            metavar\u003d\u0027\u003cserver\u003e\u0027,"},{"line_number":502,"context_line":"            help\u003d\u0027Name or ID of server to reboot\u0027,"},{"line_number":503,"context_line":"            )"},{"line_number":504,"context_line":"        parser.add_argument("},{"line_number":505,"context_line":"            \u0027--hard\u0027,"},{"line_number":506,"context_line":"            dest\u003d\u0027reboot_type\u0027,"},{"line_number":507,"context_line":"            action\u003d\u0027store_const\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2FnA8%3D","line":504,"updated":"2012-08-27 20:20:22.000000000","message":"There should be an explicit --soft option, too.","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"67726ea5ba5971e95c913079c2d4b298c0bd2ffc","unresolved":false,"context_lines":[{"line_number":501,"context_line":"            metavar\u003d\u0027\u003cserver\u003e\u0027,"},{"line_number":502,"context_line":"            help\u003d\u0027Name or ID of server to reboot\u0027,"},{"line_number":503,"context_line":"            )"},{"line_number":504,"context_line":"        parser.add_argument("},{"line_number":505,"context_line":"            \u0027--hard\u0027,"},{"line_number":506,"context_line":"            dest\u003d\u0027reboot_type\u0027,"},{"line_number":507,"context_line":"            action\u003d\u0027store_const\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALH%2F%2Fg20%3D","line":504,"in_reply_to":"AAAALH%2F%2FnA8%3D","updated":"2012-09-05 21:00:59.000000000","message":"Done","commit_id":"629a0c6c591168bf0cb3c645ccbd49bd68042073"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"4651486324b063ea364ad9e4244954812ccdad55","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                    hints[key] \u003d [hints[key]]"},{"line_number":297,"context_line":"                hints[key] +\u003d [value]"},{"line_number":298,"context_line":"            else:"},{"line_number":299,"context_line":"                hints[key] \u003d value"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        # What does a non-boolean value for config-drive do?"},{"line_number":302,"context_line":"        # --config-drive argument is either a volume id or"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALH%2F%2FewA%3D","line":299,"updated":"2012-09-07 11:28:00.000000000","message":"What happens if you pass a list of hints that only contains one item? Could this parsing always build a dictionary of lists to remove a special case?","commit_id":"90a1c65f3ac90b1077eb3ea2f5fbe8a039ee9290"}]}
