)]}'
{"keystone/common/models.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"af743e5a270126d18c0c36c55fd66c8f04fced2d","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    \"\"\""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    required_keys \u003d (\u0027id\u0027, \u0027name\u0027, \u0027domain_id\u0027)"},{"line_number":118,"context_line":"    optional_keys \u003d (\u0027description\u0027,)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class Project(Model):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2Bv0%3D","line":118,"updated":"2013-03-04 19:03:13.000000000","message":"this was caught in another patch and was fixed as tuple(\u0027description\u0027) -- just a warning that the two will conflict, but i don\u0027t have a preference between the two syntaxes","commit_id":"1ae783388b147800af85f625b0158d28453ceef0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"f705882bd419c3e3d8f32998b0ea75b47970aa63","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    \"\"\""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    required_keys \u003d (\u0027id\u0027, \u0027name\u0027, \u0027domain_id\u0027)"},{"line_number":118,"context_line":"    optional_keys \u003d (\u0027description\u0027,)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class Project(Model):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2BHM%3D","line":118,"in_reply_to":"AAAAN3%2F%2F%2Bv0%3D","updated":"2013-03-05 00:28:01.000000000","message":"dropped this change since it isn\u0027t needed now that i\u0027ve changed logic.","commit_id":"1ae783388b147800af85f625b0158d28453ceef0"}],"keystone/identity/backends/sql.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9129f5fa9c638c22bc033d790802e3df039fbfe9","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        if \u0027enabled\u0027 not in tenant:"},{"line_number":447,"context_line":"            tenant[\u0027enabled\u0027] \u003d True"},{"line_number":448,"context_line":"        if \u0027description\u0027 not in tenant:"},{"line_number":449,"context_line":"            tenant[\u0027description\u0027] \u003d None"},{"line_number":450,"context_line":"        session \u003d self.get_session()"},{"line_number":451,"context_line":"        with session.begin():"},{"line_number":452,"context_line":"            tenant_ref \u003d Project.from_dict(tenant)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BrkU%3D","line":449,"updated":"2013-02-21 20:33:44.000000000","message":"this should be done in the manager, as it\u0027s applicable to all backend drivers","commit_id":"7d6f0847460f57ced4aa0bbd6556787e5fc4eb0c"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9129f5fa9c638c22bc033d790802e3df039fbfe9","unresolved":false,"context_lines":[{"line_number":795,"context_line":"    @handle_conflicts(type\u003d\u0027group\u0027)"},{"line_number":796,"context_line":"    def create_group(self, group_id, group):"},{"line_number":797,"context_line":"        if \u0027description\u0027 not in group:"},{"line_number":798,"context_line":"            group[\u0027description\u0027] \u003d None"},{"line_number":799,"context_line":"        session \u003d self.get_session()"},{"line_number":800,"context_line":"        with session.begin():"},{"line_number":801,"context_line":"            ref \u003d Group.from_dict(group)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BrkQ%3D","line":798,"updated":"2013-02-21 20:33:44.000000000","message":"same","commit_id":"7d6f0847460f57ced4aa0bbd6556787e5fc4eb0c"}],"keystone/identity/core.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"af743e5a270126d18c0c36c55fd66c8f04fced2d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    \"\"\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def __init__(self):"},{"line_number":73,"context_line":"        super(Manager, self).__init__(CONF.identity.driver)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class Driver(object):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2BvY%3D","line":73,"updated":"2013-03-04 19:03:13.000000000","message":"all of this should really be done in manager methods that wrap the drivers ...\n\nside note- unfortunately test_backend tests the drivers directly using identity_api, etc... there are a few tests that test the Manager using identity_man instead, which the tests here should do as well","commit_id":"1ae783388b147800af85f625b0158d28453ceef0"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c1971f85e913917a284fc231c671f51201bbd768","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def create_user(self, context, user_id, user):"},{"line_number":65,"context_line":"        if \u0027enabled\u0027 not in user:"},{"line_number":66,"context_line":"            user[\u0027enabled\u0027] \u003d True"},{"line_number":67,"context_line":"        return self.driver.create_user(user_id, user)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def create_group(self, context, group_id, group):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F6II%3D","line":66,"updated":"2013-03-06 22:19:30.000000000","message":"does anyone besides me think it\u0027s weird to modify an input argument without documenting that it\u0027s going to be modified? (this applies to create_group, create_project.)","commit_id":"73726ad548efa125f1d3f1a42c0756de08bb4656"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"2779ac4c4a78149fc61b67e8940a0cea9fdd2e22","unresolved":false,"context_lines":[{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def create_user(self, context, user_id, user):"},{"line_number":65,"context_line":"        if \u0027enabled\u0027 not in user:"},{"line_number":66,"context_line":"            user[\u0027enabled\u0027] \u003d True"},{"line_number":67,"context_line":"        return self.driver.create_user(user_id, user)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def create_group(self, context, group_id, group):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F5mw%3D","line":66,"in_reply_to":"AAAAN3%2F%2F6II%3D","updated":"2013-03-07 05:24:00.000000000","message":"yes, it should be modifying a clone. will fix that.","commit_id":"73726ad548efa125f1d3f1a42c0756de08bb4656"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0153a9ca847a7f158438493ef54273158d6890ef","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            tenant[\u0027enabled\u0027] \u003d True"},{"line_number":80,"context_line":"        if \u0027description\u0027 not in tenant:"},{"line_number":81,"context_line":"            tenant[\u0027description\u0027] \u003d \u0027\u0027"},{"line_number":82,"context_line":"        return self.driver.create_project(tenant_id, tenant)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class Driver(object):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAN3%2F%2F2f4%3D","line":82,"updated":"2013-03-08 20:39:31.000000000","message":"awesome","commit_id":"0297f6fd56123441fc273ae7a8f68d0e2149a1ad"}],"tests/test_backend.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9129f5fa9c638c22bc033d790802e3df039fbfe9","unresolved":false,"context_lines":[{"line_number":1549,"context_line":"    def test_create_project_doesnt_modify_passed_in_dict(self):"},{"line_number":1550,"context_line":"        new_project \u003d {\u0027id\u0027: \u0027tenant_id\u0027, \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":1551,"context_line":"                       \u0027domain_id\u0027: DEFAULT_DOMAIN_ID, \u0027enabled\u0027: True,"},{"line_number":1552,"context_line":"                       \u0027description\u0027: uuid.uuid4().hex}"},{"line_number":1553,"context_line":"        original_project \u003d new_project.copy()"},{"line_number":1554,"context_line":"        self.identity_api.create_project(\u0027tenant_id\u0027, new_project)"},{"line_number":1555,"context_line":"        self.assertDictEqual(original_project, new_project)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BrkI%3D","line":1552,"updated":"2013-02-21 20:33:44.000000000","message":"good test","commit_id":"7d6f0847460f57ced4aa0bbd6556787e5fc4eb0c"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"af743e5a270126d18c0c36c55fd66c8f04fced2d","unresolved":false,"context_lines":[{"line_number":1550,"context_line":"    def test_create_project_doesnt_modify_passed_in_dict(self):"},{"line_number":1551,"context_line":"        new_project \u003d {\u0027id\u0027: \u0027tenant_id\u0027, \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":1552,"context_line":"                       \u0027domain_id\u0027: DEFAULT_DOMAIN_ID, \u0027enabled\u0027: True,"},{"line_number":1553,"context_line":"                       \u0027description\u0027: uuid.uuid4().hex}"},{"line_number":1554,"context_line":"        original_project \u003d new_project.copy()"},{"line_number":1555,"context_line":"        self.identity_api.create_project(\u0027tenant_id\u0027, new_project)"},{"line_number":1556,"context_line":"        self.assertDictEqual(original_project, new_project)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2BvQ%3D","line":1553,"updated":"2013-03-04 19:03:13.000000000","message":"if you\u0027re assigning default values, why specify enabled?","commit_id":"1ae783388b147800af85f625b0158d28453ceef0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"f705882bd419c3e3d8f32998b0ea75b47970aa63","unresolved":false,"context_lines":[{"line_number":1550,"context_line":"    def test_create_project_doesnt_modify_passed_in_dict(self):"},{"line_number":1551,"context_line":"        new_project \u003d {\u0027id\u0027: \u0027tenant_id\u0027, \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":1552,"context_line":"                       \u0027domain_id\u0027: DEFAULT_DOMAIN_ID, \u0027enabled\u0027: True,"},{"line_number":1553,"context_line":"                       \u0027description\u0027: uuid.uuid4().hex}"},{"line_number":1554,"context_line":"        original_project \u003d new_project.copy()"},{"line_number":1555,"context_line":"        self.identity_api.create_project(\u0027tenant_id\u0027, new_project)"},{"line_number":1556,"context_line":"        self.assertDictEqual(original_project, new_project)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAN3%2F%2F%2BHw%3D","line":1553,"in_reply_to":"AAAAN3%2F%2F%2BvQ%3D","updated":"2013-03-05 00:28:01.000000000","message":"changed to False.","commit_id":"1ae783388b147800af85f625b0158d28453ceef0"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c1971f85e913917a284fc231c671f51201bbd768","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            \u0027domain_id\u0027: DEFAULT_DOMAIN_ID,"},{"line_number":117,"context_line":"            \u0027password\u0027: \u0027no_meta2\u0027,"},{"line_number":118,"context_line":"        }"},{"line_number":119,"context_line":"        self.identity_man.create_user({}, user[\u0027id\u0027], user)"},{"line_number":120,"context_line":"        self.identity_api.add_user_to_project(self.tenant_baz[\u0027id\u0027],"},{"line_number":121,"context_line":"                                              user[\u0027id\u0027])"},{"line_number":122,"context_line":"        user_ref, tenant_ref, metadata_ref \u003d self.identity_api.authenticate("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F6JQ%3D","line":119,"updated":"2013-03-06 22:19:30.000000000","message":"suggest provide a name for \"magic constant\" {}, e.g., context\u003d{}.\n\nalso, since this is used all over the place, have a function self._create_user()","commit_id":"73726ad548efa125f1d3f1a42c0756de08bb4656"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b978c9ad7e4fbb933bfa6546150a377b785ad987","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            \u0027domain_id\u0027: DEFAULT_DOMAIN_ID,"},{"line_number":117,"context_line":"            \u0027password\u0027: \u0027no_meta2\u0027,"},{"line_number":118,"context_line":"        }"},{"line_number":119,"context_line":"        self.identity_man.create_user({}, user[\u0027id\u0027], user)"},{"line_number":120,"context_line":"        self.identity_api.add_user_to_project(self.tenant_baz[\u0027id\u0027],"},{"line_number":121,"context_line":"                                              user[\u0027id\u0027])"},{"line_number":122,"context_line":"        user_ref, tenant_ref, metadata_ref \u003d self.identity_api.authenticate("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F4Rg%3D","line":119,"in_reply_to":"AAAAN3%2F%2F6JQ%3D","updated":"2013-03-07 20:42:09.000000000","message":"i cannot see the value in giving it a name. make more sense to assign name if the dict is ever given a value.","commit_id":"73726ad548efa125f1d3f1a42c0756de08bb4656"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"2779ac4c4a78149fc61b67e8940a0cea9fdd2e22","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            \u0027domain_id\u0027: DEFAULT_DOMAIN_ID,"},{"line_number":117,"context_line":"            \u0027password\u0027: \u0027no_meta2\u0027,"},{"line_number":118,"context_line":"        }"},{"line_number":119,"context_line":"        self.identity_man.create_user({}, user[\u0027id\u0027], user)"},{"line_number":120,"context_line":"        self.identity_api.add_user_to_project(self.tenant_baz[\u0027id\u0027],"},{"line_number":121,"context_line":"                                              user[\u0027id\u0027])"},{"line_number":122,"context_line":"        user_ref, tenant_ref, metadata_ref \u003d self.identity_api.authenticate("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F5jo%3D","line":119,"in_reply_to":"AAAAN3%2F%2F6JQ%3D","updated":"2013-03-07 05:24:00.000000000","message":"unsure what you mean in the second part... do you mean to have a function like this:\n\ndef _create_user(user[\u0027id\u0027], user):\n    return self.identity_man.create_user(context, user[\u0027id\u0027], user)","commit_id":"73726ad548efa125f1d3f1a42c0756de08bb4656"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c1971f85e913917a284fc231c671f51201bbd768","unresolved":false,"context_lines":[{"line_number":1552,"context_line":"                       \u0027domain_id\u0027: DEFAULT_DOMAIN_ID, \u0027enabled\u0027: False,"},{"line_number":1553,"context_line":"                       \u0027description\u0027: uuid.uuid4().hex}"},{"line_number":1554,"context_line":"        original_project \u003d new_project.copy()"},{"line_number":1555,"context_line":"        self.identity_man.create_project({}, \u0027tenant_id\u0027, new_project)"},{"line_number":1556,"context_line":"        self.assertDictEqual(original_project, new_project)"},{"line_number":1557,"context_line":""},{"line_number":1558,"context_line":"    def test_create_user_doesnt_modify_passed_in_dict(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F6Iw%3D","line":1555,"updated":"2013-03-06 22:19:30.000000000","message":"this is incorrect. The test is showing that the project doesn\u0027t get changed, and the function has changed so that it now modifies the passed-in project.","commit_id":"73726ad548efa125f1d3f1a42c0756de08bb4656"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"2779ac4c4a78149fc61b67e8940a0cea9fdd2e22","unresolved":false,"context_lines":[{"line_number":1552,"context_line":"                       \u0027domain_id\u0027: DEFAULT_DOMAIN_ID, \u0027enabled\u0027: False,"},{"line_number":1553,"context_line":"                       \u0027description\u0027: uuid.uuid4().hex}"},{"line_number":1554,"context_line":"        original_project \u003d new_project.copy()"},{"line_number":1555,"context_line":"        self.identity_man.create_project({}, \u0027tenant_id\u0027, new_project)"},{"line_number":1556,"context_line":"        self.assertDictEqual(original_project, new_project)"},{"line_number":1557,"context_line":""},{"line_number":1558,"context_line":"    def test_create_user_doesnt_modify_passed_in_dict(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F5gE%3D","line":1555,"in_reply_to":"AAAAN3%2F%2F6Iw%3D","updated":"2013-03-07 05:24:00.000000000","message":"was blanking on what was meant here. got it now... i need to create a copy of item in manager and mod that so extra values aren\u0027t needed","commit_id":"73726ad548efa125f1d3f1a42c0756de08bb4656"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c1971f85e913917a284fc231c671f51201bbd768","unresolved":false,"context_lines":[{"line_number":1557,"context_line":""},{"line_number":1558,"context_line":"    def test_create_user_doesnt_modify_passed_in_dict(self):"},{"line_number":1559,"context_line":"        new_user \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":1560,"context_line":"                    \u0027password\u0027: uuid.uuid4().hex, \u0027enabled\u0027: True,"},{"line_number":1561,"context_line":"                    \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"},{"line_number":1562,"context_line":"        original_user \u003d new_user.copy()"},{"line_number":1563,"context_line":"        self.identity_man.create_user({}, \u0027user_id\u0027, new_user)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F6Ic%3D","line":1560,"updated":"2013-03-06 22:19:30.000000000","message":"remove \u0027enabled\u0027 to test this.","commit_id":"73726ad548efa125f1d3f1a42c0756de08bb4656"}],"tests/test_backend_kvs.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c1971f85e913917a284fc231c671f51201bbd768","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def setUp(self):"},{"line_number":32,"context_line":"        super(KvsIdentity, self).setUp()"},{"line_number":33,"context_line":"        self.identity_man \u003d identity.Manager()"},{"line_number":34,"context_line":"        self.identity_api \u003d self.identity_man.driver"},{"line_number":35,"context_line":"        self.load_fixtures(default_fixtures)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_list_user_projects(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F6IA%3D","line":34,"updated":"2013-03-06 22:19:30.000000000","message":"how do I know that this is the kvs backend?","commit_id":"73726ad548efa125f1d3f1a42c0756de08bb4656"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b978c9ad7e4fbb933bfa6546150a377b785ad987","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def setUp(self):"},{"line_number":32,"context_line":"        super(KvsIdentity, self).setUp()"},{"line_number":33,"context_line":"        self.identity_man \u003d identity.Manager()"},{"line_number":34,"context_line":"        self.identity_api \u003d self.identity_man.driver"},{"line_number":35,"context_line":"        self.load_fixtures(default_fixtures)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_list_user_projects(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F4Sg%3D","line":34,"in_reply_to":"AAAAN3%2F%2F5gs%3D","updated":"2013-03-07 20:42:09.000000000","message":"so this is set in parent setup when it loads test_overrides.conf... update to just assign backend.kvs in case conf file changes","commit_id":"73726ad548efa125f1d3f1a42c0756de08bb4656"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"2779ac4c4a78149fc61b67e8940a0cea9fdd2e22","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    def setUp(self):"},{"line_number":32,"context_line":"        super(KvsIdentity, self).setUp()"},{"line_number":33,"context_line":"        self.identity_man \u003d identity.Manager()"},{"line_number":34,"context_line":"        self.identity_api \u003d self.identity_man.driver"},{"line_number":35,"context_line":"        self.load_fixtures(default_fixtures)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_list_user_projects(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F5gs%3D","line":34,"in_reply_to":"AAAAN3%2F%2F6IA%3D","updated":"2013-03-07 05:24:00.000000000","message":"this might be sheer luck that it defaults to kvs driver","commit_id":"73726ad548efa125f1d3f1a42c0756de08bb4656"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0153a9ca847a7f158438493ef54273158d6890ef","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def setUp(self):"},{"line_number":33,"context_line":"        super(KvsIdentity, self).setUp()"},{"line_number":34,"context_line":"        identity.CONF.identity.driver \u003d \\"},{"line_number":35,"context_line":"            \u0027keystone.identity.backends.kvs.Identity\u0027"},{"line_number":36,"context_line":"        self.identity_man \u003d identity.Manager()"},{"line_number":37,"context_line":"        self.identity_api \u003d self.identity_man.driver"},{"line_number":38,"context_line":"        self.load_fixtures(default_fixtures)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAN3%2F%2F2fM%3D","line":35,"updated":"2013-03-08 20:39:31.000000000","message":"there\u0027s also a self.opt() method available from keystone.test.TestCase -- i\u0027m not quite clear on the difference between each approach though","commit_id":"0297f6fd56123441fc273ae7a8f68d0e2149a1ad"}],"tests/test_backend_ldap.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c1971f85e913917a284fc231c671f51201bbd768","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                     test.testsdir(\u0027backend_ldap.conf\u0027)])"},{"line_number":46,"context_line":"        clear_database()"},{"line_number":47,"context_line":"        self.identity_man \u003d identity.Manager()"},{"line_number":48,"context_line":"        self.identity_api \u003d self.identity_man.driver"},{"line_number":49,"context_line":"        self.load_fixtures(default_fixtures)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def test_build_tree(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F6Ho%3D","line":48,"updated":"2013-03-06 22:19:30.000000000","message":"how do I know that this is the LDAP driver? maybe check instanceof().","commit_id":"73726ad548efa125f1d3f1a42c0756de08bb4656"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"2779ac4c4a78149fc61b67e8940a0cea9fdd2e22","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                     test.testsdir(\u0027backend_ldap.conf\u0027)])"},{"line_number":46,"context_line":"        clear_database()"},{"line_number":47,"context_line":"        self.identity_man \u003d identity.Manager()"},{"line_number":48,"context_line":"        self.identity_api \u003d self.identity_man.driver"},{"line_number":49,"context_line":"        self.load_fixtures(default_fixtures)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def test_build_tree(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F5gk%3D","line":48,"in_reply_to":"AAAAN3%2F%2F6Ho%3D","updated":"2013-03-07 05:24:00.000000000","message":"backend_ldap.conf sets identity to ldap i believe... similar to existing setup in test_backend_sql","commit_id":"73726ad548efa125f1d3f1a42c0756de08bb4656"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c1971f85e913917a284fc231c671f51201bbd768","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        CONF.ldap.tenant_enabled_emulation \u003d True"},{"line_number":491,"context_line":"        clear_database()"},{"line_number":492,"context_line":"        self.identity_man \u003d identity.Manager()"},{"line_number":493,"context_line":"        self.identity_api \u003d self.identity_man.driver"},{"line_number":494,"context_line":"        self.load_fixtures(default_fixtures)"},{"line_number":495,"context_line":"        for obj in [self.tenant_bar, self.tenant_baz, self.user_foo,"},{"line_number":496,"context_line":"                    self.user_two, self.user_badguy]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAN3%2F%2F6HU%3D","line":493,"updated":"2013-03-06 22:19:30.000000000","message":"same here, check instanceof()","commit_id":"73726ad548efa125f1d3f1a42c0756de08bb4656"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0153a9ca847a7f158438493ef54273158d6890ef","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        CONF.ldap.tenant_allow_create \u003d False"},{"line_number":120,"context_line":"        CONF.ldap.tenant_allow_update \u003d False"},{"line_number":121,"context_line":"        CONF.ldap.tenant_allow_delete \u003d False"},{"line_number":122,"context_line":"        self.identity_api \u003d identity.backends.ldap.Identity()"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        tenant \u003d {\u0027id\u0027: \u0027fake1\u0027, \u0027name\u0027: \u0027fake1\u0027}"},{"line_number":125,"context_line":"        self.assertRaises(exception.ForbiddenAction,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAN3%2F%2F2eo%3D","line":122,"updated":"2013-03-08 20:39:31.000000000","message":"wow, these tests need some refactoring... would prefer handling that in a subsequent patch though","commit_id":"0297f6fd56123441fc273ae7a8f68d0e2149a1ad"}]}
