1import click
2
3from plain.cli import register_cli
4
5from .models import CachedItem
6
7
8@register_cli("cache")
9@click.group()
10def cli() -> None:
11 """Cache management"""
12
13
14@cli.command()
15def clear_expired() -> None:
16 """Clear expired cache entries"""
17 click.echo("Clearing expired cache items...")
18 result = CachedItem.query.expired().delete()
19 click.echo(f"Deleted {result[0]} expired cache items.")
20
21
22@cli.command()
23@click.option("--force", is_flag=True)
24def clear_all(force: bool) -> None:
25 """Clear all cache entries"""
26 if not force and not click.confirm(
27 "Are you sure you want to delete all cache items?"
28 ):
29 return
30 click.echo("Clearing all cache items...")
31 result = CachedItem.query.all().delete()
32 click.echo(f"Deleted {result[0]} cache items.")
33
34
35@cli.command()
36def stats() -> None:
37 """Show cache statistics"""
38 total = CachedItem.query.count()
39 expired = CachedItem.query.expired().count()
40 unexpired = CachedItem.query.unexpired().count()
41 forever = CachedItem.query.forever().count()
42
43 click.echo(f"Total: {click.style(total, bold=True)}")
44 click.echo(f"Expired: {click.style(expired, bold=True)}")
45 click.echo(f"Unexpired: {click.style(unexpired, bold=True)}")
46 click.echo(f"Forever: {click.style(forever, bold=True)}")