)]}'
{"ceilometer/api/controllers/v2.py":[{"author":{"_account_id":12119,"name":"Can ZHANG","email":"zhangcan@letv.com","username":"can_zhang"},"change_message_id":"d99d857cd694b6105cc03bd3b84c1ad9c7c47d3c","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                default\u003dTrue,"},{"line_number":66,"context_line":"                help\u003d\u0027Record alarm change events.\u0027"},{"line_number":67,"context_line":"                ),"},{"line_number":68,"context_line":"    cfg.IntOpt(\u0027quota_user_alarm\u0027,"},{"line_number":69,"context_line":"               default\u003d-1,"},{"line_number":70,"context_line":"               help\u003d\u0027Maximum number of alarms defined for a user.\u0027"},{"line_number":71,"context_line":"               \u0027-1 means no limitation.\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_ea54ef55","line":68,"updated":"2014-08-19 09:05:15.000000000","message":"maybe \"user_alarm_quota\" is a better name?","commit_id":"6ce1a30cc9c0484f3164d0fcfe8b0d52644d93ff"},{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"660b7b219d284047ca11312a91f136cff9affd0e","unresolved":false,"context_lines":[{"line_number":65,"context_line":"                default\u003dTrue,"},{"line_number":66,"context_line":"                help\u003d\u0027Record alarm change events.\u0027"},{"line_number":67,"context_line":"                ),"},{"line_number":68,"context_line":"    cfg.IntOpt(\u0027quota_user_alarm\u0027,"},{"line_number":69,"context_line":"               default\u003d-1,"},{"line_number":70,"context_line":"               help\u003d\u0027Maximum number of alarms defined for a user.\u0027"},{"line_number":71,"context_line":"               \u0027-1 means no limitation.\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_8eb706d8","line":68,"in_reply_to":"1abeadc6_ea54ef55","updated":"2014-08-19 12:48:57.000000000","message":"Done","commit_id":"6ce1a30cc9c0484f3164d0fcfe8b0d52644d93ff"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"21e16b3f4b88a0686a00656b986d2372d7add5d6","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                ),"},{"line_number":68,"context_line":"    cfg.IntOpt(\u0027quota_user_alarm\u0027,"},{"line_number":69,"context_line":"               default\u003d-1,"},{"line_number":70,"context_line":"               help\u003d\u0027Maximum number of alarms defined for a user.\u0027"},{"line_number":71,"context_line":"               \u0027-1 means no limitation.\u0027),"},{"line_number":72,"context_line":"    cfg.IntOpt(\u0027quota_project_alarm\u0027,"},{"line_number":73,"context_line":"               default\u003d-1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_e4398342","line":70,"updated":"2014-08-19 10:14:59.000000000","message":"One additional space is needed in the end of the string.","commit_id":"6ce1a30cc9c0484f3164d0fcfe8b0d52644d93ff"},{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"660b7b219d284047ca11312a91f136cff9affd0e","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                ),"},{"line_number":68,"context_line":"    cfg.IntOpt(\u0027quota_user_alarm\u0027,"},{"line_number":69,"context_line":"               default\u003d-1,"},{"line_number":70,"context_line":"               help\u003d\u0027Maximum number of alarms defined for a user.\u0027"},{"line_number":71,"context_line":"               \u0027-1 means no limitation.\u0027),"},{"line_number":72,"context_line":"    cfg.IntOpt(\u0027quota_project_alarm\u0027,"},{"line_number":73,"context_line":"               default\u003d-1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_aeba02be","line":70,"in_reply_to":"1abeadc6_e4398342","updated":"2014-08-19 12:48:57.000000000","message":"Done","commit_id":"6ce1a30cc9c0484f3164d0fcfe8b0d52644d93ff"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"21e16b3f4b88a0686a00656b986d2372d7add5d6","unresolved":false,"context_lines":[{"line_number":71,"context_line":"               \u0027-1 means no limitation.\u0027),"},{"line_number":72,"context_line":"    cfg.IntOpt(\u0027quota_project_alarm\u0027,"},{"line_number":73,"context_line":"               default\u003d-1,"},{"line_number":74,"context_line":"               help\u003d\u0027Maximum number of alarms defined for a project.\u0027"},{"line_number":75,"context_line":"               \u0027-1 means no limitation.\u0027),"},{"line_number":76,"context_line":"]"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_a416aba5","line":74,"updated":"2014-08-19 10:14:59.000000000","message":"ditto","commit_id":"6ce1a30cc9c0484f3164d0fcfe8b0d52644d93ff"},{"author":{"_account_id":7020,"name":"Joe Hakim Rahme","email":"jhakimra@redhat.com","username":"rahmu"},"change_message_id":"660b7b219d284047ca11312a91f136cff9affd0e","unresolved":false,"context_lines":[{"line_number":71,"context_line":"               \u0027-1 means no limitation.\u0027),"},{"line_number":72,"context_line":"    cfg.IntOpt(\u0027quota_project_alarm\u0027,"},{"line_number":73,"context_line":"               default\u003d-1,"},{"line_number":74,"context_line":"               help\u003d\u0027Maximum number of alarms defined for a project.\u0027"},{"line_number":75,"context_line":"               \u0027-1 means no limitation.\u0027),"},{"line_number":76,"context_line":"]"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_ceb1fee2","line":74,"in_reply_to":"1abeadc6_a416aba5","updated":"2014-08-19 12:48:57.000000000","message":"Done","commit_id":"6ce1a30cc9c0484f3164d0fcfe8b0d52644d93ff"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e1fff3602be4393d54a6f89ff3236f88d1d8b1fd","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                help\u003d\u0027Record alarm change events.\u0027"},{"line_number":67,"context_line":"                ),"},{"line_number":68,"context_line":"    cfg.IntOpt(\u0027user_alarm_quota\u0027,"},{"line_number":69,"context_line":"               default\u003d-1,"},{"line_number":70,"context_line":"               help\u003d\u0027Maximum number of alarms defined for a user. \u0027"},{"line_number":71,"context_line":"               \u0027-1 means no limitation.\u0027),"},{"line_number":72,"context_line":"    cfg.IntOpt(\u0027project_alarm_quota\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_4d2a537f","line":69,"updated":"2014-08-19 13:23:28.000000000","message":"Having the default at None would be cleaner I think.","commit_id":"7fdfed945a16596c9e6046b686c119b480a26aeb"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e1fff3602be4393d54a6f89ff3236f88d1d8b1fd","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            status_code\u003d403)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"def _check_alarm_quotas(conn, data):"},{"line_number":122,"context_line":"    \"\"\"Returns True if an alarm is within the set quotas, False otherwise."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    :param conn: a backend connection object"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_ed4b1f57","line":121,"updated":"2014-08-19 13:23:28.000000000","message":"\"is_over_quota(conn, project_id, user_id)\" would be a better signature IMHO.","commit_id":"7fdfed945a16596c9e6046b686c119b480a26aeb"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"8cacbaba180cd39a85d9e50c6a116ca7636b9b29","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"def is_over_quota(conn, project_id, user_id):"},{"line_number":122,"context_line":"    \"\"\"Returns True if an alarm is within the set quotas, False otherwise."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    :param conn: a backend connection object"},{"line_number":125,"context_line":"    :param data: an alarm within the request body"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_9ccd25ba","line":122,"updated":"2014-08-21 10:38:58.000000000","message":"The description says the reverse of the method signature,\n\nI think a method named is_over_quota should return True, if the quota is exceeded","commit_id":"4bd89047b6e91ce68656fea9b18c918cf7c30b7b"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"8cacbaba180cd39a85d9e50c6a116ca7636b9b29","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    user_check \u003d True"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    try:"},{"line_number":131,"context_line":"        user_alarm_quota \u003d int(cfg.CONF.alarm.user_alarm_quota)"},{"line_number":132,"context_line":"        user_alarms \u003d list(conn.get_alarms(user\u003duser_id))"},{"line_number":133,"context_line":"        user_check \u003d len(user_alarms) \u003c user_alarm_quota"},{"line_number":134,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_fc31b9ed","line":131,"updated":"2014-08-21 10:38:58.000000000","message":"We don\u0027t need to cast a IntOpt to int","commit_id":"4bd89047b6e91ce68656fea9b18c918cf7c30b7b"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"8cacbaba180cd39a85d9e50c6a116ca7636b9b29","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        user_alarms \u003d list(conn.get_alarms(user\u003duser_id))"},{"line_number":133,"context_line":"        user_check \u003d len(user_alarms) \u003c user_alarm_quota"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    except TypeError:"},{"line_number":136,"context_line":"        # if user_alarm_quota is None"},{"line_number":137,"context_line":"        user_check \u003d True"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_411aca7d","line":135,"updated":"2014-08-21 10:38:58.000000000","message":"We should use \n\nif cfg.CONF.alarm.user_alarm_quota is not None:\n    ... alarm check ...\nelse\n    ... user_check \u003d False\n\notherwise if something unexpected raise TypeError in get_alarms, the quota check will return True, instead of raising a 500 error","commit_id":"4bd89047b6e91ce68656fea9b18c918cf7c30b7b"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"8cacbaba180cd39a85d9e50c6a116ca7636b9b29","unresolved":false,"context_lines":[{"line_number":2158,"context_line":"        # Check if there\u0027s room for one more alarm"},{"line_number":2159,"context_line":"        if not is_over_quota(conn, data.project_id, data.user_id):"},{"line_number":2160,"context_line":"            raise OverQuota(data)"},{"line_number":2161,"context_line":""},{"line_number":2162,"context_line":"        data.timestamp \u003d now"},{"line_number":2163,"context_line":"        data.state_timestamp \u003d now"},{"line_number":2164,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_dcc23d84","line":2161,"updated":"2014-08-21 10:38:58.000000000","message":"The sense is weird, \"if not is_over_quota() -\u003e raise OverQuota()\"","commit_id":"4bd89047b6e91ce68656fea9b18c918cf7c30b7b"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c31e006805a404da7d9d7dd7c6cf9cb9d0f100ab","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        project_alarms \u003d list(conn.get_alarms(project\u003dproject_id))"},{"line_number":139,"context_line":"        project_check \u003d len(project_alarms) \u003e\u003d project_alarm_quota"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    return project_check or user_check"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"class AdvEnum(wtypes.wsproperty):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_dfc80159","line":141,"updated":"2014-08-25 14:13:12.000000000","message":"It looks like you could optimize the check by stopping right after user_check if it\u0027s over quota. That would avoid doing *always* 2 get_alarms().","commit_id":"144165f289864ee2c979707623f5082d0050fadd"}]}
