class TypeBaseMeta(type):
def __new__(cls, name, bases, namespace, **kwds):
for base in bases:
namespace['__validators__'] = base.__validators__ + namespace['__validators__']
return type.__new__(cls, name, bases, namespace, **kwds)
class TypeBase(metaclass=TypeBaseMeta):
__validators__ = ('presence')
def __init__(self, *args, **kwargs):
pass
def validate_presence(self, flag):
if self.data:
return True
class String(TypeBase):
__validators__ = ('length')
def validate_length(self, range):
if len(self.data) in range(*range):
return True
Y2xhc3MgVHlwZUJhc2VNZXRhKHR5cGUpOgogICAgZGVmIF9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlLCAqKmt3ZHMpOgogICAgICAgIGZvciBiYXNlIGluIGJhc2VzOgogICAgICAgICAgICBuYW1lc3BhY2VbJ19fdmFsaWRhdG9yc19fJ10gPSBiYXNlLl9fdmFsaWRhdG9yc19fICsgbmFtZXNwYWNlWydfX3ZhbGlkYXRvcnNfXyddCgogICAgICAgIHJldHVybiB0eXBlLl9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlLCAqKmt3ZHMpCgpjbGFzcyBUeXBlQmFzZShtZXRhY2xhc3M9VHlwZUJhc2VNZXRhKToKICAgIF9fdmFsaWRhdG9yc19fID0gKCdwcmVzZW5jZScpCgogICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgcGFzcwoKICAgIGRlZiB2YWxpZGF0ZV9wcmVzZW5jZShzZWxmLCBmbGFnKToKICAgICAgICBpZiBzZWxmLmRhdGE6CiAgICAgICAgICAgIHJldHVybiBUcnVlCgpjbGFzcyBTdHJpbmcoVHlwZUJhc2UpOgogICAgX192YWxpZGF0b3JzX18gPSAoJ2xlbmd0aCcpCgogICAgZGVmIHZhbGlkYXRlX2xlbmd0aChzZWxmLCByYW5nZSk6CiAgICAgICAgaWYgbGVuKHNlbGYuZGF0YSkgaW4gcmFuZ2UoKnJhbmdlKToKICAgICAgICAgICAgcmV0dXJuIFRydWU=