user.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import sqlmodel
  2. from .apikey import apikey
  3. from .password import password
  4. from .builder import builder
  5. class user(sqlmodel.SQLModel, table = True):
  6. """
  7. This represents user in database. All users has own unique nick and api
  8. key. Nick and password is used to login, api key is long, random and
  9. used to access database via API.
  10. """
  11. id: int | None = sqlmodel.Field(default = None, primary_key = True)
  12. nick: str = sqlmodel.Field(index = True, unique = True)
  13. password: str = sqlmodel.Field(index = False)
  14. apikey: str = sqlmodel.Field(index = True, unique = True)
  15. @property
  16. def in_database(self) -> bool:
  17. """ True when user exists in database. """
  18. return self.id is not None
  19. @property
  20. def ready(self) -> bool:
  21. """ True when all fields are filled. """
  22. if self.nick is None:
  23. return False
  24. if self.password is None:
  25. return False
  26. if self.apikey is None:
  27. return False
  28. return True
  29. def __str__(self) -> str:
  30. """
  31. This function dump user to string, very usefull for debug.
  32. Returns:
  33. (str): User as string
  34. """
  35. result = ""
  36. result = result + "User "
  37. if self.id is not None:
  38. result = result + "(" + str(self.id) + ")"
  39. result = result + "\n"
  40. result = result + "Nick: " + self.nick + "\n"
  41. result = result + "Password: " + self.password + "\n"
  42. result = result + "API key: " + self.apikey + "\n"
  43. return result
  44. class user_builder(builder, target_type = user):
  45. """
  46. This class is responsible for building new user.
  47. """
  48. def __init__(self, target: user | None = None) -> None:
  49. """
  50. This create new user builder. It can be initialized by already
  51. created user. When None create empty user.
  52. Parameters:
  53. target(user | None): Target to initialize builder with
  54. """
  55. super().__init__(target)
  56. self._target.apikey = apikey()
  57. @property
  58. def nick(self) -> str | None:
  59. """
  60. return: str | None - Current nick of the user in builder
  61. """
  62. return self._target.nick
  63. @property
  64. def password(self) -> bool:
  65. """
  66. return: bool - True when password is set, false if not
  67. """
  68. return self._target.password is not None
  69. @nick.setter
  70. def nick(self, target: str) -> None:
  71. """
  72. target: str - New nick for the user
  73. """
  74. self._target.nick = target.upper()
  75. @password.setter
  76. def password(self, target: str) -> None:
  77. """
  78. target: str - New password to hash and set
  79. """
  80. self._target.password = password(target).result