)]}'
{"neutron/agent/dhcp_agent.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c4b29f234087e2cc0112f2c9fbf30b42208ba5e0","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                reasons \u003d self.needs_resync_reasons"},{"line_number":188,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":189,"context_line":"                for r in reasons:"},{"line_number":190,"context_line":"                    LOG.warn(_(\"resync: %(reason)s\"),"},{"line_number":191,"context_line":"                              {\"reason\": r})"},{"line_number":192,"context_line":"                self.sync_state()"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_414fdc92","line":190,"updated":"2014-08-31 06:54:14.000000000","message":"Since you have to re-upload to fix PEP8, can you switch to _LW here?","commit_id":"a1109575db60db746da15ab7df32271d3023324a"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"712223426b0b32deaf9328e6c37b6d8703132082","unresolved":false,"context_lines":[{"line_number":187,"context_line":"                reasons \u003d self.needs_resync_reasons"},{"line_number":188,"context_line":"                self.needs_resync_reasons \u003d []"},{"line_number":189,"context_line":"                for r in reasons:"},{"line_number":190,"context_line":"                    LOG.warn(_(\"resync: %(reason)s\"),"},{"line_number":191,"context_line":"                              {\"reason\": r})"},{"line_number":192,"context_line":"                self.sync_state()"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_f5087c2f","line":190,"in_reply_to":"fa98f980_414fdc92","updated":"2014-09-01 06:47:03.000000000","message":"this change is not part of this patch, it ended up here by mistake.","commit_id":"a1109575db60db746da15ab7df32271d3023324a"}],"neutron/db/migration/__init__.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"294342eceda51886e9be0cb6148ce089043dc17a","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    return decorator"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def schema_has_object(table_name, column_name\u003dNone):"},{"line_number":37,"context_line":"    \"\"\"Check whether the specified object exists in the current schema."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    This method can check for existence of tables or attributes in the"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_21be7000","line":36,"updated":"2014-08-04 17:58:12.000000000","message":"I think this method does what was intended.  So, I\u0027m okay with it.  However, I think it is a bit overloaded.  I think the code might read better both here and where this method is called if this were split in to two methods named something like this:\n\nschema_has_table\nscheme_table_has_column\n    calls schema_has_table\n\nIt would probably duplicate a couple of lines of code.  You\u0027d have to weigh the trade-off.","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"c91120dea284e30f9351a1640aea0e7beb9b2cbb","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    return decorator"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def schema_has_object(table_name, column_name\u003dNone):"},{"line_number":37,"context_line":"    \"\"\"Check whether the specified object exists in the current schema."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    This method can check for existence of tables or attributes in the"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_a677069f","line":36,"in_reply_to":"baada198_21be7000","updated":"2014-08-22 12:21:53.000000000","message":"I think I can do as you suggest.\nClearer code is worth some duplication.","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"d8572ebac414776ef587dc4ad495fae71f293fbd","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    insp \u003d sa.engine.reflection.Inspector.from_engine(bind)"},{"line_number":43,"context_line":"    if table_name in insp.get_table_names():"},{"line_number":44,"context_line":"        return True"},{"line_number":45,"context_line":"    return False"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def schema_has_column(table_name, column_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_349d170b","line":45,"updated":"2014-08-28 10:08:05.000000000","message":"why not just \n\n    return table_name in insp.get_table_names() ?","commit_id":"e11ab1ee9e2d1d48310d4d6140e3124c6686571b"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"2c08699bc0f86a76063dc8687408881422691998","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    insp \u003d sa.engine.reflection.Inspector.from_engine(bind)"},{"line_number":43,"context_line":"    if table_name in insp.get_table_names():"},{"line_number":44,"context_line":"        return True"},{"line_number":45,"context_line":"    return False"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def schema_has_column(table_name, column_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_9bc88aa9","line":45,"in_reply_to":"1abeadc6_349d170b","updated":"2014-08-29 19:17:56.000000000","message":"right this was part of a larger method I split hence the different logic.\n\nwill do as you say","commit_id":"e11ab1ee9e2d1d48310d4d6140e3124c6686571b"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"c4b29f234087e2cc0112f2c9fbf30b42208ba5e0","unresolved":false,"context_lines":[{"line_number":36,"context_line":"def schema_has_table(table_name):"},{"line_number":37,"context_line":"    \"\"\"Check whether the specified table exists in the current schema."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    This method cannot be executed in offline mode."},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    bind \u003d op.get_bind()"},{"line_number":42,"context_line":"    insp \u003d sa.engine.reflection.Inspector.from_engine(bind)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa98f980_e12e10a5","line":39,"updated":"2014-08-31 06:54:14.000000000","message":"Would it be a good idea to add a check here for offline mode as a sanity check that throws an easy to recognize error if someone forgets the skip_if_offline decorator on one of the online migrations?","commit_id":"a1109575db60db746da15ab7df32271d3023324a"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"bc1b0be8de828b49d2e6728cf779025615a1bc14","unresolved":false,"context_lines":[{"line_number":30,"context_line":"            return"},{"line_number":31,"context_line":"        return func(*args, **kwargs)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    return decorator"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def raise_if_offline(func):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_7d24cb0c","line":33,"updated":"2014-09-04 12:31:12.000000000","message":"Nit: I noticed a side-effect of this:\n\n ...\n INFO  [alembic.migration] Running upgrade 5ac1c354a051 -\u003e icehouse, icehouse\n INFO  [alembic.migration] Running decorator icehouse -\u003e 54f7549a0e5f, set_not_null_peer_address\n INFO  [alembic.migration] Running decorator 54f7549a0e5f -\u003e 1e5dd1d09b22, set_not_null_fields_lb_stats\n INFO  [alembic.migration] Running decorator 1e5dd1d09b22 -\u003e b65aa907aec, set_length_of_protocol_field\n INFO  [alembic.migration] Running upgrade b65aa907aec -\u003e 33c3db036fe4, set_length_of_description_field_metering\n INFO  [alembic.migration] Running upgrade 33c3db036fe4 -\u003e 4eca4a84f08a, Remove ML2 Cisco Credentials DB\n INFO  [alembic.migration] Running decorator 4eca4a84f08a -\u003e d06e871c0d5, set_admin_state_up_not_null_ml2\n INFO  [alembic.migration] Running decorator d06e871c0d5 -\u003e 6be312499f9, set_not_null_vlan_id_cisco\n INFO  [alembic.migration] Running upgrade 6be312499f9 -\u003e 1b837a7125a9, Cisco APIC Mechanism Driver\n INFO  [alembic.migration] Running upgrade 1b837a7125a9 -\u003e 10cd28e692e9, nuage_extraroute\n INFO  [alembic.migration] Running decorator 10cd28e692e9 -\u003e 2db5203cb7a9, nuage_floatingip\n INFO  [alembic.migration] Running upgrade 2db5203cb7a9 -\u003e 5446f2a45467, set_server_default\n ...\n\nNote that the upgrade prints \u0027Running decorator ...\u0027 instead of \u0027Running upgrade ...\u0027 where the decorator is used. The same happens with the downgrades.\n\nI did manage to fix (mask?) this by adding the following at line 32:\n\n    if func.__name__ in (\u0027upgrade\u0027, \u0027downgrade\u0027):\n        decorator.__name__ \u003d func.__name__\n\nQuite ugly, I know. Worth considering in a follow-up patch? I am not sure how important the migration messages are to people.","commit_id":"f657a2fdfdc764cab087ab86b8229999e61c4405"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"d6ea2152ddd527634d03bbbc70a0dfc8a933ecbf","unresolved":false,"context_lines":[{"line_number":30,"context_line":"            return"},{"line_number":31,"context_line":"        return func(*args, **kwargs)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    return decorator"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def raise_if_offline(func):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_277c5aeb","line":33,"in_reply_to":"fa98f980_6ef033ca","updated":"2014-09-09 20:30:29.000000000","message":"Yes! Thanks. Done.","commit_id":"f657a2fdfdc764cab087ab86b8229999e61c4405"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"ee9006bb2a92b91526fef595f2e94465b261cdf8","unresolved":false,"context_lines":[{"line_number":30,"context_line":"            return"},{"line_number":31,"context_line":"        return func(*args, **kwargs)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    return decorator"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"def raise_if_offline(func):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_6ef033ca","line":33,"in_reply_to":"fa98f980_7d24cb0c","updated":"2014-09-08 13:36:19.000000000","message":"functools.wraps should fix this","commit_id":"f657a2fdfdc764cab087ab86b8229999e61c4405"},{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"4b6d465694ea2f991f67daac95c1e5c458f9ee4c","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    @functools.wraps(func)"},{"line_number":42,"context_line":"    def decorator(*args, **kwargs):"},{"line_number":43,"context_line":"        if context.is_offline_mode():"},{"line_number":44,"context_line":"            raise RuntimeError(\"%s cannot be called while in offline mode\" %"},{"line_number":45,"context_line":"                               func.__name__)"},{"line_number":46,"context_line":"        return func(*args, **kwargs)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_3f143043","line":44,"updated":"2014-09-11 09:30:49.000000000","message":"nit: shouldn\u0027t this be translated ?","commit_id":"73fd8650c32fea0eea1b11f6c87dda153a244fa2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"2c0a23be0524aefd022b7c37b470ce0dfa239626","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    @functools.wraps(func)"},{"line_number":42,"context_line":"    def decorator(*args, **kwargs):"},{"line_number":43,"context_line":"        if context.is_offline_mode():"},{"line_number":44,"context_line":"            raise RuntimeError(\"%s cannot be called while in offline mode\" %"},{"line_number":45,"context_line":"                               func.__name__)"},{"line_number":46,"context_line":"        return func(*args, **kwargs)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_e572f948","line":44,"in_reply_to":"fa98f980_3f143043","updated":"2014-09-12 04:12:21.000000000","message":"Done","commit_id":"73fd8650c32fea0eea1b11f6c87dda153a244fa2"},{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"4b6d465694ea2f991f67daac95c1e5c458f9ee4c","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"@raise_if_offline"},{"line_number":79,"context_line":"def alter_column_if_exists(table_name, column_name, **kwargs):"},{"line_number":80,"context_line":"    \"\"\"Alter a column only if it exists in the schema. \"\"\""},{"line_number":81,"context_line":"    if schema_has_column(table_name, column_name):"},{"line_number":82,"context_line":"        op.alter_column(table_name, column_name, **kwargs)"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_df532415","line":80,"updated":"2014-09-11 09:30:49.000000000","message":"nit: remove space after .","commit_id":"73fd8650c32fea0eea1b11f6c87dda153a244fa2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"2c0a23be0524aefd022b7c37b470ce0dfa239626","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"@raise_if_offline"},{"line_number":79,"context_line":"def alter_column_if_exists(table_name, column_name, **kwargs):"},{"line_number":80,"context_line":"    \"\"\"Alter a column only if it exists in the schema. \"\"\""},{"line_number":81,"context_line":"    if schema_has_column(table_name, column_name):"},{"line_number":82,"context_line":"        op.alter_column(table_name, column_name, **kwargs)"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_25a241ae","line":80,"in_reply_to":"fa98f980_df532415","updated":"2014-09-12 04:12:21.000000000","message":"Done","commit_id":"73fd8650c32fea0eea1b11f6c87dda153a244fa2"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"48d67bb06d234ba849a00f20ccf8d31b146f74a6","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    insp \u003d sa.engine.reflection.Inspector.from_engine(bind)"},{"line_number":70,"context_line":"    # first check that the table exists"},{"line_number":71,"context_line":"    if not schema_has_table(table_name):"},{"line_number":72,"context_line":"        return"},{"line_number":73,"context_line":"    # check whether column_name exists in table columns"},{"line_number":74,"context_line":"    return column_name in [column[\u0027name\u0027] for column in"},{"line_number":75,"context_line":"                           insp.get_columns(table_name)]"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_11f558ec","line":72,"updated":"2014-09-14 08:49:07.000000000","message":"Complaint that doesn\u0027t matter. This returns False, None, or True. False or None both mean that the column doesn\u0027t exist in the schema. A \u0027None\u0027 response to a yes/no question seems strange.","commit_id":"6bb671868821dc2f85fc0cdd2da870274b9d18f7"}],"neutron/db/migration/alembic_migrations/versions/10cd28e692e9_nuage_extraroute.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"0dc625d024dac2c2bd825fa61dcdac2c7752fb28","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# This migration will be executed only if the neutron DB schema"},{"line_number":31,"context_line":"# contains the tables for the nuage plugin."},{"line_number":32,"context_line":"# This migration will be skipped when executed in offline mode."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from alembic import op"},{"line_number":35,"context_line":"import sqlalchemy as sa"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_8a91379c","line":32,"updated":"2014-07-26 08:35:45.000000000","message":"perhaps it might be possible to keep this migration working offline","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"0dc625d024dac2c2bd825fa61dcdac2c7752fb28","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    )"},{"line_number":49,"context_line":"    # This table might already exist as it might have been created"},{"line_number":50,"context_line":"    # if another plugin was configured before the nuage one"},{"line_number":51,"context_line":"    if not migration.schema_has_object(\u0027routerroutes\u0027):"},{"line_number":52,"context_line":"        op.create_table("},{"line_number":53,"context_line":"            \u0027routerroutes\u0027,"},{"line_number":54,"context_line":"            sa.Column(\u0027destination\u0027, sa.String(length\u003d64), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_aab51b33","line":51,"updated":"2014-07-26 08:35:45.000000000","message":"I could use CREATE TABLE IF NOT EXISTS here","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"294342eceda51886e9be0cb6148ce089043dc17a","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    )"},{"line_number":49,"context_line":"    # This table might already exist as it might have been created"},{"line_number":50,"context_line":"    # if another plugin was configured before the nuage one"},{"line_number":51,"context_line":"    if not migration.schema_has_object(\u0027routerroutes\u0027):"},{"line_number":52,"context_line":"        op.create_table("},{"line_number":53,"context_line":"            \u0027routerroutes\u0027,"},{"line_number":54,"context_line":"            sa.Column(\u0027destination\u0027, sa.String(length\u003d64), nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_2176703f","line":51,"in_reply_to":"baada198_aab51b33","updated":"2014-08-04 17:58:12.000000000","message":"+1","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"0dc625d024dac2c2bd825fa61dcdac2c7752fb28","unresolved":false,"context_lines":[{"line_number":64,"context_line":"@migration.skip_if_offline"},{"line_number":65,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":66,"context_line":"    # The routerroutes table should not be dropped"},{"line_number":67,"context_line":"    migration.drop_table_if_exists(\u0027routerroutes_mapping\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_4a7c7f71","line":67,"updated":"2014-07-26 08:35:45.000000000","message":"I could use DROP TABLE IF EXISTS here","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"294342eceda51886e9be0cb6148ce089043dc17a","unresolved":false,"context_lines":[{"line_number":64,"context_line":"@migration.skip_if_offline"},{"line_number":65,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":66,"context_line":"    # The routerroutes table should not be dropped"},{"line_number":67,"context_line":"    migration.drop_table_if_exists(\u0027routerroutes_mapping\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_a18a8017","line":67,"in_reply_to":"baada198_4a7c7f71","updated":"2014-08-04 17:58:12.000000000","message":"Isn\u0027t that what is done here?  Or, are you suggesting something else?  I don\u0027t understand this comment.","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"3b57fa822cec0cbd6dae7458838eeb2e4478aa5f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"@migration.skip_if_offline"},{"line_number":65,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":66,"context_line":"    # The routerroutes table should not be dropped"},{"line_number":67,"context_line":"    migration.drop_table_if_exists(\u0027routerroutes_mapping\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_d2d8cb26","line":67,"in_reply_to":"baada198_a18a8017","updated":"2014-08-06 17:01:40.000000000","message":"I meant doing that using DDL commands direct so that the migration would run offline as well.\n\nmigration.drop_table_if_exists compares model metatadata with current db schema.","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"192fe9cc5567eb32475b0ec81c839aab609d3484","unresolved":false,"context_lines":[{"line_number":64,"context_line":"@migration.skip_if_offline"},{"line_number":65,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":66,"context_line":"    # The routerroutes table should not be dropped"},{"line_number":67,"context_line":"    migration.drop_table_if_exists(\u0027routerroutes_mapping\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_9c19de7c","line":67,"in_reply_to":"baada198_d2d8cb26","updated":"2014-08-07 18:41:50.000000000","message":"Thanks for the explanation.  I\u0027m new to this area.","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"20a1da07ae877894b7eb33f9ee764c757b119018","unresolved":false,"context_lines":[{"line_number":46,"context_line":"               \"router_id VARCHAR(36) NOT NULL, \""},{"line_number":47,"context_line":"               \"PRIMARY KEY (`destination`, `nexthop`, `router_id`),\""},{"line_number":48,"context_line":"               \"FOREIGN KEY(`router_id`) REFERENCES `routers` (`id`) \""},{"line_number":49,"context_line":"               \"ON DELETE CASCADE ON UPDATE CASCADE)\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_63085728","line":49,"updated":"2014-08-24 01:18:49.000000000","message":"The postgres gate job seems to be choking on this statement.\n\nhttp://logs.openstack.org/68/109768/2/check/check-tempest-dsvm-neutron-pg/5b38920/logs/devstacklog.txt.gz#_2014-08-23_13_44_35_462","commit_id":"a7691cdf6ffa0b801e9aa1551b52dadba9afe0a6"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"1a92dd82e6e3eccff80b855ed94496ec4ba308cd","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":39,"context_line":"        sa.Column(\u0027nuage_route_id\u0027, sa.String(length\u003d36), nullable\u003dTrue),"},{"line_number":40,"context_line":"        sa.ForeignKeyConstraint([\u0027router_id\u0027], [\u0027routers.id\u0027],"},{"line_number":41,"context_line":"                                ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":42,"context_line":"    )"},{"line_number":43,"context_line":"    # This table might already exist as it might have been created"},{"line_number":44,"context_line":"    # if another plugin was configured before the nuage one"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_8e638c19","line":41,"updated":"2014-09-01 14:35:33.000000000","message":"I get an error here. Postgres says \"relation \u0027routers\u0027 does not exist\". Mysql just says OperationalError.","commit_id":"0e7b8091b959940985cdf41a111c798db59c66b2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"162e896a1fdf54077f92ed9097334d4ac43ff971","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":39,"context_line":"        sa.Column(\u0027nuage_route_id\u0027, sa.String(length\u003d36), nullable\u003dTrue),"},{"line_number":40,"context_line":"        sa.ForeignKeyConstraint([\u0027router_id\u0027], [\u0027routers.id\u0027],"},{"line_number":41,"context_line":"                                ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":42,"context_line":"    )"},{"line_number":43,"context_line":"    # This table might already exist as it might have been created"},{"line_number":44,"context_line":"    # if another plugin was configured before the nuage one"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_5fbeb000","line":41,"in_reply_to":"fa98f980_0904f679","updated":"2014-09-01 15:10:43.000000000","message":"Aargh. I had messed up my config file and did not have a core_plugin configured. With the core_plugin properly configured I do not get an error. Sorry for the noise.","commit_id":"0e7b8091b959940985cdf41a111c798db59c66b2"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"d8c28baa0f7eb017dda5f89f0abcb925a739ab51","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        sa.Column(\u0027router_id\u0027, sa.String(length\u003d36), nullable\u003dFalse),"},{"line_number":39,"context_line":"        sa.Column(\u0027nuage_route_id\u0027, sa.String(length\u003d36), nullable\u003dTrue),"},{"line_number":40,"context_line":"        sa.ForeignKeyConstraint([\u0027router_id\u0027], [\u0027routers.id\u0027],"},{"line_number":41,"context_line":"                                ondelete\u003d\u0027CASCADE\u0027),"},{"line_number":42,"context_line":"    )"},{"line_number":43,"context_line":"    # This table might already exist as it might have been created"},{"line_number":44,"context_line":"    # if another plugin was configured before the nuage one"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa98f980_0904f679","line":41,"in_reply_to":"fa98f980_8e638c19","updated":"2014-09-01 14:42:03.000000000","message":"How do you get this error? I just want to know as when I check I didn\u0027t get such error.","commit_id":"0e7b8091b959940985cdf41a111c798db59c66b2"}],"neutron/db/migration/alembic_migrations/versions/1b837a7125a9_cisco_apic_driver.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"0dc625d024dac2c2bd825fa61dcdac2c7752fb28","unresolved":false,"context_lines":[{"line_number":67,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":68,"context_line":"    migration.drop_table_if_exists(\u0027cisco_ml2_apic_contracts\u0027)"},{"line_number":69,"context_line":"    migration.drop_table_if_exists(\u0027cisco_ml2_apic_port_profiles\u0027)"},{"line_number":70,"context_line":"    migration.drop_table_if_exists(\u0027cisco_ml2_apic_epgs\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_aa8c3b81","line":70,"updated":"2014-07-26 08:35:45.000000000","message":"DROP TABLE IF EXISTS and you won\u0027t be forced to run this migration in online mode","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"bbd74568a718f2bbbc11ee86a43219a6b1adcb38","unresolved":false,"context_lines":[{"line_number":67,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":68,"context_line":"    migration.drop_table_if_exists(\u0027cisco_ml2_apic_contracts\u0027)"},{"line_number":69,"context_line":"    migration.drop_table_if_exists(\u0027cisco_ml2_apic_port_profiles\u0027)"},{"line_number":70,"context_line":"    migration.drop_table_if_exists(\u0027cisco_ml2_apic_epgs\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1abeadc6_87263fb9","line":70,"in_reply_to":"baada198_32ff4768","updated":"2014-08-18 12:35:09.000000000","message":"Thanks, I get this.","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"864ab5532b21d942af1a6b1874a597313a40bd3e","unresolved":false,"context_lines":[{"line_number":67,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":68,"context_line":"    migration.drop_table_if_exists(\u0027cisco_ml2_apic_contracts\u0027)"},{"line_number":69,"context_line":"    migration.drop_table_if_exists(\u0027cisco_ml2_apic_port_profiles\u0027)"},{"line_number":70,"context_line":"    migration.drop_table_if_exists(\u0027cisco_ml2_apic_epgs\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_e13ab8e4","line":70,"in_reply_to":"baada198_aa8c3b81","updated":"2014-07-28 14:41:33.000000000","message":"I\u0027ve got one question. Why do we need need to check everytime that objects does exists before dropping? I didn\u0027t get this...","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"3b57fa822cec0cbd6dae7458838eeb2e4478aa5f","unresolved":false,"context_lines":[{"line_number":67,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":68,"context_line":"    migration.drop_table_if_exists(\u0027cisco_ml2_apic_contracts\u0027)"},{"line_number":69,"context_line":"    migration.drop_table_if_exists(\u0027cisco_ml2_apic_port_profiles\u0027)"},{"line_number":70,"context_line":"    migration.drop_table_if_exists(\u0027cisco_ml2_apic_epgs\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_32ff4768","line":70,"in_reply_to":"baada198_e13ab8e4","updated":"2014-08-06 17:01:40.000000000","message":"because it\u0027s not guaranteed we\u0027ll be downgrading from a healed state..","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"84adc9bec89b79a41761e6f66fa01015a1457e51","unresolved":false,"context_lines":[{"line_number":60,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":61,"context_line":"    op.execute(\u0027DROP TABLE IF EXISTS cisco_ml2_apic_contracts\u0027)"},{"line_number":62,"context_line":"    op.execute(\u0027DROP TABLE IF EXISTS cisco_ml2_apic_port_profiles\u0027)"},{"line_number":63,"context_line":"    op.execute(\u0027DROP TABLE IF EXISTS cisco_ml2_apic_epgs\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_da03240e","line":63,"updated":"2014-09-11 17:57:15.000000000","message":"I read comments in the past patch set, but I still cannot understand why we need \"IF EXISTS\". This migration is the first migration to create these tables and the healing migration does not delete a table. I think it means these tables always exist when downgrade() is called. On the other hand, \"IF EXISTS\" does not harm anything, so the current code is no problem.","commit_id":"73fd8650c32fea0eea1b11f6c87dda153a244fa2"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"cbfa49bef25e644e67eced8309af15452c5a1ae4","unresolved":false,"context_lines":[{"line_number":60,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":61,"context_line":"    op.execute(\u0027DROP TABLE IF EXISTS cisco_ml2_apic_contracts\u0027)"},{"line_number":62,"context_line":"    op.execute(\u0027DROP TABLE IF EXISTS cisco_ml2_apic_port_profiles\u0027)"},{"line_number":63,"context_line":"    op.execute(\u0027DROP TABLE IF EXISTS cisco_ml2_apic_epgs\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_14480db2","line":63,"in_reply_to":"fa98f980_458e652f","updated":"2014-09-12 08:04:21.000000000","message":"As I understand from Salvatore\u0027s comment  \u0027IF EXISTS\u0027 is needed because if we ran upgrade in conditional state, but heal migration was not running for some reason, than in unconditional state dropping this tables could failed if plugin was different from Ml2.","commit_id":"73fd8650c32fea0eea1b11f6c87dda153a244fa2"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"2c0a23be0524aefd022b7c37b470ce0dfa239626","unresolved":false,"context_lines":[{"line_number":60,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":61,"context_line":"    op.execute(\u0027DROP TABLE IF EXISTS cisco_ml2_apic_contracts\u0027)"},{"line_number":62,"context_line":"    op.execute(\u0027DROP TABLE IF EXISTS cisco_ml2_apic_port_profiles\u0027)"},{"line_number":63,"context_line":"    op.execute(\u0027DROP TABLE IF EXISTS cisco_ml2_apic_epgs\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_458e652f","line":63,"in_reply_to":"fa98f980_da03240e","updated":"2014-09-12 04:12:21.000000000","message":"Done","commit_id":"73fd8650c32fea0eea1b11f6c87dda153a244fa2"}],"neutron/db/migration/alembic_migrations/versions/1e5dd1d09b22_set_not_null_fields_lb_stats.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"04b74281491bd660aefc853ae852a6a05441bdbe","unresolved":false,"context_lines":[{"line_number":25,"context_line":"revision \u003d \u00271e5dd1d09b22\u0027"},{"line_number":26,"context_line":"down_revision \u003d \u002754f7549a0e5f\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"# Change to [\u0027*\u0027] if this migration applies to all plugins"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# This migration will be executed only if the neutron DB schema"},{"line_number":31,"context_line":"# contains the tables for load balancing service plugin."}],"source_content_type":"text/x-python","patch_set":2,"id":"1abeadc6_5566c8bb","line":28,"updated":"2014-08-22 18:42:49.000000000","message":"It seems unnecessary.","commit_id":"a7691cdf6ffa0b801e9aa1551b52dadba9afe0a6"}],"neutron/db/migration/alembic_migrations/versions/4eca4a84f08a_remove_ml2_cisco_cred_db.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"0dc625d024dac2c2bd825fa61dcdac2c7752fb28","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"@migration.skip_if_offline"},{"line_number":39,"context_line":"def upgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":40,"context_line":"    migration.drop_table_if_exists(\u0027cisco_ml2_credentials\u0027)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"@migration.skip_if_offline"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_0aed2725","line":40,"updated":"2014-07-26 08:35:45.000000000","message":"DROP TABLE IF EXISTS","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"0dc625d024dac2c2bd825fa61dcdac2c7752fb28","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"@migration.skip_if_offline"},{"line_number":44,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":45,"context_line":"    if not migration.schema_has_object(\u0027cisco_ml2_credentials\u0027):"},{"line_number":46,"context_line":"        op.create_table("},{"line_number":47,"context_line":"            \u0027cisco_ml2_credentials\u0027,"},{"line_number":48,"context_line":"            sa.Column(\u0027credential_id\u0027, sa.String(length\u003d255), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_eae9d31a","line":45,"updated":"2014-07-26 08:35:45.000000000","message":"CREATE TABLE IF EXISTS","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"294342eceda51886e9be0cb6148ce089043dc17a","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"@migration.skip_if_offline"},{"line_number":44,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":45,"context_line":"    if not migration.schema_has_object(\u0027cisco_ml2_credentials\u0027):"},{"line_number":46,"context_line":"        op.create_table("},{"line_number":47,"context_line":"            \u0027cisco_ml2_credentials\u0027,"},{"line_number":48,"context_line":"            sa.Column(\u0027credential_id\u0027, sa.String(length\u003d255), nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_e1fc7873","line":45,"in_reply_to":"baada198_eae9d31a","updated":"2014-08-04 17:58:12.000000000","message":"+1","commit_id":"7dd25f74bda08a9d635e170eee07163a991424e4"}],"neutron/db/migration/alembic_migrations/versions/b65aa907aec_set_length_of_protocol_field.py":[{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"d8572ebac414776ef587dc4ad495fae71f293fbd","unresolved":false,"context_lines":[{"line_number":38,"context_line":"@migration.skip_if_offline"},{"line_number":39,"context_line":"def upgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":40,"context_line":"    if migration.schema_has_column(\u0027firewall_rules\u0027, column_name\u003d\u0027protocol\u0027):"},{"line_number":41,"context_line":"        op.alter_column(\u0027firewall_rules\u0027, \u0027protocol\u0027, type_\u003dsa.String(40),"},{"line_number":42,"context_line":"                        existing_nullable\u003dTrue)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_d4006304","line":41,"updated":"2014-08-28 10:08:05.000000000","message":"Why not just use migration.alter_column_if_exists instead of checking that column exists separately?","commit_id":"e11ab1ee9e2d1d48310d4d6140e3124c6686571b"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"2c08699bc0f86a76063dc8687408881422691998","unresolved":false,"context_lines":[{"line_number":38,"context_line":"@migration.skip_if_offline"},{"line_number":39,"context_line":"def upgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":40,"context_line":"    if migration.schema_has_column(\u0027firewall_rules\u0027, column_name\u003d\u0027protocol\u0027):"},{"line_number":41,"context_line":"        op.alter_column(\u0027firewall_rules\u0027, \u0027protocol\u0027, type_\u003dsa.String(40),"},{"line_number":42,"context_line":"                        existing_nullable\u003dTrue)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_1bbc7a05","line":41,"in_reply_to":"1abeadc6_d4006304","updated":"2014-08-29 19:17:56.000000000","message":"I think this method was merged concurrently.\nI can reconcile","commit_id":"e11ab1ee9e2d1d48310d4d6140e3124c6686571b"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"d8572ebac414776ef587dc4ad495fae71f293fbd","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                        existing_nullable\u003dTrue)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"@migration.skip_if_offline"},{"line_number":46,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":47,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_371ef95f","line":45,"updated":"2014-08-28 10:08:05.000000000","message":"Do we really need this decorator here?","commit_id":"e11ab1ee9e2d1d48310d4d6140e3124c6686571b"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"2c08699bc0f86a76063dc8687408881422691998","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                        existing_nullable\u003dTrue)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"@migration.skip_if_offline"},{"line_number":46,"context_line":"def downgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":47,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"1abeadc6_3bb77622","line":45,"in_reply_to":"1abeadc6_371ef95f","updated":"2014-08-29 19:17:56.000000000","message":"nope","commit_id":"e11ab1ee9e2d1d48310d4d6140e3124c6686571b"}],"neutron/tests/unit/test_db_migration.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"2678250a3ff4a306186eb265fd8b61d1dc3db074","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        super(TestDbMigration, self).setUp()"},{"line_number":31,"context_line":"        mock.patch(\u0027alembic.op.get_bind\u0027).start()"},{"line_number":32,"context_line":"        self.mock_alembic_is_offline \u003d mock.patch("},{"line_number":33,"context_line":"            \u0027alembic.context.is_offline_mode\u0027).start()"},{"line_number":34,"context_line":"        self.mock_alembic_is_offline.return_value \u003d False"},{"line_number":35,"context_line":"        self.mock_sa_inspector \u003d mock.patch("},{"line_number":36,"context_line":"            \u0027sqlalchemy.engine.reflection.Inspector\u0027).start()"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_3e289d85","line":33,"updated":"2014-09-03 16:05:09.000000000","message":"Nit: \n\nself.mock_alembic_is_offline \u003d mock.patch(\n    \u0027alembic.context.is_offline_mode\u0027,\n    return_value\u003dFalse).start()","commit_id":"f657a2fdfdc764cab087ab86b8229999e61c4405"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"d6ea2152ddd527634d03bbbc70a0dfc8a933ecbf","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        super(TestDbMigration, self).setUp()"},{"line_number":31,"context_line":"        mock.patch(\u0027alembic.op.get_bind\u0027).start()"},{"line_number":32,"context_line":"        self.mock_alembic_is_offline \u003d mock.patch("},{"line_number":33,"context_line":"            \u0027alembic.context.is_offline_mode\u0027).start()"},{"line_number":34,"context_line":"        self.mock_alembic_is_offline.return_value \u003d False"},{"line_number":35,"context_line":"        self.mock_sa_inspector \u003d mock.patch("},{"line_number":36,"context_line":"            \u0027sqlalchemy.engine.reflection.Inspector\u0027).start()"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa98f980_67a2e24c","line":33,"in_reply_to":"fa98f980_3e289d85","updated":"2014-09-09 20:30:29.000000000","message":"Done","commit_id":"f657a2fdfdc764cab087ab86b8229999e61c4405"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"48d67bb06d234ba849a00f20ccf8d31b146f74a6","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        mock.patch(\u0027alembic.op.get_bind\u0027).start()"},{"line_number":32,"context_line":"        self.mock_alembic_is_offline \u003d mock.patch("},{"line_number":33,"context_line":"            \u0027alembic.context.is_offline_mode\u0027, return_value\u003dFalse).start()"},{"line_number":34,"context_line":"        self.mock_alembic_is_offline.return_value \u003d False"},{"line_number":35,"context_line":"        self.mock_sa_inspector \u003d mock.patch("},{"line_number":36,"context_line":"            \u0027sqlalchemy.engine.reflection.Inspector\u0027).start()"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa98f980_718ea47a","line":34,"updated":"2014-09-14 08:49:07.000000000","message":"It\u0027s not worth blocking the patch, but isn\u0027t this a noop because of the \u0027return_value\u0027 in line 33?","commit_id":"6bb671868821dc2f85fc0cdd2da870274b9d18f7"}]}
