user.py 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. # -*- coding: utf-8 -*-
  2. import threading
  3. import transaction
  4. import typing as typing
  5. from tracim.models.auth import User
  6. class UserApi(object):
  7. def __init__(self, current_user: typing.Optional[User], session, config):
  8. self._session = session
  9. self._user = current_user
  10. self._config = config
  11. def get_all(self):
  12. return self._session.query(User).order_by(User.display_name).all()
  13. def _base_query(self):
  14. return self._session.query(User)
  15. def get_one(self, user_id: int):
  16. return self._base_query().filter(User.user_id==user_id).one()
  17. def get_one_by_email(self, email: str):
  18. return self._base_query().filter(User.email==email).one()
  19. def get_one_by_id(self, id: int) -> User:
  20. return self._base_query().filter(User.user_id==id).one()
  21. def update(
  22. self,
  23. user: User,
  24. name: str=None,
  25. email: str=None,
  26. do_save=True,
  27. timezone: str='',
  28. ):
  29. if name is not None:
  30. user.display_name = name
  31. if email is not None:
  32. user.email = email
  33. user.timezone = timezone
  34. if do_save:
  35. self.save(user)
  36. def user_with_email_exists(self, email: str):
  37. try:
  38. self.get_one_by_email(email)
  39. return True
  40. # TODO - G.M - 09-04-2018 - Better exception
  41. except:
  42. return False
  43. def create_user(self, email=None, groups=[], save_now=False) -> User:
  44. user = User()
  45. if email:
  46. user.email = email
  47. for group in groups:
  48. user.groups.append(group)
  49. self._session.add(user)
  50. if save_now:
  51. self._session.flush()
  52. return user
  53. def save(self, user: User):
  54. self._session.flush()
  55. def execute_created_user_actions(self, created_user: User) -> None:
  56. """
  57. Execute actions when user just been created
  58. :return:
  59. """
  60. # NOTE: Cyclic import
  61. # TODO - G.M - 28-03-2018 - [Calendar] Reenable Calendar stuff
  62. #from tracim.lib.calendar import CalendarManager
  63. #from tracim.model.organisational import UserCalendar
  64. # TODO - G.M - 04-04-2018 - [auth]
  65. # Check if this is already needed with
  66. # new auth system
  67. created_user.ensure_auth_token(
  68. session=self._session,
  69. validity_seconds=self._config.USER_AUTH_TOKEN_VALIDITY
  70. )
  71. # Ensure database is up-to-date
  72. self._session.flush()
  73. transaction.commit()
  74. # TODO - G.M - 28-03-2018 - [Calendar] Reenable Calendar stuff
  75. # calendar_manager = CalendarManager(created_user)
  76. # calendar_manager.create_then_remove_fake_event(
  77. # calendar_class=UserCalendar,
  78. # related_object_id=created_user.user_id,
  79. # )