)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"f0377996965701e634c60767061b7d48df784b7b","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix the migration issue for the user with null password"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If there is user with null password, the migration will fail,"},{"line_number":10,"context_line":"this is because the `password` table doesn\u0027t allow the `password`"},{"line_number":11,"context_line":"field to be null."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9aed3d3a_b0873dd6","line":9,"range":{"start_line":9,"start_character":41,"end_line":9,"end_character":50},"updated":"2016-02-27 14:18:21.000000000","message":"could be useful to add in the commit message which migration has this bug","commit_id":"94cecd5a0a31677e0ae24a3a6213da0e85ba9043"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"719acb008460ca35873399253c67da4d39c66da3","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix the migration issue for the user with null password"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If there is user with null password, the migration will fail,"},{"line_number":10,"context_line":"this is because the `password` table doesn\u0027t allow the `password`"},{"line_number":11,"context_line":"field to be null."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9aed3d3a_041fc15f","line":9,"range":{"start_line":9,"start_character":41,"end_line":9,"end_character":50},"in_reply_to":"9aed3d3a_b0873dd6","updated":"2016-02-28 14:27:39.000000000","message":"Done","commit_id":"94cecd5a0a31677e0ae24a3a6213da0e85ba9043"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"93bd031bf4aad6c08a5eabdf45be01a38eb0cfe1","unresolved":false,"context_lines":[{"line_number":11,"context_line":"field to be null."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"There is no need to insert an empty entry into `password`"},{"line_number":14,"context_line":"table if the user has not set with a password, so just ignore it."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I4db73ee673573ab63b36bf092c17f8ba64605939"},{"line_number":17,"context_line":"Closes-Bug: #1549705"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9aed3d3a_e6f58fcb","line":14,"range":{"start_line":14,"start_character":18,"end_line":14,"end_character":34},"updated":"2016-02-27 16:45:13.000000000","message":"change to \"does not have\"\n\nAlso, why is there no need have an entry in the password table?","commit_id":"94cecd5a0a31677e0ae24a3a6213da0e85ba9043"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"719acb008460ca35873399253c67da4d39c66da3","unresolved":false,"context_lines":[{"line_number":11,"context_line":"field to be null."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"There is no need to insert an empty entry into `password`"},{"line_number":14,"context_line":"table if the user has not set with a password, so just ignore it."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I4db73ee673573ab63b36bf092c17f8ba64605939"},{"line_number":17,"context_line":"Closes-Bug: #1549705"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"9aed3d3a_44754996","line":14,"range":{"start_line":14,"start_character":18,"end_line":14,"end_character":34},"in_reply_to":"9aed3d3a_e6f58fcb","updated":"2016-02-28 14:27:39.000000000","message":"Done","commit_id":"94cecd5a0a31677e0ae24a3a6213da0e85ba9043"}],"keystone/common/sql/migrate_repo/versions/091_migrate_data_to_local_user_and_password_tables.py":[{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"68c6615e8b91a7a18e0808a4d332d5f5e6180c90","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    user_rows \u003d sel.execute()"},{"line_number":41,"context_line":"    password_values \u003d []"},{"line_number":42,"context_line":"    for row in user_rows:"},{"line_number":43,"context_line":"        if row[\u0027user_password\u0027]:"},{"line_number":44,"context_line":"            password_values.append({\u0027local_user_id\u0027: row[\u0027local_user_id\u0027],"},{"line_number":45,"context_line":"                                    \u0027password\u0027: row[\u0027user_password\u0027]})"},{"line_number":46,"context_line":"    if password_values:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_cb1b5d1a","line":43,"range":{"start_line":43,"start_character":16,"end_line":43,"end_character":29},"updated":"2016-02-26 15:30:06.000000000","message":"Another option, would be to add a where clause in the select to only query passwords that are not null. This would be slightly more efficient.","commit_id":"04b6f038bed913a8c1a6ec2159767858300344c3"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"72923e954433855367e13dea836a13e5728b114b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    # migrate data to local_user table"},{"line_number":27,"context_line":"    local_user_values \u003d []"},{"line_number":28,"context_line":"    for row in user_table.select().execute():"},{"line_number":29,"context_line":"        # skip the row that already exists in `local_user`, this could"},{"line_number":30,"context_line":"        # happen if run into a partially-migrated table due to the"},{"line_number":31,"context_line":"        # bug #1549705."},{"line_number":32,"context_line":"        filter_by \u003d local_user_table.c.user_id \u003d\u003d row[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"9aed3d3a_4e97ff47","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":8},"updated":"2016-02-29 15:15:04.000000000","message":"The block within the for loop seems a little inefficient and overly complex. Why not just filter out the rows first, before entering the for loop:\nuser_rows \u003d user_table.select().where(user_table.c.id.notin_(sql.select([local_table.c.id])))","commit_id":"3358c3e3176a02814df74731749d0dbb4e0a2d95"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"4b12b47e1629c1dbd61dea444f216a6d82917443","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    # migrate data to local_user table"},{"line_number":27,"context_line":"    local_user_values \u003d []"},{"line_number":28,"context_line":"    for row in user_table.select().execute():"},{"line_number":29,"context_line":"        # skip the row that already exists in `local_user`, this could"},{"line_number":30,"context_line":"        # happen if run into a partially-migrated table due to the"},{"line_number":31,"context_line":"        # bug #1549705."},{"line_number":32,"context_line":"        filter_by \u003d local_user_table.c.user_id \u003d\u003d row[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"7af24918_5a1ba81b","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":8},"in_reply_to":"9aed3d3a_4e97ff47","updated":"2016-03-02 01:50:22.000000000","message":"agreed, this should be more efficient, thanks!","commit_id":"3358c3e3176a02814df74731749d0dbb4e0a2d95"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"735f1b03db3f8f35b33c9273ab7c5eaeea215ed5","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    # migrate data to local_user table"},{"line_number":27,"context_line":"    local_user_values \u003d []"},{"line_number":28,"context_line":"    for row in user_table.select().execute():"},{"line_number":29,"context_line":"        # skip the row that already exists in `local_user`, this could"},{"line_number":30,"context_line":"        # happen if run into a partially-migrated table due to the"},{"line_number":31,"context_line":"        # bug #1549705."}],"source_content_type":"text/x-python","patch_set":10,"id":"7af24918_3b0c0594","line":28,"range":{"start_line":28,"start_character":0,"end_line":28,"end_character":45},"updated":"2016-03-01 15:37:53.000000000","message":"See my previous comment regarding adding a where clause to this select statement","commit_id":"65dc3e01aebe2cfe53ef1b9883876247414ea83e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"00a8d784c49c7b2b511053e0382a742e277efe8c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    # migrate data to local_user table"},{"line_number":27,"context_line":"    local_user_values \u003d []"},{"line_number":28,"context_line":"    for row in user_table.select().execute():"},{"line_number":29,"context_line":"        # skip the row that already exists in `local_user`, this could"},{"line_number":30,"context_line":"        # happen if run into a partially-migrated table due to the"},{"line_number":31,"context_line":"        # bug #1549705."},{"line_number":32,"context_line":"        filter_by \u003d local_user_table.c.user_id \u003d\u003d row[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"7af24918_ea780cfb","line":29,"range":{"start_line":29,"start_character":15,"end_line":29,"end_character":42},"updated":"2016-03-01 14:53:24.000000000","message":"change to \"rows that already exist\"","commit_id":"65dc3e01aebe2cfe53ef1b9883876247414ea83e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"00a8d784c49c7b2b511053e0382a742e277efe8c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    local_user_values \u003d []"},{"line_number":28,"context_line":"    for row in user_table.select().execute():"},{"line_number":29,"context_line":"        # skip the row that already exists in `local_user`, this could"},{"line_number":30,"context_line":"        # happen if run into a partially-migrated table due to the"},{"line_number":31,"context_line":"        # bug #1549705."},{"line_number":32,"context_line":"        filter_by \u003d local_user_table.c.user_id \u003d\u003d row[\u0027id\u0027]"},{"line_number":33,"context_line":"        user_count \u003d sql.select([func.count()]).select_from("}],"source_content_type":"text/x-python","patch_set":10,"id":"7af24918_ca7d50e9","line":30,"range":{"start_line":30,"start_character":20,"end_line":30,"end_character":28},"updated":"2016-03-01 14:53:24.000000000","message":"change to \"there is\"","commit_id":"65dc3e01aebe2cfe53ef1b9883876247414ea83e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"00a8d784c49c7b2b511053e0382a742e277efe8c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        # happen if run into a partially-migrated table due to the"},{"line_number":31,"context_line":"        # bug #1549705."},{"line_number":32,"context_line":"        filter_by \u003d local_user_table.c.user_id \u003d\u003d row[\u0027id\u0027]"},{"line_number":33,"context_line":"        user_count \u003d sql.select([func.count()]).select_from("},{"line_number":34,"context_line":"            local_user_table).where(filter_by).execute().fetchone()[0]"},{"line_number":35,"context_line":"        if user_count \u003d\u003d 0:"},{"line_number":36,"context_line":"            local_user_values.append({\u0027user_id\u0027: row[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":10,"id":"7af24918_8ad8681f","line":33,"updated":"2016-03-01 14:53:24.000000000","message":"this is unnecessarily complicated. To check if an entry exists just select id where id \u003d \u0027whatever\u0027 and see if there\u0027s a row returned. There should be a function to check if the user already exists in the table to make the code more readable.","commit_id":"65dc3e01aebe2cfe53ef1b9883876247414ea83e"}],"keystone/tests/unit/test_sql_upgrade.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"a7b0a8dbd6277eb2e599d52eaf83b422d4a062d8","unresolved":false,"context_lines":[{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        self.upgrade(91)"},{"line_number":820,"context_line":"        # migration should be successful."},{"line_number":821,"context_line":"        self.assertTableCountsMatch(USER_TABLE_NAME, LOCAL_USER_TABLE_NAME)"},{"line_number":822,"context_line":"        # no new entry added in the password table since the user created"},{"line_number":823,"context_line":"        # doesn\u0027t set with a password."},{"line_number":824,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aed3d3a_a43e27b6","line":821,"range":{"start_line":821,"start_character":8,"end_line":821,"end_character":75},"updated":"2016-02-26 08:06:02.000000000","message":"stuck here...","commit_id":"72f199158009259015ea539b694c5afcd33d57a5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"bd1ed688fdb07e5bd477e98aba7fc1d72da5dd90","unresolved":false,"context_lines":[{"line_number":820,"context_line":"        # no new entry added in the password table since the user created"},{"line_number":821,"context_line":"        # doesn\u0027t set with a password."},{"line_number":822,"context_line":"        try:"},{"line_number":823,"context_line":"            table1 \u003d self.select_table(PASSWORD_TABLE_NAME)"},{"line_number":824,"context_line":"        except sqlalchemy.exc.NoSuchTableError:"},{"line_number":825,"context_line":"            raise AssertionError(\u0027Table \"%s\" does not exist\u0027"},{"line_number":826,"context_line":"                                 % PASSWORD_TABLE_NAME)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_781bf31b","line":823,"range":{"start_line":823,"start_character":12,"end_line":823,"end_character":18},"updated":"2016-02-26 20:03:47.000000000","message":"nit: call this password_table","commit_id":"04b6f038bed913a8c1a6ec2159767858300344c3"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"76655848a1524cbe986f70f555a83b74ab138faa","unresolved":false,"context_lines":[{"line_number":820,"context_line":"        # no new entry added in the password table since the user created"},{"line_number":821,"context_line":"        # doesn\u0027t set with a password."},{"line_number":822,"context_line":"        try:"},{"line_number":823,"context_line":"            table1 \u003d self.select_table(PASSWORD_TABLE_NAME)"},{"line_number":824,"context_line":"        except sqlalchemy.exc.NoSuchTableError:"},{"line_number":825,"context_line":"            raise AssertionError(\u0027Table \"%s\" does not exist\u0027"},{"line_number":826,"context_line":"                                 % PASSWORD_TABLE_NAME)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_04e98114","line":823,"range":{"start_line":823,"start_character":12,"end_line":823,"end_character":18},"in_reply_to":"9aed3d3a_781bf31b","updated":"2016-02-28 14:28:27.000000000","message":"Done","commit_id":"04b6f038bed913a8c1a6ec2159767858300344c3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"93bd031bf4aad6c08a5eabdf45be01a38eb0cfe1","unresolved":false,"context_lines":[{"line_number":813,"context_line":"        meta \u003d sqlalchemy.MetaData()"},{"line_number":814,"context_line":"        meta.bind \u003d self.engine"},{"line_number":815,"context_line":"        user_table \u003d sqlalchemy.Table(USER_TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":816,"context_line":"        user_table.insert(user_ref).values().execute()"},{"line_number":817,"context_line":"        self.upgrade(91)"},{"line_number":818,"context_line":"        # migration should be successful."},{"line_number":819,"context_line":"        self.assertTableCountsMatch(USER_TABLE_NAME, LOCAL_USER_TABLE_NAME)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_66997f1f","line":816,"updated":"2016-02-27 16:45:13.000000000","message":"use self.insert_dict()","commit_id":"94cecd5a0a31677e0ae24a3a6213da0e85ba9043"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"24fe7de4a2a1b7e2924d3314aeac34bcfc1060c0","unresolved":false,"context_lines":[{"line_number":813,"context_line":"        meta \u003d sqlalchemy.MetaData()"},{"line_number":814,"context_line":"        meta.bind \u003d self.engine"},{"line_number":815,"context_line":"        user_table \u003d sqlalchemy.Table(USER_TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":816,"context_line":"        user_table.insert(user_ref).values().execute()"},{"line_number":817,"context_line":"        self.upgrade(91)"},{"line_number":818,"context_line":"        # migration should be successful."},{"line_number":819,"context_line":"        self.assertTableCountsMatch(USER_TABLE_NAME, LOCAL_USER_TABLE_NAME)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_a41c1514","line":816,"in_reply_to":"9aed3d3a_445f09e5","updated":"2016-02-28 14:41:32.000000000","message":"YOU SAVED MY LIFE!!!","commit_id":"94cecd5a0a31677e0ae24a3a6213da0e85ba9043"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"719acb008460ca35873399253c67da4d39c66da3","unresolved":false,"context_lines":[{"line_number":813,"context_line":"        meta \u003d sqlalchemy.MetaData()"},{"line_number":814,"context_line":"        meta.bind \u003d self.engine"},{"line_number":815,"context_line":"        user_table \u003d sqlalchemy.Table(USER_TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":816,"context_line":"        user_table.insert(user_ref).values().execute()"},{"line_number":817,"context_line":"        self.upgrade(91)"},{"line_number":818,"context_line":"        # migration should be successful."},{"line_number":819,"context_line":"        self.assertTableCountsMatch(USER_TABLE_NAME, LOCAL_USER_TABLE_NAME)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_b15a954e","line":816,"in_reply_to":"9aed3d3a_66997f1f","updated":"2016-02-28 14:27:39.000000000","message":"yes, i tried this in the first proposal (https://review.openstack.org/#/c/285152/1/keystone/tests/unit/test_sql_upgrade.py) but I was stuck there. I just cannot figure out an approach to purge the outdated user table from the session.","commit_id":"94cecd5a0a31677e0ae24a3a6213da0e85ba9043"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"51cb8e03b39ca6968a395cff51056f14fe7af70f","unresolved":false,"context_lines":[{"line_number":813,"context_line":"        meta \u003d sqlalchemy.MetaData()"},{"line_number":814,"context_line":"        meta.bind \u003d self.engine"},{"line_number":815,"context_line":"        user_table \u003d sqlalchemy.Table(USER_TABLE_NAME, meta, autoload\u003dTrue)"},{"line_number":816,"context_line":"        user_table.insert(user_ref).values().execute()"},{"line_number":817,"context_line":"        self.upgrade(91)"},{"line_number":818,"context_line":"        # migration should be successful."},{"line_number":819,"context_line":"        self.assertTableCountsMatch(USER_TABLE_NAME, LOCAL_USER_TABLE_NAME)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_445f09e5","line":816,"in_reply_to":"9aed3d3a_b15a954e","updated":"2016-02-28 14:32:11.000000000","message":"use self.metadata.clear().","commit_id":"94cecd5a0a31677e0ae24a3a6213da0e85ba9043"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"93bd031bf4aad6c08a5eabdf45be01a38eb0cfe1","unresolved":false,"context_lines":[{"line_number":818,"context_line":"        # migration should be successful."},{"line_number":819,"context_line":"        self.assertTableCountsMatch(USER_TABLE_NAME, LOCAL_USER_TABLE_NAME)"},{"line_number":820,"context_line":"        # no new entry added in the password table since the user created"},{"line_number":821,"context_line":"        # doesn\u0027t set with a password."},{"line_number":822,"context_line":"        try:"},{"line_number":823,"context_line":"            table1 \u003d self.select_table(PASSWORD_TABLE_NAME)"},{"line_number":824,"context_line":"        except sqlalchemy.exc.NoSuchTableError:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_a671c7e2","line":821,"updated":"2016-02-27 16:45:13.000000000","message":"change to\n\n no new entry was added to the password table because the\n user doesn\u0027t have a password.","commit_id":"94cecd5a0a31677e0ae24a3a6213da0e85ba9043"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"719acb008460ca35873399253c67da4d39c66da3","unresolved":false,"context_lines":[{"line_number":818,"context_line":"        # migration should be successful."},{"line_number":819,"context_line":"        self.assertTableCountsMatch(USER_TABLE_NAME, LOCAL_USER_TABLE_NAME)"},{"line_number":820,"context_line":"        # no new entry added in the password table since the user created"},{"line_number":821,"context_line":"        # doesn\u0027t set with a password."},{"line_number":822,"context_line":"        try:"},{"line_number":823,"context_line":"            table1 \u003d self.select_table(PASSWORD_TABLE_NAME)"},{"line_number":824,"context_line":"        except sqlalchemy.exc.NoSuchTableError:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_8eb130e4","line":821,"in_reply_to":"9aed3d3a_a671c7e2","updated":"2016-02-28 14:27:39.000000000","message":"Done","commit_id":"94cecd5a0a31677e0ae24a3a6213da0e85ba9043"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"93bd031bf4aad6c08a5eabdf45be01a38eb0cfe1","unresolved":false,"context_lines":[{"line_number":823,"context_line":"            table1 \u003d self.select_table(PASSWORD_TABLE_NAME)"},{"line_number":824,"context_line":"        except sqlalchemy.exc.NoSuchTableError:"},{"line_number":825,"context_line":"            raise AssertionError(\u0027Table \"%s\" does not exist\u0027"},{"line_number":826,"context_line":"                                 % PASSWORD_TABLE_NAME)"},{"line_number":827,"context_line":"        session \u003d self.Session()"},{"line_number":828,"context_line":"        rows \u003d session.execute(table1.count()).scalar()"},{"line_number":829,"context_line":"        self.assertEqual(0, rows)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_e673cfe5","line":826,"updated":"2016-02-27 16:45:13.000000000","message":"no need to change the exception in the test. Remove this code it makes the test unnecessarily complicated.","commit_id":"94cecd5a0a31677e0ae24a3a6213da0e85ba9043"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"719acb008460ca35873399253c67da4d39c66da3","unresolved":false,"context_lines":[{"line_number":823,"context_line":"            table1 \u003d self.select_table(PASSWORD_TABLE_NAME)"},{"line_number":824,"context_line":"        except sqlalchemy.exc.NoSuchTableError:"},{"line_number":825,"context_line":"            raise AssertionError(\u0027Table \"%s\" does not exist\u0027"},{"line_number":826,"context_line":"                                 % PASSWORD_TABLE_NAME)"},{"line_number":827,"context_line":"        session \u003d self.Session()"},{"line_number":828,"context_line":"        rows \u003d session.execute(table1.count()).scalar()"},{"line_number":829,"context_line":"        self.assertEqual(0, rows)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_31f20570","line":826,"in_reply_to":"9aed3d3a_e673cfe5","updated":"2016-02-28 14:27:39.000000000","message":"Done","commit_id":"94cecd5a0a31677e0ae24a3a6213da0e85ba9043"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"00a8d784c49c7b2b511053e0382a742e277efe8c","unresolved":false,"context_lines":[{"line_number":833,"context_line":"        self.upgrade(90)"},{"line_number":834,"context_line":"        user1_ref \u003d unit.new_user_ref(uuid.uuid4().hex)"},{"line_number":835,"context_line":"        # pop extra attribute which doesn\u0027t recognized by SQL expression"},{"line_number":836,"context_line":"        # layer."},{"line_number":837,"context_line":"        user1_ref.pop(\u0027email\u0027)"},{"line_number":838,"context_line":"        user2_ref \u003d unit.new_user_ref(uuid.uuid4().hex)"},{"line_number":839,"context_line":"        user2_ref.pop(\u0027email\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"7af24918_0aed788b","line":836,"updated":"2016-03-01 14:53:24.000000000","message":"these tests shouldn\u0027t be using new_user_ref since that creates dicts that work for the controller/manager/backend. new_user_ref is not meant to create dicts that work for database insertion.","commit_id":"65dc3e01aebe2cfe53ef1b9883876247414ea83e"}]}
