Files
dify/api/extensions/application_services/installed_app.py
T

61 lines
2.5 KiB
Python

"""Composition of Installed App use cases."""
from dataclasses import dataclass
from sqlalchemy.orm import Session, sessionmaker
from repositories.installed_app_repository import SQLAlchemyInstalledAppRepository
from services.conversation_command_service import ConversationCommandService
from services.conversation_name_service import ConversationNameService
from services.conversation_query_service import ConversationQueryService
from services.installed_app_access_service import InstalledAppAccessService
from services.installed_app_conversation_service import InstalledAppConversationService
from services.installed_app_generation_adapters import AppGenerateServiceRuntime
from services.installed_app_generation_service import InstalledAppGenerationService
from services.installed_app_service import InstalledAppService, WorkspaceRoleLookup
from services.webapp_access_query_service import WebAppAccessQueryService
@dataclass(frozen=True, slots=True)
class InstalledAppServices:
access: InstalledAppAccessService
management: InstalledAppService
generation: InstalledAppGenerationService
conversations: InstalledAppConversationService
def build_installed_app_services(
*,
database_client: sessionmaker[Session],
conversation_queries: ConversationQueryService,
conversation_names: ConversationNameService,
conversation_commands: ConversationCommandService,
webapp_access: WebAppAccessQueryService,
get_workspace_role: WorkspaceRoleLookup,
webapp_auth_enabled: bool,
) -> InstalledAppServices:
installed_apps = SQLAlchemyInstalledAppRepository(session_factory=database_client)
access = InstalledAppAccessService(
installed_apps=installed_apps,
is_user_allowed=webapp_access.is_user_allowed,
get_access_modes=webapp_access.batch_get_access_modes,
get_user_permissions=webapp_access.batch_get_user_permissions,
)
return InstalledAppServices(
access=access,
management=InstalledAppService(
installed_apps=installed_apps,
get_workspace_role=get_workspace_role,
get_visible_app_ids=access.get_visible_app_ids if webapp_auth_enabled else None,
),
generation=InstalledAppGenerationService(
usage=installed_apps,
runtime=AppGenerateServiceRuntime(session_factory=database_client),
),
conversations=InstalledAppConversationService(
queries=conversation_queries,
names=conversation_names,
commands=conversation_commands,
),
)