)]}'
{"oslo_config/cfg.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"42c4cc521cee29d6374bb0495d2cfe8dcfe05c15","unresolved":false,"context_lines":[{"line_number":380,"context_line":""},{"line_number":381,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"warnings.simplefilter(\u0027once\u0027)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"class Error(Exception):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a68dd71_3e4fc6be","line":383,"updated":"2016-01-21 19:38:01.000000000","message":"This is going to change the warning behavior for all warnings in all applications using oslo.config. I would prefer to just have this line removed, to let the applications decide what warning behavior they want, but we should at least use the filterwarning API to limit this filter to oslo.config messages.","commit_id":"ac041ab05e670a0fc67bd2c0757071af28d68e1f"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"42c4cc521cee29d6374bb0495d2cfe8dcfe05c15","unresolved":false,"context_lines":[{"line_number":1624,"context_line":"        namespace._parse_cli_opts_from_config_file(sections, normalized)"},{"line_number":1625,"context_line":""},{"line_number":1626,"context_line":""},{"line_number":1627,"context_line":"@removals.remove"},{"line_number":1628,"context_line":"class MultiConfigParser(object):"},{"line_number":1629,"context_line":"    \"\"\"A ConfigParser which handles multi-opts."},{"line_number":1630,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a68dd71_1e3522f6","line":1627,"updated":"2016-01-21 19:38:01.000000000","message":"We should include the removal version here, so it shows up in the warning.","commit_id":"ac041ab05e670a0fc67bd2c0757071af28d68e1f"},{"author":{"_account_id":16051,"name":"Ronald Bradford","email":"ronald.bradford@gmail.com","username":"ronaldbradford"},"change_message_id":"777329a9d1e7942f45a91dcf7f2797d59f263a68","unresolved":false,"context_lines":[{"line_number":1631,"context_line":"    All methods in this class which accept config names should treat a section"},{"line_number":1632,"context_line":"    name of None as \u0027DEFAULT\u0027."},{"line_number":1633,"context_line":""},{"line_number":1634,"context_line":"    This class is deprecated. _Namespace holds values, ConfigParser._parse_file"},{"line_number":1635,"context_line":"    reads one file into a _Namespace and ConfigOpts._parse_config_files reads"},{"line_number":1636,"context_line":"    multiple files into a _Namespace."},{"line_number":1637,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a68dd71_ea74159d","line":1634,"range":{"start_line":1634,"start_character":9,"end_line":1634,"end_character":14},"updated":"2016-01-21 16:28:17.000000000","message":"If a further review could you append the following.\n\nThis class is deprecated in Mitaka and will be removed in O release.","commit_id":"ac041ab05e670a0fc67bd2c0757071af28d68e1f"},{"author":{"_account_id":16051,"name":"Ronald Bradford","email":"ronald.bradford@gmail.com","username":"ronaldbradford"},"change_message_id":"8092b1f080aea78498d427dea54757821eaf8416","unresolved":false,"context_lines":[{"line_number":1631,"context_line":"    All methods in this class which accept config names should treat a section"},{"line_number":1632,"context_line":"    name of None as \u0027DEFAULT\u0027."},{"line_number":1633,"context_line":""},{"line_number":1634,"context_line":"    This class is deprecated. _Namespace holds values, ConfigParser._parse_file"},{"line_number":1635,"context_line":"    reads one file into a _Namespace and ConfigOpts._parse_config_files reads"},{"line_number":1636,"context_line":"    multiple files into a _Namespace."},{"line_number":1637,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a68dd71_d6c77810","line":1634,"range":{"start_line":1634,"start_character":9,"end_line":1634,"end_character":14},"in_reply_to":"9a68dd71_ca9cb15f","updated":"2016-01-21 17:46:16.000000000","message":"I had heard somewhere is was 2 cycles but I have no documentation to verify that.  I am using existing comments (which may also be wrong) e.g.  http://docs.openstack.org/developer/oslo.log/opts.html The format is deprecated in Kilo, and will be removed in Mitaka.\n\nIt is also unclear in https://review.openstack.org/#/c/226157/ Backwards compat for libraries and clients.\n\nMust have missed the Newton announcement!","commit_id":"ac041ab05e670a0fc67bd2c0757071af28d68e1f"},{"author":{"_account_id":8688,"name":"Alexis Lee","email":"openstack@lxsli.co.uk","username":"lxsli"},"change_message_id":"fea9e2388db2e8e3ec9b9f3af33327f24ccb4a8d","unresolved":false,"context_lines":[{"line_number":1631,"context_line":"    All methods in this class which accept config names should treat a section"},{"line_number":1632,"context_line":"    name of None as \u0027DEFAULT\u0027."},{"line_number":1633,"context_line":""},{"line_number":1634,"context_line":"    This class is deprecated. _Namespace holds values, ConfigParser._parse_file"},{"line_number":1635,"context_line":"    reads one file into a _Namespace and ConfigOpts._parse_config_files reads"},{"line_number":1636,"context_line":"    multiple files into a _Namespace."},{"line_number":1637,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a68dd71_ca9cb15f","line":1634,"range":{"start_line":1634,"start_character":9,"end_line":1634,"end_character":14},"in_reply_to":"9a68dd71_ea74159d","updated":"2016-01-21 16:38:34.000000000","message":"Makes sense, except - why not Newton? Does Oslo use a 2-cycle deprecation window? Do you know of any documentation on the subject?","commit_id":"ac041ab05e670a0fc67bd2c0757071af28d68e1f"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"c9a487dbf7fd87493b4aae58ff2d4ac1c978ef0a","unresolved":false,"context_lines":[{"line_number":1621,"context_line":"        namespace._parse_cli_opts_from_config_file(sections, normalized)"},{"line_number":1622,"context_line":""},{"line_number":1623,"context_line":""},{"line_number":1624,"context_line":"@removals.remove(version\u003d\u00273.3\u0027, removal_version\u003d\u00274.0\u0027)"},{"line_number":1625,"context_line":"class MultiConfigParser(object):"},{"line_number":1626,"context_line":"    \"\"\"A ConfigParser which handles multi-opts."},{"line_number":1627,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_602f15a2","line":1624,"updated":"2016-01-27 19:00:36.000000000","message":"We\u0027ve released 3.4 already so this will need to change before we release this series.","commit_id":"c663acebc697e92f086684b2ee87546fba57cb7d"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"c9a487dbf7fd87493b4aae58ff2d4ac1c978ef0a","unresolved":false,"context_lines":[{"line_number":1866,"context_line":"                name \u003d \u0027DEFAULT\u0027"},{"line_number":1867,"context_line":"            return _normalize_group_name(name) if normalized else name"},{"line_number":1868,"context_line":""},{"line_number":1869,"context_line":"        names \u003d [(normalize(section), name) for section, name in names]"},{"line_number":1870,"context_line":""},{"line_number":1871,"context_line":"        for sections in (self._normalized if normalized else self._parsed):"},{"line_number":1872,"context_line":"            for section, name in names:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_6a74d39b","line":1869,"updated":"2016-01-27 19:00:36.000000000","message":"This always normalizes the section names, but then on 1871 sometimes the parsed values are searched. Does that work?","commit_id":"c663acebc697e92f086684b2ee87546fba57cb7d"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"924e46469605fd59f06f6ac602fc10df8f67ba8b","unresolved":false,"context_lines":[{"line_number":1866,"context_line":"                name \u003d \u0027DEFAULT\u0027"},{"line_number":1867,"context_line":"            return _normalize_group_name(name) if normalized else name"},{"line_number":1868,"context_line":""},{"line_number":1869,"context_line":"        names \u003d [(normalize(section), name) for section, name in names]"},{"line_number":1870,"context_line":""},{"line_number":1871,"context_line":"        for sections in (self._normalized if normalized else self._parsed):"},{"line_number":1872,"context_line":"            for section, name in names:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_64d642c7","line":1869,"in_reply_to":"7a5de9d1_6a74d39b","updated":"2016-01-27 21:39:02.000000000","message":"The inner function only normalizes the name if the flag (not passed to the function) is set.","commit_id":"c663acebc697e92f086684b2ee87546fba57cb7d"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"c9a487dbf7fd87493b4aae58ff2d4ac1c978ef0a","unresolved":false,"context_lines":[{"line_number":1872,"context_line":"            for section, name in names:"},{"line_number":1873,"context_line":"                if section not in sections:"},{"line_number":1874,"context_line":"                    continue"},{"line_number":1875,"context_line":"                if name in sections[section]:"},{"line_number":1876,"context_line":"                    current_name \u003d current_name or names[0]"},{"line_number":1877,"context_line":"                    self._check_deprecated((section, name), current_name,"},{"line_number":1878,"context_line":"                                           names[1:])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_2a7c9b71","line":1875,"updated":"2016-01-27 19:00:36.000000000","message":"self._normalized and self._parsed both appear to be lists, and section appears to be a string. Am I misunderstanding how those data structures are used? Is this indexing into a list by a string?","commit_id":"c663acebc697e92f086684b2ee87546fba57cb7d"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"924e46469605fd59f06f6ac602fc10df8f67ba8b","unresolved":false,"context_lines":[{"line_number":1872,"context_line":"            for section, name in names:"},{"line_number":1873,"context_line":"                if section not in sections:"},{"line_number":1874,"context_line":"                    continue"},{"line_number":1875,"context_line":"                if name in sections[section]:"},{"line_number":1876,"context_line":"                    current_name \u003d current_name or names[0]"},{"line_number":1877,"context_line":"                    self._check_deprecated((section, name), current_name,"},{"line_number":1878,"context_line":"                                           names[1:])"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_c44936d2","line":1875,"in_reply_to":"7a5de9d1_2a7c9b71","updated":"2016-01-27 21:39:02.000000000","message":"Alexis explained this on IRC.","commit_id":"c663acebc697e92f086684b2ee87546fba57cb7d"}]}
