Source code for dffml.operation.preprocess

import ast

from ..df.types import Definition
from ..df.base import op


# Definitions
InputStr = Definition(name="InputStr", primitive="str")
EvaluatedStr = Definition(name="EvaluatedStr", primitive="generic")


[docs]@op( inputs={"str_to_eval": InputStr}, outputs={"str_after_eval": EvaluatedStr}, conditions=[], ) async def literal_eval(str_to_eval: str): """ Evaluate the input using ast.literal_eval() Parameters ---------- str_to_eval : str A string to be evaluated. Returns ------- dict A dict containing python literal. Examples -------- The following example shows how to use literal_eval. >>> import asyncio >>> from dffml import * >>> >>> dataflow = DataFlow.auto(literal_eval, GetSingle) >>> dataflow.seed.append( ... Input( ... value=[literal_eval.op.outputs["str_after_eval"].name,], ... definition=GetSingle.op.inputs["spec"], ... ) ... ) >>> inputs = [ ... Input( ... value="[1,2,3]", ... definition=literal_eval.op.inputs["str_to_eval"], ... parents=None, ... ) ... ] >>> >>> async def main(): ... async for ctx, results in MemoryOrchestrator.run(dataflow, inputs): ... print(results) >>> >>> asyncio.run(main()) {'EvaluatedStr': [1, 2, 3]} """ value = ast.literal_eval(str_to_eval) return {"str_after_eval": value}