From 06762fea138255cfbd9a0b69eb25ed132804f405 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 22 Oct 2023 19:12:46 +0300 Subject: [PATCH] feat(book): create book class --- src/bookstore/book.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/bookstore/book.py diff --git a/src/bookstore/book.py b/src/bookstore/book.py new file mode 100644 index 0000000..be5e205 --- /dev/null +++ b/src/bookstore/book.py @@ -0,0 +1,22 @@ +from attrs import define, field, setters, validators + +from .isbn import ISBN + + +def _check_price_value(instance, attribute, value): + if value < 0: + raise ValueError("Price must be larger or equal to 0!") + + +def _check_stock_value(instance, attribute, value): + if value < 0: + raise ValueError("Stock must be larger or equal to 0!") + + +@define +class Book: + title: str = field() + author: str = field() # TODO: add default author as "Unknown" + isbn: ISBN = field(on_setattr=setters.frozen, repr=lambda value: f"'{value}'") + price: float = field(converter=float, validator=[validators.instance_of(float), _check_price_value]) + stock: int = field(converter=int, validator=[validators.instance_of(int), _check_stock_value])