Advertisement
Guest User

Untitled

a guest
Feb 27th, 2015
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.78 KB | None | 0 0
  1. class PluginMount(type):
  2.  
  3.     def __init__(cls, name, bases, attrs):
  4.         if not hasattr(cls, 'plugins'):
  5.             # Esta branch apenas executa quando processar o ponto de montagem
  6.             # em si. Então, desde que este é um novo tipo de plugin, não uma
  7.             # implementação, essa classe não deveria estar registrada como um
  8.             # plugin. Em vez disso, ele configura uma lista onde plugins podem
  9.             # ser registrados mais tarde.
  10.             cls.plugins = []
  11.         else:
  12.             # Isto deve ser uma implementação de plugin, o qual deveria ser
  13.             # registrado. Simplesmente acrescentá-lo a lista é tudo que preciso
  14.             # para manter o controle dele mais tarde.
  15.             cls.plugins.append(cls)
  16.  
  17.  
  18. class PasswordValidator(metaclass=PluginMount):
  19.  
  20.     """
  21.    Plugins extendendo esta classe serão usados para validar senhas.
  22.    Plugins validos devem prover o seguinte método.
  23.  
  24.        validate(self, password)
  25.            Recebe uma senha para testar, e que terminam silenciosamente, ou
  26.            levantam uma exceção se a senha for inválida. A exceção pode ser
  27.            mostrada para o usuário, então tenha certeza que ela descreve
  28.            adequadamente o que está errado.
  29.    """
  30.  
  31.  
  32. def is_valid_password(password):
  33.     """
  34.    Retorna True se a senha estiver bacana, False se houver um problema.
  35.    """
  36.     for plugin in PasswordValidator.plugins:
  37.         try:
  38.             plugin().validate(password)
  39.         except ValueError:
  40.             return False
  41.     return True
  42.  
  43.  
  44. def get_password_errors(password):
  45.     """
  46.    Retorna uma lista de mensagens indicando qualquer problema que tiver
  47.    sido encontrado com a senha. Se ela estiver boa, isso retorna uma
  48.    lista vazia.
  49.    """
  50.     errors = []
  51.     for plugin in PasswordValidator.plugins:
  52.         try:
  53.             plugin().validate(password)
  54.         except ValueError as e:
  55.             errors.append(str(e))
  56.     return errors
  57.  
  58.  
  59. class MinimumLength(PasswordValidator):
  60.  
  61.     def validate(self, password):
  62.         "Lança um ValueError se a senha é muito curta."
  63.         if len(password) < 6:
  64.             raise ValueError("Senhas devem ter pelo menos 6 caracteres.")
  65.  
  66.  
  67. class SpecialCharacters(PasswordValidator):
  68.  
  69.     def validate(self, password):
  70.         "Lança um ValueError se a senha não contém algum caractere especial."
  71.         if password.isalnum():
  72.             raise ValueError(
  73.                 "Senhas devem conter pelo menos um caractere especial."
  74.             )
  75.  
  76. for senha in ('patrick', 'pass', 'p@trick'):
  77.     print('Checando senha: %s' % senha)
  78.     if is_valid_password(senha):
  79.         print('Valid!')
  80.     else:
  81.         print()
  82.         for error in get_password_errors(senha):
  83.             print(' %s' % error)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement