Skip to content

Commit 391174e

Browse files
authored
Merge pull request #1777 from appwrite/fix/python-payload-only-additional-properties
Fix Python payload-only model serialization
2 parents 0a3e3e8 + ce688cb commit 391174e

3 files changed

Lines changed: 12 additions & 3 deletions

File tree

src/SDK/Language/Python.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -781,7 +781,7 @@ protected function getAdditionalPropertiesExpectationLines(?string $model, array
781781
$modelDef = $spec['definitions'][$model];
782782
$lines = [];
783783

784-
if (!empty($modelDef['additionalProperties'])) {
784+
if (!empty($modelDef['additionalProperties']) && !empty($modelDef['properties'] ?? [])) {
785785
$lines[] = $target . "['data'] = {}";
786786
}
787787

templates/python/package/models/model.py.twig

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,14 @@ class {{ definition.name | caseUcfirst }}(AppwriteModel{% if isGeneric %}, Gener
128128
@model_serializer(mode='wrap')
129129
def _serialize_model(self, handler, info):
130130
result = handler(self)
131-
result['{{ 'data' }}'] = self._serialize_data(info)
131+
data = self._serialize_data(info)
132+
{% if definition.properties | length > 0 %}
133+
result['{{ 'data' }}'] = data
132134
return result
135+
{% else %}
136+
if isinstance(result, dict) and isinstance(data, dict):
137+
return {**result, **data}
138+
139+
return data
140+
{% endif %}
133141
{% endif %}

templates/python/package/service.py.twig

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,6 @@ class Service:
4646
return model.model_validate(response)
4747
except ValidationError as error:
4848
raise AppwriteException(
49-
f'Unable to parse response into {model.__name__}: {error}'
49+
f'Unable to parse response into {model.__name__}: {error}',
50+
response=response,
5051
) from error

0 commit comments

Comments
 (0)