John Vandenberg has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/210275

Change subject: Access closed wikis
......................................................................

Access closed wikis

Bug: T74674
Change-Id: I6207b18b8225f7ddc1349dffe321d93a8bf25b00
---
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/wiktionary_family.py
M pywikibot/family.py
M pywikibot/site.py
8 files changed, 46 insertions(+), 28 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/pywikibot/core 
refs/changes/75/210275/1

diff --git a/pywikibot/families/wikibooks_family.py 
b/pywikibot/families/wikibooks_family.py
index b4ed20d..639040a 100644
--- a/pywikibot/families/wikibooks_family.py
+++ b/pywikibot/families/wikibooks_family.py
@@ -119,8 +119,9 @@
             'zh-min-nan', 'ku', 'uz',
         ]
 
-        self.langs = dict([(lang, '%s.wikibooks.org' % lang)
-                           for lang in self.languages_by_size])
+        self.langs = dict(
+            (lang, '%s.wikibooks.org' % lang)
+            for lang in self.languages_by_size + self.closed_wikis)
 
         # Global bot allowed languages on
         # 
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implementation
diff --git a/pywikibot/families/wikinews_family.py 
b/pywikibot/families/wikinews_family.py
index b4e53e3..f18e185 100644
--- a/pywikibot/families/wikinews_family.py
+++ b/pywikibot/families/wikinews_family.py
@@ -34,8 +34,9 @@
             'he', 'bg', 'sq', 'no', 'ko', 'eo', 'bs',
         ]
 
-        self.langs = dict([(lang, '%s.wikinews.org' % lang)
-                           for lang in self.languages_by_size])
+        self.langs = dict(
+            (lang, '%s.wikinews.org' % lang)
+            for lang in self.languages_by_size + self.closed_wikis)
 
         # Global bot allowed languages on
         # 
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implementation
diff --git a/pywikibot/families/wikipedia_family.py 
b/pywikibot/families/wikipedia_family.py
index 17689a4..77d8161 100644
--- a/pywikibot/families/wikipedia_family.py
+++ b/pywikibot/families/wikipedia_family.py
@@ -85,8 +85,9 @@
         # 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
-                          self.languages_by_size + self.test_codes)
+        self.langs = dict(
+            (lang, '%s.wikipedia.org' % lang)
+            for lang in self.languages_by_size + self.test_codes)
 
         self.category_redirect_templates = {
             '_default': (),
diff --git a/pywikibot/families/wikiquote_family.py 
b/pywikibot/families/wikiquote_family.py
index 4b01a91..62b21d3 100644
--- a/pywikibot/families/wikiquote_family.py
+++ b/pywikibot/families/wikiquote_family.py
@@ -76,8 +76,9 @@
             'wo', 'ky', 'am',
         ]
 
-        self.langs = dict([(lang, '%s.wikiquote.org' % lang)
-                           for lang in self.languages_by_size])
+        self.langs = dict(
+            (lang, '%s.wikiquote.org' % lang)
+            for lang in self.languages_by_size + self.closed_wikis)
 
         # Global bot allowed languages on
         # 
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implementation
diff --git a/pywikibot/families/wikisource_family.py 
b/pywikibot/families/wikisource_family.py
index 6368fc1..38b9d4a 100644
--- a/pywikibot/families/wikisource_family.py
+++ b/pywikibot/families/wikisource_family.py
@@ -33,8 +33,10 @@
             'kn', 'gl', 'lt', 'cy', 'sk', 'zh-min-nan', 'fo', 'or',
         ]
 
-        self.langs = dict([(lang, '%s.wikisource.org' % lang)
-                           for lang in self.languages_by_size])
+        self.langs = dict(
+            (lang, '%s.wikisource.org' % lang)
+            for lang in self.languages_by_size + self.closed_wikis)
+
         # FIXME: '-' is invalid at the beginning of a hostname, and
         # '-' is not a valid subdomain.
         self.langs['-'] = 'wikisource.org'
diff --git a/pywikibot/families/wiktionary_family.py 
b/pywikibot/families/wiktionary_family.py
index 61e4c15..e7caa54 100644
--- a/pywikibot/families/wiktionary_family.py
+++ b/pywikibot/families/wiktionary_family.py
@@ -97,8 +97,9 @@
             'ti', 'sg', 'tn', 'dv', 'ts', 'ha', 'ks', 'ay',
         ]
 
-        self.langs = dict([(lang, '%s.wiktionary.org' % lang)
-                           for lang in self.languages_by_size])
+        self.langs = dict(
+            (lang, '%s.wiktionary.org' % lang)
+            for lang in self.languages_by_size + self.closed_wikis)
 
         # Global bot allowed languages on
         # 
https://meta.wikimedia.org/wiki/Bot_policy/Implementation#Current_implementation
diff --git a/pywikibot/family.py b/pywikibot/family.py
index b978cc6..4f712a3 100644
--- a/pywikibot/family.py
+++ b/pywikibot/family.py
@@ -45,6 +45,10 @@
 
     """Parent class for all wiki families."""
 
+    # Code mappings which are only an alias, and should be accepted as valid
+    # codes in the Site constructor.
+    code_aliases = {}
+
     def __init__(self):
         if not hasattr(self, 'name'):
             self.name = None
diff --git a/pywikibot/site.py b/pywikibot/site.py
index eae3500..bdb64ea 100644
--- a/pywikibot/site.py
+++ b/pywikibot/site.py
@@ -523,20 +523,19 @@
         else:
             self.__family = fam
 
-        self.obsolete = False
         # if we got an outdated language code, use the new one instead.
-        if self.__code in self.__family.obsolete:
-            if self.__family.obsolete[self.__code] is not None:
-                self.__code = self.__family.obsolete[self.__code]
-                # Note the Site function in __init__ emits a UserWarning
-                # for this condition, showing the callers file and line no.
-                pywikibot.log(u'Site %s instantiated using code %s'
-                              % (self, code))
-            else:
-                # no such language anymore
-                self.obsolete = True
-                pywikibot.log(u'Site %s instantiated and marked "obsolete" '
-                              u'to prevent access' % self)
+        if self.__code in self.__family.interwiki_replacements:
+            self.__code = self.__family.interwiki_replacements[self.__code]
+            # Note the Site function in __init__ emits a UserWarning
+            # for this condition, showing the callers file and line no.
+            pywikibot.log('Site %s instantiated using old interwiki code %s'
+                          % (self, code))
+        elif self.__code in self.__family.code_aliases:
+            self.__code = self.__family.code_aliases[self.__code]
+            # Note the Site function in __init__ emits a UserWarning
+            # for this condition, showing the callers file and line no.
+            pywikibot.log('Site %s instantiated using aliases code %s'
+                          % (self, code))
         elif self.__code not in self.languages():
             if self.__family.name in list(self.__family.langs.keys()) and \
                len(self.__family.langs) == 1:
@@ -547,6 +546,9 @@
                     warn(u'Global configuration variable "mylang" changed to '
                          u'"%s" while instantiating site %s'
                          % (self.__code, self), UserWarning)
+            elif self.__code in self.__family.interwiki_removals:
+                pywikibot.log('Site %s instantiated for old interwiki code '
+                              'which does not have an API endpoint' % self)
             else:
                 raise UnknownSite(u"Language '%s' does not exist in family %s"
                                   % (self.__code, self.__family.name))
@@ -559,6 +561,11 @@
         # following are for use with lock_page and unlock_page methods
         self._pagemutex = threading.Lock()
         self._locked_pages = []
+
+    @property
+    @deprecated('family.interwiki_replacements or family.interwiki_remocals')
+    def obsolete(self):
+        return self.code in self.family.obsolete.keys()
 
     @property
     @deprecated("APISite.siteinfo['case'] or Namespace.case == 
'case-sensitive'")
@@ -1063,9 +1070,9 @@
     """
     def decorator(fn):
         def callee(self, *args, **kwargs):
-            if self.obsolete:
-                raise UnknownSite("Language %s in family %s is obsolete"
-                                  % (self.code, self.family.name))
+            if self.code not in self.family.langs:
+                raise UnknownSite("%s does not have an API endpoint"
+                                  % (self))
             grp = kwargs.pop('as_group', group)
             if grp == 'user':
                 self.login(False)

-- 
To view, visit https://gerrit.wikimedia.org/r/210275
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6207b18b8225f7ddc1349dffe321d93a8bf25b00
Gerrit-PatchSet: 1
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: John Vandenberg <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to