Skip to content

Commit

Permalink
feat: moves task effects (#208)
Browse files Browse the repository at this point in the history
  • Loading branch information
jrwils authored Nov 26, 2024
1 parent 062786a commit ea80d80
Show file tree
Hide file tree
Showing 10 changed files with 101 additions and 986 deletions.
1 change: 0 additions & 1 deletion canvas_sdk/data/__init__.py

This file was deleted.

26 changes: 0 additions & 26 deletions canvas_sdk/data/base.py

This file was deleted.

82 changes: 0 additions & 82 deletions canvas_sdk/data/client.py

This file was deleted.

8 changes: 0 additions & 8 deletions canvas_sdk/data/patient.py

This file was deleted.

8 changes: 0 additions & 8 deletions canvas_sdk/data/staff.py

This file was deleted.

67 changes: 0 additions & 67 deletions canvas_sdk/data/task.py

This file was deleted.

99 changes: 99 additions & 0 deletions canvas_sdk/effects/task/task.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
from datetime import datetime
from enum import Enum
from typing import Any, cast

from canvas_sdk.effects.base import EffectType, _BaseEffect


class TaskStatus(Enum):
"""TaskStatus."""

COMPLETED = "COMPLETED"
CLOSED = "CLOSED"
OPEN = "OPEN"


class AddTask(_BaseEffect):
"""
An Effect that will create a Task in Canvas.
"""

class Meta:
effect_type = EffectType.CREATE_TASK
apply_required_fields = ("title",)

assignee_id: str | None = None
patient_id: str | None = None
title: str | None = None
due: datetime | None = None
status: TaskStatus = TaskStatus.OPEN
labels: list[str] = []

@property
def values(self) -> dict[str, Any]:
"""The values for Task addition."""
return {
"patient": {"id": self.patient_id},
"due": self.due.isoformat() if self.due else None,
"assignee": {"id": self.assignee_id},
"title": self.title,
"status": self.status.value,
"labels": self.labels,
}


class AddTaskComment(_BaseEffect):
"""
An Effect that will create a Task Comment on a Task.
"""

class Meta:
effect_type = EffectType.CREATE_TASK_COMMENT
apply_required_fields = (
"body",
"task_id",
)

body: str | None = None
task_id: str | None = None

@property
def values(self) -> dict[str, Any]:
"""The values for adding a task comment."""
return {"task": {"id": self.task_id}, "body": self.body}


class UpdateTask(_BaseEffect):
"""
An Effect that will update a Task in Canvas.
"""

class Meta:
effect_type = EffectType.UPDATE_TASK
apply_required_fields = ("id",)

id: str | None = None
assignee_id: str | None = None
patient_id: str | None = None
title: str | None = None
due: datetime | None = None
status: TaskStatus = TaskStatus.OPEN
labels: list[str] = []

@property
def values(self) -> dict[str, Any]:
"""The values for adding a task comment."""
value_dict: dict[str, Any] = {}
# Only add the fields that have been explicitly set on the model (exclude_unset=True).
# Oherwise, the effect interpreter will set values to null based on their defaults.
set_fields = self.model_dump(exclude_unset=True)
for field, val in set_fields.items():
if field.endswith("_id"):
value_dict[field.split("_")[0]] = {"id": val}
elif field == "due" and val is not None:
value_dict[field] = cast(datetime, val).isoformat()
elif field == "status":
value_dict[field] = cast(TaskStatus, val).value
else:
value_dict[field] = getattr(self, field)
return value_dict
14 changes: 1 addition & 13 deletions canvas_sdk/protocols/base.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
from typing import Any

import arrow

from canvas_sdk.data.client import GQL_CLIENT
from canvas_sdk.handlers.base import BaseHandler


Expand All @@ -11,13 +8,4 @@ class BaseProtocol(BaseHandler):
The class that protocols inherit from.
"""

def _beta_run_gql_query(self, query: str, variables: dict | None = None) -> dict[str, Any]:
return GQL_CLIENT.query(
query,
variables=variables,
extra_args={
"headers": {
"Authorization": f'Bearer {self.secrets["graphql_jwt"]}',
},
},
)
pass
Loading

0 comments on commit ea80d80

Please sign in to comment.