)]}'
{"ceilometer/storage/impl_sqlalchemy.py":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"c93cc449b93167019d896ca01bf2ddc7465260a0","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        \"\"\""},{"line_number":87,"context_line":"        conf.register_opts(self.OPTIONS)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @staticmethod"},{"line_number":90,"context_line":"    def get_connection(conf):"},{"line_number":91,"context_line":"        \"\"\"Return a Connection instance based on the configuration settings."},{"line_number":92,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F%2Fzs%3D","line":89,"updated":"2013-03-04 03:04:31.000000000","message":"Why sqlalchemy is an exception here to mark it staticmethod, compared to all other DB backends?","commit_id":"71b34d8d2f657aef6ab3b5fb906bb5b5d692b355"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"26819e0f2118ee142c0e6e11b8aad7433cb2cb3a","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        \"\"\""},{"line_number":87,"context_line":"        conf.register_opts(self.OPTIONS)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    @staticmethod"},{"line_number":90,"context_line":"    def get_connection(conf):"},{"line_number":91,"context_line":"        \"\"\"Return a Connection instance based on the configuration settings."},{"line_number":92,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F%2FeA%3D","line":89,"in_reply_to":"AAAAN3%2F%2F%2Fzs%3D","updated":"2013-03-04 12:51:55.000000000","message":"Sorry, that\u0027s not really related to this patch, it\u0027s just me being picky.\nThe method is static, it doesn\u0027t use self. What other method or the abstraction class says doesn\u0027t matter.","commit_id":"71b34d8d2f657aef6ab3b5fb906bb5b5d692b355"}],"ceilometer/storage/impl_test.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"9d02b010afb12732e137b4a2172116b3ed87b4ee","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def clear(self):"},{"line_number":83,"context_line":"        if TestConnection._mim_instance is not None:"},{"line_number":84,"context_line":"            self.db.clear()"},{"line_number":85,"context_line":"        else:"},{"line_number":86,"context_line":"            super(TestConnection, self).clear()"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAN3%2F%2F%2FWU%3D","line":84,"updated":"2013-03-04 14:24:11.000000000","message":"The comment from the old version should be preserved so we avoid re-introducing that problem. It took a while to track down the source of that particular error; I would rather not have to do it again when I can\u0027t remember why we have a special case for MIM. :-)","commit_id":"d193986b9b9daa38550cc2d906b2b1c90daa3c64"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"26f2e56c6de4aaf8819195191d2950f4485743d8","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def clear(self):"},{"line_number":83,"context_line":"        if TestConnection._mim_instance is not None:"},{"line_number":84,"context_line":"            self.db.clear()"},{"line_number":85,"context_line":"        else:"},{"line_number":86,"context_line":"            super(TestConnection, self).clear()"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAN3%2F%2F%2FVI%3D","line":84,"in_reply_to":"AAAAN3%2F%2F%2FWU%3D","updated":"2013-03-04 14:37:40.000000000","message":"Done","commit_id":"d193986b9b9daa38550cc2d906b2b1c90daa3c64"}],"ceilometer/tests/db.py":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"c93cc449b93167019d896ca01bf2ddc7465260a0","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from oslo.config import cfg"},{"line_number":27,"context_line":"from nose.plugins import skip"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from ceilometer import storage"},{"line_number":30,"context_line":"from ceilometer.tests import base as test_base"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F%2Fzg%3D","line":27,"updated":"2013-03-04 03:04:31.000000000","message":"It\u0027d better to change the import order.","commit_id":"71b34d8d2f657aef6ab3b5fb906bb5b5d692b355"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"26819e0f2118ee142c0e6e11b8aad7433cb2cb3a","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from oslo.config import cfg"},{"line_number":27,"context_line":"from nose.plugins import skip"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from ceilometer import storage"},{"line_number":30,"context_line":"from ceilometer.tests import base as test_base"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F%2Fd8%3D","line":27,"in_reply_to":"AAAAN3%2F%2F%2Fzg%3D","updated":"2013-03-04 12:51:55.000000000","message":"Done","commit_id":"71b34d8d2f657aef6ab3b5fb906bb5b5d692b355"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"c93cc449b93167019d896ca01bf2ddc7465260a0","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            # Default tests use test:// (MIM)"},{"line_number":41,"context_line":"            cfg.CONF.database_connection \u003d \u0027test://\u0027"},{"line_number":42,"context_line":"        self.conn \u003d storage.get_connection(cfg.CONF)"},{"line_number":43,"context_line":"        self.conn.upgrade()"},{"line_number":44,"context_line":"        self.conn.clear()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F%2Fy4%3D","line":43,"updated":"2013-03-04 03:04:31.000000000","message":"I don\u0027t see any implementation of upgrade() other than the log db backend.","commit_id":"71b34d8d2f657aef6ab3b5fb906bb5b5d692b355"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"26819e0f2118ee142c0e6e11b8aad7433cb2cb3a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            # Default tests use test:// (MIM)"},{"line_number":41,"context_line":"            cfg.CONF.database_connection \u003d \u0027test://\u0027"},{"line_number":42,"context_line":"        self.conn \u003d storage.get_connection(cfg.CONF)"},{"line_number":43,"context_line":"        self.conn.upgrade()"},{"line_number":44,"context_line":"        self.conn.clear()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAN3%2F%2F%2Fd4%3D","line":43,"in_reply_to":"AAAAN3%2F%2F%2Fy4%3D","updated":"2013-03-04 12:51:55.000000000","message":"It\u0027s mandatory for SQLAlchemy, it creates the table.","commit_id":"71b34d8d2f657aef6ab3b5fb906bb5b5d692b355"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"9d02b010afb12732e137b4a2172116b3ed87b4ee","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def setUp(self):"},{"line_number":34,"context_line":"        super(TestBase, self).setUp()"},{"line_number":35,"context_line":"        if hasattr(self, \"database_connection\"):"},{"line_number":36,"context_line":"            cfg.CONF.database_connection \u003d self.database_connection"},{"line_number":37,"context_line":"        else:"},{"line_number":38,"context_line":"            # Default tests use test:// (MIM)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAN3%2F%2F%2FVs%3D","line":35,"updated":"2013-03-04 14:24:11.000000000","message":"If you set database_connection as a class attribute on this class, you can avoid this conditional check.","commit_id":"d193986b9b9daa38550cc2d906b2b1c90daa3c64"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"26f2e56c6de4aaf8819195191d2950f4485743d8","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def setUp(self):"},{"line_number":34,"context_line":"        super(TestBase, self).setUp()"},{"line_number":35,"context_line":"        if hasattr(self, \"database_connection\"):"},{"line_number":36,"context_line":"            cfg.CONF.database_connection \u003d self.database_connection"},{"line_number":37,"context_line":"        else:"},{"line_number":38,"context_line":"            # Default tests use test:// (MIM)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAN3%2F%2F%2FVE%3D","line":35,"in_reply_to":"AAAAN3%2F%2F%2FVs%3D","updated":"2013-03-04 14:37:40.000000000","message":"Smart! Done.","commit_id":"d193986b9b9daa38550cc2d906b2b1c90daa3c64"}],"tests/api/v1/base.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"9d02b010afb12732e137b4a2172116b3ed87b4ee","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from ceilometer.tests import api as tests_api"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestAPISQLAlchemyDB(object):"},{"line_number":33,"context_line":"    database_connection \u003d \u0027sqlite://\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAN3%2F%2F%2FV4%3D","line":32,"updated":"2013-03-04 14:24:11.000000000","message":"It seems like these classes should be defined in the modules that use them, rather than here with the base classes.","commit_id":"d193986b9b9daa38550cc2d906b2b1c90daa3c64"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"26f2e56c6de4aaf8819195191d2950f4485743d8","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from ceilometer.tests import api as tests_api"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestAPISQLAlchemyDB(object):"},{"line_number":33,"context_line":"    database_connection \u003d \u0027sqlite://\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAN3%2F%2F%2FU8%3D","line":32,"in_reply_to":"AAAAN3%2F%2F%2FV4%3D","updated":"2013-03-04 14:37:40.000000000","message":"Done","commit_id":"d193986b9b9daa38550cc2d906b2b1c90daa3c64"}],"tests/api/v1/test_impl_mongodb.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"9d02b010afb12732e137b4a2172116b3ed87b4ee","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\"Test listing raw events."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":"from . import base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestListEvents(base.TestAPIMongoDB, base.TestListEvents):"},{"line_number":24,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAN3%2F%2F%2FVo%3D","line":21,"updated":"2013-03-04 14:24:11.000000000","message":"What do you think about creating classes here that use the real mongo instance, if the appropriate environment variable is set? That would let us run tests against MIM and MongoDB at the same time.","commit_id":"d193986b9b9daa38550cc2d906b2b1c90daa3c64"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"26f2e56c6de4aaf8819195191d2950f4485743d8","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\"Test listing raw events."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":"from . import base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestListEvents(base.TestAPIMongoDB, base.TestListEvents):"},{"line_number":24,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAN3%2F%2F%2FUk%3D","line":21,"in_reply_to":"AAAAN3%2F%2F%2FVo%3D","updated":"2013-03-04 14:37:40.000000000","message":"Yes, I\u0027m planning to rework this part to. I\u0027ll do the same for sqlite vs MySQL. But in a later patch if that\u0027s ok, this one seems big enough for me now :)","commit_id":"d193986b9b9daa38550cc2d906b2b1c90daa3c64"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"9d02b010afb12732e137b4a2172116b3ed87b4ee","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from . import base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestListEvents(base.TestAPIMongoDB, base.TestListEvents):"},{"line_number":24,"context_line":"    pass"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAN3%2F%2F%2FVw%3D","line":23,"updated":"2013-03-04 14:24:11.000000000","message":"You could just subclass TestListEvents and override the database_connection property, right? I\u0027m not sure I understand why there need to be multiple base classes.","commit_id":"d193986b9b9daa38550cc2d906b2b1c90daa3c64"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"26f2e56c6de4aaf8819195191d2950f4485743d8","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from . import base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestListEvents(base.TestAPIMongoDB, base.TestListEvents):"},{"line_number":24,"context_line":"    pass"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAN3%2F%2F%2FUg%3D","line":23,"in_reply_to":"AAAAN3%2F%2F%2FVw%3D","updated":"2013-03-04 14:37:40.000000000","message":"You\u0027re right, I\u0027ll do that.","commit_id":"d193986b9b9daa38550cc2d906b2b1c90daa3c64"}]}
