hydrators.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. # fixme: rename this module to serialize
  2. def hydrate_string(dry_value):
  3. return str(dry_value) if dry_value else ""
  4. def dehydrate_string(wet_value):
  5. return str(wet_value)
  6. def hydrate_bool(dry_value):
  7. return dry_value == "True"
  8. def dehydrate_bool(wet_value):
  9. return "True" if wet_value else "False"
  10. def hydrate_int(dry_value):
  11. return int(dry_value or 0)
  12. def dehydrate_int(wet_value):
  13. return str(wet_value or 0)
  14. def hydrate_list(dry_value):
  15. if dry_value:
  16. return [x for x in dry_value.split(",") if x]
  17. return []
  18. def dehydrate_list(wet_value):
  19. return ",".join(wet_value) if wet_value else ""
  20. def noop(value):
  21. return value
  22. VALUE_HYDRATORS = {
  23. "string": (hydrate_string, dehydrate_string),
  24. "bool": (hydrate_bool, dehydrate_bool),
  25. "int": (hydrate_int, dehydrate_int),
  26. "list": (hydrate_list, dehydrate_list),
  27. "image": (noop, noop),
  28. }
  29. def hydrate_value(python_type, dry_value):
  30. try:
  31. value_hydrator = VALUE_HYDRATORS[python_type][0]
  32. except KeyError:
  33. raise ValueError("%s type is not hydrateable" % python_type)
  34. return value_hydrator(dry_value)
  35. def dehydrate_value(python_type, wet_value):
  36. try:
  37. value_dehydrator = VALUE_HYDRATORS[python_type][1]
  38. except KeyError:
  39. raise ValueError("%s type is not dehydrateable" % python_type)
  40. return value_dehydrator(wet_value)