Skip to content
Open
9 changes: 9 additions & 0 deletions src/SDK/Language/Python.php
Original file line number Diff line number Diff line change
Expand Up @@ -329,12 +329,21 @@ public function getTypeName(array $parameter, array $spec = []): string
$enumType = isset($parameter['enumName'])
? \ucfirst($parameter['enumName'])
: \ucfirst($parameter['name']);
if ($enumType === 'Type') {
$enumType = 'TypeEnum';
}

$typeName = 'List[' . $enumType . ']';
} elseif (isset($parameter['enumName'])) {
$typeName = \ucfirst($parameter['enumName']);
if ($typeName === 'Type') {
$typeName = 'TypeEnum';
}
} elseif (!empty($parameter['enumValues'])) {
$typeName = \ucfirst($parameter['name']);
if ($typeName === 'Type') {
$typeName = 'TypeEnum';
}
} elseif (!empty($parameter['array']['model'])) {
$typeName = 'List[' . $this->toPascalCase($parameter['array']['model']) . ']';
} elseif (!empty($parameter['model'])) {
Expand Down
38 changes: 38 additions & 0 deletions templates/python/base/requests/api_async.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
response = await self.client.call_async('{{ method.method | caseLower }}', api_path, {
{% for parameter in method.parameters.header %}
'{{ parameter.name }}': self._normalize_value({{ parameter.name | escapeKeyword | caseSnake }}),
{% endfor %}
{% for key, header in method.headers %}
'{{ key }}': '{{ header }}',
{% endfor %}
}, api_params{% if method.type == 'webAuth' %}, response_type='location'{% endif %})
{% if method.responseModels is defined and method.responseModels|length > 1 %}
{% set hasResponseDiscriminator = method.responseDiscriminator is defined and method.responseDiscriminator is not empty %}
{% set responseDiscriminator = method.responseDiscriminator ?? {} %}
{% if hasResponseDiscriminator %}
if not isinstance(response, dict):
raise AppwriteException('Expected object response when hydrating a response model')
{% for modelName, conditions in responseDiscriminator %}

if {% for field, expectedValue in conditions %}response.get('{{ field }}') == '{{ expectedValue }}'{% if not loop.last %} and {% endif %}{% endfor %}:
return self._parse_response(response, model={% if (modelName | caseUcfirst) == (service.name | caseUcfirst) %}{{ modelName | caseUcfirst }}Model{% else %}{{ modelName | caseUcfirst }}{% endif %})
{% endfor %}

raise AppwriteException('Unable to match response to any known model')
{% else %}

return self._parse_response(response, model={% if (method.responseModel | caseUcfirst) == (service.name | caseUcfirst) %}{{ method.responseModel | caseUcfirst }}Model{% else %}{{ method.responseModel | caseUcfirst }}{% endif %})
{% endif %}
{% elseif method.responseModel and method.responseModel != 'any' %}
{% set isGenericResponse = method.responseModel | hasGenericType(spec) %}
{% if isGenericResponse %}

return {{ method.responseModel | caseUcfirst }}.with_data(response, model_type)
{% else %}

return self._parse_response(response, model={% if (method.responseModel | caseUcfirst) == (service.name | caseUcfirst) %}{{ method.responseModel | caseUcfirst }}Model{% else %}{{ method.responseModel | caseUcfirst }}{% endif %})
{% endif %}
{% else %}

return response
{% endif %}
59 changes: 59 additions & 0 deletions templates/python/base/requests/file_async.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
{% for parameter in method.parameters.all %}
{% if parameter.type == 'file' %}
param_name = '{{ parameter.name }}'

{% endif %}
{% endfor %}

upload_id = ''
{% for parameter in method.parameters.all %}
{% if parameter.isUploadID %}
upload_id = {{ parameter.name | escapeKeyword | caseSnake }}
{% endif %}
{% endfor %}

response = await self.client.chunked_upload_async(
api_path,
{
{% for parameter in method.parameters.header %}
'{{ parameter.name }}': self._normalize_value({{ parameter.name | escapeKeyword | caseSnake }}),
{% endfor %}
{% for key, header in method.headers %}
'{{ key }}': '{{ header }}',
{% endfor %}
},
api_params,
param_name,
on_progress,
upload_id
)
{% if method.responseModels is defined and method.responseModels|length > 1 %}
{% set hasResponseDiscriminator = method.responseDiscriminator is defined and method.responseDiscriminator is not empty %}
{% set responseDiscriminator = method.responseDiscriminator ?? {} %}
{% if hasResponseDiscriminator %}
if not isinstance(response, dict):
raise AppwriteException('Expected object response when hydrating a response model')
{% for modelName, conditions in responseDiscriminator %}

if {% for field, expectedValue in conditions %}response.get('{{ field }}') == '{{ expectedValue }}'{% if not loop.last %} and {% endif %}{% endfor %}:
return self._parse_response(response, model={% if (modelName | caseUcfirst) == (service.name | caseUcfirst) %}{{ modelName | caseUcfirst }}Model{% else %}{{ modelName | caseUcfirst }}{% endif %})
{% endfor %}

raise AppwriteException('Unable to match response to any known model')
{% else %}

return self._parse_response(response, model={% if (method.responseModel | caseUcfirst) == (service.name | caseUcfirst) %}{{ method.responseModel | caseUcfirst }}Model{% else %}{{ method.responseModel | caseUcfirst }}{% endif %})
{% endif %}
{% elseif method.responseModel and method.responseModel != 'any' %}
{% set isGenericResponse = method.responseModel | hasGenericType(spec) %}
{% if isGenericResponse %}

return {{ method.responseModel | caseUcfirst }}.with_data(response, model_type)
{% else %}

return self._parse_response(response, model={% if (method.responseModel | caseUcfirst) == (service.name | caseUcfirst) %}{{ method.responseModel | caseUcfirst }}Model{% else %}{{ method.responseModel | caseUcfirst }}{% endif %})
{% endif %}
{% else %}

return response
{% endif %}
Loading
Loading