user.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import sqlmodel
  2. from .apikey import apikey
  3. from .password import password
  4. class user(sqlmodel.SQLModel, table = True):
  5. """
  6. This represents user in database. All users has own unique nick and api
  7. key. Nick and password is used to login, api key is long, random and
  8. used to access database via API.
  9. """
  10. id: int | None = sqlmodel.Field(default = None, primary_key = True)
  11. nick: str = sqlmodel.Field(index = True, unique=True)
  12. password: str = sqlmodel.Field(index = False)
  13. apikey: str = sqlmodel.Field(index = True, unique=True)
  14. class user_builder:
  15. def __init__(self) -> None:
  16. """
  17. Create new empty user builder.
  18. """
  19. self.clean()
  20. def clean(self) -> None:
  21. """
  22. This clean builed. That mean, new empty user is creating.
  23. """
  24. self.__target = user(apikey = apikey())
  25. @property
  26. def ready(self) -> bool:
  27. """
  28. This check that user in builder is ready to get.
  29. return: bool - True when user is ready, false if not
  30. """
  31. if self.__target.nick is None:
  32. return False
  33. if self.__target.password is None:
  34. return False
  35. return True
  36. @property
  37. def nick(self) -> str | None:
  38. """
  39. return: str | None - Current nick of the user in builder
  40. """
  41. return self.__target.nick
  42. @property
  43. def password(self) -> bool:
  44. """
  45. return: bool - True when password is set, false if not
  46. """
  47. return self.__target.password is not None
  48. @nick.setter
  49. def nick(self, target: str) -> None:
  50. """
  51. target: str - New nick for the user
  52. """
  53. self.__target.nick = target
  54. @password.setter
  55. def password(self, target: str) -> None:
  56. """
  57. target: str - New password to hash and set
  58. """
  59. self.__target.password = password(target).result
  60. @property
  61. def result(self) -> user:
  62. """
  63. This return user setup in the builder.
  64. return: user - User from builder
  65. """
  66. if not self.ready:
  67. raise TypeError("User in builder is not ready yet.")
  68. return self.__target