| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | 
                        - """
 - DifyAPI Repository Factory for creating repository instances.
 - 
 - This factory is specifically designed for DifyAPI repositories that handle
 - service-layer operations with dependency injection patterns.
 - """
 - 
 - import logging
 - 
 - from sqlalchemy.orm import sessionmaker
 - 
 - from configs import dify_config
 - from core.repositories import DifyCoreRepositoryFactory, RepositoryImportError
 - from repositories.api_workflow_node_execution_repository import DifyAPIWorkflowNodeExecutionRepository
 - from repositories.api_workflow_run_repository import APIWorkflowRunRepository
 - 
 - logger = logging.getLogger(__name__)
 - 
 - 
 - class DifyAPIRepositoryFactory(DifyCoreRepositoryFactory):
 -     """
 -     Factory for creating DifyAPI repository instances based on configuration.
 - 
 -     This factory handles the creation of repositories that are specifically designed
 -     for service-layer operations and use dependency injection with sessionmaker
 -     for better testability and separation of concerns.
 -     """
 - 
 -     @classmethod
 -     def create_api_workflow_node_execution_repository(
 -         cls, session_maker: sessionmaker
 -     ) -> DifyAPIWorkflowNodeExecutionRepository:
 -         """
 -         Create a DifyAPIWorkflowNodeExecutionRepository instance based on configuration.
 - 
 -         This repository is designed for service-layer operations and uses dependency injection
 -         with a sessionmaker for better testability and separation of concerns. It provides
 -         database access patterns specifically needed by service classes, handling queries
 -         that involve database-specific fields and multi-tenancy concerns.
 - 
 -         Args:
 -             session_maker: SQLAlchemy sessionmaker to inject for database session management.
 - 
 -         Returns:
 -             Configured DifyAPIWorkflowNodeExecutionRepository instance
 - 
 -         Raises:
 -             RepositoryImportError: If the configured repository cannot be imported or instantiated
 -         """
 -         class_path = dify_config.API_WORKFLOW_NODE_EXECUTION_REPOSITORY
 -         logger.debug(f"Creating DifyAPIWorkflowNodeExecutionRepository from: {class_path}")
 - 
 -         try:
 -             repository_class = cls._import_class(class_path)
 -             cls._validate_repository_interface(repository_class, DifyAPIWorkflowNodeExecutionRepository)
 -             # Service repository requires session_maker parameter
 -             cls._validate_constructor_signature(repository_class, ["session_maker"])
 - 
 -             return repository_class(session_maker=session_maker)  # type: ignore[no-any-return]
 -         except RepositoryImportError:
 -             # Re-raise our custom errors as-is
 -             raise
 -         except Exception as e:
 -             logger.exception("Failed to create DifyAPIWorkflowNodeExecutionRepository")
 -             raise RepositoryImportError(
 -                 f"Failed to create DifyAPIWorkflowNodeExecutionRepository from '{class_path}': {e}"
 -             ) from e
 - 
 -     @classmethod
 -     def create_api_workflow_run_repository(cls, session_maker: sessionmaker) -> APIWorkflowRunRepository:
 -         """
 -         Create an APIWorkflowRunRepository instance based on configuration.
 - 
 -         This repository is designed for service-layer WorkflowRun operations and uses dependency
 -         injection with a sessionmaker for better testability and separation of concerns. It provides
 -         database access patterns specifically needed by service classes for workflow run management,
 -         including pagination, filtering, and bulk operations.
 - 
 -         Args:
 -             session_maker: SQLAlchemy sessionmaker to inject for database session management.
 - 
 -         Returns:
 -             Configured APIWorkflowRunRepository instance
 - 
 -         Raises:
 -             RepositoryImportError: If the configured repository cannot be imported or instantiated
 -         """
 -         class_path = dify_config.API_WORKFLOW_RUN_REPOSITORY
 -         logger.debug(f"Creating APIWorkflowRunRepository from: {class_path}")
 - 
 -         try:
 -             repository_class = cls._import_class(class_path)
 -             cls._validate_repository_interface(repository_class, APIWorkflowRunRepository)
 -             # Service repository requires session_maker parameter
 -             cls._validate_constructor_signature(repository_class, ["session_maker"])
 - 
 -             return repository_class(session_maker=session_maker)  # type: ignore[no-any-return]
 -         except RepositoryImportError:
 -             # Re-raise our custom errors as-is
 -             raise
 -         except Exception as e:
 -             logger.exception("Failed to create APIWorkflowRunRepository")
 -             raise RepositoryImportError(f"Failed to create APIWorkflowRunRepository from '{class_path}': {e}") from e
 
 
  |