method_task.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. from string import digits, ascii_letters
  2. class Registration:
  3. def __init__(self, login, password) -> None:
  4. self.login = login
  5. self.password = password
  6. @property
  7. def login(self):
  8. return self.__login
  9. @login.setter
  10. def login(self, value: str):
  11. if not isinstance(value, str):
  12. raise TypeError
  13. if '@' not in value:
  14. raise ValueError
  15. if value.rfind('.') < value.rfind('@'):
  16. raise ValueError
  17. self.__login = value
  18. @staticmethod
  19. def is_include_digit(value: str):
  20. for i in value:
  21. if i in digits:
  22. return True
  23. return False
  24. @staticmethod
  25. def is_include_all_register(value: str):
  26. upper = False
  27. lower = False
  28. for i in value:
  29. if not lower:
  30. lower = i.islower()
  31. if not upper:
  32. upper = i.isupper()
  33. return lower and upper
  34. @staticmethod
  35. def is_include_only_latin(value: str):
  36. for i in value:
  37. if not i.isdigit():
  38. if i not in ascii_letters:
  39. return False
  40. return True
  41. @staticmethod
  42. def check_password_dictionary(value: str):
  43. with open('easy_passwords.txt', 'r', encoding='utf-8') as f:
  44. password_list = f.read().split('\n')
  45. return value in password_list
  46. @property
  47. def password(self):
  48. return self.__password
  49. @password.setter
  50. def password(self, value: str):
  51. if not isinstance(value, str):
  52. raise TypeError("Пароль должен быть строкой")
  53. if len(value) < 5 or len(value) > 11:
  54. raise ValueError("Пароль должен быть длиннее 4 и меньше 12 символов")
  55. if not self.is_include_digit(value):
  56. raise ValueError("Пароль должен содержать хотя бы одну цифру")
  57. if not self.is_include_all_register(value):
  58. raise ValueError("Пароль должен содержать хотя бы один символ верхнего и нижнего регистра")
  59. if not self.is_include_only_latin(value):
  60. raise ValueError("Пароль должен содержать только латинский алфавит")
  61. if self.check_password_dictionary(value):
  62. raise ValueError("Ваш пароль содержится в списке самых легких")
  63. self.__password = value
  64. class File:
  65. def __init__(self, name) -> None:
  66. self.name = name
  67. self.in_trash = False
  68. self.is_deleted = False
  69. def restore_from_trash(self):
  70. print(f"Файл {self.name} восстановлен из корзины")
  71. self.in_trash = False
  72. def remove(self):
  73. print(f"Файл {self.name} был удален")
  74. self.is_deleted = True
  75. def read(self):
  76. if self.is_deleted == True:
  77. print(f"ErrorReadFileDeleted({self.name})")
  78. return
  79. if self.in_trash == True:
  80. print(f"ErrorReadFileTrashed({self.name})")
  81. return
  82. print(f"Прочитали все содержимое файла {self.name}")
  83. def write(self, content):
  84. if self.is_deleted:
  85. print(f"ErrorWriteFileDeleted({self.name})")
  86. return
  87. if self.in_trash:
  88. print(f"ErrorWriteFileTrashed({self.name})")
  89. return
  90. print(f"Записали значение {content} в файл {self.name}")
  91. class Trash:
  92. content = []
  93. def __init__(self):
  94. pass
  95. @staticmethod
  96. def add(file: File):
  97. if not isinstance(file, File):
  98. print("В корзину можно добавлять только файл")
  99. else:
  100. file.in_trash = True
  101. Trash.content.append(file)
  102. @staticmethod
  103. def clear():
  104. print("Очищаем корзину")
  105. while Trash.content:
  106. Trash.content[0].remove()
  107. Trash.content.pop(0)
  108. print("Корзина пуста")
  109. @staticmethod
  110. def restore():
  111. print("Восстанавливаем файлы из корзины")
  112. while Trash.content:
  113. Trash.content[0].restore_from_trash()
  114. Trash.content.pop(0)
  115. print("Корзина пуста")
  116. def main():
  117. f1 = File('puppies.jpg')
  118. f2 = File('cat.jpg')
  119. f3 = File('xxx.doc')
  120. passwords = File('pass.txt')
  121. for file in [f1, f2, f3, passwords]:
  122. assert file.is_deleted is False
  123. assert file.in_trash is False
  124. f3.read()
  125. f3.remove()
  126. assert f3.is_deleted is True
  127. f3.read()
  128. f3.write('hello')
  129. assert Trash.content == []
  130. Trash.add(f2)
  131. Trash.add(passwords)
  132. Trash.add(f3)
  133. f1.read()
  134. Trash.add(f1)
  135. f1.read()
  136. for file in [f1, f2, f3, passwords]:
  137. assert file.in_trash is True
  138. for f in [f2, passwords, f3, f1]:
  139. assert f in Trash.content
  140. Trash.restore()
  141. assert Trash.content == [], 'После восстановления корзина должна была очиститься'
  142. Trash.add(passwords)
  143. Trash.add(f2)
  144. Trash.add('hello')
  145. Trash.add(f1)
  146. for f in [passwords, f2, f1]:
  147. assert f in Trash.content
  148. Trash.clear()
  149. for file in [passwords, f2, f1]:
  150. assert file.is_deleted is True
  151. assert Trash.content == [], 'После удаления файлов корзина должна была очиститься'
  152. f1.read()
  153. '''
  154. f1 = File('puppies.jpg')
  155. assert f1.name == 'puppies.jpg'
  156. assert f1.in_trash is False
  157. assert f1.is_deleted is False
  158. f1.read() # Прочитали все содержимое файла puppies.jpg
  159. f1.remove() # Файл puppies.jpg был удален
  160. assert f1.is_deleted is True
  161. f1.read() # ErrorReadFileDeleted(puppies.jpg)
  162. passwords = File('pass.txt')
  163. assert passwords.name == 'pass.txt'
  164. assert passwords.in_trash is False
  165. assert passwords.is_deleted is False
  166. f3 = File('xxx.doc')
  167. assert f3.__dict__ == {'name': 'xxx.doc', 'in_trash': False, 'is_deleted': False}
  168. f3.read()
  169. f3.remove()
  170. assert f3.is_deleted is True
  171. f3.read()
  172. f3.in_trash = True
  173. f3.is_deleted = False
  174. f3.read()
  175. f3.write('hello')
  176. f3.restore_from_trash()
  177. assert f3.in_trash is False
  178. f3.write('hello') # Записали значение «hello» в файл cat.jpg
  179. f2 = File('cat.jpg')
  180. f2.write('hello') # Записали значение «hello» в файл cat.jpg
  181. f2.write([1, 2, 3]) # Записали значение «hello» в файл cat.jpg
  182. f2.remove() # Файл cat.jpg был удален
  183. f2.write('world') # ErrorWriteFileDeleted(cat.jpg)
  184. '''
  185. '''
  186. try:
  187. s2 = Registration("fga", "asd12")
  188. except ValueError as e:
  189. pass
  190. else:
  191. raise ValueError("Registration('fga', 'asd12') как можно записать такой логин?")
  192. try:
  193. s2 = Registration("fg@a", "asd12")
  194. except ValueError as e:
  195. pass
  196. else:
  197. raise ValueError("Registration('fg@a', 'asd12') как можно записать такой логин?")
  198. s2 = Registration("translate@gmail.com", "as1SNdf")
  199. try:
  200. s2.login = "asdsa12asd."
  201. except ValueError as e:
  202. pass
  203. else:
  204. raise ValueError("asdsa12asd как можно записать такой логин?")
  205. try:
  206. s2.login = "asdsa12@asd"
  207. except ValueError as e:
  208. pass
  209. else:
  210. raise ValueError("asdsa12@asd как можно записать такой логин?")
  211. assert Registration.check_password_dictionary('QwerTy123'), 'проверка на пароль в слове не работает'
  212. try:
  213. s2.password = "QwerTy123"
  214. except ValueError as e:
  215. pass
  216. else:
  217. raise ValueError("QwerTy123 хранится в словаре паролей, как его можно было сохранить?")
  218. try:
  219. s2.password = "KissasSAd1f"
  220. except ValueError as e:
  221. pass
  222. else:
  223. raise ValueError("KissasSAd1f хранится в словаре паролей, как его можно было сохранить?")
  224. try:
  225. s2.password = "124244242"
  226. except ValueError as e:
  227. pass
  228. else:
  229. raise ValueError("124244242 пароль НЕОЧЕНЬ, как его можно было сохранить?")
  230. try:
  231. s2.password = "RYIWUhjkdbfjfgdsffds"
  232. except ValueError as e:
  233. pass
  234. else:
  235. raise ValueError("RYIWUhjkdbfjfgdsffds пароль НЕОЧЕНЬ, как его можно было сохранить?")
  236. try:
  237. s2.password = "CaT"
  238. except ValueError as e:
  239. pass
  240. else:
  241. raise ValueError("CaT пароль НЕОЧЕНЬ, как его можно было сохранить?")
  242. try:
  243. s2.password = "monkey"
  244. except ValueError as e:
  245. pass
  246. else:
  247. raise ValueError("monkey пароль НЕОЧЕНЬ, как его можно было сохранить?")
  248. try:
  249. s2.password = "QwerTy123"
  250. except ValueError as e:
  251. pass
  252. else:
  253. raise ValueError("QwerTy123 пароль есть в слове, нельзя его использовать")
  254. try:
  255. s2.password = "HelloQEWq"
  256. except ValueError as e:
  257. pass
  258. else:
  259. raise ValueError("HelloQEWq пароль НЕОЧЕНЬ, как его можно было сохранить?")
  260. try:
  261. s2.password = [4, 32]
  262. except TypeError as e:
  263. pass
  264. else:
  265. raise TypeError("Пароль должен быть строкой")
  266. try:
  267. s2.password = 123456
  268. except TypeError as e:
  269. pass
  270. else:
  271. raise TypeError("Пароль должен быть строкой")
  272. print('U r hacked Pentagon')
  273. '''
  274. if __name__ == '__main__':
  275. main()