reservation_loader.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import sqlmodel
  2. import sqlmodel.sql._expression_select_cls
  3. from .product import product
  4. from .reservation import reservation
  5. from .reservation import reservation_factory
  6. from .reservations_collection import reservations_collection
  7. class reservation_loader(sqlmodel.Session):
  8. def get_by_email(self, target: str) -> reservations_collection:
  9. return self.__get(reservation.email == target)
  10. def get_by_phone_number(self, target: str) -> reservations_collection:
  11. return self.__get(reservation.phone_number == target)
  12. def get_by_target(self, target: product) -> reservations_collection:
  13. if not target.in_database:
  14. return reservations_collection()
  15. return self.__get(reservation.target == target)
  16. def __get(self, condition: object) -> reservations_collection:
  17. query = self.__select.where(condition)
  18. collection = reservations_collection()
  19. result = self.exec(query)
  20. for item in result:
  21. collection.append(item)
  22. return collection
  23. def store(self, target: reservation) -> bool:
  24. if not target.ready:
  25. raise RuntimeError("Reservation is not setup.")
  26. if target.in_database:
  27. error = "Target reservation is already in database. Reservation "
  28. error = error + "object is not editable."
  29. raise reservation_loader_exception(error)
  30. try:
  31. self.add(target)
  32. self.commit()
  33. self.refresh(target)
  34. return True
  35. except:
  36. return False
  37. def drop(self, target: reservation) -> bool:
  38. if not target.in_database:
  39. raise reservation_loader_exception("Reservation does not exists.")
  40. try:
  41. self.delete(target)
  42. self.commit()
  43. return True
  44. except:
  45. return False
  46. @property
  47. def __select(self) -> sqlmodel.sql._expression_select_cls.SelectOfScalar:
  48. return sqlmodel.select(reservation)