From ef93ad65d39766c54ae206b97107171f12b160d0 Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Sat, 25 Jan 2025 02:59:02 +0800 Subject: [PATCH] =?UTF-8?q?Add=20a=20title=20search=20parameter=20to=20wor?= =?UTF-8?q?kflows=20endpoint,=20add=20index=20to=20work=E2=80=A6=20(#1638)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Muhammed Salih Altun --- ...686bd_add_index_to_org_id_and_title_in_.py | 29 +++++++++++++++++++ skyvern/forge/sdk/db/client.py | 3 ++ skyvern/forge/sdk/db/models.py | 1 + skyvern/forge/sdk/routes/agent_protocol.py | 2 ++ skyvern/forge/sdk/workflow/service.py | 2 ++ 5 files changed, 37 insertions(+) create mode 100644 alembic/versions/2025_01_24_1855-3a37869686bd_add_index_to_org_id_and_title_in_.py diff --git a/alembic/versions/2025_01_24_1855-3a37869686bd_add_index_to_org_id_and_title_in_.py b/alembic/versions/2025_01_24_1855-3a37869686bd_add_index_to_org_id_and_title_in_.py new file mode 100644 index 00000000..f29f62e7 --- /dev/null +++ b/alembic/versions/2025_01_24_1855-3a37869686bd_add_index_to_org_id_and_title_in_.py @@ -0,0 +1,29 @@ +"""Add index to org_id and title in workflows table + +Revision ID: 3a37869686bd +Revises: 13e4af5c975c +Create Date: 2025-01-24 18:55:13.047159+00:00 + +""" + +from typing import Sequence, Union + +from alembic import op + +# revision identifiers, used by Alembic. +revision: str = "3a37869686bd" +down_revision: Union[str, None] = "13e4af5c975c" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_index("organization_id_title_idx", "workflows", ["organization_id", "title"], unique=False) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_index("organization_id_title_idx", table_name="workflows") + # ### end Alembic commands ### diff --git a/skyvern/forge/sdk/db/client.py b/skyvern/forge/sdk/db/client.py index 67df35be..c2024b37 100644 --- a/skyvern/forge/sdk/db/client.py +++ b/skyvern/forge/sdk/db/client.py @@ -1176,6 +1176,7 @@ class AgentDB: page_size: int = 10, only_saved_tasks: bool = False, only_workflows: bool = False, + title: str = "", ) -> list[Workflow]: """ Get all workflows with the latest version for the organization. @@ -1209,6 +1210,8 @@ class AgentDB: main_query = main_query.where(WorkflowModel.is_saved_task.is_(True)) elif only_workflows: main_query = main_query.where(WorkflowModel.is_saved_task.is_(False)) + if title: + main_query = main_query.where(WorkflowModel.title.ilike(f"%{title}%")) main_query = ( main_query.order_by(WorkflowModel.created_at.desc()).limit(page_size).offset(db_page * page_size) ) diff --git a/skyvern/forge/sdk/db/models.py b/skyvern/forge/sdk/db/models.py index 2ac2af36..9e9f456b 100644 --- a/skyvern/forge/sdk/db/models.py +++ b/skyvern/forge/sdk/db/models.py @@ -194,6 +194,7 @@ class WorkflowModel(Base): name="uc_org_permanent_id_version", ), Index("permanent_id_version_idx", "workflow_permanent_id", "version"), + Index("organization_id_title_idx", "organization_id", "title"), ) workflow_id = Column(String, primary_key=True, index=True, default=generate_workflow_id) diff --git a/skyvern/forge/sdk/routes/agent_protocol.py b/skyvern/forge/sdk/routes/agent_protocol.py index d6c4e836..1d80cd6a 100644 --- a/skyvern/forge/sdk/routes/agent_protocol.py +++ b/skyvern/forge/sdk/routes/agent_protocol.py @@ -911,6 +911,7 @@ async def get_workflows( page_size: int = Query(10, ge=1), only_saved_tasks: bool = Query(False), only_workflows: bool = Query(False), + title: str = Query(""), current_org: Organization = Depends(org_auth_service.get_current_org), ) -> list[Workflow]: """ @@ -930,6 +931,7 @@ async def get_workflows( page_size=page_size, only_saved_tasks=only_saved_tasks, only_workflows=only_workflows, + title=title, ) diff --git a/skyvern/forge/sdk/workflow/service.py b/skyvern/forge/sdk/workflow/service.py index c761760c..501c7465 100644 --- a/skyvern/forge/sdk/workflow/service.py +++ b/skyvern/forge/sdk/workflow/service.py @@ -524,6 +524,7 @@ class WorkflowService: page_size: int = 10, only_saved_tasks: bool = False, only_workflows: bool = False, + title: str = "", ) -> list[Workflow]: """ Get all workflows with the latest version for the organization. @@ -534,6 +535,7 @@ class WorkflowService: page_size=page_size, only_saved_tasks=only_saved_tasks, only_workflows=only_workflows, + title=title, ) async def update_workflow(