)]}'
{"ceilometer/storage/hbase/inmemory.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"e26b4330e4d45a3ff4303b320a7d3857f8c7dc12","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                        ret[row] \u003d data"},{"line_number":97,"context_line":"            rows \u003d ret"},{"line_number":98,"context_line":"        if filter:"},{"line_number":99,"context_line":"            root_node \u003d parse_filter(filter)"},{"line_number":100,"context_line":"            rows \u003d self.process_tree(root_node, rows)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        for k in sorted(rows)[:limit]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_3709b231","line":99,"updated":"2014-07-18 11:28:59.000000000","message":"Could you clarify why do we need parse_filter function if it is not else but get_subtree?","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"dd636cedcc6b7b4db038816164e24c60e5e4c468","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                        ret[row] \u003d data"},{"line_number":97,"context_line":"            rows \u003d ret"},{"line_number":98,"context_line":"        if filter:"},{"line_number":99,"context_line":"            root_node \u003d parse_filter(filter)"},{"line_number":100,"context_line":"            rows \u003d self.process_tree(root_node, rows)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        for k in sorted(rows)[:limit]:"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_6e191087","line":99,"in_reply_to":"baada198_3709b231","updated":"2014-07-29 11:20:27.000000000","message":"I\u0027m agree, this func don\u0027t need.","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"e26b4330e4d45a3ff4303b320a7d3857f8c7dc12","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            # in case of multiple filters"},{"line_number":115,"context_line":"            return m(fargs, rows)"},{"line_number":116,"context_line":"        else:"},{"line_number":117,"context_line":"            raise NotImplementedError(\"%s filter is not implemented, \""},{"line_number":118,"context_line":"                                      \"you may want to add it!\")"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_621c4ac3","line":117,"updated":"2014-07-18 11:28:59.000000000","message":"I see that we want to insert name of filter in \u0027%s\u0027 but do not.","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"dd636cedcc6b7b4db038816164e24c60e5e4c468","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            # in case of multiple filters"},{"line_number":115,"context_line":"            return m(fargs, rows)"},{"line_number":116,"context_line":"        else:"},{"line_number":117,"context_line":"            raise NotImplementedError(\"%s filter is not implemented, \""},{"line_number":118,"context_line":"                                      \"you may want to add it!\")"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_0e1c14c2","line":117,"in_reply_to":"baada198_621c4ac3","updated":"2014-07-29 11:20:27.000000000","message":"Done","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"e26b4330e4d45a3ff4303b320a7d3857f8c7dc12","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            set(left).union(set(left))"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    @staticmethod"},{"line_number":128,"context_line":"    def unary_process(fdata, op, rows):"},{"line_number":129,"context_line":"        return [a for a in rows if a not in fdata]"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_42cbc671","line":128,"updated":"2014-07-18 11:28:59.000000000","message":"Why do we need param: op, if we didn\u0027t use it in a function","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"dd636cedcc6b7b4db038816164e24c60e5e4c468","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            set(left).union(set(left))"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    @staticmethod"},{"line_number":128,"context_line":"    def unary_process(fdata, op, rows):"},{"line_number":129,"context_line":"        return [a for a in rows if a not in fdata]"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_ee1e00bc","line":128,"in_reply_to":"baada198_42cbc671","updated":"2014-07-29 11:20:27.000000000","message":"Done","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"e26b4330e4d45a3ff4303b320a7d3857f8c7dc12","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                node \u003d BinaryOpNode(op, expr,"},{"line_number":357,"context_line":"                                    get_subtree(line[i + len(op):]))"},{"line_number":358,"context_line":"                return node"},{"line_number":359,"context_line":"        for op in unary_ops:"},{"line_number":360,"context_line":"            if line[i:].startswith(op):"},{"line_number":361,"context_line":"                expr \u003d UnaryOpNode(op, get_subtree(line[i + len(op):]))"},{"line_number":362,"context_line":"                i +\u003d len(op)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_62028a0d","line":359,"updated":"2014-07-18 11:28:59.000000000","message":"I think if we really need a loop here? unary_ops has one item inside, are we going to add some more in future?","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"dd636cedcc6b7b4db038816164e24c60e5e4c468","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                node \u003d BinaryOpNode(op, expr,"},{"line_number":357,"context_line":"                                    get_subtree(line[i + len(op):]))"},{"line_number":358,"context_line":"                return node"},{"line_number":359,"context_line":"        for op in unary_ops:"},{"line_number":360,"context_line":"            if line[i:].startswith(op):"},{"line_number":361,"context_line":"                expr \u003d UnaryOpNode(op, get_subtree(line[i + len(op):]))"},{"line_number":362,"context_line":"                i +\u003d len(op)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_ae0de891","line":359,"in_reply_to":"baada198_62028a0d","updated":"2014-07-29 11:20:27.000000000","message":"Hbase also has  unary operator WHILE. But we don\u0027t use it anywhere.","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"}],"ceilometer/storage/hbase/utils.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"e26b4330e4d45a3ff4303b320a7d3857f8c7dc12","unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"def _create_filter(op, keypair):"},{"line_number":408,"context_line":"    column, value \u003d keypair.items()[0]"},{"line_number":409,"context_line":"    if op is \u0027in\u0027:"},{"line_number":410,"context_line":"        return \"(\" + \" OR \".join(_create_filter(\"\u003d\", {column: v})"},{"line_number":411,"context_line":"                                 for v in value) + \")\""},{"line_number":412,"context_line":"    if column.startswith(\"metadata\"):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_fd6f1bc2","line":409,"updated":"2014-07-18 11:28:59.000000000","message":"As for me it would be better to use \u0027\u003d\u003d\u0027 instead of \u0027is\u0027","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"dd636cedcc6b7b4db038816164e24c60e5e4c468","unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"def _create_filter(op, keypair):"},{"line_number":408,"context_line":"    column, value \u003d keypair.items()[0]"},{"line_number":409,"context_line":"    if op is \u0027in\u0027:"},{"line_number":410,"context_line":"        return \"(\" + \" OR \".join(_create_filter(\"\u003d\", {column: v})"},{"line_number":411,"context_line":"                                 for v in value) + \")\""},{"line_number":412,"context_line":"    if column.startswith(\"metadata\"):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_aeb168e2","line":409,"in_reply_to":"baada198_fd6f1bc2","updated":"2014-07-29 11:20:27.000000000","message":"Done","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"e26b4330e4d45a3ff4303b320a7d3857f8c7dc12","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                                         op\u003dop, value\u003ddump(value)))"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"def make_complex_query(filter_expr):"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def make_filters(filter_part):"},{"line_number":428,"context_line":"        op, v \u003d filter_part.items()[0]"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_5d4ac7ad","line":425,"updated":"2014-07-18 11:28:59.000000000","message":"Not clear why do you construct make_complex_query as a closure. Your function return another with the own param so why do we need it?\nWhy we could not just use make_filters(filter_expr)?","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"dd636cedcc6b7b4db038816164e24c60e5e4c468","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                                         op\u003dop, value\u003ddump(value)))"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"def make_complex_query(filter_expr):"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"    def make_filters(filter_part):"},{"line_number":428,"context_line":"        op, v \u003d filter_part.items()[0]"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_4e8b6c17","line":425,"in_reply_to":"baada198_5d4ac7ad","updated":"2014-07-29 11:20:27.000000000","message":"Done","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"e26b4330e4d45a3ff4303b320a7d3857f8c7dc12","unresolved":false,"context_lines":[{"line_number":440,"context_line":""},{"line_number":441,"context_line":"def sort_scan(gen, orderby):"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"    def compare(a, b):"},{"line_number":444,"context_line":"        for keyvalue in orderby:"},{"line_number":445,"context_line":"            field, comp_type \u003d keyvalue.items()[0]"},{"line_number":446,"context_line":"            if a.get(field) \u003d\u003d b.get(field):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_3d7433ce","line":443,"updated":"2014-07-18 11:28:59.000000000","message":"Do we really need to have compare function be inserted in sort_scan. May be we could separate them?","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"dd636cedcc6b7b4db038816164e24c60e5e4c468","unresolved":false,"context_lines":[{"line_number":440,"context_line":""},{"line_number":441,"context_line":"def sort_scan(gen, orderby):"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"    def compare(a, b):"},{"line_number":444,"context_line":"        for keyvalue in orderby:"},{"line_number":445,"context_line":"            field, comp_type \u003d keyvalue.items()[0]"},{"line_number":446,"context_line":"            if a.get(field) \u003d\u003d b.get(field):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_aeb5e8ee","line":443,"in_reply_to":"baada198_3d7433ce","updated":"2014-07-29 11:20:27.000000000","message":"compare function uses orderby from sort_scan and I think what we can use inline function or global variable. I chose inline function.","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"e26b4330e4d45a3ff4303b320a7d3857f8c7dc12","unresolved":false,"context_lines":[{"line_number":441,"context_line":"def sort_scan(gen, orderby):"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"    def compare(a, b):"},{"line_number":444,"context_line":"        for keyvalue in orderby:"},{"line_number":445,"context_line":"            field, comp_type \u003d keyvalue.items()[0]"},{"line_number":446,"context_line":"            if a.get(field) \u003d\u003d b.get(field):"},{"line_number":447,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_2fddda70","line":444,"updated":"2014-07-18 11:28:59.000000000","message":"param: orderby could be eq to None, so it won\u0027t be iterable. Think we should check it before construct a cycle.","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"dd636cedcc6b7b4db038816164e24c60e5e4c468","unresolved":false,"context_lines":[{"line_number":441,"context_line":"def sort_scan(gen, orderby):"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"    def compare(a, b):"},{"line_number":444,"context_line":"        for keyvalue in orderby:"},{"line_number":445,"context_line":"            field, comp_type \u003d keyvalue.items()[0]"},{"line_number":446,"context_line":"            if a.get(field) \u003d\u003d b.get(field):"},{"line_number":447,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_2efc78b5","line":444,"in_reply_to":"baada198_2fddda70","updated":"2014-07-29 11:20:27.000000000","message":"Done","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"}],"ceilometer/storage/impl_hbase.py":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"99be8cd3db7b34a6d06bc0a36ed737ee33942950","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            .. code-block:: python"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"              \"%s+%s\" % (trait_name, trait_type)"},{"line_number":148,"context_line":"    \"\"\""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    CAPABILITIES \u003d utils.update_nested(base.Connection.CAPABILITIES,"},{"line_number":151,"context_line":"                                       AVAILABLE_CAPABILITIES)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_f4ac8d8a","line":148,"updated":"2014-07-18 14:42:52.000000000","message":"I believe that CAPABILITIES should be extended","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"dd636cedcc6b7b4db038816164e24c60e5e4c468","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            .. code-block:: python"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"              \"%s+%s\" % (trait_name, trait_type)"},{"line_number":148,"context_line":"    \"\"\""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    CAPABILITIES \u003d utils.update_nested(base.Connection.CAPABILITIES,"},{"line_number":151,"context_line":"                                       AVAILABLE_CAPABILITIES)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_847e431a","line":148,"in_reply_to":"baada198_f4ac8d8a","updated":"2014-07-29 11:20:27.000000000","message":"Done","commit_id":"7e932fc68262e883c7649cb1633e6c2d77398fcd"}],"ceilometer/tests/db.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"cf8a9668036e63f81b34f9779cae4f08f9e3d730","unresolved":false,"context_lines":[{"line_number":181,"context_line":"class MixinTestsWithBackendScenarios(object):"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    scenarios \u003d ["},{"line_number":184,"context_line":"        # (\u0027sqlite\u0027, {\u0027db_url\u0027: \u0027sqlite://\u0027}),"},{"line_number":185,"context_line":"        # (\u0027mongodb\u0027, {\u0027db_url\u0027: os.environ.get(\u0027CEILOMETER_TEST_MONGODB_URL\u0027)}),"},{"line_number":186,"context_line":"        # (\u0027hbase\u0027, {\u0027db_url\u0027: os.environ.get(\u0027CEILOMETER_TEST_HBASE_URL\u0027,"},{"line_number":187,"context_line":"        #                                     \u0027hbase://__test__\u0027)}),"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_cc1487eb","line":184,"updated":"2014-09-19 09:29:15.000000000","message":"It seems that you have forgotten to uncomment scenarios","commit_id":"57d0262293ea5ae73fc1acdeed2b77267fc4bc7b"}],"tools/delete_hbase_tables.py":[{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"fcbc0cd8fdbc33b6a9798d047307754d5d9144ad","unresolved":false,"context_lines":[{"line_number":1,"context_line":"__author__ \u003d \u0027ityaptin\u0027"},{"line_number":2,"context_line":"import happybase"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa98f980_afe495ac","line":1,"updated":"2014-09-19 10:30:31.000000000","message":"remove this PyCharm line and add usual OpenStack License header","commit_id":"57d0262293ea5ae73fc1acdeed2b77267fc4bc7b"}]}
