)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"d65e942ffc6223a7c8dcea6c07f4ca08c86b3620","unresolved":false,"context_lines":[{"line_number":18,"context_line":"defined in the `policy.json`."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"One action(create, read, update, delete) one rule, there is no need define"},{"line_number":21,"context_line":"multi-rules for one action since rules is recursive itself. the rule here"},{"line_number":22,"context_line":"will be checked in the rules defined in `policy.json`, all the same with"},{"line_number":23,"context_line":"oslo.policy verification."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"3a50d1a3_20c9fbac","line":21,"updated":"2015-07-24 15:18:07.000000000","message":"Capitalize \"the\".","commit_id":"e88ffb3479e2caffbe4df8ceb907023cbbd33613"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"068d9721b38da91b8eba06a20f4cf35244e27156","unresolved":false,"context_lines":[{"line_number":18,"context_line":"defined in the `policy.json`."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"One action(create, read, update, delete) one rule, there is no need define"},{"line_number":21,"context_line":"multi-rules for one action since rules is recursive itself. the rule here"},{"line_number":22,"context_line":"will be checked in the rules defined in `policy.json`, all the same with"},{"line_number":23,"context_line":"oslo.policy verification."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"3a50d1a3_66ce1885","line":21,"in_reply_to":"3a50d1a3_20c9fbac","updated":"2015-07-26 14:20:14.000000000","message":"Done","commit_id":"e88ffb3479e2caffbe4df8ceb907023cbbd33613"},{"author":{"_account_id":17405,"name":"Jacob Gregor","email":"jgregor@us.ibm.com","username":"jgregor"},"change_message_id":"d65e942ffc6223a7c8dcea6c07f4ca08c86b3620","unresolved":false,"context_lines":[{"line_number":22,"context_line":"will be checked in the rules defined in `policy.json`, all the same with"},{"line_number":23,"context_line":"oslo.policy verification."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Failed to pass the rule check will throw `ReservedProperty` exception, and"},{"line_number":26,"context_line":"properties modification will fail as well."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"DocImpact: How to enable properties protection need to be documented."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"3a50d1a3_a002ebb2","line":25,"updated":"2015-07-24 15:18:07.000000000","message":"Suggestion: \"Failing the rule check will throw ...\".","commit_id":"e88ffb3479e2caffbe4df8ceb907023cbbd33613"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"068d9721b38da91b8eba06a20f4cf35244e27156","unresolved":false,"context_lines":[{"line_number":22,"context_line":"will be checked in the rules defined in `policy.json`, all the same with"},{"line_number":23,"context_line":"oslo.policy verification."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Failed to pass the rule check will throw `ReservedProperty` exception, and"},{"line_number":26,"context_line":"properties modification will fail as well."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"DocImpact: How to enable properties protection need to be documented."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"3a50d1a3_06a4f4b6","line":25,"in_reply_to":"3a50d1a3_a002ebb2","updated":"2015-07-26 14:20:14.000000000","message":"Done","commit_id":"e88ffb3479e2caffbe4df8ceb907023cbbd33613"}],"cinder/common/property_utils.py":[{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"d54d2690f8c7dacee7bcd943c79b2f4cfd9f467f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"CONFIG \u003d ConfigParser.SafeConfigParser(dict_type\u003dOrderedDict)"},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":"_ \u003d i18n._"},{"line_number":35,"context_line":"_LE \u003d i18n._LE"},{"line_number":36,"context_line":"_LW \u003d i18n._LW"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"property_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":25,"id":"9a41bdd9_b57c18b6","line":35,"updated":"2015-07-14 14:56:34.000000000","message":"Why do we need this vars, we can import in one line as everywhere in the code and make code little cleaner:\nfrom cinder.i18n import _, _LE, _LW","commit_id":"5d852f1a47c53939a6218e688005e9b1215b0f19"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"6ef5fe1af218084307471c66b3aa7207da657419","unresolved":false,"context_lines":[{"line_number":32,"context_line":"CONFIG \u003d ConfigParser.SafeConfigParser(dict_type\u003dOrderedDict)"},{"line_number":33,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":34,"context_line":"_ \u003d i18n._"},{"line_number":35,"context_line":"_LE \u003d i18n._LE"},{"line_number":36,"context_line":"_LW \u003d i18n._LW"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"property_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":25,"id":"9a41bdd9_d7897b27","line":35,"in_reply_to":"9a41bdd9_b57c18b6","updated":"2015-07-15 08:09:19.000000000","message":"Done","commit_id":"5d852f1a47c53939a6218e688005e9b1215b0f19"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"aa7afd6165e236f97dab513dc64871b1a843e6da","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                            LOG.error("},{"line_number":105,"context_line":"                                _LE(\"Multiple policies \u0027%s\u0027 not allowed \""},{"line_number":106,"context_line":"                                    \"for a given operation. Policies can be \""},{"line_number":107,"context_line":"                                    \"combined in the policy file\"),"},{"line_number":108,"context_line":"                                permissions)"},{"line_number":109,"context_line":"                            raise InvalidPropProtectConf()"},{"line_number":110,"context_line":"                        self.prop_exp_mapping[compiled_rule] \u003d property_exp"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a41bdd9_18f41ef0","line":107,"updated":"2015-07-14 13:15:29.000000000","message":"\".\" at EOL","commit_id":"5d852f1a47c53939a6218e688005e9b1215b0f19"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"6ef5fe1af218084307471c66b3aa7207da657419","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                            LOG.error("},{"line_number":105,"context_line":"                                _LE(\"Multiple policies \u0027%s\u0027 not allowed \""},{"line_number":106,"context_line":"                                    \"for a given operation. Policies can be \""},{"line_number":107,"context_line":"                                    \"combined in the policy file\"),"},{"line_number":108,"context_line":"                                permissions)"},{"line_number":109,"context_line":"                            raise InvalidPropProtectConf()"},{"line_number":110,"context_line":"                        self.prop_exp_mapping[compiled_rule] \u003d property_exp"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a41bdd9_b79b9765","line":107,"in_reply_to":"9a41bdd9_18f41ef0","updated":"2015-07-15 08:09:19.000000000","message":"Done","commit_id":"5d852f1a47c53939a6218e688005e9b1215b0f19"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"d54d2690f8c7dacee7bcd943c79b2f4cfd9f467f","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                        permissions \u003d [permission.strip() for permission in"},{"line_number":116,"context_line":"                                       permissions.split(\u0027,\u0027)]"},{"line_number":117,"context_line":"                        if \u0027@\u0027 in permissions and \u0027!\u0027 in permissions:"},{"line_number":118,"context_line":"                            msg \u003d (_("},{"line_number":119,"context_line":"                                \"Malformed property protection rule in \""},{"line_number":120,"context_line":"                                \"[%(prop)s] %(op)s\u003d%(perm)s: \u0027@\u0027 and \u0027!\u0027 \""},{"line_number":121,"context_line":"                                \"are mutually exclusive\") %"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a41bdd9_38f6bdf9","line":118,"updated":"2015-07-14 14:56:34.000000000","message":"Please change _ to _LE and % -\u003e ,","commit_id":"5d852f1a47c53939a6218e688005e9b1215b0f19"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"6ef5fe1af218084307471c66b3aa7207da657419","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                        permissions \u003d [permission.strip() for permission in"},{"line_number":116,"context_line":"                                       permissions.split(\u0027,\u0027)]"},{"line_number":117,"context_line":"                        if \u0027@\u0027 in permissions and \u0027!\u0027 in permissions:"},{"line_number":118,"context_line":"                            msg \u003d (_("},{"line_number":119,"context_line":"                                \"Malformed property protection rule in \""},{"line_number":120,"context_line":"                                \"[%(prop)s] %(op)s\u003d%(perm)s: \u0027@\u0027 and \u0027!\u0027 \""},{"line_number":121,"context_line":"                                \"are mutually exclusive\") %"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a41bdd9_d7de5b10","line":118,"in_reply_to":"9a41bdd9_38f6bdf9","updated":"2015-07-15 08:09:19.000000000","message":"Done","commit_id":"5d852f1a47c53939a6218e688005e9b1215b0f19"},{"author":{"_account_id":16708,"name":"Kendall Nelson","display_name":"Kendall (diablo_rojo)","email":"kennelson11@gmail.com","username":"kjnelson"},"change_message_id":"aa7afd6165e236f97dab513dc64871b1a843e6da","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                            msg \u003d (_("},{"line_number":119,"context_line":"                                \"Malformed property protection rule in \""},{"line_number":120,"context_line":"                                \"[%(prop)s] %(op)s\u003d%(perm)s: \u0027@\u0027 and \u0027!\u0027 \""},{"line_number":121,"context_line":"                                \"are mutually exclusive\") %"},{"line_number":122,"context_line":"                                dict(prop\u003dproperty_exp,"},{"line_number":123,"context_line":"                                     op\u003doperation,"},{"line_number":124,"context_line":"                                     perm\u003dpermissions))"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a41bdd9_58d14656","line":121,"updated":"2015-07-14 13:15:29.000000000","message":"\".\" at EOL","commit_id":"5d852f1a47c53939a6218e688005e9b1215b0f19"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"6ef5fe1af218084307471c66b3aa7207da657419","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                            msg \u003d (_("},{"line_number":119,"context_line":"                                \"Malformed property protection rule in \""},{"line_number":120,"context_line":"                                \"[%(prop)s] %(op)s\u003d%(perm)s: \u0027@\u0027 and \u0027!\u0027 \""},{"line_number":121,"context_line":"                                \"are mutually exclusive\") %"},{"line_number":122,"context_line":"                                dict(prop\u003dproperty_exp,"},{"line_number":123,"context_line":"                                     op\u003doperation,"},{"line_number":124,"context_line":"                                     perm\u003dpermissions))"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a41bdd9_37a8e776","line":121,"in_reply_to":"9a41bdd9_58d14656","updated":"2015-07-15 08:09:19.000000000","message":"Done","commit_id":"5d852f1a47c53939a6218e688005e9b1215b0f19"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"d54d2690f8c7dacee7bcd943c79b2f4cfd9f467f","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        try:"},{"line_number":141,"context_line":"            return re.compile(rule)"},{"line_number":142,"context_line":"        except Exception as e:"},{"line_number":143,"context_line":"            msg \u003d (_(\"Encountered a malformed property protection rule\""},{"line_number":144,"context_line":"                     \" %(rule)s: %(error)s.\") % {\u0027rule\u0027: rule,"},{"line_number":145,"context_line":"                                                 \u0027error\u0027: e})"},{"line_number":146,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a41bdd9_18c899a7","line":143,"updated":"2015-07-14 14:56:34.000000000","message":"same","commit_id":"5d852f1a47c53939a6218e688005e9b1215b0f19"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"6ef5fe1af218084307471c66b3aa7207da657419","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        try:"},{"line_number":141,"context_line":"            return re.compile(rule)"},{"line_number":142,"context_line":"        except Exception as e:"},{"line_number":143,"context_line":"            msg \u003d (_(\"Encountered a malformed property protection rule\""},{"line_number":144,"context_line":"                     \" %(rule)s: %(error)s.\") % {\u0027rule\u0027: rule,"},{"line_number":145,"context_line":"                                                 \u0027error\u0027: e})"},{"line_number":146,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a41bdd9_17d92322","line":143,"in_reply_to":"9a41bdd9_18c899a7","updated":"2015-07-15 08:09:19.000000000","message":"Done","commit_id":"5d852f1a47c53939a6218e688005e9b1215b0f19"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bd1016d5f1d83aac53276a0e36d5e92af8245a36","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                    LOG.warning("},{"line_number":128,"context_line":"                        _LW(\u0027Property protection on operation %(operation)s\u0027"},{"line_number":129,"context_line":"                            \u0027 for rule %(rule)s is not found. No role will be\u0027"},{"line_number":130,"context_line":"                            \u0027 allowed to perform this operation.\u0027) %"},{"line_number":131,"context_line":"                        {\u0027operation\u0027: operation,"},{"line_number":132,"context_line":"                         \u0027rule\u0027: property_exp})"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"3a50d1a3_a0ee12eb","line":130,"updated":"2015-07-27 20:14:37.000000000","message":"If you do another update, please change % to , to pass formatting values as an argument to the logger. Existing code, so no worries if it does not get updated. Great if it would be though.","commit_id":"91c34273ca3db0cc844abdb6331ca811e692b6c8"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"9f159e11c1b32fa1669aba3ecbf4481635f7979d","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                    LOG.warning("},{"line_number":128,"context_line":"                        _LW(\u0027Property protection on operation %(operation)s\u0027"},{"line_number":129,"context_line":"                            \u0027 for rule %(rule)s is not found. No role will be\u0027"},{"line_number":130,"context_line":"                            \u0027 allowed to perform this operation.\u0027) %"},{"line_number":131,"context_line":"                        {\u0027operation\u0027: operation,"},{"line_number":132,"context_line":"                         \u0027rule\u0027: property_exp})"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"3a50d1a3_4dc73798","line":130,"in_reply_to":"3a50d1a3_a0ee12eb","updated":"2015-07-28 07:30:22.000000000","message":"Done","commit_id":"91c34273ca3db0cc844abdb6331ca811e692b6c8"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"bbf72758fa47c02868eed916fd389029e550c1b2","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        For example, if the file listed as property_protection_file has:"},{"line_number":139,"context_line":"        [prop_a]"},{"line_number":140,"context_line":"        create \u003d cinder_creator"},{"line_number":141,"context_line":"        then the corresponding policy rule would be:"},{"line_number":142,"context_line":"        \"prop_a:create\": \"rule:cinder_creator\""},{"line_number":143,"context_line":"        where cinder_creator is defined in policy.json. For example:"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a1a9d01_a5ec44c8","line":140,"updated":"2015-09-25 14:44:43.000000000","message":"Single line of whitespace here may make it more readable (to separate the example property_protection_file snippet from the rest of the doc","commit_id":"0247749ca1fa826818aad6d7d3344194dbf762f2"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"bbf72758fa47c02868eed916fd389029e550c1b2","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                                       use_conf\u003dself.use_conf)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def _check_policy(self, property_exp, action, context):"},{"line_number":155,"context_line":"        try:"},{"line_number":156,"context_line":"            action \u003d \":\".join([property_exp, action])"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"            credentials \u003d {"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a1a9d01_85e8207e","line":155,"updated":"2015-09-25 14:44:43.000000000","message":"Any reason we use \":\".join here but string substitution on 147?","commit_id":"0247749ca1fa826818aad6d7d3344194dbf762f2"}],"cinder/tests/api/contrib/test_volume_image_props_protection.py":[{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"d54d2690f8c7dacee7bcd943c79b2f4cfd9f467f","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"def fake_return_image_metadata_policy(*args, **kwargs):"},{"line_number":78,"context_line":"    return fake_image_metadata_policy"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"class VolumeImagePropsProtectionsTest(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a41bdd9_f8013539","line":78,"updated":"2015-07-14 14:56:34.000000000","message":"if you use mock you can drop it","commit_id":"5d852f1a47c53939a6218e688005e9b1215b0f19"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"84ff4ca0cb03ede018911e788bc3942537e28a7f","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"def fake_return_image_metadata_policy(*args, **kwargs):"},{"line_number":78,"context_line":"    return fake_image_metadata_policy"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"class VolumeImagePropsProtectionsTest(test.TestCase):"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a41bdd9_08ff1402","line":78,"in_reply_to":"9a41bdd9_f8013539","updated":"2015-07-20 01:31:31.000000000","message":"Done","commit_id":"5d852f1a47c53939a6218e688005e9b1215b0f19"},{"author":{"_account_id":13636,"name":"aarefiev","display_name":"Anton","email":"arefyevanton@gmail.com","username":"aarefiev"},"change_message_id":"d54d2690f8c7dacee7bcd943c79b2f4cfd9f467f","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def test_update_property_policy_protection(self):"},{"line_number":275,"context_line":"        self.set_property_protections(True)"},{"line_number":276,"context_line":"        self.stubs.Set(volume.API, \u0027get_volume_image_metadata\u0027,"},{"line_number":277,"context_line":"                       fake_return_image_metadata_policy)"},{"line_number":278,"context_line":"        self.stubs.Set(db, \u0027volume_metadata_update\u0027,"},{"line_number":279,"context_line":"                       fake_create_volume_metadata)"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a41bdd9_58914146","line":276,"updated":"2015-07-14 14:56:34.000000000","message":"we are trying to avoid stubs in new tests, please use mock instead.","commit_id":"5d852f1a47c53939a6218e688005e9b1215b0f19"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"84ff4ca0cb03ede018911e788bc3942537e28a7f","unresolved":false,"context_lines":[{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def test_update_property_policy_protection(self):"},{"line_number":275,"context_line":"        self.set_property_protections(True)"},{"line_number":276,"context_line":"        self.stubs.Set(volume.API, \u0027get_volume_image_metadata\u0027,"},{"line_number":277,"context_line":"                       fake_return_image_metadata_policy)"},{"line_number":278,"context_line":"        self.stubs.Set(db, \u0027volume_metadata_update\u0027,"},{"line_number":279,"context_line":"                       fake_create_volume_metadata)"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a41bdd9_2802180a","line":276,"in_reply_to":"9a41bdd9_58914146","updated":"2015-07-20 01:31:31.000000000","message":"Done","commit_id":"5d852f1a47c53939a6218e688005e9b1215b0f19"}],"cinder/tests/unit/api/contrib/test_volume_image_props_protection.py":[{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"bbf72758fa47c02868eed916fd389029e550c1b2","unresolved":false,"context_lines":[{"line_number":283,"context_line":"            }"},{"line_number":284,"context_line":"        }"},{"line_number":285,"context_line":"        req \u003d fakes.HTTPRequest.roles(\u0027/v2/fake/volumes/1/action\u0027,"},{"line_number":286,"context_line":"                                      roles\u003d\u0027admin\u0027)"},{"line_number":287,"context_line":"        req.method \u003d \"POST\""},{"line_number":288,"context_line":"        req.body \u003d jsonutils.dumps(body)"},{"line_number":289,"context_line":"        req.headers[\"content-type\"] \u003d \"application/json\""}],"source_content_type":"text/x-python","patch_set":35,"id":"9a1a9d01_c12ccdad","line":286,"updated":"2015-09-25 14:44:43.000000000","message":"Minor, but since we do the next 3 lines in many of the tests (setting method to \"POST\", convert the POST data, and set the header) it may be worth making small helper","commit_id":"0247749ca1fa826818aad6d7d3344194dbf762f2"}],"cinder/tests/unit/test_property_utils.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"717f34e9a3ae5a24d9abe4e4d21d4e2e97bf30f7","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        self.policy.load_rules()"},{"line_number":379,"context_line":"        self.rules_checker \u003d property_utils.PropertyRules(self.policy)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def tearDown(self):"},{"line_number":382,"context_line":"        super(TestPropertyRulesWithPolicies, self).tearDown()"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    def test_check_property_rules_create_permitted_specific_policy(self):"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a50d1a3_108a6964","line":381,"updated":"2015-07-29 05:26:22.000000000","message":"This is not needed.  Usually you should use addCleanup if you need to do clean up after a test.","commit_id":"288c9c51abd01deecbf0401482a1d08474e1ca24"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"70ca0c1c52bc0a849e66cf63d74551e41e1b54ec","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        self.policy.load_rules()"},{"line_number":379,"context_line":"        self.rules_checker \u003d property_utils.PropertyRules(self.policy)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def tearDown(self):"},{"line_number":382,"context_line":"        super(TestPropertyRulesWithPolicies, self).tearDown()"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    def test_check_property_rules_create_permitted_specific_policy(self):"}],"source_content_type":"text/x-python","patch_set":30,"id":"3a50d1a3_a56572af","line":381,"in_reply_to":"3a50d1a3_108a6964","updated":"2015-07-29 08:27:57.000000000","message":"Done","commit_id":"288c9c51abd01deecbf0401482a1d08474e1ca24"}],"etc/cinder/property-protections-policies.conf.sample":[{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"bbf72758fa47c02868eed916fd389029e550c1b2","unresolved":false,"context_lines":[{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# This file is an example config file for when"},{"line_number":4,"context_line":"# property_protection_rule_format\u003dpolicies is enabled."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"# Specify regular expression for which properties will be protected in []"},{"line_number":7,"context_line":"# For each section, specify CRUD permissions. You may refer to policies defined"},{"line_number":8,"context_line":"# in policy.json."}],"source_content_type":"application/octet-stream","patch_set":35,"id":"9a1a9d01_255354e3","line":5,"updated":"2015-09-25 14:44:43.000000000","message":"Missing \".\" at end of sentance","commit_id":"0247749ca1fa826818aad6d7d3344194dbf762f2"}]}
