104 lines
3.6 KiB
Python
104 lines
3.6 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
Demo script showing how Godspeed completion status sync works.
|
||
This creates sample markdown files and shows the sync behavior.
|
||
"""
|
||
|
||
import tempfile
|
||
from pathlib import Path
|
||
|
||
|
||
def demo_completion_sync():
|
||
print("=== Godspeed Completion Status Sync Demo ===\n")
|
||
|
||
from src.services.godspeed.sync import GodspeedSync
|
||
|
||
with tempfile.TemporaryDirectory() as temp_dir:
|
||
sync_dir = Path(temp_dir)
|
||
sync_engine = GodspeedSync(None, sync_dir)
|
||
|
||
print("1. Creating sample markdown file with mixed completion states:")
|
||
print("-" * 60)
|
||
|
||
# Create sample tasks
|
||
sample_tasks = [
|
||
("task001", False, "Buy groceries", "Don't forget milk"),
|
||
("task002", True, "Call dentist", ""),
|
||
("task003", False, "Finish project", "Due next Friday"),
|
||
("task004", True, "Exercise today", "Went for a 30min run"),
|
||
]
|
||
|
||
# Write to markdown file
|
||
demo_file = sync_dir / "Personal.md"
|
||
sync_engine._write_list_file(demo_file, sample_tasks)
|
||
|
||
# Show the generated markdown
|
||
with open(demo_file, "r") as f:
|
||
content = f.read()
|
||
|
||
print(content)
|
||
print("-" * 60)
|
||
|
||
print("\n2. What this represents in Godspeed:")
|
||
for task_id, is_complete, title, notes in sample_tasks:
|
||
status = "✅ COMPLETED" if is_complete else "⏳ INCOMPLETE"
|
||
print(f" {status}: {title}")
|
||
if notes:
|
||
print(f" Notes: {notes}")
|
||
|
||
print("\n3. Now let's modify the markdown file (simulate user editing):")
|
||
print("-" * 60)
|
||
|
||
# Simulate user changes - flip some completion states
|
||
modified_content = content.replace(
|
||
"- [ ] Buy groceries",
|
||
"- [x] Buy groceries", # Mark as complete
|
||
).replace(
|
||
"- [x] Call dentist",
|
||
"- [ ] Call dentist", # Mark as incomplete
|
||
)
|
||
|
||
# Add a new task
|
||
modified_content += "- [ ] New task from markdown <!-- id:task005 -->\n"
|
||
|
||
print(modified_content)
|
||
print("-" * 60)
|
||
|
||
# Write the modified content
|
||
with open(demo_file, "w") as f:
|
||
f.write(modified_content)
|
||
|
||
# Parse the changes
|
||
updated_tasks = sync_engine._read_list_file(demo_file)
|
||
|
||
print("\n4. Changes that would sync to Godspeed:")
|
||
print("-" * 40)
|
||
|
||
for i, (task_id, is_complete, title, notes) in enumerate(updated_tasks):
|
||
if i < len(sample_tasks):
|
||
old_complete = sample_tasks[i][1]
|
||
if old_complete != is_complete:
|
||
action = "MARK COMPLETE" if is_complete else "MARK INCOMPLETE"
|
||
print(f" 🔄 {action}: {title}")
|
||
else:
|
||
status = "✅" if is_complete else "⏳"
|
||
print(f" {status} No change: {title}")
|
||
else:
|
||
print(f" ➕ CREATE NEW: {title}")
|
||
|
||
print("\n5. API calls that would be made:")
|
||
print("-" * 35)
|
||
print(" PATCH /tasks/task001 {'is_complete': True}")
|
||
print(" PATCH /tasks/task002 {'is_complete': False}")
|
||
print(" POST /tasks {'title': 'New task from markdown'}")
|
||
|
||
print("\n✨ Summary:")
|
||
print(" • Checking [x] or [X] in markdown marks task complete in Godspeed")
|
||
print(" • Unchecking [ ] in markdown marks task incomplete in Godspeed")
|
||
print(" • Adding new tasks in markdown creates them in Godspeed")
|
||
print(" • Changes sync both directions during 'godspeed sync'")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
demo_completion_sync()
|