diff --git a/PROCESSORS.md b/PROCESSORS.md index 5540d2a..645f97e 100644 --- a/PROCESSORS.md +++ b/PROCESSORS.md @@ -288,7 +288,7 @@ def set_type(name, resources=-1, **options): pass ``` -- `name` - the name of the field to modify +- `name` - the name of the field to modify (or a regular expression to match multiple fields) - `resources` - A name of a resource to operate on - A regular expression matching resource names diff --git a/dataflows/VERSION b/dataflows/VERSION index cd23180..32786aa 100644 --- a/dataflows/VERSION +++ b/dataflows/VERSION @@ -1 +1 @@ -0.0.17 +0.0.18 diff --git a/dataflows/processors/set_type.py b/dataflows/processors/set_type.py index c30c779..1275abf 100644 --- a/dataflows/processors/set_type.py +++ b/dataflows/processors/set_type.py @@ -1,3 +1,5 @@ +import re + from ..helpers.resource_matcher import ResourceMatcher from .. import DataStreamProcessor, schema_validator @@ -6,7 +8,7 @@ class set_type(DataStreamProcessor): def __init__(self, name, resources=-1, **options): super(set_type, self).__init__() - self.name = name + self.name = re.compile(name) self.options = options self.resources = resources @@ -24,9 +26,8 @@ def process_datapackage(self, dp): for res in dp.descriptor['resources']: if self.matcher.match(res['name']): for field in res['schema']['fields']: - if field['name'] == self.name: + if self.name.match(field['name']): field.update(self.options) added = True - break assert added, 'Failed to find field {} in schema'.format(self.name) return dp diff --git a/tests/test_lib.py b/tests/test_lib.py index b8c96b4..5186129 100644 --- a/tests/test_lib.py +++ b/tests/test_lib.py @@ -387,15 +387,15 @@ def test_set_type_resources(): f = Flow( [dict(a=str(i)) for i in range(10)], [dict(b=str(i)) for i in range(10)], - [dict(c=str(i)) for i in range(10)], + [dict(c='0_' + str(i)) for i in range(10)], set_type('a', resources='res_[1]', type='integer'), set_type('b', resources=['res_2'], type='integer'), - set_type('c', resources=-1, type='integer'), + set_type('[cd]', resources=-1, type='number', groupChar='_'), validate() ) results, dp, stats = f.results() print(dp.descriptor) assert results[0][1]['a'] == 1 assert results[1][3]['b'] == 3 - assert results[2][8]['c'] == 8 + assert results[2][8]['c'] == 8.0 \ No newline at end of file