# -*- coding: utf-8 -*- ################### # Object builders # ################### # Book from typing import Self from openbookr.models import Book from openbookr.ABC import BookCreator class BookBuilder(BookCreator): """ Builder pattern for creating Book object """ def __init__(self, title: str, hashkey: str): """ :param title: Book title :param hashkey: Book file hash """ self._create_book(title, hashkey) def set_author(self, author: str) -> Self: """ Set book author :param: author: Book author name """ self.book.author = author return self def set_description(self, description: str) -> Self: """ Set book description :param description: Book description """ self.book.description = description return self def add_tag(self, tag: str) -> Self: """ Add tag to book :param tag: Tag name """ tags = list(self.book.tags) tags.append(tag) self.book.tags = tags.__iter__() return self def add_genre(self, genre: str) -> Self: """ Add genre to book :param genre: Book genre """ genres = list(self.book.genres) genres.append(genre) self.book.genres = genres.__iter__() return self def _create_book(self, title: str, hashkey: str) -> None: self.book = Book(name=title, hashkey=hashkey)