Skip to content

Commit 2d6ca3c

Browse files
Merge pull request #814 from EdvardM/fix/map-params-type-docstring
Fix: map params type docstring
2 parents b32b84b + 029878d commit 2d6ca3c

File tree

3 files changed

+17
-8
lines changed

3 files changed

+17
-8
lines changed

hug/interface.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ def __init__(self, route, function):
212212
for name, transform in self.interface.input_transformations.items()
213213
}
214214
else:
215+
self.map_params = {}
215216
self.input_transformations = self.interface.input_transformations
216217

217218
if "output" in route:
@@ -323,7 +324,7 @@ def documentation(self, add_to=None):
323324
inputs = doc.setdefault("inputs", OrderedDict())
324325
types = self.interface.spec.__annotations__
325326
for argument in parameters:
326-
kind = types.get(argument, text)
327+
kind = types.get(self._remap_entry(argument), text)
327328
if getattr(kind, "directive", None) is True:
328329
continue
329330

@@ -340,6 +341,9 @@ def _rewrite_params(self, params):
340341
if interface_name in params:
341342
params[internal_name] = params.pop(interface_name)
342343

344+
def _remap_entry(self, interface_name):
345+
return self.map_params.get(interface_name, interface_name)
346+
343347
@staticmethod
344348
def cleanup_parameters(parameters, exception=None):
345349
for _parameter, directive in parameters.items():
@@ -417,8 +421,7 @@ def __call__(self, *args, **kwargs):
417421
self.api.delete_context(context, errors=errors)
418422
return outputs(errors) if outputs else errors
419423

420-
if getattr(self, "map_params", None):
421-
self._rewrite_params(kwargs)
424+
self._rewrite_params(kwargs)
422425
try:
423426
result = self.interface(**kwargs)
424427
if self.transform:
@@ -617,8 +620,7 @@ def exit_callback(message):
617620
elif add_options_to:
618621
pass_to_function[add_options_to].append(option)
619622

620-
if getattr(self, "map_params", None):
621-
self._rewrite_params(pass_to_function)
623+
self._rewrite_params(pass_to_function)
622624

623625
try:
624626
if args:
@@ -816,8 +818,7 @@ def call_function(self, parameters):
816818
parameters = {
817819
key: value for key, value in parameters.items() if key in self.all_parameters
818820
}
819-
if getattr(self, "map_params", None):
820-
self._rewrite_params(parameters)
821+
self._rewrite_params(parameters)
821822

822823
return self.interface(**parameters)
823824

tests/test_documentation.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,3 +185,11 @@ def marshtest() -> Returns():
185185
doc = api.http.documentation()
186186

187187
assert doc["handlers"]["/marshtest"]["POST"]["outputs"]["type"] == "Return docs"
188+
189+
def test_map_params_documentation_preserves_type():
190+
@hug.get(map_params={"from": "from_mapped"})
191+
def map_params_test(from_mapped: hug.types.number):
192+
pass
193+
194+
doc = api.http.documentation()
195+
assert doc["handlers"]["/map_params_test"]["GET"]["inputs"]["from"]["type"] == "A whole number"

tox.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ deps=
88
marshmallow3: marshmallow==3.0.0rc6
99

1010
whitelist_externals=flake8
11-
commands=py.test --cov-report html --cov hug -n auto tests
11+
commands=py.test --durations 3 --cov-report html --cov hug -n auto tests
1212

1313
[testenv:py37-black]
1414
deps=

0 commit comments

Comments
 (0)