Reusable task CRUD operations skill. Use whenever implementing add, delete, update, view, or complete functionality for todo tasks.
Use this skill when implementing task Create, Read, Update, Delete operations.
from dataclasses import dataclass
from datetime import datetime
@dataclass
class Task:
id: int
title: str
description: str = ""
completed: bool = False
created_at: datetime = datetime.now()
updated_at: datetime = datetime.now()
def create_task(state: TaskState, title: str, description: str = "") -> Task:
# Validate title (1-200 chars)
if not title or len(title) > 200:
raise ValueError("Title must be 1-200 characters")
# Create task with auto-increment ID
task = Task(id=state.next_id, title=title, description=description)
state.tasks[task.id] = task
state.next_id += 1
return task
def get_task(state: TaskState, task_id: int) -> Task | None:
return state.tasks.get(task_id)
def list_tasks(state: TaskState, filter: str = "all") -> list[Task]:
tasks = list(state.tasks.values())
if filter == "pending":
return [t for t in tasks if not t.completed]
elif filter == "completed":
return [t for t in tasks if t.completed]
return tasks
def update_task(state: TaskState, task_id: int, title: str = None,
description: str = None) -> Task | None:
task = state.tasks.get(task_id)
if not task:
return None
if title:
task.title = title
if description is not None:
task.description = description
task.updated_at = datetime.now()
return task
def delete_task(state: TaskState, task_id: int) -> bool:
if task_id in state.tasks:
del state.tasks[task_id]
return True
return False
def toggle_complete(state: TaskState, task_id: int) -> Task | None:
task = state.tasks.get(task_id)
if task:
task.completed = not task.completed
task.updated_at = datetime.now()
return task
| Field | Rule |
|---|---|
| title | Required, 1-200 characters |
| description | Optional, max 1000 characters |
| id | Auto-increment, unique |
| completed | Boolean, default False |
class TaskError(Exception):
pass
def safe_task_operation(func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except KeyError:
raise TaskError("Task not found")
except ValueError as e:
raise TaskError(str(e))
return wrapper
# Add a task
task = create_task(state, "Buy groceries", "Milk, eggs, bread")
# List all tasks
tasks = list_tasks(state, filter="pending")
# Update a task
updated = update_task(state, 1, title="Buy groceries and fruits")
# Toggle completion
task = toggle_complete(state, 2)
# Delete a task
success = delete_task(state, 3)