)]}'
{"keystone/resource/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"337785fb5fb000d90506c3c11a9db5b2ced5c7f7","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        # TODO(wxy): Deprecate and remove CONF.max_project_tree_depth, let the"},{"line_number":83,"context_line":"        # depth check only based on the limit enforcement model."},{"line_number":84,"context_line":"        limit_model \u003d PROVIDERS.unified_limit_api.enforcement_model"},{"line_number":85,"context_line":"        if limit_model.MIX_PROJECT_TREE_DEPTH is not None:"},{"line_number":86,"context_line":"            max_depth \u003d min(max_depth, limit_model.MIX_PROJECT_TREE_DEPTH + 1)"},{"line_number":87,"context_line":"        if self._get_hierarchy_depth(parents_list) \u003e max_depth:"},{"line_number":88,"context_line":"            raise exception.ForbiddenNotSecurity("}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_7a7e911b","line":85,"range":{"start_line":85,"start_character":23,"end_line":85,"end_character":45},"updated":"2018-07-09 20:58:18.000000000","message":"Ahhh... I had a comment on this in a previous review if this was ever used anywhere besides the unified_limit_api, looks like it is.","commit_id":"b59ef1edf8229cbeb0b700d12b6ff0a2962a9324"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"cae8a29c1a0943456eda5ab33098f24fcda118d4","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        # TODO(wxy): Deprecate and remove CONF.max_project_tree_depth, let the"},{"line_number":83,"context_line":"        # depth check only based on the limit enforcement model."},{"line_number":84,"context_line":"        limit_model \u003d PROVIDERS.unified_limit_api.enforcement_model"},{"line_number":85,"context_line":"        if limit_model.MIX_PROJECT_TREE_DEPTH is not None:"},{"line_number":86,"context_line":"            max_depth \u003d min(max_depth, limit_model.MIX_PROJECT_TREE_DEPTH + 1)"},{"line_number":87,"context_line":"        if self._get_hierarchy_depth(parents_list) \u003e max_depth:"},{"line_number":88,"context_line":"            raise exception.ForbiddenNotSecurity("}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_f7d3ce00","line":85,"range":{"start_line":85,"start_character":23,"end_line":85,"end_character":45},"updated":"2018-07-05 23:58:19.000000000","message":"MAX_PROJECT_TREE_DEPTH","commit_id":"b59ef1edf8229cbeb0b700d12b6ff0a2962a9324"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"7ce0d9fa2ecf76ea6cc3c15ae988c7d3da2993f5","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        # TODO(wxy): Deprecate and remove CONF.max_project_tree_depth, let the"},{"line_number":83,"context_line":"        # depth check only based on the limit enforcement model."},{"line_number":84,"context_line":"        limit_model \u003d PROVIDERS.unified_limit_api.enforcement_model"},{"line_number":85,"context_line":"        if limit_model.MIX_PROJECT_TREE_DEPTH is not None:"},{"line_number":86,"context_line":"            max_depth \u003d min(max_depth, limit_model.MIX_PROJECT_TREE_DEPTH + 1)"},{"line_number":87,"context_line":"        if self._get_hierarchy_depth(parents_list) \u003e max_depth:"},{"line_number":88,"context_line":"            raise exception.ForbiddenNotSecurity("}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_73e797ac","line":85,"range":{"start_line":85,"start_character":23,"end_line":85,"end_character":45},"in_reply_to":"5f7c97a3_7a7e911b","updated":"2018-07-10 06:22:03.000000000","message":"yes!","commit_id":"b59ef1edf8229cbeb0b700d12b6ff0a2962a9324"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"794d0fca6eac19fb12c170e99834096534b9b4de","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        # depth check only based on the limit enforcement model."},{"line_number":85,"context_line":"        limit_model \u003d PROVIDERS.unified_limit_api.enforcement_model"},{"line_number":86,"context_line":"        if limit_model.MAX_PROJECT_TREE_DEPTH is not None:"},{"line_number":87,"context_line":"            max_depth \u003d min(max_depth, limit_model.MAX_PROJECT_TREE_DEPTH + 1)"},{"line_number":88,"context_line":"        if self._get_hierarchy_depth(parents_list) \u003e max_depth:"},{"line_number":89,"context_line":"            raise exception.ForbiddenNotSecurity("},{"line_number":90,"context_line":"                _(\u0027Max hierarchy depth reached for %s branch.\u0027) % project_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_5b5a7251","line":87,"range":{"start_line":87,"start_character":73,"end_line":87,"end_character":77},"updated":"2018-07-12 10:42:27.000000000","message":"So this is really a three-level hierarchy because of domains?","commit_id":"24e6833b75703947b88a129dc7d39d4519f65179"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"580b24a13c39940d326d1d22b9d9ef2cf8d4e7bc","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        # depth check only based on the limit enforcement model."},{"line_number":85,"context_line":"        limit_model \u003d PROVIDERS.unified_limit_api.enforcement_model"},{"line_number":86,"context_line":"        if limit_model.MAX_PROJECT_TREE_DEPTH is not None:"},{"line_number":87,"context_line":"            max_depth \u003d min(max_depth, limit_model.MAX_PROJECT_TREE_DEPTH + 1)"},{"line_number":88,"context_line":"        if self._get_hierarchy_depth(parents_list) \u003e max_depth:"},{"line_number":89,"context_line":"            raise exception.ForbiddenNotSecurity("},{"line_number":90,"context_line":"                _(\u0027Max hierarchy depth reached for %s branch.\u0027) % project_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_36d54de7","line":87,"range":{"start_line":87,"start_character":73,"end_line":87,"end_character":77},"in_reply_to":"5f7c97a3_5b5a7251","updated":"2018-07-12 11:06:51.000000000","message":"yeah, the same as L78, henry has a detail NOTE.","commit_id":"24e6833b75703947b88a129dc7d39d4519f65179"}],"keystone/tests/unit/test_v3_resource.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"23b206171d529241541d4503506e228a33213fb0","unresolved":false,"context_lines":[{"line_number":1123,"context_line":"            expected_status\u003dhttp_client.CREATED)"},{"line_number":1124,"context_line":"        # \"include_limits\" should work together with \"parents_as_list\" or"},{"line_number":1125,"context_line":"        # \"subtree_as_list\". Only using \"include_limits\" really does nothing."},{"line_number":1126,"context_line":"        r \u003d self.get(\u0027/projects/%(project_id)s?include_limits\u0027 %"},{"line_number":1127,"context_line":"                     {\u0027project_id\u0027: subproject[\u0027project\u0027][\u0027id\u0027]})"},{"line_number":1128,"context_line":""},{"line_number":1129,"context_line":"        self.assertIsNone(r.result[\u0027project\u0027].get(\u0027parents\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_cb77079f","line":1126,"updated":"2018-07-18 15:21:09.000000000","message":"I did notice that this includes a relationship between a child, parent, and grandparent, which is 3 levels... Shouldn\u0027t this have failed somewhere? \n\nI left a similar comment in a previous patch but it might be more appropriate here since introducing the constraint is the goal of this patch.\n\nIn the following example, 51c06ddebd604e29892f0bc883bca64e is the child, 947db79d372744baab91b7bbbe9cf76a is the parent, and df95e43b01d04e4e960f7830d52505a3 is the grandparent.\n\nhttp://paste.openstack.org/raw/726204/","commit_id":"53915d3b0d01502586f4d0a1ee7b7bca72ed80a8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"23b206171d529241541d4503506e228a33213fb0","unresolved":false,"context_lines":[{"line_number":1809,"context_line":"        self.config_fixture.config(group\u003d\u0027unified_limit\u0027,"},{"line_number":1810,"context_line":"                                   enforcement_model\u003d\u0027strict_two_level\u0027)"},{"line_number":1811,"context_line":""},{"line_number":1812,"context_line":"    def _create_projects_hierarchy(self, hierarchy_size\u003d1):"},{"line_number":1813,"context_line":"        if hierarchy_size \u003e 1:"},{"line_number":1814,"context_line":"            self.skip_test_overrides("},{"line_number":1815,"context_line":"                \"Strict two level limit enforcement model doesn\u0027t allow the\""}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_cb3867a0","line":1812,"range":{"start_line":1812,"start_character":8,"end_line":1812,"end_character":34},"updated":"2018-07-18 15:21:09.000000000","message":"Oh! Nevermind... I see how this works now.. However, this does appear to be short-circuiting the only limit tests in the test class we\u0027re subclassing.","commit_id":"53915d3b0d01502586f4d0a1ee7b7bca72ed80a8"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"3e92d1da1eefcbe076a203fcb730e7341a16b869","unresolved":false,"context_lines":[{"line_number":1809,"context_line":"        self.config_fixture.config(group\u003d\u0027unified_limit\u0027,"},{"line_number":1810,"context_line":"                                   enforcement_model\u003d\u0027strict_two_level\u0027)"},{"line_number":1811,"context_line":""},{"line_number":1812,"context_line":"    def _create_projects_hierarchy(self, hierarchy_size\u003d1):"},{"line_number":1813,"context_line":"        if hierarchy_size \u003e 1:"},{"line_number":1814,"context_line":"            self.skip_test_overrides("},{"line_number":1815,"context_line":"                \"Strict two level limit enforcement model doesn\u0027t allow the\""}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_d307b46f","line":1812,"range":{"start_line":1812,"start_character":8,"end_line":1812,"end_character":34},"in_reply_to":"5f7c97a3_2b70fb72","updated":"2018-07-19 03:23:01.000000000","message":"of cause we can, but it\u0027s not a small change since a lot of test will be affected. I\u0027d like to add it to my todo-list and update them next few days.","commit_id":"53915d3b0d01502586f4d0a1ee7b7bca72ed80a8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9af08eee5595a2496acac0f89ddc32840a898de9","unresolved":false,"context_lines":[{"line_number":1809,"context_line":"        self.config_fixture.config(group\u003d\u0027unified_limit\u0027,"},{"line_number":1810,"context_line":"                                   enforcement_model\u003d\u0027strict_two_level\u0027)"},{"line_number":1811,"context_line":""},{"line_number":1812,"context_line":"    def _create_projects_hierarchy(self, hierarchy_size\u003d1):"},{"line_number":1813,"context_line":"        if hierarchy_size \u003e 1:"},{"line_number":1814,"context_line":"            self.skip_test_overrides("},{"line_number":1815,"context_line":"                \"Strict two level limit enforcement model doesn\u0027t allow the\""}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_2b70fb72","line":1812,"range":{"start_line":1812,"start_character":8,"end_line":1812,"end_character":34},"in_reply_to":"5f7c97a3_cb3867a0","updated":"2018-07-18 15:22:53.000000000","message":"I wonder if this wouldn\u0027t be more clear if we explicitly override the test above and re-write it to pass with the 2-level constraint implied here.","commit_id":"53915d3b0d01502586f4d0a1ee7b7bca72ed80a8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"be94a03f761eb89e69846bd108a4b6f8f456d50b","unresolved":false,"context_lines":[{"line_number":1809,"context_line":"        self.config_fixture.config(group\u003d\u0027unified_limit\u0027,"},{"line_number":1810,"context_line":"                                   enforcement_model\u003d\u0027strict_two_level\u0027)"},{"line_number":1811,"context_line":""},{"line_number":1812,"context_line":"    def _create_projects_hierarchy(self, hierarchy_size\u003d1):"},{"line_number":1813,"context_line":"        if hierarchy_size \u003e 1:"},{"line_number":1814,"context_line":"            self.skip_test_overrides("},{"line_number":1815,"context_line":"                \"Strict two level limit enforcement model doesn\u0027t allow the\""}],"source_content_type":"text/x-python","patch_set":10,"id":"5f7c97a3_db8bd91f","line":1812,"range":{"start_line":1812,"start_character":8,"end_line":1812,"end_character":34},"in_reply_to":"5f7c97a3_d307b46f","updated":"2018-07-24 14:21:13.000000000","message":"Yeah - that should be fine. Thanks for confirming!","commit_id":"53915d3b0d01502586f4d0a1ee7b7bca72ed80a8"}],"releasenotes/notes/bp-strict-two-level-model.yaml":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"337785fb5fb000d90506c3c11a9db5b2ced5c7f7","unresolved":false,"context_lines":[{"line_number":13,"context_line":"   Please ensure that the previous limit deployment in your Keystone won\u0027t"},{"line_number":14,"context_line":"   break this model before starting to use it."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"   If a new created project make the project depth greater than 2, a"},{"line_number":17,"context_line":"   `403 Forbidden` error will be raised."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":" - \u003e"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"5f7c97a3_faa621ac","line":16,"range":{"start_line":16,"start_character":8,"end_line":16,"end_character":11},"updated":"2018-07-09 20:58:18.000000000","message":"nit: newly created project results in a project tree depth greater than 2,","commit_id":"b59ef1edf8229cbeb0b700d12b6ff0a2962a9324"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"7ce0d9fa2ecf76ea6cc3c15ae988c7d3da2993f5","unresolved":false,"context_lines":[{"line_number":13,"context_line":"   Please ensure that the previous limit deployment in your Keystone won\u0027t"},{"line_number":14,"context_line":"   break this model before starting to use it."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"   If a new created project make the project depth greater than 2, a"},{"line_number":17,"context_line":"   `403 Forbidden` error will be raised."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":" - \u003e"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"5f7c97a3_73ceb72c","line":16,"range":{"start_line":16,"start_character":8,"end_line":16,"end_character":11},"in_reply_to":"5f7c97a3_faa621ac","updated":"2018-07-10 06:22:03.000000000","message":"Done","commit_id":"b59ef1edf8229cbeb0b700d12b6ff0a2962a9324"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"56a86673f38d455ab5c8c99df9c899b933dd55b6","unresolved":false,"context_lines":[{"line_number":14,"context_line":"   break this model before starting to use it."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"   If a new created project make the project depth greater than 2, a"},{"line_number":17,"context_line":"   `403 Forbidden` error will be raised."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":" - \u003e"},{"line_number":20,"context_line":"   [`blueprint strict-two-level-model \u003chttps://blueprints.launchpad.net/keystone/+spec/strict-two-level-model\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"5f7c97a3_5ac5d53b","line":17,"updated":"2018-07-09 20:58:59.000000000","message":"Had a couple nits here on patch set 2.","commit_id":"f31d9e1cc256ab7eb8ed179775671f4b87e56b42"}]}
