)]}'
{"keystone/common/sql/migrate_repo/versions/009_normalize_identity.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"3bfbd7fce19244189c437fe76cc88f8bc2035650","unresolved":false,"context_lines":[{"line_number":105,"context_line":"def downgrade(migrate_engine):"},{"line_number":106,"context_line":"    meta \u003d MetaData()"},{"line_number":107,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":108,"context_line":"    if CONF.sql.connection.startswith(\"sqlite\"):"},{"line_number":109,"context_line":"        downgrade_user_table_sqlite(meta, migrate_engine)"},{"line_number":110,"context_line":"        downgrade_tenant_table_sqlite(meta, migrate_engine)"},{"line_number":111,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FBS0%3D","line":108,"updated":"2013-02-11 14:11:05.000000000","message":"i wouldn\u0027t base this on CONF, instead:\n\n  if migrate_engine.driver \u003d\u003d \u0027pysqlite\u0027:","commit_id":"0bd114acae68d3ff8e28e6eb73ae2e35080c8fa6"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"8a0813dddbf3cb1ecb206e6d10732819b142d4b3","unresolved":false,"context_lines":[{"line_number":105,"context_line":"def downgrade(migrate_engine):"},{"line_number":106,"context_line":"    meta \u003d MetaData()"},{"line_number":107,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":108,"context_line":"    if CONF.sql.connection.startswith(\"sqlite\"):"},{"line_number":109,"context_line":"        downgrade_user_table_sqlite(meta, migrate_engine)"},{"line_number":110,"context_line":"        downgrade_tenant_table_sqlite(meta, migrate_engine)"},{"line_number":111,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FBPM%3D","line":108,"in_reply_to":"AAAAM3%2F%2FBS0%3D","updated":"2013-02-11 14:44:51.000000000","message":"Done","commit_id":"0bd114acae68d3ff8e28e6eb73ae2e35080c8fa6"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"b9912d49837b89e568f7efb876172f9b081ad6a1","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from sqlalchemy.orm import sessionmaker"},{"line_number":20,"context_line":"from keystone import config"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"CONF \u003d config.CONF"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"#sqlite doesn\u0027t support dropping columns. Copy to a new table instead"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FBI0%3D","line":22,"updated":"2013-02-11 15:26:43.000000000","message":"you don\u0027t need CONF anymore","commit_id":"8d2dd44699e403564e431cdadcb58554f3c824d9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"b9912d49837b89e568f7efb876172f9b081ad6a1","unresolved":false,"context_lines":[{"line_number":79,"context_line":"def downgrade_tenant_table(meta, migrate_engine):"},{"line_number":80,"context_line":"    tenant_table \u003d Table(\u0027tenant\u0027, meta, autoload\u003dTrue)"},{"line_number":81,"context_line":"    tenant_table.drop_column(Column(\"description\", Text()))"},{"line_number":82,"context_line":"    tenant_table.drop_column(Column(\"enabled\", types.Boolean))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def upgrade_user_table(meta, migrate_engine):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FBI4%3D","line":82,"updated":"2013-02-11 15:26:43.000000000","message":"single quotes","commit_id":"8d2dd44699e403564e431cdadcb58554f3c824d9"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"fa3e5f3abf1b1052ebce77e0a8371b3eb943810e","unresolved":false,"context_lines":[{"line_number":79,"context_line":"def downgrade_tenant_table(meta, migrate_engine):"},{"line_number":80,"context_line":"    tenant_table \u003d Table(\u0027tenant\u0027, meta, autoload\u003dTrue)"},{"line_number":81,"context_line":"    tenant_table.drop_column(Column(\"description\", Text()))"},{"line_number":82,"context_line":"    tenant_table.drop_column(Column(\"enabled\", types.Boolean))"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def upgrade_user_table(meta, migrate_engine):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FA34%3D","line":82,"in_reply_to":"AAAAM3%2F%2FBI4%3D","updated":"2013-02-11 17:17:03.000000000","message":"Done","commit_id":"8d2dd44699e403564e431cdadcb58554f3c824d9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"b9912d49837b89e568f7efb876172f9b081ad6a1","unresolved":false,"context_lines":[{"line_number":105,"context_line":"def downgrade(migrate_engine):"},{"line_number":106,"context_line":"    meta \u003d MetaData()"},{"line_number":107,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":108,"context_line":"    if migrate_engine.driver \u003d\u003d \u0027pysqlite\u0027:"},{"line_number":109,"context_line":"        downgrade_user_table_sqlite(meta, migrate_engine)"},{"line_number":110,"context_line":"        downgrade_tenant_table_sqlite(meta, migrate_engine)"},{"line_number":111,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FBJA%3D","line":108,"updated":"2013-02-11 15:26:43.000000000","message":"hrm, so I lied... because this behavior is dependent on sqlite itself rather than the driver\u0027s implementation, using the engine name is more flexible:\n\n  if migrate_engine.name \u003d\u003d \u0027sqlite\u0027:","commit_id":"8d2dd44699e403564e431cdadcb58554f3c824d9"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"fa3e5f3abf1b1052ebce77e0a8371b3eb943810e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"def downgrade(migrate_engine):"},{"line_number":106,"context_line":"    meta \u003d MetaData()"},{"line_number":107,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":108,"context_line":"    if migrate_engine.driver \u003d\u003d \u0027pysqlite\u0027:"},{"line_number":109,"context_line":"        downgrade_user_table_sqlite(meta, migrate_engine)"},{"line_number":110,"context_line":"        downgrade_tenant_table_sqlite(meta, migrate_engine)"},{"line_number":111,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FA30%3D","line":108,"in_reply_to":"AAAAM3%2F%2FBJA%3D","updated":"2013-02-11 17:17:03.000000000","message":"Done","commit_id":"8d2dd44699e403564e431cdadcb58554f3c824d9"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"55b6c5beb6c9491fa841730fab96fe43c132323b","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":108,"context_line":"    if migrate_engine.driver \u003d\u003d \u0027pysqlite\u0027:"},{"line_number":109,"context_line":"        downgrade_user_table_sqlite(meta, migrate_engine)"},{"line_number":110,"context_line":"        downgrade_tenant_table_sqlite(meta, migrate_engine)"},{"line_number":111,"context_line":"    else:"},{"line_number":112,"context_line":"        downgrade_user_table(meta, migrate_engine)"},{"line_number":113,"context_line":"        downgrade_tenant_table(meta, migrate_engine)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FBG4%3D","line":110,"updated":"2013-02-11 15:41:14.000000000","message":"So in my version of this change (see https://review.openstack.org/#/c/19820/) I called the two sets of functions:\nupgrade....table_with_col_drop()\nupgrade....table_with_copy() \n...rather than putting the engine name in the function name.  However, I can include that when I merge up once this in.","commit_id":"8d2dd44699e403564e431cdadcb58554f3c824d9"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"fa3e5f3abf1b1052ebce77e0a8371b3eb943810e","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":108,"context_line":"    if migrate_engine.driver \u003d\u003d \u0027pysqlite\u0027:"},{"line_number":109,"context_line":"        downgrade_user_table_sqlite(meta, migrate_engine)"},{"line_number":110,"context_line":"        downgrade_tenant_table_sqlite(meta, migrate_engine)"},{"line_number":111,"context_line":"    else:"},{"line_number":112,"context_line":"        downgrade_user_table(meta, migrate_engine)"},{"line_number":113,"context_line":"        downgrade_tenant_table(meta, migrate_engine)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FA3k%3D","line":110,"in_reply_to":"AAAAM3%2F%2FBG4%3D","updated":"2013-02-11 17:17:03.000000000","message":"Done","commit_id":"8d2dd44699e403564e431cdadcb58554f3c824d9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2fc9d70a3fb2a17e06e252350fd5fa62ffd1857a","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":108,"context_line":"    if migrate_engine.driver \u003d\u003d \u0027pysqlite\u0027:"},{"line_number":109,"context_line":"        downgrade_user_table_sqlite(meta, migrate_engine)"},{"line_number":110,"context_line":"        downgrade_tenant_table_sqlite(meta, migrate_engine)"},{"line_number":111,"context_line":"    else:"},{"line_number":112,"context_line":"        downgrade_user_table(meta, migrate_engine)"},{"line_number":113,"context_line":"        downgrade_tenant_table(meta, migrate_engine)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2FBGc%3D","line":110,"in_reply_to":"AAAAM3%2F%2FBG4%3D","updated":"2013-02-11 15:43:24.000000000","message":"henry-nash: +1 for the engine abstraction beyond this point","commit_id":"8d2dd44699e403564e431cdadcb58554f3c824d9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"3b043f33af666d68371067bb219c4a69494057ef","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from sqlalchemy import Column, MetaData, String, Table, Text, types"},{"line_number":19,"context_line":"from sqlalchemy.orm import sessionmaker"},{"line_number":20,"context_line":"from keystone import config"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"#sqlite doesn\u0027t support dropping columns. Copy to a new table instead"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FAwQ%3D","line":20,"updated":"2013-02-11 18:04:05.000000000","message":"unused import","commit_id":"329b00d6dbd624f5554a9c5578b9f6a8070f3312"}],"keystone/common/sql/migrate_repo/versions/010_normalize_identity_migration.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"3f017bcd1b7af0ba5c917da82a2ae2694f3140c3","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        extra \u003d json.loads(user.extra)"},{"line_number":41,"context_line":"        extra[\u0027password\u0027] \u003d user.password"},{"line_number":42,"context_line":"        extra[\u0027enabled\u0027] \u003d \u0027%r\u0027 % user.enabled"},{"line_number":43,"context_line":"        user.extra \u003d json.dumps(extra)"},{"line_number":44,"context_line":"    session.commit()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FCAo%3D","line":43,"updated":"2013-02-10 22:32:11.000000000","message":"This should be committed in the transaction upon session commit, but it seems to be non-deterministic.    Better to do it as the upgrade_* functions below.","commit_id":"0bd114acae68d3ff8e28e6eb73ae2e35080c8fa6"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"8a0813dddbf3cb1ecb206e6d10732819b142d4b3","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        extra \u003d json.loads(user.extra)"},{"line_number":41,"context_line":"        extra[\u0027password\u0027] \u003d user.password"},{"line_number":42,"context_line":"        extra[\u0027enabled\u0027] \u003d \u0027%r\u0027 % user.enabled"},{"line_number":43,"context_line":"        user.extra \u003d json.dumps(extra)"},{"line_number":44,"context_line":"    session.commit()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FBO8%3D","line":43,"in_reply_to":"AAAAM3%2F%2FCAo%3D","updated":"2013-02-11 14:44:51.000000000","message":"Done","commit_id":"0bd114acae68d3ff8e28e6eb73ae2e35080c8fa6"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"3f017bcd1b7af0ba5c917da82a2ae2694f3140c3","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    session \u003d maker()"},{"line_number":63,"context_line":"    for user in session.query(user_table).all():"},{"line_number":64,"context_line":"        extra \u003d json.loads(user.extra)"},{"line_number":65,"context_line":"        values \u003d {\u0027password\u0027: extra.pop(\u0027password\u0027, None),"},{"line_number":66,"context_line":"                  \u0027enabled\u0027: extra.pop(\u0027enabled\u0027, True),"},{"line_number":67,"context_line":"                  \u0027extra\u0027: json.dumps(extra)}"},{"line_number":68,"context_line":"        update \u003d user_table.update().\\"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FCAs%3D","line":65,"updated":"2013-02-10 22:32:11.000000000","message":"This is the preferred way to do updates:   it does it inside a connection, and they get committed to the database in a deterministic manner.","commit_id":"0bd114acae68d3ff8e28e6eb73ae2e35080c8fa6"}],"tests/backend_sql.conf":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"3f017bcd1b7af0ba5c917da82a2ae2694f3140c3","unresolved":false,"context_lines":[{"line_number":3,"context_line":"#For a file based sqlite use"},{"line_number":4,"context_line":"#connection \u003d sqlite:////tmp/keystone.db"},{"line_number":5,"context_line":"#To Test MySQL:"},{"line_number":6,"context_line":"#connection \u003d mysql://ayoung:keystone@localhost/keystone?charset\u003dutf8"},{"line_number":7,"context_line":"#To Test PostgreSQL:"},{"line_number":8,"context_line":"#connection \u003d postgresql://keystone:keystone@localhost/keystone?client_encoding\u003dutf8"},{"line_number":9,"context_line":"idle_timeout \u003d 200"}],"source_content_type":"text/plain","patch_set":1,"id":"AAAAM3%2F%2FCAk%3D","line":6,"updated":"2013-02-10 22:32:11.000000000","message":"Change this back to keystone from my UID","commit_id":"0bd114acae68d3ff8e28e6eb73ae2e35080c8fa6"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"8a0813dddbf3cb1ecb206e6d10732819b142d4b3","unresolved":false,"context_lines":[{"line_number":3,"context_line":"#For a file based sqlite use"},{"line_number":4,"context_line":"#connection \u003d sqlite:////tmp/keystone.db"},{"line_number":5,"context_line":"#To Test MySQL:"},{"line_number":6,"context_line":"#connection \u003d mysql://ayoung:keystone@localhost/keystone?charset\u003dutf8"},{"line_number":7,"context_line":"#To Test PostgreSQL:"},{"line_number":8,"context_line":"#connection \u003d postgresql://keystone:keystone@localhost/keystone?client_encoding\u003dutf8"},{"line_number":9,"context_line":"idle_timeout \u003d 200"}],"source_content_type":"text/plain","patch_set":1,"id":"AAAAM3%2F%2FBO0%3D","line":6,"in_reply_to":"AAAAM3%2F%2FBSg%3D","updated":"2013-02-11 14:44:51.000000000","message":"Done","commit_id":"0bd114acae68d3ff8e28e6eb73ae2e35080c8fa6"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"3bfbd7fce19244189c437fe76cc88f8bc2035650","unresolved":false,"context_lines":[{"line_number":3,"context_line":"#For a file based sqlite use"},{"line_number":4,"context_line":"#connection \u003d sqlite:////tmp/keystone.db"},{"line_number":5,"context_line":"#To Test MySQL:"},{"line_number":6,"context_line":"#connection \u003d mysql://ayoung:keystone@localhost/keystone?charset\u003dutf8"},{"line_number":7,"context_line":"#To Test PostgreSQL:"},{"line_number":8,"context_line":"#connection \u003d postgresql://keystone:keystone@localhost/keystone?client_encoding\u003dutf8"},{"line_number":9,"context_line":"idle_timeout \u003d 200"}],"source_content_type":"text/plain","patch_set":1,"id":"AAAAM3%2F%2FBSg%3D","line":6,"in_reply_to":"AAAAM3%2F%2FCAk%3D","updated":"2013-02-11 14:11:05.000000000","message":"please do","commit_id":"0bd114acae68d3ff8e28e6eb73ae2e35080c8fa6"}],"tests/test_sql_upgrade.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"3bfbd7fce19244189c437fe76cc88f8bc2035650","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self.assertEqual(version, 0, \"DB is at version 0\")"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def test_two_steps_forward_one_step_back(self):"},{"line_number":88,"context_line":"        \"\"\"You should be able to cleanly undo and re-apply all upgrades."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        Upgrades are run in the following order::"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FBSc%3D","line":88,"updated":"2013-02-11 14:11:05.000000000","message":"thanks","commit_id":"0bd114acae68d3ff8e28e6eb73ae2e35080c8fa6"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"3f017bcd1b7af0ba5c917da82a2ae2694f3140c3","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def assertTableColumns(self, table_name, expected_cols):"},{"line_number":102,"context_line":"        \"\"\"Asserts that the table contains the expected set of columns.\"\"\""},{"line_number":103,"context_line":"        self.initialize_sql()"},{"line_number":104,"context_line":"        table \u003d self.select_table(table_name)"},{"line_number":105,"context_line":"        actual_cols \u003d [col.name for col in table.columns]"},{"line_number":106,"context_line":"        self.assertEqual(expected_cols, actual_cols, \u0027%s table\u0027 % table_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FCAc%3D","line":103,"updated":"2013-02-10 22:32:11.000000000","message":"This is an attempt to update the metadata after changes have been commited.  This call does not need to be done once per assert, but it is conservative.  Not convinced it has the needed effect, though.","commit_id":"0bd114acae68d3ff8e28e6eb73ae2e35080c8fa6"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"8a0813dddbf3cb1ecb206e6d10732819b142d4b3","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def assertTableColumns(self, table_name, expected_cols):"},{"line_number":102,"context_line":"        \"\"\"Asserts that the table contains the expected set of columns.\"\"\""},{"line_number":103,"context_line":"        self.initialize_sql()"},{"line_number":104,"context_line":"        table \u003d self.select_table(table_name)"},{"line_number":105,"context_line":"        actual_cols \u003d [col.name for col in table.columns]"},{"line_number":106,"context_line":"        self.assertEqual(expected_cols, actual_cols, \u0027%s table\u0027 % table_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FBOk%3D","line":103,"in_reply_to":"AAAAM3%2F%2FBSQ%3D","updated":"2013-02-11 14:44:51.000000000","message":"Without this change, when testing, it fails to match the columns, due to the metadata being out of sync.  I thought it worked  for PG and Mysql, but just retested and PG fails as well.  I suspect that the metat data is not changed when the table schemas are altered through add_column.","commit_id":"0bd114acae68d3ff8e28e6eb73ae2e35080c8fa6"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"3bfbd7fce19244189c437fe76cc88f8bc2035650","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def assertTableColumns(self, table_name, expected_cols):"},{"line_number":102,"context_line":"        \"\"\"Asserts that the table contains the expected set of columns.\"\"\""},{"line_number":103,"context_line":"        self.initialize_sql()"},{"line_number":104,"context_line":"        table \u003d self.select_table(table_name)"},{"line_number":105,"context_line":"        actual_cols \u003d [col.name for col in table.columns]"},{"line_number":106,"context_line":"        self.assertEqual(expected_cols, actual_cols, \u0027%s table\u0027 % table_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FBSQ%3D","line":103,"in_reply_to":"AAAAM3%2F%2FCAc%3D","updated":"2013-02-11 14:11:05.000000000","message":"what\u0027s the needed effect?","commit_id":"0bd114acae68d3ff8e28e6eb73ae2e35080c8fa6"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"3f017bcd1b7af0ba5c917da82a2ae2694f3140c3","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            extra.pop(\u0027id\u0027)"},{"line_number":367,"context_line":"            extra.pop(\u0027name\u0027)"},{"line_number":368,"context_line":"            user[\u0027extra\u0027] \u003d json.dumps(extra)"},{"line_number":369,"context_line":"            insert.execute(user)"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def populate_tenant_table(self):"},{"line_number":372,"context_line":"        for tenant in default_fixtures.TENANTS:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FCAY%3D","line":369,"updated":"2013-02-10 22:32:11.000000000","message":"This can even bet executed as part of the transaction, not sure the effect it has.","commit_id":"0bd114acae68d3ff8e28e6eb73ae2e35080c8fa6"}]}
