123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348 |
- from string import digits, ascii_letters
- class Registration:
- def __init__(self, login, password) -> None:
- self.login = login
- self.password = password
- @property
- def login(self):
- return self.__login
-
- @login.setter
- def login(self, value: str):
- if not isinstance(value, str):
- raise TypeError
- if '@' not in value:
- raise ValueError
- if value.rfind('.') < value.rfind('@'):
- raise ValueError
- self.__login = value
- @staticmethod
- def is_include_digit(value: str):
- for i in value:
- if i in digits:
- return True
- return False
-
- @staticmethod
- def is_include_all_register(value: str):
- upper = False
- lower = False
- for i in value:
- if not lower:
- lower = i.islower()
- if not upper:
- upper = i.isupper()
- return lower and upper
- @staticmethod
- def is_include_only_latin(value: str):
- for i in value:
- if not i.isdigit():
- if i not in ascii_letters:
- return False
- return True
- @staticmethod
- def check_password_dictionary(value: str):
- with open('easy_passwords.txt', 'r', encoding='utf-8') as f:
- password_list = f.read().split('\n')
- return value in password_list
-
- @property
- def password(self):
- return self.__password
-
- @password.setter
- def password(self, value: str):
- if not isinstance(value, str):
- raise TypeError("Пароль должен быть строкой")
- if len(value) < 5 or len(value) > 11:
- raise ValueError("Пароль должен быть длиннее 4 и меньше 12 символов")
- if not self.is_include_digit(value):
- raise ValueError("Пароль должен содержать хотя бы одну цифру")
- if not self.is_include_all_register(value):
- raise ValueError("Пароль должен содержать хотя бы один символ верхнего и нижнего регистра")
- if not self.is_include_only_latin(value):
- raise ValueError("Пароль должен содержать только латинский алфавит")
- if self.check_password_dictionary(value):
- raise ValueError("Ваш пароль содержится в списке самых легких")
- self.__password = value
- class File:
- def __init__(self, name) -> None:
- self.name = name
- self.in_trash = False
- self.is_deleted = False
- def restore_from_trash(self):
- print(f"Файл {self.name} восстановлен из корзины")
- self.in_trash = False
- def remove(self):
- print(f"Файл {self.name} был удален")
- self.is_deleted = True
- def read(self):
- if self.is_deleted == True:
- print(f"ErrorReadFileDeleted({self.name})")
- return
- if self.in_trash == True:
- print(f"ErrorReadFileTrashed({self.name})")
- return
- print(f"Прочитали все содержимое файла {self.name}")
- def write(self, content):
- if self.is_deleted:
- print(f"ErrorWriteFileDeleted({self.name})")
- return
- if self.in_trash:
- print(f"ErrorWriteFileTrashed({self.name})")
- return
- print(f"Записали значение {content} в файл {self.name}")
- class Trash:
- content = []
- def __init__(self):
- pass
- @staticmethod
- def add(file: File):
- if not isinstance(file, File):
- print("В корзину можно добавлять только файл")
- else:
- file.in_trash = True
- Trash.content.append(file)
- @staticmethod
- def clear():
- print("Очищаем корзину")
- while Trash.content:
- Trash.content[0].remove()
- Trash.content.pop(0)
- print("Корзина пуста")
- @staticmethod
- def restore():
- print("Восстанавливаем файлы из корзины")
- while Trash.content:
- Trash.content[0].restore_from_trash()
- Trash.content.pop(0)
- print("Корзина пуста")
- def main():
- f1 = File('puppies.jpg')
- f2 = File('cat.jpg')
- f3 = File('xxx.doc')
- passwords = File('pass.txt')
- for file in [f1, f2, f3, passwords]:
- assert file.is_deleted is False
- assert file.in_trash is False
- f3.read()
- f3.remove()
- assert f3.is_deleted is True
- f3.read()
- f3.write('hello')
- assert Trash.content == []
- Trash.add(f2)
- Trash.add(passwords)
- Trash.add(f3)
- f1.read()
- Trash.add(f1)
- f1.read()
- for file in [f1, f2, f3, passwords]:
- assert file.in_trash is True
- for f in [f2, passwords, f3, f1]:
- assert f in Trash.content
- Trash.restore()
- assert Trash.content == [], 'После восстановления корзина должна была очиститься'
- Trash.add(passwords)
- Trash.add(f2)
- Trash.add('hello')
- Trash.add(f1)
- for f in [passwords, f2, f1]:
- assert f in Trash.content
- Trash.clear()
- for file in [passwords, f2, f1]:
- assert file.is_deleted is True
- assert Trash.content == [], 'После удаления файлов корзина должна была очиститься'
- f1.read()
- '''
- f1 = File('puppies.jpg')
- assert f1.name == 'puppies.jpg'
- assert f1.in_trash is False
- assert f1.is_deleted is False
- f1.read() # Прочитали все содержимое файла puppies.jpg
- f1.remove() # Файл puppies.jpg был удален
- assert f1.is_deleted is True
- f1.read() # ErrorReadFileDeleted(puppies.jpg)
- passwords = File('pass.txt')
- assert passwords.name == 'pass.txt'
- assert passwords.in_trash is False
- assert passwords.is_deleted is False
- f3 = File('xxx.doc')
- assert f3.__dict__ == {'name': 'xxx.doc', 'in_trash': False, 'is_deleted': False}
- f3.read()
- f3.remove()
- assert f3.is_deleted is True
- f3.read()
- f3.in_trash = True
- f3.is_deleted = False
- f3.read()
- f3.write('hello')
- f3.restore_from_trash()
- assert f3.in_trash is False
- f3.write('hello') # Записали значение «hello» в файл cat.jpg
- f2 = File('cat.jpg')
- f2.write('hello') # Записали значение «hello» в файл cat.jpg
- f2.write([1, 2, 3]) # Записали значение «hello» в файл cat.jpg
- f2.remove() # Файл cat.jpg был удален
- f2.write('world') # ErrorWriteFileDeleted(cat.jpg)
- '''
-
- '''
- try:
- s2 = Registration("fga", "asd12")
- except ValueError as e:
- pass
- else:
- raise ValueError("Registration('fga', 'asd12') как можно записать такой логин?")
- try:
- s2 = Registration("fg@a", "asd12")
- except ValueError as e:
- pass
- else:
- raise ValueError("Registration('fg@a', 'asd12') как можно записать такой логин?")
- s2 = Registration("translate@gmail.com", "as1SNdf")
- try:
- s2.login = "asdsa12asd."
- except ValueError as e:
- pass
- else:
- raise ValueError("asdsa12asd как можно записать такой логин?")
- try:
- s2.login = "asdsa12@asd"
- except ValueError as e:
- pass
- else:
- raise ValueError("asdsa12@asd как можно записать такой логин?")
- assert Registration.check_password_dictionary('QwerTy123'), 'проверка на пароль в слове не работает'
- try:
- s2.password = "QwerTy123"
- except ValueError as e:
- pass
- else:
- raise ValueError("QwerTy123 хранится в словаре паролей, как его можно было сохранить?")
- try:
- s2.password = "KissasSAd1f"
- except ValueError as e:
- pass
- else:
- raise ValueError("KissasSAd1f хранится в словаре паролей, как его можно было сохранить?")
- try:
- s2.password = "124244242"
- except ValueError as e:
- pass
- else:
- raise ValueError("124244242 пароль НЕОЧЕНЬ, как его можно было сохранить?")
- try:
- s2.password = "RYIWUhjkdbfjfgdsffds"
- except ValueError as e:
- pass
- else:
- raise ValueError("RYIWUhjkdbfjfgdsffds пароль НЕОЧЕНЬ, как его можно было сохранить?")
- try:
- s2.password = "CaT"
- except ValueError as e:
- pass
- else:
- raise ValueError("CaT пароль НЕОЧЕНЬ, как его можно было сохранить?")
- try:
- s2.password = "monkey"
- except ValueError as e:
- pass
- else:
- raise ValueError("monkey пароль НЕОЧЕНЬ, как его можно было сохранить?")
- try:
- s2.password = "QwerTy123"
- except ValueError as e:
- pass
- else:
- raise ValueError("QwerTy123 пароль есть в слове, нельзя его использовать")
- try:
- s2.password = "HelloQEWq"
- except ValueError as e:
- pass
- else:
- raise ValueError("HelloQEWq пароль НЕОЧЕНЬ, как его можно было сохранить?")
- try:
- s2.password = [4, 32]
- except TypeError as e:
- pass
- else:
- raise TypeError("Пароль должен быть строкой")
- try:
- s2.password = 123456
- except TypeError as e:
- pass
- else:
- raise TypeError("Пароль должен быть строкой")
- print('U r hacked Pentagon')
- '''
- if __name__ == '__main__':
- main()
|