)]}'
{"tempest/config.py":[{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"71283148830185df6d95d1231dba0d934e19bbc5","unresolved":false,"context_lines":[{"line_number":1405,"context_line":"    \"\"\"Decorator to raise a skip if a config opt doesn\u0027t exist and is False"},{"line_number":1406,"context_line":""},{"line_number":1407,"context_line":"    :param str group: The first arg, the option group to check"},{"line_number":1408,"context_line":"    :param str option: The second arg, the option name to check"},{"line_number":1409,"context_line":"    :param str msg: Optional third arg, the skip msg to use"},{"line_number":1410,"context_line":"    :raises testtools.TestCaseskipException: If the specified config option"},{"line_number":1411,"context_line":"        doesn\u0027t exist or it exists and evaluates to False"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_c8824800","line":1408,"range":{"start_line":1408,"start_character":15,"end_line":1408,"end_character":21},"updated":"2016-04-18 06:08:50.000000000","message":"name?","commit_id":"5911ba4c8ddcec6661bdcd00f5be600d5bde39e5"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"35ecdb6c3222279872c7fbc5b500621ba88dd0bf","unresolved":false,"context_lines":[{"line_number":1405,"context_line":"    \"\"\"Decorator to raise a skip if a config opt doesn\u0027t exist and is False"},{"line_number":1406,"context_line":""},{"line_number":1407,"context_line":"    :param str group: The first arg, the option group to check"},{"line_number":1408,"context_line":"    :param str option: The second arg, the option name to check"},{"line_number":1409,"context_line":"    :param str msg: Optional third arg, the skip msg to use"},{"line_number":1410,"context_line":"    :raises testtools.TestCaseskipException: If the specified config option"},{"line_number":1411,"context_line":"        doesn\u0027t exist or it exists and evaluates to False"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_82512811","line":1408,"range":{"start_line":1408,"start_character":15,"end_line":1408,"end_character":21},"in_reply_to":"1a122d0e_c8824800","updated":"2016-04-18 18:37:16.000000000","message":"Done","commit_id":"5911ba4c8ddcec6661bdcd00f5be600d5bde39e5"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"71283148830185df6d95d1231dba0d934e19bbc5","unresolved":false,"context_lines":[{"line_number":1429,"context_line":"                    value \u003d getattr(conf_group, name)"},{"line_number":1430,"context_line":"                    if not value:"},{"line_number":1431,"context_line":"                        if len(args) \u003d\u003d 3:"},{"line_number":1432,"context_line":"                            msg \u003d args[3]"},{"line_number":1433,"context_line":"                        else:"},{"line_number":1434,"context_line":"                            msg \u003d \"Config option %s.%s is false\" % (group,"},{"line_number":1435,"context_line":"                                                                    name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_e8cbc470","line":1432,"range":{"start_line":1432,"start_character":39,"end_line":1432,"end_character":40},"updated":"2016-04-18 06:08:50.000000000","message":"2?\nAnd I think we should have a test case for this feature if we provide a stable interface for this.","commit_id":"5911ba4c8ddcec6661bdcd00f5be600d5bde39e5"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"35ecdb6c3222279872c7fbc5b500621ba88dd0bf","unresolved":false,"context_lines":[{"line_number":1429,"context_line":"                    value \u003d getattr(conf_group, name)"},{"line_number":1430,"context_line":"                    if not value:"},{"line_number":1431,"context_line":"                        if len(args) \u003d\u003d 3:"},{"line_number":1432,"context_line":"                            msg \u003d args[3]"},{"line_number":1433,"context_line":"                        else:"},{"line_number":1434,"context_line":"                            msg \u003d \"Config option %s.%s is false\" % (group,"},{"line_number":1435,"context_line":"                                                                    name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_4231d0eb","line":1432,"range":{"start_line":1432,"start_character":39,"end_line":1432,"end_character":40},"in_reply_to":"1a122d0e_e8cbc470","updated":"2016-04-18 18:37:16.000000000","message":"Done","commit_id":"5911ba4c8ddcec6661bdcd00f5be600d5bde39e5"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"71283148830185df6d95d1231dba0d934e19bbc5","unresolved":false,"context_lines":[{"line_number":1443,"context_line":"    \"\"\"Raise a skipException if a config exists and is True"},{"line_number":1444,"context_line":""},{"line_number":1445,"context_line":"    :param str group: The first arg, the option group to check"},{"line_number":1446,"context_line":"    :param str option: The second arg, the option name to check"},{"line_number":1447,"context_line":"    :param str msg: Optional third arg, the skip msg to use"},{"line_number":1448,"context_line":"    :raises testtools.TestCase.skipException: If the specified config option"},{"line_number":1449,"context_line":"        exists and evaluates to True"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_087d601c","line":1446,"range":{"start_line":1446,"start_character":15,"end_line":1446,"end_character":21},"updated":"2016-04-18 06:08:50.000000000","message":"ditto","commit_id":"5911ba4c8ddcec6661bdcd00f5be600d5bde39e5"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"35ecdb6c3222279872c7fbc5b500621ba88dd0bf","unresolved":false,"context_lines":[{"line_number":1443,"context_line":"    \"\"\"Raise a skipException if a config exists and is True"},{"line_number":1444,"context_line":""},{"line_number":1445,"context_line":"    :param str group: The first arg, the option group to check"},{"line_number":1446,"context_line":"    :param str option: The second arg, the option name to check"},{"line_number":1447,"context_line":"    :param str msg: Optional third arg, the skip msg to use"},{"line_number":1448,"context_line":"    :raises testtools.TestCase.skipException: If the specified config option"},{"line_number":1449,"context_line":"        exists and evaluates to True"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_e258dc34","line":1446,"range":{"start_line":1446,"start_character":15,"end_line":1446,"end_character":21},"in_reply_to":"1a122d0e_087d601c","updated":"2016-04-18 18:37:16.000000000","message":"Done","commit_id":"5911ba4c8ddcec6661bdcd00f5be600d5bde39e5"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"71283148830185df6d95d1231dba0d934e19bbc5","unresolved":false,"context_lines":[{"line_number":1460,"context_line":"                    value \u003d getattr(conf_group, name)"},{"line_number":1461,"context_line":"                    if value:"},{"line_number":1462,"context_line":"                        if len(args) \u003d\u003d 3:"},{"line_number":1463,"context_line":"                            msg \u003d args[3]"},{"line_number":1464,"context_line":"                        else:"},{"line_number":1465,"context_line":"                            msg \u003d \"Config option %s.%s is false\" % (group,"},{"line_number":1466,"context_line":"                                                                    name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_28c65c67","line":1463,"range":{"start_line":1463,"start_character":39,"end_line":1463,"end_character":40},"updated":"2016-04-18 06:08:50.000000000","message":"ditto","commit_id":"5911ba4c8ddcec6661bdcd00f5be600d5bde39e5"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"35ecdb6c3222279872c7fbc5b500621ba88dd0bf","unresolved":false,"context_lines":[{"line_number":1460,"context_line":"                    value \u003d getattr(conf_group, name)"},{"line_number":1461,"context_line":"                    if value:"},{"line_number":1462,"context_line":"                        if len(args) \u003d\u003d 3:"},{"line_number":1463,"context_line":"                            msg \u003d args[3]"},{"line_number":1464,"context_line":"                        else:"},{"line_number":1465,"context_line":"                            msg \u003d \"Config option %s.%s is false\" % (group,"},{"line_number":1466,"context_line":"                                                                    name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_2243f443","line":1463,"range":{"start_line":1463,"start_character":39,"end_line":1463,"end_character":40},"in_reply_to":"1a122d0e_28c65c67","updated":"2016-04-18 18:37:16.000000000","message":"Done","commit_id":"5911ba4c8ddcec6661bdcd00f5be600d5bde39e5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a49cb70d7754e262a29ed26719cbf91652c9d578","unresolved":false,"context_lines":[{"line_number":1402,"context_line":""},{"line_number":1403,"context_line":""},{"line_number":1404,"context_line":"def skip_unless_config(*args):"},{"line_number":1405,"context_line":"    \"\"\"Decorator to raise a skip if a config opt doesn\u0027t exist and is False"},{"line_number":1406,"context_line":""},{"line_number":1407,"context_line":"    :param str group: The first arg, the option group to check"},{"line_number":1408,"context_line":"    :param str name: The second arg, the option name to check"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_964fb333","line":1405,"range":{"start_line":1405,"start_character":63,"end_line":1405,"end_character":66},"updated":"2016-05-04 03:53:24.000000000","message":"s/and/or/","commit_id":"ca5a9fff5ac67b291b34a840067930255e2e05d9"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a49cb70d7754e262a29ed26719cbf91652c9d578","unresolved":false,"context_lines":[{"line_number":1419,"context_line":"            if not hasattr(CONF, group):"},{"line_number":1420,"context_line":"                msg \u003d \"Config group %s doesn\u0027t exist\" % group"},{"line_number":1421,"context_line":"                raise testtools.TestCase.skipException(msg)"},{"line_number":1422,"context_line":"            else:"},{"line_number":1423,"context_line":"                conf_group \u003d getattr(CONF, group)"},{"line_number":1424,"context_line":"                if not hasattr(conf_group, name):"},{"line_number":1425,"context_line":"                    msg \u003d \"Config option %s.%s doesn\u0027t exist\" % (group,"},{"line_number":1426,"context_line":"                                                                 name)"},{"line_number":1427,"context_line":"                    raise testtools.TestCase.skipException(msg)"},{"line_number":1428,"context_line":"                else:"},{"line_number":1429,"context_line":"                    value \u003d getattr(conf_group, name)"},{"line_number":1430,"context_line":"                    if not value:"},{"line_number":1431,"context_line":"                        if len(args) \u003d\u003d 3:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a122d0e_56d7db4e","line":1428,"range":{"start_line":1422,"start_character":0,"end_line":1428,"end_character":21},"updated":"2016-05-04 03:53:24.000000000","message":"to be honest, I don\u0027t prefer this kind of deep nest.\nIn this case, we can remove them like\n\n if not hasattr(CONF, group):\n     msg \u003d ...\n     raise testtools....\n conf_group \u003d getattr(CONF, group)\n if not hasattr(conf_group, name):\n     msg \u003d ...\n     raise testtools...\n value \u003d getattr(conf_group, name)\n ...\n\nThis kind of deep nest is common in OpenStack and it is fine to keep this way at this time. just a comment because easy to remove them.","commit_id":"ca5a9fff5ac67b291b34a840067930255e2e05d9"}]}
