jenkins-bot has submitted this change and it was merged.
Change subject: Split Family.obsolete into types of codes
......................................................................
Split Family.obsolete into types of codes
All family class line lengths < 80.
Bug: T72444
Change-Id: Ia71f80294a3f99aaa0bf49872e009d716023459f
---
M pywikibot/families/anarchopedia_family.py
M pywikibot/families/wikibooks_family.py
M pywikibot/families/wikinews_family.py
M pywikibot/families/wikipedia_family.py
M pywikibot/families/wikiquote_family.py
M pywikibot/families/wikisource_family.py
M pywikibot/families/wikiversity_family.py
M pywikibot/families/wikivoyage_family.py
M pywikibot/families/wiktionary_family.py
M pywikibot/family.py
M pywikibot/tools/__init__.py
M tests/family_tests.py
12 files changed, 468 insertions(+), 228 deletions(-)
Approvals:
XZise: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/families/anarchopedia_family.py
b/pywikibot/families/anarchopedia_family.py
index e6d31fd..1cbacb9 100644
--- a/pywikibot/families/anarchopedia_family.py
+++ b/pywikibot/families/anarchopedia_family.py
@@ -13,6 +13,51 @@
"""Family class for Anarchopedia wiki."""
+ interwiki_replacements = {
+ # ISO 639-2 -> ISO 639-1 mappings
+ 'ara': 'ar',
+ 'chi': 'zh',
+ 'dan': 'da',
+ 'deu': 'de',
+ 'dut': 'nl',
+ 'ell': 'el',
+ 'eng': 'en',
+ 'epo': 'eo',
+ 'fas': 'fa',
+ 'fin': 'fi',
+ 'fra': 'fr',
+ 'ger': 'de',
+ 'gre': 'el',
+ 'heb': 'he',
+ 'hye': 'hy',
+ 'ind': 'id',
+ 'ita': 'it',
+ 'jpn': 'ja',
+ 'kor': 'ko',
+ 'lav': 'lv',
+ 'lit': 'lt',
+ 'nno': 'no',
+ 'nob': 'no',
+ 'nor': 'no',
+ 'pol': 'pl',
+ 'por': 'pt',
+ 'rum': 'ro',
+ 'rus': 'ru',
+ 'spa': 'es',
+ 'srp': 'sr',
+ 'sqi': 'sq',
+ 'swe': 'sv',
+ 'tur': 'tr',
+ 'zho': 'zh',
+
+ # ISO 639-1 -> ISO 639-1 mappings
+ 'bs': 'hr',
+
+ # Non-compliant mappings
+ 'bos': 'hr',
+ 'nsh': 'hr',
+ }
+
def __init__(self):
"""Constructor."""
family.Family.__init__(self)
@@ -28,51 +73,6 @@
self.langs[l] = '%s.anarchopedia.org' % l
self.nocapitalize = list(self.langs.keys())
-
- self.obsolete = {
- # ISO 639-2 -> ISO 639-1 mappings
- 'ara': 'ar',
- 'chi': 'zh',
- 'dan': 'da',
- 'deu': 'de',
- 'dut': 'nl',
- 'ell': 'el',
- 'eng': 'en',
- 'epo': 'eo',
- 'fas': 'fa',
- 'fin': 'fi',
- 'fra': 'fr',
- 'ger': 'de',
- 'gre': 'el',
- 'heb': 'he',
- 'hye': 'hy',
- 'ind': 'id',
- 'ita': 'it',
- 'jpn': 'ja',
- 'kor': 'ko',
- 'lav': 'lv',
- 'lit': 'lt',
- 'nno': 'no',
- 'nob': 'no',
- 'nor': 'no',
- 'pol': 'pl',
- 'por': 'pt',
- 'rum': 'ro',
- 'rus': 'ru',
- 'spa': 'es',
- 'srp': 'sr',
- 'sqi': 'sq',
- 'swe': 'sv',
- 'tur': 'tr',
- 'zho': 'zh',
-
- # ISO 639-1 -> ISO 639-1 mappings
- 'bs': 'hr',
-
- # Non-compliant mappings
- 'bos': 'hr',
- 'nsh': 'hr',
- }
@deprecated('APISite.version()')
def version(self, code):
diff --git a/pywikibot/families/wikibooks_family.py
b/pywikibot/families/wikibooks_family.py
index 3183106..b4ed20d 100644
--- a/pywikibot/families/wikibooks_family.py
+++ b/pywikibot/families/wikibooks_family.py
@@ -12,6 +12,97 @@
"""Family class for Wikibooks."""
+ closed_wikis = [
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
+ 'aa',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
+ 'ak',
+ #
https://als.wikipedia.org/wiki/Wikipedia:Stammtisch/Archiv_2008-1#Afterward…
+ 'als',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
+ 'as',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
+ 'ast',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
+ 'ay',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
+ 'ba',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
+ 'bi',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
+ 'bm',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_T…
+ 'bo',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_C…
+ 'ch',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_C…
+ 'co',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_G…
+ 'ga',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_G…
+ 'got',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_G…
+ 'gn',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_G…
+ 'gu',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
+ 'kn',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
+ 'ks',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_L…
+ 'lb',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_L…
+ 'ln',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_L…
+ 'lv',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_M…
+ 'mi',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_M…
+ 'mn',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
+ 'my',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_N…
+ 'na',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_N…
+ 'nah',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_P…
+ 'nds',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_P…
+ 'ps',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Q…
+ 'qu',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_R…
+ 'rm',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_S…
+ 'se',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_S…
+ 'simple',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
+ 'su',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_S…
+ 'sw',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_T…
+ 'tk',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_U…
+ 'ug',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_V…
+ 'vo',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_W…
+ 'wa',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_X…
+ 'xh',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Y…
+ 'yo',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Z…
+ 'za',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Z…
+ 'zu',
+ ]
+
+ removed_wikis = [
+ 'tokipona',
+ ]
+
def __init__(self):
"""Constructor."""
super(Family, self).__init__()
@@ -31,7 +122,8 @@
self.langs = dict([(lang, '%s.wikibooks.org' % lang)
for lang in self.languages_by_size])
- # Global bot allowed languages on
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implement…
+ # Global bot allowed languages on
+ #
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implement…
self.cross_allowed = [
'af', 'ang', 'ca', 'fa', 'fy',
'it', 'nl', 'ru', 'th', 'zh',
]
@@ -50,58 +142,6 @@
'hu': ['en'],
'pl': self.alphabetic,
'simple': self.alphabetic
- }
-
- self.obsolete = {
- 'aa': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
- 'ak': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
- 'als': None, #
https://als.wikipedia.org/wiki/Special:PermaLink/603754#Closing_wt.2C_wb.2C…
- 'as': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
- 'ast': None,
- 'ay': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
- 'ba': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
- 'bi': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
- 'bm': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
- 'bo': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_T…
- 'ch': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_C…
- 'co': None, #
https://bugzilla.wikimedia.org/show_bug.cgi?id=28644
- 'dk': 'da',
- 'ga': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_G…
- 'got': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_G…
- 'gn': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_G…
- 'gu': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_G…
- 'jp': 'ja',
- 'kn': None, #
https://bugzilla.wikimedia.org/show_bug.cgi?id=20325
- 'ks': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
- 'lb': None, # noqa
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_L…
- 'ln': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_L…
- 'lv': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_L…
- 'mi': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_M…
- 'minnan': 'zh-min-nan',
- 'mn': None,
- 'my': None,
- 'na': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_N…
- 'nah': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_N…
- 'nb': 'no',
- 'nds': None, # noqa
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_P…
- 'ps': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_P…
- 'qu': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Q…
- 'rm': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_R…
- 'se': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_S…
- 'simple': None, # noqa
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_S…
- 'su': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
- 'sw': None, #
https://bugzilla.wikimedia.org/show_bug.cgi?id=25170
- 'tk': None,
- 'tokipona': None,
- 'ug': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_U…
- 'vo': None, #
https://bugzilla.wikimedia.org/show_bug.cgi?id=37413
- 'wa': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_W…
- 'xh': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_X…
- 'yo': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Y…
- 'za': None, #
https://bugzilla.wikimedia.org/show_bug.cgi?id=20325
- 'zh-tw': 'zh',
- 'zh-cn': 'zh',
- 'zu': None, #
https://bugzilla.wikimedia.org/show_bug.cgi?id=25425
}
def shared_data_repository(self, code, transcluded=False):
diff --git a/pywikibot/families/wikinews_family.py
b/pywikibot/families/wikinews_family.py
index 65aeb3b..b4e53e3 100644
--- a/pywikibot/families/wikinews_family.py
+++ b/pywikibot/families/wikinews_family.py
@@ -12,6 +12,17 @@
"""Family class for Wikinews."""
+ closed_wikis = [
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_H…
+ 'hu',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_D…
+ 'nl',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_S…
+ 'sd',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_T…
+ 'th',
+ ]
+
def __init__(self):
"""Constructor."""
super(Family, self).__init__()
@@ -26,7 +37,8 @@
self.langs = dict([(lang, '%s.wikinews.org' % lang)
for lang in self.languages_by_size])
- # Global bot allowed languages on
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implement…
+ # Global bot allowed languages on
+ #
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implement…
self.cross_allowed = ['ca', 'cs', 'en', 'fa',
'ko', ]
# Which languages have a special order for putting interlanguage links,
@@ -42,17 +54,6 @@
'he': ['en'],
'hu': ['en'],
'pl': self.alphabetic,
- }
-
- self.obsolete = {
- 'hu': None, #
https://bugzilla.wikimedia.org/show_bug.cgi?id=28342
- 'jp': 'ja',
- 'nb': 'no',
- 'nl': None, #
https://bugzilla.wikimedia.org/show_bug.cgi?id=20325
- 'sd': None,
- 'th': None, #
https://bugzilla.wikimedia.org/show_bug.cgi?id=28341
- 'zh-tw': 'zh',
- 'zh-cn': 'zh'
}
def shared_data_repository(self, code, transcluded=False):
diff --git a/pywikibot/families/wikipedia_family.py
b/pywikibot/families/wikipedia_family.py
index c37f4a6..17689a4 100644
--- a/pywikibot/families/wikipedia_family.py
+++ b/pywikibot/families/wikipedia_family.py
@@ -12,6 +12,40 @@
"""Family module for Wikipedia."""
+ closed_wikis = [
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
+ 'aa',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_C…
+ 'cho',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_H…
+ 'ho',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_H…
+ 'hz',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Y…
+ 'ii',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
+ 'kj',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
+ 'kr',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_M…
+ 'mh',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_M…
+ 'mo',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_M…
+ 'mus',
+ ]
+
+ removed_wikis = [
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_N…
+ 'ng',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_S…
+ 'ru-sib',
+ # Klingon, locked in 2005, and moved to
http://klingon.wikia.com/
+ 'tlh',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_T…
+ 'tokipona',
+ ]
+
def __init__(self):
"""Constructor."""
super(Family, self).__init__()
@@ -48,10 +82,11 @@
'dz', 'ik', 'tum', 'ch',
]
- langs = self.languages_by_size + ['test', 'test2'] # Sites we
want to edit but not count as real languages
+ # Sites we want to edit but not count as real languages
+ self.test_codes = ['test', 'test2']
- self.langs = dict([(lang, '%s.wikipedia.org' % lang)
- for lang in langs])
+ self.langs = dict((lang, '%s.wikipedia.org' % lang) for lang in
+ self.languages_by_size + self.test_codes)
self.category_redirect_templates = {
'_default': (),
@@ -320,31 +355,6 @@
'ur': ['ar', 'fa', 'en'] + self.alphabetic,
'vi': self.alphabetic_revised,
'yi': ['en', 'he', 'de']
- }
-
- self.obsolete = {
- 'aa': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
- 'cho': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_C…
- 'dk': 'da',
- 'ho': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_H…
- 'hz': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_H…
- 'ii': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Y…
- 'kj': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
- 'kr': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
- 'mh': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_M…
- 'minnan': 'zh-min-nan',
- 'mo': 'ro', #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_M…
- 'mus': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_M…
- 'nan': 'zh-min-nan',
- 'nl_nds': 'nl-nds', # miss-spelling
- 'nb': 'no',
- 'ng': None, # (not reachable)
https://meta.wikimedia.org/wiki/Inactive_wikis
- 'jp': 'ja',
- 'ru-sib': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_S…
- 'tlh': None,
- 'tokipona': None,
- 'zh-tw': 'zh',
- 'zh-cn': 'zh'
}
# Languages that used to be coded in iso-8859-1
diff --git a/pywikibot/families/wikiquote_family.py
b/pywikibot/families/wikiquote_family.py
index e7a5d76..4b01a91 100644
--- a/pywikibot/families/wikiquote_family.py
+++ b/pywikibot/families/wikiquote_family.py
@@ -12,6 +12,55 @@
"""Family class for Wikiquote."""
+ closed_wikis = [
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
+ 'als',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_O…
+ 'ang',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
+ 'ast',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
+ 'bm',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_C…
+ 'co',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_N…
+ 'cr',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_G…
+ 'ga',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
+ 'kk',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
+ 'kr',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
+ 'ks',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
+ 'kw',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_L…
+ 'lb',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_N…
+ 'na',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_L…
+ 'nds',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Q…
+ 'qu',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_S…
+ 'simple',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_T…
+ 'tk',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_T…
+ 'tt',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_O…
+ 'ug',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_V…
+ 'vo',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Z…
+ 'za',
+ ]
+
+ removed_wikis = [
+ 'tokipona',
+ ]
+
def __init__(self):
"""Constructor."""
super(Family, self).__init__()
@@ -30,7 +79,8 @@
self.langs = dict([(lang, '%s.wikiquote.org' % lang)
for lang in self.languages_by_size])
- # Global bot allowed languages on
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implement…
+ # Global bot allowed languages on
+ #
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implement…
self.cross_allowed = [
'af', 'am', 'ar', 'az', 'be',
'bg', 'br', 'bs', 'ca', 'cs', 'da',
'el', 'eo', 'es', 'et', 'eu',
'fa', 'fi', 'fr', 'gl', 'he', 'hi',
@@ -55,37 +105,6 @@
'pl': self.alphabetic,
'simple': self.alphabetic,
'pt': self.alphabetic,
- }
-
- self.obsolete = {
- 'als': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
- 'ang': None, #
https://bugzilla.wikimedia.org/show_bug.cgi?id=29150
- 'ast': None, #
https://bugzilla.wikimedia.org/show_bug.cgi?id=28964
- 'bm': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
- 'co': None,
- 'cr': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_N…
- 'dk': 'da',
- 'ga': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_G…
- 'jp': 'ja',
- 'kk': None, #
https://bugzilla.wikimedia.org/show_bug.cgi?id=20325
- 'kr': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
- 'ks': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
- 'kw': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
- 'lb': None,
- 'minnan': 'zh-min-nan',
- 'na': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_N…
- 'nb': 'no',
- 'nds': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_L…
- 'qu': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Q…
- 'simple': None, # noqa
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_S…
- 'tk': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_T…
- 'tokipona': None,
- 'tt': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_T…
- 'ug': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_O…
- 'vo': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_V…
- 'za': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Z…
- 'zh-tw': 'zh',
- 'zh-cn': 'zh'
}
def code2encodings(self, code):
diff --git a/pywikibot/families/wikisource_family.py
b/pywikibot/families/wikisource_family.py
index 3b8a9fa..6368fc1 100644
--- a/pywikibot/families/wikisource_family.py
+++ b/pywikibot/families/wikisource_family.py
@@ -12,6 +12,13 @@
"""Family class for Wikisource."""
+ closed_wikis = [
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_O…
+ 'ang',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_H…
+ 'ht',
+ ]
+
def __init__(self):
"""Constructor."""
super(Family, self).__init__()
@@ -32,7 +39,8 @@
# '-' is not a valid subdomain.
self.langs['-'] = 'wikisource.org'
- # Global bot allowed languages on
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implement…
+ # Global bot allowed languages on
+ #
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implement…
self.cross_allowed = [
'ca', 'el', 'fa', 'it', 'ko',
'no', 'pl', 'vi', 'zh',
]
@@ -51,17 +59,6 @@
'hu': ['en'],
'pl': self.alphabetic,
'simple': self.alphabetic
- }
-
- self.obsolete = {
- 'ang': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_O…
- 'dk': 'da',
- 'ht': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_H…
- 'jp': 'ja',
- 'minnan': 'zh-min-nan',
- 'nb': 'no',
- 'zh-tw': 'zh',
- 'zh-cn': 'zh'
}
self.authornamespaces = {
diff --git a/pywikibot/families/wikiversity_family.py
b/pywikibot/families/wikiversity_family.py
index 3002613..6fd5f2e 100644
--- a/pywikibot/families/wikiversity_family.py
+++ b/pywikibot/families/wikiversity_family.py
@@ -25,5 +25,6 @@
self.langs = dict([(lang, '%s.wikiversity.org' % lang)
for lang in self.languages_by_size])
- # Global bot allowed languages on
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implement…
+ # Global bot allowed languages on
+ #
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implement…
self.cross_allowed = ['ja', ]
diff --git a/pywikibot/families/wikivoyage_family.py
b/pywikibot/families/wikivoyage_family.py
index 323247c..fbe638e 100644
--- a/pywikibot/families/wikivoyage_family.py
+++ b/pywikibot/families/wikivoyage_family.py
@@ -24,7 +24,8 @@
self.langs = dict([(lang, '%s.wikivoyage.org' % lang)
for lang in self.languages_by_size])
- # Global bot allowed languages on
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implement…
+ # Global bot allowed languages on
+ #
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implement…
self.cross_allowed = ['es', 'ru', ]
def shared_data_repository(self, code, transcluded=False):
diff --git a/pywikibot/families/wiktionary_family.py
b/pywikibot/families/wiktionary_family.py
index 4e84155..61e4c15 100644
--- a/pywikibot/families/wiktionary_family.py
+++ b/pywikibot/families/wiktionary_family.py
@@ -12,6 +12,69 @@
"""Family class for Wiktionary."""
+ closed_wikis = [
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
+ 'aa',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
+ 'ab',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
+ 'ak',
+ #
https://als.wikipedia.org/wiki/Wikipedia:Stammtisch/Archiv_2008-1#Afterward…
+ 'als',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
+ 'as',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
+ 'av',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
+ 'ba',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
+ 'bh',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
+ 'bi',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
+ 'bm',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_T…
+ 'bo',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_C…
+ 'ch',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_N…
+ 'cr',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_D…
+ 'dz',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_I…
+ 'ik',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_M…
+ 'mh',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_M…
+ 'mo',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_P…
+ 'pi',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_R…
+ 'rm',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
+ 'rn',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_S…
+ 'sc',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_S…
+ 'sn',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_T…
+ 'to',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
+ 'tlh',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_T…
+ 'tw',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_X…
+ 'xh',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Y…
+ 'yo',
+ #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Z…
+ 'za',
+ ]
+
+ removed_wikis = [
+ 'tokipona',
+ ]
+
def __init__(self):
"""Constructor."""
super(Family, self).__init__()
@@ -92,44 +155,6 @@
'pl': self.alphabetic_revised,
'sv': self.alphabetic_sv,
'simple': self.alphabetic,
- }
-
- self.obsolete = {
- 'aa': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
- 'ab': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
- 'ak': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
- 'als': None, #
https://als.wikipedia.org/wiki/Special:PermaLink/603754#Closing_wt.2C_wb.2C…
- 'as': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
- 'av': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_A…
- 'ba': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
- 'bh': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
- 'bi': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
- 'bm': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_B…
- 'bo': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_T…
- 'ch': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_C…
- 'cr': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_N…
- 'dk': 'da',
- 'dz': None,
- 'ik': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_I…
- 'jp': 'ja',
- 'mh': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_M…
- 'mo': 'ro', #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_M…
- 'minnan': 'zh-min-nan',
- 'nb': 'no',
- 'pi': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_P…
- 'rm': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_R…
- 'rn': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
- 'sc': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_S…
- 'sn': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_S…
- 'to': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_T…
- 'tlh': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_K…
- 'tw': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_T…
- 'tokipona': None,
- 'xh': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_X…
- 'yo': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Y…
- 'za': None, #
https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_Z…
- 'zh-tw': 'zh',
- 'zh-cn': 'zh'
}
self.interwiki_on_one_line = ['pl']
diff --git a/pywikibot/family.py b/pywikibot/family.py
index e7f97e4..b978cc6 100644
--- a/pywikibot/family.py
+++ b/pywikibot/family.py
@@ -28,7 +28,10 @@
import pywikibot
from pywikibot import config2 as config
-from pywikibot.tools import deprecated, deprecate_arg, issue_deprecation_warning
+from pywikibot.tools import (
+ deprecated, deprecate_arg, issue_deprecation_warning,
+ FrozenDict,
+)
from pywikibot.exceptions import UnknownFamily, FamilyMaintenanceWarning
logger = logging.getLogger("pywiki.wiki.family")
@@ -761,9 +764,14 @@
# Which language codes no longer exist and by which language code
# should they be replaced. If for example the language with code xx:
- # now should get code yy:, add {'xx':'yy'} to obsolete. If all
- # links to language xx: should be removed, add {'xx': None}.
- self.obsolete = {}
+ # now should get code yy:, add {'xx':'yy'} to obsolete.
+ if not hasattr(self, 'interwiki_replacements'):
+ self.interwiki_replacements = {}
+
+ # Codes that should be removed, usually because the site has been
+ # taken down.
+ if not hasattr(self, 'interwiki_removals'):
+ self.interwiki_removals = []
# Language codes of the largest wikis. They should be roughly sorted
# by size.
@@ -1372,10 +1380,75 @@
"""
return putText
+ @property
+ def obsolete(self):
+ """
+ Old codes that are not part of the family.
+
+ Interwiki replacements override removals for the same code.
+
+ @return: mapping of old codes to new codes (or None)
+ @rtype: dict
+ """
+ data = dict((code, None)
+ for code in self.interwiki_removals)
+ data.update(self.interwiki_replacements)
+ return FrozenDict(data,
+ 'Family.obsolete not updatable; '
+ 'use Family.interwiki_removals '
+ 'and Family.interwiki_replacements')
+
+ @obsolete.setter
+ def obsolete(self, data):
+ """Split obsolete dict into constituent parts."""
+ self.interwiki_removals[:] = [old for (old, new) in data.items()
+ if new is None]
+ self.interwiki_replacements.clear()
+ self.interwiki_replacements.update((old, new)
+ for (old, new) in data.items()
+ if new is not None)
+
class WikimediaFamily(Family):
- """#Class for all wikimedia families."""
+ """Class for all wikimedia families."""
+
+ # Code mappings which are only an alias, and there is no 'old' wiki.
+ # For all except 'nl_nds', subdomains do exist as a redirect, but that
+ # should not be relied upon.
+ code_aliases = {
+ # Country aliases; see T87002
+ 'dk': 'da', # Wikipedia, Wikibooks and Wiktionary only.
+ 'jp': 'ja',
+
+ # Language aliases
+ 'nb': 'no', # T86924
+
+ # Incomplete language code change. T86915
+ 'minnan': 'zh-min-nan',
+ 'nan': 'zh-min-nan',
+
+ # These two probably only apply to Wikipedia.
+ # Server not found for the other projects.
+ 'zh-tw': 'zh',
+ 'zh-cn': 'zh',
+
+ # miss-spelling
+ 'nl_nds': 'nl-nds',
+ }
+
+ # Not open for edits; stewards can still edit.
+ closed_wikis = []
+ # Completely removed
+ removed_wikis = []
+
+ # Mappings which should be in effect, even for
+ # closed/removed wikis
+ interwiki_replacement_overrides = {
+ # Moldovan projects are closed, however
+ # Romanian was to be the replacement.
+ 'mo': 'ro',
+ }
def __init__(self):
super(WikimediaFamily, self).__init__()
@@ -1389,6 +1462,16 @@
'wikisource', 'wikiversity', 'wiktionary',
]
+ @property
+ def interwiki_removals(self):
+ return frozenset(self.removed_wikis + self.closed_wikis)
+
+ @property
+ def interwiki_replacements(self):
+ rv = self.code_aliases.copy()
+ rv.update(self.interwiki_replacement_overrides)
+ return FrozenDict(rv)
+
def shared_image_repository(self, code):
return ('commons', 'commons')
diff --git a/pywikibot/tools/__init__.py b/pywikibot/tools/__init__.py
index 53513ac..a7177ec 100644
--- a/pywikibot/tools/__init__.py
+++ b/pywikibot/tools/__init__.py
@@ -170,6 +170,37 @@
return repr(self.__dict__)
+class FrozenDict(dict):
+
+ """
+ Frozen dict, preventing write after initialisation.
+
+ Raises TypeError if write attempted.
+ """
+
+ def __init__(self, data=None, error=None):
+ """
+ Constructor.
+
+ @param data: mapping to freeze
+ @type data: mapping
+ @param error: error message
+ @type error: basestring
+ """
+ if data:
+ args = [data]
+ else:
+ args = []
+ super(FrozenDict, self).__init__(*args)
+ self._error = error or 'FrozenDict: not writable'
+
+ def update(self, *args, **kwargs):
+ """Prevent updates."""
+ raise TypeError(self._error)
+
+ __setitem__ = update
+
+
def concat_options(message, line_length, options):
"""Concatenate options."""
indent = len(message) + 2
diff --git a/tests/family_tests.py b/tests/family_tests.py
index 19c447d..6fe8823 100644
--- a/tests/family_tests.py
+++ b/tests/family_tests.py
@@ -80,7 +80,7 @@
other = 'unknown'
self.assertRaises(UnknownFamily, family.__eq__, other)
- def test_obsolete(self):
+ def test_get_obsolete_wp(self):
"""Test three types of obsolete codes."""
family = Family.load('wikipedia')
self.assertIsInstance(family.obsolete, dict)
@@ -91,6 +91,38 @@
# offline site (see site tests test_removed_site)
self.assertEqual(family.obsolete['ru-sib'], None)
+ def test_get_obsolete_test(self):
+ """Test WikimediaFamily default obsolete."""
+ family = Family.load('test')
+ self.assertIn('dk', family.obsolete)
+ self.assertIn('dk', family.interwiki_replacements)
+ self.assertEqual(family.obsolete, family.interwiki_replacements)
+ self.assertEqual(family.interwiki_removals, set())
+
+ def test_set_obsolete(self):
+ """Test obsolete can be set."""
+ family = Family()
+ self.assertEqual(family.obsolete, {})
+ self.assertEqual(family.interwiki_replacements, {})
+ self.assertEqual(family.interwiki_removals, [])
+
+ family.obsolete = {'a': 'b', 'c': None}
+ self.assertEqual(family.obsolete, {'a': 'b', 'c': None})
+ self.assertEqual(family.interwiki_replacements, {'a': 'b'})
+ self.assertEqual(family.interwiki_removals, ['c'])
+
+ def test_obsolete_readonly(self):
+ """Test obsolete result not updatable."""
+ family = Family.load('test')
+ self.assertRaises(TypeError, family.obsolete.update, {})
+ self.assertRaises(TypeError, family.obsolete.__setitem__, 'a',
'b')
+
+ def test_WikimediaFamily_obsolete_readonly(self):
+ """Test WikimediaFamily obsolete is readonly."""
+ family = Family.load('test')
+ self.assertRaises(TypeError, family.__setattr__, 'obsolete',
+ {'a': 'b', 'c': None})
+
class TestFamilyUrlRegex(TestCase):
--
To view, visit
https://gerrit.wikimedia.org/r/187358
To unsubscribe, visit
https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ia71f80294a3f99aaa0bf49872e009d716023459f
Gerrit-PatchSet: 9
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: John Vandenberg <jayvdb(a)gmail.com>
Gerrit-Reviewer: Ladsgroup <ladsgroup(a)gmail.com>
Gerrit-Reviewer: Merlijn van Deen <valhallasw(a)arctus.nl>
Gerrit-Reviewer: Nemo bis <federicoleva(a)tiscali.it>
Gerrit-Reviewer: XZise <CommodoreFabianus(a)gmx.de>
Gerrit-Reviewer: Xqt <info(a)gno.de>
Gerrit-Reviewer: jenkins-bot <>