refactor: Rename CreatedByRole to CreatorUserRole

Signed-off-by: -LAN- <laipz8200@outlook.com>
pull/19430/head
-LAN- 1 year ago
parent 47bbd739fc
commit d4fb9c7472
No known key found for this signature in database
GPG Key ID: 6BA0D108DED011FF

@ -70,7 +70,7 @@ from events.message_event import message_was_created
from extensions.ext_database import db from extensions.ext_database import db
from models import Conversation, EndUser, Message, MessageFile from models import Conversation, EndUser, Message, MessageFile
from models.account import Account from models.account import Account
from models.enums import CreatedByRole from models.enums import CreatorUserRole
from models.workflow import ( from models.workflow import (
Workflow, Workflow,
WorkflowRunStatus, WorkflowRunStatus,
@ -105,11 +105,11 @@ class AdvancedChatAppGenerateTaskPipeline:
if isinstance(user, EndUser): if isinstance(user, EndUser):
self._user_id = user.id self._user_id = user.id
user_session_id = user.session_id user_session_id = user.session_id
self._created_by_role = CreatedByRole.END_USER self._created_by_role = CreatorUserRole.END_USER
elif isinstance(user, Account): elif isinstance(user, Account):
self._user_id = user.id self._user_id = user.id
user_session_id = user.id user_session_id = user.id
self._created_by_role = CreatedByRole.ACCOUNT self._created_by_role = CreatorUserRole.ACCOUNT
else: else:
raise NotImplementedError(f"User type not supported: {type(user)}") raise NotImplementedError(f"User type not supported: {type(user)}")
@ -739,9 +739,9 @@ class AdvancedChatAppGenerateTaskPipeline:
url=file["remote_url"], url=file["remote_url"],
belongs_to="assistant", belongs_to="assistant",
upload_file_id=file["related_id"], upload_file_id=file["related_id"],
created_by_role=CreatedByRole.ACCOUNT created_by_role=CreatorUserRole.ACCOUNT
if message.invoke_from in {InvokeFrom.EXPLORE, InvokeFrom.DEBUGGER} if message.invoke_from in {InvokeFrom.EXPLORE, InvokeFrom.DEBUGGER}
else CreatedByRole.END_USER, else CreatorUserRole.END_USER,
created_by=message.from_account_id or message.from_end_user_id or "", created_by=message.from_account_id or message.from_end_user_id or "",
) )
for file in self._recorded_files for file in self._recorded_files

@ -25,7 +25,7 @@ from core.app.task_pipeline.easy_ui_based_generate_task_pipeline import EasyUIBa
from core.prompt.utils.prompt_template_parser import PromptTemplateParser from core.prompt.utils.prompt_template_parser import PromptTemplateParser
from extensions.ext_database import db from extensions.ext_database import db
from models import Account from models import Account
from models.enums import CreatedByRole from models.enums import CreatorUserRole
from models.model import App, AppMode, AppModelConfig, Conversation, EndUser, Message, MessageFile from models.model import App, AppMode, AppModelConfig, Conversation, EndUser, Message, MessageFile
from services.errors.app_model_config import AppModelConfigBrokenError from services.errors.app_model_config import AppModelConfigBrokenError
from services.errors.conversation import ConversationNotExistsError from services.errors.conversation import ConversationNotExistsError
@ -223,7 +223,7 @@ class MessageBasedAppGenerator(BaseAppGenerator):
belongs_to="user", belongs_to="user",
url=file.remote_url, url=file.remote_url,
upload_file_id=file.related_id, upload_file_id=file.related_id,
created_by_role=(CreatedByRole.ACCOUNT if account_id else CreatedByRole.END_USER), created_by_role=(CreatorUserRole.ACCOUNT if account_id else CreatorUserRole.END_USER),
created_by=account_id or end_user_id or "", created_by=account_id or end_user_id or "",
) )
db.session.add(message_file) db.session.add(message_file)

@ -19,7 +19,7 @@ from core.rag.extractor.extractor_base import BaseExtractor
from core.rag.models.document import Document from core.rag.models.document import Document
from extensions.ext_database import db from extensions.ext_database import db
from extensions.ext_storage import storage from extensions.ext_storage import storage
from models.enums import CreatedByRole from models.enums import CreatorUserRole
from models.model import UploadFile from models.model import UploadFile
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -116,7 +116,7 @@ class WordExtractor(BaseExtractor):
extension=str(image_ext), extension=str(image_ext),
mime_type=mime_type or "", mime_type=mime_type or "",
created_by=self.user_id, created_by=self.user_id,
created_by_role=CreatedByRole.ACCOUNT, created_by_role=CreatorUserRole.ACCOUNT,
created_at=datetime.datetime.now(datetime.UTC).replace(tzinfo=None), created_at=datetime.datetime.now(datetime.UTC).replace(tzinfo=None),
used=True, used=True,
used_by=self.user_id, used_by=self.user_id,

@ -19,7 +19,7 @@ from core.workflow.nodes.enums import NodeType
from core.workflow.repository.workflow_node_execution_repository import OrderConfig, WorkflowNodeExecutionRepository from core.workflow.repository.workflow_node_execution_repository import OrderConfig, WorkflowNodeExecutionRepository
from models import ( from models import (
Account, Account,
CreatedByRole, CreatorUserRole,
EndUser, EndUser,
WorkflowNodeExecution, WorkflowNodeExecution,
WorkflowNodeExecutionStatus, WorkflowNodeExecutionStatus,
@ -78,10 +78,10 @@ class SQLAlchemyWorkflowNodeExecutionRepository(WorkflowNodeExecutionRepository)
# Extract user context # Extract user context
self._triggered_from = triggered_from self._triggered_from = triggered_from
self._created_by = user.id self._creator_user_id = user.id
# Determine user role based on user type # Determine user role based on user type
self._created_by_role = CreatedByRole.ACCOUNT if isinstance(user, Account) else CreatedByRole.END_USER self._creator_user_role = CreatorUserRole.ACCOUNT if isinstance(user, Account) else CreatorUserRole.END_USER
# Initialize in-memory cache for node executions # Initialize in-memory cache for node executions
# Key: node_execution_id, Value: NodeExecution # Key: node_execution_id, Value: NodeExecution
@ -140,9 +140,9 @@ class SQLAlchemyWorkflowNodeExecutionRepository(WorkflowNodeExecutionRepository)
# Use values from constructor if provided # Use values from constructor if provided
if not self._triggered_from: if not self._triggered_from:
raise ValueError("triggered_from is required in repository constructor") raise ValueError("triggered_from is required in repository constructor")
if not self._created_by: if not self._creator_user_id:
raise ValueError("created_by is required in repository constructor") raise ValueError("created_by is required in repository constructor")
if not self._created_by_role: if not self._creator_user_role:
raise ValueError("created_by_role is required in repository constructor") raise ValueError("created_by_role is required in repository constructor")
db_model = WorkflowNodeExecution() db_model = WorkflowNodeExecution()
@ -167,8 +167,8 @@ class SQLAlchemyWorkflowNodeExecutionRepository(WorkflowNodeExecutionRepository)
db_model.elapsed_time = domain_model.elapsed_time db_model.elapsed_time = domain_model.elapsed_time
db_model.execution_metadata = json.dumps(domain_model.metadata) if domain_model.metadata else None db_model.execution_metadata = json.dumps(domain_model.metadata) if domain_model.metadata else None
db_model.created_at = domain_model.created_at db_model.created_at = domain_model.created_at
db_model.created_by_role = self._created_by_role db_model.created_by_role = self._creator_user_role
db_model.created_by = self._created_by db_model.created_by = self._creator_user_id
db_model.finished_at = domain_model.finished_at db_model.finished_at = domain_model.finished_at
return db_model return db_model

@ -32,7 +32,7 @@ from core.tools.errors import (
from core.tools.utils.message_transformer import ToolFileMessageTransformer from core.tools.utils.message_transformer import ToolFileMessageTransformer
from core.tools.workflow_as_tool.tool import WorkflowTool from core.tools.workflow_as_tool.tool import WorkflowTool
from extensions.ext_database import db from extensions.ext_database import db
from models.enums import CreatedByRole from models.enums import CreatorUserRole
from models.model import Message, MessageFile from models.model import Message, MessageFile
@ -339,9 +339,9 @@ class ToolEngine:
url=message.url, url=message.url,
upload_file_id=tool_file_id, upload_file_id=tool_file_id,
created_by_role=( created_by_role=(
CreatedByRole.ACCOUNT CreatorUserRole.ACCOUNT
if invoke_from in {InvokeFrom.EXPLORE, InvokeFrom.DEBUGGER} if invoke_from in {InvokeFrom.EXPLORE, InvokeFrom.DEBUGGER}
else CreatedByRole.END_USER else CreatorUserRole.END_USER
), ),
created_by=user_id, created_by=user_id,
) )

@ -58,7 +58,7 @@ from core.workflow.repository.workflow_node_execution_repository import Workflow
from core.workflow.workflow_cycle_manager import WorkflowCycleManager from core.workflow.workflow_cycle_manager import WorkflowCycleManager
from extensions.ext_database import db from extensions.ext_database import db
from models.account import Account from models.account import Account
from models.enums import CreatedByRole from models.enums import CreatorUserRole
from models.model import EndUser from models.model import EndUser
from models.workflow import ( from models.workflow import (
Workflow, Workflow,
@ -94,11 +94,11 @@ class WorkflowAppGenerateTaskPipeline:
if isinstance(user, EndUser): if isinstance(user, EndUser):
self._user_id = user.id self._user_id = user.id
user_session_id = user.session_id user_session_id = user.session_id
self._created_by_role = CreatedByRole.END_USER self._created_by_role = CreatorUserRole.END_USER
elif isinstance(user, Account): elif isinstance(user, Account):
self._user_id = user.id self._user_id = user.id
user_session_id = user.id user_session_id = user.id
self._created_by_role = CreatedByRole.ACCOUNT self._created_by_role = CreatorUserRole.ACCOUNT
else: else:
raise ValueError(f"Invalid user type: {type(user)}") raise ValueError(f"Invalid user type: {type(user)}")

@ -61,7 +61,7 @@ from core.workflow.repository.workflow_node_execution_repository import Workflow
from core.workflow.workflow_entry import WorkflowEntry from core.workflow.workflow_entry import WorkflowEntry
from models import ( from models import (
Account, Account,
CreatedByRole, CreatorUserRole,
EndUser, EndUser,
Workflow, Workflow,
WorkflowNodeExecutionStatus, WorkflowNodeExecutionStatus,
@ -90,7 +90,7 @@ class WorkflowCycleManager:
session: Session, session: Session,
workflow_id: str, workflow_id: str,
user_id: str, user_id: str,
created_by_role: CreatedByRole, created_by_role: CreatorUserRole,
) -> WorkflowRun: ) -> WorkflowRun:
workflow_stmt = select(Workflow).where(Workflow.id == workflow_id) workflow_stmt = select(Workflow).where(Workflow.id == workflow_id)
workflow = session.scalar(workflow_stmt) workflow = session.scalar(workflow_stmt)
@ -484,7 +484,7 @@ class WorkflowCycleManager:
workflow_run: WorkflowRun, workflow_run: WorkflowRun,
) -> WorkflowFinishStreamResponse: ) -> WorkflowFinishStreamResponse:
created_by = None created_by = None
if workflow_run.created_by_role == CreatedByRole.ACCOUNT: if workflow_run.created_by_role == CreatorUserRole.ACCOUNT:
stmt = select(Account).where(Account.id == workflow_run.created_by) stmt = select(Account).where(Account.id == workflow_run.created_by)
account = session.scalar(stmt) account = session.scalar(stmt)
if account: if account:
@ -493,7 +493,7 @@ class WorkflowCycleManager:
"name": account.name, "name": account.name,
"email": account.email, "email": account.email,
} }
elif workflow_run.created_by_role == CreatedByRole.END_USER: elif workflow_run.created_by_role == CreatorUserRole.END_USER:
stmt = select(EndUser).where(EndUser.id == workflow_run.created_by) stmt = select(EndUser).where(EndUser.id == workflow_run.created_by)
end_user = session.scalar(stmt) end_user = session.scalar(stmt)
if end_user: if end_user:

@ -27,7 +27,7 @@ from .dataset import (
Whitelist, Whitelist,
) )
from .engine import db from .engine import db
from .enums import CreatedByRole, UserFrom, WorkflowRunTriggeredFrom from .enums import CreatorUserRole, UserFrom, WorkflowRunTriggeredFrom
from .model import ( from .model import (
ApiRequest, ApiRequest,
ApiToken, ApiToken,
@ -112,7 +112,7 @@ __all__ = [
"CeleryTaskSet", "CeleryTaskSet",
"Conversation", "Conversation",
"ConversationVariable", "ConversationVariable",
"CreatedByRole", "CreatorUserRole",
"DataSourceApiKeyAuthBinding", "DataSourceApiKeyAuthBinding",
"DataSourceOauthBinding", "DataSourceOauthBinding",
"Dataset", "Dataset",

@ -1,7 +1,7 @@
from enum import StrEnum from enum import StrEnum
class CreatedByRole(StrEnum): class CreatorUserRole(StrEnum):
ACCOUNT = "account" ACCOUNT = "account"
END_USER = "end_user" END_USER = "end_user"

@ -29,7 +29,7 @@ from libs.helper import generate_string
from .account import Account, Tenant from .account import Account, Tenant
from .base import Base from .base import Base
from .engine import db from .engine import db
from .enums import CreatedByRole from .enums import CreatorUserRole
from .types import StringUUID from .types import StringUUID
from .workflow import WorkflowRunStatus from .workflow import WorkflowRunStatus
@ -1270,7 +1270,7 @@ class MessageFile(Base):
url: str | None = None, url: str | None = None,
belongs_to: Literal["user", "assistant"] | None = None, belongs_to: Literal["user", "assistant"] | None = None,
upload_file_id: str | None = None, upload_file_id: str | None = None,
created_by_role: CreatedByRole, created_by_role: CreatorUserRole,
created_by: str, created_by: str,
): ):
self.message_id = message_id self.message_id = message_id
@ -1547,7 +1547,7 @@ class UploadFile(Base):
size: int, size: int,
extension: str, extension: str,
mime_type: str, mime_type: str,
created_by_role: CreatedByRole, created_by_role: CreatorUserRole,
created_by: str, created_by: str,
created_at: datetime, created_at: datetime,
used: bool, used: bool,

@ -22,7 +22,7 @@ from libs import helper
from .account import Account from .account import Account
from .base import Base from .base import Base
from .engine import db from .engine import db
from .enums import CreatedByRole from .enums import CreatorUserRole
from .types import StringUUID from .types import StringUUID
if TYPE_CHECKING: if TYPE_CHECKING:
@ -429,15 +429,15 @@ class WorkflowRun(Base):
@property @property
def created_by_account(self): def created_by_account(self):
created_by_role = CreatedByRole(self.created_by_role) created_by_role = CreatorUserRole(self.created_by_role)
return db.session.get(Account, self.created_by) if created_by_role == CreatedByRole.ACCOUNT else None return db.session.get(Account, self.created_by) if created_by_role == CreatorUserRole.ACCOUNT else None
@property @property
def created_by_end_user(self): def created_by_end_user(self):
from models.model import EndUser from models.model import EndUser
created_by_role = CreatedByRole(self.created_by_role) created_by_role = CreatorUserRole(self.created_by_role)
return db.session.get(EndUser, self.created_by) if created_by_role == CreatedByRole.END_USER else None return db.session.get(EndUser, self.created_by) if created_by_role == CreatorUserRole.END_USER else None
@property @property
def graph_dict(self): def graph_dict(self):
@ -634,17 +634,17 @@ class WorkflowNodeExecution(Base):
@property @property
def created_by_account(self): def created_by_account(self):
created_by_role = CreatedByRole(self.created_by_role) created_by_role = CreatorUserRole(self.created_by_role)
# TODO(-LAN-): Avoid using db.session.get() here. # TODO(-LAN-): Avoid using db.session.get() here.
return db.session.get(Account, self.created_by) if created_by_role == CreatedByRole.ACCOUNT else None return db.session.get(Account, self.created_by) if created_by_role == CreatorUserRole.ACCOUNT else None
@property @property
def created_by_end_user(self): def created_by_end_user(self):
from models.model import EndUser from models.model import EndUser
created_by_role = CreatedByRole(self.created_by_role) created_by_role = CreatorUserRole(self.created_by_role)
# TODO(-LAN-): Avoid using db.session.get() here. # TODO(-LAN-): Avoid using db.session.get() here.
return db.session.get(EndUser, self.created_by) if created_by_role == CreatedByRole.END_USER else None return db.session.get(EndUser, self.created_by) if created_by_role == CreatorUserRole.END_USER else None
@property @property
def inputs_dict(self): def inputs_dict(self):
@ -755,15 +755,15 @@ class WorkflowAppLog(Base):
@property @property
def created_by_account(self): def created_by_account(self):
created_by_role = CreatedByRole(self.created_by_role) created_by_role = CreatorUserRole(self.created_by_role)
return db.session.get(Account, self.created_by) if created_by_role == CreatedByRole.ACCOUNT else None return db.session.get(Account, self.created_by) if created_by_role == CreatorUserRole.ACCOUNT else None
@property @property
def created_by_end_user(self): def created_by_end_user(self):
from models.model import EndUser from models.model import EndUser
created_by_role = CreatedByRole(self.created_by_role) created_by_role = CreatorUserRole(self.created_by_role)
return db.session.get(EndUser, self.created_by) if created_by_role == CreatedByRole.END_USER else None return db.session.get(EndUser, self.created_by) if created_by_role == CreatorUserRole.END_USER else None
class ConversationVariable(Base): class ConversationVariable(Base):

@ -19,7 +19,7 @@ from core.rag.extractor.extract_processor import ExtractProcessor
from extensions.ext_database import db from extensions.ext_database import db
from extensions.ext_storage import storage from extensions.ext_storage import storage
from models.account import Account from models.account import Account
from models.enums import CreatedByRole from models.enums import CreatorUserRole
from models.model import EndUser, UploadFile from models.model import EndUser, UploadFile
from .errors.file import FileTooLargeError, UnsupportedFileTypeError from .errors.file import FileTooLargeError, UnsupportedFileTypeError
@ -81,7 +81,7 @@ class FileService:
size=file_size, size=file_size,
extension=extension, extension=extension,
mime_type=mimetype, mime_type=mimetype,
created_by_role=(CreatedByRole.ACCOUNT if isinstance(user, Account) else CreatedByRole.END_USER), created_by_role=(CreatorUserRole.ACCOUNT if isinstance(user, Account) else CreatorUserRole.END_USER),
created_by=user.id, created_by=user.id,
created_at=datetime.datetime.now(datetime.UTC).replace(tzinfo=None), created_at=datetime.datetime.now(datetime.UTC).replace(tzinfo=None),
used=False, used=False,
@ -133,7 +133,7 @@ class FileService:
extension="txt", extension="txt",
mime_type="text/plain", mime_type="text/plain",
created_by=current_user.id, created_by=current_user.id,
created_by_role=CreatedByRole.ACCOUNT, created_by_role=CreatorUserRole.ACCOUNT,
created_at=datetime.datetime.now(datetime.UTC).replace(tzinfo=None), created_at=datetime.datetime.now(datetime.UTC).replace(tzinfo=None),
used=True, used=True,
used_by=current_user.id, used_by=current_user.id,

@ -5,7 +5,7 @@ from sqlalchemy import and_, func, or_, select
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from models import App, EndUser, WorkflowAppLog, WorkflowRun from models import App, EndUser, WorkflowAppLog, WorkflowRun
from models.enums import CreatedByRole from models.enums import CreatorUserRole
from models.workflow import WorkflowRunStatus from models.workflow import WorkflowRunStatus
@ -58,7 +58,7 @@ class WorkflowAppService:
stmt = stmt.outerjoin( stmt = stmt.outerjoin(
EndUser, EndUser,
and_(WorkflowRun.created_by == EndUser.id, WorkflowRun.created_by_role == CreatedByRole.END_USER), and_(WorkflowRun.created_by == EndUser.id, WorkflowRun.created_by_role == CreatorUserRole.END_USER),
).where(or_(*keyword_conditions)) ).where(or_(*keyword_conditions))
if status: if status:

@ -26,7 +26,7 @@ from core.workflow.workflow_entry import WorkflowEntry
from events.app_event import app_draft_workflow_was_synced, app_published_workflow_was_updated from events.app_event import app_draft_workflow_was_synced, app_published_workflow_was_updated
from extensions.ext_database import db from extensions.ext_database import db
from models.account import Account from models.account import Account
from models.enums import CreatedByRole from models.enums import CreatorUserRole
from models.model import App, AppMode from models.model import App, AppMode
from models.tools import WorkflowToolProvider from models.tools import WorkflowToolProvider
from models.workflow import ( from models.workflow import (
@ -392,7 +392,7 @@ class WorkflowService:
workflow_node_execution.node_type = node_instance.node_type workflow_node_execution.node_type = node_instance.node_type
workflow_node_execution.title = node_instance.node_data.title workflow_node_execution.title = node_instance.node_data.title
workflow_node_execution.elapsed_time = time.perf_counter() - start_at workflow_node_execution.elapsed_time = time.perf_counter() - start_at
workflow_node_execution.created_by_role = CreatedByRole.ACCOUNT.value workflow_node_execution.created_by_role = CreatorUserRole.ACCOUNT.value
workflow_node_execution.created_at = datetime.now(UTC).replace(tzinfo=None) workflow_node_execution.created_at = datetime.now(UTC).replace(tzinfo=None)
workflow_node_execution.finished_at = datetime.now(UTC).replace(tzinfo=None) workflow_node_execution.finished_at = datetime.now(UTC).replace(tzinfo=None)
if run_succeeded and node_run_result: if run_succeeded and node_run_result:

@ -16,7 +16,7 @@ from core.workflow.enums import SystemVariableKey
from core.workflow.nodes import NodeType from core.workflow.nodes import NodeType
from core.workflow.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository from core.workflow.repository.workflow_node_execution_repository import WorkflowNodeExecutionRepository
from core.workflow.workflow_cycle_manager import WorkflowCycleManager from core.workflow.workflow_cycle_manager import WorkflowCycleManager
from models.enums import CreatedByRole from models.enums import CreatorUserRole
from models.workflow import ( from models.workflow import (
Workflow, Workflow,
WorkflowNodeExecutionStatus, WorkflowNodeExecutionStatus,
@ -93,7 +93,7 @@ def mock_workflow_run():
workflow_run.app_id = "test-app-id" workflow_run.app_id = "test-app-id"
workflow_run.workflow_id = "test-workflow-id" workflow_run.workflow_id = "test-workflow-id"
workflow_run.status = WorkflowRunStatus.RUNNING workflow_run.status = WorkflowRunStatus.RUNNING
workflow_run.created_by_role = CreatedByRole.ACCOUNT workflow_run.created_by_role = CreatorUserRole.ACCOUNT
workflow_run.created_by = "test-user-id" workflow_run.created_by = "test-user-id"
workflow_run.created_at = datetime.now(UTC).replace(tzinfo=None) workflow_run.created_at = datetime.now(UTC).replace(tzinfo=None)
workflow_run.inputs_dict = {"query": "test query"} workflow_run.inputs_dict = {"query": "test query"}
@ -121,7 +121,7 @@ def test_handle_workflow_run_start(workflow_cycle_manager, mock_session, mock_wo
session=mock_session, session=mock_session,
workflow_id="test-workflow-id", workflow_id="test-workflow-id",
user_id="test-user-id", user_id="test-user-id",
created_by_role=CreatedByRole.ACCOUNT, created_by_role=CreatorUserRole.ACCOUNT,
) )
# Verify the result # Verify the result
@ -130,7 +130,7 @@ def test_handle_workflow_run_start(workflow_cycle_manager, mock_session, mock_wo
assert workflow_run.workflow_id == mock_workflow.id assert workflow_run.workflow_id == mock_workflow.id
assert workflow_run.sequence_number == 6 # max_sequence + 1 assert workflow_run.sequence_number == 6 # max_sequence + 1
assert workflow_run.status == WorkflowRunStatus.RUNNING assert workflow_run.status == WorkflowRunStatus.RUNNING
assert workflow_run.created_by_role == CreatedByRole.ACCOUNT assert workflow_run.created_by_role == CreatorUserRole.ACCOUNT
assert workflow_run.created_by == "test-user-id" assert workflow_run.created_by == "test-user-id"
# Verify session.add was called # Verify session.add was called

Loading…
Cancel
Save