)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"fc8c4bd6d80b1a7987ba7147d968daf5f8b4edc5","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patchset adds regex complex query in SQLalchemy."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Ibff659cd51f0a6a6112fff2e9ed8aee29ab4389c"},{"line_number":12,"context_line":"Partially-Implements: blueprint regexp-in-complex-query"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da86d52c_ba40d407","line":12,"updated":"2015-02-06 06:31:07.000000000","message":"where is the specs? I only see bp in launchpad","commit_id":"6a6822009e22998a42b0bfbab5894e6f65078ee3"}],"ceilometer/storage/sqlalchemy/utils.py":[{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"78d89c89cdb5daae48db155e00749e92ca4f9ed5","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        value \u003d nodes.values()[0]"},{"line_number":73,"context_line":"        if field_name.startswith(\u0027resource_metadata.\u0027):"},{"line_number":74,"context_line":"            return self._handle_metadata(simple_op, field_name, value)"},{"line_number":75,"context_line":"        else:"},{"line_number":76,"context_line":"            if not op and simple_op \u003d\u003d \u0027\u003d~\u0027:"},{"line_number":77,"context_line":"                return getattr(self.table, field_name).op(\"regexp\")(value)"},{"line_number":78,"context_line":"            return op(getattr(self.table, field_name), value)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_665e1978","line":75,"updated":"2015-02-04 13:30:57.000000000","message":"do you really need to check \u0027not op\u0027?","commit_id":"062ca82802654f2f7b46724326818b9cc4fb6f3c"},{"author":{"_account_id":13273,"name":"Lena Novokshonova","email":"enovokshonova@mirantis.com","username":"enovokshonova"},"change_message_id":"e2a85c27ca19ab17f73d91027429c329c9de544b","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        value \u003d nodes.values()[0]"},{"line_number":73,"context_line":"        if field_name.startswith(\u0027resource_metadata.\u0027):"},{"line_number":74,"context_line":"            return self._handle_metadata(simple_op, field_name, value)"},{"line_number":75,"context_line":"        else:"},{"line_number":76,"context_line":"            if not op and simple_op \u003d\u003d \u0027\u003d~\u0027:"},{"line_number":77,"context_line":"                return getattr(self.table, field_name).op(\"regexp\")(value)"},{"line_number":78,"context_line":"            return op(getattr(self.table, field_name), value)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_a9cd4287","line":75,"in_reply_to":"da86d52c_665e1978","updated":"2015-02-04 13:44:58.000000000","message":"Yes, it\u0027s not necessary. I\u0027ll delete it in new patch","commit_id":"062ca82802654f2f7b46724326818b9cc4fb6f3c"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"8fbd81d6dabe75a2b4444c7233681867b8b594d9","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        if field_name.startswith(\u0027resource_metadata.\u0027):"},{"line_number":74,"context_line":"            return self._handle_metadata(simple_op, field_name, value)"},{"line_number":75,"context_line":"        else:"},{"line_number":76,"context_line":"            if not op and simple_op \u003d\u003d \u0027\u003d~\u0027:"},{"line_number":77,"context_line":"                return getattr(self.table, field_name).op(\"regexp\")(value)"},{"line_number":78,"context_line":"            return op(getattr(self.table, field_name), value)"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_a94aa223","line":76,"updated":"2015-02-04 13:42:40.000000000","message":"I would prefer to add the regexp operator to the \u0027operators\u0027 list in line 38, like how \u0027in\u0027 operator is added.","commit_id":"062ca82802654f2f7b46724326818b9cc4fb6f3c"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"bd3453938baba8a43d46614e684839f91c6f2ca5","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        if field_name.startswith(\u0027resource_metadata.\u0027):"},{"line_number":74,"context_line":"            return self._handle_metadata(simple_op, field_name, value)"},{"line_number":75,"context_line":"        else:"},{"line_number":76,"context_line":"            if not op and simple_op \u003d\u003d \u0027\u003d~\u0027:"},{"line_number":77,"context_line":"                return getattr(self.table, field_name).op(\"regexp\")(value)"},{"line_number":78,"context_line":"            return op(getattr(self.table, field_name), value)"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_c91ef6ba","line":76,"in_reply_to":"da86d52c_a94aa223","updated":"2015-02-04 13:51:55.000000000","message":"Agree with Ildiko. It may look like \n\n\"\u003d~\": lambda field, value: field.op(\"regexp\")(value)","commit_id":"062ca82802654f2f7b46724326818b9cc4fb6f3c"},{"author":{"_account_id":13273,"name":"Lena Novokshonova","email":"enovokshonova@mirantis.com","username":"enovokshonova"},"change_message_id":"951e8396ff0cfba93ec4160dc046b86a27e50652","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        if field_name.startswith(\u0027resource_metadata.\u0027):"},{"line_number":74,"context_line":"            return self._handle_metadata(simple_op, field_name, value)"},{"line_number":75,"context_line":"        else:"},{"line_number":76,"context_line":"            if not op and simple_op \u003d\u003d \u0027\u003d~\u0027:"},{"line_number":77,"context_line":"                return getattr(self.table, field_name).op(\"regexp\")(value)"},{"line_number":78,"context_line":"            return op(getattr(self.table, field_name), value)"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_49e766ac","line":76,"in_reply_to":"da86d52c_c91ef6ba","updated":"2015-02-04 13:53:45.000000000","message":"Ilya, Ildiko, ok, I\u0027ll try to do it in new patch!","commit_id":"062ca82802654f2f7b46724326818b9cc4fb6f3c"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"78d89c89cdb5daae48db155e00749e92ca4f9ed5","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        # with or operator on non existent metadata field"},{"line_number":92,"context_line":"        # see: test_query_non_existing_metadata_with_result"},{"line_number":93,"context_line":"        # test case."},{"line_number":94,"context_line":"        self.query \u003d self.query.outerjoin(meta_alias, on_clause)"},{"line_number":95,"context_line":"        if not op and simple_op \u003d\u003d \u0027\u003d~\u0027:"},{"line_number":96,"context_line":"            return meta_alias.value.op(\"regexp\")(value)"},{"line_number":97,"context_line":"        return op(meta_alias.value, value)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_a653b169","line":94,"updated":"2015-02-04 13:30:57.000000000","message":"ditto","commit_id":"062ca82802654f2f7b46724326818b9cc4fb6f3c"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"09b9f5106b491ba2d23aefeebf3128b6e68acb8c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        return op(*element_list)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def _handle_simple_op(self, simple_op, nodes):"},{"line_number":71,"context_line":"        op \u003d self.operators.get(simple_op)"},{"line_number":72,"context_line":"        field_name \u003d nodes.keys()[0]"},{"line_number":73,"context_line":"        value \u003d nodes.values()[0]"},{"line_number":74,"context_line":"        if field_name.startswith(\u0027resource_metadata.\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_a42489c5","line":71,"updated":"2015-02-04 14:18:23.000000000","message":"Why \u0027get\u0027 is explicitly needed here?","commit_id":"2b2454ee2afc02671f8188f3f9208b1ee013508a"},{"author":{"_account_id":13273,"name":"Lena Novokshonova","email":"enovokshonova@mirantis.com","username":"enovokshonova"},"change_message_id":"8fd153b8f1b8fac59bc467e989d792d653258544","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        return op(*element_list)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def _handle_simple_op(self, simple_op, nodes):"},{"line_number":71,"context_line":"        op \u003d self.operators.get(simple_op)"},{"line_number":72,"context_line":"        field_name \u003d nodes.keys()[0]"},{"line_number":73,"context_line":"        value \u003d nodes.values()[0]"},{"line_number":74,"context_line":"        if field_name.startswith(\u0027resource_metadata.\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_7fc69c9b","line":71,"in_reply_to":"da86d52c_a42489c5","updated":"2015-02-04 14:24:09.000000000","message":"It\u0027s not needed","commit_id":"2b2454ee2afc02671f8188f3f9208b1ee013508a"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"09b9f5106b491ba2d23aefeebf3128b6e68acb8c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        field_name \u003d nodes.keys()[0]"},{"line_number":73,"context_line":"        value \u003d nodes.values()[0]"},{"line_number":74,"context_line":"        if field_name.startswith(\u0027resource_metadata.\u0027):"},{"line_number":75,"context_line":"            return self._handle_metadata(op, field_name, value)"},{"line_number":76,"context_line":"        return op(getattr(self.table, field_name), value)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _handle_metadata(self, op, field_name, value):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_e47cc1b7","line":75,"updated":"2015-02-04 14:18:23.000000000","message":"Please put back the \u0027else\u0027 branch here.","commit_id":"2b2454ee2afc02671f8188f3f9208b1ee013508a"},{"author":{"_account_id":13273,"name":"Lena Novokshonova","email":"enovokshonova@mirantis.com","username":"enovokshonova"},"change_message_id":"8fd153b8f1b8fac59bc467e989d792d653258544","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        field_name \u003d nodes.keys()[0]"},{"line_number":73,"context_line":"        value \u003d nodes.values()[0]"},{"line_number":74,"context_line":"        if field_name.startswith(\u0027resource_metadata.\u0027):"},{"line_number":75,"context_line":"            return self._handle_metadata(op, field_name, value)"},{"line_number":76,"context_line":"        return op(getattr(self.table, field_name), value)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _handle_metadata(self, op, field_name, value):"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_5fa9d8dd","line":75,"in_reply_to":"da86d52c_e47cc1b7","updated":"2015-02-04 14:24:09.000000000","message":"Done","commit_id":"2b2454ee2afc02671f8188f3f9208b1ee013508a"}],"ceilometer/tests/storage/test_storage_scenarios.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"09b9f5106b491ba2d23aefeebf3128b6e68acb8c","unresolved":false,"context_lines":[{"line_number":2973,"context_line":"        for a in result:"},{"line_number":2974,"context_line":"            self.assertIn(a.name, set([\"yellow-alert\", \"red-alert\"]))"},{"line_number":2975,"context_line":"            self.assertTrue(a.enabled)"},{"line_number":2976,"context_line":""},{"line_number":2977,"context_line":"    @tests_db.run_with(\u0027mongodb\u0027)"},{"line_number":2978,"context_line":"    def test_filter_with_regexp(self):"},{"line_number":2979,"context_line":"        self.add_some_alarms()"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_c41eddba","line":2976,"updated":"2015-02-04 14:18:23.000000000","message":"Please enable the test for SQLA too.","commit_id":"2b2454ee2afc02671f8188f3f9208b1ee013508a"},{"author":{"_account_id":13273,"name":"Lena Novokshonova","email":"enovokshonova@mirantis.com","username":"enovokshonova"},"change_message_id":"8fd153b8f1b8fac59bc467e989d792d653258544","unresolved":false,"context_lines":[{"line_number":2973,"context_line":"        for a in result:"},{"line_number":2974,"context_line":"            self.assertIn(a.name, set([\"yellow-alert\", \"red-alert\"]))"},{"line_number":2975,"context_line":"            self.assertTrue(a.enabled)"},{"line_number":2976,"context_line":""},{"line_number":2977,"context_line":"    @tests_db.run_with(\u0027mongodb\u0027)"},{"line_number":2978,"context_line":"    def test_filter_with_regexp(self):"},{"line_number":2979,"context_line":"        self.add_some_alarms()"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_3f56e406","line":2976,"in_reply_to":"da86d52c_c41eddba","updated":"2015-02-04 14:24:09.000000000","message":"Done","commit_id":"2b2454ee2afc02671f8188f3f9208b1ee013508a"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"09b9f5106b491ba2d23aefeebf3128b6e68acb8c","unresolved":false,"context_lines":[{"line_number":3101,"context_line":"        history \u003d list("},{"line_number":3102,"context_line":"            self.alarm_conn.query_alarm_history(filter_expr\u003dself.filter_expr))"},{"line_number":3103,"context_line":"        self.assertEqual(2, len(history))"},{"line_number":3104,"context_line":""},{"line_number":3105,"context_line":"    @tests_db.run_with(\u0027mongodb\u0027)"},{"line_number":3106,"context_line":"    def test_alarm_history_with_regexp(self):"},{"line_number":3107,"context_line":"        filter_expr \u003d {\"and\":"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_e4720110","line":3104,"updated":"2015-02-04 14:18:23.000000000","message":"Please enable this test for SQLA too.","commit_id":"2b2454ee2afc02671f8188f3f9208b1ee013508a"},{"author":{"_account_id":13273,"name":"Lena Novokshonova","email":"enovokshonova@mirantis.com","username":"enovokshonova"},"change_message_id":"8fd153b8f1b8fac59bc467e989d792d653258544","unresolved":false,"context_lines":[{"line_number":3101,"context_line":"        history \u003d list("},{"line_number":3102,"context_line":"            self.alarm_conn.query_alarm_history(filter_expr\u003dself.filter_expr))"},{"line_number":3103,"context_line":"        self.assertEqual(2, len(history))"},{"line_number":3104,"context_line":""},{"line_number":3105,"context_line":"    @tests_db.run_with(\u0027mongodb\u0027)"},{"line_number":3106,"context_line":"    def test_alarm_history_with_regexp(self):"},{"line_number":3107,"context_line":"        filter_expr \u003d {\"and\":"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_5f5b982d","line":3104,"in_reply_to":"da86d52c_e4720110","updated":"2015-02-04 14:24:09.000000000","message":"Done","commit_id":"2b2454ee2afc02671f8188f3f9208b1ee013508a"}]}
