#!/usr/bin/env python import copy region_names = { 'mena': 'Middle East and Africa', 'sa': 'South Asia', 'eseap': 'East, Southeast Asia, and Pacific', 'latam': 'LATAM and The Caribbean', 'na': 'United States and Canada', 'nwe': 'Northern and Western Europe', 'cee': 'CEE and Central Asia', } language_names = { 'en': 'English', 'sv': 'Swedish', 'it': 'Italian', 'fr': 'French', 'nl': 'Dutch', 'ja': 'Japanese', } wiki_regions = { 'sv': 'nwe', 'it': 'nwe', 'fr': 'nwe', 'nl': 'nwe', 'ja': 'eseap', } origin_pattern = { 'beta': 'https://{wiki}.{m}wikipedia.beta.wmflabs.org', 'test': 'https://test.{m}wikipedia.org', 'prod': 'https://{wiki}.{m}wikipedia.org', } campaign_pattern = 'typage-{region}-{wiki}-2023' class Url(object): def __init__(self, wiki, lang): self.wiki = wiki self.lang = lang def site_prop(site): @property def prop(self): clone = copy.deepcopy(self) clone.site = site return clone return prop def device_prop(device): @property def prop(self): origin = origin_pattern[self.site].format(wiki=self.wiki, m=('m.' if device == 'mobile' else '')) campaign = campaign_pattern.format(region=wiki_regions[self.wiki], wiki=self.wiki) return f'{origin}/w/index.php?title=Special:CreateAccount&campaign={campaign}&uselang={self.lang}' return prop beta = site_prop('beta') test = site_prop('test') prod = site_prop('prod') m = device_prop('mobile') d = device_prop('desktop') i = 0 table = '|#| Region | Language | wiki project | campaign URL pattern | Beta URL | Test URL | Prod URL |\n' table_row_pattern = '|{i}| {region} | {language} | {wiki} | {campaign} | [[{url.beta.d}|desktop]], [[{url.beta.m}|mobile]] | [[{url.test.d}|desktop]], [[{url.test.m}|mobile]] | [[{url.prod.d}|desktop]], [[{url.prod.m}|mobile]]\n' for wiki in ['sv', 'it', 'fr', 'nl', 'ja']: for lang in [wiki, 'en']: i = i + 1 url = Url(wiki, lang) campaign = campaign_pattern.format(region=wiki_regions[wiki], wiki=wiki) table += table_row_pattern.format(i=i, region=region_names[wiki_regions[wiki]], language=language_names[lang], wiki=(wiki + 'wiki'), campaign=campaign, url=url) print(table)