parser.py 617 B

12345678910111213141516171819
  1. import re
  2. from core.workflow.entities.variable_pool import VariablePool
  3. from . import SegmentGroup, factory
  4. VARIABLE_PATTERN = re.compile(r'\{\{#([a-zA-Z0-9_]{1,50}(?:\.[a-zA-Z_][a-zA-Z0-9_]{0,29}){1,10})#\}\}')
  5. def convert_template(*, template: str, variable_pool: VariablePool):
  6. parts = re.split(VARIABLE_PATTERN, template)
  7. segments = []
  8. for part in filter(lambda x: x, parts):
  9. if '.' in part and (value := variable_pool.get(part.split('.'))):
  10. segments.append(value)
  11. else:
  12. segments.append(factory.build_segment(part))
  13. return SegmentGroup(value=segments)