)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"baf17901c61c2cdf2e5d45e401468aee6d92e72d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7a3c4ac9_ca698edc","updated":"2022-11-25 11:44:38.000000000","message":"Hi, thank you for the so fast handling this issue.\nI have several minor comments, which I did during the same fixing :) \nhowever I have not known some nuances, like special handling for healthmanager.\nCould we also backport this fix to yoga release? ","commit_id":"73b88230bb4724e762abd3eb914570509e2b0e4d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a3dc2ec745d3f5bc0b68fb3c4f20461b3a00cba0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b5fe6b0d_cd151148","in_reply_to":"7a3c4ac9_ca698edc","updated":"2022-11-30 19:38:19.000000000","message":"I think this is a backport candidate, but we will see what the other cores think.","commit_id":"73b88230bb4724e762abd3eb914570509e2b0e4d"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"26218015a614f4664d9974af8ba1ffbbfd61df74","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"130ac719_1d934898","updated":"2022-12-01 09:32:14.000000000","message":"Do we need to ping other core reviewers directly? or in the IRC? ","commit_id":"8a8648827fba524c34688b4ff701913699793bf2"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"da6ad0625c7f41f7d46b339b65c95ddee808e307","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"0685888c_be50c96f","updated":"2022-12-01 09:08:56.000000000","message":"LGTM.","commit_id":"8a8648827fba524c34688b4ff701913699793bf2"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"f02ebd1226bfa118b92b0d67ff1e0d0036ce5ae2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3a8d1831_8be8b82c","in_reply_to":"130ac719_1d934898","updated":"2022-12-01 11:42:59.000000000","message":"Feel free to ping us here or on IRC if you think we should prioritize the review, but usually that should not be necessary.","commit_id":"8a8648827fba524c34688b4ff701913699793bf2"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"7bc893c72aa0cfb7c8fec180c8f7f7ae46db1c77","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"3376445f_758bada3","in_reply_to":"3a8d1831_8be8b82c","updated":"2022-12-01 14:43:49.000000000","message":"I agree, that usually it works well. I just worried, that some bug fixes could be \"invisible\" in long review queue. Now, when I see your message, I know, that it will not happen :)","commit_id":"8a8648827fba524c34688b4ff701913699793bf2"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"fbe7b92bd68e0f1d01a79d0169ccfa83b11b9171","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"0cd5bba7_8b5f629c","updated":"2022-12-27 10:25:42.000000000","message":"+1 because the code seems good, but as Gregory pointed out the docs need to be updated.","commit_id":"2e14db7f6cc98214ed1c97f429d359116d69da7d"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"b521df293142c89decd8e71920b82c22afe14be5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"6035789f_5f8cddd4","updated":"2022-12-14 08:23:53.000000000","message":"I also found, that last patch set has not octavia/tests/unit/api/test_config.py.\nis it expected or was lost during last update?\nalso two tests were removed:\ntest_json_plain_wildcard_accept_header\nand test_json_wildcard_accept_header .","commit_id":"2e14db7f6cc98214ed1c97f429d359116d69da7d"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"2114679869cc88eaaafcd264cb8a0f19ac334c50","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"971cb93c_f3dde021","updated":"2022-12-22 07:53:30.000000000","message":"Probably not related to your patch, but I noticed that\n\n$ curl -v -X GET -H \u0027Accept: text/plain\u0027 http://192.168.1.101/load-balancer/healthcheck\ndoesn\u0027t work, it returns:\n\n* Mark bundle as not supporting multiuse\n\u003c HTTP/1.1 406 Not Acceptable\n\u003c Date: Thu, 22 Dec 2022 07:30:58 GMT\n\u003c Server: Apache/2.4.53 (CentOS Stream) OpenSSL/3.0.7 mod_wsgi/4.7.1 Python/3.9\n\u003c Content-Length: 124\n\u003c Content-Type: text/plain; charset\u003dUTF-8\n\u003c x-openstack-request-id: req-755ece58-96a1-4ae8-9379-3013b5c92e83\n\u003c Connection: close\n\u003c \n406 Not Acceptable\n\nThe resource could not be generated that was acceptable to your browser (content of type text/plain. \n\n\n$ curl -v http://192.168.1.101/load-balancer/healthcheck\nreturns\n\u003c HTTP/1.1 204 No Content\n\u003c Date: Thu, 22 Dec 2022 07:32:32 GMT\n\u003c Server: Apache/2.4.53 (CentOS Stream) OpenSSL/3.0.7 mod_wsgi/4.7.1 Python/3.9\n\u003c x-openstack-request-id: req-1c23562d-275d-4b1e-af02-d37786e0c58b\n\u003c Connection: close\n\nit looks fine (based on oslo docs) but our doc needs to be updated:\nhttps://docs.openstack.org/octavia/latest/admin/healthcheck.html#example-responses\n","commit_id":"2e14db7f6cc98214ed1c97f429d359116d69da7d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"80a2b16792b1b440617638b451637e1270cbb054","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"268a5b8b_0758b059","updated":"2023-01-11 14:54:43.000000000","message":"recheck\nLet\u0027s get new logs","commit_id":"2e14db7f6cc98214ed1c97f429d359116d69da7d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"eacbd5c20d4157f89b7d20172626d4e05a6b4699","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"21ed0787_0ee6eb57","in_reply_to":"971cb93c_f3dde021","updated":"2023-02-16 23:22:39.000000000","message":"There is already a note in the documentation about the 204 response when you don\u0027t have any backends enabled.\n\nThe 406 response was there before this patch. I will investigate that and see if there is an oslo middleware bug.","commit_id":"2e14db7f6cc98214ed1c97f429d359116d69da7d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d3c3ffa48522e6582938f8165b9b0ad26aa68648","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"a7e9663c_52c75cac","updated":"2023-03-07 02:04:56.000000000","message":"Hi, \n\nThis broke a voting test job in openstacksdk - deletion of load balancer always fails with 406. \n\nJob results from a recent run: https://661f604f008274ea21e9-38c02a6f4c2535c3f3f9bfdb5440d261.ssl.cf2.rackcdn.com/873363/8/check/openstacksdk-functional-devstack-networking/84ec8fa/testr_results.html\n\nExample traceback:\n\n Traceback (most recent call last):\n  File \"/home/zuul/src/opendev.org/openstack/openstacksdk/openstack/tests/functional/load_balancer/v2/test_load_balancer.py\", line 236, in tearDown\n    self.conn.load_balancer.delete_load_balancer(\n  File \"/home/zuul/src/opendev.org/openstack/openstacksdk/openstack/load_balancer/v2/_proxy.py\", line 114, in delete_load_balancer\n    return self._delete(_lb.LoadBalancer, load_balancer,\n  File \"/home/zuul/src/opendev.org/openstack/openstacksdk/openstack/proxy.py\", line 64, in check\n    return method(self, expected, actual, *args, **kwargs)\n  File \"/home/zuul/src/opendev.org/openstack/openstacksdk/openstack/proxy.py\", line 536, in _delete\n    rv \u003d res.delete(self)\n  File \"/home/zuul/src/opendev.org/openstack/openstacksdk/openstack/load_balancer/v2/load_balancer.py\", line 91, in delete\n    self._translate_response(response, has_body\u003dFalse,\n  File \"/home/zuul/src/opendev.org/openstack/openstacksdk/openstack/resource.py\", line 1253, in _translate_response\n    exceptions.raise_from_response(response, error_message\u003derror_message)\n  File \"/home/zuul/src/opendev.org/openstack/openstacksdk/openstack/exceptions.py\", line 240, in raise_from_response\n    raise cls(\nopenstack.exceptions.HttpException: HttpException: 406: Client Error for url: http://10.210.192.18/load-balancer/v2.0/lbaas/loadbalancers/cfc6cfb1-dfbe-42b7-a6c8-b3980760293e, Not Acceptable","commit_id":"c0e550245a3e17c75dfce9817c61be629162bc7d"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"45b26eb07617b805d2d0043665982a39eacd0894","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"64d79cb9_2807e4b5","in_reply_to":"2ed6b524_07b4e7fb","updated":"2023-03-07 07:41:42.000000000","message":"I proposed https://review.opendev.org/c/openstack/openstacksdk/+/876669","commit_id":"c0e550245a3e17c75dfce9817c61be629162bc7d"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"8d5d0e91ef6f78c9cf7fdef47703828e8f51d71a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"2ed6b524_07b4e7fb","in_reply_to":"a7e9663c_52c75cac","updated":"2023-03-07 07:30:44.000000000","message":"Hi, thanks for reporting it,\n\nIt seems that only the deletion of a load balancer is impacted here,\nThe empty Accept header in LoadBalancer.delete is the cause of the bug:\nhttps://opendev.org/openstack/openstacksdk/src/branch/master/openstack/load_balancer/v2/load_balancer.py#L79\n\nSetting it to \"*/*\" fixes this issue\n\nSo I think the openstacksdk code should be fixed\nBut we also need to clarify if Octavia should accept empty Accept headers (consider them as the same as \"*/*\") or if it should reject them.","commit_id":"c0e550245a3e17c75dfce9817c61be629162bc7d"}],"octavia/api/common/hooks.py":[{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"baf17901c61c2cdf2e5d45e401468aee6d92e72d","unresolved":true,"context_lines":[{"line_number":37,"context_line":"                # The API reference says we always respond with JSON"},{"line_number":38,"context_line":"                state.request.accept \u003d acceptparse.create_accept_header("},{"line_number":39,"context_line":"                    constants.APPLICATION_JSON)"},{"line_number":40,"context_line":"                msg \u003d _(\u0027Only content type %s is accepted.\u0027)"},{"line_number":41,"context_line":"                raise exc.HTTPNotAcceptable("},{"line_number":42,"context_line":"                    msg % constants.APPLICATION_JSON,"},{"line_number":43,"context_line":"                    json_formatter\u003dutils.json_error_formatter)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bdab8e4d_6bf8e15a","line":40,"updated":"2022-11-25 11:44:38.000000000","message":"I suggest to reformat this message a little bit, because as we write in the doc now: `header that is compatible with ``application/json```.\nSo it will be more correct to say in error message:\n\u0027Only content type compatible with %s is accepted\u0027. For example \u0027*/*\u0027 should work here as well","commit_id":"73b88230bb4724e762abd3eb914570509e2b0e4d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a3dc2ec745d3f5bc0b68fb3c4f20461b3a00cba0","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                # The API reference says we always respond with JSON"},{"line_number":38,"context_line":"                state.request.accept \u003d acceptparse.create_accept_header("},{"line_number":39,"context_line":"                    constants.APPLICATION_JSON)"},{"line_number":40,"context_line":"                msg \u003d _(\u0027Only content type %s is accepted.\u0027)"},{"line_number":41,"context_line":"                raise exc.HTTPNotAcceptable("},{"line_number":42,"context_line":"                    msg % constants.APPLICATION_JSON,"},{"line_number":43,"context_line":"                    json_formatter\u003dutils.json_error_formatter)"}],"source_content_type":"text/x-python","patch_set":2,"id":"a88c615e_8807945e","line":40,"in_reply_to":"bdab8e4d_6bf8e15a","updated":"2022-11-30 19:38:19.000000000","message":"Done","commit_id":"73b88230bb4724e762abd3eb914570509e2b0e4d"},{"author":{"_account_id":29244,"name":"Gregory Thiemonge","email":"gthiemon@redhat.com","username":"gthiemonge"},"change_message_id":"986748363ab83289e170bcd9e2e6eca8ed5ae8ac","unresolved":true,"context_lines":[{"line_number":28,"context_line":"    def on_route(self, state):"},{"line_number":29,"context_line":"        # Oslo healthcheck middleware has its own content type handling"},{"line_number":30,"context_line":"        # so we need to bypass the Octavia content type restrictions."},{"line_number":31,"context_line":"        if state.request.path \u003d\u003d constants.API_HEALTHCHECK_PATH:"},{"line_number":32,"context_line":"            return"},{"line_number":33,"context_line":"        if state.request.accept:"},{"line_number":34,"context_line":"            best_matches \u003d state.request.accept.acceptable_offers("}],"source_content_type":"text/x-python","patch_set":3,"id":"9143de0e_f6423b1f","line":31,"range":{"start_line":31,"start_character":11,"end_line":31,"end_character":63},"updated":"2022-12-02 13:41:04.000000000","message":"it doesn\u0027t work in my devstack env, state.request.path is \"/load-balancer/healthcheck\"","commit_id":"8a8648827fba524c34688b4ff701913699793bf2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"8eb8a7f15eb3933764d8198bace68ae640468022","unresolved":true,"context_lines":[{"line_number":28,"context_line":"    def on_route(self, state):"},{"line_number":29,"context_line":"        # Oslo healthcheck middleware has its own content type handling"},{"line_number":30,"context_line":"        # so we need to bypass the Octavia content type restrictions."},{"line_number":31,"context_line":"        if state.request.path \u003d\u003d constants.API_HEALTHCHECK_PATH:"},{"line_number":32,"context_line":"            return"},{"line_number":33,"context_line":"        if state.request.accept:"},{"line_number":34,"context_line":"            best_matches \u003d state.request.accept.acceptable_offers("}],"source_content_type":"text/x-python","patch_set":3,"id":"f6da49af_40b5b2fb","line":31,"range":{"start_line":31,"start_character":11,"end_line":31,"end_character":63},"in_reply_to":"9143de0e_f6423b1f","updated":"2022-12-07 22:03:39.000000000","message":"Yep, I see we had to work around this issue (port vs. path endpoints) for the keystone noauth setting too.  Fixed.","commit_id":"8a8648827fba524c34688b4ff701913699793bf2"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"ed2672d3afafc2b9ecf8cd517d9cb3aca49ecaa4","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def on_route(self, state):"},{"line_number":29,"context_line":"        # Oslo healthcheck middleware has its own content type handling"},{"line_number":30,"context_line":"        # so we need to bypass the Octavia content type restrictions."},{"line_number":31,"context_line":"        if state.request.path \u003d\u003d constants.API_HEALTHCHECK_PATH:"},{"line_number":32,"context_line":"            return"},{"line_number":33,"context_line":"        if state.request.accept:"},{"line_number":34,"context_line":"            best_matches \u003d state.request.accept.acceptable_offers("}],"source_content_type":"text/x-python","patch_set":3,"id":"c4d742e1_f14309f9","line":31,"range":{"start_line":31,"start_character":11,"end_line":31,"end_character":63},"in_reply_to":"f6da49af_40b5b2fb","updated":"2022-12-07 22:05:19.000000000","message":"Done","commit_id":"8a8648827fba524c34688b4ff701913699793bf2"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"ae5d27fce1843dd096d79630e3819b816c6004ea","unresolved":true,"context_lines":[{"line_number":30,"context_line":"    def on_route(self, state):"},{"line_number":31,"context_line":"        # Oslo healthcheck middleware has its own content type handling"},{"line_number":32,"context_line":"        # so we need to bypass the Octavia content type restrictions."},{"line_number":33,"context_line":"        if state.request.path in _HEALTHCHECK_PATHS:"},{"line_number":34,"context_line":"            return"},{"line_number":35,"context_line":"        if state.request.accept:"},{"line_number":36,"context_line":"            best_matches \u003d state.request.accept.acceptable_offers("}],"source_content_type":"text/x-python","patch_set":5,"id":"bc7844f0_d510c496","line":33,"updated":"2022-12-09 08:08:36.000000000","message":"could we just use naive validation, like:\n```\nif \u0027healthcheck\u0027 in state.request.path:\n```","commit_id":"2e14db7f6cc98214ed1c97f429d359116d69da7d"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"6970304866f50b122902ec8e826478bf6388f1e7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def on_route(self, state):"},{"line_number":31,"context_line":"        # Oslo healthcheck middleware has its own content type handling"},{"line_number":32,"context_line":"        # so we need to bypass the Octavia content type restrictions."},{"line_number":33,"context_line":"        if state.request.path in _HEALTHCHECK_PATHS:"},{"line_number":34,"context_line":"            return"},{"line_number":35,"context_line":"        if state.request.accept:"},{"line_number":36,"context_line":"            best_matches \u003d state.request.accept.acceptable_offers("}],"source_content_type":"text/x-python","patch_set":5,"id":"39030ce0_d4670a40","line":33,"in_reply_to":"3943389a_5d47dc2b","updated":"2023-02-17 09:34:02.000000000","message":"Ack","commit_id":"2e14db7f6cc98214ed1c97f429d359116d69da7d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"eacbd5c20d4157f89b7d20172626d4e05a6b4699","unresolved":true,"context_lines":[{"line_number":30,"context_line":"    def on_route(self, state):"},{"line_number":31,"context_line":"        # Oslo healthcheck middleware has its own content type handling"},{"line_number":32,"context_line":"        # so we need to bypass the Octavia content type restrictions."},{"line_number":33,"context_line":"        if state.request.path in _HEALTHCHECK_PATHS:"},{"line_number":34,"context_line":"            return"},{"line_number":35,"context_line":"        if state.request.accept:"},{"line_number":36,"context_line":"            best_matches \u003d state.request.accept.acceptable_offers("}],"source_content_type":"text/x-python","patch_set":5,"id":"3943389a_5d47dc2b","line":33,"in_reply_to":"bc7844f0_d510c496","updated":"2023-02-16 23:22:39.000000000","message":"I would prefer to be as specific as possible so that it doesn\u0027t match some other path in future versions of the application.","commit_id":"2e14db7f6cc98214ed1c97f429d359116d69da7d"}],"octavia/api/common/utils.py":[{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"710a07a427bc5e1b75f1948a470597e43ee4ed04","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    body \u003d webob.exc.strip_tags(body)"},{"line_number":30,"context_line":"    # Get status code out of status message. webob\u0027s error formatter"},{"line_number":31,"context_line":"    # only passes entire status string."},{"line_number":32,"context_line":"    status_code \u003d int(status.split(None, 1)[0])"},{"line_number":33,"context_line":"    error_dict \u003d {"},{"line_number":34,"context_line":"        constants.STATUS: status_code,"},{"line_number":35,"context_line":"        constants.TITLE: title,"}],"source_content_type":"text/x-python","patch_set":3,"id":"173e0a03_0f207a97","line":32,"range":{"start_line":32,"start_character":18,"end_line":32,"end_character":47},"updated":"2022-12-01 11:40:15.000000000","message":"Why not simply int(status)?","commit_id":"8a8648827fba524c34688b4ff701913699793bf2"},{"author":{"_account_id":34429,"name":"Tom Weininger","email":"dienste@weinimo.de","username":"tweining"},"change_message_id":"4edec2f5a939bc0ce208b24e997b0b599832ab74","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    body \u003d webob.exc.strip_tags(body)"},{"line_number":30,"context_line":"    # Get status code out of status message. webob\u0027s error formatter"},{"line_number":31,"context_line":"    # only passes entire status string."},{"line_number":32,"context_line":"    status_code \u003d int(status.split(None, 1)[0])"},{"line_number":33,"context_line":"    error_dict \u003d {"},{"line_number":34,"context_line":"        constants.STATUS: status_code,"},{"line_number":35,"context_line":"        constants.TITLE: title,"}],"source_content_type":"text/x-python","patch_set":3,"id":"893ef7a9_dcaf0800","line":32,"range":{"start_line":32,"start_character":18,"end_line":32,"end_character":47},"in_reply_to":"173e0a03_0f207a97","updated":"2022-12-01 17:04:51.000000000","message":"I should have looked up the official documentation of split() to see what None does. It seems fine.","commit_id":"8a8648827fba524c34688b4ff701913699793bf2"}],"octavia/api/config.py":[{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"baf17901c61c2cdf2e5d45e401468aee6d92e72d","unresolved":true,"context_lines":[{"line_number":24,"context_line":"        hooks.ContextHook(),"},{"line_number":25,"context_line":"        hooks.QueryParametersHook()],"},{"line_number":26,"context_line":"    \u0027debug\u0027: False"},{"line_number":27,"context_line":"}"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# WSME Configurations"},{"line_number":30,"context_line":"# See https://wsme.readthedocs.org/en/latest/integrate.html#configuration"}],"source_content_type":"text/x-python","patch_set":2,"id":"cb313327_68bf3ad2","line":27,"updated":"2022-11-25 11:44:38.000000000","message":"nit: could we add simple unittest, which checks, content of this file. it protects from unexpected removing hooks. something like:\n```\nfrom octavia.api.common import hooks\nfrom octavia.api.config import app\nfrom octavia.tests.unit import base\n\n\nclass TestConfig(base.TestCase):\n\n    def test_app_config(self):\n        self.assertEqual(\n            \u0027octavia.api.root_controller.RootController\u0027, app[\u0027root\u0027])\n        self.assertEqual([\u0027octavia.api\u0027], app[\u0027modules\u0027])\n        expected_hook_types \u003d [\n            hooks.ContextHook,\n            hooks.QueryParametersHook,\n            hooks.UpdateAcceptHeader,\n        ]\n        self.assertEqual(expected_hook_types, list(map(type, app[\u0027hooks\u0027])))\n        self.assertFalse(app[\u0027debug\u0027])\n\n```","commit_id":"73b88230bb4724e762abd3eb914570509e2b0e4d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a3dc2ec745d3f5bc0b68fb3c4f20461b3a00cba0","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        hooks.ContextHook(),"},{"line_number":25,"context_line":"        hooks.QueryParametersHook()],"},{"line_number":26,"context_line":"    \u0027debug\u0027: False"},{"line_number":27,"context_line":"}"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# WSME Configurations"},{"line_number":30,"context_line":"# See https://wsme.readthedocs.org/en/latest/integrate.html#configuration"}],"source_content_type":"text/x-python","patch_set":2,"id":"8162a506_3956869a","line":27,"in_reply_to":"6e366cd7_9c90e9f6","updated":"2022-11-30 19:38:19.000000000","message":"Done","commit_id":"73b88230bb4724e762abd3eb914570509e2b0e4d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"e55f4731b0dcf9b26c19ebcd4e38b1c0be704368","unresolved":true,"context_lines":[{"line_number":24,"context_line":"        hooks.ContextHook(),"},{"line_number":25,"context_line":"        hooks.QueryParametersHook()],"},{"line_number":26,"context_line":"    \u0027debug\u0027: False"},{"line_number":27,"context_line":"}"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"# WSME Configurations"},{"line_number":30,"context_line":"# See https://wsme.readthedocs.org/en/latest/integrate.html#configuration"}],"source_content_type":"text/x-python","patch_set":2,"id":"6e366cd7_9c90e9f6","line":27,"in_reply_to":"cb313327_68bf3ad2","updated":"2022-11-30 16:13:52.000000000","message":"The coverage report shows that this file is 100% covered. Probably because the functional tests all run this. I would expect if a hook is dropped, the associated functional tests would fail (I know that is the case for this patch).\nThat said, I can add a simple unit test for it.","commit_id":"73b88230bb4724e762abd3eb914570509e2b0e4d"}],"octavia/tests/functional/api/test_content_types.py":[{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"baf17901c61c2cdf2e5d45e401468aee6d92e72d","unresolved":true,"context_lines":[{"line_number":87,"context_line":"            headers\u003d{constants.ACCEPT:"},{"line_number":88,"context_line":"                     \u0027text/html,*/*\u0027})"},{"line_number":89,"context_line":"        self.assertEqual(200, response.status_code)"},{"line_number":90,"context_line":"        self.assertEqual(constants.APPLICATION_JSON, response.content_type)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def test_valid_mixed_weighted_accept_header(self):"},{"line_number":93,"context_line":"        response \u003d self.app.get("}],"source_content_type":"text/x-python","patch_set":2,"id":"c5dc0844_a7d02615","line":90,"updated":"2022-11-25 11:44:38.000000000","message":"let\u0027s also add couple test cases with: \u0027application/json, */*\u0027  and \u0027application/json, text/plain, */*\u0027 - these scenarios were in the original bug description.","commit_id":"73b88230bb4724e762abd3eb914570509e2b0e4d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"a3dc2ec745d3f5bc0b68fb3c4f20461b3a00cba0","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            headers\u003d{constants.ACCEPT:"},{"line_number":88,"context_line":"                     \u0027text/html,*/*\u0027})"},{"line_number":89,"context_line":"        self.assertEqual(200, response.status_code)"},{"line_number":90,"context_line":"        self.assertEqual(constants.APPLICATION_JSON, response.content_type)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def test_valid_mixed_weighted_accept_header(self):"},{"line_number":93,"context_line":"        response \u003d self.app.get("}],"source_content_type":"text/x-python","patch_set":2,"id":"49ec7708_cdb88c86","line":90,"in_reply_to":"c5dc0844_a7d02615","updated":"2022-11-30 19:38:19.000000000","message":"Done","commit_id":"73b88230bb4724e762abd3eb914570509e2b0e4d"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"1383a2e7f26f5aa56fdae761b19632fced761180","unresolved":true,"context_lines":[{"line_number":22,"context_line":"from octavia.tests.functional.db import base as base_db_test"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class TestContentTypes(base_db_test.OctaviaDBTestBase):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def setUp(self):"},{"line_number":28,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"62233a34_ec118c42","line":25,"updated":"2023-01-11 17:55:15.000000000","message":"I also found, that last patch set has not octavia/tests/unit/api/test_config.py.\nis it expected or was lost during last updates (I see it in patchset #3)?\nalso two tests were removed:\ntest_json_plain_wildcard_accept_header\nand test_json_wildcard_accept_header .","commit_id":"2e14db7f6cc98214ed1c97f429d359116d69da7d"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"6970304866f50b122902ec8e826478bf6388f1e7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from octavia.tests.functional.db import base as base_db_test"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class TestContentTypes(base_db_test.OctaviaDBTestBase):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def setUp(self):"},{"line_number":28,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"0adf10c3_84511ce7","line":25,"in_reply_to":"0b58c198_ded85004","updated":"2023-02-17 09:34:02.000000000","message":"thank you. LGTM 😊","commit_id":"2e14db7f6cc98214ed1c97f429d359116d69da7d"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"eacbd5c20d4157f89b7d20172626d4e05a6b4699","unresolved":true,"context_lines":[{"line_number":22,"context_line":"from octavia.tests.functional.db import base as base_db_test"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class TestContentTypes(base_db_test.OctaviaDBTestBase):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def setUp(self):"},{"line_number":28,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"0b58c198_ded85004","line":25,"in_reply_to":"62233a34_ec118c42","updated":"2023-02-16 23:22:39.000000000","message":"Yep, I think this was a bad rebase. I have added them back.","commit_id":"2e14db7f6cc98214ed1c97f429d359116d69da7d"}]}
