Skip to content

Commit

Permalink
Introduce new TaskStatuses: queued and timed_out (#170)
Browse files Browse the repository at this point in the history
  • Loading branch information
ykeremy authored Apr 9, 2024
1 parent a7351f2 commit 81a1478
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
"""Add new indices to tasks table
Revision ID: 8335d7fecef9
Revises: ea8e24d0bc8e
Create Date: 2024-04-09 00:58:53.060477+00:00
"""
from typing import Sequence, Union

from alembic import op

# revision identifiers, used by Alembic.
revision: str = "8335d7fecef9"
down_revision: Union[str, None] = "ea8e24d0bc8e"
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(op.f("ix_tasks_created_at"), "tasks", ["created_at"], unique=False)
op.create_index(op.f("ix_tasks_modified_at"), "tasks", ["modified_at"], unique=False)
op.create_index(op.f("ix_tasks_status"), "tasks", ["status"], unique=False)
# ### end Alembic commands ###


def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_index(op.f("ix_tasks_status"), table_name="tasks")
op.drop_index(op.f("ix_tasks_modified_at"), table_name="tasks")
op.drop_index(op.f("ix_tasks_created_at"), table_name="tasks")
# ### end Alembic commands ###
8 changes: 5 additions & 3 deletions skyvern/forge/sdk/db/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class TaskModel(Base):

task_id = Column(String, primary_key=True, index=True, default=generate_task_id)
organization_id = Column(String, ForeignKey("organizations.organization_id"))
status = Column(String)
status = Column(String, index=True)
webhook_callback_url = Column(String)
title = Column(String)
url = Column(String)
Expand All @@ -46,8 +46,10 @@ class TaskModel(Base):
retry = Column(Integer, nullable=True)
error_code_mapping = Column(JSON, nullable=True)
errors = Column(JSON, default=[], nullable=False)
created_at = Column(DateTime, default=datetime.datetime.utcnow, nullable=False)
modified_at = Column(DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow, nullable=False)
created_at = Column(DateTime, default=datetime.datetime.utcnow, nullable=False, index=True)
modified_at = Column(
DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow, nullable=False, index=True
)


class StepModel(Base):
Expand Down
11 changes: 8 additions & 3 deletions skyvern/forge/sdk/schemas/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,19 +73,23 @@ class TaskRequest(BaseModel):

class TaskStatus(StrEnum):
created = "created"
queued = "queued"
running = "running"
timed_out = "timed_out"
failed = "failed"
terminated = "terminated"
completed = "completed"

def is_final(self) -> bool:
return self in {TaskStatus.failed, TaskStatus.terminated, TaskStatus.completed}
return self in {TaskStatus.failed, TaskStatus.terminated, TaskStatus.completed, TaskStatus.timed_out}

def can_update_to(self, new_status: TaskStatus) -> bool:
allowed_transitions: dict[TaskStatus, set[TaskStatus]] = {
TaskStatus.created: {TaskStatus.running},
TaskStatus.running: {TaskStatus.completed, TaskStatus.failed, TaskStatus.terminated},
TaskStatus.created: {TaskStatus.queued, TaskStatus.running, TaskStatus.timed_out},
TaskStatus.queued: {TaskStatus.running, TaskStatus.timed_out},
TaskStatus.running: {TaskStatus.completed, TaskStatus.failed, TaskStatus.terminated, TaskStatus.timed_out},
TaskStatus.failed: set(),
TaskStatus.terminated: set(),
TaskStatus.completed: set(),
}
return new_status in allowed_transitions[self]
Expand All @@ -97,6 +101,7 @@ def requires_extracted_info(self) -> bool:
def cant_have_extracted_info(self) -> bool:
status_cant_have_extracted_information = {
TaskStatus.created,
TaskStatus.queued,
TaskStatus.running,
TaskStatus.failed,
TaskStatus.terminated,
Expand Down

0 comments on commit 81a1478

Please sign in to comment.