)]}'
{"aodhclient/utils.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"2d9ee47140a372e36f0b70b0ae99bd4d09b8657a","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                     if v is not None])"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"def format_filters(params, parse_semicolon\u003dTrue):"},{"line_number":131,"context_line":"    \"\"\"Reformat parameters into dict of format expected by the API.\"\"\""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    if not params:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_86778439","line":130,"updated":"2016-03-14 11:19:22.000000000","message":"Put that where it\u0027s used.","commit_id":"135bcdbe796e2eee669e6028767ff47a36d095fc"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"f07b7fccc6d4a9a2e8866e74f9c865f05884009e","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                     if v is not None])"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"def format_filters(params, parse_semicolon\u003dTrue):"},{"line_number":131,"context_line":"    \"\"\"Reformat parameters into dict of format expected by the API.\"\"\""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    if not params:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_db68168a","line":130,"in_reply_to":"3afc51ec_86778439","updated":"2016-03-15 03:03:23.000000000","message":"will do","commit_id":"135bcdbe796e2eee669e6028767ff47a36d095fc"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"2d9ee47140a372e36f0b70b0ae99bd4d09b8657a","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    if not params:"},{"line_number":134,"context_line":"        return {}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    if parse_semicolon:"},{"line_number":137,"context_line":"        # expect multiple invocations of --parameters but fall back"},{"line_number":138,"context_line":"        # to ; delimited if only one --parameters is specified"},{"line_number":139,"context_line":"        if len(params) \u003d\u003d 1:"},{"line_number":140,"context_line":"            params \u003d params[0].split(\u0027;\u0027)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    parameters \u003d {}"},{"line_number":143,"context_line":"    for p in params:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_e6ae4897","line":140,"range":{"start_line":136,"start_character":1,"end_line":140,"end_character":41},"updated":"2016-03-14 11:19:22.000000000","message":"I say no to this! :)","commit_id":"135bcdbe796e2eee669e6028767ff47a36d095fc"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"f07b7fccc6d4a9a2e8866e74f9c865f05884009e","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    if not params:"},{"line_number":134,"context_line":"        return {}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    if parse_semicolon:"},{"line_number":137,"context_line":"        # expect multiple invocations of --parameters but fall back"},{"line_number":138,"context_line":"        # to ; delimited if only one --parameters is specified"},{"line_number":139,"context_line":"        if len(params) \u003d\u003d 1:"},{"line_number":140,"context_line":"            params \u003d params[0].split(\u0027;\u0027)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    parameters \u003d {}"},{"line_number":143,"context_line":"    for p in params:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_1b09dedd","line":140,"range":{"start_line":136,"start_character":1,"end_line":140,"end_character":41},"in_reply_to":"3afc51ec_e6ae4897","updated":"2016-03-15 03:03:23.000000000","message":"will do :)","commit_id":"135bcdbe796e2eee669e6028767ff47a36d095fc"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"2d9ee47140a372e36f0b70b0ae99bd4d09b8657a","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    parameters \u003d {}"},{"line_number":143,"context_line":"    for p in params:"},{"line_number":144,"context_line":"        try:"},{"line_number":145,"context_line":"            (n, v) \u003d p.split(\u0027\u003d\u0027, 1)"},{"line_number":146,"context_line":"        except ValueError:"},{"line_number":147,"context_line":"            msg \u003d \u0027Malformed parameter(%s). Use the key\u003dvalue format.\u0027 % p"},{"line_number":148,"context_line":"            raise ValueError(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_86ae6483","line":145,"updated":"2016-03-14 11:19:22.000000000","message":"use .partition() to avoid ValueError entirely.","commit_id":"135bcdbe796e2eee669e6028767ff47a36d095fc"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"f07b7fccc6d4a9a2e8866e74f9c865f05884009e","unresolved":false,"context_lines":[{"line_number":142,"context_line":"    parameters \u003d {}"},{"line_number":143,"context_line":"    for p in params:"},{"line_number":144,"context_line":"        try:"},{"line_number":145,"context_line":"            (n, v) \u003d p.split(\u0027\u003d\u0027, 1)"},{"line_number":146,"context_line":"        except ValueError:"},{"line_number":147,"context_line":"            msg \u003d \u0027Malformed parameter(%s). Use the key\u003dvalue format.\u0027 % p"},{"line_number":148,"context_line":"            raise ValueError(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_5b13660d","line":145,"in_reply_to":"3afc51ec_86ae6483","updated":"2016-03-15 03:03:23.000000000","message":"Done","commit_id":"135bcdbe796e2eee669e6028767ff47a36d095fc"}],"aodhclient/v2/alarm.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b654981fd06fbf28600200b7e826ab51f19b4e64","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @staticmethod"},{"line_number":25,"context_line":"    def _filtersdict_to_url(filters):"},{"line_number":26,"context_line":"        if not filters:"},{"line_number":27,"context_line":"            return \u0027\u0027"},{"line_number":28,"context_line":"        urls \u003d []"},{"line_number":29,"context_line":"        for k, v in sorted(filters.items()):"},{"line_number":30,"context_line":"            if isinstance(v, list):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afc51ec_d3fab374","line":27,"range":{"start_line":26,"start_character":8,"end_line":27,"end_character":20},"updated":"2016-03-15 09:39:45.000000000","message":"Useless, just remove it, it\u0027ll simplify the code :)","commit_id":"d1f5b92d29fc604b933c3a5afbd3f749c8d9f083"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f40b824221494af468d61ce47f22f06a68ada2b4","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            urls.append(url)"},{"line_number":36,"context_line":"        return \u0027\u0026\u0027.join(urls)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def list(self, query\u003dNone, filters\u003dNone):"},{"line_number":39,"context_line":"        \"\"\"List alarms\"\"\""},{"line_number":40,"context_line":"        if query:"},{"line_number":41,"context_line":"            query \u003d {\u0027filter\u0027: query}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afc51ec_c19820c3","line":38,"updated":"2016-03-15 09:01:46.000000000","message":"bonus ask :p An example of each parameters here would awesome to understand the difference from the python lib API PoV.\nespecially for filter because the lib API is not exactly the same as the Server side API (your beautiful dict vs the server ugly query string).","commit_id":"d1f5b92d29fc604b933c3a5afbd3f749c8d9f083"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"95973c127000cdc2b01c2543ff87a2671a84064f","unresolved":false,"context_lines":[{"line_number":35,"context_line":"            urls.append(url)"},{"line_number":36,"context_line":"        return \u0027\u0026\u0027.join(urls)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def list(self, query\u003dNone, filters\u003dNone):"},{"line_number":39,"context_line":"        \"\"\"List alarms\"\"\""},{"line_number":40,"context_line":"        if query:"},{"line_number":41,"context_line":"            query \u003d {\u0027filter\u0027: query}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afc51ec_93566bcc","line":38,"in_reply_to":"3afc51ec_c19820c3","updated":"2016-03-15 09:30:05.000000000","message":"agree, this is really necessary ;-)","commit_id":"d1f5b92d29fc604b933c3a5afbd3f749c8d9f083"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b654981fd06fbf28600200b7e826ab51f19b4e64","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                              data\u003djsonutils.dumps(query)).json()"},{"line_number":46,"context_line":"        else:"},{"line_number":47,"context_line":"            filters_url \u003d self._filtersdict_to_url(filters)"},{"line_number":48,"context_line":"            url \u003d (\"?\".join([self.url, filters_url]) if filters_url else"},{"line_number":49,"context_line":"                   self.url)"},{"line_number":50,"context_line":"            return self._get(url).json()"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3afc51ec_d34113ab","line":48,"range":{"start_line":48,"start_character":19,"end_line":48,"end_character":27},"updated":"2016-03-15 09:39:45.000000000","message":"I find it odd and confusing to use join() with only two items. Just go ahead and concat with +","commit_id":"d1f5b92d29fc604b933c3a5afbd3f749c8d9f083"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7417935023c2f780eba85c051aae2c4a70105718","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @staticmethod"},{"line_number":25,"context_line":"    def _filtersdict_to_url(filters):"},{"line_number":26,"context_line":"        if not filters:"},{"line_number":27,"context_line":"            return"},{"line_number":28,"context_line":"        urls \u003d []"},{"line_number":29,"context_line":"        for k, v in sorted(filters.items()):"},{"line_number":30,"context_line":"            url \u003d \"q.field\u003d%s\u0026q.op\u003deq\u0026q.value\u003d%s\" % (k, v)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_07909e42","line":27,"range":{"start_line":26,"start_character":8,"end_line":27,"end_character":18},"updated":"2016-03-16 12:40:48.000000000","message":"useless :)","commit_id":"76afdfb4508efd2bd0328ecf3ec82bebb8d3689c"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"c20bae3516920fdb1474f449c8bd3c1f72aaa32d","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @staticmethod"},{"line_number":25,"context_line":"    def _filtersdict_to_url(filters):"},{"line_number":26,"context_line":"        if not filters:"},{"line_number":27,"context_line":"            return"},{"line_number":28,"context_line":"        urls \u003d []"},{"line_number":29,"context_line":"        for k, v in sorted(filters.items()):"},{"line_number":30,"context_line":"            url \u003d \"q.field\u003d%s\u0026q.op\u003deq\u0026q.value\u003d%s\" % (k, v)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_efd720bd","line":27,"range":{"start_line":26,"start_character":8,"end_line":27,"end_character":18},"in_reply_to":"1af94dfe_07909e42","updated":"2016-03-17 01:32:22.000000000","message":"I considered this AlarmManager may be imported by other projects, they may use list(filters\u003dNone) (we may need to make the interfaces more robust used by others), that will broken this because NoneType object hasn\u0027t items attributes. ;-)","commit_id":"76afdfb4508efd2bd0328ecf3ec82bebb8d3689c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"8327fe7f5907e1017c8eaf84f11d571cbd9862dc","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @staticmethod"},{"line_number":25,"context_line":"    def _filtersdict_to_url(filters):"},{"line_number":26,"context_line":"        if not filters:"},{"line_number":27,"context_line":"            return"},{"line_number":28,"context_line":"        urls \u003d []"},{"line_number":29,"context_line":"        for k, v in sorted(filters.items()):"},{"line_number":30,"context_line":"            url \u003d \"q.field\u003d%s\u0026q.op\u003deq\u0026q.value\u003d%s\" % (k, v)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_08223800","line":27,"range":{"start_line":26,"start_character":8,"end_line":27,"end_character":18},"in_reply_to":"1af94dfe_efd720bd","updated":"2016-03-17 09:42:14.000000000","message":"oh right, you should actually filter that in list() :)","commit_id":"76afdfb4508efd2bd0328ecf3ec82bebb8d3689c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"1c6c68aeb8de2a9314ab9690e457cced5ba81b16","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    @staticmethod"},{"line_number":25,"context_line":"    def _filtersdict_to_url(filters):"},{"line_number":26,"context_line":"        if not filters:"},{"line_number":27,"context_line":"            return"},{"line_number":28,"context_line":"        urls \u003d []"},{"line_number":29,"context_line":"        for k, v in sorted(filters.items()):"},{"line_number":30,"context_line":"            url \u003d \"q.field\u003d%s\u0026q.op\u003deq\u0026q.value\u003d%s\" % (k, v)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_eb30a6ea","line":27,"range":{"start_line":26,"start_character":8,"end_line":27,"end_character":18},"updated":"2016-03-17 09:44:33.000000000","message":"I\u0027d prefer filter that outside but I\u0027m picky :)","commit_id":"941ff2da8c9db4a75417bb40c60c93621c62c4ff"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"f6c41f3c66f7861bc9c70bbdca07ccdbaa264f65","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def list(self, query\u003dNone, filters\u003dNone):"},{"line_number":33,"context_line":"        \"\"\"List alarms."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        :param query: a json format complex query expression, like this:"},{"line_number":36,"context_line":"        \u0027{\"\u003d\":{\"type\":\"threshold\"}}\u0027, this expression is used to query all"},{"line_number":37,"context_line":"        the threshold type alarms."},{"line_number":38,"context_line":"        :type query: json"},{"line_number":39,"context_line":"        :param filters: a dict includes filters parameters, for example,"},{"line_number":40,"context_line":"        {\u0027type\u0027: \u0027threshold\u0027, \u0027severity\u0027: \u0027low\u0027} represent filters to query"},{"line_number":41,"context_line":"        alarms with type\u003d\u0027threshold\u0027 and severity\u003d\u0027low\u0027."},{"line_number":42,"context_line":"        :type filters: dict"},{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":"        if query:"},{"line_number":45,"context_line":"            query \u003d {\u0027filter\u0027: query}"},{"line_number":46,"context_line":"            url \u003d \"v2/query/alarms\""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa0719c6_7a11a35c","line":43,"range":{"start_line":35,"start_character":0,"end_line":43,"end_character":11},"updated":"2016-03-24 12:18:05.000000000","message":"these looks messy, maybe add some indent for the second line and third line of the comments? like this:\n:param query: \n     \u0027{\"\u003d\":{\"type\":\"threshold\"}}\n     xxxxxx","commit_id":"36b8c26680f17b60317ff8cd4e2ce5a2e6f5ddcc"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"3a33cd3a5af60999c5dff50ea093682d60d568b3","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def list(self, query\u003dNone, filters\u003dNone):"},{"line_number":33,"context_line":"        \"\"\"List alarms."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        :param query: a json format complex query expression, like this:"},{"line_number":36,"context_line":"        \u0027{\"\u003d\":{\"type\":\"threshold\"}}\u0027, this expression is used to query all"},{"line_number":37,"context_line":"        the threshold type alarms."},{"line_number":38,"context_line":"        :type query: json"},{"line_number":39,"context_line":"        :param filters: a dict includes filters parameters, for example,"},{"line_number":40,"context_line":"        {\u0027type\u0027: \u0027threshold\u0027, \u0027severity\u0027: \u0027low\u0027} represent filters to query"},{"line_number":41,"context_line":"        alarms with type\u003d\u0027threshold\u0027 and severity\u003d\u0027low\u0027."},{"line_number":42,"context_line":"        :type filters: dict"},{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":"        if query:"},{"line_number":45,"context_line":"            query \u003d {\u0027filter\u0027: query}"},{"line_number":46,"context_line":"            url \u003d \"v2/query/alarms\""}],"source_content_type":"text/x-python","patch_set":9,"id":"da0c15f0_e1cb081d","line":43,"range":{"start_line":35,"start_character":0,"end_line":43,"end_character":11},"in_reply_to":"fa0719c6_36661f51","updated":"2016-03-25 03:11:44.000000000","message":"thanks for your review, done","commit_id":"36b8c26680f17b60317ff8cd4e2ce5a2e6f5ddcc"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"90befd23fcd43716d0bd559729cf95cf3c148bc7","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def list(self, query\u003dNone, filters\u003dNone):"},{"line_number":33,"context_line":"        \"\"\"List alarms."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        :param query: a json format complex query expression, like this:"},{"line_number":36,"context_line":"        \u0027{\"\u003d\":{\"type\":\"threshold\"}}\u0027, this expression is used to query all"},{"line_number":37,"context_line":"        the threshold type alarms."},{"line_number":38,"context_line":"        :type query: json"},{"line_number":39,"context_line":"        :param filters: a dict includes filters parameters, for example,"},{"line_number":40,"context_line":"        {\u0027type\u0027: \u0027threshold\u0027, \u0027severity\u0027: \u0027low\u0027} represent filters to query"},{"line_number":41,"context_line":"        alarms with type\u003d\u0027threshold\u0027 and severity\u003d\u0027low\u0027."},{"line_number":42,"context_line":"        :type filters: dict"},{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":"        if query:"},{"line_number":45,"context_line":"            query \u003d {\u0027filter\u0027: query}"},{"line_number":46,"context_line":"            url \u003d \"v2/query/alarms\""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa0719c6_36661f51","line":43,"range":{"start_line":35,"start_character":0,"end_line":43,"end_character":11},"in_reply_to":"fa0719c6_7a11a35c","updated":"2016-03-24 13:57:33.000000000","message":"Sphinx is a little bit tricky on indentation, here is an example how it looks in other places: https://github.com/openstack/python-ceilometerclient/blob/master/ceilometerclient/client.py#L434\n\nIt looks like this in the generated code reference: http://docs.openstack.org/developer/python-ceilometerclient/ref/client.html","commit_id":"36b8c26680f17b60317ff8cd4e2ce5a2e6f5ddcc"}],"aodhclient/v2/alarm_cli.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"2d9ee47140a372e36f0b70b0ae99bd4d09b8657a","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                                 \"[{field_name: direction}, {field_name:\""},{"line_number":48,"context_line":"                                 \"direction}] The direction is one of: \""},{"line_number":49,"context_line":"                                 \"[\u0027asc\u0027, \u0027desc\u0027].\"),"},{"line_number":50,"context_line":"        parser.add_argument(\u0027--filter\u0027, dest\u003d\u0027filter\u0027,"},{"line_number":51,"context_line":"                            metavar\u003d\u0027\u003cKEY1\u003dVALUE1;KEY2\u003dVALUE2...\u003e\u0027,"},{"line_number":52,"context_line":"                            action\u003d\u0027append\u0027,"},{"line_number":53,"context_line":"                            help\u003d\u0027Filter parameters to apply on returned\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_c6886c25","line":50,"updated":"2016-03-14 11:19:22.000000000","message":"use a type\u003d here to directly convert to the right format.","commit_id":"135bcdbe796e2eee669e6028767ff47a36d095fc"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"f07b7fccc6d4a9a2e8866e74f9c865f05884009e","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                                 \"[{field_name: direction}, {field_name:\""},{"line_number":48,"context_line":"                                 \"direction}] The direction is one of: \""},{"line_number":49,"context_line":"                                 \"[\u0027asc\u0027, \u0027desc\u0027].\"),"},{"line_number":50,"context_line":"        parser.add_argument(\u0027--filter\u0027, dest\u003d\u0027filter\u0027,"},{"line_number":51,"context_line":"                            metavar\u003d\u0027\u003cKEY1\u003dVALUE1;KEY2\u003dVALUE2...\u003e\u0027,"},{"line_number":52,"context_line":"                            action\u003d\u0027append\u0027,"},{"line_number":53,"context_line":"                            help\u003d\u0027Filter parameters to apply on returned\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_fb04f2c0","line":50,"in_reply_to":"3afc51ec_c6886c25","updated":"2016-03-15 03:03:23.000000000","message":"will update this :)","commit_id":"135bcdbe796e2eee669e6028767ff47a36d095fc"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b654981fd06fbf28600200b7e826ab51f19b4e64","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            {\"key1\":value1, \"key2\":value2, ...}"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if not params:"},{"line_number":50,"context_line":"            return {}"},{"line_number":51,"context_line":"        parameters \u003d {}"},{"line_number":52,"context_line":"        for p in params:"},{"line_number":53,"context_line":"            key, eq_op, value \u003d p.partition(\u0027\u003d\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afc51ec_330b1790","line":50,"range":{"start_line":49,"start_character":8,"end_line":50,"end_character":21},"updated":"2016-03-15 09:39:45.000000000","message":"Useless","commit_id":"d1f5b92d29fc604b933c3a5afbd3f749c8d9f083"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b654981fd06fbf28600200b7e826ab51f19b4e64","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if not params:"},{"line_number":50,"context_line":"            return {}"},{"line_number":51,"context_line":"        parameters \u003d {}"},{"line_number":52,"context_line":"        for p in params:"},{"line_number":53,"context_line":"            key, eq_op, value \u003d p.partition(\u0027\u003d\u0027)"},{"line_number":54,"context_line":"            if not eq_op:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afc51ec_b3d0c7f7","line":51,"range":{"start_line":51,"start_character":8,"end_line":51,"end_character":23},"updated":"2016-03-15 09:39:45.000000000","message":"parameters \u003d collections.defaultdict(list)","commit_id":"d1f5b92d29fc604b933c3a5afbd3f749c8d9f083"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b654981fd06fbf28600200b7e826ab51f19b4e64","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                msg \u003d \u0027Malformed parameter(%s). Use the key\u003dvalue format.\u0027 % p"},{"line_number":56,"context_line":"                raise ValueError(msg)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"            if key not in parameters:"},{"line_number":59,"context_line":"                parameters[key] \u003d value"},{"line_number":60,"context_line":"            else:"},{"line_number":61,"context_line":"                if not isinstance(parameters[key], list):"},{"line_number":62,"context_line":"                    parameters[key] \u003d [parameters[key]]"},{"line_number":63,"context_line":"                parameters[key].append(value)"},{"line_number":64,"context_line":"        return parameters"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afc51ec_f3d6cfef","line":63,"range":{"start_line":58,"start_character":12,"end_line":63,"end_character":45},"updated":"2016-03-15 09:39:45.000000000","message":"parameter[key].append(value)","commit_id":"d1f5b92d29fc604b933c3a5afbd3f749c8d9f083"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7417935023c2f780eba85c051aae2c4a70105718","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            {\"key1\":value1, \"key2\":value2, ...}"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if not params:"},{"line_number":50,"context_line":"            return {}"},{"line_number":51,"context_line":"        parameters \u003d dict()"},{"line_number":52,"context_line":"        for p in params:"},{"line_number":53,"context_line":"            key, eq_op, value \u003d p.partition(\u0027\u003d\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_47e8e6b4","line":50,"range":{"start_line":49,"start_character":8,"end_line":50,"end_character":21},"updated":"2016-03-16 12:40:48.000000000","message":"useless","commit_id":"76afdfb4508efd2bd0328ecf3ec82bebb8d3689c"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"c20bae3516920fdb1474f449c8bd3c1f72aaa32d","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            {\"key1\":value1, \"key2\":value2, ...}"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if not params:"},{"line_number":50,"context_line":"            return {}"},{"line_number":51,"context_line":"        parameters \u003d dict()"},{"line_number":52,"context_line":"        for p in params:"},{"line_number":53,"context_line":"            key, eq_op, value \u003d p.partition(\u0027\u003d\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_cf0d0492","line":50,"range":{"start_line":49,"start_character":8,"end_line":50,"end_character":21},"in_reply_to":"1af94dfe_47e8e6b4","updated":"2016-03-17 01:32:22.000000000","message":"if we didn\u0027t specified --filter, the input param will be None, maybe it is better to return a {}  ;)","commit_id":"76afdfb4508efd2bd0328ecf3ec82bebb8d3689c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"8327fe7f5907e1017c8eaf84f11d571cbd9862dc","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            {\"key1\":value1, \"key2\":value2, ...}"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        if not params:"},{"line_number":50,"context_line":"            return {}"},{"line_number":51,"context_line":"        parameters \u003d dict()"},{"line_number":52,"context_line":"        for p in params:"},{"line_number":53,"context_line":"            key, eq_op, value \u003d p.partition(\u0027\u003d\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_e81c2cc3","line":50,"range":{"start_line":49,"start_character":8,"end_line":50,"end_character":21},"in_reply_to":"1af94dfe_cf0d0492","updated":"2016-03-17 09:42:14.000000000","message":"same as previous file :)","commit_id":"76afdfb4508efd2bd0328ecf3ec82bebb8d3689c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7417935023c2f780eba85c051aae2c4a70105718","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                            metavar\u003d\u0027\u003cKEY1\u003dVALUE1;KEY2\u003dVALUE2...\u003e\u0027,"},{"line_number":76,"context_line":"                            action\u003d\u0027append\u0027,"},{"line_number":77,"context_line":"                            help\u003d\u0027Filter parameters to apply on returned\u0027"},{"line_number":78,"context_line":"                                 \u0027 alarms.\u0027)"},{"line_number":79,"context_line":"        return parser"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_27103aa8","line":78,"updated":"2016-03-16 12:40:48.000000000","message":"Use a custom type here to parse directly.","commit_id":"76afdfb4508efd2bd0328ecf3ec82bebb8d3689c"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"c20bae3516920fdb1474f449c8bd3c1f72aaa32d","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                            metavar\u003d\u0027\u003cKEY1\u003dVALUE1;KEY2\u003dVALUE2...\u003e\u0027,"},{"line_number":76,"context_line":"                            action\u003d\u0027append\u0027,"},{"line_number":77,"context_line":"                            help\u003d\u0027Filter parameters to apply on returned\u0027"},{"line_number":78,"context_line":"                                 \u0027 alarms.\u0027)"},{"line_number":79,"context_line":"        return parser"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_efc60048","line":78,"in_reply_to":"1af94dfe_27103aa8","updated":"2016-03-17 01:32:22.000000000","message":"Hi jd, it seems we\u0027d better don\u0027t use \"type\u003d\" here, because this --filter parameter support multiple specifying, if we use \"type\u003dfunc\", the func only handle every one input filter... if we want to use type\u003dfunc, the func can only used to do \u0027foo\u003dbar\u0027 -\u003e {\u0027foo\u0027: \u0027bar\u0027}, and we need another method to construct a dict that that is used to make [{\u0027foo1\u0027:\u0027bar1\u0027}, {\u0027foo2\u0027:\u0027bar2\u0027}] -\u003e {\u0027foo1\u0027:\u0027bar1\u0027, \u0027foo2\u0027:\u0027bar2\u0027}","commit_id":"76afdfb4508efd2bd0328ecf3ec82bebb8d3689c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"8327fe7f5907e1017c8eaf84f11d571cbd9862dc","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                            metavar\u003d\u0027\u003cKEY1\u003dVALUE1;KEY2\u003dVALUE2...\u003e\u0027,"},{"line_number":76,"context_line":"                            action\u003d\u0027append\u0027,"},{"line_number":77,"context_line":"                            help\u003d\u0027Filter parameters to apply on returned\u0027"},{"line_number":78,"context_line":"                                 \u0027 alarms.\u0027)"},{"line_number":79,"context_line":"        return parser"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1af94dfe_883c88e3","line":78,"in_reply_to":"1af94dfe_efc60048","updated":"2016-03-17 09:42:14.000000000","message":"Yeah but I think it\u0027s good.\n\nYour function to merge is as simple as:\n\nreduce(lambda a, b: dict(a, **b), x)","commit_id":"76afdfb4508efd2bd0328ecf3ec82bebb8d3689c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"1c6c68aeb8de2a9314ab9690e457cced5ba81b16","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        filters \u003d dict(parsed_args.filter) if parsed_args.filter else None"},{"line_number":68,"context_line":"        if query and filters:"},{"line_number":69,"context_line":"            self.parser.error(\u0027Query parameter and filter parameter cannot be\u0027"},{"line_number":70,"context_line":"                              \u0027specified meanwhile\u0027)"},{"line_number":71,"context_line":"        alarms \u003d self.app.client.alarm.list(query\u003dquery, filters\u003dfilters)"},{"line_number":72,"context_line":"        return utils.list2cols(ALARM_LIST_COLS, alarms)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1af94dfe_0b1fd25f","line":70,"range":{"start_line":70,"start_character":41,"end_line":70,"end_character":50},"updated":"2016-03-17 09:44:33.000000000","message":"I\u0027m not sure meanwhile is correct here, but as I\u0027m not a native English speaker, I\u0027ll let someone else chime in.","commit_id":"941ff2da8c9db4a75417bb40c60c93621c62c4ff"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"e784a35e951a65bd98713299ca2e8a0378cac98c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        filters \u003d dict(parsed_args.filter) if parsed_args.filter else None"},{"line_number":68,"context_line":"        if query and filters:"},{"line_number":69,"context_line":"            self.parser.error(\u0027Query parameter and filter parameter cannot be\u0027"},{"line_number":70,"context_line":"                              \u0027specified at the same time\u0027)"},{"line_number":71,"context_line":"        alarms \u003d self.app.client.alarm.list(query\u003dquery, filters\u003dfilters)"},{"line_number":72,"context_line":"        return utils.list2cols(ALARM_LIST_COLS, alarms)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa0719c6_2618b8d2","line":70,"range":{"start_line":70,"start_character":57,"end_line":70,"end_character":58},"updated":"2016-03-24 11:11:10.000000000","message":"\u0027.\u0027 is missing from the end of the sentence.","commit_id":"bf0653d7bcd206363f32402c1d07d0133958662d"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"e784a35e951a65bd98713299ca2e8a0378cac98c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        filters \u003d dict(parsed_args.filter) if parsed_args.filter else None"},{"line_number":68,"context_line":"        if query and filters:"},{"line_number":69,"context_line":"            self.parser.error(\u0027Query parameter and filter parameter cannot be\u0027"},{"line_number":70,"context_line":"                              \u0027specified at the same time\u0027)"},{"line_number":71,"context_line":"        alarms \u003d self.app.client.alarm.list(query\u003dquery, filters\u003dfilters)"},{"line_number":72,"context_line":"        return utils.list2cols(ALARM_LIST_COLS, alarms)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa0719c6_260a788a","line":70,"range":{"start_line":70,"start_character":30,"end_line":70,"end_character":31},"updated":"2016-03-24 11:11:10.000000000","message":"Whitespace is missing from here.","commit_id":"bf0653d7bcd206363f32402c1d07d0133958662d"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"5102169206a280fb1340dd70fbb7fb25e50de559","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        filters \u003d dict(parsed_args.filter) if parsed_args.filter else None"},{"line_number":68,"context_line":"        if query and filters:"},{"line_number":69,"context_line":"            self.parser.error(\u0027Query parameter and filter parameter cannot be\u0027"},{"line_number":70,"context_line":"                              \u0027specified at the same time\u0027)"},{"line_number":71,"context_line":"        alarms \u003d self.app.client.alarm.list(query\u003dquery, filters\u003dfilters)"},{"line_number":72,"context_line":"        return utils.list2cols(ALARM_LIST_COLS, alarms)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa0719c6_54b636f9","line":70,"range":{"start_line":70,"start_character":57,"end_line":70,"end_character":58},"in_reply_to":"fa0719c6_2618b8d2","updated":"2016-03-24 11:38:04.000000000","message":"thanks for your careful review, will fix :)","commit_id":"bf0653d7bcd206363f32402c1d07d0133958662d"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"caf510d93f56e21c4ac545bfe8a75b9c0985102a","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        else:"},{"line_number":68,"context_line":"            query \u003d None"},{"line_number":69,"context_line":"        filters \u003d dict(parsed_args.filter) if parsed_args.filter else None"},{"line_number":70,"context_line":"        if query and filters:"},{"line_number":71,"context_line":"            self.parser.error(\u0027Query parameter and filter parameter cannot be\u0027"},{"line_number":72,"context_line":"                              \u0027 specified at the same time.\u0027)"},{"line_number":73,"context_line":"        alarms \u003d self.app.client.alarm.list(query\u003dquery, filters\u003dfilters)"},{"line_number":74,"context_line":"        return utils.list2cols(ALARM_LIST_COLS, alarms)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da0c15f0_84a05592","line":72,"range":{"start_line":70,"start_character":8,"end_line":72,"end_character":61},"updated":"2016-03-25 08:17:19.000000000","message":"Use argparse exclusive option feature.","commit_id":"64cbbef06a07cc9df2dd39d5de09aa1382d1cf83"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"c417736f23ecd0f35a131de398294190ede7ae6b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        else:"},{"line_number":68,"context_line":"            query \u003d None"},{"line_number":69,"context_line":"        filters \u003d dict(parsed_args.filter) if parsed_args.filter else None"},{"line_number":70,"context_line":"        if query and filters:"},{"line_number":71,"context_line":"            self.parser.error(\u0027Query parameter and filter parameter cannot be\u0027"},{"line_number":72,"context_line":"                              \u0027 specified at the same time.\u0027)"},{"line_number":73,"context_line":"        alarms \u003d self.app.client.alarm.list(query\u003dquery, filters\u003dfilters)"},{"line_number":74,"context_line":"        return utils.list2cols(ALARM_LIST_COLS, alarms)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da0c15f0_7fce6c5b","line":72,"range":{"start_line":70,"start_character":8,"end_line":72,"end_character":61},"in_reply_to":"da0c15f0_84a05592","updated":"2016-03-25 08:53:24.000000000","message":"thanks, learn this usage from you :)","commit_id":"64cbbef06a07cc9df2dd39d5de09aa1382d1cf83"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"6ffc06c245f2b39eb3e315b636fb30193d47fac5","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                                     type\u003dself.split_filter_param,"},{"line_number":59,"context_line":"                                     action\u003d\u0027append\u0027,"},{"line_number":60,"context_line":"                                     help\u003d\u0027Filter parameters to apply on\u0027"},{"line_number":61,"context_line":"                                          \u0027returned alarms.\u0027)"},{"line_number":62,"context_line":"        return parser"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":11,"id":"da0c15f0_bbac93ee","line":61,"range":{"start_line":61,"start_character":42,"end_line":61,"end_character":43},"updated":"2016-03-25 10:59:58.000000000","message":"Whitespace missing.","commit_id":"f3cd0c2d84f730b9c5bcbc22c662e79cf8a99099"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"b005da24869155502ed1f2a8932aa74c4dd9f06e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                                     type\u003dself.split_filter_param,"},{"line_number":59,"context_line":"                                     action\u003d\u0027append\u0027,"},{"line_number":60,"context_line":"                                     help\u003d\u0027Filter parameters to apply on\u0027"},{"line_number":61,"context_line":"                                          \u0027returned alarms.\u0027)"},{"line_number":62,"context_line":"        return parser"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":11,"id":"da0c15f0_64223c03","line":61,"range":{"start_line":61,"start_character":42,"end_line":61,"end_character":43},"in_reply_to":"da0c15f0_bbac93ee","updated":"2016-03-26 01:02:11.000000000","message":"Done","commit_id":"f3cd0c2d84f730b9c5bcbc22c662e79cf8a99099"}]}
