validators.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. from tokenize import String
  2. from typing import List
  3. from django.core.exceptions import ValidationError
  4. from django.core.validators import validate_email
  5. from api.config import CALENDAR_FREQUENCIES
  6. def valid_frequency_format(freq: String):
  7. '''
  8. Ve que el valor sea alguna de las frequencias calendario definidad en CALENDAR_FREQUENCIES o que sea
  9. un valor entero.
  10. '''
  11. if freq not in CALENDAR_FREQUENCIES:
  12. if not freq.isdigit():
  13. raise ValidationError("Debe ser una frequencia calendario o un entero positivo.")
  14. if int(freq) <= 0:
  15. raise ValidationError("Debe ser un entero positivo")
  16. def json_email_array(val: List):
  17. '''
  18. Ve que el valor sea una lista de emails serializada en JSON.
  19. Precondicion: es una lista json válida
  20. '''
  21. def check_email(email):
  22. valid = True
  23. try:
  24. validate_email(email)
  25. except ValidationError:
  26. valid = False
  27. return valid
  28. if not all(map(check_email, val)):
  29. raise ValidationError("Debe ser una lista de emails validos")
  30. def json_not_empty_string_array(val):
  31. '''
  32. Ve que el valor sea una lista de strings serializada en JSON
  33. '''
  34. valid = True
  35. # Ser una lista no vacia
  36. if (not (isinstance(val, list) and len(val) > 0)):
  37. valid = False
  38. # Ser una lista de strings
  39. if valid:
  40. for el in val:
  41. if not isinstance(el, str) or len(el) == 0:
  42. valid = False
  43. break
  44. if not valid:
  45. raise ValidationError(
  46. "Debe ser una lista no vacia de strings no vacios")