HASH 0152effce98c
DATE 2025-08-08
SUBJECT web: enable eu realms, merge old records in
FILES 2 CHANGED
HASH 0152effce98c
DATE 2025-08-08
SUBJECT web: enable eu realms, merge old
records in
FILES 2 CHANGED
┌─ nix/api/realm.nix ────────────────────────────────────────────────────────┐
│ diff --git a/nix/api/realm.nix b/nix/api/realm.nix │
│ index 6ae59c9..804bcb4 100644 │
│ --- a/nix/api/realm.nix │
│ +++ b/nix/api/realm.nix │
│ @@ -28,32 +28,32 @@ in { │
│ angerforge = mkRealm 4795 "us" "Andgerforge"; │
│ eranikus = mkRealm 4800 "us" "Eranikus"; │
│ │
│ - # EU Realms - TEMPORARILY DISABLED due to Blizzard API issues │
│ - # everlook = mkRealm 4440 "eu" "Everlook"; │
│ - # auberdine = mkRealm 4441 "eu" "Auberdine"; │
│ - # lakeshire = mkRealm 4442 "eu" "Lakeshire"; │
│ - # chromie = mkRealm 4452 "eu" "Chromie"; │
│ - # pyrewoodVillage = mkRealm 4453 "eu" "Pyrewood Village"; │
│ - # mirageRaceway = mkRealm 4454 "eu" "Mirage Raceway"; │
│ - # razorfen = mkRealm 4455 "eu" "Razorfen"; │
│ - # nethergardeKeep = mkRealm 4456 "eu" "Nethergarde Keep"; │
│ - # sulfuron = mkRealm 4464 "eu" "Sulfuron"; │
│ - # golemagg = mkRealm 4465 "eu" "Golemagg"; │
│ - # patchwerk = mkRealm 4466 "eu" "Patchwerk"; │
│ - # firemaw = mkRealm 4467 "eu" "Firemaw"; │
│ - # flamegor = mkRealm 4474 "eu" "Flamegor"; │
│ - # gehennas = mkRealm 4476 "eu" "Gehennas"; │
│ - # venoxis = mkRealm 4477 "eu" "Venoxis"; │
│ - # hydraxianWaterlords = mkRealm 4678 "eu" "Hydraxian Waterlords"; │
│ - # mograine = mkRealm 4701 "eu" "Mograine"; │
│ - # amnennar = mkRealm 4703 "eu" "Amnennar"; │
│ - # ashbringer = mkRealm 4742 "eu" "Ashbringer"; │
│ - # transcendence = mkRealm 4745 "eu" "Transcendence"; │
│ - # earthshaker = mkRealm 4749 "eu" "Earthshaker"; │
│ - # giantstalker = mkRealm 4811 "eu" "Giantstalker"; │
│ - # mandokir = mkRealm 4813 "eu" "Mandokir"; │
│ - # thekal = mkRealm 4815 "eu" "Thekal"; │
│ - # jindo = mkRealm 4816 "eu" "Jin'do"; │
│ + # EU Realms - Smart merging enabled to preserve historical data │
│ + everlook = mkRealm 4440 "eu" "Everlook"; │
│ + auberdine = mkRealm 4441 "eu" "Auberdine"; │
│ + lakeshire = mkRealm 4442 "eu" "Lakeshire"; │
│ + chromie = mkRealm 4452 "eu" "Chromie"; │
│ + pyrewoodVillage = mkRealm 4453 "eu" "Pyrewood Village"; │
│ + mirageRaceway = mkRealm 4454 "eu" "Mirage Raceway"; │
│ + razorfen = mkRealm 4455 "eu" "Razorfen"; │
│ + nethergardeKeep = mkRealm 4456 "eu" "Nethergarde Keep"; │
│ + sulfuron = mkRealm 4464 "eu" "Sulfuron"; │
│ + golemagg = mkRealm 4465 "eu" "Golemagg"; │
│ + patchwerk = mkRealm 4466 "eu" "Patchwerk"; │
│ + firemaw = mkRealm 4467 "eu" "Firemaw"; │
│ + flamegor = mkRealm 4474 "eu" "Flamegor"; │
│ + gehennas = mkRealm 4476 "eu" "Gehennas"; │
│ + venoxis = mkRealm 4477 "eu" "Venoxis"; │
│ + hydraxianWaterlords = mkRealm 4678 "eu" "Hydraxian Waterlords"; │
│ + mograine = mkRealm 4701 "eu" "Mograine"; │
│ + amnennar = mkRealm 4703 "eu" "Amnennar"; │
│ + ashbringer = mkRealm 4742 "eu" "Ashbringer"; │
│ + transcendence = mkRealm 4745 "eu" "Transcendence"; │
│ + earthshaker = mkRealm 4749 "eu" "Earthshaker"; │
│ + giantstalker = mkRealm 4811 "eu" "Giantstalker"; │
│ + mandokir = mkRealm 4813 "eu" "Mandokir"; │
│ + thekal = mkRealm 4815 "eu" "Thekal"; │
│ + jindo = mkRealm 4816 "eu" "Jin'do"; │
│ │
│ # kr │
│ shimmeringFlats = mkRealm 4417 "kr" "Shimmering Flats"; │
└────────────────────────────────────────────────────────────────────────────────────┘
┌─ nix/api/realm.nix ──────────────────┐
│ diff --git a/nix/api/realm.nix b/nix/api/rea │
│ lm.nix │
│ index 6ae59c9..804bcb4 100644 │
│ --- a/nix/api/realm.nix │
│ +++ b/nix/api/realm.nix │
│ @@ -28,32 +28,32 @@ in { │
│ angerforge = mkRealm 4795 "us" "Andgerfor │
│ ge"; │
│ eranikus = mkRealm 4800 "us" "Eranikus"; │
│ │
│ - # EU Realms - TEMPORARILY DISABLED due to │
│ Blizzard API issues │
│ - # everlook = mkRealm 4440 "eu" "Everlook" │
│ ; │
│ - # auberdine = mkRealm 4441 "eu" "Auberdin │
│ e"; │
│ - # lakeshire = mkRealm 4442 "eu" "Lakeshir │
│ e"; │
│ - # chromie = mkRealm 4452 "eu" "Chromie"; │
│ - # pyrewoodVillage = mkRealm 4453 "eu" "Py │
│ rewood Village"; │
│ - # mirageRaceway = mkRealm 4454 "eu" "Mira │
│ ge Raceway"; │
│ - # razorfen = mkRealm 4455 "eu" "Razorfen" │
│ ; │
│ - # nethergardeKeep = mkRealm 4456 "eu" "Ne │
│ thergarde Keep"; │
│ - # sulfuron = mkRealm 4464 "eu" "Sulfuron" │
│ ; │
│ - # golemagg = mkRealm 4465 "eu" "Golemagg" │
│ ; │
│ - # patchwerk = mkRealm 4466 "eu" "Patchwer │
│ k"; │
│ - # firemaw = mkRealm 4467 "eu" "Firemaw"; │
│ - # flamegor = mkRealm 4474 "eu" "Flamegor" │
│ ; │
│ - # gehennas = mkRealm 4476 "eu" "Gehennas" │
│ ; │
│ - # venoxis = mkRealm 4477 "eu" "Venoxis"; │
│ - # hydraxianWaterlords = mkRealm 4678 "eu" │
│ "Hydraxian Waterlords"; │
│ - # mograine = mkRealm 4701 "eu" "Mograine" │
│ ; │
│ - # amnennar = mkRealm 4703 "eu" "Amnennar" │
│ ; │
│ - # ashbringer = mkRealm 4742 "eu" "Ashbrin │
│ ger"; │
│ - # transcendence = mkRealm 4745 "eu" "Tran │
│ scendence"; │
│ - # earthshaker = mkRealm 4749 "eu" "Earths │
│ haker"; │
│ - # giantstalker = mkRealm 4811 "eu" "Giant │
│ stalker"; │
│ - # mandokir = mkRealm 4813 "eu" "Mandokir" │
│ ; │
│ - # thekal = mkRealm 4815 "eu" "Thekal"; │
│ - # jindo = mkRealm 4816 "eu" "Jin'do"; │
│ + # EU Realms - Smart merging enabled to pr │
│ eserve historical data │
│ + everlook = mkRealm 4440 "eu" "Everlook"; │
│ + auberdine = mkRealm 4441 "eu" "Auberdine" │
│ ; │
│ + lakeshire = mkRealm 4442 "eu" "Lakeshire" │
│ ; │
│ + chromie = mkRealm 4452 "eu" "Chromie"; │
│ + pyrewoodVillage = mkRealm 4453 "eu" "Pyre │
│ wood Village"; │
│ + mirageRaceway = mkRealm 4454 "eu" "Mirage │
│ Raceway"; │
│ + razorfen = mkRealm 4455 "eu" "Razorfen"; │
│ + nethergardeKeep = mkRealm 4456 "eu" "Neth │
│ ergarde Keep"; │
│ + sulfuron = mkRealm 4464 "eu" "Sulfuron"; │
│ + golemagg = mkRealm 4465 "eu" "Golemagg"; │
│ + patchwerk = mkRealm 4466 "eu" "Patchwerk" │
│ ; │
│ + firemaw = mkRealm 4467 "eu" "Firemaw"; │
│ + flamegor = mkRealm 4474 "eu" "Flamegor"; │
│ + gehennas = mkRealm 4476 "eu" "Gehennas"; │
│ + venoxis = mkRealm 4477 "eu" "Venoxis"; │
│ + hydraxianWaterlords = mkRealm 4678 "eu" " │
│ Hydraxian Waterlords"; │
│ + mograine = mkRealm 4701 "eu" "Mograine"; │
│ + amnennar = mkRealm 4703 "eu" "Amnennar"; │
│ + ashbringer = mkRealm 4742 "eu" "Ashbringe │
│ r"; │
│ + transcendence = mkRealm 4745 "eu" "Transc │
│ endence"; │
│ + earthshaker = mkRealm 4749 "eu" "Earthsha │
│ ker"; │
│ + giantstalker = mkRealm 4811 "eu" "Giantst │
│ alker"; │
│ + mandokir = mkRealm 4813 "eu" "Mandokir"; │
│ + thekal = mkRealm 4815 "eu" "Thekal"; │
│ + jindo = mkRealm 4816 "eu" "Jin'do"; │
│ │
│ # kr │
│ shimmeringFlats = mkRealm 4417 "kr" "Shim │
│ mering Flats"; │
└──────────────────────────────────────────────┘
┌─ nix/apps/challenge-mode-leaderboard.nix ──────────────────────────────────┐
│ diff --git a/nix/apps/challenge-mode-leaderboard.nix b/nix/apps/challenge-mode-lea │
│ derboard.nix │
│ index 659719c..7c3fa63 100644 │
│ --- a/nix/apps/challenge-mode-leaderboard.nix │
│ +++ b/nix/apps/challenge-mode-leaderboard.nix │
│ @@ -101,6 +101,35 @@ │
│ return None │
│ │
│ │
│ + def merge_leaderboard_data(existing_path, new_data): │
│ + """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 │
│ + │
│ + │
│ def main(): │
│ if not API_TOKEN: │
│ print( │
│ @@ -142,8 +171,15 @@ │
│ 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(leaderboard, f, indent=2) │
│ + json.dump(final_data, f, indent=2) │
│ │
│ print("\nDone.") │
│ │
└────────────────────────────────────────────────────────────────────────────────────┘
┌─ ...hallenge-mode-leaderboard.nix ───┐
│ diff --git a/nix/apps/challenge-mode-leaderb │
│ oard.nix b/nix/apps/challenge-mode-leaderboa │
│ rd.nix │
│ index 659719c..7c3fa63 100644 │
│ --- a/nix/apps/challenge-mode-leaderboard.ni │
│ x │
│ +++ b/nix/apps/challenge-mode-leaderboard.ni │
│ x │
│ @@ -101,6 +101,35 @@ │
│ return None │
│ │
│ │
│ + def merge_leaderboard_data(existing_p │
│ ath, new_data): │
│ + """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 │
│ + │
│ + │
│ def main(): │
│ if not API_TOKEN: │
│ print( │
│ @@ -142,8 +171,15 @@ │
│ 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(leaderboard │
│ , f, indent=2) │
│ + json.dump(final_data, │
│ f, indent=2) │
│ │
│ print("\nDone.") │
│ │
└──────────────────────────────────────────────┘
[ BACK TO LOG ]
──────────────────────────────────────────────────────────────────────────────────────
OOKNET
────────────────────────────────────────────────
OOKNET