)]}'
{"keystone/backends.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        credential_api\u003dcredential.Manager(),"},{"line_number":39,"context_line":"        endpoint_filter_api\u003dendpoint_filter.Manager(),"},{"line_number":40,"context_line":"        id_mapping_api\u003didentity.MappingManager(),"},{"line_number":41,"context_line":"        id_generator_api\u003didentity.generator.Manager(),"},{"line_number":42,"context_line":"        identity_api\u003d_IDENTITY_API,"},{"line_number":43,"context_line":"        policy_api\u003dpolicy.Manager(),"},{"line_number":44,"context_line":"        token_api\u003dtoken.Manager(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_02622bd8","line":41,"updated":"2014-06-29 17:03:12.000000000","message":"leave these in alphabetical order.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        credential_api\u003dcredential.Manager(),"},{"line_number":39,"context_line":"        endpoint_filter_api\u003dendpoint_filter.Manager(),"},{"line_number":40,"context_line":"        id_mapping_api\u003didentity.MappingManager(),"},{"line_number":41,"context_line":"        id_generator_api\u003didentity.generator.Manager(),"},{"line_number":42,"context_line":"        identity_api\u003d_IDENTITY_API,"},{"line_number":43,"context_line":"        policy_api\u003dpolicy.Manager(),"},{"line_number":44,"context_line":"        token_api\u003dtoken.Manager(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_e65d39eb","line":41,"in_reply_to":"dab895d6_02622bd8","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"}],"keystone/common/sql/migrate_repo/versions/051_add_id_mapping.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        MAPPING_TABLE,"},{"line_number":29,"context_line":"        meta,"},{"line_number":30,"context_line":"        sql.Column(\u0027public_id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":31,"context_line":"        sql.Column(\u0027domain_id\u0027, sql.String(64), sql.ForeignKey(\u0027domain.id\u0027),"},{"line_number":32,"context_line":"                   nullable\u003dFalse),"},{"line_number":33,"context_line":"        sql.Column(\u0027local_id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":34,"context_line":"        sql.Column(\u0027type\u0027, sql.Enum("}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_225f2f10","line":31,"updated":"2014-06-29 17:03:12.000000000","message":"the assignment backend might not be sql, so we can\u0027t have a foreign key from identity to assignment.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        MAPPING_TABLE,"},{"line_number":29,"context_line":"        meta,"},{"line_number":30,"context_line":"        sql.Column(\u0027public_id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":31,"context_line":"        sql.Column(\u0027domain_id\u0027, sql.String(64), sql.ForeignKey(\u0027domain.id\u0027),"},{"line_number":32,"context_line":"                   nullable\u003dFalse),"},{"line_number":33,"context_line":"        sql.Column(\u0027local_id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":34,"context_line":"        sql.Column(\u0027type\u0027, sql.Enum("}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_1c6283d8","line":31,"in_reply_to":"dab895d6_225f2f10","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"56504c8a512650f84961dfb826e19f6c6fbc9606","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        sql.Column(\u0027public_id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":31,"context_line":"        sql.Column(\u0027domain_id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":32,"context_line":"        sql.Column(\u0027local_id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":33,"context_line":"        sql.Column(\u0027type\u0027, sql.Enum("},{"line_number":34,"context_line":"            mapping.EntityType.USER,"},{"line_number":35,"context_line":"            mapping.EntityType.GROUP,"},{"line_number":36,"context_line":"            name\u003d\u0027type\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_8e9f4403","line":33,"updated":"2014-06-30 20:42:25.000000000","message":"this is entity_type in the model.","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b9b16b121958c1d185d841e6eacb49d6e017582e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        sql.Column(\u0027public_id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":31,"context_line":"        sql.Column(\u0027domain_id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":32,"context_line":"        sql.Column(\u0027local_id\u0027, sql.String(64), nullable\u003dFalse),"},{"line_number":33,"context_line":"        sql.Column(\u0027type\u0027, sql.Enum("},{"line_number":34,"context_line":"            mapping.EntityType.USER,"},{"line_number":35,"context_line":"            mapping.EntityType.GROUP,"},{"line_number":36,"context_line":"            name\u003d\u0027type\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_b49524e6","line":33,"in_reply_to":"baada198_8e9f4403","updated":"2014-07-01 09:17:54.000000000","message":"excellent catch...thanks.","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d4bdd5f72b294d5f9ea817ba408813e3d0dfe25a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import sqlalchemy as sql"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystone.identity.mapping_backends import mapping"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"MAPPING_TABLE \u003d \u0027id_mapping\u0027"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_80db68ec","line":18,"updated":"2014-07-01 19:47:20.000000000","message":"(nit) should have an extra newline here","commit_id":"6f792ea7a11ec493b14c4d7fcafebe986ceb8ab1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d222a344eda99f5e71e6e895f60dfa4322a41106","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import sqlalchemy as sql"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystone.identity.mapping_backends import mapping"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"MAPPING_TABLE \u003d \u0027id_mapping\u0027"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_b6d41d48","line":18,"in_reply_to":"baada198_80db68ec","updated":"2014-07-02 09:17:13.000000000","message":"Done","commit_id":"6f792ea7a11ec493b14c4d7fcafebe986ceb8ab1"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d4bdd5f72b294d5f9ea817ba408813e3d0dfe25a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":24,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    sql.Table(\u0027domain\u0027, meta, autoload\u003dTrue)"},{"line_number":27,"context_line":"    mapping_table \u003d sql.Table("},{"line_number":28,"context_line":"        MAPPING_TABLE,"},{"line_number":29,"context_line":"        meta,"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_2d0d3491","line":26,"updated":"2014-07-01 19:47:20.000000000","message":"What\u0027s this for?","commit_id":"6f792ea7a11ec493b14c4d7fcafebe986ceb8ab1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d222a344eda99f5e71e6e895f60dfa4322a41106","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    meta \u003d sql.MetaData()"},{"line_number":24,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    sql.Table(\u0027domain\u0027, meta, autoload\u003dTrue)"},{"line_number":27,"context_line":"    mapping_table \u003d sql.Table("},{"line_number":28,"context_line":"        MAPPING_TABLE,"},{"line_number":29,"context_line":"        meta,"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_36c00d7c","line":26,"in_reply_to":"baada198_2d0d3491","updated":"2014-07-02 09:17:13.000000000","message":"oops, sorry, left over from when we set a FK to domain table.  Removed.","commit_id":"6f792ea7a11ec493b14c4d7fcafebe986ceb8ab1"}],"keystone/identity/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":688,"context_line":"class MappingManager(manager.Manager):"},{"line_number":689,"context_line":"    \"\"\"Default pivot point for the ID Mapping backend."},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"    See :mod:`keystone.common.manager.Manager` for more details on how this"},{"line_number":692,"context_line":"    dynamically calls the backend."},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_82a55b06","line":691,"updated":"2014-06-29 17:03:12.000000000","message":"this is reference a class not a module.\n\nAlso, do we really need to put this on every manager class? Seems like any time you subclass you need to know how the super works.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":688,"context_line":"class MappingManager(manager.Manager):"},{"line_number":689,"context_line":"    \"\"\"Default pivot point for the ID Mapping backend."},{"line_number":690,"context_line":""},{"line_number":691,"context_line":"    See :mod:`keystone.common.manager.Manager` for more details on how this"},{"line_number":692,"context_line":"    dynamically calls the backend."},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_26f651d8","line":691,"in_reply_to":"dab895d6_82a55b06","updated":"2014-06-30 16:36:31.000000000","message":"removed.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":705,"context_line":"    @abc.abstractmethod"},{"line_number":706,"context_line":"    def get_public_id(self, domain_id, local_id, type):"},{"line_number":707,"context_line":"        \"\"\"Returns the public ID for the given local_id in its domain."},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        :returns: public ID"},{"line_number":710,"context_line":""},{"line_number":711,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_e2ab77d4","line":708,"updated":"2014-06-29 17:03:12.000000000","message":"should document what `type` is expected to be.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":705,"context_line":"    @abc.abstractmethod"},{"line_number":706,"context_line":"    def get_public_id(self, domain_id, local_id, type):"},{"line_number":707,"context_line":"        \"\"\"Returns the public ID for the given local_id in its domain."},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        :returns: public ID"},{"line_number":710,"context_line":""},{"line_number":711,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_d86bcd83","line":708,"in_reply_to":"dab895d6_e2ab77d4","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":707,"context_line":"        \"\"\"Returns the public ID for the given local_id in its domain."},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        :returns: public ID"},{"line_number":710,"context_line":""},{"line_number":711,"context_line":"        \"\"\""},{"line_number":712,"context_line":"        raise exception.NotImplemented()"},{"line_number":713,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_a2aa5fd2","line":710,"updated":"2014-06-29 17:03:12.000000000","message":"I assume this can raise if it\u0027s not found -- does it raise NotFound? GroupNotFound if type is a group and UserNotFound if it\u0027s a user?","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":707,"context_line":"        \"\"\"Returns the public ID for the given local_id in its domain."},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        :returns: public ID"},{"line_number":710,"context_line":""},{"line_number":711,"context_line":"        \"\"\""},{"line_number":712,"context_line":"        raise exception.NotImplemented()"},{"line_number":713,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_be2281ff","line":710,"in_reply_to":"dab895d6_a2aa5fd2","updated":"2014-06-30 16:36:31.000000000","message":"No, it returns None (description updated)","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":712,"context_line":"        raise exception.NotImplemented()"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"    @abc.abstractmethod"},{"line_number":715,"context_line":"    def get_id_mapping(self, public_id):"},{"line_number":716,"context_line":"        \"\"\"Returns the local domain and entity ID for the given public_id."},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        :returns: mapping_ref"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_827c7b74","line":715,"updated":"2014-06-29 17:03:12.000000000","message":"I think we should also pass in the type so that the backend can validate that it\u0027s the expected type.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":712,"context_line":"        raise exception.NotImplemented()"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":"    @abc.abstractmethod"},{"line_number":715,"context_line":"    def get_id_mapping(self, public_id):"},{"line_number":716,"context_line":"        \"\"\"Returns the local domain and entity ID for the given public_id."},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        :returns: mapping_ref"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_5e6de503","line":715,"in_reply_to":"dab895d6_827c7b74","updated":"2014-06-30 16:36:31.000000000","message":"I\u0027m not so sure at the mapping layer, we should be validating that....just returning it (which I notices was missing from the return info below, which I have fixed)","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":715,"context_line":"    def get_id_mapping(self, public_id):"},{"line_number":716,"context_line":"        \"\"\"Returns the local domain and entity ID for the given public_id."},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        :returns: mapping_ref"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"        \"\"\""},{"line_number":721,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_a2817f4c","line":718,"updated":"2014-06-29 17:03:12.000000000","message":"what\u0027s a mapping ref?","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":715,"context_line":"    def get_id_mapping(self, public_id):"},{"line_number":716,"context_line":"        \"\"\"Returns the local domain and entity ID for the given public_id."},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        :returns: mapping_ref"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"        \"\"\""},{"line_number":721,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_de573525","line":718,"in_reply_to":"dab895d6_a2817f4c","updated":"2014-06-30 16:36:31.000000000","message":"It\u0027s the umpire in a Boy Scouts of America trekking competition....oh, I see...yes, changed the name.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    @abc.abstractmethod"},{"line_number":724,"context_line":"    def create_id_mapping(self, public_id):"},{"line_number":725,"context_line":"        \"\"\"Created the local domain and entity ID mapping for the public_id."},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        :returns: public ID"},{"line_number":728,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_c2959389","line":725,"updated":"2014-06-29 17:03:12.000000000","message":"change \"Created\" to \"Create\"","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    @abc.abstractmethod"},{"line_number":724,"context_line":"    def create_id_mapping(self, public_id):"},{"line_number":725,"context_line":"        \"\"\"Created the local domain and entity ID mapping for the public_id."},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        :returns: public ID"},{"line_number":728,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_1e31ad0b","line":725,"in_reply_to":"dab895d6_c2959389","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":724,"context_line":"    def create_id_mapping(self, public_id):"},{"line_number":725,"context_line":"        \"\"\"Created the local domain and entity ID mapping for the public_id."},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        :returns: public ID"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"        \"\"\""},{"line_number":730,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_228d6f7c","line":727,"updated":"2014-06-29 17:03:12.000000000","message":"it returns the argument?","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":724,"context_line":"    def create_id_mapping(self, public_id):"},{"line_number":725,"context_line":"        \"\"\"Created the local domain and entity ID mapping for the public_id."},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"        :returns: public ID"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"        \"\"\""},{"line_number":730,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_98f875c6","line":727,"in_reply_to":"dab895d6_228d6f7c","updated":"2014-06-30 16:36:31.000000000","message":"no, but the arguments are wrong!!!! Fixed.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":730,"context_line":"        raise exception.NotImplemented()"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"    @abc.abstractmethod"},{"line_number":733,"context_line":"    def delete_id_mapping(self, public_id):"},{"line_number":734,"context_line":"        \"\"\"Deletes an entry for the given public_id.\"\"\""},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_82f39b09","line":733,"updated":"2014-06-29 17:03:12.000000000","message":"Not having looked into this much, but seems like we should pass in the type so that it can be validated that the right type of entry is being removed.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":730,"context_line":"        raise exception.NotImplemented()"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"    @abc.abstractmethod"},{"line_number":733,"context_line":"    def delete_id_mapping(self, public_id):"},{"line_number":734,"context_line":"        \"\"\"Deletes an entry for the given public_id.\"\"\""},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_214d7473","line":733,"in_reply_to":"dab895d6_82f39b09","updated":"2014-06-30 16:36:31.000000000","message":"see comment under get_id_mapping()","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":736,"context_line":"        raise exception.NotImplemented()"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"    @abc.abstractmethod"},{"line_number":739,"context_line":"    def purge_mapping(self, domain_id\u003dNone):"},{"line_number":740,"context_line":"        \"\"\"Purge mappings, optionally for a given domain.\"\"\""},{"line_number":741,"context_line":""},{"line_number":742,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_a2f89fe6","line":739,"updated":"2014-06-29 17:03:12.000000000","message":"suggest change name to \"purge_mappings\"","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":736,"context_line":"        raise exception.NotImplemented()"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"    @abc.abstractmethod"},{"line_number":739,"context_line":"    def purge_mapping(self, domain_id\u003dNone):"},{"line_number":740,"context_line":"        \"\"\"Purge mappings, optionally for a given domain.\"\"\""},{"line_number":741,"context_line":""},{"line_number":742,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_383129a3","line":739,"in_reply_to":"dab895d6_a2f89fe6","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"56504c8a512650f84961dfb826e19f6c6fbc9606","unresolved":false,"context_lines":[{"line_number":702,"context_line":"    def get_public_id(self, local_entity):"},{"line_number":703,"context_line":"        \"\"\"Returns the public ID for the given local entity."},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"        :params local_entity dict: Containing the entity domain, local ID and"},{"line_number":706,"context_line":"                                   type (\u0027user\u0027 or \u0027group\u0027)"},{"line_number":707,"context_line":"        :returns: public ID, or None if no mapping was found."},{"line_number":708,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_6e7e70e6","line":705,"updated":"2014-06-30 20:42:25.000000000","message":"the type of the parameter comes before the name","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b9b16b121958c1d185d841e6eacb49d6e017582e","unresolved":false,"context_lines":[{"line_number":702,"context_line":"    def get_public_id(self, local_entity):"},{"line_number":703,"context_line":"        \"\"\"Returns the public ID for the given local entity."},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"        :params local_entity dict: Containing the entity domain, local ID and"},{"line_number":706,"context_line":"                                   type (\u0027user\u0027 or \u0027group\u0027)"},{"line_number":707,"context_line":"        :returns: public ID, or None if no mapping was found."},{"line_number":708,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_f40cfc96","line":705,"in_reply_to":"baada198_6e7e70e6","updated":"2014-07-01 09:17:54.000000000","message":"Done","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"56504c8a512650f84961dfb826e19f6c6fbc9606","unresolved":false,"context_lines":[{"line_number":713,"context_line":"    def get_id_mapping(self, public_id):"},{"line_number":714,"context_line":"        \"\"\"Returns the local mapping."},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"        :returns dict: containing the entity domain, local ID and type."},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        \"\"\""},{"line_number":719,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_692bca82","line":716,"updated":"2014-06-30 20:42:25.000000000","message":"what does it return if the mapping doesn\u0027t exist for the ID?","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b9b16b121958c1d185d841e6eacb49d6e017582e","unresolved":false,"context_lines":[{"line_number":713,"context_line":"    def get_id_mapping(self, public_id):"},{"line_number":714,"context_line":"        \"\"\"Returns the local mapping."},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"        :returns dict: containing the entity domain, local ID and type."},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"        \"\"\""},{"line_number":719,"context_line":"        raise exception.NotImplemented()"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_b4c7e411","line":716,"in_reply_to":"baada198_692bca82","updated":"2014-07-01 09:17:54.000000000","message":"Done","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"56504c8a512650f84961dfb826e19f6c6fbc9606","unresolved":false,"context_lines":[{"line_number":722,"context_line":"    def create_id_mapping(self, local_entity, public_id\u003dNone):"},{"line_number":723,"context_line":"        \"\"\"Create and store a mapping to a public_id."},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"        :params local_entity dict: Containing the entity domain, local ID and"},{"line_number":726,"context_line":"                                   type (\u0027user\u0027 or \u0027group\u0027)"},{"line_number":727,"context_line":"        :params public_id: If specified, this will be the public ID.  If this"},{"line_number":728,"context_line":"                           is not specified, a public ID will be generated."}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_8e83c4cb","line":725,"updated":"2014-06-30 20:42:25.000000000","message":"the type of the parameter comes before the name","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b9b16b121958c1d185d841e6eacb49d6e017582e","unresolved":false,"context_lines":[{"line_number":722,"context_line":"    def create_id_mapping(self, local_entity, public_id\u003dNone):"},{"line_number":723,"context_line":"        \"\"\"Create and store a mapping to a public_id."},{"line_number":724,"context_line":""},{"line_number":725,"context_line":"        :params local_entity dict: Containing the entity domain, local ID and"},{"line_number":726,"context_line":"                                   type (\u0027user\u0027 or \u0027group\u0027)"},{"line_number":727,"context_line":"        :params public_id: If specified, this will be the public ID.  If this"},{"line_number":728,"context_line":"                           is not specified, a public ID will be generated."}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_d4cc5838","line":725,"in_reply_to":"baada198_8e83c4cb","updated":"2014-07-01 09:17:54.000000000","message":"Done","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"56504c8a512650f84961dfb826e19f6c6fbc9606","unresolved":false,"context_lines":[{"line_number":733,"context_line":""},{"line_number":734,"context_line":"    @abc.abstractmethod"},{"line_number":735,"context_line":"    def delete_id_mapping(self, public_id):"},{"line_number":736,"context_line":"        \"\"\"Deletes an entry for the given public_id.\"\"\""},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"        raise exception.NotImplemented()"},{"line_number":739,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_69ee6a24","line":736,"updated":"2014-06-30 20:42:25.000000000","message":"should document what the method is expected to do if the id doesn\u0027t exist.","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b9b16b121958c1d185d841e6eacb49d6e017582e","unresolved":false,"context_lines":[{"line_number":733,"context_line":""},{"line_number":734,"context_line":"    @abc.abstractmethod"},{"line_number":735,"context_line":"    def delete_id_mapping(self, public_id):"},{"line_number":736,"context_line":"        \"\"\"Deletes an entry for the given public_id.\"\"\""},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"        raise exception.NotImplemented()"},{"line_number":739,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_34dbd4ee","line":736,"in_reply_to":"baada198_69ee6a24","updated":"2014-07-01 09:17:54.000000000","message":"Done","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d4bdd5f72b294d5f9ea817ba408813e3d0dfe25a","unresolved":false,"context_lines":[{"line_number":702,"context_line":"    def get_public_id(self, local_entity):"},{"line_number":703,"context_line":"        \"\"\"Returns the public ID for the given local entity."},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"        :params dict local_entity: Containing the entity domain, local ID and"},{"line_number":706,"context_line":"                                   type (\u0027user\u0027 or \u0027group\u0027)."},{"line_number":707,"context_line":"        :returns: public ID, or None if no mapping was found."},{"line_number":708,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_23e9c380","line":705,"updated":"2014-07-01 19:47:20.000000000","message":"params should be param - you can tell from the generated docs that this is off http://docs-draft.openstack.org/30/102430/9/check/gate-keystone-docs/fa5ecc2/doc/build/html/api/keystone.identity.html#keystone.identity.core.MappingDriver\n\nthis applies everywhere","commit_id":"6f792ea7a11ec493b14c4d7fcafebe986ceb8ab1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d222a344eda99f5e71e6e895f60dfa4322a41106","unresolved":false,"context_lines":[{"line_number":702,"context_line":"    def get_public_id(self, local_entity):"},{"line_number":703,"context_line":"        \"\"\"Returns the public ID for the given local entity."},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"        :params dict local_entity: Containing the entity domain, local ID and"},{"line_number":706,"context_line":"                                   type (\u0027user\u0027 or \u0027group\u0027)."},{"line_number":707,"context_line":"        :returns: public ID, or None if no mapping was found."},{"line_number":708,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_f62a152b","line":705,"in_reply_to":"baada198_23e9c380","updated":"2014-07-02 09:17:13.000000000","message":"Done","commit_id":"6f792ea7a11ec493b14c4d7fcafebe986ceb8ab1"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d4bdd5f72b294d5f9ea817ba408813e3d0dfe25a","unresolved":false,"context_lines":[{"line_number":711,"context_line":""},{"line_number":712,"context_line":"    @abc.abstractmethod"},{"line_number":713,"context_line":"    def get_id_mapping(self, public_id):"},{"line_number":714,"context_line":"        \"\"\"Returns the local mapping."},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"        :returns dict: Containing the entity domain, local ID and type. If no"},{"line_number":717,"context_line":"                       mapping was found, it returns None."}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e3950be5","line":714,"updated":"2014-07-01 19:47:20.000000000","message":"public_id should be listed as a param","commit_id":"6f792ea7a11ec493b14c4d7fcafebe986ceb8ab1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d222a344eda99f5e71e6e895f60dfa4322a41106","unresolved":false,"context_lines":[{"line_number":711,"context_line":""},{"line_number":712,"context_line":"    @abc.abstractmethod"},{"line_number":713,"context_line":"    def get_id_mapping(self, public_id):"},{"line_number":714,"context_line":"        \"\"\"Returns the local mapping."},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"        :returns dict: Containing the entity domain, local ID and type. If no"},{"line_number":717,"context_line":"                       mapping was found, it returns None."}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_1621494d","line":714,"in_reply_to":"baada198_e3950be5","updated":"2014-07-02 09:17:13.000000000","message":"Done","commit_id":"6f792ea7a11ec493b14c4d7fcafebe986ceb8ab1"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d4bdd5f72b294d5f9ea817ba408813e3d0dfe25a","unresolved":false,"context_lines":[{"line_number":735,"context_line":"    @abc.abstractmethod"},{"line_number":736,"context_line":"    def delete_id_mapping(self, public_id):"},{"line_number":737,"context_line":"        \"\"\"Deletes an entry for the given public_id."},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"        The method is silent if no mapping is found."},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_63b01b8c","line":738,"updated":"2014-07-01 19:47:20.000000000","message":"public_id should be documented","commit_id":"6f792ea7a11ec493b14c4d7fcafebe986ceb8ab1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d222a344eda99f5e71e6e895f60dfa4322a41106","unresolved":false,"context_lines":[{"line_number":735,"context_line":"    @abc.abstractmethod"},{"line_number":736,"context_line":"    def delete_id_mapping(self, public_id):"},{"line_number":737,"context_line":"        \"\"\"Deletes an entry for the given public_id."},{"line_number":738,"context_line":""},{"line_number":739,"context_line":"        The method is silent if no mapping is found."},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_361c8d13","line":738,"in_reply_to":"baada198_63b01b8c","updated":"2014-07-02 09:17:13.000000000","message":"Done","commit_id":"6f792ea7a11ec493b14c4d7fcafebe986ceb8ab1"}],"keystone/identity/generator.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":27,"context_line":"class Manager(manager.Manager):"},{"line_number":28,"context_line":"    \"\"\"Default pivot point for the identifier generator backend."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    See :mod:`keystone.common.manager.Manager` for more details on how this"},{"line_number":31,"context_line":"    dynamically calls the backend."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_c2dcb377","line":30,"updated":"2014-06-29 17:03:12.000000000","message":"It\u0027s a class not a module, and just remove it this sentence.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":27,"context_line":"class Manager(manager.Manager):"},{"line_number":28,"context_line":"    \"\"\"Default pivot point for the identifier generator backend."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    See :mod:`keystone.common.manager.Manager` for more details on how this"},{"line_number":31,"context_line":"    dynamically calls the backend."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_d84aed54","line":30,"in_reply_to":"dab895d6_c2dcb377","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def generate_public_ID(self, mapping):"},{"line_number":47,"context_line":"        \"\"\"Return a Public ID for the given mapping dict."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        :param mapping: A dict containing the items to be hashed."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        The ID must be reproduceable and no more than 64 chars in length."},{"line_number":52,"context_line":"        The ID generated shoule be independant of the order of the items"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_e2d9b784","line":49,"updated":"2014-06-29 17:03:12.000000000","message":"suggest put the type in the param instead:\n\n :param dict mapping: The items to be hashed.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def generate_public_ID(self, mapping):"},{"line_number":47,"context_line":"        \"\"\"Return a Public ID for the given mapping dict."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        :param mapping: A dict containing the items to be hashed."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        The ID must be reproduceable and no more than 64 chars in length."},{"line_number":52,"context_line":"        The ID generated shoule be independant of the order of the items"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_b83d39be","line":49,"in_reply_to":"dab895d6_e2d9b784","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        :param mapping: A dict containing the items to be hashed."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        The ID must be reproduceable and no more than 64 chars in length."},{"line_number":52,"context_line":"        The ID generated shoule be independant of the order of the items"},{"line_number":53,"context_line":"        in the mapping dict."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_02e78b41","line":52,"updated":"2014-06-29 17:03:12.000000000","message":"change \"shoule\" to \"should\"","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        :param mapping: A dict containing the items to be hashed."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        The ID must be reproduceable and no more than 64 chars in length."},{"line_number":52,"context_line":"        The ID generated shoule be independant of the order of the items"},{"line_number":53,"context_line":"        in the mapping dict."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_98407537","line":52,"in_reply_to":"dab895d6_02e78b41","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"56504c8a512650f84961dfb826e19f6c6fbc9606","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def generate_public_ID(self, mapping):"},{"line_number":42,"context_line":"        \"\"\"Return a Public ID for the given mapping dict."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        :param dict mapping: The items to be hashed."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        The ID must be reproduceable and no more than 64 chars in length."},{"line_number":47,"context_line":"        The ID generated should be independant of the order of the items"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_aed6c8c3","line":44,"updated":"2014-06-30 20:42:25.000000000","message":"I like how this has the type of the parameter before the name.","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b9b16b121958c1d185d841e6eacb49d6e017582e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def generate_public_ID(self, mapping):"},{"line_number":42,"context_line":"        \"\"\"Return a Public ID for the given mapping dict."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        :param dict mapping: The items to be hashed."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        The ID must be reproduceable and no more than 64 chars in length."},{"line_number":47,"context_line":"        The ID generated should be independant of the order of the items"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_14bc1069","line":44,"in_reply_to":"baada198_aed6c8c3","updated":"2014-07-01 09:17:54.000000000","message":"thx","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"2061adf73158f7f894428910a662cc47ed0a2ea1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_3493c9a4","line":1,"updated":"2014-07-01 13:35:10.000000000","message":"it\u0027s 2014.","commit_id":"843da02337597226925e528655592c48ee2f7365"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4fa0229a8aa05eedb4025cd628563647232f64b7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_6a555cc5","line":1,"in_reply_to":"baada198_3493c9a4","updated":"2014-07-01 14:21:59.000000000","message":"waahhhhh...no way!","commit_id":"843da02337597226925e528655592c48ee2f7365"}],"keystone/identity/id_generators/sha256.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d4bdd5f72b294d5f9ea817ba408813e3d0dfe25a","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def generate_public_ID(self, mapping):"},{"line_number":23,"context_line":"        m \u003d hashlib.sha256()"},{"line_number":24,"context_line":"        for key in sorted(mapping.iterkeys()):"},{"line_number":25,"context_line":"            m.update(mapping[key])"},{"line_number":26,"context_line":"        return m.hexdigest()"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_434a3781","line":24,"updated":"2014-07-01 19:47:20.000000000","message":"Use six.iterkeys so Python3 is happy","commit_id":"6f792ea7a11ec493b14c4d7fcafebe986ceb8ab1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d222a344eda99f5e71e6e895f60dfa4322a41106","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    def generate_public_ID(self, mapping):"},{"line_number":23,"context_line":"        m \u003d hashlib.sha256()"},{"line_number":24,"context_line":"        for key in sorted(mapping.iterkeys()):"},{"line_number":25,"context_line":"            m.update(mapping[key])"},{"line_number":26,"context_line":"        return m.hexdigest()"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_96d47921","line":24,"in_reply_to":"baada198_434a3781","updated":"2014-07-02 09:17:13.000000000","message":"Done","commit_id":"6f792ea7a11ec493b14c4d7fcafebe986ceb8ab1"}],"keystone/identity/mapping_backends/sql.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class IDMapping(sql.ModelBase, sql.ModelDictMixin):"},{"line_number":22,"context_line":"    __tablename__ \u003d \u0027id_mapping\u0027"},{"line_number":23,"context_line":"    public_id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":24,"context_line":"    domain_id \u003d sql.Column(sql.String(64), sql.ForeignKey(\u0027domain.id\u0027),"},{"line_number":25,"context_line":"                           nullable\u003dFalse)"},{"line_number":26,"context_line":"    local_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"},{"line_number":27,"context_line":"    # NOTE(henry-nash); Postgres requires a name to be defined for an Enum"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_429b43c9","line":24,"updated":"2014-06-29 17:03:12.000000000","message":"the assignment backend might not be sql, so we can\u0027t have a foreign key from identity to assignment.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class IDMapping(sql.ModelBase, sql.ModelDictMixin):"},{"line_number":22,"context_line":"    __tablename__ \u003d \u0027id_mapping\u0027"},{"line_number":23,"context_line":"    public_id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":24,"context_line":"    domain_id \u003d sql.Column(sql.String(64), sql.ForeignKey(\u0027domain.id\u0027),"},{"line_number":25,"context_line":"                           nullable\u003dFalse)"},{"line_number":26,"context_line":"    local_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"},{"line_number":27,"context_line":"    # NOTE(henry-nash); Postgres requires a name to be defined for an Enum"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_9f0a00d1","line":24,"in_reply_to":"dab895d6_429b43c9","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":39,"context_line":"@dependency.requires(\u0027id_generator_api\u0027)"},{"line_number":40,"context_line":"class Mapping(identity.MappingDriver):"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def get_public_id(self, domain_id, local_id, type):"},{"line_number":43,"context_line":"        # NOTE(henry-nash): Since the Public ID is regeneratable, rather"},{"line_number":44,"context_line":"        # than search for the entry using the local entity values, we"},{"line_number":45,"context_line":"        # could create the hash and do a PK lookup.  However this would only"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_02030bb9","line":42,"updated":"2014-06-29 17:03:12.000000000","message":"use a name other than type so that it doesn\u0027t mask the built-in.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":39,"context_line":"@dependency.requires(\u0027id_generator_api\u0027)"},{"line_number":40,"context_line":"class Mapping(identity.MappingDriver):"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def get_public_id(self, domain_id, local_id, type):"},{"line_number":43,"context_line":"        # NOTE(henry-nash): Since the Public ID is regeneratable, rather"},{"line_number":44,"context_line":"        # than search for the entry using the local entity values, we"},{"line_number":45,"context_line":"        # could create the hash and do a PK lookup.  However this would only"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_a47ed9e2","line":42,"in_reply_to":"dab895d6_02030bb9","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # UUIDs, like SQL.  Further, this would only work if the generation"},{"line_number":48,"context_line":"        # algorithm was immutable (e.g. it had always been sha256)."},{"line_number":49,"context_line":"        session \u003d sql.get_session()"},{"line_number":50,"context_line":"        # NOTE(morganfainberg): Since only the public_id column is being used"},{"line_number":51,"context_line":"        # here, only select the public_id column. This will keep the ORM"},{"line_number":52,"context_line":"        # overhead down."},{"line_number":53,"context_line":"        query \u003d session.query(IDMapping.public_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_e2f537cc","line":50,"updated":"2014-06-29 17:03:12.000000000","message":"I don\u0027t think we need a note for this, seems pretty obvious.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        # UUIDs, like SQL.  Further, this would only work if the generation"},{"line_number":48,"context_line":"        # algorithm was immutable (e.g. it had always been sha256)."},{"line_number":49,"context_line":"        session \u003d sql.get_session()"},{"line_number":50,"context_line":"        # NOTE(morganfainberg): Since only the public_id column is being used"},{"line_number":51,"context_line":"        # here, only select the public_id column. This will keep the ORM"},{"line_number":52,"context_line":"        # overhead down."},{"line_number":53,"context_line":"        query \u003d session.query(IDMapping.public_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_641da1bd","line":50,"in_reply_to":"dab895d6_e2f537cc","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        try:"},{"line_number":58,"context_line":"            result \u003d query.one()"},{"line_number":59,"context_line":"            if result:"},{"line_number":60,"context_line":"                return result.public_id"},{"line_number":61,"context_line":"        except sql.NotFound:"},{"line_number":62,"context_line":"            # NOTE(morganfainberg): If nothing is found, we should be"},{"line_number":63,"context_line":"            # returning none. Since the default of the method is to return"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_8299db70","line":60,"updated":"2014-06-29 17:03:12.000000000","message":"according to the coverage report this is never called. Add a test.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        try:"},{"line_number":58,"context_line":"            result \u003d query.one()"},{"line_number":59,"context_line":"            if result:"},{"line_number":60,"context_line":"                return result.public_id"},{"line_number":61,"context_line":"        except sql.NotFound:"},{"line_number":62,"context_line":"            # NOTE(morganfainberg): If nothing is found, we should be"},{"line_number":63,"context_line":"            # returning none. Since the default of the method is to return"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_ec9e1363","line":60,"in_reply_to":"dab895d6_8299db70","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        except sql.NotFound:"},{"line_number":62,"context_line":"            # NOTE(morganfainberg): If nothing is found, we should be"},{"line_number":63,"context_line":"            # returning none. Since the default of the method is to return"},{"line_number":64,"context_line":"            # None, do nothing here."},{"line_number":65,"context_line":"            pass"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_422c234b","line":64,"updated":"2014-06-29 17:03:12.000000000","message":"if this leg just returned None then no comment would be necessary.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        except sql.NotFound:"},{"line_number":62,"context_line":"            # NOTE(morganfainberg): If nothing is found, we should be"},{"line_number":63,"context_line":"            # returning none. Since the default of the method is to return"},{"line_number":64,"context_line":"            # None, do nothing here."},{"line_number":65,"context_line":"            pass"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_e488d1e9","line":64,"in_reply_to":"dab895d6_422c234b","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def create_id_mapping(self, mapping, public_id\u003dNone):"},{"line_number":70,"context_line":"        session \u003d sql.get_session()"},{"line_number":71,"context_line":"        with session.begin():"},{"line_number":72,"context_line":"            if public_id is None:"},{"line_number":73,"context_line":"                public_id \u003d self.id_generator_api.generate_public_ID(mapping)"},{"line_number":74,"context_line":"            mapping[\u0027public_id\u0027] \u003d public_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_021a2b17","line":71,"updated":"2014-06-29 17:03:12.000000000","message":"suggest use transaction context, replace 70-71 with:\n\n with sql.transaction() as session","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def create_id_mapping(self, mapping, public_id\u003dNone):"},{"line_number":70,"context_line":"        session \u003d sql.get_session()"},{"line_number":71,"context_line":"        with session.begin():"},{"line_number":72,"context_line":"            if public_id is None:"},{"line_number":73,"context_line":"                public_id \u003d self.id_generator_api.generate_public_ID(mapping)"},{"line_number":74,"context_line":"            mapping[\u0027public_id\u0027] \u003d public_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_e4a45159","line":71,"in_reply_to":"dab895d6_021a2b17","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def delete_id_mapping(self, public_id):"},{"line_number":86,"context_line":"        session \u003d sql.get_session()"},{"line_number":87,"context_line":"        with session.begin():"},{"line_number":88,"context_line":"            ref \u003d session.query(IDMapping).get(public_id)"},{"line_number":89,"context_line":"            if ref:"},{"line_number":90,"context_line":"                session.delete(ref)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_82dd5b45","line":87,"updated":"2014-06-29 17:03:12.000000000","message":"suggest use transaction context, replace 86-7 with:\n\nwith sql.transaction() as session","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def delete_id_mapping(self, public_id):"},{"line_number":86,"context_line":"        session \u003d sql.get_session()"},{"line_number":87,"context_line":"        with session.begin():"},{"line_number":88,"context_line":"            ref \u003d session.query(IDMapping).get(public_id)"},{"line_number":89,"context_line":"            if ref:"},{"line_number":90,"context_line":"                session.delete(ref)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_649041ed","line":87,"in_reply_to":"dab895d6_82dd5b45","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            if ref:"},{"line_number":90,"context_line":"                session.delete(ref)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def purge_mapping(self, mapping_filter):"},{"line_number":93,"context_line":"        \"\"\"Purge selected identity mappings."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        :param mapping_filter: A dict containing the attributes of the filter"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_c2e67316","line":92,"updated":"2014-06-29 17:03:12.000000000","message":"where did mapping_filter come from? I thought it was a domain?","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            if ref:"},{"line_number":90,"context_line":"                session.delete(ref)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def purge_mapping(self, mapping_filter):"},{"line_number":93,"context_line":"        \"\"\"Purge selected identity mappings."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        :param mapping_filter: A dict containing the attributes of the filter"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_e4bb7170","line":92,"in_reply_to":"dab895d6_c2e67316","updated":"2014-06-30 16:36:31.000000000","message":"Ok, bad name....its a purge filter","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"6db0ea262f9f0f2d8af2cdb90045d075e13f117e","unresolved":false,"context_lines":[{"line_number":25,"context_line":"                           nullable\u003dFalse)"},{"line_number":26,"context_line":"    local_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"},{"line_number":27,"context_line":"    # NOTE(henry-nash); Postgres requires a name to be defined for an Enum"},{"line_number":28,"context_line":"    type \u003d sql.Column("},{"line_number":29,"context_line":"        sql.Enum(identity_mapping.EntityType.USER,"},{"line_number":30,"context_line":"                 identity_mapping.EntityType.GROUP,"},{"line_number":31,"context_line":"                 name\u003d\u0027type\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_552bfb81","line":28,"updated":"2014-06-30 18:30:34.000000000","message":"Are you using type as a variable? Doesn\u0027t that cover up the built-in and is frowned upon? Can you call this something else?","commit_id":"7688e26e2b1d7b0816e7ce9d88e94e85363d11e9"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"22f3c44e5749aa0c2a22cf82ce58b32a7a45db65","unresolved":false,"context_lines":[{"line_number":25,"context_line":"                           nullable\u003dFalse)"},{"line_number":26,"context_line":"    local_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"},{"line_number":27,"context_line":"    # NOTE(henry-nash); Postgres requires a name to be defined for an Enum"},{"line_number":28,"context_line":"    type \u003d sql.Column("},{"line_number":29,"context_line":"        sql.Enum(identity_mapping.EntityType.USER,"},{"line_number":30,"context_line":"                 identity_mapping.EntityType.GROUP,"},{"line_number":31,"context_line":"                 name\u003d\u0027type\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_7820f69b","line":28,"in_reply_to":"baada198_552bfb81","updated":"2014-06-30 18:55:28.000000000","message":"Yep, true...OK, fixed.","commit_id":"7688e26e2b1d7b0816e7ce9d88e94e85363d11e9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"56504c8a512650f84961dfb826e19f6c6fbc9606","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class IDMapping(sql.ModelBase, sql.ModelDictMixin):"},{"line_number":22,"context_line":"    __tablename__ \u003d \u0027id_mapping\u0027"},{"line_number":23,"context_line":"    public_id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":24,"context_line":"    domain_id \u003d sql.Column(sql.String(64), sql.ForeignKey(\u0027domain.id\u0027),"},{"line_number":25,"context_line":"                           nullable\u003dFalse)"},{"line_number":26,"context_line":"    local_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"},{"line_number":27,"context_line":"    # NOTE(henry-nash); Postgres requires a name to be defined for an Enum"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_4e128cb5","line":24,"updated":"2014-06-30 20:42:25.000000000","message":"the assignment backend might not be sql, so we can\u0027t have a foreign key from identity to assignment.","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b9b16b121958c1d185d841e6eacb49d6e017582e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class IDMapping(sql.ModelBase, sql.ModelDictMixin):"},{"line_number":22,"context_line":"    __tablename__ \u003d \u0027id_mapping\u0027"},{"line_number":23,"context_line":"    public_id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"},{"line_number":24,"context_line":"    domain_id \u003d sql.Column(sql.String(64), sql.ForeignKey(\u0027domain.id\u0027),"},{"line_number":25,"context_line":"                           nullable\u003dFalse)"},{"line_number":26,"context_line":"    local_id \u003d sql.Column(sql.String(64), nullable\u003dFalse)"},{"line_number":27,"context_line":"    # NOTE(henry-nash); Postgres requires a name to be defined for an Enum"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_37f916c9","line":24,"in_reply_to":"baada198_4e128cb5","updated":"2014-07-01 09:17:54.000000000","message":"Done","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"56504c8a512650f84961dfb826e19f6c6fbc9606","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        except sql.NotFound:"},{"line_number":59,"context_line":"            return None"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def create_id_mapping(self, local_entity, public_id\u003dNone):"},{"line_number":62,"context_line":"        entity \u003d local_entity.copy()"},{"line_number":63,"context_line":"        with sql.transaction() as session:"},{"line_number":64,"context_line":"            if public_id is None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_2948f25a","line":61,"updated":"2014-06-30 20:42:25.000000000","message":"the methods in this class should be in the same order as they are in MappingDriver so it\u0027s easier to verify.","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b9b16b121958c1d185d841e6eacb49d6e017582e","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        except sql.NotFound:"},{"line_number":59,"context_line":"            return None"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def create_id_mapping(self, local_entity, public_id\u003dNone):"},{"line_number":62,"context_line":"        entity \u003d local_entity.copy()"},{"line_number":63,"context_line":"        with sql.transaction() as session:"},{"line_number":64,"context_line":"            if public_id is None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_74aaac1a","line":61,"in_reply_to":"baada198_2948f25a","updated":"2014-07-01 09:17:54.000000000","message":"Done","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"56504c8a512650f84961dfb826e19f6c6fbc9606","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def delete_id_mapping(self, public_id):"},{"line_number":78,"context_line":"        with sql.transaction() as session:"},{"line_number":79,"context_line":"            ref \u003d session.query(IDMapping).get(public_id)"},{"line_number":80,"context_line":"            if ref:"},{"line_number":81,"context_line":"                session.delete(ref)"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_0e81748f","line":79,"updated":"2014-06-30 20:42:25.000000000","message":"still seems like the type could be used here to make sure the correct id is removed.","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b9b16b121958c1d185d841e6eacb49d6e017582e","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def delete_id_mapping(self, public_id):"},{"line_number":78,"context_line":"        with sql.transaction() as session:"},{"line_number":79,"context_line":"            ref \u003d session.query(IDMapping).get(public_id)"},{"line_number":80,"context_line":"            if ref:"},{"line_number":81,"context_line":"                session.delete(ref)"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_3772f67c","line":79,"in_reply_to":"baada198_0e81748f","updated":"2014-07-01 09:17:54.000000000","message":"So since \u0027type\u0027 is part of the hash, I\u0027m not sure how the wrong ID can be removed.  Are you concerned about (once the full cross-backend ID functionality is implemented) that someone could try and pass a public ID representing a group to delete_user()?  If so, this should fail since delete_user() in the manager should:\n\n1) call get_id_mapping() to get the local entity info.  If this is not a user entity, then return UserNotFound.\n\n2) try and call the backend to delete that local entity\n\n3) assuming 1) and 2) worked, it would then delete the mapping\n\nThis seems the right level to be doing this....but open to other views.","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"56504c8a512650f84961dfb826e19f6c6fbc9606","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                session.delete(ref)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def purge_mappings(self, purge_filter):"},{"line_number":84,"context_line":"        \"\"\"Purge selected identity mappings."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        :param purge_filter: A dict containing the attributes of the filter"},{"line_number":87,"context_line":"                             that define which entries to purge. An empty"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_09e7ae41","line":84,"updated":"2014-06-30 20:42:25.000000000","message":"this docstring is in the superclass, and the rest of the methods don\u0027t copy the docstring, so for consistency remove the docstring here.","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b9b16b121958c1d185d841e6eacb49d6e017582e","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                session.delete(ref)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def purge_mappings(self, purge_filter):"},{"line_number":84,"context_line":"        \"\"\"Purge selected identity mappings."},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        :param purge_filter: A dict containing the attributes of the filter"},{"line_number":87,"context_line":"                             that define which entries to purge. An empty"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_947e60ad","line":84,"in_reply_to":"baada198_09e7ae41","updated":"2014-07-01 09:17:54.000000000","message":"Done","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"}],"keystone/tests/identity_mapping.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"847e03cd0b20921e65c9d6d3a826ff8c4f0d1692","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystone.identity.mapping_backends import sql as mapping_sql"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def list_id_mappings():"},{"line_number":19,"context_line":"    # List all id_mappings for testing purposes"},{"line_number":20,"context_line":"    a_session \u003d sql.get_session()"},{"line_number":21,"context_line":"    refs \u003d a_session.query(mapping_sql.IDMapping).all()"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_63cd2d5d","line":18,"updated":"2014-06-26 06:49:55.000000000","message":"Comment to reviewers: This is in a separate file since it will be used by multiple unit tests in the follow-on patch","commit_id":"061777fdcc469b2231238c660c0b8df341fb202e"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6412a673bcd9a0e1068a8aad7665d97c903cb2a1","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystone.identity.mapping_backends import sql as mapping_sql"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def list_id_mappings():"},{"line_number":19,"context_line":"    # List all id_mappings for testing purposes"},{"line_number":20,"context_line":"    a_session \u003d sql.get_session()"},{"line_number":21,"context_line":"    refs \u003d a_session.query(mapping_sql.IDMapping).all()"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_5620ad99","line":18,"updated":"2014-06-27 18:02:38.000000000","message":"Comment to reviewers: This is in a separate file since it will be used by multiple unit tests in the follow-on patch","commit_id":"6d28069293443c0f53d933c3b4974f90cdcf7cf8"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"75759094a84be1c3f5f82b811832a38fe9342227","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystone.identity.mapping_backends import sql as mapping_sql"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def list_id_mappings():"},{"line_number":19,"context_line":"    # List all id_mappings for testing purposes"},{"line_number":20,"context_line":"    a_session \u003d sql.get_session()"},{"line_number":21,"context_line":"    refs \u003d a_session.query(mapping_sql.IDMapping).all()"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_724a07ae","line":18,"updated":"2014-06-28 07:52:08.000000000","message":"Henry\u0027s original comment: \n\nComment to reviewers: This is in a separate file since it will be used by multiple unit tests in the follow-on patch","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystone.identity.mapping_backends import sql as mapping_sql"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def list_id_mappings():"},{"line_number":19,"context_line":"    # List all id_mappings for testing purposes"},{"line_number":20,"context_line":"    a_session \u003d sql.get_session()"},{"line_number":21,"context_line":"    refs \u003d a_session.query(mapping_sql.IDMapping).all()"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_02f14bcd","line":18,"in_reply_to":"1ae5cdf2_724a07ae","updated":"2014-06-29 17:03:12.000000000","message":"If a comment is needed for reviewers, then isn\u0027t it also needed for anyone looking at this file later?","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystone.identity.mapping_backends import sql as mapping_sql"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def list_id_mappings():"},{"line_number":19,"context_line":"    # List all id_mappings for testing purposes"},{"line_number":20,"context_line":"    a_session \u003d sql.get_session()"},{"line_number":21,"context_line":"    refs \u003d a_session.query(mapping_sql.IDMapping).all()"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_fc3dcfbc","line":18,"in_reply_to":"dab895d6_02f14bcd","updated":"2014-06-30 16:36:31.000000000","message":"Ok, I\u0027ll add a Note which will have a  TO DO to be removed once the next patch lands.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"56504c8a512650f84961dfb826e19f6c6fbc9606","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def list_id_mappings():"},{"line_number":26,"context_line":"    # List all id_mappings for testing purposes"},{"line_number":27,"context_line":"    a_session \u003d sql.get_session()"},{"line_number":28,"context_line":"    refs \u003d a_session.query(mapping_sql.IDMapping).all()"},{"line_number":29,"context_line":"    return [x.to_dict() for x in refs]"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_69d58a42","line":26,"updated":"2014-06-30 20:42:25.000000000","message":"might as well make this a docstring.","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b9b16b121958c1d185d841e6eacb49d6e017582e","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def list_id_mappings():"},{"line_number":26,"context_line":"    # List all id_mappings for testing purposes"},{"line_number":27,"context_line":"    a_session \u003d sql.get_session()"},{"line_number":28,"context_line":"    refs \u003d a_session.query(mapping_sql.IDMapping).all()"},{"line_number":29,"context_line":"    return [x.to_dict() for x in refs]"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_37203649","line":26,"in_reply_to":"baada198_69d58a42","updated":"2014-07-01 09:17:54.000000000","message":"Done","commit_id":"7cfa6a2e8e5e6b1d20d74e9c2f2519a88ee60566"}],"keystone/tests/test_backend_id_mapping_sql.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def clean_sample_data(self):"},{"line_number":50,"context_line":"        if self.domainA is not None:"},{"line_number":51,"context_line":"            self.domainA[\u0027enabled\u0027] \u003d False"},{"line_number":52,"context_line":"            self.assignment_api.update_domain(self.domainA[\u0027id\u0027], self.domainA)"},{"line_number":53,"context_line":"            self.assignment_api.delete_domain(self.domainA[\u0027id\u0027])"},{"line_number":54,"context_line":"        if self.domainB is not None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_a2b97feb","line":51,"updated":"2014-06-29 17:03:12.000000000","message":"seems like the addCleanup could be done right in load_sample_data rather than having it separate.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def clean_sample_data(self):"},{"line_number":50,"context_line":"        if self.domainA is not None:"},{"line_number":51,"context_line":"            self.domainA[\u0027enabled\u0027] \u003d False"},{"line_number":52,"context_line":"            self.assignment_api.update_domain(self.domainA[\u0027id\u0027], self.domainA)"},{"line_number":53,"context_line":"            self.assignment_api.delete_domain(self.domainA[\u0027id\u0027])"},{"line_number":54,"context_line":"        if self.domainB is not None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_a767d4e9","line":51,"in_reply_to":"dab895d6_a2b97feb","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self.assertIsNone(self.id_mapping_api.get_public_id("},{"line_number":71,"context_line":"            self.domainB[\u0027id\u0027], local_id2, mapping.EntityType.GROUP))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # Create two new mappings and the read them back"},{"line_number":74,"context_line":"        public_id1 \u003d self.id_mapping_api.create_id_mapping("},{"line_number":75,"context_line":"            {\u0027domain_id\u0027: self.domainA[\u0027id\u0027], \u0027local_id\u0027: local_id1,"},{"line_number":76,"context_line":"             \u0027type\u0027: mapping.EntityType.USER})"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_02c86b73","line":73,"updated":"2014-06-29 17:03:12.000000000","message":"change \"and the\" to \"and then\"","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        self.assertIsNone(self.id_mapping_api.get_public_id("},{"line_number":71,"context_line":"            self.domainB[\u0027id\u0027], local_id2, mapping.EntityType.GROUP))"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        # Create two new mappings and the read them back"},{"line_number":74,"context_line":"        public_id1 \u003d self.id_mapping_api.create_id_mapping("},{"line_number":75,"context_line":"            {\u0027domain_id\u0027: self.domainA[\u0027id\u0027], \u0027local_id\u0027: local_id1,"},{"line_number":76,"context_line":"             \u0027type\u0027: mapping.EntityType.USER})"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_cc786f2e","line":73,"in_reply_to":"dab895d6_02c86b73","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":100,"context_line":"             \u0027type\u0027: mapping.EntityType.USER},"},{"line_number":101,"context_line":"            public_id\u003dnew_public_id)"},{"line_number":102,"context_line":"        self.assertEqual(new_public_id, public_id3)"},{"line_number":103,"context_line":"        self.assertEqual(initial_mappings + 3,"},{"line_number":104,"context_line":"                         len(mapping_sql.list_id_mappings()))"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        # Delete the mappings we created, and make sure the mapping count"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_a2b09ff5","line":103,"updated":"2014-06-29 17:03:12.000000000","message":"use matchers.HasLength for length checks. This should give us a more descriptive message when it fails.","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":100,"context_line":"             \u0027type\u0027: mapping.EntityType.USER},"},{"line_number":101,"context_line":"            public_id\u003dnew_public_id)"},{"line_number":102,"context_line":"        self.assertEqual(new_public_id, public_id3)"},{"line_number":103,"context_line":"        self.assertEqual(initial_mappings + 3,"},{"line_number":104,"context_line":"                         len(mapping_sql.list_id_mappings()))"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        # Delete the mappings we created, and make sure the mapping count"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_670f7ce2","line":103,"in_reply_to":"dab895d6_a2b09ff5","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":141,"context_line":"             \u0027type\u0027: mapping.EntityType.USER})"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        self.assertEqual(initial_mappings + 5,"},{"line_number":144,"context_line":"                         len(mapping_sql.list_id_mappings()))"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        # Purge mappings for domainA, should be left with those in B"},{"line_number":147,"context_line":"        self.id_mapping_api.purge_mapping("}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_628da731","line":144,"updated":"2014-06-29 17:03:12.000000000","message":"use matchers.HasLength","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":141,"context_line":"             \u0027type\u0027: mapping.EntityType.USER})"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        self.assertEqual(initial_mappings + 5,"},{"line_number":144,"context_line":"                         len(mapping_sql.list_id_mappings()))"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        # Purge mappings for domainA, should be left with those in B"},{"line_number":147,"context_line":"        self.id_mapping_api.purge_mapping("}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_871490f6","line":144,"in_reply_to":"dab895d6_628da731","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self.id_mapping_api.purge_mapping("},{"line_number":148,"context_line":"            {\u0027domain_id\u0027: self.domainA[\u0027id\u0027]})"},{"line_number":149,"context_line":"        self.assertEqual(initial_mappings + 3,"},{"line_number":150,"context_line":"                         len(mapping_sql.list_id_mappings()))"},{"line_number":151,"context_line":"        self.id_mapping_api.get_id_mapping(public_id3)"},{"line_number":152,"context_line":"        self.id_mapping_api.get_id_mapping(public_id4)"},{"line_number":153,"context_line":"        self.id_mapping_api.get_id_mapping(public_id5)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_8282bbfe","line":150,"updated":"2014-06-29 17:03:12.000000000","message":"use matchers.HasLength","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self.id_mapping_api.purge_mapping("},{"line_number":148,"context_line":"            {\u0027domain_id\u0027: self.domainA[\u0027id\u0027]})"},{"line_number":149,"context_line":"        self.assertEqual(initial_mappings + 3,"},{"line_number":150,"context_line":"                         len(mapping_sql.list_id_mappings()))"},{"line_number":151,"context_line":"        self.id_mapping_api.get_id_mapping(public_id3)"},{"line_number":152,"context_line":"        self.id_mapping_api.get_id_mapping(public_id4)"},{"line_number":153,"context_line":"        self.id_mapping_api.get_id_mapping(public_id5)"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_a7f8b4c5","line":150,"in_reply_to":"dab895d6_8282bbfe","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        self.id_mapping_api.purge_mapping("},{"line_number":157,"context_line":"            {\u0027type\u0027: mapping.EntityType.GROUP})"},{"line_number":158,"context_line":"        self.assertEqual(initial_mappings + 2,"},{"line_number":159,"context_line":"                         len(mapping_sql.list_id_mappings()))"},{"line_number":160,"context_line":"        self.id_mapping_api.get_id_mapping(public_id4)"},{"line_number":161,"context_line":"        self.id_mapping_api.get_id_mapping(public_id5)"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_a287bf0e","line":159,"updated":"2014-06-29 17:03:12.000000000","message":"use matchers.HasLength","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        self.id_mapping_api.purge_mapping("},{"line_number":157,"context_line":"            {\u0027type\u0027: mapping.EntityType.GROUP})"},{"line_number":158,"context_line":"        self.assertEqual(initial_mappings + 2,"},{"line_number":159,"context_line":"                         len(mapping_sql.list_id_mappings()))"},{"line_number":160,"context_line":"        self.id_mapping_api.get_id_mapping(public_id4)"},{"line_number":161,"context_line":"        self.id_mapping_api.get_id_mapping(public_id5)"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_e702acb3","line":159,"in_reply_to":"dab895d6_a287bf0e","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":165,"context_line":"            {\u0027domain_id\u0027: self.domainB[\u0027id\u0027], \u0027local_id\u0027: local_id4,"},{"line_number":166,"context_line":"             \u0027type\u0027: mapping.EntityType.USER})"},{"line_number":167,"context_line":"        self.assertEqual(initial_mappings + 1,"},{"line_number":168,"context_line":"                         len(mapping_sql.list_id_mappings()))"},{"line_number":169,"context_line":"        self.id_mapping_api.get_id_mapping(public_id5)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # Purge mappings the remaining mappings"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_c27bd327","line":168,"updated":"2014-06-29 17:03:12.000000000","message":"use matchers.HasLength","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":165,"context_line":"            {\u0027domain_id\u0027: self.domainB[\u0027id\u0027], \u0027local_id\u0027: local_id4,"},{"line_number":166,"context_line":"             \u0027type\u0027: mapping.EntityType.USER})"},{"line_number":167,"context_line":"        self.assertEqual(initial_mappings + 1,"},{"line_number":168,"context_line":"                         len(mapping_sql.list_id_mappings()))"},{"line_number":169,"context_line":"        self.id_mapping_api.get_id_mapping(public_id5)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        # Purge mappings the remaining mappings"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_070080a9","line":168,"in_reply_to":"dab895d6_c27bd327","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b2c08917e9371143dc001977fb11e3a49dbfc7b4","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        # Purge mappings the remaining mappings"},{"line_number":172,"context_line":"        self.id_mapping_api.purge_mapping({})"},{"line_number":173,"context_line":"        self.assertEqual(initial_mappings,"},{"line_number":174,"context_line":"                         len(mapping_sql.list_id_mappings()))"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab895d6_e278d72d","line":174,"updated":"2014-06-29 17:03:12.000000000","message":"use matchers.HasLength","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"bbe057a30458ecb9ea3c0ef0dde37103daffbf45","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        # Purge mappings the remaining mappings"},{"line_number":172,"context_line":"        self.id_mapping_api.purge_mapping({})"},{"line_number":173,"context_line":"        self.assertEqual(initial_mappings,"},{"line_number":174,"context_line":"                         len(mapping_sql.list_id_mappings()))"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_272ca44a","line":174,"in_reply_to":"dab895d6_e278d72d","updated":"2014-06-30 16:36:31.000000000","message":"Done","commit_id":"3ed9f2a414af55ecc69d1d68e66baae7c21242d7"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d4bdd5f72b294d5f9ea817ba408813e3d0dfe25a","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from testtools import matchers"},{"line_number":16,"context_line":"import uuid"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone.common import sql"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_c32c87ae","line":15,"updated":"2014-07-01 19:47:20.000000000","message":"uuid is stdlib and should be in it\u0027s own section","commit_id":"6f792ea7a11ec493b14c4d7fcafebe986ceb8ab1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"d222a344eda99f5e71e6e895f60dfa4322a41106","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from testtools import matchers"},{"line_number":16,"context_line":"import uuid"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone.common import sql"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_764525b2","line":15,"in_reply_to":"baada198_c32c87ae","updated":"2014-07-02 09:17:13.000000000","message":"Done","commit_id":"6f792ea7a11ec493b14c4d7fcafebe986ceb8ab1"}]}
