Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class PluginMount(type):
- def __init__(cls, name, bases, attrs):
- if not hasattr(cls, 'plugins'):
- # Esta branch apenas executa quando processar o ponto de montagem
- # em si. Então, desde que este é um novo tipo de plugin, não uma
- # implementação, essa classe não deveria estar registrada como um
- # plugin. Em vez disso, ele configura uma lista onde plugins podem
- # ser registrados mais tarde.
- cls.plugins = []
- else:
- # Isto deve ser uma implementação de plugin, o qual deveria ser
- # registrado. Simplesmente acrescentá-lo a lista é tudo que preciso
- # para manter o controle dele mais tarde.
- cls.plugins.append(cls)
- class PasswordValidator(metaclass=PluginMount):
- """
- Plugins extendendo esta classe serão usados para validar senhas.
- Plugins validos devem prover o seguinte método.
- validate(self, password)
- Recebe uma senha para testar, e que terminam silenciosamente, ou
- levantam uma exceção se a senha for inválida. A exceção pode ser
- mostrada para o usuário, então tenha certeza que ela descreve
- adequadamente o que está errado.
- """
- def is_valid_password(password):
- """
- Retorna True se a senha estiver bacana, False se houver um problema.
- """
- for plugin in PasswordValidator.plugins:
- try:
- plugin().validate(password)
- except ValueError:
- return False
- return True
- def get_password_errors(password):
- """
- Retorna uma lista de mensagens indicando qualquer problema que tiver
- sido encontrado com a senha. Se ela estiver boa, isso retorna uma
- lista vazia.
- """
- errors = []
- for plugin in PasswordValidator.plugins:
- try:
- plugin().validate(password)
- except ValueError as e:
- errors.append(str(e))
- return errors
- class MinimumLength(PasswordValidator):
- def validate(self, password):
- "Lança um ValueError se a senha é muito curta."
- if len(password) < 6:
- raise ValueError("Senhas devem ter pelo menos 6 caracteres.")
- class SpecialCharacters(PasswordValidator):
- def validate(self, password):
- "Lança um ValueError se a senha não contém algum caractere especial."
- if password.isalnum():
- raise ValueError(
- "Senhas devem conter pelo menos um caractere especial."
- )
- for senha in ('patrick', 'pass', 'p@trick'):
- print('Checando senha: %s' % senha)
- if is_valid_password(senha):
- print('Valid!')
- else:
- print()
- for error in get_password_errors(senha):
- print(' %s' % error)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement