)]}'
{"keystone/assignment/backends/sql.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"406cc4cd10b4e3f0a26a4f145ee5ffc4e0b4f0bc","unresolved":false,"context_lines":[{"line_number":403,"context_line":"    target_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"},{"line_number":404,"context_line":"    role_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"},{"line_number":405,"context_line":"    inherited \u003d sql.Column(sql.Boolean, default\u003dFalse, nullable\u003dFalse)"},{"line_number":406,"context_line":"    __table_args__ \u003d (sql.PrimaryKeyConstraint(\u0027type\u0027, \u0027actor_id\u0027, \u0027target_id\u0027,"},{"line_number":407,"context_line":"                                               \u0027role_id\u0027, \u0027inherited\u0027),"},{"line_number":408,"context_line":"                      sql.Index(\u0027ix_actor_id\u0027, \u0027actor_id\u0027))"},{"line_number":409,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"3acd31a7_ad20879c","line":406,"updated":"2015-05-09 19:42:43.000000000","message":"don\u0027t reformat these lines. it\u0027ll just make for more conflicts.","commit_id":"5276ee5161bb1891b74f3bb3eab74f9d5dc0dc49"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"4f065cc8d63b9d0b1db5286168b40f4c89abac23","unresolved":false,"context_lines":[{"line_number":403,"context_line":"    target_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"},{"line_number":404,"context_line":"    role_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"},{"line_number":405,"context_line":"    inherited \u003d sql.Column(sql.Boolean, default\u003dFalse, nullable\u003dFalse)"},{"line_number":406,"context_line":"    __table_args__ \u003d (sql.PrimaryKeyConstraint(\u0027type\u0027, \u0027actor_id\u0027, \u0027target_id\u0027,"},{"line_number":407,"context_line":"                                               \u0027role_id\u0027, \u0027inherited\u0027),"},{"line_number":408,"context_line":"                      sql.Index(\u0027ix_actor_id\u0027, \u0027actor_id\u0027))"},{"line_number":409,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9af37de9_769394fb","line":406,"in_reply_to":"3acd31a7_ad20879c","updated":"2015-05-11 12:23:22.000000000","message":"Done","commit_id":"5276ee5161bb1891b74f3bb3eab74f9d5dc0dc49"}],"keystone/common/sql/migrate_repo/versions/063_insert_assignment_inherited_pk.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"19bb1a65c1728c706b2de45d9c527a207d92a7a2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    assignment_table \u003d sqlalchemy.Table(ASSIGNMENT_TABLE, meta, autoload\u003dTrue)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    migrate.PrimaryKeyConstraint(table\u003dassignment_table).drop()"},{"line_number":36,"context_line":"    getattr(assignment_table.c, INHERITED_COLUMN).alter(primary_key\u003dTrue)"},{"line_number":37,"context_line":"    migrate.PrimaryKeyConstraint(table\u003dassignment_table).create()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_a8893627","line":36,"updated":"2015-01-19 23:14:53.000000000","message":"is there a reason we don\u0027t do the usual:\n\nassignment_table.c.inherited.alter()\n\nhere?","commit_id":"064f5e787d7cab15aacb48c0e964b0520b22afa0"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"60268d03cd16fec6b5b60c380793600c900885e6","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    assignment_table \u003d sqlalchemy.Table(ASSIGNMENT_TABLE, meta, autoload\u003dTrue)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    migrate.PrimaryKeyConstraint(table\u003dassignment_table).drop()"},{"line_number":36,"context_line":"    getattr(assignment_table.c, INHERITED_COLUMN).alter(primary_key\u003dTrue)"},{"line_number":37,"context_line":"    migrate.PrimaryKeyConstraint(table\u003dassignment_table).create()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def downgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_7928fe36","line":36,"in_reply_to":"3a961159_a8893627","updated":"2015-01-20 02:03:00.000000000","message":"No. The usual would be simpler, thanks.","commit_id":"064f5e787d7cab15aacb48c0e964b0520b22afa0"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"8a267a2cfadbc2ed474f122d1985967d28ff25cf","unresolved":false,"context_lines":[{"line_number":20,"context_line":"def upgrade(migrate_engine):"},{"line_number":21,"context_line":"    \u0027\u0027\u0027\u0027Inserts inherited column to assignment table PK contraints.\u0027\u0027\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    # SQLite does not support constraints, and querying the constraints"},{"line_number":24,"context_line":"    # raises an exception"},{"line_number":25,"context_line":"    if migrate_engine.name \u003d\u003d \u0027sqlite\u0027:"},{"line_number":26,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_8a9c6ac1","line":23,"updated":"2015-01-20 05:04:46.000000000","message":"So is this true for primarykeyconstraint and its uniqueness?  I thought that DID work with sqlite?  If so, then typically what other tests have done is to do a table copy into a new table that has the new PK defined.  Seems like a lot of work, I know!  Maybe want other people\u0027s comments as to whether doing this is worth it.","commit_id":"17698b8c0a576a17c337781c51cd1a08a0a62ffe"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"de3758cc2da95d3f1b13373cc62d74194ea8730d","unresolved":false,"context_lines":[{"line_number":20,"context_line":"def upgrade(migrate_engine):"},{"line_number":21,"context_line":"    \u0027\u0027\u0027\u0027Inserts inherited column to assignment table PK contraints.\u0027\u0027\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    # SQLite does not support constraints, and querying the constraints"},{"line_number":24,"context_line":"    # raises an exception"},{"line_number":25,"context_line":"    if migrate_engine.name \u003d\u003d \u0027sqlite\u0027:"},{"line_number":26,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_9ab2eee6","line":23,"in_reply_to":"3a961159_8a9c6ac1","updated":"2015-01-20 11:38:47.000000000","message":"I got an error [1] when trying to run this on SQLite.\nAt line 32, when it tries to delete the existing primary key constraint.\n\nRight, let\u0027s see people\u0027s views.\n\n[1] OperationalError: (OperationalError) no such index: assignment_pkey u\u0027DROP INDEX assignment_pkey \u0027 ()","commit_id":"17698b8c0a576a17c337781c51cd1a08a0a62ffe"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"28814059185390709e65ab933a4ad5a5af51f33c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"def upgrade(migrate_engine):"},{"line_number":21,"context_line":"    \u0027\u0027\u0027\u0027Inserts inherited column to assignment table PK contraints.\u0027\u0027\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    # SQLite does not support constraints, and querying the constraints"},{"line_number":24,"context_line":"    # raises an exception"},{"line_number":25,"context_line":"    if migrate_engine.name \u003d\u003d \u0027sqlite\u0027:"},{"line_number":26,"context_line":"        return"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_a69153f9","line":23,"in_reply_to":"3a961159_9ab2eee6","updated":"2015-01-20 13:34:33.000000000","message":"Yes, you will get an error from that.  What I mean is that the alternative is to do it \"the hard way\", where you do a table copy.  See 044_service_enabled.py - difference scenario, but see how it checks for sqlite, and if so actually re-recretes the table with the right column (or in our case PK definition). You would do this for both upgrade/downgrade for our case.","commit_id":"17698b8c0a576a17c337781c51cd1a08a0a62ffe"}],"keystone/common/sql/migrate_repo/versions/067_insert_assignment_inherited_pk.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"14f82d3971edbe5a97a2ffd888a5e3f31787d88c","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    new_assignment_table.rename(ASSIGNMENT_TABLE_NAME)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def downgrade(migrate_engine):"},{"line_number":80,"context_line":"    \u0027\u0027\u0027\u0027Removes inherited column from assignment table PK contraints"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    If there are both inherited and non-inherited role assignments for a given"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_b993be59","line":79,"updated":"2015-03-26 08:46:07.000000000","message":"can remove this now...we no longer need to support downgrades!! Yeh!!!! I know...after me making you write it as well!","commit_id":"e427018f9d1df0582aea2c820a4b727164c346e6"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"79d731e330168e7387f0175e372a331b4ca15495","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    new_assignment_table.rename(ASSIGNMENT_TABLE_NAME)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"def downgrade(migrate_engine):"},{"line_number":80,"context_line":"    \u0027\u0027\u0027\u0027Removes inherited column from assignment table PK contraints"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    If there are both inherited and non-inherited role assignments for a given"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_726798b7","line":79,"in_reply_to":"1a6ced46_b993be59","updated":"2015-03-26 12:18:59.000000000","message":"Oh I cannot believe you did so...\n\nKidding, no problem, going to remove this. :)\n\nDone.","commit_id":"e427018f9d1df0582aea2c820a4b727164c346e6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5b9d3d072d1f3901d8c2244a1887e643342f9052","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def upgrade(migrate_engine):"},{"line_number":25,"context_line":"    \u0027\u0027\u0027Inserts inherited column to assignment table PK contraints.\u0027\u0027\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    # Instantiate metadata and session"},{"line_number":28,"context_line":"    metadata \u003d sql.MetaData()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa963961_8e9398a3","line":25,"updated":"2015-03-26 18:26:57.000000000","message":"nit: This is *really* nit picky but could we change \u0027 to \" here to be consistent with https://www.python.org/dev/peps/pep-0257/#multi-line-docstrings ?","commit_id":"9a8fe1b42e031bd4ed90b4115b1fd82c8c3d37ce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"b1698e9082b56984f92cc11afc6709009183705c","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def upgrade(migrate_engine):"},{"line_number":25,"context_line":"    \u0027\u0027\u0027Inserts inherited column to assignment table PK contraints.\u0027\u0027\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    # Instantiate metadata and session"},{"line_number":28,"context_line":"    metadata \u003d sql.MetaData()"}],"source_content_type":"text/x-python","patch_set":8,"id":"da9b358b_31a4dca4","line":25,"in_reply_to":"fa963961_8e9398a3","updated":"2015-03-30 12:31:22.000000000","message":"Done","commit_id":"9a8fe1b42e031bd4ed90b4115b1fd82c8c3d37ce"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5b9d3d072d1f3901d8c2244a1887e643342f9052","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"# According to the spec \u0027No More Downward SQL Schema Migrations\u0027, accepted as"},{"line_number":79,"context_line":"# an OpenStack cross-project spec, downgrades will be no longer supported. One"},{"line_number":80,"context_line":"# action point is to do not add new migrations with downgrade functions."},{"line_number":81,"context_line":"# Removing such support on Keystone starts at this 067 migration script."},{"line_number":82,"context_line":"def downgrade(migrate_engine):"},{"line_number":83,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa963961_2e5ecce9","line":80,"updated":"2015-03-26 18:26:57.000000000","message":"nit: s/ One action point is to do not add new migrations with downgrade functions./This could be improved by not providing downgrade() functions in future migration scripts, instead of passing on an noop downgrade()./","commit_id":"9a8fe1b42e031bd4ed90b4115b1fd82c8c3d37ce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"b1698e9082b56984f92cc11afc6709009183705c","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"# According to the spec \u0027No More Downward SQL Schema Migrations\u0027, accepted as"},{"line_number":79,"context_line":"# an OpenStack cross-project spec, downgrades will be no longer supported. One"},{"line_number":80,"context_line":"# action point is to do not add new migrations with downgrade functions."},{"line_number":81,"context_line":"# Removing such support on Keystone starts at this 067 migration script."},{"line_number":82,"context_line":"def downgrade(migrate_engine):"},{"line_number":83,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"da9b358b_f1ad5489","line":80,"in_reply_to":"fa963961_2e5ecce9","updated":"2015-03-30 12:31:22.000000000","message":"As Henry stated below, we don\u0027t even need this method, I\u0027m removing it.","commit_id":"9a8fe1b42e031bd4ed90b4115b1fd82c8c3d37ce"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5b9d3d072d1f3901d8c2244a1887e643342f9052","unresolved":false,"context_lines":[{"line_number":78,"context_line":"# According to the spec \u0027No More Downward SQL Schema Migrations\u0027, accepted as"},{"line_number":79,"context_line":"# an OpenStack cross-project spec, downgrades will be no longer supported. One"},{"line_number":80,"context_line":"# action point is to do not add new migrations with downgrade functions."},{"line_number":81,"context_line":"# Removing such support on Keystone starts at this 067 migration script."},{"line_number":82,"context_line":"def downgrade(migrate_engine):"},{"line_number":83,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa963961_ee57c4c8","line":81,"updated":"2015-03-26 18:26:57.000000000","message":"Do we have official documentation that we can reference here?","commit_id":"9a8fe1b42e031bd4ed90b4115b1fd82c8c3d37ce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"b1698e9082b56984f92cc11afc6709009183705c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"# According to the spec \u0027No More Downward SQL Schema Migrations\u0027, accepted as"},{"line_number":79,"context_line":"# an OpenStack cross-project spec, downgrades will be no longer supported. One"},{"line_number":80,"context_line":"# action point is to do not add new migrations with downgrade functions."},{"line_number":81,"context_line":"# Removing such support on Keystone starts at this 067 migration script."},{"line_number":82,"context_line":"def downgrade(migrate_engine):"},{"line_number":83,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"da9b358b_b1b6acda","line":81,"in_reply_to":"fa963961_ee57c4c8","updated":"2015-03-30 12:31:22.000000000","message":"ditto","commit_id":"9a8fe1b42e031bd4ed90b4115b1fd82c8c3d37ce"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"57c98e731d91a5f18e257e39008e1c62544e6d1b","unresolved":false,"context_lines":[{"line_number":79,"context_line":"# an OpenStack cross-project spec, downgrades will be no longer supported. One"},{"line_number":80,"context_line":"# action point is to do not add new migrations with downgrade functions."},{"line_number":81,"context_line":"# Removing such support on Keystone starts at this 067 migration script."},{"line_number":82,"context_line":"def downgrade(migrate_engine):"},{"line_number":83,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa963961_02ff6a02","line":82,"updated":"2015-03-26 13:10:54.000000000","message":"so you won\u0027t even need this once the patch https://review.openstack.org/#/c/167834/ has landed...maybe add a TODO comment to remove it (let\u0027s do that rather than rebase on top of it so we can get this in quickly)","commit_id":"9a8fe1b42e031bd4ed90b4115b1fd82c8c3d37ce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"b1698e9082b56984f92cc11afc6709009183705c","unresolved":false,"context_lines":[{"line_number":79,"context_line":"# an OpenStack cross-project spec, downgrades will be no longer supported. One"},{"line_number":80,"context_line":"# action point is to do not add new migrations with downgrade functions."},{"line_number":81,"context_line":"# Removing such support on Keystone starts at this 067 migration script."},{"line_number":82,"context_line":"def downgrade(migrate_engine):"},{"line_number":83,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"da9b358b_11a1d894","line":82,"in_reply_to":"fa963961_02ff6a02","updated":"2015-03-30 12:31:22.000000000","message":"Removed.","commit_id":"9a8fe1b42e031bd4ed90b4115b1fd82c8c3d37ce"}],"keystone/common/sql/migrate_repo/versions/068_insert_assignment_inherited_pk.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"bf326da0c88430e5c964794b38ed8025822de712","unresolved":false,"context_lines":[{"line_number":13,"context_line":"import sqlalchemy as sql"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone.assignment.backends import sql as assignment_sql"},{"line_number":16,"context_line":"from sqlalchemy.orm import sessionmaker"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"ACTOR_ID_INDEX_NAME \u003d \u0027ix_actor_id\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"9aa53dc9_661756ee","line":16,"updated":"2015-04-06 23:42:06.000000000","message":"move this import up in the same group as sqlalchemy","commit_id":"9817080f16ad9a4f079b59e3f57f70d0b94000b1"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"4584be2fba3abf9f0a4c95e346359cbd9932f227","unresolved":false,"context_lines":[{"line_number":13,"context_line":"import sqlalchemy as sql"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone.assignment.backends import sql as assignment_sql"},{"line_number":16,"context_line":"from sqlalchemy.orm import sessionmaker"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"ACTOR_ID_INDEX_NAME \u003d \u0027ix_actor_id\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"9aa53dc9_fd7c1022","line":16,"in_reply_to":"9aa53dc9_661756ee","updated":"2015-04-07 00:31:55.000000000","message":"Done","commit_id":"9817080f16ad9a4f079b59e3f57f70d0b94000b1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"bf326da0c88430e5c964794b38ed8025822de712","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            assignment_sql.AssignmentType.GROUP_DOMAIN,"},{"line_number":49,"context_line":"            name\u003d\u0027type\u0027),"},{"line_number":50,"context_line":"            nullable\u003dFalse),"},{"line_number":51,"context_line":"        sql.Column(\u0027actor_id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":52,"context_line":"        sql.Column(\u0027target_id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":53,"context_line":"        sql.Column(\u0027role_id\u0027, sql.String(64), sql.ForeignKey(\u0027role.id\u0027),"},{"line_number":54,"context_line":"                   nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":10,"id":"9aa53dc9_4618d284","line":51,"updated":"2015-04-06 23:42:06.000000000","message":"The index of the column got dropped: https://github.com/openstack/keystone/blob/master/keystone/assignment/backends/sql.py#L402\n\nIs that on purpose?","commit_id":"9817080f16ad9a4f079b59e3f57f70d0b94000b1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"194e1d5943dcd3559f3b281e79b48a67f36f56fc","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            assignment_sql.AssignmentType.GROUP_DOMAIN,"},{"line_number":49,"context_line":"            name\u003d\u0027type\u0027),"},{"line_number":50,"context_line":"            nullable\u003dFalse),"},{"line_number":51,"context_line":"        sql.Column(\u0027actor_id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":52,"context_line":"        sql.Column(\u0027target_id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":53,"context_line":"        sql.Column(\u0027role_id\u0027, sql.String(64), sql.ForeignKey(\u0027role.id\u0027),"},{"line_number":54,"context_line":"                   nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":10,"id":"9aa53dc9_3de718e6","line":51,"in_reply_to":"9aa53dc9_1d87b410","updated":"2015-04-07 00:37:02.000000000","message":"Great, thanks!","commit_id":"9817080f16ad9a4f079b59e3f57f70d0b94000b1"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"4584be2fba3abf9f0a4c95e346359cbd9932f227","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            assignment_sql.AssignmentType.GROUP_DOMAIN,"},{"line_number":49,"context_line":"            name\u003d\u0027type\u0027),"},{"line_number":50,"context_line":"            nullable\u003dFalse),"},{"line_number":51,"context_line":"        sql.Column(\u0027actor_id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":52,"context_line":"        sql.Column(\u0027target_id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":53,"context_line":"        sql.Column(\u0027role_id\u0027, sql.String(64), sql.ForeignKey(\u0027role.id\u0027),"},{"line_number":54,"context_line":"                   nullable\u003dFalse),"}],"source_content_type":"text/x-python","patch_set":10,"id":"9aa53dc9_1d87b410","line":51,"in_reply_to":"9aa53dc9_4618d284","updated":"2015-04-07 00:31:55.000000000","message":"The index has a non-default name, defined at migration 054 [1].\n\nThe patch [2] is fixing the existing inconsistency.\n\n[1] https://github.com/openstack/keystone/blob/master/keystone/common/sql/migrate_repo/versions/054_add_actor_id_index.py\n\n[2] https://review.openstack.org/#/c/137637/","commit_id":"9817080f16ad9a4f079b59e3f57f70d0b94000b1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"bf326da0c88430e5c964794b38ed8025822de712","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    # Change the index from the existing assignment table to the new one"},{"line_number":65,"context_line":"    sql.Index(ACTOR_ID_INDEX_NAME, assignment_table.c.actor_id).drop()"},{"line_number":66,"context_line":"    sql.Index(ACTOR_ID_INDEX_NAME, new_assignment_table.c.actor_id).create()"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    # Migrate existing data"},{"line_number":69,"context_line":"    insert \u003d new_assignment_table.insert().from_select("}],"source_content_type":"text/x-python","patch_set":10,"id":"9aa53dc9_86813a92","line":66,"updated":"2015-04-06 23:42:06.000000000","message":"This will take a while if the data is huge. I was going to ask if we can just drop the constraint and add new one, but seeing the older patchset seems we have a problem with sqlite :(","commit_id":"9817080f16ad9a4f079b59e3f57f70d0b94000b1"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f24dbf8babda45eaab54b2961d9f259a13370fe2","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    # Change the index from the existing assignment table to the new one"},{"line_number":65,"context_line":"    sql.Index(ACTOR_ID_INDEX_NAME, assignment_table.c.actor_id).drop()"},{"line_number":66,"context_line":"    sql.Index(ACTOR_ID_INDEX_NAME, new_assignment_table.c.actor_id).create()"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    # Migrate existing data"},{"line_number":69,"context_line":"    insert \u003d new_assignment_table.insert().from_select("}],"source_content_type":"text/x-python","patch_set":10,"id":"9aa53dc9_fa3f7623","line":66,"in_reply_to":"9aa53dc9_86813a92","updated":"2015-04-06 23:51:06.000000000","message":"We could special-case sqlite. I might actually like that better:\n\nmysql/pgsql drop constraint, sqlite: do the shuffle.","commit_id":"9817080f16ad9a4f079b59e3f57f70d0b94000b1"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"4584be2fba3abf9f0a4c95e346359cbd9932f227","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    # Change the index from the existing assignment table to the new one"},{"line_number":65,"context_line":"    sql.Index(ACTOR_ID_INDEX_NAME, assignment_table.c.actor_id).drop()"},{"line_number":66,"context_line":"    sql.Index(ACTOR_ID_INDEX_NAME, new_assignment_table.c.actor_id).create()"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    # Migrate existing data"},{"line_number":69,"context_line":"    insert \u003d new_assignment_table.insert().from_select("}],"source_content_type":"text/x-python","patch_set":10,"id":"9aa53dc9_fdce5082","line":66,"in_reply_to":"9aa53dc9_fa3f7623","updated":"2015-04-07 00:31:55.000000000","message":"++","commit_id":"9817080f16ad9a4f079b59e3f57f70d0b94000b1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"f9abe92382078149659cd6a7cf9226947d946da9","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from keystone.assignment.backends import sql as assignment_sql"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import migrate"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"ACTOR_ID_INDEX_NAME \u003d \u0027ix_actor_id\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa53dc9_be9c396a","line":18,"updated":"2015-04-07 07:20:26.000000000","message":"move to the first group of import","commit_id":"378923e7a02648815ea70fff8492e1a7e0ba0846"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"a0579c20b93e3c5230bb64a4d6f6e750d50363bb","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from keystone.assignment.backends import sql as assignment_sql"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import migrate"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"ACTOR_ID_INDEX_NAME \u003d \u0027ix_actor_id\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa53dc9_b3dd8244","line":18,"in_reply_to":"9aa53dc9_be9c396a","updated":"2015-04-07 13:50:21.000000000","message":"Done","commit_id":"378923e7a02648815ea70fff8492e1a7e0ba0846"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"f9abe92382078149659cd6a7cf9226947d946da9","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    assignment_table \u003d sql.Table(ASSIGNMENT_TABLE_NAME, metadata,"},{"line_number":34,"context_line":"                                 autoload\u003dTrue)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    if migrate_engine.name !\u003d \u0027sqlite\u0027:"},{"line_number":37,"context_line":"        # Recreate the existing constraint, marking the inherited column as PK"},{"line_number":38,"context_line":"        migrate.PrimaryKeyConstraint(table\u003dassignment_table).drop()"},{"line_number":39,"context_line":"        assignment_table.c.inherited.alter(primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa53dc9_fea08192","line":36,"updated":"2015-04-07 07:20:26.000000000","message":"nit: it would be easier to read if it is using positive check, suggest to switch the code of the if/else","commit_id":"378923e7a02648815ea70fff8492e1a7e0ba0846"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"a0579c20b93e3c5230bb64a4d6f6e750d50363bb","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    assignment_table \u003d sql.Table(ASSIGNMENT_TABLE_NAME, metadata,"},{"line_number":34,"context_line":"                                 autoload\u003dTrue)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    if migrate_engine.name !\u003d \u0027sqlite\u0027:"},{"line_number":37,"context_line":"        # Recreate the existing constraint, marking the inherited column as PK"},{"line_number":38,"context_line":"        migrate.PrimaryKeyConstraint(table\u003dassignment_table).drop()"},{"line_number":39,"context_line":"        assignment_table.c.inherited.alter(primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa53dc9_b3e7c2e3","line":36,"in_reply_to":"9aa53dc9_fea08192","updated":"2015-04-07 13:50:21.000000000","message":"Done","commit_id":"378923e7a02648815ea70fff8492e1a7e0ba0846"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"699eb73b41edfe37ed61bb37505a84633fd8a79a","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"ACTOR_ID_INDEX_NAME \u003d \u0027ix_actor_id\u0027"},{"line_number":21,"context_line":"ASSIGNMENT_TABLE_NAME \u003d \u0027assignment\u0027"},{"line_number":22,"context_line":"TMP_ASSIGNMENT_TABLE_NAME \u003d \u0027tmp_assignment\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def upgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_9909782f","line":22,"updated":"2015-04-07 15:41:32.000000000","message":"this is only used in the sqlite case, so suggest move it there.","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"6efa0cfb4dc9ef19e9151dd2bb9d377da2d1cf31","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"ACTOR_ID_INDEX_NAME \u003d \u0027ix_actor_id\u0027"},{"line_number":21,"context_line":"ASSIGNMENT_TABLE_NAME \u003d \u0027assignment\u0027"},{"line_number":22,"context_line":"TMP_ASSIGNMENT_TABLE_NAME \u003d \u0027tmp_assignment\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def upgrade(migrate_engine):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_dcfeaa6a","line":22,"in_reply_to":"9aa53dc9_9909782f","updated":"2015-04-08 11:53:51.000000000","message":"I thought constants should always be defined here (good practice).\n\nAlso, to be consistent, I am moving ASSIGNMENT_TABLE_NAME into the scope of the upgrade() method.","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"}],"keystone/tests/test_sql_upgrade.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"19bb1a65c1728c706b2de45d9c527a207d92a7a2","unresolved":false,"context_lines":[{"line_number":1521,"context_line":"        self.assertFalse(self.does_pk_exist(\u0027assignment\u0027, \u0027inherited\u0027))"},{"line_number":1522,"context_line":"        self.upgrade(63)"},{"line_number":1523,"context_line":"        if self.engine.name !\u003d \u0027sqlite\u0027:"},{"line_number":1524,"context_line":"            # sqlite does not support PK insertions (or enforcement)"},{"line_number":1525,"context_line":"            self.assertTrue(self.does_pk_exist(\u0027assignment\u0027, \u0027inherited\u0027))"},{"line_number":1526,"context_line":"        else:"},{"line_number":1527,"context_line":"            self.assertFalse(self.does_pk_exist(\u0027assignment\u0027, \u0027inherited\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_c853e214","line":1524,"updated":"2015-01-19 23:14:53.000000000","message":"since you have added the else clause here, I\u0027d suggest this comment goes in the else part","commit_id":"064f5e787d7cab15aacb48c0e964b0520b22afa0"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"60268d03cd16fec6b5b60c380793600c900885e6","unresolved":false,"context_lines":[{"line_number":1521,"context_line":"        self.assertFalse(self.does_pk_exist(\u0027assignment\u0027, \u0027inherited\u0027))"},{"line_number":1522,"context_line":"        self.upgrade(63)"},{"line_number":1523,"context_line":"        if self.engine.name !\u003d \u0027sqlite\u0027:"},{"line_number":1524,"context_line":"            # sqlite does not support PK insertions (or enforcement)"},{"line_number":1525,"context_line":"            self.assertTrue(self.does_pk_exist(\u0027assignment\u0027, \u0027inherited\u0027))"},{"line_number":1526,"context_line":"        else:"},{"line_number":1527,"context_line":"            self.assertFalse(self.does_pk_exist(\u0027assignment\u0027, \u0027inherited\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_992daa48","line":1524,"in_reply_to":"3a961159_c853e214","updated":"2015-01-20 02:03:00.000000000","message":"Done","commit_id":"064f5e787d7cab15aacb48c0e964b0520b22afa0"}],"keystone/tests/unit/test_backend.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5b9d3d072d1f3901d8c2244a1887e643342f9052","unresolved":false,"context_lines":[{"line_number":5158,"context_line":"class InheritanceTests(object):"},{"line_number":5159,"context_line":""},{"line_number":5160,"context_line":"    def _test_crud_inherited_and_direct_assignment(self, **kwargs):"},{"line_number":5161,"context_line":"        \u0027\u0027\u0027Tests inherited and direct assignments for the actor and target"},{"line_number":5162,"context_line":""},{"line_number":5163,"context_line":"        Ensure it is possible to create both an inherited and a direct role"},{"line_number":5164,"context_line":"        assignment for the same actor on the same target. The actor and the"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa963961_8e6f1892","line":5161,"updated":"2015-03-26 18:26:57.000000000","message":"Same comment as previous, since other methods/classes use \" for docstrings in this module.","commit_id":"9a8fe1b42e031bd4ed90b4115b1fd82c8c3d37ce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"b1698e9082b56984f92cc11afc6709009183705c","unresolved":false,"context_lines":[{"line_number":5158,"context_line":"class InheritanceTests(object):"},{"line_number":5159,"context_line":""},{"line_number":5160,"context_line":"    def _test_crud_inherited_and_direct_assignment(self, **kwargs):"},{"line_number":5161,"context_line":"        \u0027\u0027\u0027Tests inherited and direct assignments for the actor and target"},{"line_number":5162,"context_line":""},{"line_number":5163,"context_line":"        Ensure it is possible to create both an inherited and a direct role"},{"line_number":5164,"context_line":"        assignment for the same actor on the same target. The actor and the"}],"source_content_type":"text/x-python","patch_set":8,"id":"da9b358b_b1dd8c16","line":5161,"in_reply_to":"fa963961_8e6f1892","updated":"2015-03-30 12:31:22.000000000","message":"Done","commit_id":"9a8fe1b42e031bd4ed90b4115b1fd82c8c3d37ce"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5b9d3d072d1f3901d8c2244a1887e643342f9052","unresolved":false,"context_lines":[{"line_number":5160,"context_line":"    def _test_crud_inherited_and_direct_assignment(self, **kwargs):"},{"line_number":5161,"context_line":"        \u0027\u0027\u0027Tests inherited and direct assignments for the actor and target"},{"line_number":5162,"context_line":""},{"line_number":5163,"context_line":"        Ensure it is possible to create both an inherited and a direct role"},{"line_number":5164,"context_line":"        assignment for the same actor on the same target. The actor and the"},{"line_number":5165,"context_line":"        target are specified in the kwargs as (\u0027user_id\u0027 or \u0027group_id\u0027) and"},{"line_number":5166,"context_line":"        (\u0027project_id\u0027 or \u0027domain_id\u0027), respectively."}],"source_content_type":"text/x-python","patch_set":8,"id":"fa963961_6e03b4b9","line":5163,"updated":"2015-03-26 18:26:57.000000000","message":"an inherited what?\n\ns/inherited/inherited role assignment/","commit_id":"9a8fe1b42e031bd4ed90b4115b1fd82c8c3d37ce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"b1698e9082b56984f92cc11afc6709009183705c","unresolved":false,"context_lines":[{"line_number":5160,"context_line":"    def _test_crud_inherited_and_direct_assignment(self, **kwargs):"},{"line_number":5161,"context_line":"        \u0027\u0027\u0027Tests inherited and direct assignments for the actor and target"},{"line_number":5162,"context_line":""},{"line_number":5163,"context_line":"        Ensure it is possible to create both an inherited and a direct role"},{"line_number":5164,"context_line":"        assignment for the same actor on the same target. The actor and the"},{"line_number":5165,"context_line":"        target are specified in the kwargs as (\u0027user_id\u0027 or \u0027group_id\u0027) and"},{"line_number":5166,"context_line":"        (\u0027project_id\u0027 or \u0027domain_id\u0027), respectively."}],"source_content_type":"text/x-python","patch_set":8,"id":"da9b358b_518880e7","line":5163,"in_reply_to":"fa963961_6e03b4b9","updated":"2015-03-30 12:31:22.000000000","message":"Rephrased this to : \u0027both inherited and direct role assignments for the same actor on the same target\u0027.\n\nClearer now, right?","commit_id":"9a8fe1b42e031bd4ed90b4115b1fd82c8c3d37ce"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"f9abe92382078149659cd6a7cf9226947d946da9","unresolved":false,"context_lines":[{"line_number":5157,"context_line":""},{"line_number":5158,"context_line":"class InheritanceTests(object):"},{"line_number":5159,"context_line":""},{"line_number":5160,"context_line":"    def _test_crud_inherited_and_direct_assignment(self, **kwargs):"},{"line_number":5161,"context_line":"        \"\"\"Tests inherited and direct assignments for the actor and target"},{"line_number":5162,"context_line":""},{"line_number":5163,"context_line":"        Ensure it is possible to create both inherited and direct role"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa53dc9_de77fd00","line":5160,"updated":"2015-04-07 07:20:26.000000000","message":"good job on writing a re-usable test!","commit_id":"378923e7a02648815ea70fff8492e1a7e0ba0846"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"a0579c20b93e3c5230bb64a4d6f6e750d50363bb","unresolved":false,"context_lines":[{"line_number":5157,"context_line":""},{"line_number":5158,"context_line":"class InheritanceTests(object):"},{"line_number":5159,"context_line":""},{"line_number":5160,"context_line":"    def _test_crud_inherited_and_direct_assignment(self, **kwargs):"},{"line_number":5161,"context_line":"        \"\"\"Tests inherited and direct assignments for the actor and target"},{"line_number":5162,"context_line":""},{"line_number":5163,"context_line":"        Ensure it is possible to create both inherited and direct role"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa53dc9_53cf5656","line":5160,"in_reply_to":"9aa53dc9_de77fd00","updated":"2015-04-07 13:50:21.000000000","message":":-)","commit_id":"378923e7a02648815ea70fff8492e1a7e0ba0846"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"6efa0cfb4dc9ef19e9151dd2bb9d377da2d1cf31","unresolved":false,"context_lines":[{"line_number":5157,"context_line":""},{"line_number":5158,"context_line":"class InheritanceTests(object):"},{"line_number":5159,"context_line":""},{"line_number":5160,"context_line":"    def _test_crud_inherited_and_direct_assignment(self, **kwargs):"},{"line_number":5161,"context_line":"        \"\"\"Tests inherited and direct assignments for the actor and target"},{"line_number":5162,"context_line":""},{"line_number":5163,"context_line":"        Ensure it is possible to create both inherited and direct role"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_57303501","line":5160,"updated":"2015-04-08 11:53:51.000000000","message":"I am also moving these tests to a previous patch, as requested by Henry Nash.\n\nI agree it will make it clearer what is wrong before and is being fixed in this patch.","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"699eb73b41edfe37ed61bb37505a84633fd8a79a","unresolved":false,"context_lines":[{"line_number":5175,"context_line":"        direct_assignment \u003d {\u0027role_id\u0027: role[\u0027id\u0027]}"},{"line_number":5176,"context_line":"        direct_assignment.update(kwargs)"},{"line_number":5177,"context_line":"        inherited_assignment \u003d direct_assignment.copy()"},{"line_number":5178,"context_line":"        inherited_assignment[\u0027inherited_to_projects\u0027] \u003d \u0027projects\u0027"},{"line_number":5179,"context_line":""},{"line_number":5180,"context_line":"        # Create direct assignment and check grants"},{"line_number":5181,"context_line":"        self.assignment_api.create_grant(**direct_assignment)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_1978c8f1","line":5178,"updated":"2015-04-07 15:41:32.000000000","message":"create_grant inherited_to_projects is a bool, not a string.","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"6efa0cfb4dc9ef19e9151dd2bb9d377da2d1cf31","unresolved":false,"context_lines":[{"line_number":5175,"context_line":"        direct_assignment \u003d {\u0027role_id\u0027: role[\u0027id\u0027]}"},{"line_number":5176,"context_line":"        direct_assignment.update(kwargs)"},{"line_number":5177,"context_line":"        inherited_assignment \u003d direct_assignment.copy()"},{"line_number":5178,"context_line":"        inherited_assignment[\u0027inherited_to_projects\u0027] \u003d \u0027projects\u0027"},{"line_number":5179,"context_line":""},{"line_number":5180,"context_line":"        # Create direct assignment and check grants"},{"line_number":5181,"context_line":"        self.assignment_api.create_grant(**direct_assignment)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_f750690c","line":5178,"in_reply_to":"9aa53dc9_1978c8f1","updated":"2015-04-08 11:53:51.000000000","message":"Yes, and we provide it as bool at the calls below.\n\ndirect_assignment and inherited_assignment are assignment entities, as returned by the assignment manager. I will rename them to include _entity on their names to make it clearer","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"699eb73b41edfe37ed61bb37505a84633fd8a79a","unresolved":false,"context_lines":[{"line_number":5195,"context_line":""},{"line_number":5196,"context_line":"        # Delete both and check grants"},{"line_number":5197,"context_line":"        self.assignment_api.delete_grant(**direct_assignment)"},{"line_number":5198,"context_line":"        self.assignment_api.delete_grant(inherited_to_projects\u003dTrue,"},{"line_number":5199,"context_line":"                                         **direct_assignment)"},{"line_number":5200,"context_line":""},{"line_number":5201,"context_line":"        grants \u003d self.assignment_api.list_role_assignments_for_role(role[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_5955304e","line":5198,"updated":"2015-04-07 15:41:32.000000000","message":"why not using **inherited_assignment ?","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"6efa0cfb4dc9ef19e9151dd2bb9d377da2d1cf31","unresolved":false,"context_lines":[{"line_number":5195,"context_line":""},{"line_number":5196,"context_line":"        # Delete both and check grants"},{"line_number":5197,"context_line":"        self.assignment_api.delete_grant(**direct_assignment)"},{"line_number":5198,"context_line":"        self.assignment_api.delete_grant(inherited_to_projects\u003dTrue,"},{"line_number":5199,"context_line":"                                         **direct_assignment)"},{"line_number":5200,"context_line":""},{"line_number":5201,"context_line":"        grants \u003d self.assignment_api.list_role_assignments_for_role(role[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_3747f14c","line":5198,"in_reply_to":"9aa53dc9_5955304e","updated":"2015-04-08 11:53:51.000000000","message":"I created a separate entity to represent the common entities of the assignment, and I use it here, instead of direct_assignment. Same for 5188.","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"699eb73b41edfe37ed61bb37505a84633fd8a79a","unresolved":false,"context_lines":[{"line_number":5199,"context_line":"                                         **direct_assignment)"},{"line_number":5200,"context_line":""},{"line_number":5201,"context_line":"        grants \u003d self.assignment_api.list_role_assignments_for_role(role[\u0027id\u0027])"},{"line_number":5202,"context_line":"        self.assertThat(grants, matchers.HasLength(0))"},{"line_number":5203,"context_line":""},{"line_number":5204,"context_line":"    def test_crud_inherited_and_direct_assignment_on_domains(self):"},{"line_number":5205,"context_line":"        # Test inherited and direct assignments for user on domain"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_f98d247c","line":5202,"updated":"2015-04-07 15:41:32.000000000","message":"suggest use assertEqual([], grants) since it\u0027s more obvious.","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"6efa0cfb4dc9ef19e9151dd2bb9d377da2d1cf31","unresolved":false,"context_lines":[{"line_number":5199,"context_line":"                                         **direct_assignment)"},{"line_number":5200,"context_line":""},{"line_number":5201,"context_line":"        grants \u003d self.assignment_api.list_role_assignments_for_role(role[\u0027id\u0027])"},{"line_number":5202,"context_line":"        self.assertThat(grants, matchers.HasLength(0))"},{"line_number":5203,"context_line":""},{"line_number":5204,"context_line":"    def test_crud_inherited_and_direct_assignment_on_domains(self):"},{"line_number":5205,"context_line":"        # Test inherited and direct assignments for user on domain"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_b771c1aa","line":5202,"in_reply_to":"9aa53dc9_f98d247c","updated":"2015-04-08 11:53:51.000000000","message":"Done","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"699eb73b41edfe37ed61bb37505a84633fd8a79a","unresolved":false,"context_lines":[{"line_number":5202,"context_line":"        self.assertThat(grants, matchers.HasLength(0))"},{"line_number":5203,"context_line":""},{"line_number":5204,"context_line":"    def test_crud_inherited_and_direct_assignment_on_domains(self):"},{"line_number":5205,"context_line":"        # Test inherited and direct assignments for user on domain"},{"line_number":5206,"context_line":"        self._test_crud_inherited_and_direct_assignment("},{"line_number":5207,"context_line":"            user_id\u003dself.user_foo[\u0027id\u0027], domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":5208,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_d92b80ea","line":5205,"updated":"2015-04-07 15:41:32.000000000","message":"a comment at the top of a function looks like it applies to the whole function, but this one doesn\u0027t.","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"6efa0cfb4dc9ef19e9151dd2bb9d377da2d1cf31","unresolved":false,"context_lines":[{"line_number":5202,"context_line":"        self.assertThat(grants, matchers.HasLength(0))"},{"line_number":5203,"context_line":""},{"line_number":5204,"context_line":"    def test_crud_inherited_and_direct_assignment_on_domains(self):"},{"line_number":5205,"context_line":"        # Test inherited and direct assignments for user on domain"},{"line_number":5206,"context_line":"        self._test_crud_inherited_and_direct_assignment("},{"line_number":5207,"context_line":"            user_id\u003dself.user_foo[\u0027id\u0027], domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":5208,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_779219a1","line":5205,"in_reply_to":"9aa53dc9_d92b80ea","updated":"2015-04-08 11:53:51.000000000","message":"Separated these tests, as suggested below.","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"699eb73b41edfe37ed61bb37505a84633fd8a79a","unresolved":false,"context_lines":[{"line_number":5209,"context_line":"        group \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"},{"line_number":5210,"context_line":"        group \u003d self.identity_api.create_group(group)"},{"line_number":5211,"context_line":""},{"line_number":5212,"context_line":"        # Test inherited and direct assignments for group on domain"},{"line_number":5213,"context_line":"        self._test_crud_inherited_and_direct_assignment("},{"line_number":5214,"context_line":"            group_id\u003dgroup[\u0027id\u0027], domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":5215,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_19dc4811","line":5212,"updated":"2015-04-07 15:41:32.000000000","message":"create a separate test.","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"6efa0cfb4dc9ef19e9151dd2bb9d377da2d1cf31","unresolved":false,"context_lines":[{"line_number":5209,"context_line":"        group \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"},{"line_number":5210,"context_line":"        group \u003d self.identity_api.create_group(group)"},{"line_number":5211,"context_line":""},{"line_number":5212,"context_line":"        # Test inherited and direct assignments for group on domain"},{"line_number":5213,"context_line":"        self._test_crud_inherited_and_direct_assignment("},{"line_number":5214,"context_line":"            group_id\u003dgroup[\u0027id\u0027], domain_id\u003dDEFAULT_DOMAIN_ID)"},{"line_number":5215,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_57915598","line":5212,"in_reply_to":"9aa53dc9_19dc4811","updated":"2015-04-08 11:53:51.000000000","message":"Done","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"699eb73b41edfe37ed61bb37505a84633fd8a79a","unresolved":false,"context_lines":[{"line_number":5221,"context_line":"        group \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"},{"line_number":5222,"context_line":"        group \u003d self.identity_api.create_group(group)"},{"line_number":5223,"context_line":""},{"line_number":5224,"context_line":"        # Test inherited and direct assignments for group on project"},{"line_number":5225,"context_line":"        self._test_crud_inherited_and_direct_assignment("},{"line_number":5226,"context_line":"            group_id\u003dgroup[\u0027id\u0027], project_id\u003dself.tenant_baz[\u0027id\u0027])"},{"line_number":5227,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_59dc10e4","line":5224,"updated":"2015-04-07 15:41:32.000000000","message":"put this in a separate test.","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"6efa0cfb4dc9ef19e9151dd2bb9d377da2d1cf31","unresolved":false,"context_lines":[{"line_number":5221,"context_line":"        group \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"},{"line_number":5222,"context_line":"        group \u003d self.identity_api.create_group(group)"},{"line_number":5223,"context_line":""},{"line_number":5224,"context_line":"        # Test inherited and direct assignments for group on project"},{"line_number":5225,"context_line":"        self._test_crud_inherited_and_direct_assignment("},{"line_number":5226,"context_line":"            group_id\u003dgroup[\u0027id\u0027], project_id\u003dself.tenant_baz[\u0027id\u0027])"},{"line_number":5227,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_378c917e","line":5224,"in_reply_to":"9aa53dc9_59dc10e4","updated":"2015-04-08 11:53:51.000000000","message":"Done","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"}],"keystone/tests/unit/test_sql_upgrade.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"14f82d3971edbe5a97a2ffd888a5e3f31787d88c","unresolved":false,"context_lines":[{"line_number":683,"context_line":"                           assignment[\u0027inherited\u0027]),"},{"line_number":684,"context_line":"                          assignments)"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        self.downgrade(66)"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"        # Check that the \u0027inherited\u0027 column is not part of the PK anymore"},{"line_number":689,"context_line":"        self.assertFalse(self.does_pk_exist(\u0027assignment\u0027, \u0027inherited\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_f999b679","line":686,"updated":"2015-03-26 08:46:07.000000000","message":"no need to test the downgrade anymore","commit_id":"e427018f9d1df0582aea2c820a4b727164c346e6"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"79d731e330168e7387f0175e372a331b4ca15495","unresolved":false,"context_lines":[{"line_number":683,"context_line":"                           assignment[\u0027inherited\u0027]),"},{"line_number":684,"context_line":"                          assignments)"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"        self.downgrade(66)"},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"        # Check that the \u0027inherited\u0027 column is not part of the PK anymore"},{"line_number":689,"context_line":"        self.assertFalse(self.does_pk_exist(\u0027assignment\u0027, \u0027inherited\u0027))"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6ced46_72feb8af","line":686,"in_reply_to":"1a6ced46_f999b679","updated":"2015-03-26 12:18:59.000000000","message":"Done","commit_id":"e427018f9d1df0582aea2c820a4b727164c346e6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5b9d3d072d1f3901d8c2244a1887e643342f9052","unresolved":false,"context_lines":[{"line_number":684,"context_line":"                          assignments)"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"    def does_pk_exist(self, table, pk_column):"},{"line_number":687,"context_line":"        \u0027\u0027\u0027Checks whether a column is primary key on a table.\u0027\u0027\u0027"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"        inspector \u003d reflection.Inspector.from_engine(self.engine)"},{"line_number":690,"context_line":"        pk_columns \u003d inspector.get_pk_constraint(table)[\u0027constrained_columns\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa963961_eeb34409","line":687,"updated":"2015-03-26 18:26:57.000000000","message":"same comment here","commit_id":"9a8fe1b42e031bd4ed90b4115b1fd82c8c3d37ce"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"b1698e9082b56984f92cc11afc6709009183705c","unresolved":false,"context_lines":[{"line_number":684,"context_line":"                          assignments)"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"    def does_pk_exist(self, table, pk_column):"},{"line_number":687,"context_line":"        \u0027\u0027\u0027Checks whether a column is primary key on a table.\u0027\u0027\u0027"},{"line_number":688,"context_line":""},{"line_number":689,"context_line":"        inspector \u003d reflection.Inspector.from_engine(self.engine)"},{"line_number":690,"context_line":"        pk_columns \u003d inspector.get_pk_constraint(table)[\u0027constrained_columns\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"da9b358b_3155fc4f","line":687,"in_reply_to":"fa963961_eeb34409","updated":"2015-03-30 12:31:22.000000000","message":"Done","commit_id":"9a8fe1b42e031bd4ed90b4115b1fd82c8c3d37ce"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"f9abe92382078149659cd6a7cf9226947d946da9","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        self.assertTrue(self.does_pk_exist(\u0027assignment\u0027, \u0027inherited\u0027))"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"        # The non-inherited role assignment can now be inserted"},{"line_number":479,"context_line":"        self.insert_dict(session, \u0027assignment\u0027, noninherited)"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"        # Check that the assignment table contains all three assignments"},{"line_number":482,"context_line":"        assignment_table \u003d sqlalchemy.Table(\u0027assignment\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"9aa53dc9_be55591e","line":479,"updated":"2015-04-07 07:20:26.000000000","message":"good job on testing this scenario","commit_id":"378923e7a02648815ea70fff8492e1a7e0ba0846"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"406cc4cd10b4e3f0a26a4f145ee5ffc4e0b4f0bc","unresolved":false,"context_lines":[{"line_number":434,"context_line":"        self.upgrade(72)"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        # Check that the \u0027inherited\u0027 column is not part of the PK"},{"line_number":437,"context_line":"        self.assertFalse(self.does_pk_exist(\u0027assignment\u0027, \u0027inherited\u0027))"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        session \u003d self.Session()"},{"line_number":440,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"dae975fb_d1782492","line":437,"updated":"2015-05-09 19:42:43.000000000","message":"suggest give a name to the \u0027assignment\u0027 and \u0027inherited\u0027 magic strings so that reviewers know what they are.","commit_id":"5276ee5161bb1891b74f3bb3eab74f9d5dc0dc49"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"4f065cc8d63b9d0b1db5286168b40f4c89abac23","unresolved":false,"context_lines":[{"line_number":434,"context_line":"        self.upgrade(72)"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        # Check that the \u0027inherited\u0027 column is not part of the PK"},{"line_number":437,"context_line":"        self.assertFalse(self.does_pk_exist(\u0027assignment\u0027, \u0027inherited\u0027))"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        session \u003d self.Session()"},{"line_number":440,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9af37de9_bb544554","line":437,"in_reply_to":"dae975fb_d1782492","updated":"2015-05-11 12:23:22.000000000","message":"Done","commit_id":"5276ee5161bb1891b74f3bb3eab74f9d5dc0dc49"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"406cc4cd10b4e3f0a26a4f145ee5ffc4e0b4f0bc","unresolved":false,"context_lines":[{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        session \u003d self.Session()"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        # Create a role"},{"line_number":442,"context_line":"        role \u003d {\u0027id\u0027: uuid.uuid4().hex,"},{"line_number":443,"context_line":"                \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":444,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"dae975fb_91729cac","line":441,"updated":"2015-05-09 19:42:43.000000000","message":"suggest remove comments where the code is clear, or make the code clear enough that no comment is needed.","commit_id":"5276ee5161bb1891b74f3bb3eab74f9d5dc0dc49"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"4f065cc8d63b9d0b1db5286168b40f4c89abac23","unresolved":false,"context_lines":[{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        session \u003d self.Session()"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        # Create a role"},{"line_number":442,"context_line":"        role \u003d {\u0027id\u0027: uuid.uuid4().hex,"},{"line_number":443,"context_line":"                \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":444,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9af37de9_d6a3604e","line":441,"in_reply_to":"dae975fb_91729cac","updated":"2015-05-11 12:23:22.000000000","message":"Done","commit_id":"5276ee5161bb1891b74f3bb3eab74f9d5dc0dc49"}],"keystone/tests/unit/test_v3_assignment.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1ef76f4b7543065165c12b502ce7334ed9518664","unresolved":false,"context_lines":[{"line_number":2262,"context_line":"        # Check the user cannot get a domain token anymore"},{"line_number":2263,"context_line":"        self.v3_authenticate_token(domain_auth_data, expected_status\u003d401)"},{"line_number":2264,"context_line":""},{"line_number":2265,"context_line":"    def _test_crud_inherited_and_direct_assignment_on_target(self, target_url):"},{"line_number":2266,"context_line":"        # Create new role to avoid assignments loaded from sample data"},{"line_number":2267,"context_line":"        role \u003d self.new_role_ref()"},{"line_number":2268,"context_line":"        self.role_api.create_role(role[\u0027id\u0027], role)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_9285b3ae","line":2265,"updated":"2015-04-08 08:41:36.000000000","message":"we should extract this test into a separate patch and write it in such a way that it shows the failure when we silently allow non-inherited and inherited assignments to the same node.....then show it is fixed in this patch.","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"6efa0cfb4dc9ef19e9151dd2bb9d377da2d1cf31","unresolved":false,"context_lines":[{"line_number":2262,"context_line":"        # Check the user cannot get a domain token anymore"},{"line_number":2263,"context_line":"        self.v3_authenticate_token(domain_auth_data, expected_status\u003d401)"},{"line_number":2264,"context_line":""},{"line_number":2265,"context_line":"    def _test_crud_inherited_and_direct_assignment_on_target(self, target_url):"},{"line_number":2266,"context_line":"        # Create new role to avoid assignments loaded from sample data"},{"line_number":2267,"context_line":"        role \u003d self.new_role_ref()"},{"line_number":2268,"context_line":"        self.role_api.create_role(role[\u0027id\u0027], role)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_574a75c6","line":2265,"in_reply_to":"9aa53dc9_9285b3ae","updated":"2015-04-08 11:53:51.000000000","message":"Done","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"699eb73b41edfe37ed61bb37505a84633fd8a79a","unresolved":false,"context_lines":[{"line_number":2274,"context_line":""},{"line_number":2275,"context_line":"        # Create direct assignment and check grants"},{"line_number":2276,"context_line":"        self.put(direct_url)"},{"line_number":2277,"context_line":"        self.head(direct_url)"},{"line_number":2278,"context_line":"        self.head(inherited_url, expected_status\u003d404)"},{"line_number":2279,"context_line":""},{"line_number":2280,"context_line":"        # Now add inherited assignment and check grants"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_592650cf","line":2277,"updated":"2015-04-07 15:41:32.000000000","message":"add a comment what all the self.head calls are for.","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"6efa0cfb4dc9ef19e9151dd2bb9d377da2d1cf31","unresolved":false,"context_lines":[{"line_number":2274,"context_line":""},{"line_number":2275,"context_line":"        # Create direct assignment and check grants"},{"line_number":2276,"context_line":"        self.put(direct_url)"},{"line_number":2277,"context_line":"        self.head(direct_url)"},{"line_number":2278,"context_line":"        self.head(inherited_url, expected_status\u003d404)"},{"line_number":2279,"context_line":""},{"line_number":2280,"context_line":"        # Now add inherited assignment and check grants"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_f792a94a","line":2277,"in_reply_to":"9aa53dc9_592650cf","updated":"2015-04-08 11:53:51.000000000","message":"Done","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"699eb73b41edfe37ed61bb37505a84633fd8a79a","unresolved":false,"context_lines":[{"line_number":2285,"context_line":"        # Delete both and check grants"},{"line_number":2286,"context_line":"        self.delete(direct_url)"},{"line_number":2287,"context_line":"        self.delete(inherited_url)"},{"line_number":2288,"context_line":"        self.head(direct_url, expected_status\u003d404)"},{"line_number":2289,"context_line":"        self.head(inherited_url, expected_status\u003d404)"},{"line_number":2290,"context_line":""},{"line_number":2291,"context_line":"    def test_crud_inherited_and_direct_assignment_on_domains(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_7917d451","line":2288,"updated":"2015-04-07 15:41:32.000000000","message":"suggest put head checks after the first self.delete, too.","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"6efa0cfb4dc9ef19e9151dd2bb9d377da2d1cf31","unresolved":false,"context_lines":[{"line_number":2285,"context_line":"        # Delete both and check grants"},{"line_number":2286,"context_line":"        self.delete(direct_url)"},{"line_number":2287,"context_line":"        self.delete(inherited_url)"},{"line_number":2288,"context_line":"        self.head(direct_url, expected_status\u003d404)"},{"line_number":2289,"context_line":"        self.head(inherited_url, expected_status\u003d404)"},{"line_number":2290,"context_line":""},{"line_number":2291,"context_line":"    def test_crud_inherited_and_direct_assignment_on_domains(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9aa53dc9_d799e56f","line":2288,"in_reply_to":"9aa53dc9_7917d451","updated":"2015-04-08 11:53:51.000000000","message":"Done","commit_id":"885603c0adb760b8a8f6ae52369b13212ab405df"}]}
