)]}'
{"oslo_policy/opts.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5fedc969db0238d04222813d4d1ae17ba33790ff","unresolved":false,"context_lines":[{"line_number":29,"context_line":"               default\u003d\u0027policy.json\u0027,"},{"line_number":30,"context_line":"               help\u003d_(\u0027The JSON file that defines policies.\u0027),"},{"line_number":31,"context_line":"               deprecated_group\u003d\u0027DEFAULT\u0027),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027dynamic_policy_path\u0027,"},{"line_number":33,"context_line":"               default\u003dNone,"},{"line_number":34,"context_line":"               help\u003d_(\u0027The path of the JSON file that defines the Dynamic \u0027"},{"line_number":35,"context_line":"                      \u0027Policy.\u0027)),"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_54b401d3","line":32,"updated":"2015-09-09 03:45:11.000000000","message":"use centralized policy","commit_id":"28e8efcfeb5259976c2c2fbd63277ef5eccef114"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5fedc969db0238d04222813d4d1ae17ba33790ff","unresolved":false,"context_lines":[{"line_number":31,"context_line":"               deprecated_group\u003d\u0027DEFAULT\u0027),"},{"line_number":32,"context_line":"    cfg.StrOpt(\u0027dynamic_policy_path\u0027,"},{"line_number":33,"context_line":"               default\u003dNone,"},{"line_number":34,"context_line":"               help\u003d_(\u0027The path of the JSON file that defines the Dynamic \u0027"},{"line_number":35,"context_line":"                      \u0027Policy.\u0027)),"},{"line_number":36,"context_line":"    cfg.StrOpt(\u0027policy_default_rule\u0027,"},{"line_number":37,"context_line":"               default\u003d\u0027default\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_14ae8981","line":34,"updated":"2015-09-09 03:45:11.000000000","message":"i\u0027m a bit confused here, are you expecting this value to be the same as the one for policy_file? what is a typical value you would use?","commit_id":"28e8efcfeb5259976c2c2fbd63277ef5eccef114"}],"oslo_policy/policy.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d768ea21fdb923de1da6b08ba83e1b35a1ebb906","unresolved":false,"context_lines":[{"line_number":340,"context_line":"        self.policy_path \u003d None"},{"line_number":341,"context_line":"        self.dynamic_policy_path \u003d self.conf.oslo_policy.dynamic_policy_path"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        if (self.dynamic_policy_path is not None and"},{"line_number":344,"context_line":"           not os.path.isfile(self.dynamic_policy_path)):"},{"line_number":345,"context_line":"            # Initialize the Dynamic Policy file atomically"},{"line_number":346,"context_line":"            f \u003d open(self.dynamic_policy_path + \u0027.tmp\u0027, \u0027w\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_a5989a6b","line":343,"updated":"2015-08-26 14:40:45.000000000","message":"Why are we doing this logic in the __init__? I\u0027d rather have the thing that reads the policy be able to deal with it if the file doesn\u0027t exist.","commit_id":"28e8efcfeb5259976c2c2fbd63277ef5eccef114"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"ee3139f2a0ed4aa06daefb559310349df873a634","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        if (self.dynamic_policy_path is not None and"},{"line_number":344,"context_line":"           not os.path.isfile(self.dynamic_policy_path)):"},{"line_number":345,"context_line":"            # Initialize the Dynamic Policy file atomically"},{"line_number":346,"context_line":"            f \u003d open(self.dynamic_policy_path + \u0027.tmp\u0027, \u0027w\u0027)"},{"line_number":347,"context_line":"            f.write(\u0027{}\u0027)"},{"line_number":348,"context_line":"            f.flush()"},{"line_number":349,"context_line":"            os.fsync(f.fileno())"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_1915c4e3","line":346,"updated":"2015-08-20 18:10:30.000000000","message":"Can\u0027t assume file open will be a success.","commit_id":"28e8efcfeb5259976c2c2fbd63277ef5eccef114"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d768ea21fdb923de1da6b08ba83e1b35a1ebb906","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        if (self.dynamic_policy_path is not None and"},{"line_number":344,"context_line":"           not os.path.isfile(self.dynamic_policy_path)):"},{"line_number":345,"context_line":"            # Initialize the Dynamic Policy file atomically"},{"line_number":346,"context_line":"            f \u003d open(self.dynamic_policy_path + \u0027.tmp\u0027, \u0027w\u0027)"},{"line_number":347,"context_line":"            f.write(\u0027{}\u0027)"},{"line_number":348,"context_line":"            f.flush()"},{"line_number":349,"context_line":"            os.fsync(f.fileno())"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_3631380c","line":346,"in_reply_to":"fa1b9901_1915c4e3","updated":"2015-08-26 14:40:45.000000000","message":"++ use \u0027with\u0027","commit_id":"28e8efcfeb5259976c2c2fbd63277ef5eccef114"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d768ea21fdb923de1da6b08ba83e1b35a1ebb906","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        if self.dynamic_policy_path:"},{"line_number":416,"context_line":"            # Override existing rules with the Dynamic Policy rules"},{"line_number":417,"context_line":"            self._load_policy_file(self.dynamic_policy_path, force_reload,"},{"line_number":418,"context_line":"                                   False)"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    def update_dynamic_policy(self, dynamic_policy):"},{"line_number":421,"context_line":"        \"\"\"Atomically writes Dynamic Policy rules to file.\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_45edfeb5","line":418,"updated":"2015-08-26 14:40:45.000000000","message":"suggest: overwrite\u003dFalse since we defined that as a kwarg.","commit_id":"28e8efcfeb5259976c2c2fbd63277ef5eccef114"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"c85598d9d8c0c820475fd5dfd7937be1eeb8b460","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        \"\"\"Atomically writes Dynamic Policy rules to file.\"\"\""},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        if self.dynamic_policy_path:"},{"line_number":424,"context_line":"            f \u003d open(self.dynamic_policy_path + \u0027.tmp\u0027, \u0027w\u0027)"},{"line_number":425,"context_line":"            f.write(jsonutils.dumps(dynamic_policy, indent\u003d4))"},{"line_number":426,"context_line":"            f.flush()"},{"line_number":427,"context_line":"            os.fsync(f.fileno())"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_87e8ec7d","line":424,"updated":"2015-07-27 10:35:35.000000000","message":"with not wrap it with some sort of try/except/finally or with stetement?","commit_id":"28e8efcfeb5259976c2c2fbd63277ef5eccef114"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d768ea21fdb923de1da6b08ba83e1b35a1ebb906","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        \"\"\"Atomically writes Dynamic Policy rules to file.\"\"\""},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"        if self.dynamic_policy_path:"},{"line_number":424,"context_line":"            f \u003d open(self.dynamic_policy_path + \u0027.tmp\u0027, \u0027w\u0027)"},{"line_number":425,"context_line":"            f.write(jsonutils.dumps(dynamic_policy, indent\u003d4))"},{"line_number":426,"context_line":"            f.flush()"},{"line_number":427,"context_line":"            os.fsync(f.fileno())"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_25db2a1d","line":424,"in_reply_to":"3a50d1a3_87e8ec7d","updated":"2015-08-26 14:40:45.000000000","message":"Use the context manager if you can. Also you may want to think about a locking strategy so you don\u0027t have lots of things competing to write to this file.","commit_id":"28e8efcfeb5259976c2c2fbd63277ef5eccef114"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d768ea21fdb923de1da6b08ba83e1b35a1ebb906","unresolved":false,"context_lines":[{"line_number":429,"context_line":""},{"line_number":430,"context_line":"            os.rename(f.name, self.dynamic_policy_path)"},{"line_number":431,"context_line":"        else:"},{"line_number":432,"context_line":"            LOG.error(\u0027Cannot write to Dynamic Policy file. \u0027"},{"line_number":433,"context_line":"                      \u0027dynamic_policy_path must be specified in oslo config.\u0027)"},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_85c5563e","line":432,"updated":"2015-08-26 14:40:45.000000000","message":"i18n?","commit_id":"28e8efcfeb5259976c2c2fbd63277ef5eccef114"}]}
