refactored

This commit is contained in:
Robert 2024-02-28 18:08:45 +07:00
parent 3a01917a7f
commit 803aec9a44
No known key found for this signature in database
GPG Key ID: F631C7FD957D5F22

View File

@ -1,35 +1,49 @@
from .chain import Chain from .chain import Chain
from .base import BaseConfig, BaseMongoModel from .base import BaseConfig, BaseMongoModel
from enum import Enum
from datetime import datetime from datetime import datetime
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from typing import Literal, Union, Annotated, Optional, List from typing import Literal, Union, Annotated, Optional, List
class WaitAction(BaseModel): class ProgressActionStatusEnum(str, Enum):
action_type: Literal["wait"] PENDING = "pending"
wait_for: int DONE = "done"
done: Annotated[bool, Field(default=False)] FAILED = "failed"
class BaseProgressAction(BaseModel):
action_type: Literal["wait", "comment"]
status: Annotated[
ProgressActionStatusEnum, Field(default=ProgressActionStatusEnum.PENDING)
]
started_at: Annotated[Optional[datetime], Field(default=None)] started_at: Annotated[Optional[datetime], Field(default=None)]
finished_at: Annotated[Optional[datetime], Field(default=None)] finished_at: Annotated[Optional[datetime], Field(default=None)]
error_text: Annotated[Optional[str], Field(default=None)]
class WaitProgressAction(BaseProgressAction):
action_type: Literal["wait"]
wait_for: int
class Config(BaseConfig): class Config(BaseConfig):
pass pass
class TextCommentAction(BaseModel): class CommentProgressAction(BaseProgressAction):
action_type: Literal["text_comment"] action_type: Literal["comment"]
text: str text: str
done: Annotated[bool, Field(default=False)]
started_at: Annotated[Optional[datetime], Field(default=None)]
finished_at: Annotated[Optional[datetime], Field(default=None)]
class Config(BaseConfig): class Config(BaseConfig):
pass pass
Action = Annotated[ Action = Annotated[
Union[WaitAction, TextCommentAction], Field(description="action_type") Union[WaitProgressAction, CommentProgressAction],
Field(description="action_type"),
] ]
@ -50,3 +64,15 @@ class ProgressChain(BaseMongoModel):
name=chain.name, name=chain.name,
actions=map(Chain.model_dump, chain.actions), actions=map(Chain.model_dump, chain.actions),
) )
@property
def is_finished(self):
return all(
action.status is ProgressActionStatusEnum.DONE for action in self.actions
)
@property
def has_failed(self):
return any(
action.status is ProgressActionStatusEnum.FAILED for action in self.actions
)