functions.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import datetime
  2. import smtplib
  3. from json import loads
  4. from email.message import EmailMessage
  5. from data.roles import Roles
  6. from data.users import User
  7. from data.staff_projects import StaffProjects
  8. from data import db_session
  9. import uuid
  10. import pymorphy2
  11. def check_password(password=''):
  12. smb = 'qwertyuiopasdfghjklzxcvbnm'
  13. if len(password) < 6:
  14. return 'Пароль должен быть длиннее 6 символов'
  15. elif False in [True if i.isalpha() and i.lower() in smb or i.isdigit() else False for i in password]:
  16. return 'Пароль может содержать только буквы латинского алфавита и цифры'
  17. elif True not in [True if i.isdigit() else False for i in password]:
  18. return 'Пароль должен содержать буквы разного регистра и цифры'
  19. elif False not in [True if i.islower() and i.isalpha() else False for i in password]:
  20. return 'Пароль должен содержать буквы разного регистра и цифры'
  21. else:
  22. return 'OK'
  23. def mail(msg, to, topic='Подтверждение почты'):
  24. with open('incepted.config', 'r', encoding='utf-8').read() as file:
  25. file = loads(file)
  26. login, password = file["mail_login"], file["mail_password"]
  27. email_server = "smtp.yandex.ru"
  28. sender = "incepted@yandex.ru"
  29. em = EmailMessage()
  30. em.set_content(msg)
  31. em['To'] = to
  32. em['From'] = sender
  33. em['Subject'] = topic
  34. mailServer = smtplib.SMTP(email_server)
  35. mailServer.set_debuglevel(1)
  36. mailServer.ehlo()
  37. mailServer.starttls()
  38. mailServer.ehlo()
  39. mailServer.login(login, password)
  40. mailServer.ehlo()
  41. mailServer.send_message(em)
  42. mailServer.quit()
  43. def init_db_default():
  44. data_session = db_session.create_session()
  45. roles = [['admin', 2], ['moderator', 1], ['user', 0]]
  46. for i in roles:
  47. role = Roles(
  48. name=i[0],
  49. rights=i[1]
  50. )
  51. data_session.add(role)
  52. data_session.commit()
  53. data_session.close()
  54. def get_user_data(user):
  55. resp = {
  56. 'id': user.id,
  57. 'name': user.name,
  58. 'surname': user.surname,
  59. 'login': user.login,
  60. 'email': user.email,
  61. 'photo': user.photo,
  62. 'role': user.role
  63. }
  64. return resp
  65. def get_projects_data(project):
  66. data_session = db_session.create_session()
  67. staff = data_session.query(StaffProjects.user).filter(StaffProjects.project == project.id).all()
  68. resp = {
  69. 'id': project.id,
  70. 'name': project.name,
  71. 'logo': project.photo,
  72. 'description': project.description,
  73. 'staff': list(map(lambda x: get_user_data(x), data_session.query(User).filter(
  74. User.id.in_(list(map(lambda x: x[0], staff)))).all())) if staff else []
  75. }
  76. resp['staff'].insert(0, get_user_data(data_session.query(User).filter(User.id == project.creator).first()))
  77. return resp
  78. def save_project_logo(photo):
  79. filename = f'static/app_files/project_logo/{uuid.uuid4()}.png'
  80. with open(filename, 'wb') as f:
  81. photo.save(f)
  82. return filename
  83. def overdue_quest_project(quest):
  84. if str(quest.deadline.date()) == str(datetime.datetime.now().date()):
  85. quest.overdue = 'today'
  86. elif quest.deadline < datetime.datetime.now():
  87. quest.overdue = 'yes'
  88. quest.time_left = 'Просрочено на' + round_date(quest.deadline)
  89. else:
  90. quest.overdue = 'no'
  91. quest.time_left = 'Еще есть: ' + round_date(quest.deadline)
  92. return quest
  93. def round_date(date_time):
  94. morph = pymorphy2.MorphAnalyzer()
  95. difference = abs(date_time - datetime.datetime.now()).days
  96. resp = ''
  97. if difference // 365:
  98. resp += f'{difference // 365} {morph.parse("год")[0].make_agree_with_number(difference // 365).word}'
  99. difference -= 365 * (difference // 365)
  100. if difference // 30:
  101. resp += ', ' if resp else ' ' + f'{difference // 30}' \
  102. f' {morph.parse("месяц")[0].make_agree_with_number(difference // 30).word}'
  103. difference -= 30 * (difference // 30)
  104. if difference:
  105. resp += ', ' if resp else ' ' + f'{difference} {morph.parse("день")[0].make_agree_with_number(difference).word}'
  106. return f'{resp}'