Transformers for applying simple transformations of variables

Currently there is no possibility (except for using custom Converters) to even apply very simple transformations to variables, e.g. (use cases):

  • parse "Mon" from a filename using a regexp, but set a property to "Monday"
  • increase an integer derived from a filename by one
  • set a variable to "April" if the value of an element in a file was "4".
  • ...

I would like to propose a straight-forward method to apply common simple transformations to variables without making the cfoods turing-complete or allowing custom code within the cfoods.

DateDir:
  type: Directory
  match: ^Day_(?P<day_short>.*)$  # Example: Day_Mon
  transform:
    MakeDayLong:
      in: $day_short
      out: $day_long
      functions:
      - ifelse:  # name of the function
          match: Mon  # match is one specific argument
          then: Monday  # then another one
      - ifelse:  # next function
          match: Tue
          then: Tuesday

      - ...
  records:
    DayFolder:
      Day: $day_long
    ...

This example is just meant to sketch the idea, of course the detailed syntax is up to discussion. Important requirements:

  • There can be (again) builtin functions and custom functions, that need to be declared in the metadata of the cfood and can use custom python packages.
  • The whole thing should be compatible to our macro system, to allow creating reusable parts.

Some questions:

  • It looks a bit verbose in the above example. We should check what's really needed? Is the name "MakeDayLong" really needed?
  • Is "in" and "out" really necessary?

This is really just a first sketch, but I think a feature like that is urgently needed. So I hope for a lively discussion about the idea. :-)