68 lines
1.5 KiB
Python
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)
|