Skip to content

Commit 31e58f3

Browse files
authored
python: optional transformer argument for parameter types (#288)
1 parent 3366223 commit 31e58f3

File tree

5 files changed

+23
-4
lines changed

5 files changed

+23
-4
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
88
## [Unreleased]
99
### Fixed
1010
- [Python] Remove support for Python 3.7 and extend support to 3.12 ([#280](https://github.com/cucumber/cucumber-expressions/pull/280))
11+
- [Python] The `ParameterType` constructor's `transformer` should be optional ([#288](https://github.com/cucumber/cucumber-expressions/pull/288))
1112

1213
## [17.0.2] - 2024-02-20
1314
### Changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ ParameterType(
165165
name= "color",
166166
regexp= "red|blue|yellow",
167167
type= Color,
168-
transformer= lambda s: Color(),
168+
transformer= lambda s: Color(s),
169169
)
170170
```
171171

python/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
__pycache__
12
venv/
23
# Pytest
34
.pytest_cache

python/cucumber_expressions/parameter_type.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from __future__ import annotations
22

33
import re
4-
from typing import Pattern
4+
from typing import Callable, Optional, Pattern
55

66
from cucumber_expressions.errors import CucumberExpressionError
77

@@ -47,7 +47,7 @@ def __init__(
4747
name,
4848
regexp,
4949
type,
50-
transformer,
50+
transformer: Optional[Callable] = None,
5151
use_for_snippets: bool = True,
5252
prefer_for_regexp_match: bool = False,
5353
):
@@ -69,7 +69,7 @@ def __init__(
6969
if self.name:
7070
self._check_parameter_type_name(self.name)
7171
self.type = type
72-
self.transformer = transformer
72+
self.transformer = transformer or (lambda value: type(value))
7373
self._use_for_snippets = use_for_snippets
7474
self._prefer_for_regexp_match = prefer_for_regexp_match
7575
self.regexps = self.to_array(regexp)

python/tests/test_custom_parameter_type.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,23 @@ def test_matches_parameters_with_custom_parameter_type(self):
6262
transformed_argument_value = expression.match("I have a red ball")[0]
6363
assert transformed_argument_value.value == Color("red")
6464

65+
def test_casts_to_type_without_transformer(
66+
self,
67+
):
68+
parameter_type_registry = ParameterTypeRegistry()
69+
parameter_type_registry.define_parameter_type(
70+
ParameterType(
71+
"color",
72+
r"red|blue|yellow",
73+
Color,
74+
)
75+
)
76+
expression = CucumberExpression(
77+
"I have a {color} ball", parameter_type_registry
78+
)
79+
argument_value = expression.match("I have a red ball")[0].value
80+
assert argument_value == Color("red")
81+
6582
def test_matches_parameters_without_snippet_and_regex_parameters(
6683
self,
6784
):

0 commit comments

Comments
 (0)