From aeca32fd824a187b50f7f47371b84e268e29dbd7 Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Tue, 1 Jul 2025 18:16:24 +0530 Subject: [PATCH 1/2] feat: add support for nullable parameters in API calls in python --- templates/python/base/params.twig | 6 ++++++ templates/python/base/requests/api.twig | 2 +- templates/python/package/client.py.twig | 8 ++++++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/templates/python/base/params.twig b/templates/python/base/params.twig index 8a574ec96..0609239f0 100644 --- a/templates/python/base/params.twig +++ b/templates/python/base/params.twig @@ -1,10 +1,16 @@ api_params = {} + nullable_params = [] + {% if method.parameters.all | length %} {% for parameter in method.parameters.all %} {% if parameter.required and not parameter.nullable %} if {{ parameter.name | escapeKeyword | caseSnake }} is None: raise {{spec.title | caseUcfirst}}Exception('Missing required parameter: "{{ parameter.name | escapeKeyword | caseSnake }}"') +{% endif %} +{% if parameter.nullable %} + nullable_params.append('{{ parameter.name }}') + {% endif %} {% endfor %} {% for parameter in method.parameters.path %} diff --git a/templates/python/base/requests/api.twig b/templates/python/base/requests/api.twig index 82ef6299f..84ec4ffc9 100644 --- a/templates/python/base/requests/api.twig +++ b/templates/python/base/requests/api.twig @@ -5,4 +5,4 @@ {% for key, header in method.headers %} '{{ key }}': '{{ header }}', {% endfor %} - }, api_params{% if method.type == 'webAuth' %}, response_type='location'{% endif %}) \ No newline at end of file + }, api_params, nullable_params{% if method.type == 'webAuth' %}, response_type='location'{% endif %}) \ No newline at end of file diff --git a/templates/python/package/client.py.twig b/templates/python/package/client.py.twig index f9d4b90f1..95028bd79 100644 --- a/templates/python/package/client.py.twig +++ b/templates/python/package/client.py.twig @@ -49,14 +49,18 @@ class Client: return self {% endfor %} - def call(self, method, path='', headers=None, params=None, response_type='json'): + def call(self, method, path='', headers=None, params=None, response_type='json', nullable_params=None): if headers is None: headers = {} if params is None: params = {} - params = {k: v for k, v in params.items() if v is not None} # Remove None values from params dictionary + if nullable_params is None: + nullable_params = [] + + # Only filter out None values for non-nullable params + params = {k: v for k, v in params.items() if v is not None or k in nullable_params} data = {} files = {} From a1811b8f2000197ead0615abc05cfec51170cb9b Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Tue, 1 Jul 2025 18:31:35 +0530 Subject: [PATCH 2/2] fix: position of params --- templates/python/package/client.py.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/python/package/client.py.twig b/templates/python/package/client.py.twig index 95028bd79..db2ad5f7b 100644 --- a/templates/python/package/client.py.twig +++ b/templates/python/package/client.py.twig @@ -49,7 +49,7 @@ class Client: return self {% endfor %} - def call(self, method, path='', headers=None, params=None, response_type='json', nullable_params=None): + def call(self, method, path='', headers=None, params=None, nullable_params=None, response_type='json'): if headers is None: headers = {}