import enum from .user import user class user_validation_result(enum.Enum): VALID = 0 NICK_TOO_SHORT = 1 NICK_TOO_LONG = 2 NICK_EMPTY = 3 SECRET_NOT_SET = 4 NICK_ALREADY_TAKEN = 5 class user_validation_exception(BaseException): def __init__(self, target: user_validation_result): super().__init__("Exception when validate user: " + target.name) self.errors = target class user_validator: def __init__(self, target: user): self.__target = user.clone(target) @property def target(self) -> user: return self.__target @property def nick_validation_result(self) -> user_validation_result: return user_validator.validate_nick(self.target.nick) def validate_nick(target) -> user_validation_result: nick_length = len(target) if nick_length == 0: return user_validation_result.NICK_EMPTY if nick_length < 4: return user_validation_result.NICK_TOO_SHORT if nick_length > 20: return user_validation_result.NICK_TOO_LONG return user_validation_result.VALID @property def has_valid_nick(self) -> bool: return self.nick_validation_result == user_validation_result.VALID @property def secret_validation_result(self) -> user_validation_result: return user_validator.validate_secret(self.target.secret) def validate_secret(target) -> user_validation_result: if len(target) != 64: return user_validation_result.SECRET_NOT_SET return user_validation_result.VALID @property def has_valid_secret(self) -> bool: return self.secret_validation_result == user_validation_result.VALID @property def has_id(self) -> bool: return self.target.id is not None