Plain is headed towards 1.0! Subscribe for development updates →

 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)}")