)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"6b5b97191e097beb7d6ab6c62bbb9aaa88f2969d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Clear the project ID from user information"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Solved merge conflicts and made code edits where needed"},{"line_number":10,"context_line":"in order to fit current code base."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Currently when a project is deleted, the project ID details"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a430d35_51446b73","line":9,"updated":"2017-02-03 21:38:57.000000000","message":"I don\u0027t think this is necessary","commit_id":"aaf30da59c1c00e60a865418548a1ce1803dc740"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"183109a87313436c7daa0d047f9dbdd33ab20d31","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Signed-off-by: Kalaswan Datta \u003ckalaswan.datta@nectechnologies.in\u003e"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Conflicts:"},{"line_number":21,"context_line":"\tkeystone/identity/backends/base.py"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I3db0cf27d3cfdf6cf7c5bb34ec1b27ef80c139f4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a430d35_f155571d","line":21,"updated":"2017-02-03 21:39:13.000000000","message":"Yeah - we could probably get rid of this. We keep conflict messages around when we backport fixes to stable branches. Since we\u0027re not doing that here - we don\u0027t have to follow that pattern.","commit_id":"aaf30da59c1c00e60a865418548a1ce1803dc740"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"ac91169db2da880df8dad9c8354dd7a3ecf7ec61","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Signed-off-by: Kalaswan Datta \u003ckalaswan.datta@nectechnologies.in\u003e"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Conflicts:"},{"line_number":21,"context_line":"\tkeystone/identity/backends/base.py"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I3db0cf27d3cfdf6cf7c5bb34ec1b27ef80c139f4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a430d35_0c1baa73","line":21,"in_reply_to":"1a430d35_d12f7b9f","updated":"2017-02-03 21:41:04.000000000","message":"Done","commit_id":"aaf30da59c1c00e60a865418548a1ce1803dc740"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"80b4adb9fcb6123c4ee0da3b2f30ce2f3e21efaf","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Signed-off-by: Kalaswan Datta \u003ckalaswan.datta@nectechnologies.in\u003e"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Conflicts:"},{"line_number":21,"context_line":"\tkeystone/identity/backends/base.py"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Change-Id: I3db0cf27d3cfdf6cf7c5bb34ec1b27ef80c139f4"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a430d35_d12f7b9f","line":21,"in_reply_to":"1a430d35_f155571d","updated":"2017-02-03 21:39:40.000000000","message":"++","commit_id":"aaf30da59c1c00e60a865418548a1ce1803dc740"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f90a0e803cf5cbc867a1133e7192d9e0c1c820bc","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently when a project is deleted, the project ID details"},{"line_number":10,"context_line":"still exists in user information. After this fix, when a project"},{"line_number":11,"context_line":"is deleted the information of default project ID in user"},{"line_number":12,"context_line":"information will be cleared."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Closes-Bug: #1523369"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"fa31d9ce_1ae59b08","line":11,"updated":"2017-02-10 19:13:57.000000000","message":"nit remove \"information of\"","commit_id":"312088748ed8a6abb4a372ef90304f294f9e01fc"}],"keystone/identity/backends/base.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5194d33cc56431fc79472140286a51e4ae85874e","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @abc.abstractmethod"},{"line_number":225,"context_line":"    def list_users_with_default_project_id(self, project_id, hints):"},{"line_number":226,"context_line":"        \"\"\"List users with project id."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param str project_id: project ID"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_ec1d7e67","line":225,"updated":"2017-02-03 22:02:10.000000000","message":"nit: s/with/by/","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"17f24719b31e002228f64660b015a1e3b5584824","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @abc.abstractmethod"},{"line_number":225,"context_line":"    def list_users_with_default_project_id(self, project_id, hints):"},{"line_number":226,"context_line":"        \"\"\"List users with project id."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param str project_id: project ID"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_5b427811","line":225,"in_reply_to":"1a430d35_ec1d7e67","updated":"2017-02-07 01:06:38.000000000","message":"Done","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5194d33cc56431fc79472140286a51e4ae85874e","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @abc.abstractmethod"},{"line_number":225,"context_line":"    def list_users_with_default_project_id(self, project_id, hints):"},{"line_number":226,"context_line":"        \"\"\"List users with project id."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param str project_id: project ID"},{"line_number":229,"context_line":"        :param hints: filter hints which the driver should"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_4c2bf282","line":226,"updated":"2017-02-03 22:02:10.000000000","message":"List users by default project ID.","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"17f24719b31e002228f64660b015a1e3b5584824","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @abc.abstractmethod"},{"line_number":225,"context_line":"    def list_users_with_default_project_id(self, project_id, hints):"},{"line_number":226,"context_line":"        \"\"\"List users with project id."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param str project_id: project ID"},{"line_number":229,"context_line":"        :param hints: filter hints which the driver should"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_bb47dc1b","line":226,"in_reply_to":"1a430d35_4c2bf282","updated":"2017-02-07 01:06:38.000000000","message":"Done","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5194d33cc56431fc79472140286a51e4ae85874e","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :type hints: keystone.common.driver_hints.Hints"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        :returns: a list of users or an empty list."},{"line_number":235,"context_line":"        \"\"\""},{"line_number":236,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":237,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_0c600ace","line":234,"updated":"2017-02-03 22:02:10.000000000","message":"nit: \n\n  :returns: a list of users that have the project ID set as their `default_project_id`.\n\nOr something along those lines. I like to be super verbose when writing docs strings for interfaces because they help developers maintaining their own implementations. Someone somewhere might have to implement this method for their specific backend. By providing as much information as we can in the doc string will keep them from having to reverse engineer it from our code :)","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"17f24719b31e002228f64660b015a1e3b5584824","unresolved":false,"context_lines":[{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :type hints: keystone.common.driver_hints.Hints"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        :returns: a list of users or an empty list."},{"line_number":235,"context_line":"        \"\"\""},{"line_number":236,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":237,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_fb5164d9","line":234,"in_reply_to":"1a430d35_0c600ace","updated":"2017-02-07 01:06:38.000000000","message":"Done","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"c52d4aaf4123cefc084e05301cdc005952b6bb03","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @abc.abstractmethod"},{"line_number":225,"context_line":"    def unset_default_project_id(self, project_id, hints):"},{"line_number":226,"context_line":"        \"\"\"Unset users default project ID."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param str project_id: project ID"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_9e220951","line":225,"range":{"start_line":225,"start_character":51,"end_line":225,"end_character":56},"updated":"2017-02-07 05:14:17.000000000","message":"Again, where?","commit_id":"6b895690c725c3285747365cc3476ec6efcb24ae"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"777d47c866d7571303a6c4f885fa9eeb4eee7007","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @abc.abstractmethod"},{"line_number":225,"context_line":"    def unset_default_project_id(self, project_id, hints):"},{"line_number":226,"context_line":"        \"\"\"Unset users default project ID."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param str project_id: project ID"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_88b9ca17","line":225,"in_reply_to":"1a430d35_674ce09e","updated":"2017-02-07 21:10:14.000000000","message":"Done","commit_id":"6b895690c725c3285747365cc3476ec6efcb24ae"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d93d0f29ef9aeade65d4b8ee1d44d516c70757d3","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @abc.abstractmethod"},{"line_number":225,"context_line":"    def unset_default_project_id(self, project_id, hints):"},{"line_number":226,"context_line":"        \"\"\"Unset users default project ID."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param str project_id: project ID"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_674ce09e","line":225,"in_reply_to":"1a430d35_9e220951","updated":"2017-02-07 15:21:30.000000000","message":"I assume you\u0027re wondering where the hints are used? We are doing something pretty specific here, and this should only ever be called internally within keystone\u0027s identity API - meaning that hints won\u0027t really be useful in this type of situation.","commit_id":"6b895690c725c3285747365cc3476ec6efcb24ae"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d93d0f29ef9aeade65d4b8ee1d44d516c70757d3","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @abc.abstractmethod"},{"line_number":225,"context_line":"    def unset_default_project_id(self, project_id, hints):"},{"line_number":226,"context_line":"        \"\"\"Unset users default project ID."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param str project_id: project ID"},{"line_number":229,"context_line":"        :param hints: filter hints which the driver should"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_62604ea6","line":226,"updated":"2017-02-07 15:21:30.000000000","message":"We could add even more detail to this doc string:\n\n  Unset a user\u0027s default project given a specific project ID.\n\n  or \n\n  Set a user\u0027s default project to None if matching a given project ID.","commit_id":"6b895690c725c3285747365cc3476ec6efcb24ae"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d93d0f29ef9aeade65d4b8ee1d44d516c70757d3","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        :param hints: filter hints which the driver should"},{"line_number":230,"context_line":"                      implement if at all possible"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :type hints: keystone.common.driver_hints.Hints"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        \"\"\""},{"line_number":235,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_622e8e44","line":232,"updated":"2017-02-07 15:21:30.000000000","message":"We can get rid of this last `param` and `type` lines if we omit `hints` from the method signature.","commit_id":"6b895690c725c3285747365cc3476ec6efcb24ae"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"777d47c866d7571303a6c4f885fa9eeb4eee7007","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        :param hints: filter hints which the driver should"},{"line_number":230,"context_line":"                      implement if at all possible"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :type hints: keystone.common.driver_hints.Hints"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        \"\"\""},{"line_number":235,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_68bc9e06","line":232,"in_reply_to":"1a430d35_622e8e44","updated":"2017-02-07 21:10:14.000000000","message":"Done","commit_id":"6b895690c725c3285747365cc3476ec6efcb24ae"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1cd94adbc786689cef97a3f204586834b2f7055e","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @abc.abstractmethod"},{"line_number":225,"context_line":"    def unset_default_project_id(self, project_id):"},{"line_number":226,"context_line":"        \"\"\"Unset a users default project given a specific project ID."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param str project_id: project ID"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_be531c16","line":225,"updated":"2017-02-07 22:17:32.000000000","message":"This is going to require a release note.","commit_id":"fcfba624e1241ef317f0121429d2023a8816fe82"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"d8627e490f5617aecb332c63a4b993b20503ccfd","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @abc.abstractmethod"},{"line_number":225,"context_line":"    def unset_default_project_id(self, project_id):"},{"line_number":226,"context_line":"        \"\"\"Unset a users default project given a specific project ID."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param str project_id: project ID"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_e275d9ca","line":225,"in_reply_to":"1a430d35_be531c16","updated":"2017-02-08 20:11:25.000000000","message":"Going to add next patch set.","commit_id":"fcfba624e1241ef317f0121429d2023a8816fe82"}],"keystone/identity/backends/ldap/core.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b35ca85d63c28053a932a079b044cd9a089fffc9","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        return self.user.get_all_filtered(hints)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def unset_default_project_id(self, project_id):"},{"line_number":91,"context_line":"        # This function is not implemented for the LDAP backend"},{"line_number":92,"context_line":"        # LDAP backend is readonly."},{"line_number":93,"context_line":"        pass"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def get_user_by_name(self, user_name, domain_id):"},{"line_number":96,"context_line":"        # domain_id will already have been handled in the Manager layer,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_1e1bc81c","line":93,"range":{"start_line":91,"start_character":0,"end_line":93,"end_character":12},"updated":"2017-02-10 22:34:31.000000000","message":"this should call \"_disallow_write\", see line 151 and usages at create_user and update_user.","commit_id":"75042657868bec328cffd7d2910d970a99984a6e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"7c983bc48fa0878421881995c3256f24620d8139","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        return self.user.get_all_filtered(hints)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def unset_default_project_id(self, project_id):"},{"line_number":91,"context_line":"        # This function is not implemented for the LDAP backend"},{"line_number":92,"context_line":"        # LDAP backend is readonly."},{"line_number":93,"context_line":"        self._disallow_write()"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa31d9ce_e6badee0","line":91,"updated":"2017-02-11 15:12:17.000000000","message":"nit: missing .","commit_id":"06e69c4c2ede946066c96bca3c860a615997c476"}],"keystone/identity/backends/sql.py":[{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"c52d4aaf4123cefc084e05301cdc005952b6bb03","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            user_refs \u003d sql.filter_limit_query(model.User, query, hints)"},{"line_number":171,"context_line":"            return [base.filter_user(x.to_dict()) for x in user_refs]"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def unset_default_project_id(self, project_id, hints):"},{"line_number":174,"context_line":"        with sql.session_for_read() as session:"},{"line_number":175,"context_line":"            query \u003d session.query(model.User)"},{"line_number":176,"context_line":"            query \u003d query.filter(sqlalchemy.and_("}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_1e2e1943","line":173,"range":{"start_line":173,"start_character":51,"end_line":173,"end_character":56},"updated":"2017-02-07 05:14:17.000000000","message":"Where is this being used?","commit_id":"6b895690c725c3285747365cc3476ec6efcb24ae"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8f1871e2f85f8bab7f5681dad374a8a41f9a03ac","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            return [base.filter_user(x.to_dict()) for x in user_refs]"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def unset_default_project_id(self, project_id):"},{"line_number":174,"context_line":"        with sql.session_for_read() as session:"},{"line_number":175,"context_line":"            query \u003d session.query(model.User)"},{"line_number":176,"context_line":"            query \u003d query.filter(sqlalchemy.and_("},{"line_number":177,"context_line":"                model.User.default_project_id \u003d\u003d project_id)).update("}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_6b4c98c8","line":174,"updated":"2017-02-07 22:09:48.000000000","message":"This will have to be changed to: \n\n  with sql.session_for_write() as session:\n\nin order for us to be able to persist writes.","commit_id":"fcfba624e1241ef317f0121429d2023a8816fe82"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"d8627e490f5617aecb332c63a4b993b20503ccfd","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            return [base.filter_user(x.to_dict()) for x in user_refs]"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def unset_default_project_id(self, project_id):"},{"line_number":174,"context_line":"        with sql.session_for_read() as session:"},{"line_number":175,"context_line":"            query \u003d session.query(model.User)"},{"line_number":176,"context_line":"            query \u003d query.filter(sqlalchemy.and_("},{"line_number":177,"context_line":"                model.User.default_project_id \u003d\u003d project_id)).update("}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_826c1509","line":174,"in_reply_to":"1a430d35_6b4c98c8","updated":"2017-02-08 20:11:25.000000000","message":"Done","commit_id":"fcfba624e1241ef317f0121429d2023a8816fe82"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"149d194dd0f7811e628cc8e1add1aaa7646a0fb8","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    def unset_default_project_id(self, project_id):"},{"line_number":174,"context_line":"        with sql.session_for_write() as session:"},{"line_number":175,"context_line":"            query \u003d session.query(model.User)"},{"line_number":176,"context_line":"            query \u003d query.filter(sqlalchemy.and_("},{"line_number":177,"context_line":"                model.User.default_project_id \u003d\u003d project_id)).update("},{"line_number":178,"context_line":"                {model.User.default_project_id: None})"},{"line_number":179,"context_line":"            session.commit()"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_9db2b4e3","line":176,"updated":"2017-02-08 20:26:43.000000000","message":"What\u0027s the and_ for here?","commit_id":"adf9ab09dcf210e036d9056c5b77444934bfcc92"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"149d194dd0f7811e628cc8e1add1aaa7646a0fb8","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            query \u003d query.filter(sqlalchemy.and_("},{"line_number":177,"context_line":"                model.User.default_project_id \u003d\u003d project_id)).update("},{"line_number":178,"context_line":"                {model.User.default_project_id: None})"},{"line_number":179,"context_line":"            session.commit()"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def _get_user(self, session, user_id):"},{"line_number":182,"context_line":"        user_ref \u003d session.query(model.User).get(user_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_1d716444","line":179,"updated":"2017-02-08 20:26:43.000000000","message":"Why are you committing here?","commit_id":"adf9ab09dcf210e036d9056c5b77444934bfcc92"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c67d0c32343bf6a697e265ef6cdf77d1d5443491","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            query \u003d query.filter(sqlalchemy.and_("},{"line_number":177,"context_line":"                model.User.default_project_id \u003d\u003d project_id)).update("},{"line_number":178,"context_line":"                {model.User.default_project_id: None})"},{"line_number":179,"context_line":"            session.commit()"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def _get_user(self, session, user_id):"},{"line_number":182,"context_line":"        user_ref \u003d session.query(model.User).get(user_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_bac77162","line":179,"in_reply_to":"1a430d35_1d716444","updated":"2017-02-08 22:20:00.000000000","message":"zzzeek had some context around handling this in IRC\n\nhttp://eavesdrop.openstack.org/irclogs/%23openstack-keystone/%23openstack-keystone.2017-02-08.log.html#t2017-02-08T20:19:17","commit_id":"adf9ab09dcf210e036d9056c5b77444934bfcc92"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"51c94f9ced10a6338d752c25126f678811550e18","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    def unset_default_project_id(self, project_id):"},{"line_number":174,"context_line":"        with sql.session_for_write() as session:"},{"line_number":175,"context_line":"            query \u003d session.query(model.User)"},{"line_number":176,"context_line":"            query \u003d query.filter("},{"line_number":177,"context_line":"                model.User.default_project_id \u003d\u003d project_id).update("},{"line_number":178,"context_line":"                {model.User.default_project_id: None})"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa31d9ce_87e4f93b","line":176,"updated":"2017-02-10 02:26:51.000000000","message":"(nit) i wouldn\u0027t do the assignment here since you don\u0027t use the query variable. Also I think update() returns the number of changed rows and not a query object.","commit_id":"312088748ed8a6abb4a372ef90304f294f9e01fc"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"53c9e16f3d321f5d65022e06eb883c541282c408","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    def unset_default_project_id(self, project_id):"},{"line_number":174,"context_line":"        with sql.session_for_write() as session:"},{"line_number":175,"context_line":"            query \u003d session.query(model.User)"},{"line_number":176,"context_line":"            query \u003d query.filter("},{"line_number":177,"context_line":"                model.User.default_project_id \u003d\u003d project_id).update("},{"line_number":178,"context_line":"                {model.User.default_project_id: None})"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa31d9ce_d2c4cd41","line":176,"in_reply_to":"fa31d9ce_87e4f93b","updated":"2017-02-10 17:47:46.000000000","message":"awe, Good catch","commit_id":"312088748ed8a6abb4a372ef90304f294f9e01fc"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f90a0e803cf5cbc867a1133e7192d9e0c1c820bc","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    def unset_default_project_id(self, project_id):"},{"line_number":174,"context_line":"        with sql.session_for_write() as session:"},{"line_number":175,"context_line":"            query \u003d session.query(model.User)"},{"line_number":176,"context_line":"            query \u003d query.filter("},{"line_number":177,"context_line":"                model.User.default_project_id \u003d\u003d project_id).update("},{"line_number":178,"context_line":"                {model.User.default_project_id: None})"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa31d9ce_1ac83b55","line":176,"in_reply_to":"fa31d9ce_d2c4cd41","updated":"2017-02-10 19:13:57.000000000","message":"++","commit_id":"312088748ed8a6abb4a372ef90304f294f9e01fc"}],"keystone/identity/core.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"08536e527416acb5e7b4cd9b1c6d968e6050b6ec","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        self.event_callbacks \u003d {"},{"line_number":491,"context_line":"            notifications.ACTIONS.deleted: {"},{"line_number":492,"context_line":"                \u0027domain\u0027: [self._domain_deleted],"},{"line_number":493,"context_line":"                \u0027project\u0027: [self._set_default_project_to_none],"},{"line_number":494,"context_line":"            },"},{"line_number":495,"context_line":"        }"},{"line_number":496,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_0c8e4a78","line":493,"range":{"start_line":493,"start_character":0,"end_line":493,"end_character":63},"updated":"2017-02-03 21:49:13.000000000","message":"++ for doing it this way, rather than a direct call from the resource methods!","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5194d33cc56431fc79472140286a51e4ae85874e","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":527,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":528,"context_line":"        user_list \u003d ("},{"line_number":529,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":530,"context_line":"        if user_list:"},{"line_number":531,"context_line":"            # set default project to None if project has been removed"},{"line_number":532,"context_line":"            for user_ref in user_list:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_2c05c6c1","line":529,"updated":"2017-02-03 22:02:10.000000000","message":"For the sake of eliminating an extra set of parenthesis - we could do something like this. Which doesn\u0027t change the actual behavior of the code, but it does make it a bit more readable by adjusting indentation.\n\nhttp://cdn.pasteraw.com/fiyv2ja3da0v7qt3t3cgtty1jqn9ka9","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"17f24719b31e002228f64660b015a1e3b5584824","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":527,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":528,"context_line":"        user_list \u003d ("},{"line_number":529,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":530,"context_line":"        if user_list:"},{"line_number":531,"context_line":"            # set default project to None if project has been removed"},{"line_number":532,"context_line":"            for user_ref in user_list:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_3b620cae","line":529,"in_reply_to":"1a430d35_2c05c6c1","updated":"2017-02-07 01:06:38.000000000","message":"Done","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5194d33cc56431fc79472140286a51e4ae85874e","unresolved":false,"context_lines":[{"line_number":527,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":528,"context_line":"        user_list \u003d ("},{"line_number":529,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":530,"context_line":"        if user_list:"},{"line_number":531,"context_line":"            # set default project to None if project has been removed"},{"line_number":532,"context_line":"            for user_ref in user_list:"},{"line_number":533,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_0c748a33","line":530,"updated":"2017-02-03 22:02:10.000000000","message":"This is an extra if statement we could do without. If a list is empty we won\u0027t actually do anything with it anyway, so checking the truthiness of the list only to iterate on it afterwords is redundant.\n \n  \u003e\u003e\u003e empty_list \u003d []\n  \u003e\u003e\u003e for thing in empty_list:\n  ...     print \"This list isn\u0027t empty\"\n  ... \n  \u003e\u003e\u003e\n\nMaybe something like - http://cdn.pasteraw.com/3b3nsoskeysdk4zxvsh8x80zrcocwq7","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"17f24719b31e002228f64660b015a1e3b5584824","unresolved":false,"context_lines":[{"line_number":527,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":528,"context_line":"        user_list \u003d ("},{"line_number":529,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":530,"context_line":"        if user_list:"},{"line_number":531,"context_line":"            # set default project to None if project has been removed"},{"line_number":532,"context_line":"            for user_ref in user_list:"},{"line_number":533,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_5b5998fd","line":530,"in_reply_to":"1a430d35_0c748a33","updated":"2017-02-07 01:06:38.000000000","message":"Done","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5194d33cc56431fc79472140286a51e4ae85874e","unresolved":false,"context_lines":[{"line_number":533,"context_line":"                try:"},{"line_number":534,"context_line":"                    self.update_user(user_ref[\u0027id\u0027],"},{"line_number":535,"context_line":"                                     {\u0027default_project_id\u0027: None})"},{"line_number":536,"context_line":"                except exception.UserNotFound:"},{"line_number":537,"context_line":"                    LOG.debug((\u0027User %(user)s not found when updating \u0027"},{"line_number":538,"context_line":"                               \u0027default_project_id property, continuing with \u0027"},{"line_number":539,"context_line":"                               \u0027cleanup.\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_ecf2de99","line":536,"updated":"2017-02-03 22:02:10.000000000","message":"I would have to imagine this is going to be a highly unlikely case since we *just* got the list of users on line 528. I\u0027d wouldn\u0027t mind doing: \n\nhttp://cdn.pasteraw.com/306jjslhj1uvnbfpf3chkj9rwhzf14\n\nfor the sake of simplicity.","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"17f24719b31e002228f64660b015a1e3b5584824","unresolved":false,"context_lines":[{"line_number":533,"context_line":"                try:"},{"line_number":534,"context_line":"                    self.update_user(user_ref[\u0027id\u0027],"},{"line_number":535,"context_line":"                                     {\u0027default_project_id\u0027: None})"},{"line_number":536,"context_line":"                except exception.UserNotFound:"},{"line_number":537,"context_line":"                    LOG.debug((\u0027User %(user)s not found when updating \u0027"},{"line_number":538,"context_line":"                               \u0027default_project_id property, continuing with \u0027"},{"line_number":539,"context_line":"                               \u0027cleanup.\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_7b5c94ed","line":536,"in_reply_to":"1a430d35_ecf2de99","updated":"2017-02-07 01:06:38.000000000","message":"Done","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"08536e527416acb5e7b4cd9b1c6d968e6050b6ec","unresolved":false,"context_lines":[{"line_number":523,"context_line":""},{"line_number":524,"context_line":"    def _set_default_project_to_none(self, service, resource_type, operation,"},{"line_number":525,"context_line":"                                     payload):"},{"line_number":526,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":527,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":528,"context_line":"        user_list \u003d ("},{"line_number":529,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":530,"context_line":"        if user_list:"},{"line_number":531,"context_line":"            # set default project to None if project has been removed"},{"line_number":532,"context_line":"            for user_ref in user_list:"},{"line_number":533,"context_line":"                try:"},{"line_number":534,"context_line":"                    self.update_user(user_ref[\u0027id\u0027],"},{"line_number":535,"context_line":"                                     {\u0027default_project_id\u0027: None})"},{"line_number":536,"context_line":"                except exception.UserNotFound:"},{"line_number":537,"context_line":"                    LOG.debug((\u0027User %(user)s not found when updating \u0027"},{"line_number":538,"context_line":"                               \u0027default_project_id property, continuing with \u0027"},{"line_number":539,"context_line":"                               \u0027cleanup.\u0027),"},{"line_number":540,"context_line":"                              {\u0027user\u0027: user_ref[\u0027id\u0027], \u0027project\u0027: project_id})"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    # Domain ID normalization methods"},{"line_number":543,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_6c58aefb","line":540,"range":{"start_line":526,"start_character":0,"end_line":540,"end_character":78},"updated":"2017-02-03 21:49:13.000000000","message":"So this would work.  However, I am concerned about performance in the case when the user population is large. Would it not be more efficient to instead of implementing a list_users_with_default_project_id() method in the driver, but instead to implement an unset_default_project_id() method which used a single SQL statement to zero out the project ID?","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5194d33cc56431fc79472140286a51e4ae85874e","unresolved":false,"context_lines":[{"line_number":537,"context_line":"                    LOG.debug((\u0027User %(user)s not found when updating \u0027"},{"line_number":538,"context_line":"                               \u0027default_project_id property, continuing with \u0027"},{"line_number":539,"context_line":"                               \u0027cleanup.\u0027),"},{"line_number":540,"context_line":"                              {\u0027user\u0027: user_ref[\u0027id\u0027], \u0027project\u0027: project_id})"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    # Domain ID normalization methods"},{"line_number":543,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_2cc78613","line":540,"in_reply_to":"1a430d35_6c58aefb","updated":"2017-02-03 22:02:10.000000000","message":"Oh - that\u0027s an interesting case, too. I wouldn\u0027t mind seeing that implementation either!","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"17f24719b31e002228f64660b015a1e3b5584824","unresolved":false,"context_lines":[{"line_number":523,"context_line":""},{"line_number":524,"context_line":"    def _set_default_project_to_none(self, service, resource_type, operation,"},{"line_number":525,"context_line":"                                     payload):"},{"line_number":526,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":527,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":528,"context_line":"        user_list \u003d ("},{"line_number":529,"context_line":"            self.driver.list_users_with_default_project_id(project_id, hints))"},{"line_number":530,"context_line":"        if user_list:"},{"line_number":531,"context_line":"            # set default project to None if project has been removed"},{"line_number":532,"context_line":"            for user_ref in user_list:"},{"line_number":533,"context_line":"                try:"},{"line_number":534,"context_line":"                    self.update_user(user_ref[\u0027id\u0027],"},{"line_number":535,"context_line":"                                     {\u0027default_project_id\u0027: None})"},{"line_number":536,"context_line":"                except exception.UserNotFound:"},{"line_number":537,"context_line":"                    LOG.debug((\u0027User %(user)s not found when updating \u0027"},{"line_number":538,"context_line":"                               \u0027default_project_id property, continuing with \u0027"},{"line_number":539,"context_line":"                               \u0027cleanup.\u0027),"},{"line_number":540,"context_line":"                              {\u0027user\u0027: user_ref[\u0027id\u0027], \u0027project\u0027: project_id})"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    # Domain ID normalization methods"},{"line_number":543,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_fbffa4a7","line":540,"range":{"start_line":526,"start_character":0,"end_line":540,"end_character":78},"in_reply_to":"1a430d35_6c58aefb","updated":"2017-02-07 01:06:38.000000000","message":"Thanks for the feedback henry, I like this approach and I\u0027ve modified it to fit this approach. I marked it as WIP because unit testing are failing -- but the functionality is working and updating the correct columns in the db like it\u0027s suppose to.","commit_id":"3b688b0725d5d35f128f480fb2212d60b6b24174"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"c52d4aaf4123cefc084e05301cdc005952b6bb03","unresolved":false,"context_lines":[{"line_number":524,"context_line":"    def _set_default_project_to_none(self, service, resource_type, operation,"},{"line_number":525,"context_line":"                                     payload):"},{"line_number":526,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":527,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":528,"context_line":"        self.driver.unset_default_project_id(project_id, hints)"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    # Domain ID normalization methods"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_be1fc506","line":527,"range":{"start_line":527,"start_character":8,"end_line":527,"end_character":36},"updated":"2017-02-07 05:14:17.000000000","message":"Why is this being left here? I haven\u0027t seen it used anywhere","commit_id":"6b895690c725c3285747365cc3476ec6efcb24ae"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d93d0f29ef9aeade65d4b8ee1d44d516c70757d3","unresolved":false,"context_lines":[{"line_number":524,"context_line":"    def _set_default_project_to_none(self, service, resource_type, operation,"},{"line_number":525,"context_line":"                                     payload):"},{"line_number":526,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":527,"context_line":"        hints \u003d driver_hints.Hints()"},{"line_number":528,"context_line":"        self.driver.unset_default_project_id(project_id, hints)"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    # Domain ID normalization methods"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_42e19299","line":527,"in_reply_to":"1a430d35_be1fc506","updated":"2017-02-07 15:21:30.000000000","message":"++ yep I don\u0027t think we\u0027ll need this, which will be nice because it will make the method call and method signatures cleaner and simpler.","commit_id":"6b895690c725c3285747365cc3476ec6efcb24ae"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"80561c9171ee5625b17f3e5e5b3e0e75f667d91a","unresolved":false,"context_lines":[{"line_number":522,"context_line":"                          {\u0027userid\u0027: user[\u0027id\u0027], \u0027domainid\u0027: domain_id})"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"    def _set_default_project_to_none(self, service, resource_type, operation,"},{"line_number":525,"context_line":"                                     payload):"},{"line_number":526,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":527,"context_line":"        self.driver.unset_default_project_id(project_id)"},{"line_number":528,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_ab19208a","line":525,"updated":"2017-02-07 22:14:55.000000000","message":"We could add a comment here that explains the rational for using notification instead of FK constraints.","commit_id":"fcfba624e1241ef317f0121429d2023a8816fe82"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"d8627e490f5617aecb332c63a4b993b20503ccfd","unresolved":false,"context_lines":[{"line_number":522,"context_line":"                          {\u0027userid\u0027: user[\u0027id\u0027], \u0027domainid\u0027: domain_id})"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"    def _set_default_project_to_none(self, service, resource_type, operation,"},{"line_number":525,"context_line":"                                     payload):"},{"line_number":526,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":527,"context_line":"        self.driver.unset_default_project_id(project_id)"},{"line_number":528,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_227c41b4","line":525,"in_reply_to":"1a430d35_ab19208a","updated":"2017-02-08 20:11:25.000000000","message":"Done","commit_id":"fcfba624e1241ef317f0121429d2023a8816fe82"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c67d0c32343bf6a697e265ef6cdf77d1d5443491","unresolved":false,"context_lines":[{"line_number":523,"context_line":""},{"line_number":524,"context_line":"    def _set_default_project_to_none(self, service, resource_type, operation,"},{"line_number":525,"context_line":"                                     payload):"},{"line_number":526,"context_line":"        \"\"\"Notification approach used."},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        Notification approach was used instead of using a FK constraint."},{"line_number":529,"context_line":"        Reason being, operators are allowed to have their own project backend."}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_da70bd42","line":526,"updated":"2017-02-08 22:20:00.000000000","message":"We could be more explicit in the description here:\n\n  \"\"\"Callback method used to sanitize default_project_id user attributes after a project has been deleted.\"\"\"\n\n\nOr something along those lines.","commit_id":"adf9ab09dcf210e036d9056c5b77444934bfcc92"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c67d0c32343bf6a697e265ef6cdf77d1d5443491","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        \"\"\"Notification approach used."},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        Notification approach was used instead of using a FK constraint."},{"line_number":529,"context_line":"        Reason being, operators are allowed to have their own project backend."},{"line_number":530,"context_line":"        FK constraint would require the default_project_id to map to a project"},{"line_number":531,"context_line":"        in the project table which will not always be true."},{"line_number":532,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_3aaf017e","line":529,"updated":"2017-02-08 22:20:00.000000000","message":"nit: operators are allowed to have separate backends for various keystone subsystems. This doesn\u0027t guarantee that a projects and users will be stored in the same backend, meaning we can\u0027t rely on FK constraints to do this work for us.","commit_id":"adf9ab09dcf210e036d9056c5b77444934bfcc92"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f90a0e803cf5cbc867a1133e7192d9e0c1c820bc","unresolved":false,"context_lines":[{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        Notification approach was used instead of using a FK constraint."},{"line_number":529,"context_line":"        Reason being, operators are allowed to have separate backends for"},{"line_number":530,"context_line":"        various keystone subsystems. This doesn\u0027t guarantee that a projects and"},{"line_number":531,"context_line":"        users will be stored in the same backend, meaning we can\u0027t rely on FK"},{"line_number":532,"context_line":"        constraints to do this work for us."},{"line_number":533,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa31d9ce_bafe4f69","line":530,"updated":"2017-02-10 19:13:57.000000000","message":"nit: s/a//","commit_id":"312088748ed8a6abb4a372ef90304f294f9e01fc"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f90a0e803cf5cbc867a1133e7192d9e0c1c820bc","unresolved":false,"context_lines":[{"line_number":529,"context_line":"        Reason being, operators are allowed to have separate backends for"},{"line_number":530,"context_line":"        various keystone subsystems. This doesn\u0027t guarantee that a projects and"},{"line_number":531,"context_line":"        users will be stored in the same backend, meaning we can\u0027t rely on FK"},{"line_number":532,"context_line":"        constraints to do this work for us."},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"        \"\"\""},{"line_number":535,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa31d9ce_da030372","line":532,"updated":"2017-02-10 19:13:57.000000000","message":"Awesome description!","commit_id":"312088748ed8a6abb4a372ef90304f294f9e01fc"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"4e206e2380db78b918134efbd0e3be2f3f880669","unresolved":false,"context_lines":[{"line_number":533,"context_line":""},{"line_number":534,"context_line":"        \"\"\""},{"line_number":535,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":536,"context_line":"        self.driver.unset_default_project_id(project_id)"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"    # Domain ID normalization methods"},{"line_number":539,"context_line":"    def _set_domain_id_and_mapping(self, ref, domain_id, driver,"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa31d9ce_482d89a6","line":536,"updated":"2017-02-10 20:19:18.000000000","message":"I have no idea if this would be the right solution, but one way we could invalidate users is to make the backend return a list of users that it did modify. The from there we could invalidate them directly at the manager level.\n\n  affected_users \u003d self.driver.unset_default_project_id(project_id)\n  for user in affected_users:\n       self.get_user.invalidate(self, user[\u0027id\u0027])","commit_id":"312088748ed8a6abb4a372ef90304f294f9e01fc"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"a3ff32bb8098fa7a37c7692ec141a509743ed756","unresolved":false,"context_lines":[{"line_number":533,"context_line":""},{"line_number":534,"context_line":"        \"\"\""},{"line_number":535,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":536,"context_line":"        self.driver.unset_default_project_id(project_id)"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":"    # Domain ID normalization methods"},{"line_number":539,"context_line":"    def _set_domain_id_and_mapping(self, ref, domain_id, driver,"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa31d9ce_ae6e0dc7","line":536,"in_reply_to":"fa31d9ce_482d89a6","updated":"2017-02-10 20:47:35.000000000","message":"Yeah, as we discussed in IRC, since there is minimal risk in having stale data, we don\u0027t need to invalidate the cache. We can also do this in a subsequent patch if needed.","commit_id":"312088748ed8a6abb4a372ef90304f294f9e01fc"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b35ca85d63c28053a932a079b044cd9a089fffc9","unresolved":false,"context_lines":[{"line_number":525,"context_line":"                                     payload):"},{"line_number":526,"context_line":"        \"\"\"Callback, clears user default_project_id after project deletion."},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"        Notification approach was used instead of using a FK constraint."},{"line_number":529,"context_line":"        Reason being, operators are allowed to have separate backends for"},{"line_number":530,"context_line":"        various keystone subsystems. This doesn\u0027t guarantee that projects and"},{"line_number":531,"context_line":"        users will be stored in the same backend, meaning we can\u0027t rely on FK"},{"line_number":532,"context_line":"        constraints to do this work for us."},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"        \"\"\""},{"line_number":535,"context_line":"        project_id \u003d payload[\u0027resource_info\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_9eddf844","line":532,"range":{"start_line":528,"start_character":0,"end_line":532,"end_character":43},"updated":"2017-02-10 22:34:31.000000000","message":"great doc!","commit_id":"75042657868bec328cffd7d2910d970a99984a6e"}],"keystone/releasenotes/notes/unset-user-default_project_id-when-project-is-deleted-4d42c841b6e7e54e.yaml":[{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"a7c848ccef7cf27569edd0f830d096cc2b8fa8ed","unresolved":false,"context_lines":[{"line_number":1,"context_line":"fixes:"},{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    [`bug 1523369 \u003chttps://bugs.launchpad.net/keystone/+bug/1523369\u003e`_]"},{"line_number":4,"context_line":"    Currently when a project is deleted, the project ID details still exist"},{"line_number":5,"context_line":"    for users who default_project_id maps to project ID deleted. User data is"},{"line_number":6,"context_line":"    update in the backend, however changes my not be visible until memcache"},{"line_number":7,"context_line":"    end of life."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"fa31d9ce_5b5e32ea","line":5,"range":{"start_line":4,"start_character":4,"end_line":5,"end_character":63},"updated":"2017-02-10 21:59:53.000000000","message":"nit: this sentence is confusing to me. How about: \"Currently, if a project is deleted, it is not removed as a user\u0027s default project ID.\"","commit_id":"75042657868bec328cffd7d2910d970a99984a6e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b35ca85d63c28053a932a079b044cd9a089fffc9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"fixes:"},{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    [`bug 1523369 \u003chttps://bugs.launchpad.net/keystone/+bug/1523369\u003e`_]"},{"line_number":4,"context_line":"    Currently when a project is deleted, the project ID details still exist"},{"line_number":5,"context_line":"    for users who default_project_id maps to project ID deleted. User data is"},{"line_number":6,"context_line":"    update in the backend, however changes my not be visible until memcache"},{"line_number":7,"context_line":"    end of life."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"fa31d9ce_fee4340e","line":5,"range":{"start_line":4,"start_character":4,"end_line":5,"end_character":63},"in_reply_to":"fa31d9ce_5b5e32ea","updated":"2017-02-10 22:34:31.000000000","message":"+1","commit_id":"75042657868bec328cffd7d2910d970a99984a6e"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"a7c848ccef7cf27569edd0f830d096cc2b8fa8ed","unresolved":false,"context_lines":[{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    [`bug 1523369 \u003chttps://bugs.launchpad.net/keystone/+bug/1523369\u003e`_]"},{"line_number":4,"context_line":"    Currently when a project is deleted, the project ID details still exist"},{"line_number":5,"context_line":"    for users who default_project_id maps to project ID deleted. User data is"},{"line_number":6,"context_line":"    update in the backend, however changes my not be visible until memcache"},{"line_number":7,"context_line":"    end of life."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"fa31d9ce_fbf606d6","line":6,"range":{"start_line":5,"start_character":65,"end_line":6,"end_character":25},"updated":"2017-02-10 21:59:53.000000000","message":"Now the default project ID is set to None, however...","commit_id":"75042657868bec328cffd7d2910d970a99984a6e"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b35ca85d63c28053a932a079b044cd9a089fffc9","unresolved":false,"context_lines":[{"line_number":2,"context_line":"  - |"},{"line_number":3,"context_line":"    [`bug 1523369 \u003chttps://bugs.launchpad.net/keystone/+bug/1523369\u003e`_]"},{"line_number":4,"context_line":"    Currently when a project is deleted, the project ID details still exist"},{"line_number":5,"context_line":"    for users who default_project_id maps to project ID deleted. User data is"},{"line_number":6,"context_line":"    update in the backend, however changes my not be visible until memcache"},{"line_number":7,"context_line":"    end of life."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"fa31d9ce_1ef2e8d2","line":6,"range":{"start_line":5,"start_character":65,"end_line":6,"end_character":25},"in_reply_to":"fa31d9ce_fbf606d6","updated":"2017-02-10 22:34:31.000000000","message":"+1","commit_id":"75042657868bec328cffd7d2910d970a99984a6e"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"d4322d948e390a1a4d28d6482f9c01f11fc611b2","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    project id. Now the default project id is set to none, however changes may"},{"line_number":6,"context_line":"    not be visible until memcache end of life."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"upgrade:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    The identity backend driver interface has changed. We\u0027ve added a new"},{"line_number":11,"context_line":"    ``unset_default_project_id(project_id)`` method to unset a users default"},{"line_number":12,"context_line":"    project id matching the given project id. If you have a custom"},{"line_number":13,"context_line":"    implementation for the identity driver, you will need to implement this"},{"line_number":14,"context_line":"    new method."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"fa31d9ce_fe235403","line":14,"range":{"start_line":8,"start_character":0,"end_line":14,"end_character":15},"updated":"2017-02-10 22:47:43.000000000","message":"++","commit_id":"485f561b737bb8856fda1e7e66fe11f31f435ff1"},{"author":{"_account_id":22219,"name":"Anthony Washington","email":"anthony.washington@intel.com","username":"antwash"},"change_message_id":"fb0dd06749b950b993be2a22e5343eff46932774","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    project id. Now the default project id is set to none, however changes may"},{"line_number":6,"context_line":"    not be visible until memcache end of life."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"upgrade:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    The identity backend driver interface has changed. We\u0027ve added a new"},{"line_number":11,"context_line":"    ``unset_default_project_id(project_id)`` method to unset a users default"},{"line_number":12,"context_line":"    project id matching the given project id. If you have a custom"},{"line_number":13,"context_line":"    implementation for the identity driver, you will need to implement this"},{"line_number":14,"context_line":"    new method."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"fa31d9ce_71795593","line":14,"range":{"start_line":8,"start_character":0,"end_line":14,"end_character":15},"in_reply_to":"fa31d9ce_fe235403","updated":"2017-02-10 23:03:34.000000000","message":"Thanks Ron, first patch for the team was very fun. more to come :)","commit_id":"485f561b737bb8856fda1e7e66fe11f31f435ff1"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d672343a65869ea3c7eb2869c041db9521edc4f6","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    [`bug 1523369 \u003chttps://bugs.launchpad.net/keystone/+bug/1523369\u003e`_]"},{"line_number":4,"context_line":"    Currently, if a project is deleted, it is not removed as a user\u0027s default"},{"line_number":5,"context_line":"    project id. Now the default project id is set to none, however changes may"},{"line_number":6,"context_line":"    not be visible until memcache end of life."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"upgrade:"},{"line_number":9,"context_line":"  - |"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"fa31d9ce_36c68c9a","line":6,"updated":"2017-02-14 12:32:56.000000000","message":"Is memcache going to die :-P  I\u0027ll propose different language in another patch so we can get this through.","commit_id":"06e69c4c2ede946066c96bca3c860a615997c476"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d672343a65869ea3c7eb2869c041db9521edc4f6","unresolved":false,"context_lines":[{"line_number":8,"context_line":"upgrade:"},{"line_number":9,"context_line":"  - |"},{"line_number":10,"context_line":"    The identity backend driver interface has changed. We\u0027ve added a new"},{"line_number":11,"context_line":"    ``unset_default_project_id(project_id)`` method to unset a users default"},{"line_number":12,"context_line":"    project id matching the given project id. If you have a custom"},{"line_number":13,"context_line":"    implementation for the identity driver, you will need to implement this"},{"line_number":14,"context_line":"    new method."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"fa31d9ce_364dac3e","line":11,"updated":"2017-02-14 12:32:56.000000000","message":"(nit) user\u0027s","commit_id":"06e69c4c2ede946066c96bca3c860a615997c476"}],"keystone/tests/unit/resource/test_backends.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5194d33cc56431fc79472140286a51e4ae85874e","unresolved":false,"context_lines":[{"line_number":1505,"context_line":"        project_ref \u003d self.resource_api.get_project(project[\u0027id\u0027])"},{"line_number":1506,"context_line":"        self.assertDictEqual(updated_project_ref, project_ref)"},{"line_number":1507,"context_line":""},{"line_number":1508,"context_line":"    @test_utils.wip(\u0027waiting for fix to bug #1523369\u0027)"},{"line_number":1509,"context_line":"    def test_delete_project_clears_default_project_id(self):"},{"line_number":1510,"context_line":"        project \u003d unit.new_project_ref("},{"line_number":1511,"context_line":"            domain_id\u003dCONF.identity.default_domain_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a430d35_4c7e92e5","side":"PARENT","line":1508,"updated":"2017-02-03 22:02:10.000000000","message":"\\o/ I love seeing patches that remove these","commit_id":"9bb57c1eb7f295d1c7d37f880f5ed99bbee766a4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"44c4cf0a892195f76733e232d08c85f5d46506e2","unresolved":false,"context_lines":[{"line_number":1514,"context_line":"        self.resource_api.create_project(project[\u0027id\u0027], project)"},{"line_number":1515,"context_line":"        user \u003d self.identity_api.create_user(user)"},{"line_number":1516,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":1517,"context_line":"        self.assertIsNotNone(user[\u0027default_project_id\u0027])"},{"line_number":1518,"context_line":""},{"line_number":1519,"context_line":"        self.resource_api.delete_project(project[\u0027id\u0027])"},{"line_number":1520,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a430d35_16ea6bdb","side":"PARENT","line":1517,"updated":"2017-02-07 15:26:57.000000000","message":"According to the most recent failures [0], this seems to be failing on the same key error as before. We should inspect the user reference here to and make sure we are actually populating the `default_project_id` attribute. If we aren\u0027t then we could very well be doing something wrong in our tests.\n\n[0] http://logs.openstack.org/47/429047/4/check/gate-keystone-python27-ubuntu-xenial/1cdb30f/testr_results.html.gz","commit_id":"9bb57c1eb7f295d1c7d37f880f5ed99bbee766a4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"aa58713ccfae2c58672846534c3b2f09c5d616cc","unresolved":false,"context_lines":[{"line_number":1514,"context_line":"        self.resource_api.create_project(project[\u0027id\u0027], project)"},{"line_number":1515,"context_line":"        user \u003d self.identity_api.create_user(user)"},{"line_number":1516,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":1517,"context_line":"        self.assertIsNotNone(user[\u0027default_project_id\u0027])"},{"line_number":1518,"context_line":""},{"line_number":1519,"context_line":"        self.resource_api.delete_project(project[\u0027id\u0027])"},{"line_number":1520,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a430d35_de06281b","side":"PARENT","line":1517,"updated":"2017-02-07 22:16:37.000000000","message":"We could make this a stronger assertion by using: \n\n  self.assertEqual(user[\u0027default_project_id\u0027], project[\u0027id\u0027])","commit_id":"9bb57c1eb7f295d1c7d37f880f5ed99bbee766a4"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"149d194dd0f7811e628cc8e1add1aaa7646a0fb8","unresolved":false,"context_lines":[{"line_number":1513,"context_line":"        self.resource_api.create_project(project[\u0027id\u0027], project)"},{"line_number":1514,"context_line":"        user \u003d self.identity_api.create_user(user)"},{"line_number":1515,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":1516,"context_line":"        self.assertEqual(user[\u0027default_project_id\u0027], project[\u0027id\u0027])"},{"line_number":1517,"context_line":"        self.resource_api.delete_project(project[\u0027id\u0027])"},{"line_number":1518,"context_line":""},{"line_number":1519,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a430d35_5d312c59","line":1516,"updated":"2017-02-08 20:26:43.000000000","message":"This seems to always fail for me. Users are not guaranteed to have the default_project_id set. In this case you expect it to be set be cause you are comparing it against a project. So I think there is a bug in the code.","commit_id":"adf9ab09dcf210e036d9056c5b77444934bfcc92"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f90a0e803cf5cbc867a1133e7192d9e0c1c820bc","unresolved":false,"context_lines":[{"line_number":1506,"context_line":"        self.assertDictEqual(updated_project_ref, project_ref)"},{"line_number":1507,"context_line":""},{"line_number":1508,"context_line":"    def test_delete_project_clears_default_project_id(self):"},{"line_number":1509,"context_line":"        self.config_fixture.config(group\u003d\u0027cache\u0027, enabled\u003dFalse)"},{"line_number":1510,"context_line":"        project \u003d unit.new_project_ref("},{"line_number":1511,"context_line":"            domain_id\u003dCONF.identity.default_domain_id)"},{"line_number":1512,"context_line":"        user \u003d unit.new_user_ref(domain_id\u003dCONF.identity.default_domain_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa31d9ce_1a6bdb1f","line":1509,"updated":"2017-02-10 19:13:57.000000000","message":"We encourage most deployments to enable cache. This effectively makes the call after the project is deleted return stale information with the user reference (advertise a default project ID that doesn\u0027t exist).\n\nI think instead we should prune that user from the cache so that when a get user call is made after a default project ID cleaned up, we return the most accurate information that we can.","commit_id":"312088748ed8a6abb4a372ef90304f294f9e01fc"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"83e199c3f8b36daae916f3fb667bb1384006928d","unresolved":false,"context_lines":[{"line_number":1515,"context_line":"        user \u003d self.identity_api.create_user(user)"},{"line_number":1516,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":1517,"context_line":""},{"line_number":1518,"context_line":"        # LDAD is read only default_project_id doesn\u0027t exist"},{"line_number":1519,"context_line":"        if \u0027default_project_id\u0027 in user:"},{"line_number":1520,"context_line":"            self.assertIsNotNone(user[\u0027default_project_id\u0027])"},{"line_number":1521,"context_line":"            self.resource_api.delete_project(project[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa31d9ce_a6f55f84","line":1518,"range":{"start_line":1518,"start_character":10,"end_line":1518,"end_character":14},"updated":"2017-02-10 16:25:40.000000000","message":"nit: LDAP","commit_id":"312088748ed8a6abb4a372ef90304f294f9e01fc"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2dc3de18077c22ff64e3fc5e9337c9cccb5e7e51","unresolved":false,"context_lines":[{"line_number":1536,"context_line":"                                         role_id\u003drole[\u0027id\u0027])"},{"line_number":1537,"context_line":"        self.resource_api.delete_project(project[\u0027id\u0027])"},{"line_number":1538,"context_line":"        user \u003d self.identity_api.get_user(user[\u0027id\u0027])"},{"line_number":1539,"context_line":"        self.assertNotIn(\u0027default_project_id\u0027, user)"},{"line_number":1540,"context_line":""},{"line_number":1541,"context_line":""},{"line_number":1542,"context_line":"class ResourceDriverTests(object):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa31d9ce_1ec90879","line":1539,"range":{"start_line":1539,"start_character":8,"end_line":1539,"end_character":52},"updated":"2017-02-10 22:35:28.000000000","message":"maybe add a comment stating that, once the project is removed, the None field is not returned.","commit_id":"75042657868bec328cffd7d2910d970a99984a6e"}]}
