item.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. from .model import model
  2. from .field_generator import field_generator
  3. from .category import category
  4. from .author import author
  5. from .product_type import product_type
  6. from .proxy import proxy
  7. from .attachment import attachment
  8. from .validators import validators
  9. from .constants import constants
  10. from .exceptions import model_must_being_saved
  11. class item(model):
  12. id = field_generator.id()
  13. name = field_generator.name()
  14. description = field_generator.description()
  15. on_stock = field_generator.stock()
  16. barcode = field_generator.barcode()
  17. category = field_generator.connected_single(category, "item")
  18. author = field_generator.connected_single(author, "item")
  19. product_type = field_generator.connected_single(product_type, "item")
  20. cover = field_generator.connected_single(
  21. attachment,
  22. "item",
  23. "cover"
  24. )
  25. attachments = field_generator.connected_many(
  26. attachment,
  27. "item",
  28. "attachments"
  29. )
  30. def _validators(self) -> dict:
  31. return {
  32. "name": validators.name,
  33. "description": validators.description,
  34. "barcode": validators.barcode
  35. }
  36. class item_proxy(proxy):
  37. @classmethod
  38. def create(cls, name: str, barcode: str) -> proxy:
  39. return cls(item(
  40. name = name,
  41. barcode = barcode,
  42. on_stock = constants.base_on_stock(),
  43. description = constants.empty_text(),
  44. category = None,
  45. author = None,
  46. product_type = None
  47. ))
  48. def set_cover(self, target: attachment) -> proxy:
  49. self._target.cover = target
  50. return self
  51. async def remove_attachment(self, target: attachment) -> proxy:
  52. if not self._target.is_in_database():
  53. raise model_must_being_saved(self._target)
  54. await self._target.attachments.remove(target)
  55. return self
  56. async def add_attachment(self, target: attachment) -> proxy:
  57. if not self._target.is_in_database():
  58. raise model_must_being_saved(self._target)
  59. await self._target.attachments.add(target)
  60. return self
  61. def set_barcode(self, target: str) -> proxy:
  62. self._target.barcode = target
  63. return self
  64. def set_name(self, target: str) -> proxy:
  65. self._target.name = target
  66. return self
  67. def set_on_stock(self, target: int) -> proxy:
  68. self._target.on_stock = target
  69. return self
  70. def set_description(self, target: str) -> proxy:
  71. self._target.description = target
  72. return self
  73. def set_product_type(self, target: product_type) -> proxy:
  74. self._target.product_type = target
  75. return self
  76. def set_author(self, target: author) -> proxy:
  77. self._target.author = target
  78. return self
  79. def set_category(self, target: category) -> proxy:
  80. self._target.category = target
  81. return self