OpenBookr/openbookr/builders.py

68 lines
1.5 KiB
Python

# -*- 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)