bug: `simpleeval==1.0.5` breaks for `stream_maps` expressions referencing modules
kind/BugDependencies
### Singer SDK Version
0.53.5
### Is this a regression?
- [x] Yes
### Python Version
3.9
### Bug scope
Mapping (stream maps, flattening, etc.)
### Operating System
_No response_
### Description
https://github.com/danthedeckie/simpleeval/releases/tag/1.0.5
> Breaking Change:
>
> - Modules & Submodules now are not directly usable as names or as attributes of other items, if you still need this functionality, then use the new ModuleWrapper, or subclass SimpleEval to bypass it.
```
Traceback (most recent call last):
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/singer_sdk/mapper.py", line 366, in _eval
result: str | int | float = self.expr_evaluator.eval(
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 932, in eval
return super(EvalWithCompoundTypes, self).eval(expr, previously_parsed)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 658, in eval
return self._eval(previously_parsed or self.parse(expr))
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 670, in _eval
result = handler(node)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 675, in _eval_expr
return self._eval(node.value)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 670, in _eval
result = handler(node)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 773, in _eval_call
return func(
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 774, in <genexpr>
*(self._eval(a) for a in node.args), **dict(self._eval(k) for k in node.keywords)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 670, in _eval
result = handler(node)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 761, in _eval_call
func = self._eval(node.func)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 670, in _eval
result = handler(node)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 832, in _eval_attribute
node_evaluated = self._eval(node.value)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 670, in _eval
result = handler(node)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 761, in _eval_call
func = self._eval(node.func)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 670, in _eval
result = handler(node)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 832, in _eval_attribute
node_evaluated = self._eval(node.value)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 670, in _eval
result = handler(node)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 832, in _eval_attribute
node_evaluated = self._eval(node.value)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 671, in _eval
self._check_disallowed_items(result)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/simpleeval.py", line 625, in _check_disallowed_items
raise FeatureNotAvailable("Sorry, modules are not allowed")
simpleeval.FeatureNotAvailable: Sorry, modules are not allowed
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/bin/meltano-map-transform", line 10, in <module>
sys.exit(StreamTransform.cli())
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/click/core.py", line 1161, in __call__
return self.main(*args, **kwargs)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/click/core.py", line 1082, in main
rv = self.invoke(ctx)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/singer_sdk/plugin_base.py", line 98, in invoke
return super().invoke(ctx)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/click/core.py", line 1443, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/click/core.py", line 788, in invoke
return __callback(*args, **kwargs)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/singer_sdk/mapper_base.py", line 158, in invoke
mapper.listen(file_input)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/singer_sdk/plugin_base.py", line 775, in listen
counter = self.process_lines(file_input)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/singer_sdk/plugin_base.py", line 801, in process_lines
return self.message_reader.process_lines(
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/singer_sdk/singerlib/encoding/base.py", line 70, in process_lines
callback(line_dict)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/singer_sdk/mapper_base.py", line 64, in _process_record_message
self._write_messages(self.map_record_message(message_dict))
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/singer_sdk/mapper_base.py", line 57, in _write_messages
for message in messages:
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/meltano_map_transform/mapper.py", line 134, in map_record_message
mapped_record = stream_map.transform(message_dict["record"])
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/singer_sdk/mapper.py", line 299, in transform
transformed_record = self._transform_fn(record)
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/singer_sdk/mapper.py", line 637, in transform_fn
result[prop_key] = self._eval(
File "/tmp/p/.meltano/mappers/meltano-map-transformer/venv/lib/python3.9/site-packages/singer_sdk/mapper.py", line 372, in _eval
raise MapExpressionError(msg) from ex
singer_sdk.exceptions.MapExpressionError: Failed to evaluate simpleeval expressions str(datetime.datetime.strptime(start, "%H:%M:%S").strftime("%H:%M:%S")).
```
### Link to Slack/Linen
_No response_
关闭于 2026-03-13 0 条评论