)]}'
{"cinder/policies/volumes.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2017 Huawei Technologies Co., Ltd."},{"line_number":2,"context_line":"# All Rights Reserved."},{"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":1,"id":"1f621f24_cb3af032","line":1,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E902 TokenError: EOF in multi-line statement","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    check_str\u003dbase.RULE_ADMIN_API"},{"line_number":66,"context_line":")"},{"line_number":67,"context_line":"deprecated_get_host_attributes \u003d policy.DeprecatedRule"},{"line_number":68,"context_line":"    name\u003dHOST_ATTRIBUTE_POLICY,"},{"line_number":69,"context_line":"    check_str\u003dbase.RULE_ADMIN_API"},{"line_number":70,"context_line":")"},{"line_number":71,"context_line":"deprecated_get_tenant_attributes \u003d policy.DeprecatedRule("}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_2b48c4ca","line":68,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E113 unexpected indentation","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    check_str\u003dbase.RULE_ADMIN_API"},{"line_number":66,"context_line":")"},{"line_number":67,"context_line":"deprecated_get_host_attributes \u003d policy.DeprecatedRule"},{"line_number":68,"context_line":"    name\u003dHOST_ATTRIBUTE_POLICY,"},{"line_number":69,"context_line":"    check_str\u003dbase.RULE_ADMIN_API"},{"line_number":70,"context_line":")"},{"line_number":71,"context_line":"deprecated_get_tenant_attributes \u003d policy.DeprecatedRule("}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_0b4508b4","line":68,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":66,"context_line":")"},{"line_number":67,"context_line":"deprecated_get_host_attributes \u003d policy.DeprecatedRule"},{"line_number":68,"context_line":"    name\u003dHOST_ATTRIBUTE_POLICY,"},{"line_number":69,"context_line":"    check_str\u003dbase.RULE_ADMIN_API"},{"line_number":70,"context_line":")"},{"line_number":71,"context_line":"deprecated_get_tenant_attributes \u003d policy.DeprecatedRule("},{"line_number":72,"context_line":"    name\u003dTENANT_ATTRIBUTE_POLICY,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_6b13dcb9","line":69,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    name\u003dHOST_ATTRIBUTE_POLICY,"},{"line_number":69,"context_line":"    check_str\u003dbase.RULE_ADMIN_API"},{"line_number":70,"context_line":")"},{"line_number":71,"context_line":"deprecated_get_tenant_attributes \u003d policy.DeprecatedRule("},{"line_number":72,"context_line":"    name\u003dTENANT_ATTRIBUTE_POLICY,"},{"line_number":73,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":74,"context_line":")"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_4b18a0d2","line":71,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E122 continuation line missing indentation or outdented","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    check_str\u003dbase.RULE_ADMIN_API"},{"line_number":70,"context_line":")"},{"line_number":71,"context_line":"deprecated_get_tenant_attributes \u003d policy.DeprecatedRule("},{"line_number":72,"context_line":"    name\u003dTENANT_ATTRIBUTE_POLICY,"},{"line_number":73,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":74,"context_line":")"},{"line_number":75,"context_line":"deprecated_get_migration_status \u003d policy.DeprecatedRule("}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_ab0df491","line":72,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E113 unexpected indentation","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    check_str\u003dbase.RULE_ADMIN_API"},{"line_number":70,"context_line":")"},{"line_number":71,"context_line":"deprecated_get_tenant_attributes \u003d policy.DeprecatedRule("},{"line_number":72,"context_line":"    name\u003dTENANT_ATTRIBUTE_POLICY,"},{"line_number":73,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":74,"context_line":")"},{"line_number":75,"context_line":"deprecated_get_migration_status \u003d policy.DeprecatedRule("}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_8b12b8b0","line":72,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":70,"context_line":")"},{"line_number":71,"context_line":"deprecated_get_tenant_attributes \u003d policy.DeprecatedRule("},{"line_number":72,"context_line":"    name\u003dTENANT_ATTRIBUTE_POLICY,"},{"line_number":73,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":74,"context_line":")"},{"line_number":75,"context_line":"deprecated_get_migration_status \u003d policy.DeprecatedRule("},{"line_number":76,"context_line":"    name\u003dMIG_ATTRIBUTE_POLICY,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_eb26cc16","line":73,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    name\u003dTENANT_ATTRIBUTE_POLICY,"},{"line_number":73,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":74,"context_line":")"},{"line_number":75,"context_line":"deprecated_get_migration_status \u003d policy.DeprecatedRule("},{"line_number":76,"context_line":"    name\u003dMIG_ATTRIBUTE_POLICY,"},{"line_number":77,"context_line":"    check_str\u003dbase.RULE_ADMIN_API"},{"line_number":78,"context_line":")"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_cb231005","line":75,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E122 continuation line missing indentation or outdented","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":74,"context_line":")"},{"line_number":75,"context_line":"deprecated_get_migration_status \u003d policy.DeprecatedRule("},{"line_number":76,"context_line":"    name\u003dMIG_ATTRIBUTE_POLICY,"},{"line_number":77,"context_line":"    check_str\u003dbase.RULE_ADMIN_API"},{"line_number":78,"context_line":")"},{"line_number":79,"context_line":"deprecated_get_encryption_metadata \u003d policy.DeprecatedRule("}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_2b21e4fc","line":76,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E113 unexpected indentation","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":74,"context_line":")"},{"line_number":75,"context_line":"deprecated_get_migration_status \u003d policy.DeprecatedRule("},{"line_number":76,"context_line":"    name\u003dMIG_ATTRIBUTE_POLICY,"},{"line_number":77,"context_line":"    check_str\u003dbase.RULE_ADMIN_API"},{"line_number":78,"context_line":")"},{"line_number":79,"context_line":"deprecated_get_encryption_metadata \u003d policy.DeprecatedRule("}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_0b1ea8b9","line":76,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":74,"context_line":")"},{"line_number":75,"context_line":"deprecated_get_migration_status \u003d policy.DeprecatedRule("},{"line_number":76,"context_line":"    name\u003dMIG_ATTRIBUTE_POLICY,"},{"line_number":77,"context_line":"    check_str\u003dbase.RULE_ADMIN_API"},{"line_number":78,"context_line":")"},{"line_number":79,"context_line":"deprecated_get_encryption_metadata \u003d policy.DeprecatedRule("},{"line_number":80,"context_line":"    name\u003dENCRYPTION_METADATA_POLICY,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_6b78fcf7","line":77,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    name\u003dMIG_ATTRIBUTE_POLICY,"},{"line_number":77,"context_line":"    check_str\u003dbase.RULE_ADMIN_API"},{"line_number":78,"context_line":")"},{"line_number":79,"context_line":"deprecated_get_encryption_metadata \u003d policy.DeprecatedRule("},{"line_number":80,"context_line":"    name\u003dENCRYPTION_METADATA_POLICY,"},{"line_number":81,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":82,"context_line":")"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_4b7d40e6","line":79,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E122 continuation line missing indentation or outdented","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    check_str\u003dbase.RULE_ADMIN_API"},{"line_number":78,"context_line":")"},{"line_number":79,"context_line":"deprecated_get_encryption_metadata \u003d policy.DeprecatedRule("},{"line_number":80,"context_line":"    name\u003dENCRYPTION_METADATA_POLICY,"},{"line_number":81,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":82,"context_line":")"},{"line_number":83,"context_line":"deprecated_create_multiattach_volume \u003d policy.DeprecatedRule("}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_ab8214c7","line":80,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E113 unexpected indentation","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    check_str\u003dbase.RULE_ADMIN_API"},{"line_number":78,"context_line":")"},{"line_number":79,"context_line":"deprecated_get_encryption_metadata \u003d policy.DeprecatedRule("},{"line_number":80,"context_line":"    name\u003dENCRYPTION_METADATA_POLICY,"},{"line_number":81,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":82,"context_line":")"},{"line_number":83,"context_line":"deprecated_create_multiattach_volume \u003d policy.DeprecatedRule("}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_8b8758d8","line":80,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":78,"context_line":")"},{"line_number":79,"context_line":"deprecated_get_encryption_metadata \u003d policy.DeprecatedRule("},{"line_number":80,"context_line":"    name\u003dENCRYPTION_METADATA_POLICY,"},{"line_number":81,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":82,"context_line":")"},{"line_number":83,"context_line":"deprecated_create_multiattach_volume \u003d policy.DeprecatedRule("},{"line_number":84,"context_line":"    name\u003dMULTIATTACH_POLICY,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_eb6b6c1c","line":81,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    name\u003dENCRYPTION_METADATA_POLICY,"},{"line_number":81,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":82,"context_line":")"},{"line_number":83,"context_line":"deprecated_create_multiattach_volume \u003d policy.DeprecatedRule("},{"line_number":84,"context_line":"    name\u003dMULTIATTACH_POLICY,"},{"line_number":85,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":86,"context_line":")"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_cb683023","line":83,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E122 continuation line missing indentation or outdented","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":82,"context_line":")"},{"line_number":83,"context_line":"deprecated_create_multiattach_volume \u003d policy.DeprecatedRule("},{"line_number":84,"context_line":"    name\u003dMULTIATTACH_POLICY,"},{"line_number":85,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":86,"context_line":")"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_2b760408","line":84,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E113 unexpected indentation","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":82,"context_line":")"},{"line_number":83,"context_line":"deprecated_create_multiattach_volume \u003d policy.DeprecatedRule("},{"line_number":84,"context_line":"    name\u003dMULTIATTACH_POLICY,"},{"line_number":85,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":86,"context_line":")"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_0b734817","line":84,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":82,"context_line":")"},{"line_number":83,"context_line":"deprecated_create_multiattach_volume \u003d policy.DeprecatedRule("},{"line_number":84,"context_line":"    name\u003dMULTIATTACH_POLICY,"},{"line_number":85,"context_line":"    check_str\u003dbase.RULE_ADMIN_OR_OWNER"},{"line_number":86,"context_line":")"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_6b611c3a","line":85,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E225 missing whitespace around operator","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":86,"context_line":")"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"volumes_policies \u003d ["},{"line_number":90,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":91,"context_line":"        name\u003dCREATE_POLICY,"},{"line_number":92,"context_line":"        check_str\u003dbase.SYSTEM_OR_PROJECT_MEMBER,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_4b66e053","line":89,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E122 continuation line missing indentation or outdented","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5b20a75a63acaca0725f84e9a6a3758604884b1c","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"volumes_policies \u003d ["},{"line_number":90,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":91,"context_line":"        name\u003dCREATE_POLICY,"},{"line_number":92,"context_line":"        check_str\u003dbase.SYSTEM_OR_PROJECT_MEMBER,"},{"line_number":93,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_ab5b3485","line":90,"updated":"2020-10-28 20:35:36.000000000","message":"pep8: E113 unexpected indentation","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e255cb27f6e7a05a5374eaf3e68094e501654385","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    ),"},{"line_number":135,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":136,"context_line":"        name\u003dGET_ALL_POLICY,"},{"line_number":137,"context_line":"        check_str\u003dbase.SYSTEM_OR_PROJECT_READER,"},{"line_number":138,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":139,"context_line":"        description\u003d\"List volumes or get summary of volumes.\","},{"line_number":140,"context_line":"        operations\u003d["}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_10c25534","line":137,"range":{"start_line":137,"start_character":23,"end_line":137,"end_character":47},"updated":"2020-10-28 19:15:41.000000000","message":"I think this should mean a system reader can get volumes for the entire deployment. A project reader should only get volumes for their project, which makes me think \u0027ALL\u0027 has a different meaning depending on the context.","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e255cb27f6e7a05a5374eaf3e68094e501654385","unresolved":false,"context_lines":[{"line_number":193,"context_line":"    ),"},{"line_number":194,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":195,"context_line":"        name\u003dFORCE_DELETE_POLICY,"},{"line_number":196,"context_line":"        check_str\u003dbase.SYSTEM_OR_PROJECT_MEMBER,"},{"line_number":197,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":198,"context_line":"        description\u003d\"Force Delete a volume.\","},{"line_number":199,"context_line":"        operations\u003d["}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_500a0d8a","line":196,"range":{"start_line":196,"start_character":23,"end_line":196,"end_character":47},"updated":"2020-10-28 19:15:41.000000000","message":"I\u0027m curious what other people think of this because this change opens up the force delete API to project members. Is it ok to let project members and admins forcible delete volumes within their project? Or does that violate tenancy in a way that I don\u0027t understand?","commit_id":"7924cc6197e579d2a0b2f04a618d3fc7324d4c1f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ead42796badc19918c4ef958a02e810bb8cf9f30","unresolved":true,"context_lines":[{"line_number":185,"context_line":"    ),"},{"line_number":186,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":187,"context_line":"        name\u003dFORCE_DELETE_POLICY,"},{"line_number":188,"context_line":"        check_str\u003dbase.LEGACY_ADMIN_OR_PROJECT_MEMBER,"},{"line_number":189,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":190,"context_line":"        description\u003d\"Force Delete a volume.\","},{"line_number":191,"context_line":"        operations\u003d["}],"source_content_type":"text/x-python","patch_set":3,"id":"2470c754_bdcc218e","line":188,"updated":"2021-03-02 02:54:04.000000000","message":"This might not be ready to expose to end-users, yet.","commit_id":"1947a168567747c64235876e69485d59bd0e97ea"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fe885f1b0daa26c286871ee983d3cff56ef6a5ff","unresolved":true,"context_lines":[{"line_number":185,"context_line":"    ),"},{"line_number":186,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":187,"context_line":"        name\u003dFORCE_DELETE_POLICY,"},{"line_number":188,"context_line":"        check_str\u003dbase.LEGACY_ADMIN_OR_PROJECT_MEMBER,"},{"line_number":189,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":190,"context_line":"        description\u003d\"Force Delete a volume.\","},{"line_number":191,"context_line":"        operations\u003d["}],"source_content_type":"text/x-python","patch_set":5,"id":"e60793ce_015b9744","line":188,"range":{"start_line":188,"start_character":23,"end_line":188,"end_character":53},"updated":"2021-08-05 21:36:55.000000000","message":"Revert this to be admin-only until we get system-scope support.","commit_id":"112ec8dc27af0da944e43f3113cc5f6200b9859e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fe885f1b0daa26c286871ee983d3cff56ef6a5ff","unresolved":true,"context_lines":[{"line_number":185,"context_line":"    ),"},{"line_number":186,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":187,"context_line":"        name\u003dFORCE_DELETE_POLICY,"},{"line_number":188,"context_line":"        check_str\u003dbase.LEGACY_ADMIN_OR_PROJECT_MEMBER,"},{"line_number":189,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027],"},{"line_number":190,"context_line":"        description\u003d\"Force Delete a volume.\","},{"line_number":191,"context_line":"        operations\u003d["}],"source_content_type":"text/x-python","patch_set":6,"id":"9a2ac7b1_66c07818","line":188,"range":{"start_line":188,"start_character":23,"end_line":188,"end_character":53},"updated":"2021-08-05 21:36:55.000000000","message":"Revert this to be admin_only until we get system-scope support.","commit_id":"a7e12bdf741ca81f54206ae57ba404a752ff7e79"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"a4b7cdc77cfc27b7cf63424f3861f6426c132164","unresolved":true,"context_lines":[{"line_number":31,"context_line":"ENCRYPTION_METADATA_POLICY \u003d \"volume_extension:volume_encryption_metadata\""},{"line_number":32,"context_line":"MULTIATTACH_POLICY \u003d \"volume:multiattach\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"DEPRECATED_REASON \u003d \"\"\""},{"line_number":35,"context_line":"The volume API is now aware of default roles."},{"line_number":36,"context_line":"\"\"\""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"68a44984_5af88f35","line":34,"updated":"2021-09-08 20:25:45.000000000","message":"this is not needed and should be removed.","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"e0a9bb1df439905e335572c810900f20d6f6fe5e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"ENCRYPTION_METADATA_POLICY \u003d \"volume_extension:volume_encryption_metadata\""},{"line_number":32,"context_line":"MULTIATTACH_POLICY \u003d \"volume:multiattach\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"DEPRECATED_REASON \u003d \"\"\""},{"line_number":35,"context_line":"The volume API is now aware of default roles."},{"line_number":36,"context_line":"\"\"\""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"4a347031_2d9da3cb","line":34,"in_reply_to":"68a44984_5af88f35","updated":"2021-09-09 07:56:47.000000000","message":"Done","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"}],"cinder/tests/unit/policies/test_volume.py":[{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"025b1bb93a841a373c5890b2c7d94b91b75a10f4","unresolved":true,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        self.assertEqual(HTTPStatus.ACCEPTED, response.status_int)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_nonadmin_user_can_create_volume(self):"},{"line_number":51,"context_line":"        user_context \u003d self.user_context"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        path \u003d \u0027/v3/%(project_id)s/volumes\u0027 % {"}],"source_content_type":"text/x-python","patch_set":15,"id":"ddf7c0f5_22497fee","line":50,"updated":"2021-09-07 16:21:24.000000000","message":"I\u0027m sure a bunch of these legacy tests will need to change as cinder adds more support for secure-rbac, but I guess they can be retained as long as the tests still pass.","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5d2c295fb1119c68ee5ace1df5414af7c357c4e2","unresolved":true,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        self.assertEqual(HTTPStatus.ACCEPTED, response.status_int)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_nonadmin_user_can_create_volume(self):"},{"line_number":51,"context_line":"        user_context \u003d self.user_context"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        path \u003d \u0027/v3/%(project_id)s/volumes\u0027 % {"}],"source_content_type":"text/x-python","patch_set":15,"id":"93c4fa67_0b6ed103","line":50,"in_reply_to":"ddf7c0f5_22497fee","updated":"2021-09-08 08:04:52.000000000","message":"Agree, for now i think it makes sense to keep them.","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"025b1bb93a841a373c5890b2c7d94b91b75a10f4","unresolved":true,"context_lines":[{"line_number":502,"context_line":"@ddt.ddt"},{"line_number":503,"context_line":"class VolumesPolicyTest(base.BasePolicyTest):"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    authorized_readers \u003d ["},{"line_number":506,"context_line":"        \u0027legacy_admin\u0027,"},{"line_number":507,"context_line":"        \u0027legacy_owner\u0027,"},{"line_number":508,"context_line":"        \u0027system_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"547cf66a_84b07be0","line":505,"updated":"2021-09-07 16:21:24.000000000","message":"I suspect a lot of policy tests have similar lists, and we can dedupe a bunch of them (probably move to the test framework). But that effort should be deferred until more policy tests are using the new framework.","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5d2c295fb1119c68ee5ace1df5414af7c357c4e2","unresolved":true,"context_lines":[{"line_number":502,"context_line":"@ddt.ddt"},{"line_number":503,"context_line":"class VolumesPolicyTest(base.BasePolicyTest):"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    authorized_readers \u003d ["},{"line_number":506,"context_line":"        \u0027legacy_admin\u0027,"},{"line_number":507,"context_line":"        \u0027legacy_owner\u0027,"},{"line_number":508,"context_line":"        \u0027system_admin\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1dc11d3f_6b3a1caa","line":505,"in_reply_to":"547cf66a_84b07be0","updated":"2021-09-08 08:04:52.000000000","message":"The refactoring would be better when all tests are in place and we can take the common code out. Since different APIs might require different user roles in these lists so we can\u0027t be sure if all are using the same set of users in it.","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"025b1bb93a841a373c5890b2c7d94b91b75a10f4","unresolved":true,"context_lines":[{"line_number":578,"context_line":"                                          testcase_instance\u003dself)"},{"line_number":579,"context_line":"        return volume"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"    def _delete_volume(self, volume):"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"        return volume"},{"line_number":584,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"867ec6ab_7e606004","line":581,"updated":"2021-09-07 16:21:24.000000000","message":"What\u0027s this? I don\u0027t believe it\u0027s used anywhere.","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5d2c295fb1119c68ee5ace1df5414af7c357c4e2","unresolved":false,"context_lines":[{"line_number":578,"context_line":"                                          testcase_instance\u003dself)"},{"line_number":579,"context_line":"        return volume"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"    def _delete_volume(self, volume):"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"        return volume"},{"line_number":584,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"0ef788a5_ab73000a","line":581,"in_reply_to":"867ec6ab_7e606004","updated":"2021-09-08 08:04:52.000000000","message":"Done","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"025b1bb93a841a373c5890b2c7d94b91b75a10f4","unresolved":true,"context_lines":[{"line_number":586,"context_line":"    def test_create_volume_policy(self, user_id):"},{"line_number":587,"context_line":"        rule_name \u003d volume_policies.CREATE_POLICY"},{"line_number":588,"context_line":"        url \u003d self.api_path"},{"line_number":589,"context_line":"        req \u003d fake_api.HTTPRequest.blank(url)"},{"line_number":590,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":591,"context_line":"        body \u003d {\"volume\": {\"size\": 1}}"},{"line_number":592,"context_line":"        unauthorized_exceptions \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"6b138ccb_d95c3b54","line":589,"updated":"2021-09-07 16:21:24.000000000","message":"I notice you aren\u0027t specifying the api_version, which I guess is OK when the default value is appropriate everywhere. An alternative (as I did in one of my own files) I specifically assign the \"base\" v3 version, and override as needed (see [1], [2], [3]).\n\n[1] https://review.opendev.org/c/openstack/cinder/+/804459/5/cinder/tests/unit/policies/test_backups.py#91\n[2] https://review.opendev.org/c/openstack/cinder/+/804459/5/cinder/tests/unit/policies/test_backups.py#105\n[3] https://review.opendev.org/c/openstack/cinder/+/804459/5/cinder/tests/unit/policies/test_backups.py#187","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5d2c295fb1119c68ee5ace1df5414af7c357c4e2","unresolved":true,"context_lines":[{"line_number":586,"context_line":"    def test_create_volume_policy(self, user_id):"},{"line_number":587,"context_line":"        rule_name \u003d volume_policies.CREATE_POLICY"},{"line_number":588,"context_line":"        url \u003d self.api_path"},{"line_number":589,"context_line":"        req \u003d fake_api.HTTPRequest.blank(url)"},{"line_number":590,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":591,"context_line":"        body \u003d {\"volume\": {\"size\": 1}}"},{"line_number":592,"context_line":"        unauthorized_exceptions \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"d6a5510f_67e78312","line":589,"in_reply_to":"6b138ccb_d95c3b54","updated":"2021-09-08 08:04:52.000000000","message":"Since we are already using _MIN_API_VERSION[1] as default and i didn\u0027t find any usage of microversion in these tests, i didn\u0027t feel the need to include the extra code to specify base microversion. But i will keep that suggestion in mind for futher tests work.\n\n[1] https://github.com/openstack/cinder/blob/master/cinder/api/openstack/api_version_request.py#L160","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"025b1bb93a841a373c5890b2c7d94b91b75a10f4","unresolved":true,"context_lines":[{"line_number":642,"context_line":"        rule_name \u003d volume_policies.GET_POLICY"},{"line_number":643,"context_line":"        url \u003d \u0027%s/%s\u0027 % (self.api_path, volume.id)"},{"line_number":644,"context_line":"        req \u003d fake_api.HTTPRequest.blank(url)"},{"line_number":645,"context_line":"        req.method \u003d \u0027GET\u0027"},{"line_number":646,"context_line":"        unauthorized_exceptions \u003d ["},{"line_number":647,"context_line":"            exception.VolumeNotFound,"},{"line_number":648,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":15,"id":"0ea1126a_3fb082b2","line":645,"updated":"2021-09-07 16:21:24.000000000","message":"nit: I think this is the default method","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5d2c295fb1119c68ee5ace1df5414af7c357c4e2","unresolved":false,"context_lines":[{"line_number":642,"context_line":"        rule_name \u003d volume_policies.GET_POLICY"},{"line_number":643,"context_line":"        url \u003d \u0027%s/%s\u0027 % (self.api_path, volume.id)"},{"line_number":644,"context_line":"        req \u003d fake_api.HTTPRequest.blank(url)"},{"line_number":645,"context_line":"        req.method \u003d \u0027GET\u0027"},{"line_number":646,"context_line":"        unauthorized_exceptions \u003d ["},{"line_number":647,"context_line":"            exception.VolumeNotFound,"},{"line_number":648,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":15,"id":"3c058591_6aeff42f","line":645,"in_reply_to":"0ea1126a_3fb082b2","updated":"2021-09-08 08:04:52.000000000","message":"Done","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"025b1bb93a841a373c5890b2c7d94b91b75a10f4","unresolved":true,"context_lines":[{"line_number":697,"context_line":"        controller \u003d ("},{"line_number":698,"context_line":"            volume_encryption_metadata.VolumeEncryptionMetadataController())"},{"line_number":699,"context_line":"        volume \u003d self._create_volume()"},{"line_number":700,"context_line":"        volume \u003d volume.obj_to_primitive()[\u0027versioned_object.data\u0027]"},{"line_number":701,"context_line":"        rule_name \u003d volume_policies.ENCRYPTION_METADATA_POLICY"},{"line_number":702,"context_line":"        url \u003d \u0027%s/%s/encryption\u0027 % (self.api_path, volume[\u0027id\u0027])"},{"line_number":703,"context_line":"        req \u003d fake_api.HTTPRequest.blank(url)"}],"source_content_type":"text/x-python","patch_set":15,"id":"8a5612d3_16fc4abb","line":700,"updated":"2021-09-07 16:21:24.000000000","message":"Is this necessary? Can\u0027t you just use volume.id on L702 and L713?","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5d2c295fb1119c68ee5ace1df5414af7c357c4e2","unresolved":true,"context_lines":[{"line_number":697,"context_line":"        controller \u003d ("},{"line_number":698,"context_line":"            volume_encryption_metadata.VolumeEncryptionMetadataController())"},{"line_number":699,"context_line":"        volume \u003d self._create_volume()"},{"line_number":700,"context_line":"        volume \u003d volume.obj_to_primitive()[\u0027versioned_object.data\u0027]"},{"line_number":701,"context_line":"        rule_name \u003d volume_policies.ENCRYPTION_METADATA_POLICY"},{"line_number":702,"context_line":"        url \u003d \u0027%s/%s/encryption\u0027 % (self.api_path, volume[\u0027id\u0027])"},{"line_number":703,"context_line":"        req \u003d fake_api.HTTPRequest.blank(url)"}],"source_content_type":"text/x-python","patch_set":15,"id":"69804f2b_227e4758","line":700,"in_reply_to":"8a5612d3_16fc4abb","updated":"2021-09-08 08:04:52.000000000","message":"Initially i thought we required the same code handling for this as we\u0027ve done in test_get_volume_tenant_attr_policy but since this code doesn\u0027t require a response dict from volume show, this seems to be a leftover. Will remove it.","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"025b1bb93a841a373c5890b2c7d94b91b75a10f4","unresolved":true,"context_lines":[{"line_number":723,"context_line":"        url \u003d \u0027%s/%s\u0027 % (self.api_path, volume[\u0027id\u0027])"},{"line_number":724,"context_line":"        req \u003d fake_api.HTTPRequest.blank(url)"},{"line_number":725,"context_line":"        req.method \u003d \u0027GET\u0027"},{"line_number":726,"context_line":"        req.get_db_volume \u003d mock.MagicMock()"},{"line_number":727,"context_line":"        req.get_db_volume.return_value \u003d volume"},{"line_number":728,"context_line":"        resp_obj \u003d mock.MagicMock(obj\u003d{\u0027volume\u0027: volume})"},{"line_number":729,"context_line":"        unauthorized_exceptions \u003d ["},{"line_number":730,"context_line":"            exception.VolumeNotFound,"},{"line_number":731,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":15,"id":"e9232d91_1b5100e3","line":728,"range":{"start_line":726,"start_character":0,"end_line":728,"end_character":0},"updated":"2021-09-07 16:21:24.000000000","message":"I\u0027m confused by this. I was expecting you\u0027d capture and parse the response returned by the common_policy_check at L734.","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5d2c295fb1119c68ee5ace1df5414af7c357c4e2","unresolved":true,"context_lines":[{"line_number":723,"context_line":"        url \u003d \u0027%s/%s\u0027 % (self.api_path, volume[\u0027id\u0027])"},{"line_number":724,"context_line":"        req \u003d fake_api.HTTPRequest.blank(url)"},{"line_number":725,"context_line":"        req.method \u003d \u0027GET\u0027"},{"line_number":726,"context_line":"        req.get_db_volume \u003d mock.MagicMock()"},{"line_number":727,"context_line":"        req.get_db_volume.return_value \u003d volume"},{"line_number":728,"context_line":"        resp_obj \u003d mock.MagicMock(obj\u003d{\u0027volume\u0027: volume})"},{"line_number":729,"context_line":"        unauthorized_exceptions \u003d ["},{"line_number":730,"context_line":"            exception.VolumeNotFound,"},{"line_number":731,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":15,"id":"0a570f71_b414d93b","line":728,"range":{"start_line":726,"start_character":0,"end_line":728,"end_character":0},"in_reply_to":"e9232d91_1b5100e3","updated":"2021-09-08 08:04:52.000000000","message":"The VolumeTenantAttributeController.show method expects a response dict from volume show[1] and to replicate that behavior we are creating this and passing it on L#739\n\n[1] https://github.com/openstack/cinder/blob/master/cinder/api/contrib/volume_tenant_attribute.py#L30","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"025b1bb93a841a373c5890b2c7d94b91b75a10f4","unresolved":true,"context_lines":[{"line_number":739,"context_line":"            resp_obj, volume[\u0027id\u0027])"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        if user_id in self.create_authorized_users:"},{"line_number":742,"context_line":"            self.assertIn(\u0027os-vol-tenant-attr:tenant_id\u0027, volume.keys())"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"    @ddt.data(*base.all_users)"},{"line_number":745,"context_line":"    def test_update_volume_policy(self, user_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"55b7b888_c05ca1a9","line":742,"updated":"2021-09-07 16:21:24.000000000","message":"As I mention above, I thought you\u0027d parse this out of the controller\u0027s response.","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"5d2c295fb1119c68ee5ace1df5414af7c357c4e2","unresolved":true,"context_lines":[{"line_number":739,"context_line":"            resp_obj, volume[\u0027id\u0027])"},{"line_number":740,"context_line":""},{"line_number":741,"context_line":"        if user_id in self.create_authorized_users:"},{"line_number":742,"context_line":"            self.assertIn(\u0027os-vol-tenant-attr:tenant_id\u0027, volume.keys())"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"    @ddt.data(*base.all_users)"},{"line_number":745,"context_line":"    def test_update_volume_policy(self, user_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ff3e5502_216a211f","line":742,"in_reply_to":"55b7b888_c05ca1a9","updated":"2021-09-08 08:04:52.000000000","message":"The API call doesn\u0027t return anything and just adds \u0027os-vol-tenant-attr:tenant_id\u0027 to the passed volume dict[1] hence we are checking that this key doesn\u0027t exist before the API call at L#732 and here it exists.\n\n[1] https://github.com/openstack/cinder/blob/master/cinder/api/contrib/volume_tenant_attribute.py#L23-L24","commit_id":"511b4a9416ec211ed82466f2c73a9eb1e4669845"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"a4b7cdc77cfc27b7cf63424f3861f6426c132164","unresolved":true,"context_lines":[{"line_number":542,"context_line":"        \u0027project_member\u0027,"},{"line_number":543,"context_line":"        \u0027project_reader\u0027,"},{"line_number":544,"context_line":"        \u0027project_foo\u0027,"},{"line_number":545,"context_line":"        \u0027other_project_member\u0027,"},{"line_number":546,"context_line":"        \u0027other_project_reader\u0027,"},{"line_number":547,"context_line":"    ]"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"    create_unauthorized_users \u003d ["},{"line_number":550,"context_line":"        \u0027system_member\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"2123c654_540dbaf4","line":547,"range":{"start_line":545,"start_character":0,"end_line":547,"end_character":0},"updated":"2021-09-08 20:25:45.000000000","message":"This doesn\u0027t look right to me. A member (not an admin) in project X should not be authorized to create a volume in project Y. I realize it may be an artifact of the deprecated rule having an empty check_str.\n\nOh, now I see. The current code relies on wsgi not allowing users in project X to access the URL associated with project Y.\n\nIf so, then I suggest adding a comment for why these \"other\" people are authorized.","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"e0a9bb1df439905e335572c810900f20d6f6fe5e","unresolved":true,"context_lines":[{"line_number":542,"context_line":"        \u0027project_member\u0027,"},{"line_number":543,"context_line":"        \u0027project_reader\u0027,"},{"line_number":544,"context_line":"        \u0027project_foo\u0027,"},{"line_number":545,"context_line":"        \u0027other_project_member\u0027,"},{"line_number":546,"context_line":"        \u0027other_project_reader\u0027,"},{"line_number":547,"context_line":"    ]"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"    create_unauthorized_users \u003d ["},{"line_number":550,"context_line":"        \u0027system_member\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"9253cad0_25702e0f","line":547,"range":{"start_line":545,"start_character":0,"end_line":547,"end_character":0},"in_reply_to":"2123c654_540dbaf4","updated":"2021-09-09 07:56:47.000000000","message":"Ack, will add a comment.","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"a4b7cdc77cfc27b7cf63424f3861f6426c132164","unresolved":true,"context_lines":[{"line_number":608,"context_line":""},{"line_number":609,"context_line":"    @ddt.data(*base.all_users)"},{"line_number":610,"context_line":"    def test_create_multiattach_volume_policy(self, user_id):"},{"line_number":611,"context_line":"        vol_type \u003d test_utils.create_volume_type("},{"line_number":612,"context_line":"            self.project_admin_context, name\u003d\u0027multiattach_type\u0027,"},{"line_number":613,"context_line":"            extra_specs\u003d{\u0027multiattach\u0027: \u0027\u003cis\u003e True\u0027})"},{"line_number":614,"context_line":"        rule_name \u003d volume_policies.MULTIATTACH_POLICY"}],"source_content_type":"text/x-python","patch_set":16,"id":"e25f2a97_42448553","line":611,"updated":"2021-09-08 20:25:45.000000000","message":"This call should include testcase_instance\u003dself","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"57891932fd6c9b078defd1514de768b4a111f9d6","unresolved":false,"context_lines":[{"line_number":608,"context_line":""},{"line_number":609,"context_line":"    @ddt.data(*base.all_users)"},{"line_number":610,"context_line":"    def test_create_multiattach_volume_policy(self, user_id):"},{"line_number":611,"context_line":"        vol_type \u003d test_utils.create_volume_type("},{"line_number":612,"context_line":"            self.project_admin_context, name\u003d\u0027multiattach_type\u0027,"},{"line_number":613,"context_line":"            extra_specs\u003d{\u0027multiattach\u0027: \u0027\u003cis\u003e True\u0027})"},{"line_number":614,"context_line":"        rule_name \u003d volume_policies.MULTIATTACH_POLICY"}],"source_content_type":"text/x-python","patch_set":16,"id":"b8f589e9_79dc0ac6","line":611,"in_reply_to":"686fb5be_1fe4f9ae","updated":"2021-09-09 13:22:03.000000000","message":"Ah, right.","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"e0a9bb1df439905e335572c810900f20d6f6fe5e","unresolved":true,"context_lines":[{"line_number":608,"context_line":""},{"line_number":609,"context_line":"    @ddt.data(*base.all_users)"},{"line_number":610,"context_line":"    def test_create_multiattach_volume_policy(self, user_id):"},{"line_number":611,"context_line":"        vol_type \u003d test_utils.create_volume_type("},{"line_number":612,"context_line":"            self.project_admin_context, name\u003d\u0027multiattach_type\u0027,"},{"line_number":613,"context_line":"            extra_specs\u003d{\u0027multiattach\u0027: \u0027\u003cis\u003e True\u0027})"},{"line_number":614,"context_line":"        rule_name \u003d volume_policies.MULTIATTACH_POLICY"}],"source_content_type":"text/x-python","patch_set":16,"id":"686fb5be_1fe4f9ae","line":611,"in_reply_to":"e25f2a97_42448553","updated":"2021-09-09 07:56:47.000000000","message":"This fails and the problem here is the cleanup of this volume type happens before deleting the multiattach volume we are creating during this test and hence it raises VolumeTypeInUse exception. This will only work if the volume associated with the volume type also does similar cleanup.","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"a4b7cdc77cfc27b7cf63424f3861f6426c132164","unresolved":true,"context_lines":[{"line_number":670,"context_line":"        empty_response_users \u003d ["},{"line_number":671,"context_line":"            *self.unauthorized_readers,"},{"line_number":672,"context_line":"            # legacy_admin and system_admin do not have a project_id, and"},{"line_number":673,"context_line":"            # so the list of backups returned will be empty."},{"line_number":674,"context_line":"            \u0027legacy_admin\u0027,"},{"line_number":675,"context_line":"            \u0027system_admin\u0027,"},{"line_number":676,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":16,"id":"7994b37e_88beef88","line":673,"range":{"start_line":673,"start_character":29,"end_line":673,"end_character":36},"updated":"2021-09-08 20:25:45.000000000","message":"volumes","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"e0a9bb1df439905e335572c810900f20d6f6fe5e","unresolved":false,"context_lines":[{"line_number":670,"context_line":"        empty_response_users \u003d ["},{"line_number":671,"context_line":"            *self.unauthorized_readers,"},{"line_number":672,"context_line":"            # legacy_admin and system_admin do not have a project_id, and"},{"line_number":673,"context_line":"            # so the list of backups returned will be empty."},{"line_number":674,"context_line":"            \u0027legacy_admin\u0027,"},{"line_number":675,"context_line":"            \u0027system_admin\u0027,"},{"line_number":676,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":16,"id":"56428a5b_e027d0a8","line":673,"range":{"start_line":673,"start_character":29,"end_line":673,"end_character":36},"in_reply_to":"7994b37e_88beef88","updated":"2021-09-09 07:56:47.000000000","message":"Done","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"a4b7cdc77cfc27b7cf63424f3861f6426c132164","unresolved":true,"context_lines":[{"line_number":689,"context_line":"            volume_encryption_metadata.VolumeEncryptionMetadataController())"},{"line_number":690,"context_line":"        volume \u003d self._create_volume()"},{"line_number":691,"context_line":"        rule_name \u003d volume_policies.ENCRYPTION_METADATA_POLICY"},{"line_number":692,"context_line":"        url \u003d \u0027%s/%s/encryption\u0027 % (self.api_path, volume.id)"},{"line_number":693,"context_line":"        req \u003d fake_api.HTTPRequest.blank(url)"},{"line_number":694,"context_line":"        unauthorized_exceptions \u003d ["},{"line_number":695,"context_line":"            exception.VolumeNotFound,"}],"source_content_type":"text/x-python","patch_set":16,"id":"8cdde196_4438ffcb","line":692,"updated":"2021-09-08 20:25:45.000000000","message":"Do we need a similar test for \"GET /volumes/{volume_id}/encryption/{encryption_key}\"\n\nI\u0027m not certain another test is necessary if it\u0027s the same code path, so this test may be sufficient for both operations.","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"57891932fd6c9b078defd1514de768b4a111f9d6","unresolved":false,"context_lines":[{"line_number":689,"context_line":"            volume_encryption_metadata.VolumeEncryptionMetadataController())"},{"line_number":690,"context_line":"        volume \u003d self._create_volume()"},{"line_number":691,"context_line":"        rule_name \u003d volume_policies.ENCRYPTION_METADATA_POLICY"},{"line_number":692,"context_line":"        url \u003d \u0027%s/%s/encryption\u0027 % (self.api_path, volume.id)"},{"line_number":693,"context_line":"        req \u003d fake_api.HTTPRequest.blank(url)"},{"line_number":694,"context_line":"        unauthorized_exceptions \u003d ["},{"line_number":695,"context_line":"            exception.VolumeNotFound,"}],"source_content_type":"text/x-python","patch_set":16,"id":"90b0b864_195555dd","line":692,"in_reply_to":"335db9d1_63b2f54e","updated":"2021-09-09 13:22:03.000000000","message":"Ack","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"e0a9bb1df439905e335572c810900f20d6f6fe5e","unresolved":true,"context_lines":[{"line_number":689,"context_line":"            volume_encryption_metadata.VolumeEncryptionMetadataController())"},{"line_number":690,"context_line":"        volume \u003d self._create_volume()"},{"line_number":691,"context_line":"        rule_name \u003d volume_policies.ENCRYPTION_METADATA_POLICY"},{"line_number":692,"context_line":"        url \u003d \u0027%s/%s/encryption\u0027 % (self.api_path, volume.id)"},{"line_number":693,"context_line":"        req \u003d fake_api.HTTPRequest.blank(url)"},{"line_number":694,"context_line":"        unauthorized_exceptions \u003d ["},{"line_number":695,"context_line":"            exception.VolumeNotFound,"}],"source_content_type":"text/x-python","patch_set":16,"id":"335db9d1_63b2f54e","line":692,"in_reply_to":"8cdde196_4438ffcb","updated":"2021-09-09 07:56:47.000000000","message":"The \"GET /volumes/{volume_id}/encryption/{encryption_key}\" API calls the \"show\" method which in turn calls the \"index\" method[1] so we are following the same code path in both cases. Also the intent here is to check the policy and not the API which is validated with this test case so I didn\u0027t feel the need to add the test case for that.\n\n[1] https://github.com/openstack/cinder/blob/master/cinder/api/contrib/volume_encryption_metadata.py#L38","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"a4b7cdc77cfc27b7cf63424f3861f6426c132164","unresolved":true,"context_lines":[{"line_number":727,"context_line":"            resp_obj, volume[\u0027id\u0027], fatal\u003dFalse)"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"        if user_id in self.authorized_readers:"},{"line_number":730,"context_line":"            self.assertIn(\u0027os-vol-tenant-attr:tenant_id\u0027, volume.keys())"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"    @ddt.data(*base.all_users)"},{"line_number":733,"context_line":"    def test_update_volume_policy(self, user_id):"}],"source_content_type":"text/x-python","patch_set":16,"id":"5cd9a407_e58f8b36","line":730,"updated":"2021-09-08 20:25:45.000000000","message":"I\u0027m still not sure why you don\u0027t need to check the controller.show response, but clearly something is updating the volume object after L720 passes. So I guess this is OK?","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"e0a9bb1df439905e335572c810900f20d6f6fe5e","unresolved":true,"context_lines":[{"line_number":727,"context_line":"            resp_obj, volume[\u0027id\u0027], fatal\u003dFalse)"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"        if user_id in self.authorized_readers:"},{"line_number":730,"context_line":"            self.assertIn(\u0027os-vol-tenant-attr:tenant_id\u0027, volume.keys())"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"    @ddt.data(*base.all_users)"},{"line_number":733,"context_line":"    def test_update_volume_policy(self, user_id):"}],"source_content_type":"text/x-python","patch_set":16,"id":"e3ceb266_d29d9844","line":730,"in_reply_to":"5cd9a407_e58f8b36","updated":"2021-09-09 07:56:47.000000000","message":"The controller.show call doesn\u0027t return anything and just calls the method that adds this key into the volume[1] and we are validating here that the key is being added to the volume by this code[2]\n\n[1] https://github.com/openstack/cinder/blob/master/cinder/api/contrib/volume_tenant_attribute.py#L31\n[2] https://github.com/openstack/cinder/blob/master/cinder/api/contrib/volume_tenant_attribute.py#L23-L24","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"92ba51d573fa5ffb615c872bbbe4c21892a349d0","unresolved":false,"context_lines":[{"line_number":727,"context_line":"            resp_obj, volume[\u0027id\u0027], fatal\u003dFalse)"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"        if user_id in self.authorized_readers:"},{"line_number":730,"context_line":"            self.assertIn(\u0027os-vol-tenant-attr:tenant_id\u0027, volume.keys())"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"    @ddt.data(*base.all_users)"},{"line_number":733,"context_line":"    def test_update_volume_policy(self, user_id):"}],"source_content_type":"text/x-python","patch_set":16,"id":"5ffb8f47_8c803d3c","line":730,"in_reply_to":"8c8ea666_698438ae","updated":"2021-09-09 16:57:18.000000000","message":"And now I\u0027ve experienced this problem when writing another test. The problem is we\u0027re not using the full wsgi environment, so controller extensions aren\u0027t available. If you invoke something on a VolumeController, it will not trigger anything in the VolumeTenantAttributeController, which is what we\u0027re trying to test. So your approach is definitely the way to go for tests like this.","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"57891932fd6c9b078defd1514de768b4a111f9d6","unresolved":true,"context_lines":[{"line_number":727,"context_line":"            resp_obj, volume[\u0027id\u0027], fatal\u003dFalse)"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"        if user_id in self.authorized_readers:"},{"line_number":730,"context_line":"            self.assertIn(\u0027os-vol-tenant-attr:tenant_id\u0027, volume.keys())"},{"line_number":731,"context_line":""},{"line_number":732,"context_line":"    @ddt.data(*base.all_users)"},{"line_number":733,"context_line":"    def test_update_volume_policy(self, user_id):"}],"source_content_type":"text/x-python","patch_set":16,"id":"8c8ea666_698438ae","line":730,"in_reply_to":"e3ceb266_d29d9844","updated":"2021-09-09 13:22:03.000000000","message":"OK, now I see the source of my confusion. I missed L708, where you are directly invoking the VolumeTenantAttributeController, which indeed returns None. And L715 is how you \"trick\" the controller into updating the local volume variable.\n\nI was thinking you\u0027d use the VolumeController (self.controller), which _does_ return a reponse that you could parse. But your approach looks OK.","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":21129,"name":"Alan Bishop","email":"abishopsweng@gmail.com","username":"ASBishop","status":"ex Red Hat"},"change_message_id":"a4b7cdc77cfc27b7cf63424f3861f6426c132164","unresolved":true,"context_lines":[{"line_number":771,"context_line":"        \u0027system_admin\u0027,"},{"line_number":772,"context_line":"        \u0027project_admin\u0027,"},{"line_number":773,"context_line":"        \u0027project_member\u0027,"},{"line_number":774,"context_line":"        \u0027other_project_member\u0027,"},{"line_number":775,"context_line":"    ]"},{"line_number":776,"context_line":""},{"line_number":777,"context_line":"    create_unauthorized_users \u003d ["}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5cb265_8d972d17","line":774,"updated":"2021-09-08 20:25:45.000000000","message":"I think I know why other_project_member is authorized, and as before it\u0027s due to the wsgi layer preventing this in a real system. I think this is OK for xena, but something we should work on in yoga.","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"e0a9bb1df439905e335572c810900f20d6f6fe5e","unresolved":true,"context_lines":[{"line_number":771,"context_line":"        \u0027system_admin\u0027,"},{"line_number":772,"context_line":"        \u0027project_admin\u0027,"},{"line_number":773,"context_line":"        \u0027project_member\u0027,"},{"line_number":774,"context_line":"        \u0027other_project_member\u0027,"},{"line_number":775,"context_line":"    ]"},{"line_number":776,"context_line":""},{"line_number":777,"context_line":"    create_unauthorized_users \u003d ["}],"source_content_type":"text/x-python","patch_set":16,"id":"a2a99a44_9c2c900c","line":774,"in_reply_to":"ba5cb265_8d972d17","updated":"2021-09-09 07:56:47.000000000","message":"Agree, we should not rely only on the WSGI layer to pass/fail this operation.","commit_id":"7faab3d2ef33f5f393b3e37e33fc442c8039cad6"},{"author":{"_account_id":20813,"name":"Sofia Enriquez","email":"lsofia.enriquez@gmail.com","username":"enriquetaso"},"change_message_id":"60b3c1ab050510c3a189f0bd42ba098ade6a9fab","unresolved":true,"context_lines":[{"line_number":739,"context_line":"        url \u003d \u0027%s/%s\u0027 % (self.api_path, volume.id)"},{"line_number":740,"context_line":"        body \u003d {\"volume\": {\"name\": \"update_name\"}}"},{"line_number":741,"context_line":"        req \u003d fake_api.HTTPRequest.blank(url)"},{"line_number":742,"context_line":"        req.method \u003d \u0027DELETE\u0027"},{"line_number":743,"context_line":"        unauthorized_exceptions \u003d ["},{"line_number":744,"context_line":"            exception.VolumeNotFound,"},{"line_number":745,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":17,"id":"490217b4_489691d5","line":742,"range":{"start_line":742,"start_character":22,"end_line":742,"end_character":28},"updated":"2021-09-09 14:31:43.000000000","message":"I think this should be PUT","commit_id":"255952e9423b789a7fe230236dad3cd502fcc609"},{"author":{"_account_id":27615,"name":"Rajat Dhasmana","email":"rajatdhasmana@gmail.com","username":"whoami-rajat"},"change_message_id":"921ec926299494abcff8d58c095dbc4ff094cbd1","unresolved":false,"context_lines":[{"line_number":739,"context_line":"        url \u003d \u0027%s/%s\u0027 % (self.api_path, volume.id)"},{"line_number":740,"context_line":"        body \u003d {\"volume\": {\"name\": \"update_name\"}}"},{"line_number":741,"context_line":"        req \u003d fake_api.HTTPRequest.blank(url)"},{"line_number":742,"context_line":"        req.method \u003d \u0027DELETE\u0027"},{"line_number":743,"context_line":"        unauthorized_exceptions \u003d ["},{"line_number":744,"context_line":"            exception.VolumeNotFound,"},{"line_number":745,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":17,"id":"b3c6a286_454c4579","line":742,"range":{"start_line":742,"start_character":22,"end_line":742,"end_character":28},"in_reply_to":"490217b4_489691d5","updated":"2021-09-09 15:23:56.000000000","message":"Done","commit_id":"255952e9423b789a7fe230236dad3cd502fcc609"}]}
