diff --git a/frictionless/steps/field/__spec__/test_field_update.py b/frictionless/steps/field/__spec__/test_field_update.py index 9d32b3e979..4211c554b6 100644 --- a/frictionless/steps/field/__spec__/test_field_update.py +++ b/frictionless/steps/field/__spec__/test_field_update.py @@ -144,3 +144,31 @@ def test_step_field_update_referenced_as_foreign_key(): "reference": {"fields": ["pkey"], "resource": "resource1"}, } ] + + +def test_step_field_update_with_function_and_pass_row_true(): + source = TableResource(path="data/transform.csv") + + def add_country_to_id(value, row): + return str(value) + " " + row["name"] + + pipeline = Pipeline( + steps=[ + steps.field_update( + name="id", function=add_country_to_id, + descriptor={"type": "string"}, pass_row=True) + ], + ) + target = source.transform(pipeline) + assert target.schema.to_descriptor() == { + "fields": [ + {"name": "id", "type": "string"}, + {"name": "name", "type": "string"}, + {"name": "population", "type": "integer"}, + ] + } + assert target.read_rows() == [ + {"id": "1 germany", "name": "germany", "population": 83}, + {"id": "2 france", "name": "france", "population": 66}, + {"id": "3 spain", "name": "spain", "population": 47}, + ] diff --git a/frictionless/steps/field/field_update.py b/frictionless/steps/field/field_update.py index e93097601d..7742028619 100644 --- a/frictionless/steps/field/field_update.py +++ b/frictionless/steps/field/field_update.py @@ -50,11 +50,17 @@ class field_update(Step): A descriptor for the field to set the metadata. """ + pass_row: bool = False + """ + Pass the entire row as a second parameter for the transformation function if set to True. + The first parameter (the value) remains unchanged. + """ + # Transform def transform_resource(self, resource: Resource): function = self.function - pass_row = False + pass_row = self.pass_row table = resource.to_petl() # type: ignore descriptor = deepcopy(self.descriptor) or {} new_name = descriptor.get("name") @@ -106,5 +112,6 @@ def transform_resource(self, resource: Resource): "value": {}, "formula": {"type": "string"}, "descriptor": {"type": "object"}, + "pass_row": {"type": "boolean"}, }, }