)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"2db929fafe22640fdbbb3c5036dc3711693f7b5b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e6bf32c7_399c7dd0","updated":"2026-05-06 10:40:14.000000000","message":"the implementation lgtm and it great to have clear docs","commit_id":"c0648c041b0bd71c31493c9ee4e86e0b064541b1"}],"api-ref/source/watcher-api-v1-datamodel.inc":[{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"dacb4a699f93483cff0d3ae1f7c3e76b49eb6a4d","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Returns the information about Data Model."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The response contains only a fixed set of fields for each compute node and"},{"line_number":22,"context_line":"server element in the Compute Data Model. Other fields that are documented"},{"line_number":23,"context_line":"in the ``Response`` section are **not** automatically exposed through this API."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":1,"id":"83a584ba_ff2c3a0f","line":21,"in_reply_to":"8f5df680_319e0a16","updated":"2026-04-30 14:51:34.000000000","message":"Fixed","commit_id":"a24abfcd1894cf5585c2fb95eafdafcc29c75481"}],"releasenotes/notes/freeze-data-model-api-fields-d811e6675c3d455f.yaml":[{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"dacb4a699f93483cff0d3ae1f7c3e76b49eb6a4d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The data_model list API (``GET /v1/data_model``) now returns only a fixed"},{"line_number":5,"context_line":"    set of fields for compute node and server elements instead of exposing"}],"source_content_type":"text/x-yaml","patch_set":1,"id":"4751a7d6_671691b9","line":2,"in_reply_to":"edc20d77_0c5a4cdd","updated":"2026-04-30 14:51:34.000000000","message":"Done","commit_id":"a24abfcd1894cf5585c2fb95eafdafcc29c75481"}],"watcher/api/controllers/v1/data_model.py":[{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"dacb4a699f93483cff0d3ae1f7c3e76b49eb6a4d","unresolved":true,"context_lines":[{"line_number":35,"context_line":"#   1. Add a new minor version constant in api/controllers/v1/versions.py"},{"line_number":36,"context_line":"#   2. Add the prefixed field name (\u0027node_\u003cfield\u003e\u0027) to this set"},{"line_number":37,"context_line":"#   3. Add version-hiding logic in hide_fields_in_newer_versions() if needed"},{"line_number":38,"context_line":"FROZEN_NODE_FIELDS \u003d frozenset("},{"line_number":39,"context_line":"    {"},{"line_number":40,"context_line":"        \u0027node_uuid\u0027,"},{"line_number":41,"context_line":"        \u0027node_hostname\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"6064a524_aa9a5f44","line":38,"in_reply_to":"6dfa1218_0a338d0e","updated":"2026-04-30 14:51:34.000000000","message":"Actually, that\u0027s the goal of this patch, avoid fields being exposed in the API without explicit request from the developer.","commit_id":"a24abfcd1894cf5585c2fb95eafdafcc29c75481"},{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"dacb4a699f93483cff0d3ae1f7c3e76b49eb6a4d","unresolved":true,"context_lines":[{"line_number":79,"context_line":"_FROZEN_ALL_FIELDS \u003d FROZEN_NODE_FIELDS | FROZEN_SERVER_FIELDS"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"def filter_data_model_fields(obj):"},{"line_number":83,"context_line":"    \"\"\"Remove fields not in the frozen API field set from each context entry."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    This prevents newly-added internal model fields from leaking into the"}],"source_content_type":"text/x-python","patch_set":1,"id":"b4f9d5f3_6df582f6","line":82,"in_reply_to":"80c7a56f_c420fb23","updated":"2026-04-30 14:51:34.000000000","message":"I followed the same approach as in hide_fields_in_newer_versions. I think in this case it\u0027s a good approach given that this is only intended to be used for the API datamodel controller.","commit_id":"a24abfcd1894cf5585c2fb95eafdafcc29c75481"}],"watcher/tests/unit/api/v1/test_data_model.py":[{"author":{"_account_id":16312,"name":"Alfredo Moralejo","email":"amoralej@redhat.com","username":"amoralej"},"change_message_id":"dacb4a699f93483cff0d3ae1f7c3e76b49eb6a4d","unresolved":true,"context_lines":[{"line_number":315,"context_line":"                else:"},{"line_number":316,"context_line":"                    obj[name] \u003d None if field.nullable else \u0027fake\u0027"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def test_all_model_fields_filtered_to_frozen_set(self):"},{"line_number":319,"context_line":"        \"\"\"All fields on real model objects reach the filter."},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"        The faker may leave optional fields (no default) unset, causing"}],"source_content_type":"text/x-python","patch_set":1,"id":"50253ac0_9a08467f","line":318,"in_reply_to":"ef1c738a_34cd1a2e","updated":"2026-04-30 14:51:34.000000000","message":"We control the content of the model in generate_scenario_11_with_2_nodes_2_instances() and, if that changes and a compute only node is returned, it\u0027d fail the assert, as we are comparing the attributes in the response with the ones on the entire list of ComputeNode + Server.","commit_id":"a24abfcd1894cf5585c2fb95eafdafcc29c75481"}]}
