)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"21b2e0e7789262a5449aca4b49a28fef8f434e35","unresolved":true,"context_lines":[{"line_number":22,"context_line":"operation itself."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"The openstacksdk-functional-devstack-cyborg job is modified to use the"},{"line_number":25,"context_line":"pci-sim driver to enable ARQ bind to be tested. The python-cyborgclient"},{"line_number":26,"context_line":"is also removed from required-projects as accelerator commands have"},{"line_number":27,"context_line":"been migrated to OSC in-tree."},{"line_number":28,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"99debd9a_7f37a216","line":25,"updated":"2026-10-22 21:19:09.000000000","message":"Note: apparently pci-sim is not actually _required_ in order to test bind ... so we could actually use the fake driver and change the test to create a device profile and flavor instead of using the ones pci-sim provides.","commit_id":"b2810f45c807b7b1f084e682f0d04ee7c0249bbb"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3340397064af2c34c9613224411d5bcf0bba3bca","unresolved":false,"context_lines":[{"line_number":22,"context_line":"operation itself."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"The openstacksdk-functional-devstack-cyborg job is modified to use the"},{"line_number":25,"context_line":"pci-sim driver to enable ARQ bind to be tested. The python-cyborgclient"},{"line_number":26,"context_line":"is also removed from required-projects as accelerator commands have"},{"line_number":27,"context_line":"been migrated to OSC in-tree."},{"line_number":28,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"2ba2c259_3b7bc64b","line":25,"in_reply_to":"29c6b0a3_3c46010c","updated":"2026-10-27 18:43:59.000000000","message":"Ack, thanks.","commit_id":"b2810f45c807b7b1f084e682f0d04ee7c0249bbb"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b7a1c955e5a5cfabce4831720bf58a02a3c0b06f","unresolved":true,"context_lines":[{"line_number":22,"context_line":"operation itself."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"The openstacksdk-functional-devstack-cyborg job is modified to use the"},{"line_number":25,"context_line":"pci-sim driver to enable ARQ bind to be tested. The python-cyborgclient"},{"line_number":26,"context_line":"is also removed from required-projects as accelerator commands have"},{"line_number":27,"context_line":"been migrated to OSC in-tree."},{"line_number":28,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"29c6b0a3_3c46010c","line":25,"in_reply_to":"99debd9a_7f37a216","updated":"2026-10-27 17:19:16.000000000","message":"ya its not.\n\nwe are also adding fpga \"programing\" supprot the the fake driver\n\nso it will be able to emulate most of the api surface but its like nova and does tno actully do anything on the backend its just faking the db/api behvior\n\nso we may decied to add pci-sim later if we need that but for now i think its fine to start without it.\n\nas an aside, im plannign to change the default of the driver config option this cycle to the empty list\n\nhttps://docs.openstack.org/cyborg/latest/configuration/config-options.html#agent.enabled_drivers\n\nbut when we do that we will update the devstack plugin to reenable the fake driver by default so it shoudl be transparent to this job.","commit_id":"b2810f45c807b7b1f084e682f0d04ee7c0249bbb"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b7a1c955e5a5cfabce4831720bf58a02a3c0b06f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4f475354_f2d95791","updated":"2026-10-27 17:19:16.000000000","message":"on question on how the name lookup works inline so +1 for nwo to confirm im readign this correctly otherwise i think this looks good","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6b56b9a4bc78435ec5f14e8415d1f3d8f1ca778d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d6c6232d_05090aa4","updated":"2026-10-28 23:42:53.000000000","message":"thanks\ni think form a cybrog api persecitve this aligns well to how it currently works\nwe perhasp shoudl chagne how the cybrog api works in some places to make it less uniqce it its behvior but this looks good to me","commit_id":"b893f25a2339c118e4f425abb2dba96d5d77c4ca"}],"openstack/accelerator/v2/accelerator_request.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b7a1c955e5a5cfabce4831720bf58a02a3c0b06f","unresolved":true,"context_lines":[{"line_number":35,"context_line":"    allow_patch \u003d True"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    # The \u0027project_id\u0027 attribute can be passed to bind since 2.1"},{"line_number":38,"context_line":"    _max_microversion \u003d \u00272.1\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    #: The device address associated with this ARQ (if any)"},{"line_number":41,"context_line":"    attach_handle_info \u003d resource.Body(\u0027attach_handle_info\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"2b56a316_bc06cd7d","line":38,"updated":"2026-10-27 17:19:16.000000000","message":"correct, and as of OSSA-2026-011 \nhttps://bugs.launchpad.net/openstack-cyborg/+bug/2144056\nwe no backfile the project id form the keystone token in 2.0\n\nso arqs should now alwasy have a project id present in the respone\nalthough i just notice we have a bug in cybrog\n\nhttps://github.com/openstack/cyborg/blob/master/cyborg/api/controllers/v2/arqs.py#L63-L64\n\nwe are stating that its a uuid but its not its a text filed that typiclly is a vaild uuid so we shoudl fix that to be wtypes.text seperatly.\n\nthe db schema has project_id \u003d Column(String(255), nullable\u003dTrue) so we shoudl be fine at the db level.\n\nnote what 2.1 added was the ablity to pass the project_id in the query args.\nit was in the repsoce body in 2.0 but empty.","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3340397064af2c34c9613224411d5bcf0bba3bca","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    allow_patch \u003d True"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    # The \u0027project_id\u0027 attribute can be passed to bind since 2.1"},{"line_number":38,"context_line":"    _max_microversion \u003d \u00272.1\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    #: The device address associated with this ARQ (if any)"},{"line_number":41,"context_line":"    attach_handle_info \u003d resource.Body(\u0027attach_handle_info\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"07aac9a5_62420eb9","line":38,"in_reply_to":"2b56a316_bc06cd7d","updated":"2026-10-27 18:43:59.000000000","message":"Good to know, thanks.","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"}],"openstack/accelerator/v2/device.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b7a1c955e5a5cfabce4831720bf58a02a3c0b06f","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    allow_list \u003d True"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    # The \u0027status\u0027 attribute is available since 2.3"},{"line_number":32,"context_line":"    _max_microversion \u003d \u00272.3\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    #: The timestamp when this device was created."},{"line_number":35,"context_line":"    created_at \u003d resource.Body(\u0027created_at\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"2ae9f8ee_b1da5a4d","line":32,"updated":"2026-10-27 17:19:16.000000000","message":"yep and we have the filterign for this \nhttps://github.com/openstack/cyborg/blob/master/cyborg/api/controllers/v2/devices.py#L83-L85\n\nso below 2.3 it will not be in the responce","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3340397064af2c34c9613224411d5bcf0bba3bca","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    allow_list \u003d True"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    # The \u0027status\u0027 attribute is available since 2.3"},{"line_number":32,"context_line":"    _max_microversion \u003d \u00272.3\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    #: The timestamp when this device was created."},{"line_number":35,"context_line":"    created_at \u003d resource.Body(\u0027created_at\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"b506fb7f_e2888152","line":32,"in_reply_to":"2ae9f8ee_b1da5a4d","updated":"2026-10-27 18:43:59.000000000","message":"Acknowledged","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"}],"openstack/accelerator/v2/device_profile.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b7a1c955e5a5cfabce4831720bf58a02a3c0b06f","unresolved":true,"context_lines":[{"line_number":28,"context_line":"    allow_list \u003d True"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # Retrieval by \u0027name\u0027 is available since 2.2"},{"line_number":31,"context_line":"    _max_microversion \u003d \u00272.2\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    #: The timestamp when this device_profile was created."},{"line_number":34,"context_line":"    created_at \u003d resource.Body(\u0027created_at\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"c0431749_b85ed304","line":31,"updated":"2026-10-27 17:19:16.000000000","message":"while this aligns to the published api history\nhttps://docs.openstack.org/cyborg/latest/contributor/rest_api_version_history.html#id2\n\nok so this wideend the allowed values fo the path parmater from a strict uuid to a uuid or name (generic string)\n\nhttps://github.com/openstack/cyborg/commit/cde7b78e22218d9dbdd369dba477397fb94df0c6\n\nthe responce idd not change regardless so this is just an opt into the wider contract so ya that shoudl be ok.","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3340397064af2c34c9613224411d5bcf0bba3bca","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    allow_list \u003d True"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # Retrieval by \u0027name\u0027 is available since 2.2"},{"line_number":31,"context_line":"    _max_microversion \u003d \u00272.2\u0027"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    #: The timestamp when this device_profile was created."},{"line_number":34,"context_line":"    created_at \u003d resource.Body(\u0027created_at\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"b506c5e3_ed7a0406","line":31,"in_reply_to":"c0431749_b85ed304","updated":"2026-10-27 18:43:59.000000000","message":"Acknowledged","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b7a1c955e5a5cfabce4831720bf58a02a3c0b06f","unresolved":true,"context_lines":[{"line_number":41,"context_line":"    #: The timestamp when this device_profile was updated."},{"line_number":42,"context_line":"    updated_at \u003d resource.Body(\u0027updated_at\u0027)"},{"line_number":43,"context_line":"    #: The uuid of the device profile"},{"line_number":44,"context_line":"    uuid \u003d resource.Body(\u0027uuid\u0027, alternate_id\u003dTrue)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    create_opts \u003d resource.CreateOpts(request_key\u003dNone)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"bf830a33_afec9000","line":44,"range":{"start_line":44,"start_character":33,"end_line":44,"end_character":50},"updated":"2026-10-27 17:19:16.000000000","message":"does the sdk defautl to name as the primary id and then this is telling it to sub in uuid if name is not set?\n\nthis feels reversed.\n\nlooking at the db schema we have a unique constration the the uuid and name tuple\n\nhttps://github.com/openstack/cyborg/blob/master/cyborg/db/sqlalchemy/models.py#L218-L220\n\nand seperatly we mark the name colume as unique\n\nhttps://github.com/openstack/cyborg/blob/master/cyborg/db/sqlalchemy/models.py#L226\n\nso technically that generate a seperate unique constratint on just the name\n\nso the name shoudl be valid to use as the priamry identify but strcitly specking the uuid is the pirmay idenfityer of the resocue and the name is secondary.","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"522f0d270821081c12df27e4c533e28e4d9e511a","unresolved":true,"context_lines":[{"line_number":41,"context_line":"    #: The timestamp when this device_profile was updated."},{"line_number":42,"context_line":"    updated_at \u003d resource.Body(\u0027updated_at\u0027)"},{"line_number":43,"context_line":"    #: The uuid of the device profile"},{"line_number":44,"context_line":"    uuid \u003d resource.Body(\u0027uuid\u0027, alternate_id\u003dTrue)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    create_opts \u003d resource.CreateOpts(request_key\u003dNone)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"8a1517ef_8fb5fc47","line":44,"range":{"start_line":44,"start_character":33,"end_line":44,"end_character":50},"in_reply_to":"2b729ec1_0725d38d","updated":"2026-10-28 16:03:39.000000000","message":"In my experience, the name ability is purely server side. If you send a name \u003c 2.2, the server will actually respond with a HTTP 406, example on my devstack:\n\n```\nAccelerator client initialized using OpenStackSDK: \u003copenstack.accelerator.v2._proxy.Proxy object at 0xf3c091a16660\u003e\nREQ: curl -g -i -X GET http://192.168.64.21/accelerator/v2/device_profiles/pci-sim-cyborg-dp -H \"OpenStack-API-Version: accelerator 2.0\" -H \"User-Agent: openstacksdk/4.21.0 keystoneauth1/5.18.1 python-requests/2.34.2 CPython/3.14.4\" -H \"X-Auth-Token: {SHA256}6036fbdb1226960e81ba3b5403333c2cbb9c244391a89775a4aeb9bd25edc365\"\nResetting dropped connection: 192.168.64.21\nhttp://192.168.64.21:80 \"GET /accelerator/v2/device_profiles/pci-sim-cyborg-dp HTTP/1.1\" 406 150\nRESP: [406] Connection: close Content-Length: 150 Content-Type: application/json Date: Wed, 28 Oct 2026 15:13:28 GMT OpenStack-API-Maximum-Version: 2.3 OpenStack-API-Minimum-Version: 2.0 OpenStack-API-Version: accelerator 2.0 Server: Apache/2.4.66 (Ubuntu) Vary: OpenStack-API-Version x-openstack-request-id: req-b6b609d3-ca6c-4c2d-9d78-27d7aab87c8b\nRESP BODY: {\"error_message\": {\"faultcode\": \"Client\", \"faultstring\": \"Request not acceptable. The minimal required API version should be 2.2\", \"debuginfo\": null}}\n```\n\nIf you send a name \u003e\u003d 2.2, it works and returns the device profile show data. So AFAICT we don\u0027t need to do anything on the client side here.","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b7dd4b91380fb6249281feec1b3ed7fa95d32186","unresolved":true,"context_lines":[{"line_number":41,"context_line":"    #: The timestamp when this device_profile was updated."},{"line_number":42,"context_line":"    updated_at \u003d resource.Body(\u0027updated_at\u0027)"},{"line_number":43,"context_line":"    #: The uuid of the device profile"},{"line_number":44,"context_line":"    uuid \u003d resource.Body(\u0027uuid\u0027, alternate_id\u003dTrue)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    create_opts \u003d resource.CreateOpts(request_key\u003dNone)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"2b729ec1_0725d38d","line":44,"range":{"start_line":44,"start_character":33,"end_line":44,"end_character":50},"in_reply_to":"513312b0_2b0bf405","updated":"2026-10-28 10:39:11.000000000","message":"so microversion 2.2 is ment to support querying by name\n\nim wondering if we need to do somethign here to enabel doing a device profile get request by name?","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e3376a1021ddd29a7f20ea6764fa1a185725ed9d","unresolved":true,"context_lines":[{"line_number":41,"context_line":"    #: The timestamp when this device_profile was updated."},{"line_number":42,"context_line":"    updated_at \u003d resource.Body(\u0027updated_at\u0027)"},{"line_number":43,"context_line":"    #: The uuid of the device profile"},{"line_number":44,"context_line":"    uuid \u003d resource.Body(\u0027uuid\u0027, alternate_id\u003dTrue)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    create_opts \u003d resource.CreateOpts(request_key\u003dNone)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ef61b4b1_83045179","line":44,"range":{"start_line":44,"start_character":33,"end_line":44,"end_character":50},"in_reply_to":"8a1517ef_8fb5fc47","updated":"2026-10-28 17:36:07.000000000","message":"my point is the microverion is about enabelt the server side capablity to get by name\n\nso i was expectin you to modify get_device_profile to accpet the name\n\nhttps://github.com/openstack/openstacksdk/blob/master/openstack/accelerator/v2/_proxy.py#L213-L234\n\nor add a get_device_profile_by_name\n\nthe changes you are making here are not wrong, they shoudl be made but\ni was also expecting you to update the doctext for the existing get_device_profile helper\n\n```\n:param device_profile: The value can be the ID of a device profile or a\n            `~openstack.accelerator.v2.device_profile.DeviceProfile` instance.\n```\nto\n```\n:param device_profile: The value can be the ID of a device profile, name or a\n            `~openstack.accelerator.v2.device_profile.DeviceProfile` instance.\n```\nif it works or to have other changes in the proxy level.\n\nbased on your testign it soudn like its passign the value though and aht is working at least when you use the right microversion.\n\nspeaking of https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/406\nits unfotunate that tha was what we chosoe \nhttps://opendev.org/openstack/api-sig/src/branch/master/guidelines/microversion_specification.rst?display\u003dsource#L137-L138\n\n\n406 not accpated is for the content type header\n\nit means the format of the request is not one fo the accpeted formats\ni.e. if you call the api with a yaml or xml body instead of json then it shoudl return a 406\n\nso our usage is somewhat questionable but i can see why they chose that\nat least cybrog is folllowing the spec in that regard so that is good.","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3340397064af2c34c9613224411d5bcf0bba3bca","unresolved":true,"context_lines":[{"line_number":41,"context_line":"    #: The timestamp when this device_profile was updated."},{"line_number":42,"context_line":"    updated_at \u003d resource.Body(\u0027updated_at\u0027)"},{"line_number":43,"context_line":"    #: The uuid of the device profile"},{"line_number":44,"context_line":"    uuid \u003d resource.Body(\u0027uuid\u0027, alternate_id\u003dTrue)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    create_opts \u003d resource.CreateOpts(request_key\u003dNone)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"513312b0_2b0bf405","line":44,"range":{"start_line":44,"start_character":33,"end_line":44,"end_character":50},"in_reply_to":"bf830a33_afec9000","updated":"2026-10-27 18:43:59.000000000","message":"It defaults to `id` as the primary ID and `alternate_id` means return this field value when `id` is accessed [1]:\n```\n    def __getattribute__(self, name: str) -\u003e Any:\n        \"\"\"Return an attribute on this instance\n\n        This is mostly a pass-through except for a specialization on\n        the \u0027id\u0027 name, as this can exist under a different name via the\n        `alternate_id` argument to resource.Body.\n        \"\"\"\n        if name \u003d\u003d \"id\":\n            if name in self._body:\n                return self._body[name]\n            else:\n                key \u003d self._alternate_id()\n                if key:\n                    return self._body.get(key)\n```\ni.e. \"treat UUID as the primary ID\" in this case.\n\n[1] https://github.com/openstack/openstacksdk/blob/d6040db3e053e6945e89d63c6fd04c3b821aad01/openstack/resource.py#L660-L673","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"31149063abda2a49200b026c5eaba8dd9f09153d","unresolved":true,"context_lines":[{"line_number":41,"context_line":"    #: The timestamp when this device_profile was updated."},{"line_number":42,"context_line":"    updated_at \u003d resource.Body(\u0027updated_at\u0027)"},{"line_number":43,"context_line":"    #: The uuid of the device profile"},{"line_number":44,"context_line":"    uuid \u003d resource.Body(\u0027uuid\u0027, alternate_id\u003dTrue)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    create_opts \u003d resource.CreateOpts(request_key\u003dNone)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"a9df8b28_587ef4b9","line":44,"range":{"start_line":44,"start_character":33,"end_line":44,"end_character":50},"in_reply_to":"ef61b4b1_83045179","updated":"2026-10-28 17:56:50.000000000","message":"Oh yes, sorry, I agree the docstring should be updated. I didn\u0027t think of that. I\u0027ll update.\n\nAnd yes it\u0027s passing the value through so it \"just works\". \n\nI agree HTTP 406 is strange. TBH I was surprised in general how it detects name vs UUID and errors out. Usually (other projects) I think it would be a 404 not found if you pass name and it doesn\u0027t support get by name.","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b7a1c955e5a5cfabce4831720bf58a02a3c0b06f","unresolved":true,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    create_opts \u003d resource.CreateOpts(request_key\u003dNone)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    # TODO(s_shogo): This implementation only treat [ DeviceProfile ], and"},{"line_number":49,"context_line":"    # cannot treat multiple DeviceProfiles in list."},{"line_number":50,"context_line":"    def _prepare_request_body(  # type: ignore[override]"},{"line_number":51,"context_line":"        self,"},{"line_number":52,"context_line":"        *,"},{"line_number":53,"context_line":"        prepend_key: bool,"},{"line_number":54,"context_line":"        resource_request_key: str | None \u003d None,"},{"line_number":55,"context_line":"    ) -\u003e list[dict[str, Any]]:"},{"line_number":56,"context_line":"        body \u003d super()._prepare_request_body("},{"line_number":57,"context_line":"            prepend_key\u003dprepend_key, resource_request_key\u003dresource_request_key"},{"line_number":58,"context_line":"        )"},{"line_number":59,"context_line":"        return [body]"}],"source_content_type":"text/x-python","patch_set":4,"id":"56fbdfa4_e3d96673","line":59,"range":{"start_line":48,"start_character":3,"end_line":59,"end_character":21},"updated":"2026-10-27 17:19:16.000000000","message":"i guess for some reason we are alway returign a list event though the \n\n/v2/device_profiles/{device_profile_name_or_uuid}\n\nreturns a singel object\n\nhttps://docs.openstack.org/api-ref/accelerator/#id2\n\n```\n{\n   \"device_profile\":{\n      \"name\":\"fpga-dp1\",\n      \"uuid\":\"5518a925-1c2c-49a2-a8bf-0927d9456f3e\",\n      \"description\": \"\",\n      \"groups\":[\n         {\n            \"trait:CUSTOM_FPGA_INSPUR\":\"required\",\n            \"resources:FPGA\":\"1\",\n            \"accel:bitstream_id\":\"d5ca2f11-3108-4426-a11c-a959987565df\"\n         }\n      ],\n      \"created_at\": \"2020-03-09 11:26:05+00:00\",\n      \"updated_at\": null,\n      \"links\":[\n         {\n            \"href\":\"http://192.168.32.217/accelerator/v2/device_profiles/5518a925-1c2c-49a2-a8bf-0927d9456f3e\",\n            \"rel\":\"self\"\n         }\n      ]\n   }\n}\n```","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3340397064af2c34c9613224411d5bcf0bba3bca","unresolved":true,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    create_opts \u003d resource.CreateOpts(request_key\u003dNone)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    # TODO(s_shogo): This implementation only treat [ DeviceProfile ], and"},{"line_number":49,"context_line":"    # cannot treat multiple DeviceProfiles in list."},{"line_number":50,"context_line":"    def _prepare_request_body(  # type: ignore[override]"},{"line_number":51,"context_line":"        self,"},{"line_number":52,"context_line":"        *,"},{"line_number":53,"context_line":"        prepend_key: bool,"},{"line_number":54,"context_line":"        resource_request_key: str | None \u003d None,"},{"line_number":55,"context_line":"    ) -\u003e list[dict[str, Any]]:"},{"line_number":56,"context_line":"        body \u003d super()._prepare_request_body("},{"line_number":57,"context_line":"            prepend_key\u003dprepend_key, resource_request_key\u003dresource_request_key"},{"line_number":58,"context_line":"        )"},{"line_number":59,"context_line":"        return [body]"}],"source_content_type":"text/x-python","patch_set":4,"id":"cb5e9e71_4a33a562","line":59,"range":{"start_line":48,"start_character":3,"end_line":59,"end_character":21},"in_reply_to":"56fbdfa4_e3d96673","updated":"2026-10-27 18:43:59.000000000","message":"This says \"request body\" so I think it means the payload for POST, which appears to be a list of dicts: https://docs.openstack.org/api-ref/accelerator/#create-device-profile","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"31149063abda2a49200b026c5eaba8dd9f09153d","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    create_opts \u003d resource.CreateOpts(request_key\u003dNone)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    # TODO(s_shogo): This implementation only treat [ DeviceProfile ], and"},{"line_number":49,"context_line":"    # cannot treat multiple DeviceProfiles in list."},{"line_number":50,"context_line":"    def _prepare_request_body(  # type: ignore[override]"},{"line_number":51,"context_line":"        self,"},{"line_number":52,"context_line":"        *,"},{"line_number":53,"context_line":"        prepend_key: bool,"},{"line_number":54,"context_line":"        resource_request_key: str | None \u003d None,"},{"line_number":55,"context_line":"    ) -\u003e list[dict[str, Any]]:"},{"line_number":56,"context_line":"        body \u003d super()._prepare_request_body("},{"line_number":57,"context_line":"            prepend_key\u003dprepend_key, resource_request_key\u003dresource_request_key"},{"line_number":58,"context_line":"        )"},{"line_number":59,"context_line":"        return [body]"}],"source_content_type":"text/x-python","patch_set":4,"id":"fd61f810_f9335238","line":59,"range":{"start_line":48,"start_character":3,"end_line":59,"end_character":21},"in_reply_to":"5a7e1323_6d0b6d64","updated":"2026-10-28 17:56:50.000000000","message":"OK. I was thinking of some testing I had done on my devstack, for example:\n\n```\nconn.accelerator.patch_accelerator_request(\n    \u0027e67a24eb-a22a-4630-8447-79b010aa8df6\u0027, \n    [\n        {\"op\": \"add\", \"path\": \"/project_id\", \"value\": \"fake\"},\n        {\"op\": \"add\", \"path\": \"/hostname\", \"value\": \"fake\"},\n        {\"op\": \"add\", \"path\": \"/device_rp_uuid\", \"value\": \"fake\"},\n        {\"op\": \"add\", \"path\": \"/instance_uuid\", \"value\": \"fake\"}\n    ]\n)\n```","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e3376a1021ddd29a7f20ea6764fa1a185725ed9d","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    create_opts \u003d resource.CreateOpts(request_key\u003dNone)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    # TODO(s_shogo): This implementation only treat [ DeviceProfile ], and"},{"line_number":49,"context_line":"    # cannot treat multiple DeviceProfiles in list."},{"line_number":50,"context_line":"    def _prepare_request_body(  # type: ignore[override]"},{"line_number":51,"context_line":"        self,"},{"line_number":52,"context_line":"        *,"},{"line_number":53,"context_line":"        prepend_key: bool,"},{"line_number":54,"context_line":"        resource_request_key: str | None \u003d None,"},{"line_number":55,"context_line":"    ) -\u003e list[dict[str, Any]]:"},{"line_number":56,"context_line":"        body \u003d super()._prepare_request_body("},{"line_number":57,"context_line":"            prepend_key\u003dprepend_key, resource_request_key\u003dresource_request_key"},{"line_number":58,"context_line":"        )"},{"line_number":59,"context_line":"        return [body]"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a7e1323_6d0b6d64","line":59,"range":{"start_line":48,"start_character":3,"end_line":59,"end_character":21},"in_reply_to":"5f15225c_d79d5081","updated":"2026-10-28 17:36:07.000000000","message":"no the sdk user shoudl pass a reosuce or list of resouce if it want to do multi create but this is out of scop of this change.\n\nits just exsitng tech debt, cybrog shoudl not eb requriign a list of 1 item today\n\nim not sure if we shoudl supprot mutli create at all in teh future\ni would prefer ot only supprot creating 1 item at a time in which case we weould remvoe the need to rap it in a list in a new microversion\nbut if we do supprot multi create a list of the normal objects makes sense\n\nthe issue with multi create is the partial success case.\nwe can defer that to the cybrog spec when ever we end up fixing this.\n\n_prepare_request_body funciton is nly needed because cybrog is forcing the request to be wrapped in a list which is not normal for a post of a single itme.","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"522f0d270821081c12df27e4c533e28e4d9e511a","unresolved":true,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    create_opts \u003d resource.CreateOpts(request_key\u003dNone)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    # TODO(s_shogo): This implementation only treat [ DeviceProfile ], and"},{"line_number":49,"context_line":"    # cannot treat multiple DeviceProfiles in list."},{"line_number":50,"context_line":"    def _prepare_request_body(  # type: ignore[override]"},{"line_number":51,"context_line":"        self,"},{"line_number":52,"context_line":"        *,"},{"line_number":53,"context_line":"        prepend_key: bool,"},{"line_number":54,"context_line":"        resource_request_key: str | None \u003d None,"},{"line_number":55,"context_line":"    ) -\u003e list[dict[str, Any]]:"},{"line_number":56,"context_line":"        body \u003d super()._prepare_request_body("},{"line_number":57,"context_line":"            prepend_key\u003dprepend_key, resource_request_key\u003dresource_request_key"},{"line_number":58,"context_line":"        )"},{"line_number":59,"context_line":"        return [body]"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f15225c_d79d5081","line":59,"range":{"start_line":48,"start_character":3,"end_line":59,"end_character":21},"in_reply_to":"76a208b9_8891addb","updated":"2026-10-28 16:03:39.000000000","message":"Meaning, the SDK user would pass a list instead of a dict? There is at least already precedent for that with the `patch_accelerator_request()` proxy method for example: https://github.com/openstack/openstacksdk/blob/78b74ba91437c7e70a7874d2370695820e67fee2/openstack/accelerator/v2/_proxy.py#L309","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b7dd4b91380fb6249281feec1b3ed7fa95d32186","unresolved":true,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    create_opts \u003d resource.CreateOpts(request_key\u003dNone)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    # TODO(s_shogo): This implementation only treat [ DeviceProfile ], and"},{"line_number":49,"context_line":"    # cannot treat multiple DeviceProfiles in list."},{"line_number":50,"context_line":"    def _prepare_request_body(  # type: ignore[override]"},{"line_number":51,"context_line":"        self,"},{"line_number":52,"context_line":"        *,"},{"line_number":53,"context_line":"        prepend_key: bool,"},{"line_number":54,"context_line":"        resource_request_key: str | None \u003d None,"},{"line_number":55,"context_line":"    ) -\u003e list[dict[str, Any]]:"},{"line_number":56,"context_line":"        body \u003d super()._prepare_request_body("},{"line_number":57,"context_line":"            prepend_key\u003dprepend_key, resource_request_key\u003dresource_request_key"},{"line_number":58,"context_line":"        )"},{"line_number":59,"context_line":"        return [body]"}],"source_content_type":"text/x-python","patch_set":4,"id":"76a208b9_8891addb","line":59,"range":{"start_line":48,"start_character":3,"end_line":59,"end_character":21},"in_reply_to":"cb5e9e71_4a33a562","updated":"2026-10-28 10:39:11.000000000","message":"oh i see...\nhttps://github.com/openstack/cyborg/blob/master/cyborg/api/controllers/v2/device_profiles.py#L149-L169\n\n`NOTE: Only one device profile supported in Train.`\n`# TODO(Sundar) Support more than one devprof per request, if needed`\n\nwe likelty shoudl fix this in the future\n\nim not sure we shoudl evcer supprot multi create but the minimal enhacnement i coudl see use making woudl be to evolv this to accpet a single json object or a list of object rahter then only accpatetd a list of 1\n\nthat woudl allow use to remvoe this helper.\nadded to https://etherpad.opendev.org/p/cyborg-api-techdebt","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"}],"openstack/tests/functional/accelerator/v2/test_device_profile.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b7a1c955e5a5cfabce4831720bf58a02a3c0b06f","unresolved":true,"context_lines":[{"line_number":51,"context_line":"        # Get by name available since microversion 2.2"},{"line_number":52,"context_line":"        dp \u003d self.user_cloud.accelerator.get_device_profile(self.NAME)"},{"line_number":53,"context_line":"        self.assertIsInstance(dp, _device_profile.DeviceProfile)"},{"line_number":54,"context_line":"        self.assertEqual(self.NAME, dp.name)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # List as regular user"},{"line_number":57,"context_line":"        names \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"7d9216df_6ac03e54","line":54,"updated":"2026-10-27 17:19:16.000000000","message":"i guess we are not gating this based on teh aviabel verson becasue realisticly this has been there for 7+ years at this point so every supported version will supprot this.\n\nwe have not added any new microverion recently but when we do that we will likely need to make some of thse condtions.\n\ni woudl personaly factor this out into its own test_device_profile_by_name\n\nand keep these tests testing one thing but this shoudl work as well.\n\ni just woudl not make them much longer","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b7dd4b91380fb6249281feec1b3ed7fa95d32186","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        # Get by name available since microversion 2.2"},{"line_number":52,"context_line":"        dp \u003d self.user_cloud.accelerator.get_device_profile(self.NAME)"},{"line_number":53,"context_line":"        self.assertIsInstance(dp, _device_profile.DeviceProfile)"},{"line_number":54,"context_line":"        self.assertEqual(self.NAME, dp.name)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # List as regular user"},{"line_number":57,"context_line":"        names \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"a0ffb930_b1f5d997","line":54,"in_reply_to":"74764ae9_0b2b82ff","updated":"2026-10-28 10:39:11.000000000","message":"Acknowledged","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3340397064af2c34c9613224411d5bcf0bba3bca","unresolved":true,"context_lines":[{"line_number":51,"context_line":"        # Get by name available since microversion 2.2"},{"line_number":52,"context_line":"        dp \u003d self.user_cloud.accelerator.get_device_profile(self.NAME)"},{"line_number":53,"context_line":"        self.assertIsInstance(dp, _device_profile.DeviceProfile)"},{"line_number":54,"context_line":"        self.assertEqual(self.NAME, dp.name)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # List as regular user"},{"line_number":57,"context_line":"        names \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"74764ae9_0b2b82ff","line":54,"in_reply_to":"7d9216df_6ac03e54","updated":"2026-10-27 18:43:59.000000000","message":"It was more that with the change in this patch by default the version negotiation will result in 2.2, and yeah I guess since it\u0027s been so long we won\u0027t have candidate that would result in \u003c 2.2 after negotiation.\n\nI usually tend to separate tests that way but in SDK I have gotten review feedback in the past to put all actions in a sequence under one test.","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e3376a1021ddd29a7f20ea6764fa1a185725ed9d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        # Get by name available since microversion 2.2"},{"line_number":52,"context_line":"        dp \u003d self.user_cloud.accelerator.get_device_profile(self.NAME)"},{"line_number":53,"context_line":"        self.assertIsInstance(dp, _device_profile.DeviceProfile)"},{"line_number":54,"context_line":"        self.assertEqual(self.NAME, dp.name)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        # List as regular user"},{"line_number":57,"context_line":"        names \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"eb5e4457_f66aa26e","line":54,"in_reply_to":"a0ffb930_b1f5d997","updated":"2026-10-28 17:36:07.000000000","message":"ok ya this confimrs that directly passing the name string in place works so if you updated the doc string i think im +2","commit_id":"fb4885c7a9785aff740963d00e0531ccd6eb5ed3"}]}
