)]}'
{"ceilometer/storage/impl_sqlalchemy.py":[{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"7e8a812dd90b1bcb0831a52b7c0fb578e4dead2e","unresolved":false,"context_lines":[{"line_number":168,"context_line":"class Connection(base.Connection):"},{"line_number":169,"context_line":"    \"\"\"SqlAlchemy connection.\"\"\""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def __init__(self, conf):"},{"line_number":172,"context_line":"        pass"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9am8%3D","line":171,"updated":"2013-12-11 21:10:50.000000000","message":"you can probably drop this right?","commit_id":"5807833b6a2bff35c64b37448ec4cc893bfd6f9d"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"dfd9735efe4ba412a1075d0769f5d5e2a23cfcac","unresolved":false,"context_lines":[{"line_number":168,"context_line":"class Connection(base.Connection):"},{"line_number":169,"context_line":"    \"\"\"SqlAlchemy connection.\"\"\""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def __init__(self, conf):"},{"line_number":172,"context_line":"        pass"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9GPc%3D","line":171,"in_reply_to":"AAAATn%2F9am8%3D","updated":"2013-12-16 20:32:21.000000000","message":"No because it\u0027s abstract :( But I another patchset to help with that.","commit_id":"5807833b6a2bff35c64b37448ec4cc893bfd6f9d"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"deb4a2a718ff4a53e8411af6999d639e7fa5c124","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    \"\"\"SqlAlchemy connection.\"\"\""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def __init__(self, conf):"},{"line_number":172,"context_line":"        pass"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    @staticmethod"},{"line_number":175,"context_line":"    def upgrade():"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F83hc%3D","line":172,"updated":"2013-12-19 12:17:01.000000000","message":"Why not just remove the enforcement of an __init__ method in the base class if it doesn\u0027t apply to the class of object?","commit_id":"4b87db0adefadd329d62d7a3deee3ea2a810552e"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"21051080887a475365e66b4c520f5a8fa3b56f19","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    \"\"\"SqlAlchemy connection.\"\"\""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def __init__(self, conf):"},{"line_number":172,"context_line":"        pass"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    @staticmethod"},{"line_number":175,"context_line":"    def upgrade():"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F83D4%3D","line":172,"in_reply_to":"AAAATn%2F83NE%3D","updated":"2013-12-19 14:03:39.000000000","message":"Yep, I noticed that it\u0027s abstract. :P \n\nI\u0027m asking why not either implement a base __init__() in ceilometer.storage.base.Connection() and remove the abstract method decorator, or remove the __init__() method altogether from the ceilometer.storage.base.Connection() class that this class inherits from? \n\nWouldn\u0027t it just inherit up the chain to the Python Object class\u0027s __init__() method in the absence of another in child classes? The fact that you have to implement an __init__ and just no-op it seems indicative of an underlying constraint that probably serves no useful purpose and therefore shouldn\u0027t exist and if you\u0027re essentially removing this method in support of being able to test against MySQL, it seems like a related change to me.\n\nYou\u0027re making a change, something is found to no longer be needed or appropriate as a result of this change, so you remove it or alter it to be a proper fit for the new feature you added or bug you fixed.\n\nI guess that\u0027s my line of reasoning on the matter. :) If I\u0027m missing something please help me understand!","commit_id":"4b87db0adefadd329d62d7a3deee3ea2a810552e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"746652819bdf3e7c21f55dcefb46a92584f72f3a","unresolved":false,"context_lines":[{"line_number":169,"context_line":"    \"\"\"SqlAlchemy connection.\"\"\""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    def __init__(self, conf):"},{"line_number":172,"context_line":"        pass"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    @staticmethod"},{"line_number":175,"context_line":"    def upgrade():"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F83NE%3D","line":172,"in_reply_to":"AAAATn%2F83hc%3D","updated":"2013-12-19 13:22:09.000000000","message":"You\u0027re the second one to ask that, and I cannot do that because it is abstract. That\u0027ll change in a nother future patch. :)","commit_id":"4b87db0adefadd329d62d7a3deee3ea2a810552e"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"deb4a2a718ff4a53e8411af6999d639e7fa5c124","unresolved":false,"context_lines":[{"line_number":826,"context_line":"        query \u003d query.order_by(desc(models.AlarmChange.timestamp))"},{"line_number":827,"context_line":"        return (self._row_to_alarm_change_model(x) for x in query.all())"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"    @staticmethod"},{"line_number":830,"context_line":"    def record_alarm_change(alarm_change):"},{"line_number":831,"context_line":"        \"\"\"Record alarm change event."},{"line_number":832,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F83ic%3D","line":829,"updated":"2013-12-19 12:17:01.000000000","message":"Related change?","commit_id":"4b87db0adefadd329d62d7a3deee3ea2a810552e"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"21051080887a475365e66b4c520f5a8fa3b56f19","unresolved":false,"context_lines":[{"line_number":826,"context_line":"        query \u003d query.order_by(desc(models.AlarmChange.timestamp))"},{"line_number":827,"context_line":"        return (self._row_to_alarm_change_model(x) for x in query.all())"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"    @staticmethod"},{"line_number":830,"context_line":"    def record_alarm_change(alarm_change):"},{"line_number":831,"context_line":"        \"\"\"Record alarm change event."},{"line_number":832,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F83Do%3D","line":829,"in_reply_to":"AAAATn%2F83NA%3D","updated":"2013-12-19 14:03:39.000000000","message":"I thought the standard was to not add unrelated refactoring to patches?","commit_id":"4b87db0adefadd329d62d7a3deee3ea2a810552e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"746652819bdf3e7c21f55dcefb46a92584f72f3a","unresolved":false,"context_lines":[{"line_number":826,"context_line":"        query \u003d query.order_by(desc(models.AlarmChange.timestamp))"},{"line_number":827,"context_line":"        return (self._row_to_alarm_change_model(x) for x in query.all())"},{"line_number":828,"context_line":""},{"line_number":829,"context_line":"    @staticmethod"},{"line_number":830,"context_line":"    def record_alarm_change(alarm_change):"},{"line_number":831,"context_line":"        \"\"\"Record alarm change event."},{"line_number":832,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F83NA%3D","line":829,"in_reply_to":"AAAATn%2F83ic%3D","updated":"2013-12-19 13:22:09.000000000","message":"No, but I can\u0027t help and fix it ;)","commit_id":"4b87db0adefadd329d62d7a3deee3ea2a810552e"}],"ceilometer/storage/sqlalchemy/migration.py":[{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"7e8a812dd90b1bcb0831a52b7c0fb578e4dead2e","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            db_version_control(engine, 0)"},{"line_number":55,"context_line":"            return versioning_api.db_version(engine, repository)"},{"line_number":56,"context_line":"        raise RuntimeError("},{"line_number":57,"context_line":"            \"The base is not empty, cannot add a migrate version\","},{"line_number":58,"context_line":"            tables)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9amo%3D","line":57,"updated":"2013-12-11 21:10:50.000000000","message":"translation? _()","commit_id":"5807833b6a2bff35c64b37448ec4cc893bfd6f9d"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"dfd9735efe4ba412a1075d0769f5d5e2a23cfcac","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            db_version_control(engine, 0)"},{"line_number":55,"context_line":"            return versioning_api.db_version(engine, repository)"},{"line_number":56,"context_line":"        raise RuntimeError("},{"line_number":57,"context_line":"            \"The base is not empty, cannot add a migrate version\","},{"line_number":58,"context_line":"            tables)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9GMo%3D","line":57,"in_reply_to":"AAAATn%2F9amo%3D","updated":"2013-12-16 20:32:21.000000000","message":"Done","commit_id":"5807833b6a2bff35c64b37448ec4cc893bfd6f9d"}],"ceilometer/storage/sqlalchemy/models.py":[{"author":{"_account_id":5313,"name":"David Peraza","email":"david_peraza@persistentsys.com","username":"dperaza"},"change_message_id":"7e8a812dd90b1bcb0831a52b7c0fb578e4dead2e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"class JSONEncodedDict(TypeDecorator):"},{"line_number":56,"context_line":"    \"Represents an immutable structure as a json-encoded string.\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    impl \u003d String(65535)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def process_bind_param(self, value, dialect):"},{"line_number":61,"context_line":"        if value is not None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9aMU%3D","line":58,"updated":"2013-12-11 21:10:50.000000000","message":"why this limit?","commit_id":"5807833b6a2bff35c64b37448ec4cc893bfd6f9d"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"dfd9735efe4ba412a1075d0769f5d5e2a23cfcac","unresolved":false,"context_lines":[{"line_number":55,"context_line":"class JSONEncodedDict(TypeDecorator):"},{"line_number":56,"context_line":"    \"Represents an immutable structure as a json-encoded string.\""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    impl \u003d String(65535)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def process_bind_param(self, value, dialect):"},{"line_number":61,"context_line":"        if value is not None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAATn%2F9GMY%3D","line":58,"in_reply_to":"AAAATn%2F9aMU%3D","updated":"2013-12-16 20:32:21.000000000","message":"This is mandatory on MySQL. You have to specify a VARCHAR size.","commit_id":"5807833b6a2bff35c64b37448ec4cc893bfd6f9d"}],"ceilometer/tests/db.py":[{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"deb4a2a718ff4a53e8411af6999d639e7fa5c124","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        db_name \u003d \u0027ceilometer_%s\u0027 % str(uuid.uuid4()).replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":80,"context_line":"        engine \u003d sqlalchemy.create_engine(self.url.replace(\u0027ceilometer\u0027, \u0027\u0027))"},{"line_number":81,"context_line":"        conn \u003d engine.connect()"},{"line_number":82,"context_line":"        conn.execute(\u0027CREATE DATABASE %s\u0027 % db_name)"},{"line_number":83,"context_line":"        conn.close()"},{"line_number":84,"context_line":"        url \u003d self.url.replace(\u0027ceilometer\u0027, db_name)"},{"line_number":85,"context_line":"        return url"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F83fs%3D","line":82,"updated":"2013-12-19 12:17:01.000000000","message":"The database creation seems like if it belongs anywhere in here, it\u0027s in the __init__()... That seems like abnormal behavior from calling __str__() on an object.\n\nWhy does the \u0027sqlite://\u0027 connection string work, but you have to create a database here for MySQL? Just curious. :)","commit_id":"4b87db0adefadd329d62d7a3deee3ea2a810552e"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"21051080887a475365e66b4c520f5a8fa3b56f19","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        db_name \u003d \u0027ceilometer_%s\u0027 % str(uuid.uuid4()).replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":80,"context_line":"        engine \u003d sqlalchemy.create_engine(self.url.replace(\u0027ceilometer\u0027, \u0027\u0027))"},{"line_number":81,"context_line":"        conn \u003d engine.connect()"},{"line_number":82,"context_line":"        conn.execute(\u0027CREATE DATABASE %s\u0027 % db_name)"},{"line_number":83,"context_line":"        conn.close()"},{"line_number":84,"context_line":"        url \u003d self.url.replace(\u0027ceilometer\u0027, db_name)"},{"line_number":85,"context_line":"        return url"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F82%2Fw%3D","line":82,"in_reply_to":"AAAATn%2F83OI%3D","updated":"2013-12-19 14:03:39.000000000","message":"Would that then be a case for having a \u0027setup_database\u0027 routine or something for all database tests as we move towards more live database tests?","commit_id":"4b87db0adefadd329d62d7a3deee3ea2a810552e"},{"author":{"_account_id":7763,"name":"Alexei Kornienko","email":"akornienko@mirantis.com","username":"akornienko"},"change_message_id":"1370f9ac0a5c6d7b07d0a99458a52114d6172885","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        db_name \u003d \u0027ceilometer_%s\u0027 % str(uuid.uuid4()).replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":80,"context_line":"        engine \u003d sqlalchemy.create_engine(self.url.replace(\u0027ceilometer\u0027, \u0027\u0027))"},{"line_number":81,"context_line":"        conn \u003d engine.connect()"},{"line_number":82,"context_line":"        conn.execute(\u0027CREATE DATABASE %s\u0027 % db_name)"},{"line_number":83,"context_line":"        conn.close()"},{"line_number":84,"context_line":"        url \u003d self.url.replace(\u0027ceilometer\u0027, db_name)"},{"line_number":85,"context_line":"        return url"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F83OI%3D","line":82,"in_reply_to":"AAAATn%2F83fs%3D","updated":"2013-12-19 13:19:59.000000000","message":"1) Database cannot be created in __init__ since init is called once for all tests.\nWe need to create database in each test during setUp (and that\u0027s where str is called :). Yeah I know it looks crazy.)\n\n2) We have to create DB manually cause for MySQL sqlalchemy executes \"USE DB_NAME;\" when we provide an url with a database specified so it has to exist as that moment.","commit_id":"4b87db0adefadd329d62d7a3deee3ea2a810552e"}]}
