)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3a437f0e9a091fa9da4f20d752f5ddddd96d37d9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3ce0140b_6568b7dc","updated":"2026-04-09 16:31:21.000000000","message":"I don\u0027t believe we should add this to SDK. From [the nova api-ref](https://docs.openstack.org/api-ref/compute/#create-external-events-os-server-external-events):\n\n\u003e This is an `admin` level service API only designed to be used by other OpenStack services. The point of this API is to coordinate between Nova and Neutron, Nova and Cinder, Nova and Ironic (and potentially future services) on activities they both need to be involved in, such as network hotplugging.\n\u003e \n\u003e Unless you are writing Neutron, Cinder or Ironic code you *should not* be using this API.\n\nI assume you want this for removing neutron or nova client somewhere? If so, this is likely one of the rare cases where it would make more sense to use the http methods on the proxy.\n\n```\n\u003e\u003e\u003e import openstack\n\u003e\u003e\u003e conn \u003d openstack.connect(cloud\u003d\u0027devstack-admin\u0027)\n\u003e\u003e\u003e events \u003d {}\n\u003e\u003e\u003e conn.compute.post(\u0027/os-server-external-events\u0027, json\u003devents)\n```\n\nobviously with a populated `events` body","commit_id":"11f16def2866d6ecfdf1303653346f03ebcce521"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a4f033728645bfffef47bacc14a90aae1533fe69","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"62a2a5c7_9db43015","in_reply_to":"06e0faf1_494f8993","updated":"2026-04-21 10:25:17.000000000","message":"Thanks, I updated the Neutron side (https://review.opendev.org/c/openstack/neutron/+/983905) patch and the client.compute.post() works fine really","commit_id":"11f16def2866d6ecfdf1303653346f03ebcce521"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"5d905f44efa21f6640b5ee27737112327842fd17","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"06e0faf1_494f8993","in_reply_to":"0e9f9eb1_bb952949","updated":"2026-04-15 12:16:25.000000000","message":"yeah, I think haleyb just jumped to those, so that can be also a topic :)","commit_id":"11f16def2866d6ecfdf1303653346f03ebcce521"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1f77cd09beb5e2bb677c103b2a3f2b60186e6054","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"adba2d55_1498d1a7","in_reply_to":"3ce0140b_6568b7dc","updated":"2026-04-13 11:34:53.000000000","message":"Currently Neutron uses novaclient to send this event to Nova (I suppose Cinder, Cyborg...) also do the same, but if we want to move everything out from novaclient we have to have the possiblity to send /os-server-external-events from SDK or send a direct HTTP POST from the middle of Neutron for example.","commit_id":"11f16def2866d6ecfdf1303653346f03ebcce521"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"13450b99102ffb29ea4e83d0fcf8de8917a22c80","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"0e9f9eb1_bb952949","in_reply_to":"3f3e86e2_5b547a7f","updated":"2026-04-14 16:48:52.000000000","message":"Ack. For what it\u0027s worth, if you look at openstackclient you\u0027ll find a number of places where we use these raw HTTP methods for e.g. nova-network, since we didn\u0027t want to add those things to SDK either.","commit_id":"11f16def2866d6ecfdf1303653346f03ebcce521"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"5cfa18970a3623ecfb9eff32241d64980068b761","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"dc709d2d_b9e1f964","in_reply_to":"62a2a5c7_9db43015","updated":"2026-04-21 18:46:08.000000000","message":"you can use the raw client but that seriously undermined the creditability of the sdk project if we dont support this\n\nunless you planning to rip out supprot for cinder swap volume or neutron port bidning as well?\n\nhttps://github.com/openstack/openstacksdk/blob/405e2d7836a2777eb59f06f95f4025faa058f166/openstack/network/v2/port_binding.py\nhttps://github.com/openstack/openstacksdk/blob/master/openstack/network/v2/_proxy.py#L3541-L3602\nhttps://docs.openstack.org/api-ref/network/v2/index.html?expanded\u003dshow-port-binding-of-a-port-detail#activate-port-binding\n\nhttps://github.com/openstack/openstacksdk/blob/master/openstack/compute/v2/_proxy.py#L2143\nhttps://docs.openstack.org/api-ref/compute/#update-swapping-a-volume-attachment\n\nif we cant use ths sdk for service to service api then we shoudl not use the sdk in services.\n\n\nonly nova or ironic or zun shoudl ever call those api as they are service only apis just like the external evnets api.","commit_id":"11f16def2866d6ecfdf1303653346f03ebcce521"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"a32e5fe762eab5d4e9b835252db3b7e8bd3038e3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3f3e86e2_5b547a7f","in_reply_to":"adba2d55_1498d1a7","updated":"2026-04-14 16:41:04.000000000","message":"I will check how to send with the post method you wrote.\nJust to be sure that Nova folks are aware of this topic/change I dropped this to nova channel and Uggla asked me to add to the PTG etherpad, as others also use this API (I mean not just Neutron) it can be useful to make it more visible","commit_id":"11f16def2866d6ecfdf1303653346f03ebcce521"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"e0c948eff0085bff8f7c2dc91da1e17452f1ca6d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"23fd12a5_62a70f9e","in_reply_to":"dc709d2d_b9e1f964","updated":"2026-04-22 13:48:22.000000000","message":"Actually after checking the depths of it and testing I think what Stephen suggested is a good way, see the actual patch: https://review.opendev.org/c/openstack/neutron/+/983905/3/neutron/notifiers/nova.py\n\nWe still use SDK, but without the helpers of having Events class (or whatever it should be).\n\nOn the other hand it is true that we have the policy files to restrict users from using the API over their boundaries, so I can live with any of these way forward.","commit_id":"11f16def2866d6ecfdf1303653346f03ebcce521"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6fc713686ab0c123feeba013846e2bb494130b26","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3a5122fc_058222f6","updated":"2026-05-25 14:38:09.000000000","message":"This is a good start. We need to update the `doc/source/user/proxies/compute.rst` doc and create a new `doc/source/user/resources/compute/v1/server_external_event.rst` doc though. I also have some notes inline.","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3190f0cf01cead811d676febc646ef90c087f4c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"d235a96c_c76e524d","updated":"2026-05-06 09:04:08.000000000","message":"recheck networking-ext job marked non-voting while neutron issue fixed","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"46a1a3fe9f735c2227c9ea3144fa48f73ee76bc7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"25f4fbb5_368d33b5","in_reply_to":"3a5122fc_058222f6","updated":"2026-05-28 16:42:12.000000000","message":"Added/extended the doc also","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1d01b47f3d42da50cacc1282ea6eb3327e94fc49","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"9af8b3fc_d6040316","updated":"2026-06-04 18:06:23.000000000","message":"Looks good. 2 tiny nits and a question inline","commit_id":"72551f35bb0853ba70e295956012c8e8e930c333"}],"doc/source/user/proxies/compute.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1d01b47f3d42da50cacc1282ea6eb3327e94fc49","unresolved":true,"context_lines":[{"line_number":136,"context_line":"  :noindex:"},{"line_number":137,"context_line":"  :members: add_tag_to_server, remove_tag_from_server, remove_tags_from_server"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"Server External Event Operations"},{"line_number":140,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":".. autoclass:: openstack.compute.v2._proxy.Proxy"},{"line_number":143,"context_line":"  :noindex:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"153647b9_a64042e5","line":140,"range":{"start_line":139,"start_character":0,"end_line":140,"end_character":33},"updated":"2026-06-04 18:06:23.000000000","message":"```suggestion\nServer External Event Operations\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n```","commit_id":"72551f35bb0853ba70e295956012c8e8e930c333"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"006d2187c80f807c041171b4a56770a5681f58fe","unresolved":false,"context_lines":[{"line_number":136,"context_line":"  :noindex:"},{"line_number":137,"context_line":"  :members: add_tag_to_server, remove_tag_from_server, remove_tags_from_server"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"Server External Event Operations"},{"line_number":140,"context_line":"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":".. autoclass:: openstack.compute.v2._proxy.Proxy"},{"line_number":143,"context_line":"  :noindex:"}],"source_content_type":"text/x-rst","patch_set":3,"id":"83be91ea_32d9c5ae","line":140,"range":{"start_line":139,"start_character":0,"end_line":140,"end_character":33},"in_reply_to":"153647b9_a64042e5","updated":"2026-06-05 13:00:39.000000000","message":"Done","commit_id":"72551f35bb0853ba70e295956012c8e8e930c333"}],"doc/source/user/resources/compute/v2/server_external_event.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1d01b47f3d42da50cacc1282ea6eb3327e94fc49","unresolved":true,"context_lines":[{"line_number":1,"context_line":"openstack.compute.v2.server_external_event"},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":".. automodule:: openstack.compute.v2.server_external_event"},{"line_number":5,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"81fe21f1_db976ee8","line":2,"range":{"start_line":1,"start_character":0,"end_line":2,"end_character":43},"updated":"2026-06-04 18:06:23.000000000","message":"```suggestion\nopenstack.compute.v2.server_external_event\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n```","commit_id":"72551f35bb0853ba70e295956012c8e8e930c333"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"006d2187c80f807c041171b4a56770a5681f58fe","unresolved":false,"context_lines":[{"line_number":1,"context_line":"openstack.compute.v2.server_external_event"},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":".. automodule:: openstack.compute.v2.server_external_event"},{"line_number":5,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"c0916299_5503d4ee","line":2,"range":{"start_line":1,"start_character":0,"end_line":2,"end_character":43},"in_reply_to":"81fe21f1_db976ee8","updated":"2026-06-05 13:00:39.000000000","message":"Done","commit_id":"72551f35bb0853ba70e295956012c8e8e930c333"}],"openstack/compute/v2/_proxy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6fc713686ab0c123feeba013846e2bb494130b26","unresolved":true,"context_lines":[{"line_number":30,"context_line":"from openstack.compute.v2 import server as _server"},{"line_number":31,"context_line":"from openstack.compute.v2 import server_action as _server_action"},{"line_number":32,"context_line":"from openstack.compute.v2 import server_diagnostics as _server_diagnostics"},{"line_number":33,"context_line":"from openstack.compute.v2 import server_external_events as _server_events"},{"line_number":34,"context_line":"from openstack.compute.v2 import server_group as _server_group"},{"line_number":35,"context_line":"from openstack.compute.v2 import server_interface as _server_interface"},{"line_number":36,"context_line":"from openstack.compute.v2 import server_ip"}],"source_content_type":"text/x-python","patch_set":2,"id":"579f8a8d_18bce431","line":33,"updated":"2026-05-25 14:38:09.000000000","message":"This should be singular\n\n```suggestion\nfrom openstack.compute.v2 import server_external_event as _server_event\n```","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"46a1a3fe9f735c2227c9ea3144fa48f73ee76bc7","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from openstack.compute.v2 import server as _server"},{"line_number":31,"context_line":"from openstack.compute.v2 import server_action as _server_action"},{"line_number":32,"context_line":"from openstack.compute.v2 import server_diagnostics as _server_diagnostics"},{"line_number":33,"context_line":"from openstack.compute.v2 import server_external_events as _server_events"},{"line_number":34,"context_line":"from openstack.compute.v2 import server_group as _server_group"},{"line_number":35,"context_line":"from openstack.compute.v2 import server_interface as _server_interface"},{"line_number":36,"context_line":"from openstack.compute.v2 import server_ip"}],"source_content_type":"text/x-python","patch_set":2,"id":"d9c4708e_6eb7249e","line":33,"in_reply_to":"579f8a8d_18bce431","updated":"2026-05-28 16:42:12.000000000","message":"Done","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6fc713686ab0c123feeba013846e2bb494130b26","unresolved":true,"context_lines":[{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d os-server-external-events \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def create_server_external_events(self, events):"},{"line_number":372,"context_line":"        \"\"\"Create one or more server external events."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        :param list events: List of dicts, each containing event attributes"}],"source_content_type":"text/x-python","patch_set":2,"id":"38fa8e9e_2401ef15","line":371,"updated":"2026-05-25 14:38:09.000000000","message":"Would it be possible to add hints to this? We\u0027re in the process of hinting all of this file so it would save me having to do this later. It should be as simple as:\n\n```suggestion\n    def create_server_external_events(\n        self, events: list[_server_event.ServerExternalEvent]\n    ) -\u003e Generator[_server_event.ServerExternalEvent, None, None]:\n```","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"46a1a3fe9f735c2227c9ea3144fa48f73ee76bc7","unresolved":false,"context_lines":[{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d os-server-external-events \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def create_server_external_events(self, events):"},{"line_number":372,"context_line":"        \"\"\"Create one or more server external events."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        :param list events: List of dicts, each containing event attributes"}],"source_content_type":"text/x-python","patch_set":2,"id":"3ed411f1_d59baf8d","line":371,"in_reply_to":"38fa8e9e_2401ef15","updated":"2026-05-28 16:42:12.000000000","message":"Done","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2c7cf847378e0d88abd28d50b128d0e59e111f7d","unresolved":true,"context_lines":[{"line_number":369,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d os-server-external-events \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def create_server_external_events(self, events):"},{"line_number":372,"context_line":"        \"\"\"Create one or more server external events."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        :param list events: List of dicts, each containing event attributes"},{"line_number":375,"context_line":"            (name, server_uuid, status, tag)."}],"source_content_type":"text/x-python","patch_set":2,"id":"9558374b_5587d4a8","line":372,"updated":"2026-05-25 14:39:33.000000000","message":"Can we add a warning here that this should only be used by services for inter-service communication?","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"46a1a3fe9f735c2227c9ea3144fa48f73ee76bc7","unresolved":false,"context_lines":[{"line_number":369,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d os-server-external-events \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def create_server_external_events(self, events):"},{"line_number":372,"context_line":"        \"\"\"Create one or more server external events."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        :param list events: List of dicts, each containing event attributes"},{"line_number":375,"context_line":"            (name, server_uuid, status, tag)."}],"source_content_type":"text/x-python","patch_set":2,"id":"3000ddf4_a9b149fc","line":372,"in_reply_to":"9558374b_5587d4a8","updated":"2026-05-28 16:42:12.000000000","message":"I assumed that You meant a docstring warnig  not warning.warn(....)","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"2c7cf847378e0d88abd28d50b128d0e59e111f7d","unresolved":true,"context_lines":[{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def create_server_external_events(self, events):"},{"line_number":372,"context_line":"        \"\"\"Create one or more server external events."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        :param list events: List of dicts, each containing event attributes"},{"line_number":375,"context_line":"            (name, server_uuid, status, tag)."},{"line_number":376,"context_line":"        :returns: A generator of :class:`~openstack.compute.v2."},{"line_number":377,"context_line":"                  server_external_events.ServerExternalEvent`"},{"line_number":378,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"f2adfdee_ea1be0c6","line":375,"range":{"start_line":373,"start_character":1,"end_line":375,"end_character":45},"updated":"2026-05-25 14:39:33.000000000","message":"Let\u0027s drop the type information from here and use annotations instead\n\n```suggestion\n\n        :param events: List of dicts, each containing event attributes\n            (name, server_uuid, status, tag).\n```","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"46a1a3fe9f735c2227c9ea3144fa48f73ee76bc7","unresolved":false,"context_lines":[{"line_number":370,"context_line":""},{"line_number":371,"context_line":"    def create_server_external_events(self, events):"},{"line_number":372,"context_line":"        \"\"\"Create one or more server external events."},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        :param list events: List of dicts, each containing event attributes"},{"line_number":375,"context_line":"            (name, server_uuid, status, tag)."},{"line_number":376,"context_line":"        :returns: A generator of :class:`~openstack.compute.v2."},{"line_number":377,"context_line":"                  server_external_events.ServerExternalEvent`"},{"line_number":378,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"484bfa65_0e0d0bfe","line":375,"range":{"start_line":373,"start_character":1,"end_line":375,"end_character":45},"in_reply_to":"f2adfdee_ea1be0c6","updated":"2026-05-28 16:42:12.000000000","message":"Done","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1d01b47f3d42da50cacc1282ea6eb3327e94fc49","unresolved":true,"context_lines":[{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d os-server-external-events \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def create_server_external_events("},{"line_number":416,"context_line":"        self, events: list[dict[str, Any]]"},{"line_number":417,"context_line":"    ) -\u003e Generator[_server_event.ServerExternalEvent, None, None]:"},{"line_number":418,"context_line":"        \"\"\"Create one or more server external events."}],"source_content_type":"text/x-python","patch_set":3,"id":"8904141d_a435d160","line":415,"updated":"2026-06-04 18:06:23.000000000","message":"To be clear, you don\u0027t ever expect to create a single event? I\u0027m just curious why there\u0027s only the _bulk_create call here","commit_id":"72551f35bb0853ba70e295956012c8e8e930c333"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"006d2187c80f807c041171b4a56770a5681f58fe","unresolved":true,"context_lines":[{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d os-server-external-events \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def create_server_external_events("},{"line_number":416,"context_line":"        self, events: list[dict[str, Any]]"},{"line_number":417,"context_line":"    ) -\u003e Generator[_server_event.ServerExternalEvent, None, None]:"},{"line_number":418,"context_line":"        \"\"\"Create one or more server external events."}],"source_content_type":"text/x-python","patch_set":3,"id":"ebbab434_c3b16fc0","line":415,"in_reply_to":"8904141d_a435d160","updated":"2026-06-05 13:00:39.000000000","message":"The API ref also speaks about events as list (https://docs.openstack.org/api-ref/compute/#create-external-events-os-server-external-events ), so looked natural that this is a bulk call. Neutron does that at least in the notifier collecting notifications and sending out as bulk when the batch_interval timer awakes the notifier","commit_id":"72551f35bb0853ba70e295956012c8e8e930c333"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e687be3415ef44cb72d3642e3875b88666f5c101","unresolved":false,"context_lines":[{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    # \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d os-server-external-events \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def create_server_external_events("},{"line_number":416,"context_line":"        self, events: list[dict[str, Any]]"},{"line_number":417,"context_line":"    ) -\u003e Generator[_server_event.ServerExternalEvent, None, None]:"},{"line_number":418,"context_line":"        \"\"\"Create one or more server external events."}],"source_content_type":"text/x-python","patch_set":3,"id":"3d8ffe63_c7b592d1","line":415,"in_reply_to":"ebbab434_c3b16fc0","updated":"2026-06-05 13:09:10.000000000","message":"Acknowledged","commit_id":"72551f35bb0853ba70e295956012c8e8e930c333"}],"openstack/compute/v2/server_external_events.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6fc713686ab0c123feeba013846e2bb494130b26","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"217799ee_0bd14b21","updated":"2026-05-25 14:38:09.000000000","message":"Can you rename this to singular (`server_external_event.py`)?","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"46a1a3fe9f735c2227c9ea3144fa48f73ee76bc7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b7997e95_efaa9a7b","in_reply_to":"217799ee_0bd14b21","updated":"2026-05-28 16:42:12.000000000","message":"Done","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6fc713686ab0c123feeba013846e2bb494130b26","unresolved":true,"context_lines":[{"line_number":17,"context_line":"from openstack import resource"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class ServerExternalEvents(resource.Resource):"},{"line_number":21,"context_line":"    resource_key \u003d \u0027event\u0027"},{"line_number":22,"context_line":"    resources_key \u003d \u0027events\u0027"},{"line_number":23,"context_line":"    base_path \u003d \u0027/os-server-external-events\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"f03c246c_740ea7e4","line":20,"updated":"2026-05-25 14:38:09.000000000","message":"```suggestion\nclass ServerExternalEvent(resource.Resource):\n```","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"46a1a3fe9f735c2227c9ea3144fa48f73ee76bc7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from openstack import resource"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class ServerExternalEvents(resource.Resource):"},{"line_number":21,"context_line":"    resource_key \u003d \u0027event\u0027"},{"line_number":22,"context_line":"    resources_key \u003d \u0027events\u0027"},{"line_number":23,"context_line":"    base_path \u003d \u0027/os-server-external-events\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"575ca982_0dc8a3d5","line":20,"in_reply_to":"f03c246c_740ea7e4","updated":"2026-05-28 16:42:12.000000000","message":"Done","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"}],"openstack/tests/unit/compute/v2/test_proxy.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6fc713686ab0c123feeba013846e2bb494130b26","unresolved":true,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        self.cloud.compute.delete_keypair(\"fake_keypair\", user_id\u003d\"fake_user\")"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"class TestServerExternalEvents(TestComputeProxy):"},{"line_number":415,"context_line":"    @mock.patch(\u0027openstack.proxy.Proxy._bulk_create\u0027)"},{"line_number":416,"context_line":"    def test_server_external_event_create(self, mock_bc):"},{"line_number":417,"context_line":"        events \u003d mock.sentinel"},{"line_number":418,"context_line":"        self.proxy.create_server_external_events(events)"},{"line_number":419,"context_line":"        mock_bc.assert_called_once_with("},{"line_number":420,"context_line":"            server_external_events.ServerExternalEvents, events"},{"line_number":421,"context_line":"        )"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"class TestAggregate(TestComputeProxy):"}],"source_content_type":"text/x-python","patch_set":2,"id":"f3fe627a_d8ae2b1a","line":421,"range":{"start_line":413,"start_character":1,"end_line":421,"end_character":9},"updated":"2026-05-25 14:38:09.000000000","message":"Would it be possible to add a `verify_bulk_create` helper to test this, else use `_verify`? I don\u0027t like special casing this if at all avoidable.","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"46a1a3fe9f735c2227c9ea3144fa48f73ee76bc7","unresolved":false,"context_lines":[{"line_number":410,"context_line":""},{"line_number":411,"context_line":"        self.cloud.compute.delete_keypair(\"fake_keypair\", user_id\u003d\"fake_user\")"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"class TestServerExternalEvents(TestComputeProxy):"},{"line_number":415,"context_line":"    @mock.patch(\u0027openstack.proxy.Proxy._bulk_create\u0027)"},{"line_number":416,"context_line":"    def test_server_external_event_create(self, mock_bc):"},{"line_number":417,"context_line":"        events \u003d mock.sentinel"},{"line_number":418,"context_line":"        self.proxy.create_server_external_events(events)"},{"line_number":419,"context_line":"        mock_bc.assert_called_once_with("},{"line_number":420,"context_line":"            server_external_events.ServerExternalEvents, events"},{"line_number":421,"context_line":"        )"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"class TestAggregate(TestComputeProxy):"}],"source_content_type":"text/x-python","patch_set":2,"id":"51b39f6f_c294af87","line":421,"range":{"start_line":413,"start_character":1,"end_line":421,"end_character":9},"in_reply_to":"f3fe627a_d8ae2b1a","updated":"2026-05-28 16:42:12.000000000","message":"something like this? yeah much more readable, I hope this is fine","commit_id":"3f07726a50b00e54a635a4f482353f544d8bf73d"}]}
