workflow_fields.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from flask_restful import fields
  2. from core.app.segments import SecretVariable, SegmentType, Variable
  3. from core.helper import encrypter
  4. from fields.member_fields import simple_account_fields
  5. from libs.helper import TimestampField
  6. ENVIRONMENT_VARIABLE_SUPPORTED_TYPES = (SegmentType.STRING, SegmentType.NUMBER, SegmentType.SECRET)
  7. class EnvironmentVariableField(fields.Raw):
  8. def format(self, value):
  9. # Mask secret variables values in environment_variables
  10. if isinstance(value, SecretVariable):
  11. return {
  12. 'id': value.id,
  13. 'name': value.name,
  14. 'value': encrypter.obfuscated_token(value.value),
  15. 'value_type': value.value_type.value,
  16. }
  17. if isinstance(value, Variable):
  18. return {
  19. 'id': value.id,
  20. 'name': value.name,
  21. 'value': value.value,
  22. 'value_type': value.value_type.value,
  23. }
  24. if isinstance(value, dict):
  25. value_type = value.get('value_type')
  26. if value_type not in ENVIRONMENT_VARIABLE_SUPPORTED_TYPES:
  27. raise ValueError(f'Unsupported environment variable value type: {value_type}')
  28. return value
  29. conversation_variable_fields = {
  30. 'id': fields.String,
  31. 'name': fields.String,
  32. 'value_type': fields.String(attribute='value_type.value'),
  33. 'value': fields.Raw,
  34. 'description': fields.String,
  35. }
  36. workflow_fields = {
  37. 'id': fields.String,
  38. 'graph': fields.Raw(attribute='graph_dict'),
  39. 'features': fields.Raw(attribute='features_dict'),
  40. 'hash': fields.String(attribute='unique_hash'),
  41. 'created_by': fields.Nested(simple_account_fields, attribute='created_by_account'),
  42. 'created_at': TimestampField,
  43. 'updated_by': fields.Nested(simple_account_fields, attribute='updated_by_account', allow_null=True),
  44. 'updated_at': TimestampField,
  45. 'tool_published': fields.Boolean,
  46. 'environment_variables': fields.List(EnvironmentVariableField()),
  47. 'conversation_variables': fields.List(fields.Nested(conversation_variable_fields)),
  48. }