HASH 029c80ecc1db
DATE 2025-08-08
SUBJECT nix: format
FILES 8 CHANGED
HASH 029c80ecc1db
DATE 2025-08-08
SUBJECT nix: format
FILES 8 CHANGED
┌─ nix/apps/challenge-mode-leaderboard.nix ──────────────────────────────────┐│ diff --git a/nix/apps/challenge-mode-leaderboard.nix b/nix/apps/challenge-mode-lea ││ derboard.nix ││ index 7c3fa63..a1da435 100644 ││ --- a/nix/apps/challenge-mode-leaderboard.nix ││ +++ b/nix/apps/challenge-mode-leaderboard.nix ││ @@ -105,26 +105,26 @@ ││ """Merge new leaderboard data with existing data, preserving historical ││ entries.""" ││ if not os.path.exists(existing_path): ││ return new_data ││ - ││ + ││ try: ││ with open(existing_path, 'r', encoding='utf-8') as f: ││ existing_data = json.load(f) ││ - ││ + ││ # Get existing and new leading groups ││ existing_groups = existing_data.get('leading_groups', []) ││ new_groups = new_data.get('leading_groups', []) ││ - ││ + ││ # Merge the leading groups (append new to existing) ││ merged_groups = existing_groups + new_groups ││ - ││ + ││ # Use new data as base (has current metadata) but with merged group ││ s ││ merged_data = new_data.copy() ││ merged_data['leading_groups'] = merged_groups ││ - ││ + ││ print(f" Merged {len(existing_groups)} existing + {len(new_group ││ s)} new = {len(merged_groups)} total entries") ││ - ││ + ││ return merged_data ││ - ││ + ││ except (json.JSONDecodeError, KeyError) as e: ││ print(f" ERROR reading existing file, using new data only: {e}") ││ return new_data ││ @@ -171,13 +171,13 @@ ││ f"{realm_slug}-{dungeon['slug']}-leaderboard.json" ││ ) ││ os.makedirs(os.path.dirname(output_path), exist_ok=True) ││ - ││ + ││ # For EU realms, merge with existing data to preserve historica ││ l records ││ if realm_info['region'] == 'eu': ││ final_data = merge_leaderboard_data(output_path, leaderboar ││ d) ││ else: ││ final_data = leaderboard ││ - ││ + ││ with open(output_path, 'w', encoding='utf-8') as f: ││ json.dump(final_data, f, indent=2) ││ │└────────────────────────────────────────────────────────────────────────────────────┘
┌─ ...hallenge-mode-leaderboard.nix ───┐│ diff --git a/nix/apps/challenge-mode-leaderb ││ oard.nix b/nix/apps/challenge-mode-leaderboa ││ rd.nix ││ index 7c3fa63..a1da435 100644 ││ --- a/nix/apps/challenge-mode-leaderboard.ni ││ x ││ +++ b/nix/apps/challenge-mode-leaderboard.ni ││ x ││ @@ -105,26 +105,26 @@ ││ """Merge new leaderboard data wit ││ h existing data, preserving historical entri ││ es.""" ││ if not os.path.exists(existing_pa ││ th): ││ return new_data ││ - ││ + ││ try: ││ with open(existing_path, 'r', ││ encoding='utf-8') as f: ││ existing_data = json.load ││ (f) ││ - ││ + ││ # Get existing and new leadin ││ g groups ││ existing_groups = existing_da ││ ta.get('leading_groups', []) ││ new_groups = new_data.get('le ││ ading_groups', []) ││ - ││ + ││ # Merge the leading groups (a ││ ppend new to existing) ││ merged_groups = existing_grou ││ ps + new_groups ││ - ││ + ││ # Use new data as base (has c ││ urrent metadata) but with merged groups ││ merged_data = new_data.copy() ││ merged_data['leading_groups'] ││ = merged_groups ││ - ││ + ││ print(f" Merged {len(exist ││ ing_groups)} existing + {len(new_groups)} ne ││ w = {len(merged_groups)} total entries") ││ - ││ + ││ return merged_data ││ - ││ + ││ except (json.JSONDecodeError, Key ││ Error) as e: ││ print(f" ERROR reading exi ││ sting file, using new data only: {e}") ││ return new_data ││ @@ -171,13 +171,13 @@ ││ f"{realm_slug}-{dunge ││ on['slug']}-leaderboard.json" ││ ) ││ os.makedirs(os.path.dirna ││ me(output_path), exist_ok=True) ││ - ││ + ││ # For EU realms, merge wi ││ th existing data to preserve historical reco ││ rds ││ if realm_info['region'] = ││ = 'eu': ││ final_data = merge_le ││ aderboard_data(output_path, leaderboard) ││ else: ││ final_data = leaderbo ││ ard ││ - ││ + ││ with open(output_path, 'w ││ ', encoding='utf-8') as f: ││ json.dump(final_data, ││ f, indent=2) ││ │└──────────────────────────────────────────────┘
┌─ nix/apps/challenge-mode-parser.nix ───────────────────────────────────────┐│ diff --git a/nix/apps/challenge-mode-parser.nix b/nix/apps/challenge-mode-parser.n ││ ix ││ index 17ef588..b2b8764 100644 ││ --- a/nix/apps/challenge-mode-parser.nix ││ +++ b/nix/apps/challenge-mode-parser.nix ││ @@ -79,18 +79,18 @@ ││ # Remove duplicate runs caused by cross-realm groups appearing on multi ││ ple realm leaderboards ││ seen = set() ││ deduplicated = [] ││ - ││ + ││ for run in runs: ││ # Create a unique identifier for each run using timestamp, duration ││ , and sorted player IDs ││ player_ids = sorted([member["profile"]["id"] for member in run["mem ││ bers"]]) ││ unique_key = (run["completed_timestamp"], run["duration"], tuple(pl ││ ayer_ids)) ││ - ││ + ││ if unique_key not in seen: ││ seen.add(unique_key) ││ deduplicated.append(run) ││ else: ││ print(f" Removing duplicate run: {run['duration']}ms at {run ││ ['completed_timestamp']}") ││ - ││ + ││ return deduplicated ││ ││ def rank_and_save_leaderboards(dungeon_data): ││ @@ -119,15 +119,15 @@ ││ deduplicated_runs = deduplicate_runs(runs) ││ print(f"{len(deduplicated_runs)} -> ", end="") ││ deduplicated_runs.sort(key=sort_key) ││ - ││ + ││ # Limit to top N runs for regional leaderboard ││ final_runs = deduplicated_runs[:TOP_N_FINAL] ││ print(f"{len(final_runs)})") ││ - ││ + ││ # Re-rank runs for regional leaderboard ││ for i, run in enumerate(final_runs): ││ run["ranking"] = i + 1 ││ - ││ + ││ all_regional_runs.extend(final_runs) ││ output_dir = os.path.join(regional_path, region, dungeon_slug) ││ os.makedirs(output_dir, exist_ok=True) ││ @@ -150,15 +150,15 @@ ││ deduplicated_global = deduplicate_runs(all_regional_runs) ││ print(f"{len(deduplicated_global)} -> ", end="") ││ deduplicated_global.sort(key=sort_key) ││ - ││ + ││ # Limit to top N runs for global leaderboard ││ final_global = deduplicated_global[:TOP_N_FINAL] ││ print(f"{len(final_global)})") ││ - ││ + ││ # Re-rank runs for global leaderboard ││ for i, run in enumerate(final_global): ││ run["ranking"] = i + 1 ││ - ││ + ││ global_path = os.path.join(OUTPUT_ROOT, "global", dungeon_slug) ││ os.makedirs(global_path, exist_ok=True) ││ global_output_file = os.path.join(global_path, "leaderboard.json") │└────────────────────────────────────────────────────────────────────────────────────┘
┌─ ...pps/challenge-mode-parser.nix ───┐│ diff --git a/nix/apps/challenge-mode-parser. ││ nix b/nix/apps/challenge-mode-parser.nix ││ index 17ef588..b2b8764 100644 ││ --- a/nix/apps/challenge-mode-parser.nix ││ +++ b/nix/apps/challenge-mode-parser.nix ││ @@ -79,18 +79,18 @@ ││ # Remove duplicate runs caused by ││ cross-realm groups appearing on multiple re ││ alm leaderboards ││ seen = set() ││ deduplicated = [] ││ - ││ + ││ for run in runs: ││ # Create a unique identifier ││ for each run using timestamp, duration, and ││ sorted player IDs ││ player_ids = sorted([member[" ││ profile"]["id"] for member in run["members"] ││ ]) ││ unique_key = (run["completed_ ││ timestamp"], run["duration"], tuple(player_i ││ ds)) ││ - ││ + ││ if unique_key not in seen: ││ seen.add(unique_key) ││ deduplicated.append(run) ││ else: ││ print(f" Removing dupl ││ icate run: {run['duration']}ms at {run['comp ││ leted_timestamp']}") ││ - ││ + ││ return deduplicated ││ ││ def rank_and_save_leaderboards(dungeo ││ n_data): ││ @@ -119,15 +119,15 @@ ││ deduplicated_runs = dedup ││ licate_runs(runs) ││ print(f"{len(deduplicated ││ _runs)} -> ", end="") ││ deduplicated_runs.sort(ke ││ y=sort_key) ││ - ││ + ││ # Limit to top N runs for ││ regional leaderboard ││ final_runs = deduplicated ││ _runs[:TOP_N_FINAL] ││ print(f"{len(final_runs)} ││ )") ││ - ││ + ││ # Re-rank runs for region ││ al leaderboard ││ for i, run in enumerate(f ││ inal_runs): ││ run["ranking"] = i + ││ 1 ││ - ││ + ││ all_regional_runs.extend( ││ final_runs) ││ output_dir = os.path.join ││ (regional_path, region, dungeon_slug) ││ os.makedirs(output_dir, e ││ xist_ok=True) ││ @@ -150,15 +150,15 @@ ││ deduplicated_global = dedupli ││ cate_runs(all_regional_runs) ││ print(f"{len(deduplicated_glo ││ bal)} -> ", end="") ││ deduplicated_global.sort(key= ││ sort_key) ││ - ││ + ││ # Limit to top N runs for glo ││ bal leaderboard ││ final_global = deduplicated_g ││ lobal[:TOP_N_FINAL] ││ print(f"{len(final_global)})" ││ ) ││ - ││ + ││ # Re-rank runs for global lea ││ derboard ││ for i, run in enumerate(final ││ _global): ││ run["ranking"] = i + 1 ││ - ││ + ││ global_path = os.path.join(OU ││ TPUT_ROOT, "global", dungeon_slug) ││ os.makedirs(global_path, exis ││ t_ok=True) ││ global_output_file = os.path. ││ join(global_path, "leaderboard.json") │└──────────────────────────────────────────────┘
┌─ nix/lib/raid.nix ─────────────────────────────────────────────────────────┐│ diff --git a/nix/lib/raid.nix b/nix/lib/raid.nix ││ index dc6378f..29af566 100644 ││ --- a/nix/lib/raid.nix ││ +++ b/nix/lib/raid.nix ││ @@ -12,25 +12,41 @@ ││ if builtins.isString classStr && lib.hasPrefix "Class" classStr ││ then lib.toLower (lib.removePrefix "Class" classStr) ││ else null; ││ - ││ + ││ # Extract spec from spec-specific fields like "elementalShaman", "brewmaste ││ rMonk", etc. ││ - specName = ││ - if builtins.hasAttr "elementalShaman" player then "elemental" ││ - else if builtins.hasAttr "enhancementShaman" player then "enhancement" ││ - else if builtins.hasAttr "restorationShaman" player then "restoration" ││ - else if builtins.hasAttr "brewmasterMonk" player then "brewmaster" ││ - else if builtins.hasAttr "windwalkerMonk" player then "windwalker" ││ - else if builtins.hasAttr "mistweaverMonk" player then "mistweaver" ││ - else if builtins.hasAttr "survivalHunter" player then "survival" ││ - else if builtins.hasAttr "beastMasteryHunter" player then "beast_mastery" ││ - else if builtins.hasAttr "marksmanshipHunter" player then "marksmanship" ││ - else if builtins.hasAttr "balanceDruid" player then "balance" ││ - else if builtins.hasAttr "feralDruid" player then "feral" ││ - else if builtins.hasAttr "guardianDruid" player then "guardian" ││ - else if builtins.hasAttr "restorationDruid" player then "restoration" ││ - else if builtins.hasAttr "holyPaladin" player then "holy" ││ - else if builtins.hasAttr "protectionPaladin" player then "protection" ││ - else if builtins.hasAttr "retributionPaladin" player then "retribution" ││ + specName = ││ + if builtins.hasAttr "elementalShaman" player ││ + then "elemental" ││ + else if builtins.hasAttr "enhancementShaman" player ││ + then "enhancement" ││ + else if builtins.hasAttr "restorationShaman" player ││ + then "restoration" ││ + else if builtins.hasAttr "brewmasterMonk" player ││ + then "brewmaster" ││ + else if builtins.hasAttr "windwalkerMonk" player ││ + then "windwalker" ││ + else if builtins.hasAttr "mistweaverMonk" player ││ + then "mistweaver" ││ + else if builtins.hasAttr "survivalHunter" player ││ + then "survival" ││ + else if builtins.hasAttr "beastMasteryHunter" player ││ + then "beast_mastery" ││ + else if builtins.hasAttr "marksmanshipHunter" player ││ + then "marksmanship" ││ + else if builtins.hasAttr "balanceDruid" player ││ + then "balance" ││ + else if builtins.hasAttr "feralDruid" player ││ + then "feral" ││ + else if builtins.hasAttr "guardianDruid" player ││ + then "guardian" ││ + else if builtins.hasAttr "restorationDruid" player ││ + then "restoration" ││ + else if builtins.hasAttr "holyPaladin" player ││ + then "holy" ││ + else if builtins.hasAttr "protectionPaladin" player ││ + then "protection" ││ + else if builtins.hasAttr "retributionPaladin" player ││ + then "retribution" ││ else null; ││ in { ││ class = className; │└────────────────────────────────────────────────────────────────────────────────────┘
┌─ nix/lib/raid.nix ───────────────────┐│ diff --git a/nix/lib/raid.nix b/nix/lib/raid ││ .nix ││ index dc6378f..29af566 100644 ││ --- a/nix/lib/raid.nix ││ +++ b/nix/lib/raid.nix ││ @@ -12,25 +12,41 @@ ││ if builtins.isString classStr && li ││ b.hasPrefix "Class" classStr ││ then lib.toLower (lib.removePrefix ││ "Class" classStr) ││ else null; ││ - ││ + ││ # Extract spec from spec-specific fie ││ lds like "elementalShaman", "brewmasterMonk" ││ , etc. ││ - specName = ││ - if builtins.hasAttr "elementalShama ││ n" player then "elemental" ││ - else if builtins.hasAttr "enhanceme ││ ntShaman" player then "enhancement" ││ - else if builtins.hasAttr "restorati ││ onShaman" player then "restoration" ││ - else if builtins.hasAttr "brewmaste ││ rMonk" player then "brewmaster" ││ - else if builtins.hasAttr "windwalke ││ rMonk" player then "windwalker" ││ - else if builtins.hasAttr "mistweave ││ rMonk" player then "mistweaver" ││ - else if builtins.hasAttr "survivalH ││ unter" player then "survival" ││ - else if builtins.hasAttr "beastMast ││ eryHunter" player then "beast_mastery" ││ - else if builtins.hasAttr "marksmans ││ hipHunter" player then "marksmanship" ││ - else if builtins.hasAttr "balanceDr ││ uid" player then "balance" ││ - else if builtins.hasAttr "feralDrui ││ d" player then "feral" ││ - else if builtins.hasAttr "guardianD ││ ruid" player then "guardian" ││ - else if builtins.hasAttr "restorati ││ onDruid" player then "restoration" ││ - else if builtins.hasAttr "holyPalad ││ in" player then "holy" ││ - else if builtins.hasAttr "protectio ││ nPaladin" player then "protection" ││ - else if builtins.hasAttr "retributi ││ onPaladin" player then "retribution" ││ + specName = ││ + if builtins.hasAttr "elementalShama ││ n" player ││ + then "elemental" ││ + else if builtins.hasAttr "enhanceme ││ ntShaman" player ││ + then "enhancement" ││ + else if builtins.hasAttr "restorati ││ onShaman" player ││ + then "restoration" ││ + else if builtins.hasAttr "brewmaste ││ rMonk" player ││ + then "brewmaster" ││ + else if builtins.hasAttr "windwalke ││ rMonk" player ││ + then "windwalker" ││ + else if builtins.hasAttr "mistweave ││ rMonk" player ││ + then "mistweaver" ││ + else if builtins.hasAttr "survivalH ││ unter" player ││ + then "survival" ││ + else if builtins.hasAttr "beastMast ││ eryHunter" player ││ + then "beast_mastery" ││ + else if builtins.hasAttr "marksmans ││ hipHunter" player ││ + then "marksmanship" ││ + else if builtins.hasAttr "balanceDr ││ uid" player ││ + then "balance" ││ + else if builtins.hasAttr "feralDrui ││ d" player ││ + then "feral" ││ + else if builtins.hasAttr "guardianD ││ ruid" player ││ + then "guardian" ││ + else if builtins.hasAttr "restorati ││ onDruid" player ││ + then "restoration" ││ + else if builtins.hasAttr "holyPalad ││ in" player ││ + then "holy" ││ + else if builtins.hasAttr "protectio ││ nPaladin" player ││ + then "protection" ││ + else if builtins.hasAttr "retributi ││ onPaladin" player ││ + then "retribution" ││ else null; ││ in { ││ class = className; │└──────────────────────────────────────────────┘