This documentation was generated with AI assistance and is still being audited. Some, or potentially a lot, of this information may be inaccurate. Learn more.
@workenv_group.command("clean")@click.option("--older-than",type=int,help="Remove packages older than N days",)@click.option("--yes","-y",is_flag=True,help="Skip confirmation prompt",)defworkenv_clean(older_than:int|None,yes:bool)->None:"""Clean the work environment cache."""fromflavor.cacheimportCacheManagermanager=CacheManager()ifnotyes:ifolder_than:prompt=f"Remove cached packages older than {older_than} days?"else:prompt="Remove all cached packages?"ifnotclick.confirm(prompt):pout("Aborted.")return# Clean old packagesremoved=manager.clean(max_age_days=older_than)ifremoved:pout(f"โ Removed {len(removed)} cached package(s)")else:pout("No packages to clean")
@workenv_group.command("list")defworkenv_list()->None:"""List cached package extractions."""fromflavor.cacheimportCacheManagermanager=CacheManager()cached=manager.list_cached()ifnotcached:pout("No cached packages found.")returnpout("๐๏ธ Cached Packages:")pout("="*60)forpkgincached:# Type check: size should be int or float from cache managerpkg_size=pkg["size"]size_mb=pkg_size/(1024*1024)ifisinstance(pkg_size,(int,float))else0.0name=pkg.get("name",pkg["id"])version=pkg.get("version","")ifversion:pout(f"\n๐ฆ {name} v{version}")else:pout(f"\n๐ฆ {name}")pout(f" ID: {pkg['id']}")pout(f" Size: {size_mb:.1f} MB")# Type check: modified should be a float timestampmodified_ts=pkg.get("modified",0)ifisinstance(modified_ts,(int,float)):modified=datetime.datetime.fromtimestamp(modified_ts)else:modified=datetime.datetime.now()pout(f" Modified: {modified.strftime('%Y-%m-%d %H:%M:%S')}")
@workenv_group.command("remove")@click.argument("package_id")@click.option("--yes","-y",is_flag=True,help="Skip confirmation prompt",)defworkenv_remove(package_id:str,yes:bool)->None:"""Remove a specific cached package extraction."""fromflavor.cacheimportCacheManagermanager=CacheManager()ifnotyes:info=manager.inspect_workenv(package_id)ifinfoandinfo.get("exists"):frompathlibimportPathsize_mb=manager._get_dir_size(Path(info["content_dir"]))/(1024*1024)name=info.get("package_info",{}).get("name",package_id)ifnotclick.confirm(f"""Remove {name} ({size_mb:.1f} MB)?"""):pout("Aborted.")returnifmanager.remove(package_id):passelse:perr(f"โ Package '{package_id}' not found")