"""GitHub command presets. Defines preset configurations for the github command. Presets: quick: Fast scraping with minimal data standard: Balanced scraping (DEFAULT) comprehensive: Comprehensive scraping with all data """ from dataclasses import dataclass, field import argparse @dataclass(frozen=True) class GitHubPreset: """Definition of a GitHub preset. Attributes: name: Human-readable preset name description: Brief description of what this preset does max_issues: Maximum issues to fetch features: Dict of feature flags (feature_name -> enabled) estimated_time: Human-readable time estimate """ name: str description: str max_issues: int features: dict[str, bool] = field(default_factory=dict) estimated_time: str = "" # Preset definitions GITHUB_PRESETS = { "quick": GitHubPreset( name="Quick", description="Fast scraping with minimal data (README + code)", max_issues=10, features={ "include_issues": False, "include_changelog": True, "include_releases": False, }, estimated_time="1-3 minutes" ), "standard": GitHubPreset( name="Standard", description="Balanced scraping with issues and releases (recommended)", max_issues=100, features={ "include_issues": True, "include_changelog": True, "include_releases": True, }, estimated_time="5-15 minutes" ), "comprehensive": GitHubPreset( name="Comprehensive", description="Comprehensive scraping with all available data", max_issues=500, features={ "include_issues": True, "include_changelog": True, "include_releases": True, }, estimated_time="20-60 minutes" ), } def apply_github_preset(args: argparse.Namespace, preset_name: str) -> None: """Apply a GitHub preset to the args namespace. Args: args: The argparse.Namespace to modify preset_name: Name of the preset to apply Raises: KeyError: If preset_name is not a valid preset """ preset = GITHUB_PRESETS[preset_name] # Apply max_issues only if not set by user if args.max_issues is None or args.max_issues == 100: # 100 is default args.max_issues = preset.max_issues # Apply feature flags (only if not explicitly disabled by user) for feature, enabled in preset.features.items(): skip_attr = f"no_{feature}" if not hasattr(args, skip_attr) or not getattr(args, skip_attr): setattr(args, skip_attr, not enabled) def show_github_preset_list() -> None: """Print the list of available GitHub presets to stdout.""" print("\nAvailable GitHub Presets") print("=" * 60) print() for name, preset in GITHUB_PRESETS.items(): marker = " (DEFAULT)" if name == "standard" else "" print(f" {name}{marker}") print(f" {preset.description}") print(f" Estimated time: {preset.estimated_time}") print(f" Max issues: {preset.max_issues}") # Show enabled features enabled = [f.replace("include_", "") for f, v in preset.features.items() if v] if enabled: print(f" Features: {', '.join(enabled)}") print() print("Usage: skill-seekers github --repo --preset ") print()