)]}'
{"openstackclient/common/quota.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"647bcc395f43917c53083b45ab9273700f32d09f","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            dest\u003d\u0027xclass\u0027,"},{"line_number":68,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":69,"context_line":"            default\u003dFalse,"},{"line_number":70,"context_line":"            help\u003d\u0027Show quotas for \u003cclass\u003e\u0027,"},{"line_number":71,"context_line":"        )"},{"line_number":72,"context_line":"        args \u003d dict(list(COMPUTE_QUOTAS.items()) + list(VOLUME_QUOTAS.items()))"},{"line_number":73,"context_line":"        for k, v in args.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2Fvaw%3D","line":70,"updated":"2013-07-12 04:24:39.000000000","message":"I think you mean Set?","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"86273c2c9c9de9251af2c9c59c6bbf67f222658f","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            dest\u003d\u0027xclass\u0027,"},{"line_number":68,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":69,"context_line":"            default\u003dFalse,"},{"line_number":70,"context_line":"            help\u003d\u0027Show quotas for \u003cclass\u003e\u0027,"},{"line_number":71,"context_line":"        )"},{"line_number":72,"context_line":"        args \u003d dict(list(COMPUTE_QUOTAS.items()) + list(VOLUME_QUOTAS.items()))"},{"line_number":73,"context_line":"        for k, v in args.items():"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F%2Fwo%3D","line":70,"in_reply_to":"AAAAP3%2F%2Fvaw%3D","updated":"2013-07-17 20:13:20.000000000","message":"Done","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"647bcc395f43917c53083b45ab9273700f32d09f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            default\u003dFalse,"},{"line_number":70,"context_line":"            help\u003d\u0027Show quotas for \u003cclass\u003e\u0027,"},{"line_number":71,"context_line":"        )"},{"line_number":72,"context_line":"        args \u003d dict(list(COMPUTE_QUOTAS.items()) + list(VOLUME_QUOTAS.items()))"},{"line_number":73,"context_line":"        for k, v in args.items():"},{"line_number":74,"context_line":"            parser.add_argument("},{"line_number":75,"context_line":"                \u0027--%s\u0027 % v,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2Fva8%3D","line":72,"updated":"2013-07-12 04:24:39.000000000","message":"+10, i can think of a few files in the nova section where this would come in handy...","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"73d639f808bc4fd2aad038b8997f5c0232c5f6ce","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            default\u003dFalse,"},{"line_number":70,"context_line":"            help\u003d\u0027Show quotas for \u003cclass\u003e\u0027,"},{"line_number":71,"context_line":"        )"},{"line_number":72,"context_line":"        args \u003d dict(list(COMPUTE_QUOTAS.items()) + list(VOLUME_QUOTAS.items()))"},{"line_number":73,"context_line":"        for k, v in args.items():"},{"line_number":74,"context_line":"            parser.add_argument("},{"line_number":75,"context_line":"                \u0027--%s\u0027 % v,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FnYU%3D","line":72,"updated":"2013-07-15 20:15:30.000000000","message":"Avoid building the lists and dictionary you won\u0027t use:\n\n  for k, v in itertools.chain(COMPUTE_QUOTAS.items(), VOLUME_QUOTAS.items()):\n    parser.add_argument(...)","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"86273c2c9c9de9251af2c9c59c6bbf67f222658f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            default\u003dFalse,"},{"line_number":70,"context_line":"            help\u003d\u0027Show quotas for \u003cclass\u003e\u0027,"},{"line_number":71,"context_line":"        )"},{"line_number":72,"context_line":"        args \u003d dict(list(COMPUTE_QUOTAS.items()) + list(VOLUME_QUOTAS.items()))"},{"line_number":73,"context_line":"        for k, v in args.items():"},{"line_number":74,"context_line":"            parser.add_argument("},{"line_number":75,"context_line":"                \u0027--%s\u0027 % v,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F%2F2A%3D","line":72,"in_reply_to":"AAAAP3%2F%2FnYU%3D","updated":"2013-07-17 20:13:20.000000000","message":"Done","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"73d639f808bc4fd2aad038b8997f5c0232c5f6ce","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        volume_kwargs \u003d {}"},{"line_number":94,"context_line":"        for k, v in VOLUME_QUOTAS.items():"},{"line_number":95,"context_line":"            if getattr(parsed_args, v, None):"},{"line_number":96,"context_line":"                volume_kwargs[k] \u003d getattr(parsed_args, v, None)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        if compute_kwargs \u003d\u003d {} and volume_kwargs \u003d\u003d {}:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FnZs%3D","line":95,"updated":"2013-07-15 20:15:30.000000000","message":"This check will fail if the value is 0. Is 0 a valid quota value?","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"86273c2c9c9de9251af2c9c59c6bbf67f222658f","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        volume_kwargs \u003d {}"},{"line_number":94,"context_line":"        for k, v in VOLUME_QUOTAS.items():"},{"line_number":95,"context_line":"            if getattr(parsed_args, v, None):"},{"line_number":96,"context_line":"                volume_kwargs[k] \u003d getattr(parsed_args, v, None)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        if compute_kwargs \u003d\u003d {} and volume_kwargs \u003d\u003d {}:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F%2F2E%3D","line":95,"in_reply_to":"AAAAP3%2F%2FnZs%3D","updated":"2013-07-17 20:13:20.000000000","message":"0 does appear to be valid per the range checks in nova.quotas.DbQuotaDriver.limit_check().\n\nDone","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"647bcc395f43917c53083b45ab9273700f32d09f","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":146,"context_line":"            default\u003dFalse,"},{"line_number":147,"context_line":"            help\u003d\u0027Show default quotas for \u003cproject\u003e \u0027"},{"line_number":148,"context_line":"                 \u0027[not allowed with --class]\u0027,"},{"line_number":149,"context_line":"        )"},{"line_number":150,"context_line":"        return parser"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FvbE%3D","line":148,"updated":"2013-07-12 04:24:39.000000000","message":"Maybe it\u0027s late, but just to make sure... you\u0027re not using a mutually exclusive group because of the case where neither are present?","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"86273c2c9c9de9251af2c9c59c6bbf67f222658f","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":146,"context_line":"            default\u003dFalse,"},{"line_number":147,"context_line":"            help\u003d\u0027Show default quotas for \u003cproject\u003e \u0027"},{"line_number":148,"context_line":"                 \u0027[not allowed with --class]\u0027,"},{"line_number":149,"context_line":"        )"},{"line_number":150,"context_line":"        return parser"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F%2F1o%3D","line":148,"in_reply_to":"AAAAP3%2F%2FnZE%3D","updated":"2013-07-17 20:13:20.000000000","message":"I didn\u0027t use a group because of the way it would appear in the help output. They are not related, --default is meaningless if --class is used.\n\nAnd the longer I defend that choice the more I see it doesn\u0027t matter...mutex group used.","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"73d639f808bc4fd2aad038b8997f5c0232c5f6ce","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":146,"context_line":"            default\u003dFalse,"},{"line_number":147,"context_line":"            help\u003d\u0027Show default quotas for \u003cproject\u003e \u0027"},{"line_number":148,"context_line":"                 \u0027[not allowed with --class]\u0027,"},{"line_number":149,"context_line":"        )"},{"line_number":150,"context_line":"        return parser"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FnZE%3D","line":148,"in_reply_to":"AAAAP3%2F%2FvbE%3D","updated":"2013-07-15 20:15:30.000000000","message":"Using a mutually exclusive group doesn\u0027t mean that at least one has to be present.","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"647bcc395f43917c53083b45ab9273700f32d09f","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        )"},{"line_number":150,"context_line":"        return parser"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def take_action(self, parsed_args):"},{"line_number":153,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027 % parsed_args)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if parsed_args.xclass and parsed_args.default:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FvaU%3D","line":152,"updated":"2013-07-12 04:24:39.000000000","message":"Not sure where to put this, but this is working for me: \nfyi - i do not have a project named malarky :)\nSeems like it\u0027s defaulting to something, update the help text, or check if the project exists before getting the quotas?\n\n$ openstack quota show malarky\n+--------------------+---------+\n| Field              | Value   |\n+--------------------+---------+\n| cores              | 20      |\n..... rest of the output...\n| volumes            | 30      |\n+--------------------+---------+","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"86273c2c9c9de9251af2c9c59c6bbf67f222658f","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        )"},{"line_number":150,"context_line":"        return parser"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def take_action(self, parsed_args):"},{"line_number":153,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027 % parsed_args)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if parsed_args.xclass and parsed_args.default:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F%2F00%3D","line":152,"in_reply_to":"AAAAP3%2F%2FvaU%3D","updated":"2013-07-17 20:13:20.000000000","message":"This is what the API returns.  Arguably a bug there.  We could validate the project with Identity ourselves.  I\u0027m not handling this until we decide that the API is not going to be fixed.","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"73d639f808bc4fd2aad038b8997f5c0232c5f6ce","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    def take_action(self, parsed_args):"},{"line_number":153,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027 % parsed_args)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if parsed_args.xclass and parsed_args.default:"},{"line_number":156,"context_line":"            raise exceptions.CommandError("},{"line_number":157,"context_line":"                \"Combination of --class and --default not allowed\")"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FnY4%3D","line":155,"updated":"2013-07-15 20:15:30.000000000","message":"Using a mutually exclusive group means you can drop this stanza.","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"86273c2c9c9de9251af2c9c59c6bbf67f222658f","unresolved":false,"context_lines":[{"line_number":152,"context_line":"    def take_action(self, parsed_args):"},{"line_number":153,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027 % parsed_args)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if parsed_args.xclass and parsed_args.default:"},{"line_number":156,"context_line":"            raise exceptions.CommandError("},{"line_number":157,"context_line":"                \"Combination of --class and --default not allowed\")"},{"line_number":158,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F%2Fuc%3D","line":155,"in_reply_to":"AAAAP3%2F%2FnY4%3D","updated":"2013-07-17 20:13:20.000000000","message":"Done","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"73d639f808bc4fd2aad038b8997f5c0232c5f6ce","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                parsed_args.project)"},{"line_number":165,"context_line":"            volume_quota \u003d volume_client.quota_classes.get("},{"line_number":166,"context_line":"                parsed_args.project)"},{"line_number":167,"context_line":"        else:"},{"line_number":168,"context_line":"            if parsed_args.default:"},{"line_number":169,"context_line":"                compute_quota \u003d compute_client.quotas.defaults("},{"line_number":170,"context_line":"                    parsed_args.project)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FnYw%3D","line":167,"updated":"2013-07-15 20:15:30.000000000","message":"elif parsed_args.default:","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"86273c2c9c9de9251af2c9c59c6bbf67f222658f","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                parsed_args.project)"},{"line_number":165,"context_line":"            volume_quota \u003d volume_client.quota_classes.get("},{"line_number":166,"context_line":"                parsed_args.project)"},{"line_number":167,"context_line":"        else:"},{"line_number":168,"context_line":"            if parsed_args.default:"},{"line_number":169,"context_line":"                compute_quota \u003d compute_client.quotas.defaults("},{"line_number":170,"context_line":"                    parsed_args.project)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F%2FuY%3D","line":167,"in_reply_to":"AAAAP3%2F%2FnYw%3D","updated":"2013-07-17 20:13:20.000000000","message":"Done","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"73d639f808bc4fd2aad038b8997f5c0232c5f6ce","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        info.update(volume_quota._info)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # Map the internal quota names to the external ones"},{"line_number":182,"context_line":"        args \u003d dict(list(COMPUTE_QUOTAS.items()) + list(VOLUME_QUOTAS.items()))"},{"line_number":183,"context_line":"        for k, v in args.items():"},{"line_number":184,"context_line":"            if not k \u003d\u003d v and info[k]:"},{"line_number":185,"context_line":"                info[v] \u003d info[k]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FnYM%3D","line":182,"updated":"2013-07-15 20:15:30.000000000","message":"See itertools.chain() suggestion above.","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"86273c2c9c9de9251af2c9c59c6bbf67f222658f","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        info.update(volume_quota._info)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # Map the internal quota names to the external ones"},{"line_number":182,"context_line":"        args \u003d dict(list(COMPUTE_QUOTAS.items()) + list(VOLUME_QUOTAS.items()))"},{"line_number":183,"context_line":"        for k, v in args.items():"},{"line_number":184,"context_line":"            if not k \u003d\u003d v and info[k]:"},{"line_number":185,"context_line":"                info[v] \u003d info[k]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAQn%2F%2F%2FuU%3D","line":182,"in_reply_to":"AAAAP3%2F%2FnYM%3D","updated":"2013-07-17 20:13:20.000000000","message":"Done","commit_id":"bdf1a18cbe099ad2276349af5a4ad1324a30a05c"}]}
