Skip to content

Commit c24a34b

Browse files
committed
separate wording for optional and required path params
1 parent 9e439c4 commit c24a34b

File tree

4 files changed

+36
-18
lines changed

4 files changed

+36
-18
lines changed

dlt_init_openapi/config.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,10 @@ class Config(BaseModel):
4949
"""Which class to use for detecting"""
5050
global_limit: int = 0
5151
"""Set a limit on how many items are emitted from a resource"""
52-
parameter_default_value: str = "FILL_ME_IN"
52+
required_parameter_default_value: str = "FILL_ME_IN"
5353
"""default to render for required parameters that do not have a default in the spec"""
54+
unrequired_parameter_default_value: str = "OPTIONAL_CONFIG"
55+
"""default to render for unrequired parameters that do not have a default in the spec"""
5456
allow_openapi_2: bool = False
5557
"""Allow to use OpenAPI 2 specs"""
5658

dlt_init_openapi/parser/endpoints.py

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -123,27 +123,36 @@ def unresolvable_path_param_names(self) -> List[str]:
123123
return [p for p in params if p != transformer_param]
124124

125125
@property
126-
def unresolvable_query_param_names(self) -> List[str]:
126+
def unresolvable_query_params(self) -> List[Parameter]:
127127
"""returns a list of required query param names with params that are used by the paginator excluded"""
128+
print("HERE")
128129
paginator_params = self.detected_pagination.param_names if self.detected_pagination else []
129-
query_param_names = []
130+
query_params: List[Parameter] = []
130131
for param in self.list_all_parameters:
131132
if param.name not in paginator_params and param.location == "query":
132-
query_param_names.append(param.name)
133-
return query_param_names
133+
query_params.append(param)
134+
return query_params
134135

135-
def is_query_param_required(self, param_name: str) -> bool:
136-
for key, p in self.parameters.items():
137-
if p.name == param_name and p.location == "query":
138-
return p.required
139-
return False
136+
@property
137+
def unresolvable_required_query_param_names(self) -> List[str]:
138+
"""returns a list of required query param names with params that are used by the paginator excluded"""
139+
return [param.name for param in self.unresolvable_query_params if param.required]
140+
141+
@property
142+
def unresolvable_unrequired_query_param_names(self) -> List[str]:
143+
return [param.name for param in self.unresolvable_query_params if not param.required]
140144

141145
def default_for_param(self, location: Literal["path", "query"], param_name: str) -> str:
142146
"""get's a default value for the given param, returns"""
147+
param: Parameter = None
143148
for key, p in self.parameters.items():
144-
if p.name == param_name and p.location == location and p.default:
145-
return p.default
146-
return self.context.config.parameter_default_value
149+
if p.name == param_name and p.location == location:
150+
param = p
151+
if param and param.default:
152+
return param.default
153+
if not param or param.required or location == "path":
154+
return self.context.config.required_parameter_default_value
155+
return self.context.config.unrequired_parameter_default_value
147156

148157
@property
149158
def render_description(self) -> Optional[str]:

dlt_init_openapi/renderer/default/templates/source.py.j2

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def {{ source_name }}(
6060
"data_selector": "{{ endpoint.data_json_path }}",
6161
{% endif %}
6262
"path": "{{endpoint.path }}",
63-
{% if endpoint.transformer or endpoint.unresolvable_path_param_names or endpoint.unresolvable_query_param_names %}
63+
{% if endpoint.transformer or endpoint.unresolvable_path_param_names or endpoint.unresolvable_query_params %}
6464
"params": {
6565
{% if endpoint.transformer %}
6666
{% for key, value in endpoint.transformer.path_params_mapping.items()%}
@@ -72,11 +72,18 @@ def {{ source_name }}(
7272
{% endfor %}
7373
{% endif %}
7474
{% for param_name in endpoint.unresolvable_path_param_names %}
75-
"{{param_name}}": "{{ endpoint.default_for_param('path', param_name) }}", # TODO: fill in path parameter
75+
"{{param_name}}": "{{ endpoint.default_for_param('path', param_name) }}", # TODO: fill in required path parameter
7676
{% endfor %}
77-
{% for param_name in endpoint.unresolvable_query_param_names %}
78-
{% if not endpoint.is_query_param_required(param_name) %}# {% endif %}"{{param_name}}": "{{ endpoint.default_for_param('query', param_name) }}", # TODO: fill in query parameter
77+
{% for param_name in endpoint.unresolvable_required_query_param_names %}
78+
"{{param_name}}": "{{ endpoint.default_for_param('query', param_name) }}", # TODO: fill in required query parameter
7979
{% endfor %}
80+
{% if endpoint.unresolvable_unrequired_query_param_names %}
81+
# the parameters below can optionally be configured
82+
{% for param_name in endpoint.unresolvable_unrequired_query_param_names %}
83+
# "{{param_name}}": "{{ endpoint.default_for_param('query', param_name) }}",
84+
{% endfor %}
85+
{% endif %}
86+
8087
},
8188
{% endif %}
8289
{% if endpoint.render_pagination_args %}

tests/integration/basics/test_params.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from dlt_init_openapi.config import Config
66
from tests.integration.utils import get_indexed_resources
77

8-
DEFAULT_VALUE = Config().parameter_default_value
8+
DEFAULT_VALUE = Config().required_parameter_default_value
99

1010

1111
@pytest.fixture(scope="module")

0 commit comments

Comments
 (0)