import random
import string
__all__ = ['IdentifierFactory', 'Identifier', 'InvalidIdentifierValue',
'InvalidIdentifierType', 'random_string']
[docs]class InvalidIdentifierValue(ValueError):
pass
[docs]class InvalidIdentifierType(TypeError):
pass
[docs]class Identifier(str):
"""Human-readable string identifier"""
def __new__(cls, value):
value = str(value).lower()
return str.__new__(cls, value)
[docs]class IdentifierFactory(object):
[docs] def generate(self):
return Identifier("identifier")
[docs] def mock(self):
return self.generate()
[docs] def validate(self, value, permissive=True):
if self.do_validate(value) is True:
return True
else:
if permissive is False:
raise ValueError(
'{} is not a valid identifier'.format(value))
else:
return False
[docs] def do_validate(self, value, permissive=True):
if isinstance(value, str):
return True
else:
if permissive:
return False
else:
raise InvalidIdentifierType("Identifier must be a string")
[docs]def random_string(size=64, chars=string.ascii_uppercase + string.digits):
return ''.join(random.choice(chars) for x in range(size))