From 4dc764072da2884175e4d967a23c74b953704c0d Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 22 Oct 2023 19:12:24 +0300 Subject: [PATCH] feat(isbn): create isbn class --- requirements.txt | 1 + src/bookstore/isbn.py | 12 ++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 requirements.txt create mode 100644 src/bookstore/isbn.py diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..b3f9bb3 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +attrs==23.1.0 diff --git a/src/bookstore/isbn.py b/src/bookstore/isbn.py new file mode 100644 index 0000000..0c8e1ce --- /dev/null +++ b/src/bookstore/isbn.py @@ -0,0 +1,12 @@ +from attrs import define, field, validators + + +# TODO: create checksum method +@define(frozen=True) +class ISBN(str): + number: str = field(converter=str, validator=validators.matches_re(r"^\d{10}$|^\d{13}$")) + + def __str__(self): + if len(self.number) == 10: + return f"{self.number[:9]}-{self.number[9:]}" + return f"{self.number[:3]}-{self.number[3:4]}-{self.number[4:6]}-{self.number[6:12]}-{self.number[12:]}"