| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 | 
							- from .apikey import apikey_generator
 
- class validator:
 
-     """
 
-     This is base validator class. It implements base validator mechanism, 
 
-     and other validators must implements it.
 
-     """
 
-     def __init__(self, target: str) -> None:
 
-         """
 
-         This create new validator, from string. 
 
-         
 
-         Parameters:
 
-             target (str): Content to validate
 
-         """
 
-         self.__target = target
 
-         self._failed()
 
-     @property
 
-     def target(self) -> str:
 
-         """ This return content to validate. """
 
-         return self.__target
 
-     def _failed(self) -> None:
 
-         """
 
-         This would mark content as invalid. 
 
-         """
 
-         self.__result = False
 
-     def _check_all(self) -> None:
 
-         """
 
-         This would check all marks of the content.
 
-         It must be overwrite by target validator.
 
-         """
 
-         pass
 
-     def _contain(self, *args) -> bool:
 
-         """
 
-         This check that target contain any given phrase or letter.
 
-         Args:
 
-             (str): Phrase to check that content contain it
 
-         Returns:
 
-             (bool): True when any of given phrase is in the target
 
-         """
 
-         for letter in args:
 
-             if self.__target.find(letter) != -1:
 
-                 return True
 
-         
 
-         return False
 
-     @property
 
-     def result(self) -> bool:
 
-         """ Validate content, True when valid or False when not. """
 
-         self.__result = True
 
-         self._check_all()
 
-         return self.__result
 
-     @property
 
-     def invalid(self) -> bool:
 
-         """ Validate, and return True when target is invalid. """
 
-         
 
-         return not self.result
 
-     @property
 
-     def valid(self) -> bool:
 
-         """ It validate target, and return True when valid. """
 
-         return self.result
 
- class nick_validator(validator):
 
-     """
 
-     This validate nick. It is slow, and best to use only when loading
 
-     users from file.
 
-     """
 
-     def _check_all(self) -> None:
 
-         
 
-         # Minimum 4 characters
 
-         if len(self.target) < 4:
 
-             return self._failed()
 
-         # Maximum 30 characters
 
-         if len(self.target) > 30:
 
-             return self._failed()
 
-         # Could contain only 
 
-         for letter in self.target:
 
-             
 
-             # Letters
 
-             if letter.isalpha():
 
-                 continue
 
-             # Numbers
 
-             if letter.isnumeric():
 
-                 continue
 
-             return self._failed()
 
- class password_validator(validator):
 
-     """
 
-     This validate password. It is slow, and best to use only when
 
-     loading users from file.
 
-     """
 
-     def _check_all(self) -> None:
 
-         # Minimum 8 characters
 
-         if len(self.target) < 8:
 
-             return self._failed()
 
-         # Maximum 40 characters
 
-         if len(self.target) > 40:
 
-             return self._failed()
 
-         # Can not contain white chars
 
-         for letter in self.target:
 
-             if letter.isspace():
 
-                 return self._failed()
 
- class apikey_validator(validator):
 
-     """ This is simple ApiKey validator """
 
-     def _check_all(self) -> None:
 
-         
 
-         # ApiKey must contain proof size 
 
-         if len(self.target) != apikey_generator.size() * 2:
 
-             return self._failed()
 
- class name_validator(validator):
 
-     """
 
-     This is validator for product name. It check that it is not blank,
 
-     and it not contain white chars before and after content. It must have 
 
-     more or qeual of 4 and less than 40 characters.
 
-     """
 
-     def _check_all(self) -> None:
 
-         # Minimum 4 characters
 
-         if len(self.target) < 4:
 
-             return self._failed()
 
-         # Maximum 40 characters
 
-         if len(self.target) > 40:
 
-             return self._failed()
 
-         # Must be trimed
 
-         if len(self.target.strip()) != len(self.target):
 
-             return self._failed()
 
- class description_validator(validator):
 
-     """
 
-     This is validator for product description. It could be blank, but can not
 
-     have white chars before and after content (must be trimmed), and coud has 
 
-     only 500 chars.
 
-     """
 
-     def _check_all(self) -> None:
 
-         # Could be blank
 
-         if len(self.target) == 0:
 
-             return
 
-         # Must be trimmed
 
-         if len(self.target.strip()) != len(self.target):
 
-             return self._failed()
 
-         # Must has max 500 characters.
 
-         if len(self.target) > 500:
 
-             return self._failed()
 
- class barcode_validator(validator):
 
-     """
 
-     This is barcode validator. Barcode must be string, which contain number
 
-     with 8, 12 or 13 digits. That is standard EAN.
 
-     """
 
-     def _check_all(self) -> None:
 
-         # Must has only digits
 
-         if not self.target.isdigit():
 
-             return self._failed()
 
-         lenght = len(self.target)
 
-         # Must has 8, 12 or 13 chars
 
-         if lenght != 8 and lenght != 12 and lenght != 13:
 
-             return self._failed()
 
- class author_validator(validator):
 
-     """
 
-     This validate author name. Author can not have less than 3 characters,
 
-     and can not have more than 40 characters. It also must be trimmed.
 
-     """
 
-     def _check_all(self) -> None:
 
-         # Must be trimmed
 
-         if len(self.target) != len(self.target.strip()):
 
-             return self._failed()
 
-         # Must have more than 3 characters
 
-         if len(self.target) < 3:
 
-             return self._failed()
 
-         # Must has max 40 characters
 
-         if len(self.target) > 40:
 
-             return self._failed()
 
- class phone_number_validator(validator):
 
-     """
 
-     This is phone number validator. Phone number must be in format
 
-     like +CC XXXXXXXXX. This is standard of E.123 and E.164.
 
-     """
 
-     def _check_all(self) -> None:
 
-         
 
-         # Separate country code and number
 
-         splited = self.target.split(" ")
 
-         if len(splited) != 2:
 
-             return self._failed()
 
-         # Get it
 
-         country_code = splited[0]
 
-         number = splited[1]
 
-         
 
-         # Must start with "+"
 
-         if country_code[0] != "+":
 
-             return self._failed()
 
-         country_code = country_code[1:]
 
-         
 
-         # Country code must be numeric
 
-         if not country_code.isnumeric():
 
-             return self._failed()
 
-         
 
-         # Number of course must be numeric
 
-         if not number.isnumeric():
 
-             return self._failed()
 
-         # Country code length must be <1;3>
 
-         if len(country_code) == 0 or len(country_code) > 3:
 
-             return self._failed()
 
-         # All number must have less than 16
 
-         if len(country_code) + len(number) > 15:
 
-             return self._failed()
 
-         # And number mast has minimum 7 length
 
-         if len(number) < 7:
 
-             return self._failed()
 
- class email_validator(validator):
 
-     """
 
-     This is email validator. This validate email address in the standard
 
-     format.
 
-     """
 
-     def _check_all(self) -> None:
 
-         
 
-         # Split name and domain
 
-         splited = self.target.split("@")
 
-         
 
-         if len(splited) != 2:
 
-             return self._failed()
 
-         # Gat it
 
-         name = splited[0]
 
-         domain = splited[1]
 
-         
 
-         # Name must be in <1;128>
 
-         if len(name) < 1 or len(name) > 128:
 
-             return self._failed()
 
-         # Domain can not has ".."
 
-         if domain.find("..") != -1:
 
-             return self._failed()
 
-         splited = domain.split(".")
 
-         
 
-         # Must has more or equal 2 parts in domain
 
-         if len(splited) < 2:
 
-             return self._failed()
 
-         # All parts must be in <1;128>
 
-         for part in splited:
 
-             if len(part) < 1 or len(part) > 128:
 
-                 return self._failed()
 
 
  |