)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9e97c56c354845923ca4489e8c6a62b9dd218ac9","unresolved":false,"context_lines":[{"line_number":9,"context_line":"- Patch originally provided by Isaac Hailperin in bug 1210515 and"},{"line_number":10,"context_line":"  cleaned out with a test by me."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Fixes-Bug: #1210515"},{"line_number":13,"context_line":"Change-Id: I33129fc72631c2f1c8a982fd7f2934ef121d777d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAASn%2F%2FT2c%3D","line":12,"updated":"2013-09-06 15:47:51.000000000","message":"Could probably remove line 12 since bug is mention in the commit description.","commit_id":"ff36cdf5d1e7b923acaf9049ca57a6b71014617f"}],"keystone/common/ldap/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9e97c56c354845923ca4489e8c6a62b9dd218ac9","unresolved":false,"context_lines":[{"line_number":392,"context_line":"            if k not in old_obj and not v:"},{"line_number":393,"context_line":"                continue"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"            if (k not in old_obj and k in self.immutable_attrs) or \\"},{"line_number":396,"context_line":"               (k in self.immutable_attrs and old_obj[k] !\u003d v) :"},{"line_number":397,"context_line":"                msg \u003d (_(\"Cannot change %(option_name)s %(attr)s\") %"},{"line_number":398,"context_line":"                       {\u0027option_name\u0027: self.options_name, \u0027attr\u0027: k})"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAASn%2F%2FTyc%3D","line":395,"updated":"2013-09-06 15:47:51.000000000","message":"Could nest this if in a set of parenthesis and then remove the \\. \n\nhttp://docs.python.org/release/1.4/tut/node84.html","commit_id":"ff36cdf5d1e7b923acaf9049ca57a6b71014617f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5f8c286cc650c96455a18a321483857fc866ff96","unresolved":false,"context_lines":[{"line_number":389,"context_line":"        for k, v in values.iteritems():"},{"line_number":390,"context_line":"            if k \u003d\u003d \u0027id\u0027 or k in self.attribute_ignore:"},{"line_number":391,"context_line":"                continue"},{"line_number":392,"context_line":"            if k not in old_obj and not v:"},{"line_number":393,"context_line":"                continue"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"            if ((k not in old_obj and k in self.immutable_attrs) or"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FS14%3D","line":392,"updated":"2013-09-06 21:33:23.000000000","message":"it might be useful to have a comment here why this can be skipped, like\n\n # No value and was not in original, already not present","commit_id":"73466e81e59fc51c1aba4c15feb26e6ce20847b9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"28bcd6dcbf9c9048a86a2064eb098c31d2609a99","unresolved":false,"context_lines":[{"line_number":389,"context_line":"        for k, v in values.iteritems():"},{"line_number":390,"context_line":"            if k \u003d\u003d \u0027id\u0027 or k in self.attribute_ignore:"},{"line_number":391,"context_line":"                continue"},{"line_number":392,"context_line":"            if k not in old_obj and not v:"},{"line_number":393,"context_line":"                continue"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"            if ((k not in old_obj and k in self.immutable_attrs) or"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FEXY%3D","line":392,"in_reply_to":"AAAASn%2F%2FS14%3D","updated":"2013-09-12 16:01:45.000000000","message":"i find the suggested comment to be almost as confusing as the condition, but a comment would definitely be appreciated :)","commit_id":"73466e81e59fc51c1aba4c15feb26e6ce20847b9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5f8c286cc650c96455a18a321483857fc866ff96","unresolved":false,"context_lines":[{"line_number":393,"context_line":"                continue"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"            if ((k not in old_obj and k in self.immutable_attrs) or"},{"line_number":396,"context_line":"                    (k in self.immutable_attrs and old_obj[k] !\u003d v)):"},{"line_number":397,"context_line":"                msg \u003d (_(\"Cannot change %(option_name)s %(attr)s\") %"},{"line_number":398,"context_line":"                       {\u0027option_name\u0027: self.options_name, \u0027attr\u0027: k})"},{"line_number":399,"context_line":"                raise exception.ValidationError(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FS1g%3D","line":396,"updated":"2013-09-06 21:33:23.000000000","message":"suggest have explicit check that the value wasn\u0027t changed, since if wasn\u0027t changed then don\u0027t care about immutable\n\n if k in old_obj and obj_obj[k] \u003d\u003d v:\n    # Value was not changed\n    continue\n\n if k in self.immutable_attrs:\n    raise ...\n\nthen \n1) don\u0027t check k in self.immutable_attrs twice, and\n2) I think it\u0027s clearer.","commit_id":"73466e81e59fc51c1aba4c15feb26e6ce20847b9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"28bcd6dcbf9c9048a86a2064eb098c31d2609a99","unresolved":false,"context_lines":[{"line_number":393,"context_line":"                continue"},{"line_number":394,"context_line":""},{"line_number":395,"context_line":"            if ((k not in old_obj and k in self.immutable_attrs) or"},{"line_number":396,"context_line":"                    (k in self.immutable_attrs and old_obj[k] !\u003d v)):"},{"line_number":397,"context_line":"                msg \u003d (_(\"Cannot change %(option_name)s %(attr)s\") %"},{"line_number":398,"context_line":"                       {\u0027option_name\u0027: self.options_name, \u0027attr\u0027: k})"},{"line_number":399,"context_line":"                raise exception.ValidationError(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FEXA%3D","line":396,"in_reply_to":"AAAASn%2F%2FS1g%3D","updated":"2013-09-12 16:01:45.000000000","message":"suggest learn about articles and pronouns? ;)\n\nbut +1 for the suggestion","commit_id":"73466e81e59fc51c1aba4c15feb26e6ce20847b9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5f8c286cc650c96455a18a321483857fc866ff96","unresolved":false,"context_lines":[{"line_number":404,"context_line":"                continue"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"            if v is None:"},{"line_number":407,"context_line":"                if old_obj[k] is not None:"},{"line_number":408,"context_line":"                    modlist.append((ldap.MOD_DELETE,"},{"line_number":409,"context_line":"                                    self.attribute_mapping.get(k, k),"},{"line_number":410,"context_line":"                                    None))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FSyw%3D","line":407,"updated":"2013-09-06 21:33:23.000000000","message":"I think we already checked this.","commit_id":"73466e81e59fc51c1aba4c15feb26e6ce20847b9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5f8c286cc650c96455a18a321483857fc866ff96","unresolved":false,"context_lines":[{"line_number":407,"context_line":"                if old_obj[k] is not None:"},{"line_number":408,"context_line":"                    modlist.append((ldap.MOD_DELETE,"},{"line_number":409,"context_line":"                                    self.attribute_mapping.get(k, k),"},{"line_number":410,"context_line":"                                    None))"},{"line_number":411,"context_line":"            elif old_obj[k] !\u003d v:"},{"line_number":412,"context_line":"                op \u003d ldap.MOD_REPLACE"},{"line_number":413,"context_line":"                modlist.append((op, self.attribute_mapping.get(k, k), [v]))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FSyo%3D","line":410,"updated":"2013-09-06 21:33:23.000000000","message":"suggest \"continue\" here like at line 404 to match the pattern.","commit_id":"73466e81e59fc51c1aba4c15feb26e6ce20847b9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5f8c286cc650c96455a18a321483857fc866ff96","unresolved":false,"context_lines":[{"line_number":408,"context_line":"                    modlist.append((ldap.MOD_DELETE,"},{"line_number":409,"context_line":"                                    self.attribute_mapping.get(k, k),"},{"line_number":410,"context_line":"                                    None))"},{"line_number":411,"context_line":"            elif old_obj[k] !\u003d v:"},{"line_number":412,"context_line":"                op \u003d ldap.MOD_REPLACE"},{"line_number":413,"context_line":"                modlist.append((op, self.attribute_mapping.get(k, k), [v]))"},{"line_number":414,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FSys%3D","line":411,"updated":"2013-09-06 21:33:23.000000000","message":"I think we already checked this, too.","commit_id":"73466e81e59fc51c1aba4c15feb26e6ce20847b9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"43b420d0ce1021dda4a1ab5da5279657ce0e7ca0","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"            # else if there is a key/value and the attribute wasn\u0027t already"},{"line_number":412,"context_line":"            # added there, then create it."},{"line_number":413,"context_line":"            elif k not in old_obj and v:"},{"line_number":414,"context_line":"                op \u003d ldap.MOD_ADD"},{"line_number":415,"context_line":"                modlist.append((op, self.attribute_mapping.get(k, k), [v]))"},{"line_number":416,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2Fzm0%3D","line":413,"updated":"2013-09-18 22:05:21.000000000","message":"suggest change \"elif\" to \"else\" to match the pattern.","commit_id":"33b3cbd10af2fcdbd860263cf37c201edf4b6069"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"68040a2e5990c6ecab5fdd02db2174e04a5c187d","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"            # else if there is a key/value and the attribute wasn\u0027t already"},{"line_number":412,"context_line":"            # added there, then create it."},{"line_number":413,"context_line":"            elif k not in old_obj and v:"},{"line_number":414,"context_line":"                op \u003d ldap.MOD_ADD"},{"line_number":415,"context_line":"                modlist.append((op, self.attribute_mapping.get(k, k), [v]))"},{"line_number":416,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2FoKU%3D","line":413,"in_reply_to":"AAAAS3%2F%2Fo4M%3D","updated":"2013-09-23 18:43:30.000000000","message":"I mistakenly put \"else\" here rather than \"if\", that\u0027s probably where the confusion came from.","commit_id":"33b3cbd10af2fcdbd860263cf37c201edf4b6069"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"87854bedb5f4191f809b760947fff4d370396c0f","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"            # else if there is a key/value and the attribute wasn\u0027t already"},{"line_number":412,"context_line":"            # added there, then create it."},{"line_number":413,"context_line":"            elif k not in old_obj and v:"},{"line_number":414,"context_line":"                op \u003d ldap.MOD_ADD"},{"line_number":415,"context_line":"                modlist.append((op, self.attribute_mapping.get(k, k), [v]))"},{"line_number":416,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2Fmsw%3D","line":413,"in_reply_to":"AAAAS3%2F%2FoKU%3D","updated":"2013-09-24 02:44:59.000000000","message":"These nits are not worth holding up the patch.","commit_id":"33b3cbd10af2fcdbd860263cf37c201edf4b6069"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2303faca9673c66cde4fbb9f6e83707d443d439b","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"            # else if there is a key/value and the attribute wasn\u0027t already"},{"line_number":412,"context_line":"            # added there, then create it."},{"line_number":413,"context_line":"            elif k not in old_obj and v:"},{"line_number":414,"context_line":"                op \u003d ldap.MOD_ADD"},{"line_number":415,"context_line":"                modlist.append((op, self.attribute_mapping.get(k, k), [v]))"},{"line_number":416,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2Fo4M%3D","line":413,"in_reply_to":"AAAAS3%2F%2FvNI%3D","updated":"2013-09-23 15:35:09.000000000","message":"i think the prevailing pattern is to use \u0027if\u0027 on every block, so either change this \u0027elif\u0027 to an \u0027if\u0027 or change all the rest from \u0027if\u0027 to \u0027elif\u0027 -- just looking for consistency (the elif stands out as-is)","commit_id":"33b3cbd10af2fcdbd860263cf37c201edf4b6069"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"a5470df9c41c89640a8e70cef116f2ebe9603668","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"            # else if there is a key/value and the attribute wasn\u0027t already"},{"line_number":412,"context_line":"            # added there, then create it."},{"line_number":413,"context_line":"            elif k not in old_obj and v:"},{"line_number":414,"context_line":"                op \u003d ldap.MOD_ADD"},{"line_number":415,"context_line":"                modlist.append((op, self.attribute_mapping.get(k, k), [v]))"},{"line_number":416,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2FvNI%3D","line":413,"in_reply_to":"AAAAS3%2F%2Fzm0%3D","updated":"2013-09-20 08:52:10.000000000","message":"I am not sure I understand what do you mean here, the else: would catch everything and not continue with the other conditional.","commit_id":"33b3cbd10af2fcdbd860263cf37c201edf4b6069"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"43b420d0ce1021dda4a1ab5da5279657ce0e7ca0","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                continue"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"            # Disallow modifying immutable attributes."},{"line_number":419,"context_line":"            if k in self.immutable_attrs:"},{"line_number":420,"context_line":"                msg \u003d (_(\"Cannot change %(option_name)s %(attr)s\") %"},{"line_number":421,"context_line":"                       {\u0027option_name\u0027: self.options_name, \u0027attr\u0027: k})"},{"line_number":422,"context_line":"                raise exception.ValidationError(msg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2Fzmk%3D","line":419,"updated":"2013-09-18 22:05:21.000000000","message":"don\u0027t we need to disallow adding immutable attributes, too? (move 419-422 before 413).\n\nSeems odd there isn\u0027t a test for this.","commit_id":"33b3cbd10af2fcdbd860263cf37c201edf4b6069"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"87854bedb5f4191f809b760947fff4d370396c0f","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                continue"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"            # Disallow modifying immutable attributes."},{"line_number":419,"context_line":"            if k in self.immutable_attrs:"},{"line_number":420,"context_line":"                msg \u003d (_(\"Cannot change %(option_name)s %(attr)s\") %"},{"line_number":421,"context_line":"                       {\u0027option_name\u0027: self.options_name, \u0027attr\u0027: k})"},{"line_number":422,"context_line":"                raise exception.ValidationError(msg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2Fmso%3D","line":419,"in_reply_to":"AAAAS3%2F%2Fzmk%3D","updated":"2013-09-24 02:44:59.000000000","message":"+1 on the reordering","commit_id":"33b3cbd10af2fcdbd860263cf37c201edf4b6069"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"a5470df9c41c89640a8e70cef116f2ebe9603668","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                continue"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"            # Disallow modifying immutable attributes."},{"line_number":419,"context_line":"            if k in self.immutable_attrs:"},{"line_number":420,"context_line":"                msg \u003d (_(\"Cannot change %(option_name)s %(attr)s\") %"},{"line_number":421,"context_line":"                       {\u0027option_name\u0027: self.options_name, \u0027attr\u0027: k})"},{"line_number":422,"context_line":"                raise exception.ValidationError(msg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2FvM8%3D","line":419,"in_reply_to":"AAAAS3%2F%2Fzmk%3D","updated":"2013-09-20 08:52:10.000000000","message":"I probably need to improve the tests for all of this,","commit_id":"33b3cbd10af2fcdbd860263cf37c201edf4b6069"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e45c9273b1652afaf9c836279b30444c0edf56a4","unresolved":false,"context_lines":[{"line_number":399,"context_line":"            if k \u003d\u003d \u0027id\u0027 or k in self.attribute_ignore:"},{"line_number":400,"context_line":"                continue"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"            # Skip it if the value didnt change."},{"line_number":403,"context_line":"            if k in old_obj and old_obj[k] \u003d\u003d v:"},{"line_number":404,"context_line":"                continue"},{"line_number":405,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAS3%2F%2Fj1A%3D","line":402,"updated":"2013-09-24 17:31:57.000000000","message":"(nit) change \"didnt\" to \"didn\u0027t\"","commit_id":"2d6479581d98599950b236e28b036b67e6f0ee8f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"e45c9273b1652afaf9c836279b30444c0edf56a4","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                continue"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"            # Disallow modifying immutable attributes."},{"line_number":419,"context_line":"            if k in self.immutable_attrs:"},{"line_number":420,"context_line":"                msg \u003d (_(\"Cannot change %(option_name)s %(attr)s\") %"},{"line_number":421,"context_line":"                       {\u0027option_name\u0027: self.options_name, \u0027attr\u0027: k})"},{"line_number":422,"context_line":"                raise exception.ValidationError(msg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAS3%2F%2Fj0A%3D","line":419,"updated":"2013-09-24 17:31:57.000000000","message":"Don\u0027t we need to disallow adding immutable attributes, too? (move 419-422 before 413).","commit_id":"2d6479581d98599950b236e28b036b67e6f0ee8f"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"1f54e58d52339f82f811cf8b33b8916bfdf38e1d","unresolved":false,"context_lines":[{"line_number":405,"context_line":""},{"line_number":406,"context_line":"            # If we have a key with no values and it was actually not already"},{"line_number":407,"context_line":"            # there previously then skip it."},{"line_number":408,"context_line":"            if k not in old_obj and not v:"},{"line_number":409,"context_line":"                continue"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"            # Disallow modifying immutable attributes."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAS3%2F%2Fh1M%3D","line":408,"updated":"2013-09-25 07:15:55.000000000","message":"Is there any chance that we would want to set a value that doesn\u0027t evaluate to True such as 0 or False?  Could \u0027enabled\u0027 fall into this category in some configuration?","commit_id":"80cac706b1c1f98a9265bc3fa585087f3c69f334"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"7d333b42b206125faa71ec1a0935f505deb4e719","unresolved":false,"context_lines":[{"line_number":405,"context_line":""},{"line_number":406,"context_line":"            # If we have a key with no values and it was actually not already"},{"line_number":407,"context_line":"            # there previously then skip it."},{"line_number":408,"context_line":"            if k not in old_obj and not v:"},{"line_number":409,"context_line":"                continue"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"            # Disallow modifying immutable attributes."}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAS3%2F%2Fhsk%3D","line":408,"in_reply_to":"AAAAS3%2F%2Fh1M%3D","updated":"2013-09-25 08:00:37.000000000","message":"I think enabled can be only true or false and from what I understand https://github.com/openstack/keystone/blob/master/keystone/clean.py#L46 this ensures it","commit_id":"80cac706b1c1f98a9265bc3fa585087f3c69f334"}],"keystone/tests/test_backend_ldap.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"28bcd6dcbf9c9048a86a2064eb098c31d2609a99","unresolved":false,"context_lines":[{"line_number":732,"context_line":"        self.assignment_api.update_project(project[\u0027id\u0027], project)"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"        project_ref \u003d self.identity_api.get_project(project[\u0027id\u0027])"},{"line_number":735,"context_line":"        self.assertDictEqual(project_ref, project)"},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"    def test_cache_layer_project_crud(self):"},{"line_number":738,"context_line":"        # NOTE(morganfainberg): LDAP implementation does not currently support"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FEWM%3D","line":735,"updated":"2013-09-12 16:01:45.000000000","message":"can you add a negative test for an immutable attribute?","commit_id":"73466e81e59fc51c1aba4c15feb26e6ce20847b9"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"87907d83209cedbc0dbbfe95aefc55bed6686427","unresolved":false,"context_lines":[{"line_number":741,"context_line":"        self.assignment_api.update_project(project[\u0027id\u0027], project)"},{"line_number":742,"context_line":""},{"line_number":743,"context_line":"        project_ref \u003d self.identity_api.get_project(project[\u0027id\u0027])"},{"line_number":744,"context_line":"        self.assertDictEqual(project_ref, project)"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"    def test_cache_layer_project_crud(self):"},{"line_number":747,"context_line":"        # NOTE(morganfainberg): LDAP implementation does not currently support"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAS3%2F%2FgDc%3D","line":744,"updated":"2013-09-25 16:35:52.000000000","message":"patchset 2 of https://review.openstack.org/#/c/48266/ moves this test into test_backend.py which i think is more appropriate (this is not LDAP-specific)","commit_id":"80cac706b1c1f98a9265bc3fa585087f3c69f334"}]}
