mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
116 lines
3.3 KiB
Python
116 lines
3.3 KiB
Python
from abc import ABC, abstractmethod
|
|
from logging import Logger
|
|
from typing import Optional
|
|
from invokeai.app.services.board_image_record_storage import BoardImageRecordStorageBase
|
|
from invokeai.app.services.board_record_storage import (
|
|
BoardRecord,
|
|
BoardRecordStorageBase,
|
|
)
|
|
|
|
from invokeai.app.services.image_record_storage import ImageRecordStorageBase
|
|
from invokeai.app.services.models.board_record import BoardDTO
|
|
from invokeai.app.services.urls import UrlServiceBase
|
|
|
|
|
|
class BoardImagesServiceABC(ABC):
|
|
"""High-level service for board-image relationship management."""
|
|
|
|
@abstractmethod
|
|
def add_image_to_board(
|
|
self,
|
|
board_id: str,
|
|
image_name: str,
|
|
) -> None:
|
|
"""Adds an image to a board."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def remove_image_from_board(
|
|
self,
|
|
image_name: str,
|
|
) -> None:
|
|
"""Removes an image from a board."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_all_board_image_names_for_board(
|
|
self,
|
|
board_id: str,
|
|
) -> list[str]:
|
|
"""Gets all board images for a board, as a list of the image names."""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_board_for_image(
|
|
self,
|
|
image_name: str,
|
|
) -> Optional[str]:
|
|
"""Gets an image's board id, if it has one."""
|
|
pass
|
|
|
|
|
|
class BoardImagesServiceDependencies:
|
|
"""Service dependencies for the BoardImagesService."""
|
|
|
|
board_image_records: BoardImageRecordStorageBase
|
|
board_records: BoardRecordStorageBase
|
|
image_records: ImageRecordStorageBase
|
|
urls: UrlServiceBase
|
|
logger: Logger
|
|
|
|
def __init__(
|
|
self,
|
|
board_image_record_storage: BoardImageRecordStorageBase,
|
|
image_record_storage: ImageRecordStorageBase,
|
|
board_record_storage: BoardRecordStorageBase,
|
|
url: UrlServiceBase,
|
|
logger: Logger,
|
|
):
|
|
self.board_image_records = board_image_record_storage
|
|
self.image_records = image_record_storage
|
|
self.board_records = board_record_storage
|
|
self.urls = url
|
|
self.logger = logger
|
|
|
|
|
|
class BoardImagesService(BoardImagesServiceABC):
|
|
_services: BoardImagesServiceDependencies
|
|
|
|
def __init__(self, services: BoardImagesServiceDependencies):
|
|
self._services = services
|
|
|
|
def add_image_to_board(
|
|
self,
|
|
board_id: str,
|
|
image_name: str,
|
|
) -> None:
|
|
self._services.board_image_records.add_image_to_board(board_id, image_name)
|
|
|
|
def remove_image_from_board(
|
|
self,
|
|
image_name: str,
|
|
) -> None:
|
|
self._services.board_image_records.remove_image_from_board(image_name)
|
|
|
|
def get_all_board_image_names_for_board(
|
|
self,
|
|
board_id: str,
|
|
) -> list[str]:
|
|
return self._services.board_image_records.get_all_board_image_names_for_board(board_id)
|
|
|
|
def get_board_for_image(
|
|
self,
|
|
image_name: str,
|
|
) -> Optional[str]:
|
|
board_id = self._services.board_image_records.get_board_for_image(image_name)
|
|
return board_id
|
|
|
|
|
|
def board_record_to_dto(board_record: BoardRecord, cover_image_name: Optional[str], image_count: int) -> BoardDTO:
|
|
"""Converts a board record to a board DTO."""
|
|
return BoardDTO(
|
|
**board_record.dict(exclude={"cover_image_name"}),
|
|
cover_image_name=cover_image_name,
|
|
image_count=image_count,
|
|
)
|