feat: move workflow/metadata models to baseinvocation.py

needed to prevent circular imports
This commit is contained in:
psychedelicious 2023-10-17 19:42:02 +11:00
parent 5a163f02a6
commit 3c4f43314c
11 changed files with 31 additions and 42 deletions

View File

@ -7,11 +7,14 @@ from fastapi.routing import APIRouter
from PIL import Image from PIL import Image
from pydantic import BaseModel, Field, ValidationError from pydantic import BaseModel, Field, ValidationError
from invokeai.app.invocations.baseinvocation import MetadataField, type_adapter_MetadataField from invokeai.app.invocations.baseinvocation import (
MetadataField,
type_adapter_MetadataField,
type_adapter_WorkflowField,
)
from invokeai.app.services.image_records.image_records_common import ImageCategory, ImageRecordChanges, ResourceOrigin from invokeai.app.services.image_records.image_records_common import ImageCategory, ImageRecordChanges, ResourceOrigin
from invokeai.app.services.images.images_common import ImageDTO, ImageUrlsDTO from invokeai.app.services.images.images_common import ImageDTO, ImageUrlsDTO
from invokeai.app.services.shared.pagination import OffsetPaginatedResults from invokeai.app.services.shared.pagination import OffsetPaginatedResults
from invokeai.app.services.workflow_records.workflow_records_common import type_adapter_WorkflowField
from ..dependencies import ApiDependencies from ..dependencies import ApiDependencies

View File

@ -1,7 +1,7 @@
from fastapi import APIRouter, Path from fastapi import APIRouter, Path
from invokeai.app.api.dependencies import ApiDependencies from invokeai.app.api.dependencies import ApiDependencies
from invokeai.app.services.workflow_records.workflow_records_common import WorkflowField from invokeai.app.invocations.baseinvocation import WorkflowField
workflows_router = APIRouter(prefix="/v1/workflows", tags=["workflows"]) workflows_router = APIRouter(prefix="/v1/workflows", tags=["workflows"])

View File

@ -15,7 +15,6 @@ from pydantic.fields import _Unset
from pydantic_core import PydanticUndefined from pydantic_core import PydanticUndefined
from invokeai.app.services.config.config_default import InvokeAIAppConfig from invokeai.app.services.config.config_default import InvokeAIAppConfig
from invokeai.app.services.workflow_records.workflow_records_common import WorkflowField
from invokeai.app.util.misc import uuid_string from invokeai.app.util.misc import uuid_string
if TYPE_CHECKING: if TYPE_CHECKING:
@ -813,22 +812,29 @@ def invocation_output(
return wrapper return wrapper
class WorkflowField(RootModel):
"""
Pydantic model for workflows with custom root of type dict[str, Any].
Workflows are stored without a strict schema.
"""
root: dict[str, Any] = Field(description="The workflow")
type_adapter_WorkflowField = TypeAdapter(WorkflowField)
class WithWorkflow(BaseModel): class WithWorkflow(BaseModel):
workflow: Optional[WorkflowField] = InputField(default=None, description=FieldDescriptions.workflow) workflow: Optional[WorkflowField] = InputField(default=None, description=FieldDescriptions.workflow)
class MetadataItemField(BaseModel):
label: str = Field(description=FieldDescriptions.metadata_item_label)
value: Any = Field(description=FieldDescriptions.metadata_item_value)
class MetadataField(RootModel): class MetadataField(RootModel):
""" """
Pydantic model for metadata with custom root of type dict[str, Any]. Pydantic model for metadata with custom root of type dict[str, Any].
Metadata is stored without a strict schema. Metadata is stored without a strict schema.
""" """
root: dict[str, Any] = Field(description="A dictionary of metadata, shape of which is arbitrary") root: dict[str, Any] = Field(description="The metadata")
type_adapter_MetadataField = TypeAdapter(MetadataField) type_adapter_MetadataField = TypeAdapter(MetadataField)

View File

@ -9,7 +9,6 @@ from invokeai.app.invocations.baseinvocation import (
InputField, InputField,
InvocationContext, InvocationContext,
MetadataField, MetadataField,
MetadataItemField,
OutputField, OutputField,
UIType, UIType,
invocation, invocation,
@ -24,6 +23,11 @@ from invokeai.app.invocations.t2i_adapter import T2IAdapterField
from ...version import __version__ from ...version import __version__
class MetadataItemField(BaseModel):
label: str = Field(description=FieldDescriptions.metadata_item_label)
value: Any = Field(description=FieldDescriptions.metadata_item_value)
class LoRAMetadataField(BaseModel): class LoRAMetadataField(BaseModel):
"""LoRA Metadata Field""" """LoRA Metadata Field"""

View File

@ -4,8 +4,7 @@ from typing import Optional
from PIL.Image import Image as PILImageType from PIL.Image import Image as PILImageType
from invokeai.app.invocations.metadata import MetadataField from invokeai.app.invocations.baseinvocation import MetadataField, WorkflowField
from invokeai.app.services.workflow_records.workflow_records_common import WorkflowField
class ImageFileStorageBase(ABC): class ImageFileStorageBase(ABC):

View File

@ -7,9 +7,8 @@ from PIL import Image, PngImagePlugin
from PIL.Image import Image as PILImageType from PIL.Image import Image as PILImageType
from send2trash import send2trash from send2trash import send2trash
from invokeai.app.invocations.metadata import MetadataField from invokeai.app.invocations.baseinvocation import MetadataField, WorkflowField
from invokeai.app.services.invoker import Invoker from invokeai.app.services.invoker import Invoker
from invokeai.app.services.workflow_records.workflow_records_common import WorkflowField
from invokeai.app.util.thumbnails import get_thumbnail_name, make_thumbnail from invokeai.app.util.thumbnails import get_thumbnail_name, make_thumbnail
from .image_files_base import ImageFileStorageBase from .image_files_base import ImageFileStorageBase

View File

@ -3,7 +3,7 @@ from typing import Callable, Optional
from PIL.Image import Image as PILImageType from PIL.Image import Image as PILImageType
from invokeai.app.invocations.metadata import MetadataField from invokeai.app.invocations.baseinvocation import MetadataField, WorkflowField
from invokeai.app.services.image_records.image_records_common import ( from invokeai.app.services.image_records.image_records_common import (
ImageCategory, ImageCategory,
ImageRecord, ImageRecord,
@ -12,7 +12,6 @@ from invokeai.app.services.image_records.image_records_common import (
) )
from invokeai.app.services.images.images_common import ImageDTO from invokeai.app.services.images.images_common import ImageDTO
from invokeai.app.services.shared.pagination import OffsetPaginatedResults from invokeai.app.services.shared.pagination import OffsetPaginatedResults
from invokeai.app.services.workflow_records.workflow_records_common import WorkflowField
class ImageServiceABC(ABC): class ImageServiceABC(ABC):

View File

@ -2,10 +2,9 @@ from typing import Optional
from PIL.Image import Image as PILImageType from PIL.Image import Image as PILImageType
from invokeai.app.invocations.metadata import MetadataField from invokeai.app.invocations.baseinvocation import MetadataField, WorkflowField
from invokeai.app.services.invoker import Invoker from invokeai.app.services.invoker import Invoker
from invokeai.app.services.shared.pagination import OffsetPaginatedResults from invokeai.app.services.shared.pagination import OffsetPaginatedResults
from invokeai.app.services.workflow_records.workflow_records_common import WorkflowField
from ..image_files.image_files_common import ( from ..image_files.image_files_common import (
ImageFileDeleteException, ImageFileDeleteException,

View File

@ -1,6 +1,6 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from invokeai.app.services.workflow_records.workflow_records_common import WorkflowField from invokeai.app.invocations.baseinvocation import WorkflowField
class WorkflowRecordsStorageBase(ABC): class WorkflowRecordsStorageBase(ABC):

View File

@ -1,19 +1,2 @@
from typing import Any
from pydantic import Field, RootModel, TypeAdapter
class WorkflowNotFoundError(Exception): class WorkflowNotFoundError(Exception):
"""Raised when a workflow is not found""" """Raised when a workflow is not found"""
class WorkflowField(RootModel):
"""
Pydantic model for workflows with custom root of type dict[str, Any].
Workflows are stored without a strict schema.
"""
root: dict[str, Any] = Field(description="Workflow dict")
type_adapter_WorkflowField = TypeAdapter(WorkflowField)

View File

@ -1,14 +1,11 @@
import sqlite3 import sqlite3
import threading import threading
from invokeai.app.invocations.baseinvocation import WorkflowField, type_adapter_WorkflowField
from invokeai.app.services.invoker import Invoker from invokeai.app.services.invoker import Invoker
from invokeai.app.services.shared.sqlite import SqliteDatabase from invokeai.app.services.shared.sqlite import SqliteDatabase
from invokeai.app.services.workflow_records.workflow_records_base import WorkflowRecordsStorageBase from invokeai.app.services.workflow_records.workflow_records_base import WorkflowRecordsStorageBase
from invokeai.app.services.workflow_records.workflow_records_common import ( from invokeai.app.services.workflow_records.workflow_records_common import WorkflowNotFoundError
WorkflowField,
WorkflowNotFoundError,
type_adapter_WorkflowField,
)
from invokeai.app.util.misc import uuid_string from invokeai.app.util.misc import uuid_string