test/skills/blog-writer/manage_examples.py
2026-03-24 04:04:58 +00:00

91 lines
2.6 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Utility script for managing the blog examples library.
Helps identify old examples to prune when the library exceeds the limit.
"""
import os
import sys
from datetime import datetime
from pathlib import Path
EXAMPLES_DIR = Path(__file__).parent.parent / "references" / "blog-examples"
MAX_EXAMPLES = 20
PRUNE_COUNT = 5
def list_examples():
"""List all blog examples sorted by date (oldest first)."""
examples = []
for f in EXAMPLES_DIR.glob("*.md"):
# Extract date from filename (YYYY-MM-DD-slug.md)
try:
date_str = f.stem[:10]
date = datetime.strptime(date_str, "%Y-%m-%d")
examples.append((date, f.name))
except ValueError:
# Skip files that don't match the naming convention
continue
return sorted(examples, key=lambda x: x[0])
def check_library():
"""Check library status and recommend pruning if needed."""
examples = list_examples()
count = len(examples)
print(f"Blog Examples Library Status")
print(f"=" * 40)
print(f"Total examples: {count}")
print(f"Maximum allowed: {MAX_EXAMPLES}")
print()
if count > MAX_EXAMPLES:
print(f"⚠️ Library exceeds limit by {count - MAX_EXAMPLES} files")
print(f"Recommend removing the {PRUNE_COUNT} oldest examples:")
print()
for i, (date, name) in enumerate(examples[:PRUNE_COUNT]):
print(f" {i+1}. {name} ({date.strftime('%B %d, %Y')})")
else:
print(f"✓ Library is within limits ({MAX_EXAMPLES - count} slots available)")
print()
print("All examples (oldest first):")
print("-" * 40)
for date, name in examples:
print(f" {name}")
def prune_oldest(dry_run=True):
"""Remove the oldest examples to bring library under limit."""
examples = list_examples()
count = len(examples)
if count <= MAX_EXAMPLES:
print("Library is within limits. No pruning needed.")
return
to_remove = examples[:PRUNE_COUNT]
if dry_run:
print(f"DRY RUN - Would remove {len(to_remove)} files:")
else:
print(f"Removing {len(to_remove)} oldest files:")
for date, name in to_remove:
filepath = EXAMPLES_DIR / name
if dry_run:
print(f" Would remove: {name}")
else:
filepath.unlink()
print(f" Removed: {name}")
if __name__ == "__main__":
if len(sys.argv) > 1 and sys.argv[1] == "prune":
dry_run = "--execute" not in sys.argv
prune_oldest(dry_run=dry_run)
else:
check_library()