)]}'
{"oslo_limit/limit.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"9078d42e832d0ef4be80107e373f406e8988749e","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _get_enforcement_model(self):"},{"line_number":76,"context_line":"        \"\"\"Query keystone for the configured enforcement model.\"\"\""},{"line_number":77,"context_line":"        return self.connection.get(\u0027/limits/model\u0027).json()[\u0027model\u0027][\u0027name\u0027]"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _set_enforcement_model(self):"},{"line_number":80,"context_line":"        \"\"\"Set the enforcement model based on configured model in keystone.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_6bccb434","line":77,"updated":"2019-06-27 22:52:11.000000000","message":"This should get pushed into the parent patch (or we should wait to merge this until this is supported properly in openstacksdk)","commit_id":"56dec2a62a60722bd66a6c4e96a924b08e98204c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6049a61115496e6a0d5e1345f9b85142f4dcc1be","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _get_enforcement_model(self):"},{"line_number":76,"context_line":"        \"\"\"Query keystone for the configured enforcement model.\"\"\""},{"line_number":77,"context_line":"        return self.connection.get(\u0027/limits/model\u0027).json()[\u0027model\u0027][\u0027name\u0027]"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    def _set_enforcement_model(self):"},{"line_number":80,"context_line":"        \"\"\"Set the enforcement model based on configured model in keystone.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_cd182f1f","line":77,"in_reply_to":"9fb8cfa7_6bccb434","updated":"2019-07-01 16:44:32.000000000","message":"Done","commit_id":"56dec2a62a60722bd66a6c4e96a924b08e98204c"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"9078d42e832d0ef4be80107e373f406e8988749e","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        endpoint \u003d self.connection.get_endpoint(CONF.oslo_limit.endpoint_id)"},{"line_number":167,"context_line":"        return endpoint[\u0027service_id\u0027], endpoint[\u0027region_id\u0027]"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def _fetch_project_limits(self, project_id):"},{"line_number":170,"context_line":"        # FIXME(lbragstad): The service_id and region_id should probably be"},{"line_number":171,"context_line":"        # cached"},{"line_number":172,"context_line":"        service_id, region_id \u003d self._resolve_service_from_endpoint()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_ab486cb2","line":169,"range":{"start_line":169,"start_character":36,"end_line":169,"end_character":46},"updated":"2019-06-27 22:52:11.000000000","message":"This could just use self.project_id instead of being an argument","commit_id":"56dec2a62a60722bd66a6c4e96a924b08e98204c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"cbf8421a25e224d134d1fc76cd5dd81bb04f2b1a","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        endpoint \u003d self.connection.get_endpoint(CONF.oslo_limit.endpoint_id)"},{"line_number":167,"context_line":"        return endpoint[\u0027service_id\u0027], endpoint[\u0027region_id\u0027]"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def _fetch_project_limits(self, project_id):"},{"line_number":170,"context_line":"        # FIXME(lbragstad): The service_id and region_id should probably be"},{"line_number":171,"context_line":"        # cached"},{"line_number":172,"context_line":"        service_id, region_id \u003d self._resolve_service_from_endpoint()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_52093e81","line":169,"range":{"start_line":169,"start_character":36,"end_line":169,"end_character":46},"in_reply_to":"9fb8cfa7_8db9d7cc","updated":"2019-11-25 12:35:44.000000000","message":"I have gone for this approach:\nhttps://review.opendev.org/#/c/695527\n\nFor me I think its bad that you set project_id as an instance property, as it is badly shared between multiple calls into the enforcer, but maybe my expections of what the client is doing are different?","commit_id":"56dec2a62a60722bd66a6c4e96a924b08e98204c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6049a61115496e6a0d5e1345f9b85142f4dcc1be","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        endpoint \u003d self.connection.get_endpoint(CONF.oslo_limit.endpoint_id)"},{"line_number":167,"context_line":"        return endpoint[\u0027service_id\u0027], endpoint[\u0027region_id\u0027]"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    def _fetch_project_limits(self, project_id):"},{"line_number":170,"context_line":"        # FIXME(lbragstad): The service_id and region_id should probably be"},{"line_number":171,"context_line":"        # cached"},{"line_number":172,"context_line":"        service_id, region_id \u003d self._resolve_service_from_endpoint()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_8db9d7cc","line":169,"range":{"start_line":169,"start_character":36,"end_line":169,"end_character":46},"in_reply_to":"9fb8cfa7_ab486cb2","updated":"2019-07-01 16:44:32.000000000","message":"Maybe. I guess it depends on the enforcement model? If we\u0027re using a hierarchical one, we might need to iterate over all the projects in a tree.","commit_id":"56dec2a62a60722bd66a6c4e96a924b08e98204c"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"9078d42e832d0ef4be80107e373f406e8988749e","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        current_usage \u003d self.usage_callback(self.project_id)"},{"line_number":193,"context_line":"        checked_usage \u003d current_usage.copy()"},{"line_number":194,"context_line":"        for resource, usage in current_usage.items():"},{"line_number":195,"context_line":"            for limit in self._fetch_project_limits(self.project_id):"},{"line_number":196,"context_line":"                if limit[\u0027resource_name\u0027] !\u003d resource:"},{"line_number":197,"context_line":"                    continue"},{"line_number":198,"context_line":"                if usage + deltas[resource] \u003c\u003d limit[\u0027resource_limit\u0027]:"},{"line_number":199,"context_line":"                    del checked_usage[resource]"},{"line_number":200,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_8b1fa8b5","line":197,"range":{"start_line":195,"start_character":12,"end_line":197,"end_character":28},"updated":"2019-06-27 22:52:11.000000000","message":"This seems inefficient. Is  there some way we could transform the list of project limits into a dictionary indexed by the resource name?","commit_id":"56dec2a62a60722bd66a6c4e96a924b08e98204c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6049a61115496e6a0d5e1345f9b85142f4dcc1be","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        current_usage \u003d self.usage_callback(self.project_id)"},{"line_number":193,"context_line":"        checked_usage \u003d current_usage.copy()"},{"line_number":194,"context_line":"        for resource, usage in current_usage.items():"},{"line_number":195,"context_line":"            for limit in self._fetch_project_limits(self.project_id):"},{"line_number":196,"context_line":"                if limit[\u0027resource_name\u0027] !\u003d resource:"},{"line_number":197,"context_line":"                    continue"},{"line_number":198,"context_line":"                if usage + deltas[resource] \u003c\u003d limit[\u0027resource_limit\u0027]:"},{"line_number":199,"context_line":"                    del checked_usage[resource]"},{"line_number":200,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fb8cfa7_0dcde764","line":197,"range":{"start_line":195,"start_character":12,"end_line":197,"end_character":28},"in_reply_to":"9fb8cfa7_8b1fa8b5","updated":"2019-07-01 16:44:32.000000000","message":"Yeah - this is all hacked together. I\u0027ll see if I can use a dict.","commit_id":"56dec2a62a60722bd66a6c4e96a924b08e98204c"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"e836229936ba22a566ff405981669ad6c3783073","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                                 no resources will be filtered."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        \"\"\""},{"line_number":130,"context_line":"        if not isinstance(project_id, six.text_type):"},{"line_number":131,"context_line":"            msg \u003d \u0027project_id must be a string.\u0027"},{"line_number":132,"context_line":"            raise ValueError(msg)"},{"line_number":133,"context_line":"        if not isinstance(deltas, dict):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7faddb67_1a218da0","line":130,"range":{"start_line":130,"start_character":38,"end_line":130,"end_character":51},"updated":"2019-07-03 20:08:11.000000000","message":"Note that this causes problems on python2 with example.py because it uses py2 strs. It should probably be string_types here, but since I don\u0027t expect anyone to adopt this until U we maybe don\u0027t have to care about py2 compatibility.","commit_id":"f5f66d120acb65f0a66c741534a285b1e75745b5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"85f494e1475d570d7b879ec509ed26aa15642a96","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        self.model.project_id \u003d project_id"},{"line_number":147,"context_line":"        self.model.usage_callback \u003d self.usage_callback"},{"line_number":148,"context_line":"        self.model.connection \u003d self.connection"},{"line_number":149,"context_line":"        self.model.enforce(deltas, resource_filters\u003dresource_filters)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9fb8cfa7_1b818bfc","line":148,"updated":"2019-07-02 17:16:23.000000000","message":"I probably should pull this into the previous patch. It\u0027s not specific to the flat enforcement logic.","commit_id":"f5f66d120acb65f0a66c741534a285b1e75745b5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dd4f51486213ada3e9a323b4854d6f4f9bae5e3e","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        checked_usage \u003d current_usage.copy()"},{"line_number":192,"context_line":"        for resource, usage in current_usage.items():"},{"line_number":193,"context_line":"            for limit in self._fetch_project_limits(self.project_id):"},{"line_number":194,"context_line":"                if limit[\u0027resource_name\u0027] !\u003d resource:"},{"line_number":195,"context_line":"                    continue"},{"line_number":196,"context_line":"                if usage + deltas[resource] \u003c\u003d limit[\u0027resource_limit\u0027]:"},{"line_number":197,"context_line":"                    del checked_usage[resource]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fb8cfa7_cdf02f94","line":194,"updated":"2019-07-01 16:47:31.000000000","message":"WIP: Find a better way to deal with this (cmurphy\u0027s comment from ps2).","commit_id":"f5f66d120acb65f0a66c741534a285b1e75745b5"}]}
