)]}'
{"oslo_config/cfg.py":[{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"368765c71d7ff3f1483bde129f9b28e603c65bee","unresolved":false,"context_lines":[{"line_number":710,"context_line":"        :param group_name: a group name"},{"line_number":711,"context_line":"        \"\"\""},{"line_number":712,"context_line":"        names \u003d [(group_name, self.dest)]"},{"line_number":713,"context_line":"        deprecated_names \u003d []"},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"        for opt in self.deprecated_opts:"},{"line_number":716,"context_line":"            dname, dgroup \u003d opt.name, opt.group"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_42dc5fe1","line":713,"updated":"2015-01-16 23:21:15.000000000","message":"As I\u0027m looking at this, I think we can do away with this variable entirely.  We know that any name in names after the first is deprecated.  That will simplify the change considerably.","commit_id":"910c24c619b2538dfd5bfe0d6679c985547dc569"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f746cae7a3af3c46be7b343fb1908e3ca51c7084","unresolved":false,"context_lines":[{"line_number":1284,"context_line":"            deprecated_names.append(none_default)"},{"line_number":1285,"context_line":"    if name not in _emitted_deprecations and name in deprecated_names:"},{"line_number":1286,"context_line":"        _emitted_deprecations.add(name)"},{"line_number":1287,"context_line":"        LOG.warning(\u0027Found deprecated opt \"%s\" from group \"%s\" \u0027"},{"line_number":1288,"context_line":"                    \u0027in current config.\u0027, name[1], name[0])"},{"line_number":1289,"context_line":""},{"line_number":1290,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_95ef5f1c","line":1287,"updated":"2015-01-16 23:39:09.000000000","message":"use python\u0027s built-in warnings module.","commit_id":"910c24c619b2538dfd5bfe0d6679c985547dc569"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"f1efdee16457da62eb835779604436afbf743663","unresolved":false,"context_lines":[{"line_number":1284,"context_line":"            deprecated_names.append(none_default)"},{"line_number":1285,"context_line":"    if name not in _emitted_deprecations and name in deprecated_names:"},{"line_number":1286,"context_line":"        _emitted_deprecations.add(name)"},{"line_number":1287,"context_line":"        LOG.warning(\u0027Found deprecated opt \"%s\" from group \"%s\" \u0027"},{"line_number":1288,"context_line":"                    \u0027in current config.\u0027, name[1], name[0])"},{"line_number":1289,"context_line":""},{"line_number":1290,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_38ccbebe","line":1287,"in_reply_to":"3a961159_95ef5f1c","updated":"2015-01-19 17:14:01.000000000","message":"Okay, I\u0027ve looked at doing that, but I\u0027m seeing some problems.\n\nThe main issue I have is that I want these warnings to go to the service logs so they can be found easily along with all other deprecation warnings (these are user-facing deprecations that require user action to resolve), but with the warnings module it appears I have to use logging.captureWarnings to accomplish that.  Since I don\u0027t see any documented way to query whether that\u0027s enabled, we would have to just unconditionally enable it here, which doesn\u0027t seem like acceptable behavior for a library since the application calling us may not want that.\n\nIt also appears as though I can\u0027t use \"once\" from the warnings module to eliminate the _emitted_deprecations set because all the deprecations come from the same place so only one could ever be logged, no matter how many deprecated opts are found.\n\nAlso, logging.captureWarnings is only available in Python 2.7 and up, and oslo libs have to maintain py26 compatibility for the immediate future because they\u0027re used in clients and older server code that still supports 2.6.  This means I actually have to add a code path that uses LOG.warning anyway, so given all the issues with the warnings module I\u0027m inclined to just go with that everywhere.","commit_id":"910c24c619b2538dfd5bfe0d6679c985547dc569"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"84e5d8495bc6543926e8bcddca3f4e6412839f26","unresolved":false,"context_lines":[{"line_number":1263,"context_line":"        self._argparse_group \u003d None"},{"line_number":1264,"context_line":""},{"line_number":1265,"context_line":""},{"line_number":1266,"context_line":"_emitted_deprecations \u003d set()"},{"line_number":1267,"context_line":"_deprecated_opt_message \u003d (\u0027Found deprecated opt \"%s\" from group \"%s\" \u0027"},{"line_number":1268,"context_line":"                           \u0027in current config.\u0027)"},{"line_number":1269,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa81d914_3943626d","line":1266,"updated":"2015-01-30 17:51:30.000000000","message":"The fact that you have to clear this in the tests to ensure consistent behavior tells me we should probably store this in the ConfigOpts or namespace, rather than globally.","commit_id":"974e7205722f4514001c25664b938e535b78dc72"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"8e0b0a1f25ea5ee15d914c58da3ae392bd9ab6bb","unresolved":false,"context_lines":[{"line_number":1263,"context_line":"        self._argparse_group \u003d None"},{"line_number":1264,"context_line":""},{"line_number":1265,"context_line":""},{"line_number":1266,"context_line":"_emitted_deprecations \u003d set()"},{"line_number":1267,"context_line":"_deprecated_opt_message \u003d (\u0027Found deprecated opt \"%s\" from group \"%s\" \u0027"},{"line_number":1268,"context_line":"                           \u0027in current config.\u0027)"},{"line_number":1269,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa81d914_34b3670b","line":1266,"in_reply_to":"fa81d914_3943626d","updated":"2015-01-30 18:11:00.000000000","message":"Ah, good point.  I think the fact that this is all global is a holdover from when I thought I was going to be calling it from more places.  I actually think this can all go in the Parser class where it\u0027s called from now though.","commit_id":"974e7205722f4514001c25664b938e535b78dc72"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"07b6ecae196bd56b1ccbf0be96e5ff5bf3a03ba9","unresolved":false,"context_lines":[{"line_number":1263,"context_line":"        self._argparse_group \u003d None"},{"line_number":1264,"context_line":""},{"line_number":1265,"context_line":""},{"line_number":1266,"context_line":"_emitted_deprecations \u003d set()"},{"line_number":1267,"context_line":"_deprecated_opt_message \u003d (\u0027Found deprecated opt \"%s\" from group \"%s\" \u0027"},{"line_number":1268,"context_line":"                           \u0027in current config.\u0027)"},{"line_number":1269,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_c179cbfd","line":1266,"in_reply_to":"fa81d914_3943626d","updated":"2015-02-02 17:31:17.000000000","message":"Done","commit_id":"974e7205722f4514001c25664b938e535b78dc72"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"84e5d8495bc6543926e8bcddca3f4e6412839f26","unresolved":false,"context_lines":[{"line_number":1264,"context_line":""},{"line_number":1265,"context_line":""},{"line_number":1266,"context_line":"_emitted_deprecations \u003d set()"},{"line_number":1267,"context_line":"_deprecated_opt_message \u003d (\u0027Found deprecated opt \"%s\" from group \"%s\" \u0027"},{"line_number":1268,"context_line":"                           \u0027in current config.\u0027)"},{"line_number":1269,"context_line":""},{"line_number":1270,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa81d914_796f9a2b","line":1267,"updated":"2015-01-30 17:51:30.000000000","message":"We should probably make this translatable. I don\u0027t know if we\u0027re doing that with other strings in this lib yet, so we can wait and do it in another patch.\n\nWe should spell out \"option\" though. Do we know enough at the point where we log this message to tell the user what the new name and group are?","commit_id":"974e7205722f4514001c25664b938e535b78dc72"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"07b6ecae196bd56b1ccbf0be96e5ff5bf3a03ba9","unresolved":false,"context_lines":[{"line_number":1264,"context_line":""},{"line_number":1265,"context_line":""},{"line_number":1266,"context_line":"_emitted_deprecations \u003d set()"},{"line_number":1267,"context_line":"_deprecated_opt_message \u003d (\u0027Found deprecated opt \"%s\" from group \"%s\" \u0027"},{"line_number":1268,"context_line":"                           \u0027in current config.\u0027)"},{"line_number":1269,"context_line":""},{"line_number":1270,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_0184c3d2","line":1267,"in_reply_to":"fa81d914_796f9a2b","updated":"2015-02-02 17:31:17.000000000","message":"Done","commit_id":"974e7205722f4514001c25664b938e535b78dc72"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"8e0b0a1f25ea5ee15d914c58da3ae392bd9ab6bb","unresolved":false,"context_lines":[{"line_number":1264,"context_line":""},{"line_number":1265,"context_line":""},{"line_number":1266,"context_line":"_emitted_deprecations \u003d set()"},{"line_number":1267,"context_line":"_deprecated_opt_message \u003d (\u0027Found deprecated opt \"%s\" from group \"%s\" \u0027"},{"line_number":1268,"context_line":"                           \u0027in current config.\u0027)"},{"line_number":1269,"context_line":""},{"line_number":1270,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa81d914_b474b736","line":1267,"in_reply_to":"fa81d914_796f9a2b","updated":"2015-01-30 18:11:00.000000000","message":"We don\u0027t depend on oslo.i18n yet in the project, so I\u0027m thinking we haven\u0027t implemented that yet.  So +1 to another patch.\n\nGood suggestion on the changes to the message.  We do know the undeprecated name at the point where this is logged.","commit_id":"974e7205722f4514001c25664b938e535b78dc72"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e51fea82b65efb282c0d26fabb4c00f65af7b9bd","unresolved":false,"context_lines":[{"line_number":1348,"context_line":""},{"line_number":1349,"context_line":"class MultiConfigParser(object):"},{"line_number":1350,"context_line":"    _deprecated_opt_message \u003d (\u0027Option \"%s\" from group \"%s\" is deprecated by \u0027"},{"line_number":1351,"context_line":"                               \u0027option \"%s\" from group \"%s\"\u0027)"},{"line_number":1352,"context_line":""},{"line_number":1353,"context_line":"    def __init__(self):"},{"line_number":1354,"context_line":"        self.parsed \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_26ec7dc7","line":1351,"updated":"2015-02-09 16:52:38.000000000","message":"suggest change this to \n\n Option \"%s\" from group \"%s\" is deprecated. Use option \"%s\" from group \"%s\".\n\nI think this is easier to figure out what I\u0027m supposed to do about it.","commit_id":"84b998d367044a4a3ce673568e88dd42e502a3da"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"9aeebc40b330ab9c09c6fc2386825b8100c2c1cb","unresolved":false,"context_lines":[{"line_number":1348,"context_line":""},{"line_number":1349,"context_line":"class MultiConfigParser(object):"},{"line_number":1350,"context_line":"    _deprecated_opt_message \u003d (\u0027Option \"%s\" from group \"%s\" is deprecated by \u0027"},{"line_number":1351,"context_line":"                               \u0027option \"%s\" from group \"%s\"\u0027)"},{"line_number":1352,"context_line":""},{"line_number":1353,"context_line":"    def __init__(self):"},{"line_number":1354,"context_line":"        self.parsed \u003d []"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_bd4da09b","line":1351,"in_reply_to":"da86d52c_26ec7dc7","updated":"2015-02-10 18:59:24.000000000","message":"Done","commit_id":"84b998d367044a4a3ce673568e88dd42e502a3da"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e51fea82b65efb282c0d26fabb4c00f65af7b9bd","unresolved":false,"context_lines":[{"line_number":1428,"context_line":"        If name matches any entry in names after the first, a deprecation"},{"line_number":1429,"context_line":"        warning will be logged."},{"line_number":1430,"context_line":"        \"\"\""},{"line_number":1431,"context_line":"        # Any names after the first are deprecated."},{"line_number":1432,"context_line":"        deprecated_names \u003d names[1:]"},{"line_number":1433,"context_line":"        current_group \u003d names[0][0]"},{"line_number":1434,"context_line":"        current_name \u003d names[0][1]"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_c1254baf","line":1431,"updated":"2015-02-09 16:52:38.000000000","message":"the caller could handle the splitting and then this comment wouldn\u0027t be needed... e.g., call with\n\n self._check_deprecated((section, name), names[0], deprecated_names\u003dnames[1:])","commit_id":"84b998d367044a4a3ce673568e88dd42e502a3da"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"9aeebc40b330ab9c09c6fc2386825b8100c2c1cb","unresolved":false,"context_lines":[{"line_number":1428,"context_line":"        If name matches any entry in names after the first, a deprecation"},{"line_number":1429,"context_line":"        warning will be logged."},{"line_number":1430,"context_line":"        \"\"\""},{"line_number":1431,"context_line":"        # Any names after the first are deprecated."},{"line_number":1432,"context_line":"        deprecated_names \u003d names[1:]"},{"line_number":1433,"context_line":"        current_group \u003d names[0][0]"},{"line_number":1434,"context_line":"        current_name \u003d names[0][1]"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_b87cceec","line":1431,"in_reply_to":"da86d52c_c1254baf","updated":"2015-02-10 18:59:24.000000000","message":"Done","commit_id":"84b998d367044a4a3ce673568e88dd42e502a3da"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e51fea82b65efb282c0d26fabb4c00f65af7b9bd","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"        for g, n in deprecated_names:"},{"line_number":1437,"context_line":"            default \u003d (\u0027DEFAULT\u0027, n)"},{"line_number":1438,"context_line":"            none_default \u003d (None, n)"},{"line_number":1439,"context_line":"            if g is None and default not in deprecated_names:"},{"line_number":1440,"context_line":"                deprecated_names.append(default)"},{"line_number":1441,"context_line":"            elif g \u003d\u003d \u0027DEFAULT\u0027 and none_default not in deprecated_names:"},{"line_number":1442,"context_line":"                deprecated_names.append(none_default)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_26ed5d8c","line":1439,"updated":"2015-02-09 16:52:38.000000000","message":"suggest us \"if not g\"","commit_id":"84b998d367044a4a3ce673568e88dd42e502a3da"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"9aeebc40b330ab9c09c6fc2386825b8100c2c1cb","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"        for g, n in deprecated_names:"},{"line_number":1437,"context_line":"            default \u003d (\u0027DEFAULT\u0027, n)"},{"line_number":1438,"context_line":"            none_default \u003d (None, n)"},{"line_number":1439,"context_line":"            if g is None and default not in deprecated_names:"},{"line_number":1440,"context_line":"                deprecated_names.append(default)"},{"line_number":1441,"context_line":"            elif g \u003d\u003d \u0027DEFAULT\u0027 and none_default not in deprecated_names:"},{"line_number":1442,"context_line":"                deprecated_names.append(none_default)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_dde8947e","line":1439,"in_reply_to":"da86d52c_26ed5d8c","updated":"2015-02-10 18:59:24.000000000","message":"This was actually intentional.  Only None and \u0027DEFAULT\u0027 are considered equivalent by the rest of the group handling code.  For example:\n\nhttps://github.com/openstack/oslo.config/blob/master/oslo_config/cfg.py#L833\nand\nhttps://github.com/openstack/oslo.config/blob/master/oslo_config/cfg.py#L1561\n\nIt\u0027s possible we should treat a group of \u0027\u0027 as DEFAULT too (although I\u0027m not sure an empty group name is allowed), but I think that would need to be a broader change.","commit_id":"84b998d367044a4a3ce673568e88dd42e502a3da"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e51fea82b65efb282c0d26fabb4c00f65af7b9bd","unresolved":false,"context_lines":[{"line_number":1437,"context_line":"            default \u003d (\u0027DEFAULT\u0027, n)"},{"line_number":1438,"context_line":"            none_default \u003d (None, n)"},{"line_number":1439,"context_line":"            if g is None and default not in deprecated_names:"},{"line_number":1440,"context_line":"                deprecated_names.append(default)"},{"line_number":1441,"context_line":"            elif g \u003d\u003d \u0027DEFAULT\u0027 and none_default not in deprecated_names:"},{"line_number":1442,"context_line":"                deprecated_names.append(none_default)"},{"line_number":1443,"context_line":"        if name in deprecated_names and name not in self._emitted_deprecations:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_46da51ea","line":1440,"updated":"2015-02-09 16:52:38.000000000","message":"it\u0027s confusing to modify the list that\u0027s being iterated over.","commit_id":"84b998d367044a4a3ce673568e88dd42e502a3da"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"9aeebc40b330ab9c09c6fc2386825b8100c2c1cb","unresolved":false,"context_lines":[{"line_number":1437,"context_line":"            default \u003d (\u0027DEFAULT\u0027, n)"},{"line_number":1438,"context_line":"            none_default \u003d (None, n)"},{"line_number":1439,"context_line":"            if g is None and default not in deprecated_names:"},{"line_number":1440,"context_line":"                deprecated_names.append(default)"},{"line_number":1441,"context_line":"            elif g \u003d\u003d \u0027DEFAULT\u0027 and none_default not in deprecated_names:"},{"line_number":1442,"context_line":"                deprecated_names.append(none_default)"},{"line_number":1443,"context_line":"        if name in deprecated_names and name not in self._emitted_deprecations:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_ddb6d489","line":1440,"in_reply_to":"da86d52c_46da51ea","updated":"2015-02-10 18:59:24.000000000","message":"Oh, yeah, that was naughty.  I\u0027m not sure it\u0027s even guaranteed to work right.","commit_id":"84b998d367044a4a3ce673568e88dd42e502a3da"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e51fea82b65efb282c0d26fabb4c00f65af7b9bd","unresolved":false,"context_lines":[{"line_number":1444,"context_line":"            self._emitted_deprecations.add(name)"},{"line_number":1445,"context_line":"            # DEFAULT is a more user-friendly name than None"},{"line_number":1446,"context_line":"            current_group \u003d (\u0027DEFAULT\u0027 if current_group is None"},{"line_number":1447,"context_line":"                             else current_group)"},{"line_number":1448,"context_line":"            deprecated_group \u003d \u0027DEFAULT\u0027 if name[0] is None else name[0]"},{"line_number":1449,"context_line":"            LOG.warning(self._deprecated_opt_message, name[1],"},{"line_number":1450,"context_line":"                        deprecated_group, current_name, current_group)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_a6f86d4a","line":1447,"updated":"2015-02-09 16:52:38.000000000","message":"suggest use\n\n  current_group \u003d current_group or \u0027DEFAULT\u0027","commit_id":"84b998d367044a4a3ce673568e88dd42e502a3da"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e51fea82b65efb282c0d26fabb4c00f65af7b9bd","unresolved":false,"context_lines":[{"line_number":1445,"context_line":"            # DEFAULT is a more user-friendly name than None"},{"line_number":1446,"context_line":"            current_group \u003d (\u0027DEFAULT\u0027 if current_group is None"},{"line_number":1447,"context_line":"                             else current_group)"},{"line_number":1448,"context_line":"            deprecated_group \u003d \u0027DEFAULT\u0027 if name[0] is None else name[0]"},{"line_number":1449,"context_line":"            LOG.warning(self._deprecated_opt_message, name[1],"},{"line_number":1450,"context_line":"                        deprecated_group, current_name, current_group)"},{"line_number":1451,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_46afb12b","line":1448,"updated":"2015-02-09 16:52:38.000000000","message":"suggest use\n\n deprecated_group \u003d name[0] or \u0027DEFAULT\u0027","commit_id":"84b998d367044a4a3ce673568e88dd42e502a3da"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"45921135e75dc350d14afe1782b1716d82d8ccc3","unresolved":false,"context_lines":[{"line_number":1416,"context_line":""},{"line_number":1417,"context_line":""},{"line_number":1418,"context_line":"class MultiConfigParser(object):"},{"line_number":1419,"context_line":"    _deprecated_opt_message \u003d (\u0027Option \"%s\" from group \"%s\" is deprecated. \u0027"},{"line_number":1420,"context_line":"                               \u0027Use option \"%s\" from group \"%s\".\u0027)"},{"line_number":1421,"context_line":""},{"line_number":1422,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_26232a06","line":1419,"updated":"2015-02-18 18:13:17.000000000","message":"We really need to set up i18n for this lib. :-/","commit_id":"40350cbba57f938aba937500be6f0b62f41f4afc"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"45921135e75dc350d14afe1782b1716d82d8ccc3","unresolved":false,"context_lines":[{"line_number":1512,"context_line":"            current_group \u003d (\u0027DEFAULT\u0027 if current[0] is None"},{"line_number":1513,"context_line":"                             else current[0])"},{"line_number":1514,"context_line":"            deprecated_group \u003d \u0027DEFAULT\u0027 if name[0] is None else name[0]"},{"line_number":1515,"context_line":"            LOG.warning(self._deprecated_opt_message, name[1],"},{"line_number":1516,"context_line":"                        deprecated_group, current[1], current_group)"},{"line_number":1517,"context_line":""},{"line_number":1518,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_26ffaa35","line":1515,"updated":"2015-02-18 18:13:17.000000000","message":"Is there any particular reason for not using the versionutils module to report the deprecation? It tracks the deprecation messages, too, so you wouldn\u0027t need to do that here.","commit_id":"40350cbba57f938aba937500be6f0b62f41f4afc"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"07df912e4075c1737c5023d274c07669809590b2","unresolved":false,"context_lines":[{"line_number":1496,"context_line":"                    If the name param matches any entries in this list a"},{"line_number":1497,"context_line":"                    deprecation warning will be logged."},{"line_number":1498,"context_line":"        \"\"\""},{"line_number":1499,"context_line":"        deprecated_names \u003d list(deprecated)"},{"line_number":1500,"context_line":"        # A group of None should also match DEFAULT, and vice versa"},{"line_number":1501,"context_line":"        for g, n in deprecated:"},{"line_number":1502,"context_line":"            default \u003d (\u0027DEFAULT\u0027, n)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_72d31c38","line":1499,"updated":"2015-02-18 19:27:00.000000000","message":"How about normalizing all of the names to change None to \u0027DEFAULT\u0027:\n\n  deprecated_names \u003d set( (g or \u0027DEFAULT\u0027, n) for (g, n) in deprecated )\n  name \u003d (name[0] or \u0027DEFAULT\u0027, name[1])\n  if name in deprecated_names:\n    current \u003d (current[0] or \u0027DEFAULT\u0027, current[1])\n    deprecated_group \u003d name[0]\n    # do the stuff with versionutils","commit_id":"1e6345eb05297ab7ef0e57ac4e7334d1cddd20aa"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"667d459eb6e2e8e882f4dc1760b94172955dead8","unresolved":false,"context_lines":[{"line_number":1496,"context_line":"                    If the name param matches any entries in this list a"},{"line_number":1497,"context_line":"                    deprecation warning will be logged."},{"line_number":1498,"context_line":"        \"\"\""},{"line_number":1499,"context_line":"        deprecated_names \u003d list(deprecated)"},{"line_number":1500,"context_line":"        # A group of None should also match DEFAULT, and vice versa"},{"line_number":1501,"context_line":"        for g, n in deprecated:"},{"line_number":1502,"context_line":"            default \u003d (\u0027DEFAULT\u0027, n)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_4f7aeaba","line":1499,"in_reply_to":"da86d52c_72d31c38","updated":"2015-02-18 21:07:52.000000000","message":"That will treat an empty group name as DEFAULT, which isn\u0027t how the rest of the code works, but I don\u0027t think an empty group name is allowed anyway so I guess I\u0027ll stop worrying about it.","commit_id":"1e6345eb05297ab7ef0e57ac4e7334d1cddd20aa"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"07df912e4075c1737c5023d274c07669809590b2","unresolved":false,"context_lines":[{"line_number":1512,"context_line":"            deprecated_group \u003d \u0027DEFAULT\u0027 if name[0] is None else name[0]"},{"line_number":1513,"context_line":"            # NOTE(bnemec): We can\u0027t pull this in at import time because of a"},{"line_number":1514,"context_line":"            # circular reference between versionutils and cfg."},{"line_number":1515,"context_line":"            from oslo_config.openstack.common import versionutils"},{"line_number":1516,"context_line":"            versionutils.report_deprecated_feature("},{"line_number":1517,"context_line":"                LOG,"},{"line_number":1518,"context_line":"                self._deprecated_opt_message,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_526ff85f","line":1515,"updated":"2015-02-18 19:27:00.000000000","message":"I didn\u0027t realize that circular dependency was there until you had already done the work to update the patch. When we release versionutils to another library, we will not be able to have oslo.config depend on it because that library will also depend on oslo.config. So the problem isn\u0027t just import time, it\u0027s packaging time. I\u0027m not sure how to get around that while allowing us to move versionutils to a library.","commit_id":"1e6345eb05297ab7ef0e57ac4e7334d1cddd20aa"}]}
