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