util.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. import sys
  2. try:
  3. from error import LiteralInvalid, TypeInvalid, Invalid
  4. from schema_builder import Schema, default_factory, raises
  5. import validators
  6. except ImportError:
  7. from .error import LiteralInvalid, TypeInvalid, Invalid
  8. from .schema_builder import Schema, default_factory, raises
  9. from . import validators
  10. __author__ = 'tusharmakkar08'
  11. def Lower(v):
  12. """Transform a string to lower case.
  13. >>> s = Schema(Lower)
  14. >>> s('HI')
  15. 'hi'
  16. """
  17. return str(v).lower()
  18. def Upper(v):
  19. """Transform a string to upper case.
  20. >>> s = Schema(Upper)
  21. >>> s('hi')
  22. 'HI'
  23. """
  24. return str(v).upper()
  25. def Capitalize(v):
  26. """Capitalise a string.
  27. >>> s = Schema(Capitalize)
  28. >>> s('hello world')
  29. 'Hello world'
  30. """
  31. return str(v).capitalize()
  32. def Title(v):
  33. """Title case a string.
  34. >>> s = Schema(Title)
  35. >>> s('hello world')
  36. 'Hello World'
  37. """
  38. return str(v).title()
  39. def Strip(v):
  40. """Strip whitespace from a string.
  41. >>> s = Schema(Strip)
  42. >>> s(' hello world ')
  43. 'hello world'
  44. """
  45. return str(v).strip()
  46. class DefaultTo(object):
  47. """Sets a value to default_value if none provided.
  48. >>> s = Schema(DefaultTo(42))
  49. >>> s(None)
  50. 42
  51. >>> s = Schema(DefaultTo(list))
  52. >>> s(None)
  53. []
  54. """
  55. def __init__(self, default_value, msg=None):
  56. self.default_value = default_factory(default_value)
  57. self.msg = msg
  58. def __call__(self, v):
  59. if v is None:
  60. v = self.default_value()
  61. return v
  62. def __repr__(self):
  63. return 'DefaultTo(%s)' % (self.default_value(),)
  64. class SetTo(object):
  65. """Set a value, ignoring any previous value.
  66. >>> s = Schema(validators.Any(int, SetTo(42)))
  67. >>> s(2)
  68. 2
  69. >>> s("foo")
  70. 42
  71. """
  72. def __init__(self, value):
  73. self.value = default_factory(value)
  74. def __call__(self, v):
  75. return self.value()
  76. def __repr__(self):
  77. return 'SetTo(%s)' % (self.value(),)
  78. class Set(object):
  79. """Convert a list into a set.
  80. >>> s = Schema(Set())
  81. >>> s([]) == set([])
  82. True
  83. >>> s([1, 2]) == set([1, 2])
  84. True
  85. >>> with raises(Invalid, regex="^cannot be presented as set: "):
  86. ... s([set([1, 2]), set([3, 4])])
  87. """
  88. def __init__(self, msg=None):
  89. self.msg = msg
  90. def __call__(self, v):
  91. try:
  92. set_v = set(v)
  93. except Exception as e:
  94. raise TypeInvalid(
  95. self.msg or 'cannot be presented as set: {0}'.format(e))
  96. return set_v
  97. def __repr__(self):
  98. return 'Set()'
  99. class Literal(object):
  100. def __init__(self, lit):
  101. self.lit = lit
  102. def __call__(self, value, msg=None):
  103. if self.lit != value:
  104. raise LiteralInvalid(
  105. msg or '%s not match for %s' % (value, self.lit)
  106. )
  107. else:
  108. return self.lit
  109. def __str__(self):
  110. return str(self.lit)
  111. def __repr__(self):
  112. return repr(self.lit)
  113. def u(x):
  114. if sys.version_info < (3,):
  115. return unicode(x)
  116. else:
  117. return x