"""Minify and filter Obtainium JSON based on variant.""" import argparse import json import sys from typing import Any from utils import should_include_app def minify_json(input_file: str, output_file: str, variant: str = "standard") -> None: """Filter apps by variant, remove meta fields, and output minified JSON. Args: input_file: Path to source applications.json output_file: Path to write minified JSON variant: One of 'standard' or 'dual-screen' """ try: # Read JSON data from input file with open(input_file, "r", encoding="utf-8") as f: data: dict[str, Any] = json.load(f) # Filter apps based on variant if "apps" in data: filtered_apps = [] for app in data["apps"]: if should_include_app(app, variant): # Remove meta key from export app_copy = app.copy() app_copy.pop("meta", None) filtered_apps.append(app_copy) data["apps"] = filtered_apps # Minify JSON and write to output file with open(output_file, "w", encoding="utf-8") as f: json.dump(data, f, separators=(",", ":"), ensure_ascii=False) variant_label = f" ({variant})" if variant != "standard" else "" print( f"Minified JSON{variant_label} saved to {output_file} ({len(data.get('apps', []))} apps included)" ) except Exception as e: print(f"Error: {e}") sys.exit(1) if __name__ == "__main__": parser = argparse.ArgumentParser( description="Minify and filter Obtainium JSON based on variant" ) parser.add_argument("input", help="Input JSON file") parser.add_argument("output", help="Output JSON file") parser.add_argument( "--variant", choices=["standard", "dual-screen"], default="standard", help="Variant to build (default: standard)", ) args = parser.parse_args() minify_json(args.input, args.output, args.variant)