)]}'
{"ceilometer/declarative.py":[{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"abe38b6ec0006280dbba6a17a271f582bb947c1b","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                  \"Using default config.\")"},{"line_number":180,"context_line":"        config_files \u003d [fallback_file, ]"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    # The first file in a alphabeticly sorted list is defined as the the default"},{"line_number":183,"context_line":"    config_files \u003d sorted(config_files, reversed\u003dTrue)"},{"line_number":184,"context_line":"    base_cfg \u003d config_files.pop()"},{"line_number":185,"context_line":"    definition_cfg \u003d load_definitions(defaults, base_cfg, fallback_file)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_2d0186af","line":182,"updated":"2015-11-19 02:04:41.000000000","message":"this line is too long","commit_id":"e94af2971dbdebcb0a3f3a97ad550003af4c1ab7"},{"author":{"_account_id":8984,"name":"George Peristerakis","email":"gperiste@redhat.com","username":"peristeri"},"change_message_id":"672d55a52c16339ddbcbf2b9b231b6c9f4218456","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                  \"Using default config.\")"},{"line_number":180,"context_line":"        config_files \u003d [fallback_file, ]"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    # The first file in a alphabeticly sorted list is defined as the the default"},{"line_number":183,"context_line":"    config_files \u003d sorted(config_files, reversed\u003dTrue)"},{"line_number":184,"context_line":"    base_cfg \u003d config_files.pop()"},{"line_number":185,"context_line":"    definition_cfg \u003d load_definitions(defaults, base_cfg, fallback_file)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_aa1c596a","line":182,"in_reply_to":"ba8a016a_2d0186af","updated":"2015-11-19 15:05:33.000000000","message":"Done","commit_id":"e94af2971dbdebcb0a3f3a97ad550003af4c1ab7"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"abe38b6ec0006280dbba6a17a271f582bb947c1b","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    base_cfg \u003d config_files.pop()"},{"line_number":185,"context_line":"    definition_cfg \u003d load_definitions(defaults, base_cfg, fallback_file)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    for file_cfg in reversed(config_files):"},{"line_number":188,"context_line":"        new_cfg \u003d load_definitions(defaults, file_cfg, fallback_file)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        if isinstance(definition_cfg, list):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_6d7eae1a","line":187,"updated":"2015-11-19 02:04:41.000000000","message":"this is more simple :\n    config_files \u003d sorted(config_files)\n    base_cfg \u003d config_files[0]\n    definition_cfg \u003d load_definitions(defaults, base_cfg, fallback_file)\n\n    for file_cfg in config_files[1:]:","commit_id":"e94af2971dbdebcb0a3f3a97ad550003af4c1ab7"},{"author":{"_account_id":8984,"name":"George Peristerakis","email":"gperiste@redhat.com","username":"peristeri"},"change_message_id":"672d55a52c16339ddbcbf2b9b231b6c9f4218456","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    base_cfg \u003d config_files.pop()"},{"line_number":185,"context_line":"    definition_cfg \u003d load_definitions(defaults, base_cfg, fallback_file)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    for file_cfg in reversed(config_files):"},{"line_number":188,"context_line":"        new_cfg \u003d load_definitions(defaults, file_cfg, fallback_file)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        if isinstance(definition_cfg, list):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_ea98217a","line":187,"in_reply_to":"ba8a016a_6d7eae1a","updated":"2015-11-19 15:05:33.000000000","message":"Done","commit_id":"e94af2971dbdebcb0a3f3a97ad550003af4c1ab7"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"abe38b6ec0006280dbba6a17a271f582bb947c1b","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    definition_cfg \u003d load_definitions(defaults, base_cfg, fallback_file)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    for file_cfg in reversed(config_files):"},{"line_number":188,"context_line":"        new_cfg \u003d load_definitions(defaults, file_cfg, fallback_file)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        if isinstance(definition_cfg, list):"},{"line_number":191,"context_line":"            if isinstance(new_cfg, list):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_2d4746bd","line":188,"updated":"2015-11-19 02:04:41.000000000","message":"how does one of the files loading failed ? break or skip ?","commit_id":"e94af2971dbdebcb0a3f3a97ad550003af4c1ab7"},{"author":{"_account_id":8984,"name":"George Peristerakis","email":"gperiste@redhat.com","username":"peristeri"},"change_message_id":"672d55a52c16339ddbcbf2b9b231b6c9f4218456","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    definition_cfg \u003d load_definitions(defaults, base_cfg, fallback_file)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    for file_cfg in reversed(config_files):"},{"line_number":188,"context_line":"        new_cfg \u003d load_definitions(defaults, file_cfg, fallback_file)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        if isinstance(definition_cfg, list):"},{"line_number":191,"context_line":"            if isinstance(new_cfg, list):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba8a016a_8ae395d8","line":188,"in_reply_to":"ba8a016a_2d4746bd","updated":"2015-11-19 15:05:33.000000000","message":"Done","commit_id":"e94af2971dbdebcb0a3f3a97ad550003af4c1ab7"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"9a469cc277df017a1c1a4fefa853b3f89ba8e3a0","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        config_files \u003d [fallback_file, ]"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    # The first file in a alphabeticly sorted list is defined as the default"},{"line_number":197,"context_line":"    # configuration. All remaining files are considered as optional."},{"line_number":198,"context_line":"    config_files \u003d sorted(config_files)"},{"line_number":199,"context_line":"    base_cfg \u003d config_files[0]"},{"line_number":200,"context_line":"    definition_cfg \u003d load_definitions(defaults, base_cfg, fallback_file)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_f4e725aa","line":197,"updated":"2015-11-23 12:38:33.000000000","message":"why such rule is needed?","commit_id":"33e3c79788bf82f40989560b05d8b1b5463bff7a"},{"author":{"_account_id":8984,"name":"George Peristerakis","email":"gperiste@redhat.com","username":"peristeri"},"change_message_id":"a88df08d39d721ebecbda0295bf0c4766b481785","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        config_files \u003d [fallback_file, ]"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    # The first file in a alphabeticly sorted list is defined as the default"},{"line_number":197,"context_line":"    # configuration. All remaining files are considered as optional."},{"line_number":198,"context_line":"    config_files \u003d sorted(config_files)"},{"line_number":199,"context_line":"    base_cfg \u003d config_files[0]"},{"line_number":200,"context_line":"    definition_cfg \u003d load_definitions(defaults, base_cfg, fallback_file)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_25c28686","line":197,"in_reply_to":"ba8a016a_f4e725aa","updated":"2015-11-24 21:59:50.000000000","message":"The user can set the order of configuration so that it is predictable.","commit_id":"33e3c79788bf82f40989560b05d8b1b5463bff7a"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"9a469cc277df017a1c1a4fefa853b3f89ba8e3a0","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    # The first file in a alphabeticly sorted list is defined as the default"},{"line_number":197,"context_line":"    # configuration. All remaining files are considered as optional."},{"line_number":198,"context_line":"    config_files \u003d sorted(config_files)"},{"line_number":199,"context_line":"    base_cfg \u003d config_files[0]"},{"line_number":200,"context_line":"    definition_cfg \u003d load_definitions(defaults, base_cfg, fallback_file)"},{"line_number":201,"context_line":"    if isinstance(definition_cfg, list):"},{"line_number":202,"context_line":"        merge_func \u003d _merge_list"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_f4e645e7","line":199,"updated":"2015-11-23 12:38:33.000000000","message":"there is no guarantee that config_files is not empty","commit_id":"33e3c79788bf82f40989560b05d8b1b5463bff7a"},{"author":{"_account_id":8984,"name":"George Peristerakis","email":"gperiste@redhat.com","username":"peristeri"},"change_message_id":"a88df08d39d721ebecbda0295bf0c4766b481785","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    # The first file in a alphabeticly sorted list is defined as the default"},{"line_number":197,"context_line":"    # configuration. All remaining files are considered as optional."},{"line_number":198,"context_line":"    config_files \u003d sorted(config_files)"},{"line_number":199,"context_line":"    base_cfg \u003d config_files[0]"},{"line_number":200,"context_line":"    definition_cfg \u003d load_definitions(defaults, base_cfg, fallback_file)"},{"line_number":201,"context_line":"    if isinstance(definition_cfg, list):"},{"line_number":202,"context_line":"        merge_func \u003d _merge_list"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_9a1dcd75","line":199,"in_reply_to":"ba8a016a_f4e645e7","updated":"2015-11-24 21:59:50.000000000","message":"Done","commit_id":"33e3c79788bf82f40989560b05d8b1b5463bff7a"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"9a469cc277df017a1c1a4fefa853b3f89ba8e3a0","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        try:"},{"line_number":214,"context_line":"            merge_func(definition_cfg, new_cfg)"},{"line_number":215,"context_line":"        except ValueError:"},{"line_number":216,"context_line":"            LOG.debug(\u0027Skipping %s. Does not match the format of %s\u0027,"},{"line_number":217,"context_line":"                      file_cfg, base_cfg)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    return definition_cfg"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_94725910","line":216,"updated":"2015-11-23 12:38:33.000000000","message":"debug is not enough for such case, must be higher than warning to alert cloud deploy guys or administrators about this incompatiable config file","commit_id":"33e3c79788bf82f40989560b05d8b1b5463bff7a"},{"author":{"_account_id":8984,"name":"George Peristerakis","email":"gperiste@redhat.com","username":"peristeri"},"change_message_id":"a88df08d39d721ebecbda0295bf0c4766b481785","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        try:"},{"line_number":214,"context_line":"            merge_func(definition_cfg, new_cfg)"},{"line_number":215,"context_line":"        except ValueError:"},{"line_number":216,"context_line":"            LOG.debug(\u0027Skipping %s. Does not match the format of %s\u0027,"},{"line_number":217,"context_line":"                      file_cfg, base_cfg)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    return definition_cfg"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_a53c3694","line":216,"in_reply_to":"ba8a016a_94725910","updated":"2015-11-24 21:59:50.000000000","message":"Done","commit_id":"33e3c79788bf82f40989560b05d8b1b5463bff7a"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e260b9c67452277a1bf9abc990c18182649b52d8","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    if not os.path.isdir(config_dir):"},{"line_number":185,"context_line":"        return load_definitions(defaults, config_dir, fallback_file)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    config_dir \u003d cfg.CONF.find_file(config_dir)"},{"line_number":188,"context_line":"    config_files \u003d [os.path.join(config_dir, x)"},{"line_number":189,"context_line":"                    for x in os.listdir(config_dir) if x.endswith(\u0027.yaml\u0027)]"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_6c7c7e1f","line":187,"updated":"2015-12-07 19:53:42.000000000","message":"what\u0027s this for?","commit_id":"d03a18f216986986becc8d1ea9f9b147910a8fbf"},{"author":{"_account_id":8984,"name":"George Peristerakis","email":"gperiste@redhat.com","username":"peristeri"},"change_message_id":"8944841695dbe3de07db0069a2f38d4a64600aee","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    if not os.path.isdir(config_dir):"},{"line_number":185,"context_line":"        return load_definitions(defaults, config_dir, fallback_file)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    config_dir \u003d cfg.CONF.find_file(config_dir)"},{"line_number":188,"context_line":"    config_files \u003d [os.path.join(config_dir, x)"},{"line_number":189,"context_line":"                    for x in os.listdir(config_dir) if x.endswith(\u0027.yaml\u0027)]"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_6226c516","line":187,"in_reply_to":"7a740942_6c7c7e1f","updated":"2015-12-07 20:41:48.000000000","message":"This function expands the file name to an absolute file name following an order of directories specified in the config file.","commit_id":"d03a18f216986986becc8d1ea9f9b147910a8fbf"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e260b9c67452277a1bf9abc990c18182649b52d8","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    # The first file in a alphabeticly sorted list is defined as the default"},{"line_number":197,"context_line":"    # configuration. All remaining files are considered as optional."},{"line_number":198,"context_line":"    config_files \u003d sorted(config_files)"},{"line_number":199,"context_line":"    if not config_files and not isinstance(config_files, list):"},{"line_number":200,"context_line":"        msg \u003d _(\u0027Event configurations file(s) are not found in %(config_dir)s\u0027)"},{"line_number":201,"context_line":"        msg \u003d msg % {\u0027config_dir\u0027: config_dir}"},{"line_number":202,"context_line":"        LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_ecbdceb7","line":199,"updated":"2015-12-07 19:53:42.000000000","message":"not config_files OR not isinstance?","commit_id":"d03a18f216986986becc8d1ea9f9b147910a8fbf"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e260b9c67452277a1bf9abc990c18182649b52d8","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    if isinstance(definition_cfg, list):"},{"line_number":208,"context_line":"        merge_func \u003d _merge_list"},{"line_number":209,"context_line":"    else:"},{"line_number":210,"context_line":"        merge_func \u003d _merge_dict"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    for file_cfg in config_files[1:]:"},{"line_number":213,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_cc2d72ff","line":210,"updated":"2015-12-07 19:53:42.000000000","message":"why would it be differnt?","commit_id":"d03a18f216986986becc8d1ea9f9b147910a8fbf"},{"author":{"_account_id":8984,"name":"George Peristerakis","email":"gperiste@redhat.com","username":"peristeri"},"change_message_id":"8944841695dbe3de07db0069a2f38d4a64600aee","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    if isinstance(definition_cfg, list):"},{"line_number":208,"context_line":"        merge_func \u003d _merge_list"},{"line_number":209,"context_line":"    else:"},{"line_number":210,"context_line":"        merge_func \u003d _merge_dict"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    for file_cfg in config_files[1:]:"},{"line_number":213,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_1d196679","line":210,"in_reply_to":"7a740942_cc2d72ff","updated":"2015-12-07 20:41:48.000000000","message":"The base config file for event definitions is a list of dicts. I added a condition where the config file is a dictionary. In case the config file specs changed.","commit_id":"d03a18f216986986becc8d1ea9f9b147910a8fbf"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e260b9c67452277a1bf9abc990c18182649b52d8","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        try:"},{"line_number":220,"context_line":"            merge_func(definition_cfg, new_cfg)"},{"line_number":221,"context_line":"        except ValueError:"},{"line_number":222,"context_line":"            LOG.error(\u0027Skipping %s. Does not match the format of %s\u0027,"},{"line_number":223,"context_line":"                      file_cfg, base_cfg)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    return definition_cfg"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_0c761a06","line":222,"updated":"2015-12-07 19:53:42.000000000","message":"why this duplicating merge_dict","commit_id":"d03a18f216986986becc8d1ea9f9b147910a8fbf"},{"author":{"_account_id":8984,"name":"George Peristerakis","email":"gperiste@redhat.com","username":"peristeri"},"change_message_id":"8944841695dbe3de07db0069a2f38d4a64600aee","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        try:"},{"line_number":220,"context_line":"            merge_func(definition_cfg, new_cfg)"},{"line_number":221,"context_line":"        except ValueError:"},{"line_number":222,"context_line":"            LOG.error(\u0027Skipping %s. Does not match the format of %s\u0027,"},{"line_number":223,"context_line":"                      file_cfg, base_cfg)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    return definition_cfg"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_5d684eb9","line":222,"in_reply_to":"7a740942_0c761a06","updated":"2015-12-07 20:41:48.000000000","message":"Not sure what you are referring to.","commit_id":"d03a18f216986986becc8d1ea9f9b147910a8fbf"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"6d0d3f727d589e5ea57b96bcdca754702021e5ad","unresolved":false,"context_lines":[{"line_number":166,"context_line":"    return definition_cfg"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"def load_definitions_directory(defaults, config_dir, fallback_file\u003dNone):"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def _merge_list(origin, extra):"},{"line_number":172,"context_line":"        if isinstance(extra, list):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a740942_4acccdba","line":169,"updated":"2015-12-08 16:43:43.000000000","message":"Could you please add doc strings with description of new function.","commit_id":"1e81fa72e8a911221ea13f34da1226cb1d6c6285"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"3853bd229a895425d92d448a6220b7fcbff1c8f2","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    if not os.path.isdir(config_dir):"},{"line_number":185,"context_line":"        return load_definitions(defaults, config_dir, fallback_file)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    config_dir \u003d cfg.CONF.find_file(config_dir)"},{"line_number":188,"context_line":"    config_files \u003d [os.path.join(config_dir, x)"},{"line_number":189,"context_line":"                    for x in os.listdir(config_dir) if x.endswith(\u0027.yaml\u0027)]"},{"line_number":190,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7a740942_91d0da20","line":187,"updated":"2015-12-08 00:15:47.000000000","message":"the question was more, why do we pass a directory into something called find_file? iiuc, it\u0027s expecting a file not a directory.","commit_id":"1e81fa72e8a911221ea13f34da1226cb1d6c6285"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"3853bd229a895425d92d448a6220b7fcbff1c8f2","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        config_files \u003d [fallback_file, ]"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    # The first file in a alphabeticly sorted list is defined as the default"},{"line_number":197,"context_line":"    # configuration. All remaining files are considered as optional."},{"line_number":198,"context_line":"    if not config_files:"},{"line_number":199,"context_line":"        msg \u003d _(\u0027Event configurations file(s) are not found in %(config_dir)s\u0027)"},{"line_number":200,"context_line":"        msg \u003d msg % {\u0027config_dir\u0027: config_dir}"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a740942_11914a47","line":197,"updated":"2015-12-08 00:15:47.000000000","message":"i don\u0027t really understand this, what are optional? if we have a folder of files, does this mean we fail if first file fails but don\u0027t fail on subsequent files? i feel like we should just let it crash.","commit_id":"1e81fa72e8a911221ea13f34da1226cb1d6c6285"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"3853bd229a895425d92d448a6220b7fcbff1c8f2","unresolved":false,"context_lines":[{"line_number":207,"context_line":"    if isinstance(definition_cfg, list):"},{"line_number":208,"context_line":"        merge_func \u003d _merge_list"},{"line_number":209,"context_line":"    else:"},{"line_number":210,"context_line":"        merge_func \u003d _merge_dict"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    for file_cfg in config_files[1:]:"},{"line_number":213,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a740942_316a46ef","line":210,"updated":"2015-12-08 00:15:47.000000000","message":"yeah, let\u0027s keep it simple and not add support for something that doesn\u0027t exist.","commit_id":"1e81fa72e8a911221ea13f34da1226cb1d6c6285"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"3853bd229a895425d92d448a6220b7fcbff1c8f2","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        try:"},{"line_number":220,"context_line":"            merge_func(definition_cfg, new_cfg)"},{"line_number":221,"context_line":"        except ValueError:"},{"line_number":222,"context_line":"            LOG.error(\u0027Skipping %s. Does not match the format of %s\u0027,"},{"line_number":223,"context_line":"                      file_cfg, base_cfg)"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    return definition_cfg"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a740942_b1dab6e6","line":222,"updated":"2015-12-08 00:15:47.000000000","message":"if you look up at merge_dict and merge_list, they already check for type so i\u0027m not sure how it\u0027d give a ValueError... and we already LOG the same error in merge_dict","commit_id":"1e81fa72e8a911221ea13f34da1226cb1d6c6285"},{"author":{"_account_id":6924,"name":"Pradeep Kilambi","email":"pkilambi@redhat.com","username":"pkilambi"},"change_message_id":"d520087c600b3023970aa47cf66030a688a099b4","unresolved":false,"context_lines":[{"line_number":177,"context_line":"    config_dir \u003d os.path.abspath(config_dir)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    if os.path.isfile(config_dir):"},{"line_number":180,"context_line":"        return load_definitions(defaults, config_dir, fallback_file)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"    try:"},{"line_number":183,"context_line":"        config_files \u003d [os.path.join(config_dir, x)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa69d971_212c2b01","line":180,"updated":"2016-01-11 18:01:59.000000000","message":"Hmm if someone passed a file instead of a dir here, they are using the method wrong. we should check for that and if its not raise an error and let the method do what its expected to do.\n\nIf you really want this method to handle both file and dir then dont call it load_definitions_directory and param config_dir.","commit_id":"91efcbbeac5e009c0c6f7081d569f70441265144"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"6b61a7dd1d9c3e29191778f403d757425435b10e","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    for file_cfg in config_files:"},{"line_number":201,"context_line":"        new_cfg \u003d load_definitions(defaults, file_cfg, fallback_file)"},{"line_number":202,"context_line":"        try:"},{"line_number":203,"context_line":"            definition_cfg.extend(new_cfg)"},{"line_number":204,"context_line":"        except ValueError:"},{"line_number":205,"context_line":"            LOG.error(\u0027Skipping %s. Does not match the configuration format\u0027,"},{"line_number":206,"context_line":"                      file_cfg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a68dd71_fe191c7a","line":203,"range":{"start_line":203,"start_character":12,"end_line":203,"end_character":42},"updated":"2016-01-22 03:29:10.000000000","message":"how could this statement raise a ValueError ? it seems the new_cfg can be [] as default, right?","commit_id":"850e455db3d7203a746a5a1109ff36197505a9e1"},{"author":{"_account_id":8984,"name":"George Peristerakis","email":"gperiste@redhat.com","username":"peristeri"},"change_message_id":"4420ab34cecf66ed4055a8a18a64bbc001950c65","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    for file_cfg in config_files:"},{"line_number":201,"context_line":"        new_cfg \u003d load_definitions(defaults, file_cfg, fallback_file)"},{"line_number":202,"context_line":"        try:"},{"line_number":203,"context_line":"            definition_cfg.extend(new_cfg)"},{"line_number":204,"context_line":"        except ValueError:"},{"line_number":205,"context_line":"            LOG.error(\u0027Skipping %s. Does not match the configuration format\u0027,"},{"line_number":206,"context_line":"                      file_cfg)"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a68dd71_8b10b65a","line":203,"range":{"start_line":203,"start_character":12,"end_line":203,"end_character":42},"in_reply_to":"9a68dd71_fe191c7a","updated":"2016-01-22 20:21:12.000000000","message":"you are right","commit_id":"850e455db3d7203a746a5a1109ff36197505a9e1"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"6b61a7dd1d9c3e29191778f403d757425435b10e","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        new_cfg \u003d load_definitions(defaults, file_cfg, fallback_file)"},{"line_number":202,"context_line":"        try:"},{"line_number":203,"context_line":"            definition_cfg.extend(new_cfg)"},{"line_number":204,"context_line":"        except ValueError:"},{"line_number":205,"context_line":"            LOG.error(\u0027Skipping %s. Does not match the configuration format\u0027,"},{"line_number":206,"context_line":"                      file_cfg)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    return definition_cfg"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a68dd71_be516410","line":206,"range":{"start_line":204,"start_character":8,"end_line":206,"end_character":31},"updated":"2016-01-22 03:29:10.000000000","message":"it seems gordon suggested let if crash if wrong format occured, maybe just:\n\n  definition_cfg.extend(new_cfg)","commit_id":"850e455db3d7203a746a5a1109ff36197505a9e1"}],"ceilometer/event/converter.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"9a469cc277df017a1c1a4fefa853b3f89ba8e3a0","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from ceilometer.i18n import _"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"OPTS \u003d ["},{"line_number":29,"context_line":"    cfg.StrOpt(\u0027definitions_cfg\u0027,"},{"line_number":30,"context_line":"               default\u003d\"event_definitions.yaml\","},{"line_number":31,"context_line":"               help\u003d\"Configuration file for event definitions.\""},{"line_number":32,"context_line":"               ),"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_94533939","line":29,"updated":"2015-11-23 12:38:33.000000000","message":"you\u0027re breaking things\n\nif you want to remove an option, mark it as deprecated and describe in the help string which version it should be removed, and maybe provide a compatible solution\n\nif you want to change its name, provide a compatible solution, which means, add deprecated_name parameter to this option.\n\nif you want to change its meaning, change the help string as well,","commit_id":"33e3c79788bf82f40989560b05d8b1b5463bff7a"},{"author":{"_account_id":8984,"name":"George Peristerakis","email":"gperiste@redhat.com","username":"peristeri"},"change_message_id":"a88df08d39d721ebecbda0295bf0c4766b481785","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from ceilometer.i18n import _"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"OPTS \u003d ["},{"line_number":29,"context_line":"    cfg.StrOpt(\u0027definitions_cfg\u0027,"},{"line_number":30,"context_line":"               default\u003d\"event_definitions.yaml\","},{"line_number":31,"context_line":"               help\u003d\"Configuration file for event definitions.\""},{"line_number":32,"context_line":"               ),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a8ffd7b_dae2759f","line":29,"in_reply_to":"ba8a016a_94533939","updated":"2015-11-24 21:59:50.000000000","message":"Done","commit_id":"33e3c79788bf82f40989560b05d8b1b5463bff7a"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e260b9c67452277a1bf9abc990c18182649b52d8","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                    default\u003d[],"},{"line_number":39,"context_line":"                    help\u003d\u0027Store the raw notification for select priority \u0027"},{"line_number":40,"context_line":"                    \u0027levels (info and/or error). By default, raw details are \u0027"},{"line_number":41,"context_line":"                    \u0027not captured.\u0027),"},{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"cfg.CONF.register_opts(OPTS, group\u003d\u0027event\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_8c0d2aea","line":41,"range":{"start_line":41,"start_character":33,"end_line":41,"end_character":37},"updated":"2015-12-07 19:53:42.000000000","message":"why\u0027d you add a comma?","commit_id":"d03a18f216986986becc8d1ea9f9b147910a8fbf"},{"author":{"_account_id":8984,"name":"George Peristerakis","email":"gperiste@redhat.com","username":"peristeri"},"change_message_id":"b37c25f9ebabb2367ec314716da2927f6b99de87","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                    default\u003d[],"},{"line_number":39,"context_line":"                    help\u003d\u0027Store the raw notification for select priority \u0027"},{"line_number":40,"context_line":"                    \u0027levels (info and/or error). By default, raw details are \u0027"},{"line_number":41,"context_line":"                    \u0027not captured.\u0027),"},{"line_number":42,"context_line":"]"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"cfg.CONF.register_opts(OPTS, group\u003d\u0027event\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_fdb7ba37","line":41,"range":{"start_line":41,"start_character":33,"end_line":41,"end_character":37},"in_reply_to":"7a740942_8c0d2aea","updated":"2015-12-07 20:42:25.000000000","message":"My bad.","commit_id":"d03a18f216986986becc8d1ea9f9b147910a8fbf"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"66269999f4b5f5081deca7f01fb71f171ac9dcf4","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from ceilometer import utils"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"OPTS \u003d ["},{"line_number":28,"context_line":"    cfg.StrOpt(\u0027definitions_cfg\u0027,"},{"line_number":29,"context_line":"               default\u003d\u0027events\u0027,"},{"line_number":30,"context_line":"               help\u003d\u0027The directory of the configuration yaml files for event\u0027"},{"line_number":31,"context_line":"               \u0027 definitions.\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a7b0d38_9c458d18","line":28,"updated":"2015-12-25 09:58:36.000000000","message":"I think it\u0027s better to allow support a definition file strictly and create a additional option for dirs.\nIf not when help message should have a note what we can define a definition file too.","commit_id":"1e81fa72e8a911221ea13f34da1226cb1d6c6285"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"66269999f4b5f5081deca7f01fb71f171ac9dcf4","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"OPTS \u003d ["},{"line_number":28,"context_line":"    cfg.StrOpt(\u0027definitions_cfg\u0027,"},{"line_number":29,"context_line":"               default\u003d\u0027events\u0027,"},{"line_number":30,"context_line":"               help\u003d\u0027The directory of the configuration yaml files for event\u0027"},{"line_number":31,"context_line":"               \u0027 definitions.\u0027,"},{"line_number":32,"context_line":"               deprecated_name\u003d\u0027definitions_cfg_file\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a7b0d38_9cd58dba","line":29,"updated":"2015-12-25 09:58:36.000000000","message":"If we will use it at current ceilometer/etc/ceilometer directory it will fail always. Could you change current default directories tree for supporting your patch?","commit_id":"1e81fa72e8a911221ea13f34da1226cb1d6c6285"}],"ceilometer/tests/functional/test_notification.py":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"f482f6a729cb6be8b7408d4019684d2b4d3e74ae","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        self.CONF.set_override(\"event_pipeline_cfg_file\","},{"line_number":239,"context_line":"                               ev_pipeline_cfg_file)"},{"line_number":240,"context_line":"        self.CONF.set_override("},{"line_number":241,"context_line":"            \"definitions_cfg_file\","},{"line_number":242,"context_line":"            self.path_get(\u0027etc/ceilometer/events.default_definitions.yaml\u0027),"},{"line_number":243,"context_line":"            group\u003d\u0027event\u0027)"},{"line_number":244,"context_line":"        self.publisher \u003d test_publisher.TestPublisher(\"\")"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a5ae5dd_b071e379","line":241,"updated":"2016-02-09 10:01:46.000000000","message":"is that correct? Probably, \u0027etc/ceilometer/events/default_definitions.yaml\u0027","commit_id":"c2559b2648007309422cbbdd6ec636d67d67d8f2"}],"doc/source/events.rst":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"f482f6a729cb6be8b7408d4019684d2b4d3e74ae","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"In order to make it easier to allow users to extract what they need,"},{"line_number":95,"context_line":"the conversion from Notifications to Events is driven by a"},{"line_number":96,"context_line":"configuration file (specified by the flag definitions_cfg_ in"},{"line_number":97,"context_line":"ceilometer.conf) or set of configuration files in the folder"},{"line_number":98,"context_line":"(specified by the definitions_cfg_dir in ceilometer.conf)."},{"line_number":99,"context_line":""}],"source_content_type":"text/x-rst","patch_set":16,"id":"5a5ae5dd_b0948344","line":96,"updated":"2016-02-09 10:01:46.000000000","message":"I would add more details here as written in the commit message.","commit_id":"c2559b2648007309422cbbdd6ec636d67d67d8f2"}]}
