)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch exposed all the unified limit APIs"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Co-Authored-By: Colleen Murphy\u003ccolleen@gazlene.net\u003e"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Iceb85e5c4cb92a4b393b373ccf6b41fc22d1c4c6"},{"line_number":14,"context_line":"bp: unified-limits"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":42,"id":"7f96bb07_77e0ae97","line":11,"updated":"2018-01-21 22:09:38.000000000","message":"This is not necessary","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"32fb6be032cf7a2a2f4a651cd1ba2aa0cecf63de","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch exposed all the unified limit APIs"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Co-Authored-By: Colleen Murphy\u003ccolleen@gazlene.net\u003e"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Iceb85e5c4cb92a4b393b373ccf6b41fc22d1c4c6"},{"line_number":14,"context_line":"bp: unified-limits"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":42,"id":"7f96bb07_695e9246","line":11,"in_reply_to":"7f96bb07_77e0ae97","updated":"2018-01-22 02:08:03.000000000","message":"same with the previous patch","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"267f132963ee78b8ccfc52a0c81a1e05325db74d","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch exposed all the unified limit APIs"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Co-Authored-By: Colleen Murphy\u003ccolleen@gazlene.net\u003e"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Iceb85e5c4cb92a4b393b373ccf6b41fc22d1c4c6"},{"line_number":14,"context_line":"bp: unified-limits"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"7f96bb07_9ab3e94d","line":11,"updated":"2018-01-23 13:42:21.000000000","message":"You can still remove this :)","commit_id":"cab88b132dcc4ceb50138f9fc8a42d0ce7ba0d39"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"d8e2a58df76f125dc2db08f82098a22b374ca912","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch exposed all the unified limit APIs"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Co-Authored-By: Colleen Murphy\u003ccolleen@gazlene.net\u003e"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Iceb85e5c4cb92a4b393b373ccf6b41fc22d1c4c6"},{"line_number":14,"context_line":"bp: unified-limits"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":46,"id":"7f96bb07_0fe0e0cb","line":11,"in_reply_to":"7f96bb07_9ab3e94d","updated":"2018-01-24 03:43:09.000000000","message":"Done","commit_id":"cab88b132dcc4ceb50138f9fc8a42d0ce7ba0d39"}],"keystone/common/policies/limit.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9bdd2782d20a809b73640022e39fbc97b6993c18","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from oslo_policy import policy"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone.common.policies import base"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"limit_policies \u003d ["},{"line_number":18,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":17,"id":"bf8cb3f7_7444fb1b","line":15,"updated":"2017-12-26 22:38:42.000000000","message":"nit: these could probably be pulled out into their own patch prior to the patch that exposes this API.","commit_id":"7b792c25c7e4f45080d0f23bfeaba30cb7d155c8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9bdd2782d20a809b73640022e39fbc97b6993c18","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystone.common.policies import base"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"limit_policies \u003d ["},{"line_number":18,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":19,"context_line":"        name\u003dbase.IDENTITY % \u0027get_limit\u0027,"},{"line_number":20,"context_line":"        check_str\u003d\u0027\u0027,"},{"line_number":21,"context_line":"        description\u003d\u0027Show limit details.\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"bf8cb3f7_f44fab31","line":18,"updated":"2017-12-26 22:38:42.000000000","message":"We should add scope_types to these operations:\n\n  scope_types\u003d[\u0027system\u0027]\n\nDo we expect to open this functionality up to administrators of their own projects? I\u0027d think that this type of functionality, even though it is specific to a project, would be something that only system administrators should be able to do.","commit_id":"7b792c25c7e4f45080d0f23bfeaba30cb7d155c8"}],"keystone/common/policies/registered_limit.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9bdd2782d20a809b73640022e39fbc97b6993c18","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from oslo_policy import policy"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystone.common.policies import base"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"registered_limit_policies \u003d ["},{"line_number":18,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":17,"id":"bf8cb3f7_b46363b1","line":15,"updated":"2017-12-26 22:38:42.000000000","message":"Same comment here as in the previous module. We can pull this out into it\u0027s own change prior to the change that exposes the limits API. That should make this patch a bit smaller and easier to review.\n\nSame comment here as in the previous module. We should add scope types to these definitions:\n\n  scope_types\u003d[\u0027system\u0027]\n\nfor all of these except get_registered_limit and list_registered_limit, which should be:\n\n  scope_types\u003d[\u0027project\u0027, \u0027system\u0027]\n\nsince they are only protected by valid tokens and scope shouldn\u0027t matter.","commit_id":"7b792c25c7e4f45080d0f23bfeaba30cb7d155c8"}],"keystone/limit/controllers.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ad2fefabf4a0b0d05fab7878e308fc9e85c29f4","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def __init__(self):"},{"line_number":28,"context_line":"        super(RegisteredLimitV3, self).__init__()"},{"line_number":29,"context_line":"        self.get_member_from_driver \u003d \\"},{"line_number":30,"context_line":"            self.unified_limit_api.get_registered_limit"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_ac905dee","line":29,"range":{"start_line":29,"start_character":38,"end_line":29,"end_character":39},"updated":"2018-01-18 22:41:37.000000000","message":"We typically use () in favor of \\, might be able to do something like:\n\n  self.get_member_from_driver \u003d (\n      self.unified_limits_api.get_registered_limit\n  )","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"405cd8cb8ed78c07301db8ab2dd3a6284e57ea9b","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def __init__(self):"},{"line_number":28,"context_line":"        super(RegisteredLimitV3, self).__init__()"},{"line_number":29,"context_line":"        self.get_member_from_driver \u003d \\"},{"line_number":30,"context_line":"            self.unified_limit_api.get_registered_limit"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_f55ce54b","line":29,"range":{"start_line":29,"start_character":38,"end_line":29,"end_character":39},"in_reply_to":"7f96bb07_ac905dee","updated":"2018-01-19 03:30:51.000000000","message":"Done","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ad2fefabf4a0b0d05fab7878e308fc9e85c29f4","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        validation.lazy_validate(schema.registered_limit_create,"},{"line_number":35,"context_line":"                                 registered_limits)"},{"line_number":36,"context_line":"        refs \u003d self.unified_limit_api.create_registered_limits("},{"line_number":37,"context_line":"            [self._assign_unique_id(self._normalize_dict(registered_limit))"},{"line_number":38,"context_line":"             for registered_limit in registered_limits])"},{"line_number":39,"context_line":"        refs \u003d RegisteredLimitV3.wrap_collection(request.context_dict, refs)"},{"line_number":40,"context_line":"        refs.pop(\"links\")"},{"line_number":41,"context_line":"        return refs"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_aca93d24","line":38,"range":{"start_line":37,"start_character":12,"end_line":38,"end_character":56},"updated":"2018-01-18 22:41:37.000000000","message":"This could be broken up a bit for readability","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"405cd8cb8ed78c07301db8ab2dd3a6284e57ea9b","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        validation.lazy_validate(schema.registered_limit_create,"},{"line_number":35,"context_line":"                                 registered_limits)"},{"line_number":36,"context_line":"        refs \u003d self.unified_limit_api.create_registered_limits("},{"line_number":37,"context_line":"            [self._assign_unique_id(self._normalize_dict(registered_limit))"},{"line_number":38,"context_line":"             for registered_limit in registered_limits])"},{"line_number":39,"context_line":"        refs \u003d RegisteredLimitV3.wrap_collection(request.context_dict, refs)"},{"line_number":40,"context_line":"        refs.pop(\"links\")"},{"line_number":41,"context_line":"        return refs"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_b84174a8","line":38,"range":{"start_line":37,"start_character":12,"end_line":38,"end_character":56},"in_reply_to":"7f96bb07_aca93d24","updated":"2018-01-19 03:30:51.000000000","message":"Done","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ad2fefabf4a0b0d05fab7878e308fc9e85c29f4","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            [self._assign_unique_id(self._normalize_dict(registered_limit))"},{"line_number":38,"context_line":"             for registered_limit in registered_limits])"},{"line_number":39,"context_line":"        refs \u003d RegisteredLimitV3.wrap_collection(request.context_dict, refs)"},{"line_number":40,"context_line":"        refs.pop(\"links\")"},{"line_number":41,"context_line":"        return refs"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_4c6e7900","line":40,"range":{"start_line":40,"start_character":18,"end_line":40,"end_character":23},"updated":"2018-01-18 22:41:37.000000000","message":"We include these for the rest of the resources in keystone. Any reason to not include them for registered limits?","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"405cd8cb8ed78c07301db8ab2dd3a6284e57ea9b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"            [self._assign_unique_id(self._normalize_dict(registered_limit))"},{"line_number":38,"context_line":"             for registered_limit in registered_limits])"},{"line_number":39,"context_line":"        refs \u003d RegisteredLimitV3.wrap_collection(request.context_dict, refs)"},{"line_number":40,"context_line":"        refs.pop(\"links\")"},{"line_number":41,"context_line":"        return refs"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_d899e0c3","line":40,"range":{"start_line":40,"start_character":18,"end_line":40,"end_character":23},"in_reply_to":"7f96bb07_4c6e7900","updated":"2018-01-19 03:30:51.000000000","message":"I\u0027m not sure if we should contain links here.\n\nMy reason is that it\u0027s a API for creating resources, so to keep the same with others, we should remove the link.","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ad2fefabf4a0b0d05fab7878e308fc9e85c29f4","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    @controller.protected()"},{"line_number":82,"context_line":"    def create_limits(self, request, limits):"},{"line_number":83,"context_line":"        validation.lazy_validate(schema.limit_create, limits)"},{"line_number":84,"context_line":"        refs \u003d self.unified_limit_api.create_limits("},{"line_number":85,"context_line":"            [self._assign_unique_id(self._normalize_dict(limit))"},{"line_number":86,"context_line":"             for limit in limits])"},{"line_number":87,"context_line":"        refs \u003d LimitV3.wrap_collection(request.context_dict, refs)"},{"line_number":88,"context_line":"        refs.pop(\"links\")"},{"line_number":89,"context_line":"        return refs"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_ac57fd25","line":86,"range":{"start_line":84,"start_character":0,"end_line":86,"end_character":34},"updated":"2018-01-18 22:41:37.000000000","message":"Same comment here.","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"405cd8cb8ed78c07301db8ab2dd3a6284e57ea9b","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    @controller.protected()"},{"line_number":82,"context_line":"    def create_limits(self, request, limits):"},{"line_number":83,"context_line":"        validation.lazy_validate(schema.limit_create, limits)"},{"line_number":84,"context_line":"        refs \u003d self.unified_limit_api.create_limits("},{"line_number":85,"context_line":"            [self._assign_unique_id(self._normalize_dict(limit))"},{"line_number":86,"context_line":"             for limit in limits])"},{"line_number":87,"context_line":"        refs \u003d LimitV3.wrap_collection(request.context_dict, refs)"},{"line_number":88,"context_line":"        refs.pop(\"links\")"},{"line_number":89,"context_line":"        return refs"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_581630aa","line":86,"range":{"start_line":84,"start_character":0,"end_line":86,"end_character":34},"in_reply_to":"7f96bb07_ac57fd25","updated":"2018-01-19 03:30:51.000000000","message":"Done","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ad2fefabf4a0b0d05fab7878e308fc9e85c29f4","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            [self._assign_unique_id(self._normalize_dict(limit))"},{"line_number":86,"context_line":"             for limit in limits])"},{"line_number":87,"context_line":"        refs \u003d LimitV3.wrap_collection(request.context_dict, refs)"},{"line_number":88,"context_line":"        refs.pop(\"links\")"},{"line_number":89,"context_line":"        return refs"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_4c475978","line":88,"range":{"start_line":88,"start_character":18,"end_line":88,"end_character":23},"updated":"2018-01-18 22:41:37.000000000","message":"Same comment here.","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ad2fefabf4a0b0d05fab7878e308fc9e85c29f4","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        # Todo(wxy): Add project/system scoped check. project_id should be"},{"line_number":104,"context_line":"        # added to hints only when the request is project scoped."},{"line_number":105,"context_line":"        context \u003d request.environ.get(authorization.AUTH_CONTEXT_ENV, {})"},{"line_number":106,"context_line":"        project_id \u003d context.get(\"project_id\")"},{"line_number":107,"context_line":"        hints.add_filter(\u0027project_id\u0027, project_id)"},{"line_number":108,"context_line":"        refs \u003d self.unified_limit_api.list_limits(hints)"},{"line_number":109,"context_line":"        return LimitV3.wrap_collection(request.context_dict, refs, hints\u003dhints)"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_87045a16","line":106,"range":{"start_line":106,"start_character":44,"end_line":106,"end_character":46},"updated":"2018-01-18 22:41:37.000000000","message":"nit: use \u0027 to be consistent with the next line or use \" on the next line so they are consistent.","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"405cd8cb8ed78c07301db8ab2dd3a6284e57ea9b","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        # Todo(wxy): Add project/system scoped check. project_id should be"},{"line_number":104,"context_line":"        # added to hints only when the request is project scoped."},{"line_number":105,"context_line":"        context \u003d request.environ.get(authorization.AUTH_CONTEXT_ENV, {})"},{"line_number":106,"context_line":"        project_id \u003d context.get(\"project_id\")"},{"line_number":107,"context_line":"        hints.add_filter(\u0027project_id\u0027, project_id)"},{"line_number":108,"context_line":"        refs \u003d self.unified_limit_api.list_limits(hints)"},{"line_number":109,"context_line":"        return LimitV3.wrap_collection(request.context_dict, refs, hints\u003dhints)"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_78ee8c22","line":106,"range":{"start_line":106,"start_character":44,"end_line":106,"end_character":46},"in_reply_to":"7f96bb07_87045a16","updated":"2018-01-19 03:30:51.000000000","message":"Done","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 SUSE Linux Gmbh"},{"line_number":2,"context_line":"# Copyright 2017 Huawei"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_17efea87","line":1,"updated":"2018-01-21 22:09:38.000000000","message":"This should be deleted","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 SUSE Linux Gmbh"},{"line_number":2,"context_line":"# Copyright 2017 Huawei"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":5,"context_line":"# a copy of the License at"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_37f4665b","line":2,"range":{"start_line":2,"start_character":12,"end_line":2,"end_character":16},"updated":"2018-01-21 22:09:38.000000000","message":"This should be updated","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        refs \u003d self.unified_limit_api.create_registered_limits("},{"line_number":40,"context_line":"            registered_limits)"},{"line_number":41,"context_line":"        refs \u003d RegisteredLimitV3.wrap_collection(request.context_dict, refs)"},{"line_number":42,"context_line":"        refs.pop(\"links\")"},{"line_number":43,"context_line":"        return refs"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_57fc923d","line":42,"updated":"2018-01-21 22:09:38.000000000","message":"The point of wrap_collection is largely to add links, why remove them here? If they\u0027re not necessary then wrap_collection could either be omitted or overridden","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"fb337755a2561de9e6250a775f9e88ea10a5d90e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        refs \u003d self.unified_limit_api.create_registered_limits("},{"line_number":40,"context_line":"            registered_limits)"},{"line_number":41,"context_line":"        refs \u003d RegisteredLimitV3.wrap_collection(request.context_dict, refs)"},{"line_number":42,"context_line":"        refs.pop(\"links\")"},{"line_number":43,"context_line":"        return refs"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_ba8825c6","line":42,"in_reply_to":"7f96bb07_1f6ce09a","updated":"2018-01-23 13:46:33.000000000","message":"Hmm, this API is different from the others because it is creating limits in batches and therefore the response is a list. The other create APIs don\u0027t have collection links because they\u0027re not collections. They do still have singular links.\n\nI think the collection links should stay, but I might be missing context for what you and Lance talked about.","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"d5c06ac0acb4372d23da9351372c1991be036fc3","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        refs \u003d self.unified_limit_api.create_registered_limits("},{"line_number":40,"context_line":"            registered_limits)"},{"line_number":41,"context_line":"        refs \u003d RegisteredLimitV3.wrap_collection(request.context_dict, refs)"},{"line_number":42,"context_line":"        refs.pop(\"links\")"},{"line_number":43,"context_line":"        return refs"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_1f6ce09a","line":42,"in_reply_to":"7f96bb07_57fc923d","updated":"2018-01-22 03:01:19.000000000","message":"It\u0027s the response to Lance: My reason is that it\u0027s a API for creating resources, so to keep the same with others, we should remove the link.\nSo i think we should not include links. If you agree, I can get rid of using wrap_collection here.","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"30e9facf5e7cdcc890209f2bdd4c1f2c7ba6be7c","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        refs \u003d self.unified_limit_api.create_registered_limits("},{"line_number":40,"context_line":"            registered_limits)"},{"line_number":41,"context_line":"        refs \u003d RegisteredLimitV3.wrap_collection(request.context_dict, refs)"},{"line_number":42,"context_line":"        refs.pop(\"links\")"},{"line_number":43,"context_line":"        return refs"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @controller.protected()"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_4609fb92","line":42,"in_reply_to":"7f96bb07_ba8825c6","updated":"2018-01-23 21:56:43.000000000","message":"I am confused here, if we are removing the links then I don\u0027t see a point in using wrap_collection?\n\nThe other APIs do have a \"links\" section. We ran into a weird issue for project tags and had to override the \"wrap_collection\". Not sure if that could be done here as well since the response is a list?","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"267f132963ee78b8ccfc52a0c81a1e05325db74d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 SUSE Linux Gmbh"},{"line_number":2,"context_line":"# Copyright 2018 Huawei"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":46,"id":"7f96bb07_3ad2d55d","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":32},"updated":"2018-01-23 13:42:21.000000000","message":"You can remove this","commit_id":"cab88b132dcc4ceb50138f9fc8a42d0ce7ba0d39"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"d8e2a58df76f125dc2db08f82098a22b374ca912","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 SUSE Linux Gmbh"},{"line_number":2,"context_line":"# Copyright 2018 Huawei"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":46,"id":"7f96bb07_cfe998b7","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":32},"in_reply_to":"7f96bb07_3ad2d55d","updated":"2018-01-24 03:43:09.000000000","message":"Done","commit_id":"cab88b132dcc4ceb50138f9fc8a42d0ce7ba0d39"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"efea202593b823078272973fd0a8662c36af29c5","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    @controller.filterprotected(\u0027service_id\u0027, \u0027region_id\u0027, \u0027resource_name\u0027)"},{"line_number":103,"context_line":"    def list_limits(self, request, filters):"},{"line_number":104,"context_line":"        hints \u003d LimitV3.build_driver_hints(request, filters)"},{"line_number":105,"context_line":"        context \u003d request.environ.get(authorization.AUTH_CONTEXT_ENV, {})"},{"line_number":106,"context_line":"        project_id \u003d context.get(\u0027project_id\u0027)"},{"line_number":107,"context_line":"        if project_id:"},{"line_number":108,"context_line":"            hints.add_filter(\u0027project_id\u0027, project_id)"},{"line_number":109,"context_line":"        refs \u003d self.unified_limit_api.list_limits(hints)"},{"line_number":110,"context_line":"        return LimitV3.wrap_collection(request.context_dict, refs, hints\u003dhints)"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"7f96bb07_66e437ad","line":108,"range":{"start_line":105,"start_character":8,"end_line":108,"end_character":54},"updated":"2018-01-23 22:00:20.000000000","message":"This is a little weird to me, an admin can (and must) set a project limit but if they query /v3/limits they see an empty list. I think anyone who is able to set the limit should also be able to read it.","commit_id":"cab88b132dcc4ceb50138f9fc8a42d0ce7ba0d39"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"cc1908fc9c7b0bd510864404a1885fd57f4522d3","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    @controller.filterprotected(\u0027service_id\u0027, \u0027region_id\u0027, \u0027resource_name\u0027)"},{"line_number":103,"context_line":"    def list_limits(self, request, filters):"},{"line_number":104,"context_line":"        hints \u003d LimitV3.build_driver_hints(request, filters)"},{"line_number":105,"context_line":"        context \u003d request.environ.get(authorization.AUTH_CONTEXT_ENV, {})"},{"line_number":106,"context_line":"        project_id \u003d context.get(\u0027project_id\u0027)"},{"line_number":107,"context_line":"        if project_id:"},{"line_number":108,"context_line":"            hints.add_filter(\u0027project_id\u0027, project_id)"},{"line_number":109,"context_line":"        refs \u003d self.unified_limit_api.list_limits(hints)"},{"line_number":110,"context_line":"        return LimitV3.wrap_collection(request.context_dict, refs, hints\u003dhints)"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"7f96bb07_6e45ed42","line":108,"range":{"start_line":105,"start_character":8,"end_line":108,"end_character":54},"in_reply_to":"7f96bb07_2bf35775","updated":"2018-01-23 23:38:32.000000000","message":"Yes, I mean system administrator.","commit_id":"cab88b132dcc4ceb50138f9fc8a42d0ce7ba0d39"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6b18f99de64000ed329f4dc3a62cf66b59759a7f","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    @controller.filterprotected(\u0027service_id\u0027, \u0027region_id\u0027, \u0027resource_name\u0027)"},{"line_number":103,"context_line":"    def list_limits(self, request, filters):"},{"line_number":104,"context_line":"        hints \u003d LimitV3.build_driver_hints(request, filters)"},{"line_number":105,"context_line":"        context \u003d request.environ.get(authorization.AUTH_CONTEXT_ENV, {})"},{"line_number":106,"context_line":"        project_id \u003d context.get(\u0027project_id\u0027)"},{"line_number":107,"context_line":"        if project_id:"},{"line_number":108,"context_line":"            hints.add_filter(\u0027project_id\u0027, project_id)"},{"line_number":109,"context_line":"        refs \u003d self.unified_limit_api.list_limits(hints)"},{"line_number":110,"context_line":"        return LimitV3.wrap_collection(request.context_dict, refs, hints\u003dhints)"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"7f96bb07_2bf35775","line":108,"range":{"start_line":105,"start_character":8,"end_line":108,"end_character":54},"in_reply_to":"7f96bb07_66e437ad","updated":"2018-01-23 23:25:35.000000000","message":"By admin do you mean system administrator? If so, I would agree. A system administrator should be able to manage all registered limits and project limits associated to them. Someone with a project scoped token should be able to list limits for projects they are a member of, which is where some of this logic applies.\n\nIt looks like we still need to handle the system case.","commit_id":"cab88b132dcc4ceb50138f9fc8a42d0ce7ba0d39"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"d8e2a58df76f125dc2db08f82098a22b374ca912","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    @controller.filterprotected(\u0027service_id\u0027, \u0027region_id\u0027, \u0027resource_name\u0027)"},{"line_number":103,"context_line":"    def list_limits(self, request, filters):"},{"line_number":104,"context_line":"        hints \u003d LimitV3.build_driver_hints(request, filters)"},{"line_number":105,"context_line":"        context \u003d request.environ.get(authorization.AUTH_CONTEXT_ENV, {})"},{"line_number":106,"context_line":"        project_id \u003d context.get(\u0027project_id\u0027)"},{"line_number":107,"context_line":"        if project_id:"},{"line_number":108,"context_line":"            hints.add_filter(\u0027project_id\u0027, project_id)"},{"line_number":109,"context_line":"        refs \u003d self.unified_limit_api.list_limits(hints)"},{"line_number":110,"context_line":"        return LimitV3.wrap_collection(request.context_dict, refs, hints\u003dhints)"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"7f96bb07_8f22b000","line":108,"range":{"start_line":105,"start_character":8,"end_line":108,"end_character":54},"in_reply_to":"7f96bb07_6e45ed42","updated":"2018-01-24 03:43:09.000000000","message":"Yes, it\u0027s a problem here. I added a TODO here in the previous patch. I\u0027ll take a look at lance\u0027s system scope patch and add that case here.","commit_id":"cab88b132dcc4ceb50138f9fc8a42d0ce7ba0d39"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"6b76b0f385bea2c01670524c7322784c941aefa2","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    @controller.filterprotected(\u0027service_id\u0027, \u0027region_id\u0027, \u0027resource_name\u0027)"},{"line_number":103,"context_line":"    def list_limits(self, request, filters):"},{"line_number":104,"context_line":"        hints \u003d LimitV3.build_driver_hints(request, filters)"},{"line_number":105,"context_line":"        context \u003d request.environ.get(authorization.AUTH_CONTEXT_ENV, {})"},{"line_number":106,"context_line":"        project_id \u003d context.get(\u0027project_id\u0027)"},{"line_number":107,"context_line":"        if project_id:"},{"line_number":108,"context_line":"            hints.add_filter(\u0027project_id\u0027, project_id)"},{"line_number":109,"context_line":"        refs \u003d self.unified_limit_api.list_limits(hints)"},{"line_number":110,"context_line":"        return LimitV3.wrap_collection(request.context_dict, refs, hints\u003dhints)"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"5f93b717_d203f20e","line":108,"range":{"start_line":105,"start_character":8,"end_line":108,"end_character":54},"in_reply_to":"7f96bb07_8f22b000","updated":"2018-01-24 19:47:57.000000000","message":"This has to work independently the system scope feature. When I say \"system administrator\" I also mean the way it is now, where I `source openrc admin admin` on devstack to become superuser.","commit_id":"cab88b132dcc4ceb50138f9fc8a42d0ce7ba0d39"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"62f4a16f85d4b9934effcbbe105d2a555dd2539a","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    def list_limits(self, request, filters):"},{"line_number":103,"context_line":"        hints \u003d LimitV3.build_driver_hints(request, filters)"},{"line_number":104,"context_line":"        context \u003d request.environ.get(authorization.AUTH_CONTEXT_ENV, {})"},{"line_number":105,"context_line":"        project_id \u003d context.get(\u0027project_id\u0027)"},{"line_number":106,"context_line":"        if project_id:"},{"line_number":107,"context_line":"            hints.add_filter(\u0027project_id\u0027, project_id)"},{"line_number":108,"context_line":"        refs \u003d self.unified_limit_api.list_limits(hints)"},{"line_number":109,"context_line":"        return LimitV3.wrap_collection(request.context_dict, refs, hints\u003dhints)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"5f93b717_50cb55a4","line":107,"range":{"start_line":105,"start_character":8,"end_line":107,"end_character":54},"updated":"2018-01-24 23:28:46.000000000","message":"I still would like this to work for the \"admin\" user, for both the \"admin on system scope\" case and \"admin on admin project that\u0027s different than this project\" case.","commit_id":"611d254be3406adc2a87400420eada9d9236243f"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"0eb3e575795185845ccf290188295c467993f779","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    def list_limits(self, request, filters):"},{"line_number":103,"context_line":"        hints \u003d LimitV3.build_driver_hints(request, filters)"},{"line_number":104,"context_line":"        context \u003d request.environ.get(authorization.AUTH_CONTEXT_ENV, {})"},{"line_number":105,"context_line":"        project_id \u003d context.get(\u0027project_id\u0027)"},{"line_number":106,"context_line":"        if project_id:"},{"line_number":107,"context_line":"            hints.add_filter(\u0027project_id\u0027, project_id)"},{"line_number":108,"context_line":"        refs \u003d self.unified_limit_api.list_limits(hints)"},{"line_number":109,"context_line":"        return LimitV3.wrap_collection(request.context_dict, refs, hints\u003dhints)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":50,"id":"5f93b717_11e14e9b","line":107,"range":{"start_line":105,"start_character":8,"end_line":107,"end_character":54},"in_reply_to":"5f93b717_50cb55a4","updated":"2018-01-25 03:24:24.000000000","message":"Done","commit_id":"611d254be3406adc2a87400420eada9d9236243f"}],"keystone/limit/routers.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 SUSE Linux Gmbh"},{"line_number":2,"context_line":"# Copyright 2017 Huawei"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_1794cae7","line":1,"updated":"2018-01-21 22:09:38.000000000","message":"Delete this","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 SUSE Linux Gmbh"},{"line_number":2,"context_line":"# Copyright 2017 Huawei"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_3799c61e","line":2,"range":{"start_line":2,"start_character":12,"end_line":2,"end_character":16},"updated":"2018-01-21 22:09:38.000000000","message":"Update this","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"267f132963ee78b8ccfc52a0c81a1e05325db74d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 SUSE Linux Gmbh"},{"line_number":2,"context_line":"# Copyright 2018 Huawei"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":46,"id":"7f96bb07_bac58590","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":32},"updated":"2018-01-23 13:42:21.000000000","message":"You can remove this","commit_id":"cab88b132dcc4ceb50138f9fc8a42d0ce7ba0d39"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"d8e2a58df76f125dc2db08f82098a22b374ca912","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 SUSE Linux Gmbh"},{"line_number":2,"context_line":"# Copyright 2018 Huawei"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":46,"id":"7f96bb07_6fd084f8","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":32},"in_reply_to":"7f96bb07_bac58590","updated":"2018-01-24 03:43:09.000000000","message":"Done","commit_id":"cab88b132dcc4ceb50138f9fc8a42d0ce7ba0d39"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e3124fe04351834e80d4f7210d7be0ee3de85ddd","unresolved":false,"context_lines":[{"line_number":28,"context_line":"            put_action\u003d\u0027update_registered_limits\u0027,"},{"line_number":29,"context_line":"            get_head_action\u003d\u0027list_registered_limits\u0027,"},{"line_number":30,"context_line":"            rel\u003djson_home.build_v3_resource_relation(\u0027registered_limits\u0027)"},{"line_number":31,"context_line":"        )"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        self._add_resource("},{"line_number":34,"context_line":"            mapper, controllers.RegisteredLimitV3(),"}],"source_content_type":"text/x-python","patch_set":50,"id":"5f93b717_f05f010c","line":31,"updated":"2018-01-24 23:23:58.000000000","message":"We can mark these as being EXPERIMENTAL for now:\n\nhttp://eavesdrop.openstack.org/irclogs/%23openstack-keystone/%23openstack-keystone.2018-01-24.log.html#t2018-01-24T20:29:27\n\nI think it will give us the ability to really play with the APIs will actually merging something for Queens. We take a similar approach with other APIs: \n\nhttps://github.com/openstack/keystone/blob/master/keystone/assignment/routers.py#L65","commit_id":"611d254be3406adc2a87400420eada9d9236243f"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"0eb3e575795185845ccf290188295c467993f779","unresolved":false,"context_lines":[{"line_number":28,"context_line":"            put_action\u003d\u0027update_registered_limits\u0027,"},{"line_number":29,"context_line":"            get_head_action\u003d\u0027list_registered_limits\u0027,"},{"line_number":30,"context_line":"            rel\u003djson_home.build_v3_resource_relation(\u0027registered_limits\u0027)"},{"line_number":31,"context_line":"        )"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        self._add_resource("},{"line_number":34,"context_line":"            mapper, controllers.RegisteredLimitV3(),"}],"source_content_type":"text/x-python","patch_set":50,"id":"5f93b717_11d70ef0","line":31,"in_reply_to":"5f93b717_f05f010c","updated":"2018-01-25 03:24:24.000000000","message":"Done","commit_id":"611d254be3406adc2a87400420eada9d9236243f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8802bbc08d9c677d56ffab59628310d79bfcf512","unresolved":false,"context_lines":[{"line_number":27,"context_line":"            post_action\u003d\u0027create_registered_limits\u0027,"},{"line_number":28,"context_line":"            put_action\u003d\u0027update_registered_limits\u0027,"},{"line_number":29,"context_line":"            get_head_action\u003d\u0027list_registered_limits\u0027,"},{"line_number":30,"context_line":"            status\u003djson_home.Status.EXPERIMENTAL,"},{"line_number":31,"context_line":"            rel\u003djson_home.build_v3_resource_relation(\u0027registered_limits\u0027)"},{"line_number":32,"context_line":"        )"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":51,"id":"5f93b717_7f609933","line":30,"updated":"2018-01-25 04:23:39.000000000","message":"Thanks for adding this!","commit_id":"0eddc6d4bcebe407ed33bca8023f7c63a60a8f67"}],"keystone/limit/schema.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 SUSE Linux Gmbh"},{"line_number":2,"context_line":"# Copyright 2017 Huawei"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_d79d020b","line":1,"updated":"2018-01-21 22:09:38.000000000","message":"Delete this","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2017 SUSE Linux Gmbh"},{"line_number":2,"context_line":"# Copyright 2017 Huawei"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_f7a27e4b","line":2,"range":{"start_line":2,"start_character":12,"end_line":2,"end_character":16},"updated":"2018-01-21 22:09:38.000000000","message":"Update this","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"267f132963ee78b8ccfc52a0c81a1e05325db74d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 SUSE Linux Gmbh"},{"line_number":2,"context_line":"# Copyright 2018 Huawei"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":46,"id":"7f96bb07_9aba0908","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":32},"updated":"2018-01-23 13:42:21.000000000","message":"You can remove this","commit_id":"cab88b132dcc4ceb50138f9fc8a42d0ce7ba0d39"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"d8e2a58df76f125dc2db08f82098a22b374ca912","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2018 SUSE Linux Gmbh"},{"line_number":2,"context_line":"# Copyright 2018 Huawei"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":46,"id":"7f96bb07_4fd588e4","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":32},"in_reply_to":"7f96bb07_9aba0908","updated":"2018-01-24 03:43:09.000000000","message":"Done","commit_id":"cab88b132dcc4ceb50138f9fc8a42d0ce7ba0d39"}],"keystone/tests/unit/rest.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            enable_sqlite_foreign_key\u003denable_sqlite_foreign_key))"},{"line_number":62,"context_line":"        self.load_backends()"},{"line_number":63,"context_line":"        self.load_fixtures(default_fixtures,"},{"line_number":64,"context_line":"                           enable_sqlite_foreign_key\u003denable_sqlite_foreign_key)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.public_app \u003d webtest.TestApp("},{"line_number":67,"context_line":"            self.loadapp(app_conf, name\u003d\u0027main\u0027))"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_5791f2f0","line":64,"updated":"2018-01-21 22:09:38.000000000","message":"These changes seem unrelated, they should be pulled into a different commit","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"32fb6be032cf7a2a2f4a651cd1ba2aa0cecf63de","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            enable_sqlite_foreign_key\u003denable_sqlite_foreign_key))"},{"line_number":62,"context_line":"        self.load_backends()"},{"line_number":63,"context_line":"        self.load_fixtures(default_fixtures,"},{"line_number":64,"context_line":"                           enable_sqlite_foreign_key\u003denable_sqlite_foreign_key)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        self.public_app \u003d webtest.TestApp("},{"line_number":67,"context_line":"            self.loadapp(app_conf, name\u003d\u0027main\u0027))"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_ec35d0a9","line":64,"in_reply_to":"7f96bb07_5791f2f0","updated":"2018-01-22 02:08:03.000000000","message":"Ok, i\u0027ll move them to the sqlite FK patch, then we can consider them together.","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"}],"keystone/tests/unit/test_backend_ldap.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":1829,"context_line":"        super(LDAPIdentityEnabledEmulation, self).setUp()"},{"line_number":1830,"context_line":"        _assert_backends(self, identity\u003d\u0027ldap\u0027)"},{"line_number":1831,"context_line":""},{"line_number":1832,"context_line":"    def load_fixtures(self, fixtures, enable_sqlite_foreign_key\u003dFalse):"},{"line_number":1833,"context_line":"        # Override super impl since need to create group container."},{"line_number":1834,"context_line":"        super(LDAPIdentity, self).load_fixtures(fixtures)"},{"line_number":1835,"context_line":"        for obj in [self.tenant_bar, self.tenant_baz, self.user_foo,"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_37c226eb","line":1832,"updated":"2018-01-21 22:09:38.000000000","message":"These changes are definitely unrelated, split them into a different commit","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"}],"keystone/tests/unit/test_limits.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ad2fefabf4a0b0d05fab7878e308fc9e85c29f4","unresolved":false,"context_lines":[{"line_number":22,"context_line":"class RegisteredLimitsTestCase(test_v3.RestfulTestCase):"},{"line_number":23,"context_line":"    \"\"\"Test registered_limits CRUD.\"\"\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def setUp(self, app_conf\u003d\u0027keystone\u0027):"},{"line_number":26,"context_line":"        super(RegisteredLimitsTestCase, self).setUp(app_conf\u003dapp_conf)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        self.region2 \u003d unit.new_region_ref()"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_276ea6c8","line":25,"range":{"start_line":25,"start_character":20,"end_line":25,"end_character":39},"updated":"2018-01-18 22:41:37.000000000","message":"This is already passed to RestfulTestCase\u0027s setUp method by default. I don\u0027t think we need to define it here, too.","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"405cd8cb8ed78c07301db8ab2dd3a6284e57ea9b","unresolved":false,"context_lines":[{"line_number":22,"context_line":"class RegisteredLimitsTestCase(test_v3.RestfulTestCase):"},{"line_number":23,"context_line":"    \"\"\"Test registered_limits CRUD.\"\"\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def setUp(self, app_conf\u003d\u0027keystone\u0027):"},{"line_number":26,"context_line":"        super(RegisteredLimitsTestCase, self).setUp(app_conf\u003dapp_conf)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        self.region2 \u003d unit.new_region_ref()"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_7819acd4","line":25,"range":{"start_line":25,"start_character":20,"end_line":25,"end_character":39},"in_reply_to":"7f96bb07_276ea6c8","updated":"2018-01-19 03:30:51.000000000","message":"Done","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ad2fefabf4a0b0d05fab7878e308fc9e85c29f4","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        self.region2 \u003d unit.new_region_ref()"},{"line_number":29,"context_line":"        self.region_id2 \u003d self.region2[\u0027id\u0027]"},{"line_number":30,"context_line":"        self.catalog_api.create_region(self.region2)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        self.service2 \u003d unit.new_service_ref()"},{"line_number":33,"context_line":"        self.service_id2 \u003d self.service2[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_277c6670","line":30,"range":{"start_line":30,"start_character":8,"end_line":30,"end_character":12},"updated":"2018-01-18 22:41:37.000000000","message":"If we\u0027re going to reach into the backend to do these operations, we should use the PROVIDERS construct.\n\nAn alternative would be to create these things over the API, since we\u0027re testing everything else over the API anyway (which is typical in the v3 restful test cases).","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"405cd8cb8ed78c07301db8ab2dd3a6284e57ea9b","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        self.region2 \u003d unit.new_region_ref()"},{"line_number":29,"context_line":"        self.region_id2 \u003d self.region2[\u0027id\u0027]"},{"line_number":30,"context_line":"        self.catalog_api.create_region(self.region2)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        self.service2 \u003d unit.new_service_ref()"},{"line_number":33,"context_line":"        self.service_id2 \u003d self.service2[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_d86ec02d","line":30,"range":{"start_line":30,"start_character":8,"end_line":30,"end_character":12},"in_reply_to":"7f96bb07_277c6670","updated":"2018-01-19 03:30:51.000000000","message":"Done","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ad2fefabf4a0b0d05fab7878e308fc9e85c29f4","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.service_id2 \u003d self.service2[\u0027id\u0027]"},{"line_number":34,"context_line":"        self.catalog_api.create_service(self.service_id2,"},{"line_number":35,"context_line":"                                        self.service2.copy())"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_create_registered_limit(self):"},{"line_number":38,"context_line":"        \"\"\"Call ``POST /registered_limits``.\"\"\""},{"line_number":39,"context_line":"        ref \u003d unit.new_registered_limit_ref(service_id\u003dself.service_id,"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_72eb0e12","line":36,"updated":"2018-01-18 22:41:37.000000000","message":"I took a shot at simplifying some of the setUp method: \n\nhttp://paste.openstack.org/show/646959/","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"405cd8cb8ed78c07301db8ab2dd3a6284e57ea9b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.service_id2 \u003d self.service2[\u0027id\u0027]"},{"line_number":34,"context_line":"        self.catalog_api.create_service(self.service_id2,"},{"line_number":35,"context_line":"                                        self.service2.copy())"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_create_registered_limit(self):"},{"line_number":38,"context_line":"        \"\"\"Call ``POST /registered_limits``.\"\"\""},{"line_number":39,"context_line":"        ref \u003d unit.new_registered_limit_ref(service_id\u003dself.service_id,"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_d8dc80e5","line":36,"in_reply_to":"7f96bb07_72eb0e12","updated":"2018-01-19 03:30:51.000000000","message":"Done","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ad2fefabf4a0b0d05fab7878e308fc9e85c29f4","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            self.assertEqual(registered_limits[0][key], ref[key])"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_create_registered_limit_without_region(self):"},{"line_number":51,"context_line":"        \"\"\"Call ``POST /registered_limits``.\"\"\""},{"line_number":52,"context_line":"        ref \u003d unit.new_registered_limit_ref(service_id\u003dself.service_id)"},{"line_number":53,"context_line":"        r \u003d self.post("},{"line_number":54,"context_line":"            \u0027/registered_limits\u0027,"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_e74c3e43","line":51,"updated":"2018-01-18 22:41:37.000000000","message":"None of these test doc strings are really specific to the actual test. We can either elaborate on them or remove them.","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"405cd8cb8ed78c07301db8ab2dd3a6284e57ea9b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            self.assertEqual(registered_limits[0][key], ref[key])"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_create_registered_limit_without_region(self):"},{"line_number":51,"context_line":"        \"\"\"Call ``POST /registered_limits``.\"\"\""},{"line_number":52,"context_line":"        ref \u003d unit.new_registered_limit_ref(service_id\u003dself.service_id)"},{"line_number":53,"context_line":"        r \u003d self.post("},{"line_number":54,"context_line":"            \u0027/registered_limits\u0027,"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_d8b32097","line":51,"in_reply_to":"7f96bb07_e74c3e43","updated":"2018-01-19 03:30:51.000000000","message":"Done","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0ad2fefabf4a0b0d05fab7878e308fc9e85c29f4","unresolved":false,"context_lines":[{"line_number":302,"context_line":"class LimitsTestCase(test_v3.RestfulTestCase):"},{"line_number":303,"context_line":"    \"\"\"Test limits CRUD.\"\"\""},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def setUp(self, app_conf\u003d\u0027keystone\u0027):"},{"line_number":306,"context_line":"        super(LimitsTestCase, self).setUp(app_conf\u003dapp_conf)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        self.region2 \u003d unit.new_region_ref()"},{"line_number":309,"context_line":"        self.region_id2 \u003d self.region2[\u0027id\u0027]"},{"line_number":310,"context_line":"        self.catalog_api.create_region(self.region2)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        self.service2 \u003d unit.new_service_ref()"},{"line_number":313,"context_line":"        self.service_id2 \u003d self.service2[\u0027id\u0027]"},{"line_number":314,"context_line":"        self.catalog_api.create_service(self.service_id2,"},{"line_number":315,"context_line":"                                        self.service2.copy())"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        ref1 \u003d unit.new_registered_limit_ref(service_id\u003dself.service_id,"},{"line_number":318,"context_line":"                                             region_id\u003dself.region_id,"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_320d86e7","line":315,"range":{"start_line":305,"start_character":2,"end_line":315,"end_character":61},"updated":"2018-01-18 22:41:37.000000000","message":"Same comments here as in previous setUp method.","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"405cd8cb8ed78c07301db8ab2dd3a6284e57ea9b","unresolved":false,"context_lines":[{"line_number":302,"context_line":"class LimitsTestCase(test_v3.RestfulTestCase):"},{"line_number":303,"context_line":"    \"\"\"Test limits CRUD.\"\"\""},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def setUp(self, app_conf\u003d\u0027keystone\u0027):"},{"line_number":306,"context_line":"        super(LimitsTestCase, self).setUp(app_conf\u003dapp_conf)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        self.region2 \u003d unit.new_region_ref()"},{"line_number":309,"context_line":"        self.region_id2 \u003d self.region2[\u0027id\u0027]"},{"line_number":310,"context_line":"        self.catalog_api.create_region(self.region2)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        self.service2 \u003d unit.new_service_ref()"},{"line_number":313,"context_line":"        self.service_id2 \u003d self.service2[\u0027id\u0027]"},{"line_number":314,"context_line":"        self.catalog_api.create_service(self.service_id2,"},{"line_number":315,"context_line":"                                        self.service2.copy())"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        ref1 \u003d unit.new_registered_limit_ref(service_id\u003dself.service_id,"},{"line_number":318,"context_line":"                                             region_id\u003dself.region_id,"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_b8a4144c","line":315,"range":{"start_line":305,"start_character":2,"end_line":315,"end_character":61},"in_reply_to":"7f96bb07_320d86e7","updated":"2018-01-19 03:30:51.000000000","message":"Done","commit_id":"4958003b4886410ad3efd7ec17e5b8a6d103f889"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_f7bb5e6f","line":1,"updated":"2018-01-21 22:09:38.000000000","message":"You can update this","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"d5c06ac0acb4372d23da9351372c1991be036fc3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_6c72207f","line":1,"in_reply_to":"7f96bb07_f7bb5e6f","updated":"2018-01-22 03:01:19.000000000","message":"Done","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b9a1fbddb6fe20ada64b8fe4ed22839b27971849","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                                            region_id\u003dself.region_id)"},{"line_number":50,"context_line":"        r \u003d self.post("},{"line_number":51,"context_line":"            \u0027/registered_limits\u0027,"},{"line_number":52,"context_line":"            body\u003d{\u0027registered_limits\u0027: [ref]},"},{"line_number":53,"context_line":"            expected_status\u003dhttp_client.CREATED)"},{"line_number":54,"context_line":"        registered_limits \u003d r.result[\u0027registered_limits\u0027]"},{"line_number":55,"context_line":"        for key in [\u0027service_id\u0027, \u0027region_id\u0027, \u0027resource_name\u0027,"}],"source_content_type":"text/x-python","patch_set":50,"id":"5f93b717_3c08e826","line":52,"updated":"2018-01-24 20:57:41.000000000","message":"I\u0027m working on some of the client changes for this and noticed this is inconsistent with the specification:\n\nhttp://specs.openstack.org/openstack/keystone-specs/specs/keystone/queens/limits-api.html#create-registered-limits\n\nWe either need to update the specification or updated the implementation.","commit_id":"611d254be3406adc2a87400420eada9d9236243f"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"0eb3e575795185845ccf290188295c467993f779","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                                            region_id\u003dself.region_id)"},{"line_number":50,"context_line":"        r \u003d self.post("},{"line_number":51,"context_line":"            \u0027/registered_limits\u0027,"},{"line_number":52,"context_line":"            body\u003d{\u0027registered_limits\u0027: [ref]},"},{"line_number":53,"context_line":"            expected_status\u003dhttp_client.CREATED)"},{"line_number":54,"context_line":"        registered_limits \u003d r.result[\u0027registered_limits\u0027]"},{"line_number":55,"context_line":"        for key in [\u0027service_id\u0027, \u0027region_id\u0027, \u0027resource_name\u0027,"}],"source_content_type":"text/x-python","patch_set":50,"id":"5f93b717_8bebebae","line":52,"in_reply_to":"5f93b717_3c08e826","updated":"2018-01-25 03:24:24.000000000","message":"nice catch. we should update the spec IMO. \"registered limit\" and \"limit\" are different. we\u0027d better not use the same value.","commit_id":"611d254be3406adc2a87400420eada9d9236243f"}],"keystone/tests/unit/test_v3.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    def load_fixtures(self, fixtures, enable_sqlite_foreign_key\u003dFalse):"},{"line_number":192,"context_line":"        self.load_sample_data("},{"line_number":193,"context_line":"            enable_sqlite_foreign_key\u003denable_sqlite_foreign_key)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"    def _populate_default_domain(self, enable_sqlite_foreign_key\u003dFalse):"},{"line_number":196,"context_line":"        try:"},{"line_number":197,"context_line":"            self.resource_api.get_domain(DEFAULT_DOMAIN_ID)"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_97b0da8d","line":194,"updated":"2018-01-21 22:09:38.000000000","message":"These seem unrelated, split them into a different commit","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"}],"keystone/tests/unit/test_v3_assignment.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":2992,"context_line":"class ListUserProjectsTestCase(test_v3.RestfulTestCase):"},{"line_number":2993,"context_line":"    \"\"\"Test for /users/\u003cuser\u003e/projects.\"\"\""},{"line_number":2994,"context_line":""},{"line_number":2995,"context_line":"    def load_sample_data(self, enable_sqlite_foreign_key\u003dFalse):"},{"line_number":2996,"context_line":"        # do not load base class\u0027s data, keep it focused on the tests"},{"line_number":2997,"context_line":""},{"line_number":2998,"context_line":"        self.auths \u003d []"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_b7add632","line":2995,"updated":"2018-01-21 22:09:38.000000000","message":"Unrelated","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"}],"keystone/tests/unit/test_v3_auth.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":2392,"context_line":"class TestTokenRevokeSelfAndAdmin(test_v3.RestfulTestCase):"},{"line_number":2393,"context_line":"    \"\"\"Test token revoke using v3 Identity API by token owner and admin.\"\"\""},{"line_number":2394,"context_line":""},{"line_number":2395,"context_line":"    def load_sample_data(self, enable_sqlite_foreign_key\u003dFalse):"},{"line_number":2396,"context_line":"        \"\"\"Load Sample Data for Test Cases."},{"line_number":2397,"context_line":""},{"line_number":2398,"context_line":"        Two domains, domainA and domainB"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_57aa5219","line":2395,"updated":"2018-01-21 22:09:38.000000000","message":"Unrelated","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"}],"keystone/tests/unit/test_v3_catalog.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":995,"context_line":"        super(TestCatalogAPITemplatedProject, self).config_overrides()"},{"line_number":996,"context_line":"        self.config_fixture.config(group\u003d\u0027catalog\u0027, driver\u003d\u0027templated\u0027)"},{"line_number":997,"context_line":""},{"line_number":998,"context_line":"    def load_fixtures(self, fixtures, enable_sqlite_foreign_key\u003dFalse):"},{"line_number":999,"context_line":"        self.load_sample_data(create_region_and_endpoints\u003dFalse)"},{"line_number":1000,"context_line":""},{"line_number":1001,"context_line":"    def test_project_delete(self):"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_77a74e51","line":998,"updated":"2018-01-21 22:09:38.000000000","message":"Unrelated","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"}],"keystone/tests/unit/test_v3_federation.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":1853,"context_line":"        self.assertEqual(note[\u0027protocol\u0027], protocol)"},{"line_number":1854,"context_line":"        self.assertTrue(note[\u0027send_notification_called\u0027])"},{"line_number":1855,"context_line":""},{"line_number":1856,"context_line":"    def load_fixtures(self, fixtures, enable_sqlite_foreign_key\u003dFalse):"},{"line_number":1857,"context_line":"        super(FederatedTokenTests, self).load_fixtures(fixtures)"},{"line_number":1858,"context_line":"        self.load_federation_sample_data()"},{"line_number":1859,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_17628a17","line":1856,"updated":"2018-01-21 22:09:38.000000000","message":"Unrelated","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"}],"keystone/tests/unit/test_v3_filters.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.tmpfilename \u003d self.tempfile.file_name"},{"line_number":46,"context_line":"        super(IdentityTestFilteredCase, self).setUp()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def load_sample_data(self, enable_sqlite_foreign_key\u003dFalse):"},{"line_number":49,"context_line":"        \"\"\"Create sample data for these tests."},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        As well as the usual housekeeping, create a set of domains,"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_37678628","line":48,"updated":"2018-01-21 22:09:38.000000000","message":"Unrelated","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"}],"keystone/tests/unit/test_v3_protection.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"7fd905393bcbd53f83667e7f906c31b6ec9963ae","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            user_id\u003dself.user1[\u0027id\u0027],"},{"line_number":63,"context_line":"            password\u003dself.user1[\u0027password\u0027])"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def load_sample_data(self, enable_sqlite_foreign_key\u003dFalse):"},{"line_number":66,"context_line":"        self._populate_default_domain()"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        # Start by creating a couple of domains"}],"source_content_type":"text/x-python","patch_set":42,"id":"7f96bb07_d76bc2ee","line":65,"updated":"2018-01-21 22:09:38.000000000","message":"Unrelated","commit_id":"af285b802f4075c1c4f8f4961197351d065d7d58"}]}
