Working with Tasks¶
This guide covers all task-related operations available in the API client.
Task Models¶
TaskCreate¶
Used when creating a new task:
from datetime import datetime, timezone
from dida365 import TaskCreate, TaskPriority
task = TaskCreate(
project_id="project_id", # Required: Project ID, "" for inbox
title="My Task", # Required: Task title
content="Task details", # Optional: Task content
desc="Task description", # Optional: Task description
priority=TaskPriority.HIGH, # Optional: Task priority
is_all_day=False, # Optional: All-day task
start_date=datetime.now(timezone.utc), # Optional: Start time
due_date=None, # Optional: Due time
time_zone="UTC", # Optional: Time zone
reminders=["TRIGGER:PT0S"], # Optional: Reminder triggers
repeat_flag=None, # Optional: Recurring rules
items=[ # Optional: Checklist items
{
"title": "Subtask 1",
"status": 0
}
]
)
Note
If the provided project_id
does not exist, the task will be created in the inbox. You can also explicitly create a task in the inbox by setting project_id=""
(empty string).
TaskUpdate¶
Used when updating an existing task:
from dida365 import TaskUpdate, TaskPriority
update = TaskUpdate(
id="task_id", # Required: Task ID
project_id="project_id", # Required: Project ID
title="Updated Task", # Optional: New title
priority=TaskPriority.MEDIUM # Optional: New priority
)
Basic Operations¶
Create a Task¶
# Simple task
task = await client.create_task(
TaskCreate(
project_id="project_id",
title="Simple Task"
)
)
# Detailed task
from datetime import datetime, timezone
task = await client.create_task(
TaskCreate(
project_id="project_id",
title="Important Meeting",
content="Quarterly review",
priority=TaskPriority.HIGH,
start_date=datetime.now(timezone.utc),
is_all_day=False,
time_zone="UTC",
reminders=["TRIGGER:PT0S"], # Reminder at start time
items=[
{"title": "Prepare slides", "status": 0},
{"title": "Review metrics", "status": 0}
]
)
)
Get Tasks¶
# Get a specific task
task = await client.get_task("project_id", "task_id")
# Get all tasks in a project
project_data = await client.get_project_with_data("project_id")
tasks = project_data.tasks
Update a Task¶
# Update specific fields
updated = await client.update_task(
TaskUpdate(
id="task_id",
project_id="project_id",
title="New Title"
)
)
# Full update
updated = await client.update_task(
TaskUpdate(
id="task_id",
project_id="project_id",
title="Updated Task",
content="New content",
priority=TaskPriority.HIGH,
start_date=datetime.now(timezone.utc),
items=[
{"title": "New subtask", "status": 0}
]
)
)
Complete/Delete Tasks¶
# Mark task as complete
await client.complete_task("project_id", "task_id")
# Delete task
await client.delete_task("project_id", "task_id")
Task Properties¶
Property | Type | Required | Description |
---|---|---|---|
id |
str | Yes (update) | Task identifier |
project_id |
str | Yes | Project identifier |
title |
str | Yes | Task title |
content |
str | No | Task content/notes |
desc |
str | No | Task description |
priority |
TaskPriority | No | Task priority level |
is_all_day |
bool | No | Whether task is all-day |
start_date |
datetime | No | Start date and time |
due_date |
datetime | No | Due date and time |
time_zone |
str | No | Time zone for dates |
reminders |
List[str] | No | Reminder triggers |
repeat_flag |
str | No | Recurring rules |
items |
List[dict] | No | Checklist items |
status |
TaskStatus | No | Task status |
Priority Levels¶
from dida365 import TaskPriority
# Available priority levels:
TaskPriority.NONE # No priority (0)
TaskPriority.LOW # Low priority (1)
TaskPriority.MEDIUM # Medium priority (3)
TaskPriority.HIGH # High priority (5)
Task Status¶
from dida365 import TaskStatus
# Available status values:
TaskStatus.NORMAL # Normal/incomplete (0)
TaskStatus.COMPLETED # Completed (2)
Checklist Items¶
Checklist items (subtasks) have their own properties:
checklist_item = {
"title": "Subtask", # Required: Item title
"status": 0, # Optional: 0=normal, 1=completed
"start_date": datetime.now(), # Optional: Start time
"is_all_day": False, # Optional: All-day item
"time_zone": "UTC" # Optional: Time zone
}
Error Handling¶
from dida365.exceptions import NotFoundError, ValidationError
try:
task = await client.get_task("project_id", "non_existent_id")
except NotFoundError:
print("Task not found")
except ValidationError as e:
print(f"Invalid data: {e}")
Complete Example¶
from datetime import datetime, timezone
from dida365 import (
Dida365Client,
TaskCreate,
TaskUpdate,
TaskPriority,
ProjectCreate
)
async def manage_tasks():
client = Dida365Client()
# Create a project first
project = await client.create_project(
ProjectCreate(name="Task Demo")
)
# Create a task with subtasks
task = await client.create_task(
TaskCreate(
project_id=project.id,
title="Important Task",
content="Task details",
priority=TaskPriority.HIGH,
start_date=datetime.now(timezone.utc),
items=[
{"title": "Subtask 1", "status": 0},
{"title": "Subtask 2", "status": 0}
]
)
)
# Update the task
updated = await client.update_task(
TaskUpdate(
id=task.id,
project_id=project.id,
title="Updated Task",
priority=TaskPriority.MEDIUM
)
)
# Mark as complete
await client.complete_task(project.id, task.id)
# Clean up
await client.delete_task(project.id, task.id)
await client.delete_project(project.id)