)]}'
{"oslo_config/generator.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"4710871a6492db3c6315fc2e7070ea1c321ae035","unresolved":false,"context_lines":[{"line_number":388,"context_line":"    except AttributeError:"},{"line_number":389,"context_line":"        pass"},{"line_number":390,"context_line":"    opt_group \u003d None"},{"line_number":391,"context_line":"    for i, _ in groups.items():"},{"line_number":392,"context_line":"        if isinstance(i, cfg.OptGroup) and i.name \u003d\u003d group_name:"},{"line_number":393,"context_line":"            opt_group \u003d i"},{"line_number":394,"context_line":"    if opt_group:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a18252c_44ed4624","line":391,"updated":"2016-04-13 20:06:46.000000000","message":"What do you think of, instead of this N^2 iteration, changing the \"groups\" data structure to always be keyed on name, and storing group objects in a separate hash also keyed on names. Then the generator would process the options from the first data structure, and grab the group object from the second if it is present.","commit_id":"14da1089c586d686ca705663f96c86a45b4aa12f"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"629356a208d66c9f1ce0eee30d326df2a80f0975","unresolved":false,"context_lines":[{"line_number":388,"context_line":"    except AttributeError:"},{"line_number":389,"context_line":"        pass"},{"line_number":390,"context_line":"    opt_group \u003d None"},{"line_number":391,"context_line":"    for i, _ in groups.items():"},{"line_number":392,"context_line":"        if isinstance(i, cfg.OptGroup) and i.name \u003d\u003d group_name:"},{"line_number":393,"context_line":"            opt_group \u003d i"},{"line_number":394,"context_line":"    if opt_group:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a18252c_a73b7737","line":391,"in_reply_to":"5a18252c_44ed4624","updated":"2016-04-13 23:10:42.000000000","message":"Yeah, that should be doable.  The logic might be a little less convoluted too. :-)","commit_id":"14da1089c586d686ca705663f96c86a45b4aa12f"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c3dc50972775ad827d0275f3e5ff2c26efd18a0e","unresolved":false,"context_lines":[{"line_number":362,"context_line":"                f.write(\u0027# %s\\n\u0027 % (err,))"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"def _get_group_data(group, groups):"},{"line_number":366,"context_line":"    \"\"\"Lookup or populate group data"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    If a key for group does not already exist in groups, populate it with a"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_3ef20d07","line":365,"range":{"start_line":365,"start_character":4,"end_line":365,"end_character":19},"updated":"2016-05-03 15:45:17.000000000","message":"This seems to be more than a getter as it\u0027s modifying its arguments, please can we find a more accurate name?\n\n(although, see comment on 407)","commit_id":"5511fe50b797f3de030be3d9a186e705277a017a"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c3dc50972775ad827d0275f3e5ff2c26efd18a0e","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        group_name \u003d group.name"},{"line_number":385,"context_line":"        is_optgroup \u003d True"},{"line_number":386,"context_line":"    except AttributeError:"},{"line_number":387,"context_line":"        pass"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    if group_name in groups:"},{"line_number":390,"context_line":"        if is_optgroup:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_de2dd946","line":387,"updated":"2016-05-03 15:45:17.000000000","message":"How about:\n\n  is_optgroup \u003d hasattr(group, \u0027name\u0027)\n  group_name \u003d group.name if is_optgroup else group","commit_id":"5511fe50b797f3de030be3d9a186e705277a017a"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c3dc50972775ad827d0275f3e5ff2c26efd18a0e","unresolved":false,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":"    if group_name in groups:"},{"line_number":390,"context_line":"        if is_optgroup:"},{"line_number":391,"context_line":"            groups[group_name][\u0027object\u0027] \u003d group"},{"line_number":392,"context_line":"        return groups[group_name]"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    default \u003d {\u0027object\u0027: None, \u0027namespaces\u0027: []}"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_9ebec1ac","line":391,"updated":"2016-05-03 15:45:17.000000000","message":"Aren\u0027t all the group objects for a group meant to be identical? So, why not let the first one win and delete these two lines?","commit_id":"5511fe50b797f3de030be3d9a186e705277a017a"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c3dc50972775ad827d0275f3e5ff2c26efd18a0e","unresolved":false,"context_lines":[{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    default \u003d {\u0027object\u0027: None, \u0027namespaces\u0027: []}"},{"line_number":395,"context_line":"    if is_optgroup:"},{"line_number":396,"context_line":"        default \u003d {\u0027object\u0027: group, \u0027namespaces\u0027: []}"},{"line_number":397,"context_line":"    return groups.setdefault(group_name or \u0027DEFAULT\u0027, default)"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_be757d33","line":396,"updated":"2016-05-03 15:45:17.000000000","message":"we could save ourselves some repetition here too:\n\n  default \u003d {\u0027object\u0027: group if is_optgroup else None,\n             \u0027namespaces\u0027: []}","commit_id":"5511fe50b797f3de030be3d9a186e705277a017a"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"c3dc50972775ad827d0275f3e5ff2c26efd18a0e","unresolved":false,"context_lines":[{"line_number":404,"context_line":"            if not opts:"},{"line_number":405,"context_line":"                continue"},{"line_number":406,"context_line":"            group_data \u003d _get_group_data(group, groups)"},{"line_number":407,"context_line":"            group_data[\u0027namespaces\u0027].append((namespace, opts))"},{"line_number":408,"context_line":"    return groups"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_24ccc0ba","line":407,"updated":"2016-05-03 15:45:17.000000000","message":"With apologies, we seem to be using a lot of code to do this. I\u0027m going to put up a followup patch showing an easier way which I\u0027d like squashed into this one if you agree.","commit_id":"5511fe50b797f3de030be3d9a186e705277a017a"}]}
