From 01fccc63d9ab85342ac542d42722583ef920d058 Mon Sep 17 00:00:00 2001 From: Joseph HENRY Date: Wed, 27 May 2026 17:11:05 +0200 Subject: [PATCH] fix update_data: PUT only changed fields, not the whole entity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PUTting the full entity dict back to data/entities/{id} sends server-managed fields (id, created_at, updated_at, project_id, entity_type_id, ...) that newer Kitsu rejects with ParameterException. Build a partial payload with only name/description/nb_frames/data — and only fetch/merge existing data when the caller is actually updating custom_data. Co-Authored-By: Claude Opus 4.7 (1M context) --- resources/trackers/kitsu.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/resources/trackers/kitsu.py b/resources/trackers/kitsu.py index 581bb2c..48b5287 100644 --- a/resources/trackers/kitsu.py +++ b/resources/trackers/kitsu.py @@ -415,27 +415,28 @@ class Kitsu(Tracker): def update_data(self, entity, custom_data={}, name=None, description=None, frames=None, clear=False): if isinstance(entity, dict): entity_id = entity['id'] + existing_data = entity.get('data') or {} else: entity_id = self.get_id(entity) - entity = gazu.client.fetch_one('entities', entity_id) + existing_data = None + payload = {} if name: - entity['name'] = name + payload['name'] = name if description: - entity['description'] = description + payload['description'] = description if frames: - entity['nb_frames'] = frames + payload['nb_frames'] = frames - if clear or not entity['data']: - entity['data'] = custom_data - else: - entity['data'].update(custom_data) + if custom_data or clear: + if clear: + payload['data'] = dict(custom_data) + else: + if existing_data is None: + existing_data = gazu.client.fetch_one('entities', entity_id).get('data') or {} + payload['data'] = {**existing_data, **custom_data} - #print('######UPDATE DATA') - #pprint(entity) - entity_data = gazu.client.put(f"data/entities/{entity_id}", entity) - #print() - #pprint(entity) + entity_data = gazu.client.put(f"data/entities/{entity_id}", payload) return entity_data['data']