)]}'
{"openstack_dashboard/conf/nova_policy.json":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2d23bda7c2e62e887f82c0e1ee3ae0765d214ccf","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    \"os_compute_api:os-server-external-events:discoverable\": \"@\","},{"line_number":184,"context_line":"    \"os_compute_api:os-server-groups:discoverable\": \"@\","},{"line_number":185,"context_line":"    \"os_compute_api:os-server-groups\": \"rule:admin_or_owner\","},{"line_number":186,"context_line":"    \"os_compute_api:os-server-groups:create\": \"rule:admin_or_owner\","},{"line_number":187,"context_line":"    \"os_compute_api:server-metadata:index\": \"rule:admin_or_owner\","},{"line_number":188,"context_line":"    \"os_compute_api:server-metadata:show\": \"rule:admin_or_owner\","},{"line_number":189,"context_line":"    \"os_compute_api:server-metadata:create\": \"rule:admin_or_owner\","}],"source_content_type":"application/json","patch_set":19,"id":"5f93b717_61a8578b","line":186,"updated":"2018-01-31 19:56:28.000000000","message":"FYI: The recent sync of nova policy.json will add it. https://review.openstack.org/#/c/527670/","commit_id":"3f7b9dbdcc3c709929096c3c3faa96cce683bd22"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"97d094e56270a5edfde35767e35e977da23f9a27","unresolved":false,"context_lines":[{"line_number":183,"context_line":"    \"os_compute_api:os-server-external-events:discoverable\": \"@\","},{"line_number":184,"context_line":"    \"os_compute_api:os-server-groups:discoverable\": \"@\","},{"line_number":185,"context_line":"    \"os_compute_api:os-server-groups\": \"rule:admin_or_owner\","},{"line_number":186,"context_line":"    \"os_compute_api:os-server-groups:create\": \"rule:admin_or_owner\","},{"line_number":187,"context_line":"    \"os_compute_api:server-metadata:index\": \"rule:admin_or_owner\","},{"line_number":188,"context_line":"    \"os_compute_api:server-metadata:show\": \"rule:admin_or_owner\","},{"line_number":189,"context_line":"    \"os_compute_api:server-metadata:create\": \"rule:admin_or_owner\","}],"source_content_type":"application/json","patch_set":19,"id":"3fa0c359_a2ce6cb1","line":186,"in_reply_to":"5f93b717_61a8578b","updated":"2018-02-11 12:07:07.000000000","message":"Done. This change has been removed.","commit_id":"3f7b9dbdcc3c709929096c3c3faa96cce683bd22"}],"openstack_dashboard/static/app/core/server_groups/actions/create.action.service.js":[{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"36ebc18f41846363aa96fa5b7489ef4697c04444","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    //////////////"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    function allowed() {"},{"line_number":64,"context_line":"      return $qExtensions.booleanAsPromise("},{"line_number":65,"context_line":"          $location.url() \u003d\u003d\u003d \u0027/project/server_groups\u0027"},{"line_number":66,"context_line":"      );"}],"source_content_type":"text/javascript","patch_set":7,"id":"3f4b6375_9c1c6b78","line":63,"updated":"2017-11-09 05:43:59.000000000","message":"We also need to check the create server group policy here.\nReference: https://github.com/openstack/nova/blob/master/nova/policies/server_groups.py#L32","commit_id":"2133d1fabb6c0e020bd329fa7152663515f1fe22"}],"openstack_dashboard/test/unit/api/rest/test_nova.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"2d23bda7c2e62e887f82c0e1ee3ae0765d214ccf","unresolved":false,"context_lines":[{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    @mock.patch.object(nova.api, \u0027nova\u0027)"},{"line_number":364,"context_line":"    def test_server_group_create(self, nc):"},{"line_number":365,"context_line":"        req_data \u003d \u0027{\"name\": \"server_group\", \u0027 \\"},{"line_number":366,"context_line":"                   \u0027\"policies\": [\"affinity\"]\u0027 \\"},{"line_number":367,"context_line":"                   \u0027}\u0027"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        nc.server_group_create.return_value \u003d mock.Mock(**{"},{"line_number":370,"context_line":"            \u0027id\u0027: \u0027123\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"5f93b717_3c3fd6b4","line":367,"range":{"start_line":365,"start_character":19,"end_line":367,"end_character":22},"updated":"2018-01-31 19:56:28.000000000","message":"We usually do not use backslashes.\n req_data \u003d (\u0027{\"name\": \"server_group\", \u0027\n             \u0027\"policies\": [\"affinity\"]\u0027\n             \u0027}\u0027)\n\nBut, how about using json.dumps to generate JSON data.\n\n  req_data \u003d json.dumps({\u0027name\u0027: \u0027server_group\u0027, \u0027policies\u0027: [\u0027affinity\u0027]})\n\nI think it is maintained more easily.","commit_id":"3f7b9dbdcc3c709929096c3c3faa96cce683bd22"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"875d3ef809c295e6463e2851e9c12bf970be7745","unresolved":false,"context_lines":[{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    @mock.patch.object(nova.api, \u0027nova\u0027)"},{"line_number":364,"context_line":"    def test_server_group_create(self, nc):"},{"line_number":365,"context_line":"        req_data \u003d \u0027{\"name\": \"server_group\", \u0027 \\"},{"line_number":366,"context_line":"                   \u0027\"policies\": [\"affinity\"]\u0027 \\"},{"line_number":367,"context_line":"                   \u0027}\u0027"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        nc.server_group_create.return_value \u003d mock.Mock(**{"},{"line_number":370,"context_line":"            \u0027id\u0027: \u0027123\u0027,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3fa0c359_02196020","line":367,"range":{"start_line":365,"start_character":19,"end_line":367,"end_character":22},"in_reply_to":"5f93b717_3c3fd6b4","updated":"2018-02-11 12:17:48.000000000","message":"Done","commit_id":"3f7b9dbdcc3c709929096c3c3faa96cce683bd22"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"97d094e56270a5edfde35767e35e977da23f9a27","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."},{"line_number":12,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":13,"context_line":"# limitations under the License."},{"line_number":14,"context_line":"import json"},{"line_number":15,"context_line":"from json import loads as to_json"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from django.conf import settings"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa0c359_8257b0ca","line":14,"updated":"2018-02-11 12:07:07.000000000","message":"Here we need a blank line.","commit_id":"c1c73ed46f1557326c8b7830370c2cf973491756"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"875d3ef809c295e6463e2851e9c12bf970be7745","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."},{"line_number":12,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":13,"context_line":"# limitations under the License."},{"line_number":14,"context_line":"import json"},{"line_number":15,"context_line":"from json import loads as to_json"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from django.conf import settings"}],"source_content_type":"text/x-python","patch_set":20,"id":"3fa0c359_2216dcf2","line":14,"in_reply_to":"3fa0c359_8257b0ca","updated":"2018-02-11 12:17:48.000000000","message":"Done","commit_id":"c1c73ed46f1557326c8b7830370c2cf973491756"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"80c1e78f71bf8e2e5ff271f4e6ed7b695af8a4a3","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                         response.json)"},{"line_number":366,"context_line":"        nc.server_group_list.assert_called_once_with(request)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    @mock.patch.object(nova.api, \u0027nova\u0027)"},{"line_number":369,"context_line":"    def test_server_group_create(self, nc):"},{"line_number":370,"context_line":"        req_data \u003d json.dumps({"},{"line_number":371,"context_line":"            \u0027name\u0027: \u0027server_group\u0027, \u0027policies\u0027: [\u0027affinity\u0027]})"}],"source_content_type":"text/x-python","patch_set":24,"id":"df7087c5_be52d3dc","line":368,"range":{"start_line":368,"start_character":4,"end_line":368,"end_character":40},"updated":"2018-03-16 09:37:31.000000000","message":"Could you avoid mocking the whole module api.nova?\nI am rewriting rest/test_nova in https://review.openstack.org/#/c/551961/2/openstack_dashboard/test/unit/api/rest/test_nova.py. Could you update the test accordingly?","commit_id":"85bf163ecd2976ba6c6fa3dfc7a1ee8016921334"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"bb41f16d7171b004102c6baf9131610bab317e21","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                         response.json)"},{"line_number":366,"context_line":"        nc.server_group_list.assert_called_once_with(request)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    @mock.patch.object(nova.api, \u0027nova\u0027)"},{"line_number":369,"context_line":"    def test_server_group_create(self, nc):"},{"line_number":370,"context_line":"        req_data \u003d json.dumps({"},{"line_number":371,"context_line":"            \u0027name\u0027: \u0027server_group\u0027, \u0027policies\u0027: [\u0027affinity\u0027]})"}],"source_content_type":"text/x-python","patch_set":24,"id":"df7087c5_38424e10","line":368,"range":{"start_line":368,"start_character":4,"end_line":368,"end_character":40},"in_reply_to":"df7087c5_be52d3dc","updated":"2018-03-16 16:21:02.000000000","message":"Hi Akihiro. Thank you for reminding. Has been updated in a new patch.","commit_id":"85bf163ecd2976ba6c6fa3dfc7a1ee8016921334"}]}
