)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"35e6792418157c5fe44b0bee4901ad7be237cb44","unresolved":false,"context_lines":[{"line_number":10,"context_line":"similar to ListOpt"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    option \u003d key1:value"},{"line_number":13,"context_line":"    option \u003d key2:value"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    (or)"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAOH%2F%2F2Bc%3D","line":13,"updated":"2013-03-25 12:37:54.000000000","message":"This variant doesn\u0027t work anymore?","commit_id":"0cdbad4a19662b823dfbf22730222dc82e6e8cd4"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"9293f4b41283956c5396d8bf3cc29b498eb01bce","unresolved":false,"context_lines":[{"line_number":10,"context_line":"similar to ListOpt"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    option \u003d key1:value"},{"line_number":13,"context_line":"    option \u003d key2:value"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    (or)"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAAOH%2F%2F2A4%3D","line":13,"in_reply_to":"AAAAOH%2F%2F2Bc%3D","updated":"2013-03-25 12:55:10.000000000","message":"right, last one wins","commit_id":"0cdbad4a19662b823dfbf22730222dc82e6e8cd4"}],"oslo/config/cfg.py":[{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"change_message_id":"d9a75fe7f7ee6a5147d8998237ac5dffe7637f7f","unresolved":false,"context_lines":[{"line_number":850,"context_line":"                              values.split(\u0027,\u0027)])"},{"line_number":851,"context_line":"                old \u003d getattr(namespace, self.dest)"},{"line_number":852,"context_line":"                if old:"},{"line_number":853,"context_line":"                    values \u003d dict(values.items() + old.items())"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"            setattr(namespace, self.dest, values)"},{"line_number":856,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F2zM%3D","line":853,"updated":"2013-03-24 05:10:38.000000000","message":"Just a \"values.update(old)\" should do the job, no?","commit_id":"4d5a5be94ca425ab0f333376b150c00483014cd8"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"cee7acba1b4bac60776216648b3bfd4a874ddc7e","unresolved":false,"context_lines":[{"line_number":850,"context_line":"                              values.split(\u0027,\u0027)])"},{"line_number":851,"context_line":"                old \u003d getattr(namespace, self.dest)"},{"line_number":852,"context_line":"                if old:"},{"line_number":853,"context_line":"                    values \u003d dict(values.items() + old.items())"},{"line_number":854,"context_line":""},{"line_number":855,"context_line":"            setattr(namespace, self.dest, values)"},{"line_number":856,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F2u0%3D","line":853,"in_reply_to":"AAAAOH%2F%2F2zM%3D","updated":"2013-03-24 13:59:47.000000000","message":"Thanks, i realized i missed one scenario, this reminded me. please see the latest patch and the new test case.","commit_id":"4d5a5be94ca425ab0f333376b150c00483014cd8"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"8b1e560e59465c7063d10671b4c97031312bbe18","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                   default\u003d9292,"},{"line_number":30,"context_line":"                   help\u003d\u0027Port number to listen on\u0027)"},{"line_number":31,"context_line":"    ]"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Options can be strings, integers, floats, booleans, lists or \u0027multi strings\u0027::"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    enabled_apis_opt \u003d cfg.ListOpt(\u0027enabled_apis\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F2Nk%3D","line":32,"updated":"2013-03-25 08:54:58.000000000","message":"Add new type here","commit_id":"17b9ef1823f95dd98a44cd3d0cf817148d96c7de"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"4b64b93efb1cb7d6f77f9c3680c23124d6b01918","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                   default\u003d9292,"},{"line_number":30,"context_line":"                   help\u003d\u0027Port number to listen on\u0027)"},{"line_number":31,"context_line":"    ]"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Options can be strings, integers, floats, booleans, lists or \u0027multi strings\u0027::"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    enabled_apis_opt \u003d cfg.ListOpt(\u0027enabled_apis\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F2EE%3D","line":32,"in_reply_to":"AAAAOH%2F%2F2Nk%3D","updated":"2013-03-25 11:25:09.000000000","message":"Done","commit_id":"17b9ef1823f95dd98a44cd3d0cf817148d96c7de"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"8b1e560e59465c7063d10671b4c97031312bbe18","unresolved":false,"context_lines":[{"line_number":838,"context_line":"    value is a dictionary of these key/value pairs"},{"line_number":839,"context_line":"    \"\"\""},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"    multi \u003d True"},{"line_number":842,"context_line":""},{"line_number":843,"context_line":"    class _StoreDictAction(argparse.Action):"},{"line_number":844,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F2OA%3D","line":841,"updated":"2013-03-25 08:54:58.000000000","message":"Hmm, not sure why you\u0027ve done this\n\nI\u0027d expect setting a dict opt to override previous values","commit_id":"17b9ef1823f95dd98a44cd3d0cf817148d96c7de"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"4b64b93efb1cb7d6f77f9c3680c23124d6b01918","unresolved":false,"context_lines":[{"line_number":838,"context_line":"    value is a dictionary of these key/value pairs"},{"line_number":839,"context_line":"    \"\"\""},{"line_number":840,"context_line":""},{"line_number":841,"context_line":"    multi \u003d True"},{"line_number":842,"context_line":""},{"line_number":843,"context_line":"    class _StoreDictAction(argparse.Action):"},{"line_number":844,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F2EA%3D","line":841,"in_reply_to":"AAAAOH%2F%2F2OA%3D","updated":"2013-03-25 11:25:09.000000000","message":"we dont\u0027 need this for ListOpt style. nuking","commit_id":"17b9ef1823f95dd98a44cd3d0cf817148d96c7de"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"8b1e560e59465c7063d10671b4c97031312bbe18","unresolved":false,"context_lines":[{"line_number":851,"context_line":"                old \u003d getattr(namespace, self.dest)"},{"line_number":852,"context_line":"                if old:"},{"line_number":853,"context_line":"                    old.update(values)"},{"line_number":854,"context_line":"                    values \u003d old"},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"            setattr(namespace, self.dest, values)"},{"line_number":857,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F2Oo%3D","line":854,"updated":"2013-03-25 08:54:58.000000000","message":"Hmm, what\u0027s the use case for the update here rather than clearing the old dict?","commit_id":"17b9ef1823f95dd98a44cd3d0cf817148d96c7de"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"4b64b93efb1cb7d6f77f9c3680c23124d6b01918","unresolved":false,"context_lines":[{"line_number":851,"context_line":"                old \u003d getattr(namespace, self.dest)"},{"line_number":852,"context_line":"                if old:"},{"line_number":853,"context_line":"                    old.update(values)"},{"line_number":854,"context_line":"                    values \u003d old"},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"            setattr(namespace, self.dest, values)"},{"line_number":857,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F2D8%3D","line":854,"in_reply_to":"AAAAOH%2F%2F2Oo%3D","updated":"2013-03-25 11:25:09.000000000","message":"we dont\u0027 need this for ListOpt style. nuking.","commit_id":"17b9ef1823f95dd98a44cd3d0cf817148d96c7de"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"8b1e560e59465c7063d10671b4c97031312bbe18","unresolved":false,"context_lines":[{"line_number":858,"context_line":"    def _get_from_config_parser(self, cparser, section):"},{"line_number":859,"context_line":"        \"\"\"Retrieve the opt value as a dictionary from ConfigParser.\"\"\""},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"        return [dict([a.strip() for a in v.split(\u0027:\u0027)] for v in x.split(\u0027,\u0027))"},{"line_number":862,"context_line":"                for x in self._cparser_get_with_deprecated(cparser, section)]"},{"line_number":863,"context_line":""},{"line_number":864,"context_line":"    def _get_argparse_kwargs(self, group, **kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F2N0%3D","line":861,"updated":"2013-03-25 08:54:58.000000000","message":"You have this in two places, add a little private static helper method under DictOpt","commit_id":"17b9ef1823f95dd98a44cd3d0cf817148d96c7de"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"4b64b93efb1cb7d6f77f9c3680c23124d6b01918","unresolved":false,"context_lines":[{"line_number":858,"context_line":"    def _get_from_config_parser(self, cparser, section):"},{"line_number":859,"context_line":"        \"\"\"Retrieve the opt value as a dictionary from ConfigParser.\"\"\""},{"line_number":860,"context_line":""},{"line_number":861,"context_line":"        return [dict([a.strip() for a in v.split(\u0027:\u0027)] for v in x.split(\u0027,\u0027))"},{"line_number":862,"context_line":"                for x in self._cparser_get_with_deprecated(cparser, section)]"},{"line_number":863,"context_line":""},{"line_number":864,"context_line":"    def _get_argparse_kwargs(self, group, **kwargs):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F2D4%3D","line":861,"in_reply_to":"AAAAOH%2F%2F2N0%3D","updated":"2013-03-25 11:25:09.000000000","message":"will refactor once i get the concept and tests right","commit_id":"17b9ef1823f95dd98a44cd3d0cf817148d96c7de"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"8b1e560e59465c7063d10671b4c97031312bbe18","unresolved":false,"context_lines":[{"line_number":1603,"context_line":"            if opt.positional and not value:"},{"line_number":1604,"context_line":"                value \u003d opt.default"},{"line_number":1605,"context_line":""},{"line_number":1606,"context_line":"            if isinstance(opt, DictOpt):"},{"line_number":1607,"context_line":"                values.insert(0, value)"},{"line_number":1608,"context_line":"                return dict(kv for d in values for kv in d.iteritems())"},{"line_number":1609,"context_line":"            return value + values"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F2Nw%3D","line":1606,"updated":"2013-03-25 08:54:58.000000000","message":"Notice we don\u0027t special case other opts in this method ... I\u0027d prefer to avoid doing that","commit_id":"17b9ef1823f95dd98a44cd3d0cf817148d96c7de"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"4b64b93efb1cb7d6f77f9c3680c23124d6b01918","unresolved":false,"context_lines":[{"line_number":1603,"context_line":"            if opt.positional and not value:"},{"line_number":1604,"context_line":"                value \u003d opt.default"},{"line_number":1605,"context_line":""},{"line_number":1606,"context_line":"            if isinstance(opt, DictOpt):"},{"line_number":1607,"context_line":"                values.insert(0, value)"},{"line_number":1608,"context_line":"                return dict(kv for d in values for kv in d.iteritems())"},{"line_number":1609,"context_line":"            return value + values"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F2D0%3D","line":1606,"in_reply_to":"AAAAOH%2F%2F2Nw%3D","updated":"2013-03-25 11:25:09.000000000","message":"right. this was for the multi option, trying to build one dict from all the others","commit_id":"17b9ef1823f95dd98a44cd3d0cf817148d96c7de"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"8b1e560e59465c7063d10671b4c97031312bbe18","unresolved":false,"context_lines":[{"line_number":1610,"context_line":""},{"line_number":1611,"context_line":"        if values:"},{"line_number":1612,"context_line":"            if isinstance(opt, DictOpt):"},{"line_number":1613,"context_line":"                return dict(kv for d in values for kv in d.iteritems())"},{"line_number":1614,"context_line":"            return values"},{"line_number":1615,"context_line":""},{"line_number":1616,"context_line":"        if \u0027default\u0027 in info:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F2No%3D","line":1613,"updated":"2013-03-25 08:54:58.000000000","message":"It\u0027s really not obvious to me what you\u0027re doing here. Care to explain?","commit_id":"17b9ef1823f95dd98a44cd3d0cf817148d96c7de"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"4b64b93efb1cb7d6f77f9c3680c23124d6b01918","unresolved":false,"context_lines":[{"line_number":1610,"context_line":""},{"line_number":1611,"context_line":"        if values:"},{"line_number":1612,"context_line":"            if isinstance(opt, DictOpt):"},{"line_number":1613,"context_line":"                return dict(kv for d in values for kv in d.iteritems())"},{"line_number":1614,"context_line":"            return values"},{"line_number":1615,"context_line":""},{"line_number":1616,"context_line":"        if \u0027default\u0027 in info:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F2Dw%3D","line":1613,"in_reply_to":"AAAAOH%2F%2F2No%3D","updated":"2013-03-25 11:25:09.000000000","message":"right. this was for the multi option, trying to build one dict from all the others","commit_id":"17b9ef1823f95dd98a44cd3d0cf817148d96c7de"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"35e6792418157c5fe44b0bee4901ad7be237cb44","unresolved":false,"context_lines":[{"line_number":846,"context_line":"        def __call__(self, parser, namespace, values, option_string\u003dNone):"},{"line_number":847,"context_line":"            if values is not None:"},{"line_number":848,"context_line":"                values \u003d dict([[a.strip() for a in v.split(\u0027:\u0027)] for v in"},{"line_number":849,"context_line":"                              values.split(\u0027,\u0027)])"},{"line_number":850,"context_line":""},{"line_number":851,"context_line":"            setattr(namespace, self.dest, values)"},{"line_number":852,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F2Bo%3D","line":849,"updated":"2013-03-25 12:37:54.000000000","message":"still would like to see this bit refactored out into a private static helper","commit_id":"0cdbad4a19662b823dfbf22730222dc82e6e8cd4"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"35e6792418157c5fe44b0bee4901ad7be237cb44","unresolved":false,"context_lines":[{"line_number":1600,"context_line":""},{"line_number":1601,"context_line":"        if values:"},{"line_number":1602,"context_line":"            if isinstance(opt, DictOpt):"},{"line_number":1603,"context_line":"                return dict(kv for d in values for kv in d.iteritems())"},{"line_number":1604,"context_line":"            return values"},{"line_number":1605,"context_line":""},{"line_number":1606,"context_line":"        if \u0027default\u0027 in info:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F2Bk%3D","line":1603,"updated":"2013-03-25 12:37:54.000000000","message":"You said this stuff was just for multi ?","commit_id":"0cdbad4a19662b823dfbf22730222dc82e6e8cd4"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"9293f4b41283956c5396d8bf3cc29b498eb01bce","unresolved":false,"context_lines":[{"line_number":1600,"context_line":""},{"line_number":1601,"context_line":"        if values:"},{"line_number":1602,"context_line":"            if isinstance(opt, DictOpt):"},{"line_number":1603,"context_line":"                return dict(kv for d in values for kv in d.iteritems())"},{"line_number":1604,"context_line":"            return values"},{"line_number":1605,"context_line":""},{"line_number":1606,"context_line":"        if \u0027default\u0027 in info:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAOH%2F%2F2BA%3D","line":1603,"in_reply_to":"AAAAOH%2F%2F2Bk%3D","updated":"2013-03-25 12:55:10.000000000","message":"oops. missed","commit_id":"0cdbad4a19662b823dfbf22730222dc82e6e8cd4"}],"tests/test_cfg.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"8b1e560e59465c7063d10671b4c97031312bbe18","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        self._do_pos_test(ListOpt, [\u0027bar\u0027], [], [\u0027bar\u0027])"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    def test_positional_dict_arg(self):"},{"line_number":468,"context_line":"        self._do_pos_test(ListOpt, None,"},{"line_number":469,"context_line":"                          [\u0027blaa,bar\u0027], [\u0027blaa\u0027, \u0027bar\u0027])"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    def test_positional_multistr_default(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F2NM%3D","line":468,"updated":"2013-03-25 08:54:58.000000000","message":"Did you mean to make these DictOpt?","commit_id":"17b9ef1823f95dd98a44cd3d0cf817148d96c7de"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"4b64b93efb1cb7d6f77f9c3680c23124d6b01918","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        self._do_pos_test(ListOpt, [\u0027bar\u0027], [], [\u0027bar\u0027])"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    def test_positional_dict_arg(self):"},{"line_number":468,"context_line":"        self._do_pos_test(ListOpt, None,"},{"line_number":469,"context_line":"                          [\u0027blaa,bar\u0027], [\u0027blaa\u0027, \u0027bar\u0027])"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    def test_positional_multistr_default(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F2EI%3D","line":468,"in_reply_to":"AAAAOH%2F%2F2NM%3D","updated":"2013-03-25 11:25:09.000000000","message":"Done","commit_id":"17b9ef1823f95dd98a44cd3d0cf817148d96c7de"}]}
