)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"85f38b2b70fb7abe673e57f6d7e476fde9a6356c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5942e9f2_f4f266c9","updated":"2023-08-25 10:23:17.000000000","message":"Looks good. Couple of small asks but nothing major.\n\nYou also need to do the following:\n\n- update documentation for the proxy APIs in `doc/source/user/proxies/orchestration.rst`\n- add a release note","commit_id":"27f7f8cc4d532c52503d075f89768d31ba984c87"},{"author":{"_account_id":35933,"name":"Baek Seung Ju","display_name":"Becker","email":"halucinor0@gmail.com","username":"halucinor","status":"developer"},"change_message_id":"36cfe5cf45fe0fb613f2c0e75c5e1e5444c257e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"8b75744c_83d8fe62","updated":"2023-09-01 00:34:58.000000000","message":"LGTM","commit_id":"61b94cdc5f75c16c307bb59d42700c4b87af6ccf"},{"author":{"_account_id":36164,"name":"kim woo seok","display_name":"rladntjr4","email":"rladntjr4@gmail.com","username":"rladntjr4"},"change_message_id":"88a8bd15093f3310222ba9f082e9a4464307423b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"07440986_da47d661","updated":"2023-08-28 17:35:05.000000000","message":"Modify for pep8","commit_id":"61b94cdc5f75c16c307bb59d42700c4b87af6ccf"}],"openstack/orchestration/v1/_proxy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"85f38b2b70fb7abe673e57f6d7e476fde9a6356c","unresolved":true,"context_lines":[{"line_number":234,"context_line":"        if isinstance(stack, _stack.Stack):"},{"line_number":235,"context_line":"            obj \u003d stack"},{"line_number":236,"context_line":"        else:"},{"line_number":237,"context_line":"            obj \u003d self._find(_stack.Stack, stack, ignore_missing\u003dFalse)"},{"line_number":238,"context_line":"        return obj.export(self)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def get_stack_template(self, stack):"}],"source_content_type":"text/x-python","patch_set":4,"id":"38955435_b23a5bfa","line":237,"updated":"2023-08-25 10:23:17.000000000","message":"Oh, this is weird. Normally for proxy APIs we just do\n\n```\nres \u003d self._get_resource(_stack.Stack, stack)\n```\n\nwhich will handle both an stack ID (`str`) and a `Stack` object but not a stack name. However, I see that loads of the below use the latter. I mean, it works, but it adds an API call to determine if it can fetch the resource directly via the provided ID. Also, the docstrings are wrong in this case since `stack` can be an ID, **a name**, or a `Stack` instance.\n\nThis is a bit unrelated but can you add (in a follow-up) a TODO at the top of the file to normalize all of these?","commit_id":"27f7f8cc4d532c52503d075f89768d31ba984c87"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"85f830c04c6054fc64db9b45f0373e74e20e75d6","unresolved":true,"context_lines":[{"line_number":234,"context_line":"        if isinstance(stack, _stack.Stack):"},{"line_number":235,"context_line":"            obj \u003d stack"},{"line_number":236,"context_line":"        else:"},{"line_number":237,"context_line":"            obj \u003d self._find(_stack.Stack, stack, ignore_missing\u003dFalse)"},{"line_number":238,"context_line":"        return obj.export(self)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def get_stack_template(self, stack):"}],"source_content_type":"text/x-python","patch_set":4,"id":"e79added_55de3f96","line":237,"in_reply_to":"08d8eef0_e44b098c","updated":"2023-08-28 10:08:01.000000000","message":"\u003e _get function can find object by it\u0027s name too.\n\nAre you sure? Generally `_get` allows lookup by ID, while `_find` allows lookup by name or ID (by trying ID first, and then listing resources and searching through them to find the name)\n\n\u003e which do you mean normalize is use _get and _get_resource function replace _find function?\n\nYou can do either. You can replace all the `_find` calls with `_get`, or you can replace all the `_get` calls with `_find`. My point is that the functions should behave consistently. At the moment, `export_stack` uses `_find` and allows lookup by name or ID, but `abandon_stack` uses `_get_resource` which only allows lookup by ID.\n\nTo be clear though, this can be done separately. I am only asking for a comment at the top of the file to be added so that we remember to do it eventually. Something like this:\n\n\u003e TODO(rladntjr4): Some of these methods support lookup by ID, while\n\u003e others support lookup by ID or name. We should choose one and use\n\u003e it consistently.\n\n\u003e sorry for my poor english\n\nThank you for the patch 😊","commit_id":"27f7f8cc4d532c52503d075f89768d31ba984c87"},{"author":{"_account_id":36164,"name":"kim woo seok","display_name":"rladntjr4","email":"rladntjr4@gmail.com","username":"rladntjr4"},"change_message_id":"c89d6a84368c2d3f437f04cdc641ff5e37dede0e","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        if isinstance(stack, _stack.Stack):"},{"line_number":235,"context_line":"            obj \u003d stack"},{"line_number":236,"context_line":"        else:"},{"line_number":237,"context_line":"            obj \u003d self._find(_stack.Stack, stack, ignore_missing\u003dFalse)"},{"line_number":238,"context_line":"        return obj.export(self)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def get_stack_template(self, stack):"}],"source_content_type":"text/x-python","patch_set":4,"id":"08d8eef0_e44b098c","line":237,"in_reply_to":"38955435_b23a5bfa","updated":"2023-08-27 03:42:18.000000000","message":"_get function can find object by it\u0027s name too.\nwhich do you mean normalize is use _get and _get_resource function replace _find function?\nsorry for my poor english","commit_id":"27f7f8cc4d532c52503d075f89768d31ba984c87"},{"author":{"_account_id":36164,"name":"kim woo seok","display_name":"rladntjr4","email":"rladntjr4@gmail.com","username":"rladntjr4"},"change_message_id":"3e09d6c1500223221cc88916b4dda117ab30a398","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        if isinstance(stack, _stack.Stack):"},{"line_number":235,"context_line":"            obj \u003d stack"},{"line_number":236,"context_line":"        else:"},{"line_number":237,"context_line":"            obj \u003d self._find(_stack.Stack, stack, ignore_missing\u003dFalse)"},{"line_number":238,"context_line":"        return obj.export(self)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    def get_stack_template(self, stack):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ff3f458_3395abb8","line":237,"in_reply_to":"e79added_55de3f96","updated":"2023-08-28 13:58:51.000000000","message":"It\u0027s my pleasure thanks for review","commit_id":"27f7f8cc4d532c52503d075f89768d31ba984c87"}],"openstack/orchestration/v1/stack.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a6f90f6e41d9959dce1466610518b923037b73cf","unresolved":true,"context_lines":[{"line_number":178,"context_line":"        resp \u003d session.delete(url)"},{"line_number":179,"context_line":"        return resp.json()"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def export(self, session):"},{"line_number":182,"context_line":"        url \u003d utils.urljoin("},{"line_number":183,"context_line":"            self.base_path, self.name, self._get_id(self), \u0027export\u0027"},{"line_number":184,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"5463f849_e4bf3be9","line":181,"updated":"2023-08-28 10:02:06.000000000","message":"Need a docstring","commit_id":"27f7f8cc4d532c52503d075f89768d31ba984c87"},{"author":{"_account_id":36164,"name":"kim woo seok","display_name":"rladntjr4","email":"rladntjr4@gmail.com","username":"rladntjr4"},"change_message_id":"3e09d6c1500223221cc88916b4dda117ab30a398","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        resp \u003d session.delete(url)"},{"line_number":179,"context_line":"        return resp.json()"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def export(self, session):"},{"line_number":182,"context_line":"        url \u003d utils.urljoin("},{"line_number":183,"context_line":"            self.base_path, self.name, self._get_id(self), \u0027export\u0027"},{"line_number":184,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":4,"id":"2b6314cf_b2d65974","line":181,"in_reply_to":"5463f849_e4bf3be9","updated":"2023-08-28 13:58:51.000000000","message":"Ack","commit_id":"27f7f8cc4d532c52503d075f89768d31ba984c87"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"85f38b2b70fb7abe673e57f6d7e476fde9a6356c","unresolved":true,"context_lines":[{"line_number":182,"context_line":"        url \u003d utils.urljoin("},{"line_number":183,"context_line":"            self.base_path, self.name, self._get_id(self), \u0027export\u0027"},{"line_number":184,"context_line":"        )"},{"line_number":185,"context_line":"        resp \u003d session.get(url)"},{"line_number":186,"context_line":"        return resp.json()"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def fetch("}],"source_content_type":"text/x-python","patch_set":4,"id":"24e8a210_dc7fdb2e","line":185,"updated":"2023-08-25 10:23:17.000000000","message":"You\u0027re missing a call to `exceptions.raise_from_response(response)`. Ditto for the above, btw, but they should be addressed separately.","commit_id":"27f7f8cc4d532c52503d075f89768d31ba984c87"},{"author":{"_account_id":36164,"name":"kim woo seok","display_name":"rladntjr4","email":"rladntjr4@gmail.com","username":"rladntjr4"},"change_message_id":"c89d6a84368c2d3f437f04cdc641ff5e37dede0e","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        url \u003d utils.urljoin("},{"line_number":183,"context_line":"            self.base_path, self.name, self._get_id(self), \u0027export\u0027"},{"line_number":184,"context_line":"        )"},{"line_number":185,"context_line":"        resp \u003d session.get(url)"},{"line_number":186,"context_line":"        return resp.json()"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def fetch("}],"source_content_type":"text/x-python","patch_set":4,"id":"1ccdd004_42571b60","line":185,"in_reply_to":"24e8a210_dc7fdb2e","updated":"2023-08-27 03:42:18.000000000","message":"Ack","commit_id":"27f7f8cc4d532c52503d075f89768d31ba984c87"}]}
