add organization_id to script_blocks (#3150)

This commit is contained in:
Shuchang Zheng
2025-08-08 20:24:44 -07:00
committed by GitHub
parent 30329932ab
commit 136fa70c48
5 changed files with 93 additions and 2 deletions

View File

@@ -0,0 +1,31 @@
"""add organization_id to script_blocks
Revision ID: a027553be970
Revises: 92d665af080e
Create Date: 2025-08-09 01:05:07.564940+00:00
"""
from typing import Sequence, Union
import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision: str = "a027553be970"
down_revision: Union[str, None] = "92d665af080e"
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.add_column("script_blocks", sa.Column("organization_id", sa.String(), nullable=False))
# ### end Alembic commands ###
def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column("script_blocks", "organization_id")
# ### end Alembic commands ###

View File

@@ -29,6 +29,7 @@ from skyvern.forge.sdk.db.models import (
OrganizationModel, OrganizationModel,
OutputParameterModel, OutputParameterModel,
PersistentBrowserSessionModel, PersistentBrowserSessionModel,
ScriptBlockModel,
ScriptFileModel, ScriptFileModel,
ScriptModel, ScriptModel,
StepModel, StepModel,
@@ -55,6 +56,7 @@ from skyvern.forge.sdk.db.utils import (
convert_to_organization_auth_token, convert_to_organization_auth_token,
convert_to_output_parameter, convert_to_output_parameter,
convert_to_script, convert_to_script,
convert_to_script_block,
convert_to_script_file, convert_to_script_file,
convert_to_step, convert_to_step,
convert_to_task, convert_to_task,
@@ -103,7 +105,7 @@ from skyvern.forge.sdk.workflow.models.workflow import (
WorkflowStatus, WorkflowStatus,
) )
from skyvern.schemas.runs import ProxyLocation, RunEngine, RunType from skyvern.schemas.runs import ProxyLocation, RunEngine, RunType
from skyvern.schemas.scripts import Script, ScriptFile from skyvern.schemas.scripts import Script, ScriptBlock, ScriptFile
from skyvern.webeye.actions.actions import Action from skyvern.webeye.actions.actions import Action
from skyvern.webeye.actions.models import AgentStepOutput from skyvern.webeye.actions.models import AgentStepOutput
@@ -3775,3 +3777,33 @@ class AgentDB:
) )
).all() ).all()
return [convert_to_script_file(script_file) for script_file in script_files] return [convert_to_script_file(script_file) for script_file in script_files]
async def get_script_block(
self,
script_block_id: str,
organization_id: str,
) -> ScriptBlock | None:
async with self.Session() as session:
record = (
await session.scalars(
select(ScriptBlockModel)
.filter_by(script_block_id=script_block_id)
.filter_by(organization_id=organization_id)
)
).first()
return convert_to_script_block(record) if record else None
async def get_script_blocks_by_script_revision_id(
self,
script_revision_id: str,
organization_id: str,
) -> list[ScriptBlock]:
async with self.Session() as session:
records = (
await session.scalars(
select(ScriptBlockModel)
.filter_by(script_revision_id=script_revision_id)
.filter_by(organization_id=organization_id)
)
).all()
return [convert_to_script_block(record) for record in records]

View File

@@ -875,6 +875,7 @@ class ScriptBlockModel(Base):
) )
script_block_id = Column(String, primary_key=True, default=generate_script_block_id) script_block_id = Column(String, primary_key=True, default=generate_script_block_id)
organization_id = Column(String, nullable=False)
script_id = Column(String, nullable=False) script_id = Column(String, nullable=False)
script_revision_id = Column(String, nullable=False, index=True) script_revision_id = Column(String, nullable=False, index=True)
script_block_label = Column(String, nullable=False) script_block_label = Column(String, nullable=False)

View File

@@ -15,6 +15,7 @@ from skyvern.forge.sdk.db.models import (
OrganizationAuthTokenModel, OrganizationAuthTokenModel,
OrganizationModel, OrganizationModel,
OutputParameterModel, OutputParameterModel,
ScriptBlockModel,
ScriptFileModel, ScriptFileModel,
ScriptModel, ScriptModel,
StepModel, StepModel,
@@ -51,7 +52,7 @@ from skyvern.forge.sdk.workflow.models.workflow import (
WorkflowStatus, WorkflowStatus,
) )
from skyvern.schemas.runs import ProxyLocation from skyvern.schemas.runs import ProxyLocation
from skyvern.schemas.scripts import Script, ScriptFile from skyvern.schemas.scripts import Script, ScriptBlock, ScriptFile
from skyvern.webeye.actions.actions import ( from skyvern.webeye.actions.actions import (
Action, Action,
ActionType, ActionType,
@@ -538,6 +539,20 @@ def convert_to_script_file(script_file_model: ScriptFileModel) -> ScriptFile:
) )
def convert_to_script_block(script_block_model: ScriptBlockModel) -> ScriptBlock:
return ScriptBlock(
script_block_id=script_block_model.script_block_id,
organization_id=script_block_model.organization_id,
script_id=script_block_model.script_id,
script_revision_id=script_block_model.script_revision_id,
script_block_label=script_block_model.script_block_label,
script_file_id=script_block_model.script_file_id,
created_at=script_block_model.created_at,
modified_at=script_block_model.modified_at,
deleted_at=script_block_model.deleted_at,
)
def hydrate_action(action_model: ActionModel) -> Action: def hydrate_action(action_model: ActionModel) -> Action:
""" """
Convert ActionModel to the appropriate Action type based on action_type. Convert ActionModel to the appropriate Action type based on action_type.

View File

@@ -125,3 +125,15 @@ class Script(BaseModel):
created_at: datetime = Field(description="Timestamp when the script was created") created_at: datetime = Field(description="Timestamp when the script was created")
modified_at: datetime = Field(description="Timestamp when the script was last modified") modified_at: datetime = Field(description="Timestamp when the script was last modified")
deleted_at: datetime | None = Field(default=None, description="Timestamp when the script was soft deleted") deleted_at: datetime | None = Field(default=None, description="Timestamp when the script was soft deleted")
class ScriptBlock(BaseModel):
script_block_id: str
organization_id: str
script_id: str
script_revision_id: str
script_block_label: str
script_file_id: str
created_at: datetime
modified_at: datetime
deleted_at: datetime | None = None