[Pywikipedia-svn] SVN: [7296] trunk/pywikipedia
siebrand at svn.wikimedia.org
siebrand at svn.wikimedia.org
Thu Sep 24 23:28:58 UTC 2009
Revision: 7296
Author: siebrand
Date: 2009-09-24 23:28:58 +0000 (Thu, 24 Sep 2009)
Log Message:
-----------
[#2865524] Patch by tatata7
* fix for MediaWiki version 1.11 API to get 'userinfo'.
* interwiki support for Wikitravel
Modified Paths:
--------------
trunk/pywikipedia/families/wikitravel_family.py
trunk/pywikipedia/wikipedia.py
Modified: trunk/pywikipedia/families/wikitravel_family.py
===================================================================
--- trunk/pywikipedia/families/wikitravel_family.py 2009-09-24 23:24:22 UTC (rev 7295)
+++ trunk/pywikipedia/families/wikitravel_family.py 2009-09-24 23:28:58 UTC (rev 7296)
@@ -33,22 +33,42 @@
'ru':'ru',
'sv':'sv',
'zh':'zh',
+ 'wts':'wts',
}
self.namespaces[-2] = {
- '_default': u'Media',
+ '_default': [u'Media', self.namespaces[-2]['_default']],
'ar': u'ملف',
+ 'ca': u'Media',
+ 'de': u'Media',
+ 'en': u'Media',
+ 'eo': u'Media',
+ 'es': u'Media',
+ 'fi': u'Media',
+ 'fr': u'Media',
'he': u'מדיה',
+ 'hi': u'Media',
'hu': u'Média',
+ 'it': u'Media',
+ 'ja': u'Media',
+ 'nl': u'Media',
+ 'pl': u'Media',
+ 'pt': u'Media',
+ 'ro': u'Media',
'ru': u'Медиа',
+ 'sv': u'Media',
+ 'zh': u'Media',
+ 'wts': u'Media',
}
self.namespaces[-1] = {
- '_default': u'Special',
+ '_default': [u'Special', self.namespaces[-1]['_default']],
'ar': u'خاص',
'ca': u'Especial',
'de': u'Spezial',
+ 'en': u'Special',
'eo': u'Speciala',
'es': u'Especial',
'fi': u'Toiminnot',
+ 'fr': u'Special',
'he': u'מיוחד',
'hi': u'विशेष',
'hu': u'Speciális',
@@ -57,20 +77,25 @@
'nl': u'Speciaal',
'pl': u'Specjalna',
'pt': u'Especial',
+ 'ro': u'Special',
'ru': u'Служебная',
+ 'sv': u'Special',
+ 'zh': u'Special',
+ 'wts': u'Special',
}
self.namespaces[1] = {
'_default': u'Talk',
'ar': u'نقاش',
'ca': u'Discussió',
'de': u'Diskussion',
+ 'en': u'Talk',
'eo': u'Diskuto',
'es': u'Discusión',
'fi': u'Keskustelu',
'fr': u'Discuter',
'he': u'שיחה',
'hi': u'वार्ता',
- 'hu': u'Vita',
+ 'hu': u'Vita',
'it': u'Discussione',
'ja': u'ノート',
'nl': u'Overleg',
@@ -79,18 +104,22 @@
'ro': u'Discuţie',
'ru': u'Обсуждение',
'sv': u'Diskussion',
+ 'zh': u'Talk',
+ 'wts': u'Talk',
}
self.namespaces[2] = {
'_default': u'User',
'ar': u'مستخدم',
'ca': u'Usuari',
'de': u'Benutzer',
+ 'en': u'User',
'eo': u'Vikipediisto',
'es': u'Usuario',
'fi': u'Käyttäjä',
'fr': u'Utilisateur',
'he': u'משתמש',
'hi': u'सदस्य',
+ 'hu': u'User',
'it': u'Utente',
'ja': u'利用者',
'nl': u'Gebruiker',
@@ -99,12 +128,15 @@
'ro': u'Utilizator',
'ru': u'Участник',
'sv': u'Användare',
+ 'zh': u'User',
+ 'wts': u'User',
}
self.namespaces[3] = {
'_default': u'User talk',
'ar': u'نقاش المستخدم',
'ca': u'Usuari Discussió',
'de': u'Benutzer Diskussion',
+ 'en': u'User talk',
'eo': u'Vikipediista diskuto',
'es': u'Usuario Discusión',
'fi': u'Keskustelu käyttäjästä',
@@ -120,21 +152,43 @@
'ro': u'Discuţie Utilizator',
'ru': u'Обсуждение участника',
'sv': u'Användardiskussion',
+ 'zh': u'User talk',
+ 'wts': u'User talk',
}
self.namespaces[4] = {
- '_default': u'Wikitravel',
+ '_default': [u'Wikitravel', self.namespaces[4]['_default']],
+ 'ar': u'Wikitravel',
+ 'ca': u'Wikitravel',
+ 'de': u'Wikitravel',
+ 'en': u'Wikitravel',
+ 'eo': u'Wikitravel',
+ 'es': u'Wikitravel',
+ 'fi': u'Wikitravel',
+ 'fr': u'Wikitravel',
'he': u'ויקיטיול',
'hi': u'विकिट्रैवल',
+ 'hu': u'Wikitravel',
+ 'it': u'Wikitravel',
+ 'ja': u'Wikitravel',
+ 'nl': u'Wikitravel',
+ 'pl': u'Wikitravel',
+ 'pt': u'Wikitravel',
+ 'ro': u'Wikitravel',
+ 'ru': u'Wikitravel',
+ 'sv': u'Wikitravel',
+ 'zh': u'Wikitravel',
+ 'wts': u'Wikitravel Shared',
}
self.namespaces[5] = {
- '_default': u'Wikitravel talk',
+ '_default': [u'Wikitravel talk', self.namespaces[5]['_default']],
'ar': u'نقاش Wikitravel',
'ca': u'Wikitravel Discussió',
'de': u'Wikitravel Diskussion',
+ 'en': u'Wikitravel talk',
'eo': u'Wikitravel diskuto',
'es': u'Wikitravel Discusión',
+ 'fr': u'Discussion Wikitravel',
'fi': u'Keskustelu Wikitravelista',
- 'fr': u'Discussion Wikitravel',
'he': u'שיחת ויקיטיול',
'hi': u'विकिट्रैवल वार्ता',
'hu': u'Wikitravel vita',
@@ -146,15 +200,19 @@
'ro': u'Discuţie Wikitravel',
'ru': u'Обсуждение Wikitravel',
'sv': u'Wikitraveldiskussion',
+ 'zh': u'Wikitravel talk',
+ 'wts': u'Wikitravel Shared talk',
}
self.namespaces[6] = {
'_default': u'Image',
'ar': u'صورة',
'ca': u'Imatge',
'de': u'Bild',
+ 'en': u'Image',
'eo': u'Dosiero',
'es': u'Imagen',
'fi': u'Kuva',
+ 'fr': u'Image',
'he': u'תמונה',
'hi': u'चित्र',
'hu': u'Kép',
@@ -166,12 +224,15 @@
'ro': u'Imagine',
'ru': u'Изображение',
'sv': u'Bild',
+ 'zh': u'Image',
+ 'wts': u'Image',
}
self.namespaces[7] = {
- '_default': u'Image talk',
+ '_default': [u'Image talk', self.namespaces[7]['_default']],
'ar': u'نقاش الصورة',
'ca': u'Imatge Discussió',
'de': u'Bild Diskussion',
+ 'en': u'Image talk',
'eo': u'Dosiera diskuto',
'es': u'Imagen Discusión',
'fi': u'Keskustelu kuvasta',
@@ -187,23 +248,45 @@
'ro': u'Discuţie Imagine',
'ru': u'Обсуждение изображения',
'sv': u'Bilddiskussion',
+ 'zh': u'Image talk',
+ 'wts': u'Image talk',
}
self.namespaces[8] = {
- '_default': u'MediaWiki',
+ '_default': [u'MediaWiki', self.namespaces[8]['_default']],
'ar': u'ميدياويكي',
+ 'ca': u'MediaWiki',
+ 'de': u'MediaWiki',
+ 'en': u'MediaWiki',
+ 'eo': u'MediaWiki',
+ 'es': u'MediaWiki',
'fi': u'Järjestelmäviesti',
+ 'fr': u'MediaWiki',
'he': u'מדיה ויקי',
+ 'hi': u'MediaWiki',
+ 'hu': u'MediaWiki',
+ 'it': u'MediaWiki',
+ 'ja': u'MediaWiki',
+ 'nl': u'MediaWiki',
+ 'pl': u'MediaWiki',
+ 'pt': u'MediaWiki',
+ 'ro': u'MediaWiki',
+ 'ru': u'MediaWiki',
+ 'sv': u'MediaWiki',
+ 'zh': u'MediaWiki',
+ 'wts': u'MediaWiki',
}
self.namespaces[9] = {
- '_default': u'MediaWiki talk',
+ '_default': [u'MediaWiki talk', self.namespaces[9]['_default']],
'ar': u'نقاش ميدياويكي',
'ca': u'MediaWiki Discussió',
'de': u'MediaWiki Diskussion',
+ 'en': u'MediaWiki talk',
'eo': u'MediaWiki diskuto',
'es': u'MediaWiki Discusión',
'fi': u'Keskustelu järjestelmäviestistä',
'fr': u'Discussion MediaWiki',
'he': u'שיחת מדיה ויקי',
+ 'hi': u'MediaWiki talk',
'hu': u'MediaWiki vita',
'it': u'Discussioni MediaWiki',
'ja': u'MediaWiki‐ノート',
@@ -213,12 +296,15 @@
'ro': u'Discuţie MediaWiki',
'ru': u'Обсуждение MediaWiki',
'sv': u'MediaWiki-diskussion',
+ 'zh': u'MediaWiki talk',
+ 'wts': u'MediaWiki talk',
}
self.namespaces[10] = {
- '_default': u'Template',
+ '_default': [u'Template', self.namespaces[10]['_default']],
'ar': u'قالب',
'ca': u'Plantilla',
'de': u'Vorlage',
+ 'en': u'Template',
'eo': u'Ŝablono',
'es': u'Plantilla',
'fi': u'Malline',
@@ -226,18 +312,23 @@
'he': u'תבנית',
'hi': u'साँचा',
'hu': u'Sablon',
+ 'it': u'Template',
+ 'ja': u'Template',
'nl': u'Sjabloon',
'pl': u'Szablon',
'pt': u'Predefinição',
'ro': u'Format',
'ru': u'Шаблон',
'sv': u'Mall',
+ 'zh': u'Template',
+ 'wts': u'Template',
}
self.namespaces[11] = {
- '_default': u'Template talk',
+ '_default': [u'Template talk', self.namespaces[11]['_default']],
'ar': u'نقاش قالب',
'ca': u'Plantilla Discussió',
'de': u'Vorlage Diskussion',
+ 'en': u'Template talk',
'eo': u'Ŝablona diskuto',
'es': u'Plantilla Discusión',
'fi': u'Keskustelu mallineesta',
@@ -253,35 +344,45 @@
'ro': u'Discuţie Format',
'ru': u'Обсуждение шаблона',
'sv': u'Malldiskussion',
+ 'zh': u'Template talk',
+ 'wts': u'Template talk',
}
self.namespaces[12] = {
- '_default': u'Help',
+ '_default': [u'Help', self.namespaces[12]['_default']],
'ar': u'مساعدة',
'ca': u'Ajuda',
'de': u'Hilfe',
+ 'en': u'Help',
'eo': u'Helpo',
'es': u'Ayuda',
'fi': u'Ohje',
'fr': u'Aide',
'he': u'עזרה',
+ 'hi': u'Help',
'hu': u'Segítség',
'it': u'Aiuto',
+ 'ja': u'Help',
+ 'nl': u'Help',
'pl': u'Pomoc',
'pt': u'Ajuda',
'ro': u'Ajutor',
'ru': u'Справка',
'sv': u'Hjälp',
+ 'zh': u'Help',
+ 'wts': u'Help',
}
self.namespaces[13] = {
- '_default': u'Help talk',
+ '_default': [u'Help talk', self.namespaces[13]['_default']],
'ar': u'نقاش المساعدة',
'ca': u'Ajuda Discussió',
'de': u'Hilfe Diskussion',
+ 'en': u'Help talk',
'eo': u'Helpa diskuto',
'es': u'Ayuda Discusión',
'fi': u'Keskustelu ohjeesta',
'fr': u'Discussion Aide',
'he': u'שיחת עזרה',
+ 'hi': u'Help talk',
'hu': u'Segítség vita',
'it': u'Discussioni aiuto',
'ja': u'Help‐ノート',
@@ -291,12 +392,15 @@
'ro': u'Discuţie Ajutor',
'ru': u'Обсуждение справки',
'sv': u'Hjälpdiskussion',
+ 'zh': u'Help talk',
+ 'wts': u'Help talk',
}
self.namespaces[14] = {
- '_default': u'Category',
+ '_default': [u'Category', self.namespaces[14]['_default']],
'ar': u'تصنيف',
'ca': u'Categoria',
'de': u'Kategorie',
+ 'en': u'Category',
'eo': u'Kategorio',
'es': u'Categoría',
'fi': u'Luokka',
@@ -305,18 +409,22 @@
'hi': u'श्रेणी',
'hu': u'Kategória',
'it': u'Categoria',
+ 'ja': u'Category',
'nl': u'Categorie',
'pl': u'Kategoria',
'pt': u'Categoria',
'ro': u'Categorie',
'ru': u'Категория',
'sv': u'Kategori',
+ 'zh': u'Category',
+ 'wts': u'Category',
}
self.namespaces[15] = {
- '_default': u'Category talk',
+ '_default': [u'Category talk', self.namespaces[15]['_default']],
'ar': u'نقاش التصنيف',
'ca': u'Categoria Discussió',
'de': u'Kategorie Diskussion',
+ 'en': u'Category talk',
'eo': u'Kategoria diskuto',
'es': u'Categoría Discusión',
'fi': u'Keskustelu luokasta',
@@ -332,24 +440,167 @@
'ro': u'Discuţie Categorie',
'ru': u'Обсуждение категории',
'sv': u'Kategoridiskussion',
+ 'zh': u'Category talk',
+ 'wts': u'Category talk',
}
+ # Do not add '_default' key into this name space.
+ # It cause weird error; Bot says "Please create a file user-config.py, and ...".
+ self.namespaces[200] = {
+ 'wts': u'Tech',
+ }
+ # Do not add '_default' key into this name space.
+ # It cause weird error; Bot says "Please create a file user-config.py, and ...".
+ self.namespaces[201] = {
+ 'wts': u'Tech talk',
+ }
-
# A few selected big languages for things that we do not want to loop over
# all languages. This is only needed by the titletranslate.py module, so
# if you carefully avoid the options, you could get away without these
# for another wikimedia family.
-
self.languages_by_size = ['en','fr','ro']
+ # for Wikitravel's /Run subpages check.
+ self.wt_script_policy = {
+ '_default': u'Script policy',
+ 'ar': u'Bot',
+ 'ca': u'Bots',
+ 'de': u'Regeln für Skripte',
+ 'en': u'Script policy',
+ 'eo': u'Roboto',
+ 'es': u'Bots',
+ 'fi': u'Botit',
+ 'fr': u'Règles concernant les scripts',
+ 'he': u'Bot',
+ 'hi': u'यंत्रमानव',
+ 'hu': u'Botok',
+ 'it': u'Politica script',
+ 'ja': u'スクリプトの基本方針',
+ 'nl': u'Richtlijnen scripting',
+ 'pl': u'Boty',
+ 'pt': u'Robôs',
+ 'ro': u'Bot',
+ 'ru': u'Боты',
+ 'sv': u'Robotar',
+ 'zh': u'機器人方針',
+ 'wts': u'Script policy',
+ }
+
+ # String used as separator between interwiki links and the text
+ self.interwiki_text_separator = '\r\n'
+
+ # Interwiki sorting order for Wikitravel Shared (wts:)
+ self.alphabetic = [
+ 'ar', 'ca', 'de', 'en', 'eo', 'es', 'fi', 'fr', 'he', 'hi',
+ 'hu', 'it', 'ja', 'nl', 'pl', 'pt', 'ro', 'ru', 'sv', 'zh',
+ 'wts'
+ ]
+
+ # for Wikitravel Shared (wts:)
+ # Which languages have a special order for putting interlanguage links,
+ # and what order is it? If a language is not in interwiki_putfirst,
+ # alphabetical order on language code is used. For languages that are in
+ # interwiki_putfirst, interwiki_putfirst is checked first, and
+ # languages are put in the order given there. All other languages are put
+ # after those, in code-alphabetical order.
+ self.interwiki_putfirst = {
+ 'ar': self.alphabetic,
+ 'ca': self.alphabetic,
+ 'de': self.alphabetic,
+ 'en': self.alphabetic,
+ 'eo': self.alphabetic,
+ 'es': self.alphabetic,
+ 'fi': self.alphabetic,
+ 'fr': self.alphabetic,
+ 'he': self.alphabetic,
+ 'hi': self.alphabetic,
+ 'hu': self.alphabetic,
+ 'it': self.alphabetic,
+ 'ja': self.alphabetic,
+ 'nl': self.alphabetic,
+ 'pl': self.alphabetic,
+ 'pt': self.alphabetic,
+ 'ro': self.alphabetic,
+ 'ru': self.alphabetic,
+ 'sv': self.alphabetic,
+ 'zh': self.alphabetic,
+ }
+
+ # for Wikitravel Shared (wts:), Previous DOTM, etc.
+ # Allows crossnamespace interwiki linking.
+ # Lists the possible crossnamespaces combinations
+ # keys are originating NS
+ # values are dicts where:
+ # keys are the originating langcode, or _default
+ # values are dicts where:
+ # keys are the languages that can be linked to from the lang+ns, or _default
+ # values are a list of namespace numbers
+ self.crossnamespace[0] = {
+ '_default': {
+ '_default': [4],
+ 'wts': [4, 14],
+ },
+ }
+ self.crossnamespace[4] = {
+ '_default': {
+ '_default': [0],
+ },
+ }
+ self.crossnamespace[14] = {
+ 'wts': {
+ '_default': [0],
+ },
+ }
+
+ # Wikitravel's bot control by checking /Run subpages.
+ def bot_control(self,site):
+ import urllib
+ from wikipedia import Error, Page
+ wt_username = urllib.quote(config.usernames[self.name][site.lang].encode('utf-8'))
+ wt_namespace = urllib.quote(self.namespaces[2][site.lang].encode('utf-8'))
+ wt_user_run = unicode(wt_namespace) + u':' + unicode(wt_username) + u'/Run'
+ wt_page = Page(site, wt_user_run)
+ wt_user_run_text = wt_page.get(get_redirect = True)
+ wt_namespace = urllib.quote(self.namespaces[4][site.lang].encode('utf-8'))
+ wt_script_policy = urllib.quote(self.wt_script_policy[site.lang].encode('utf-8'))
+ wt_system_run = unicode(wt_namespace) + u':' + unicode(wt_script_policy) + u'/Run'
+ wt_page = Page(site, wt_system_run)
+ wt_system_run_text = wt_page.get(get_redirect = True)
+ if 'yes' not in wt_user_run_text or 'yes' not in wt_system_run_text:
+ raise Error('Bot stopped by /Run page on %s -- %s = %s , %s = %s'
+ % (site.lang, wt_user_run, wt_user_run_text, wt_system_run, wt_system_run_text))
+ return True
+
def hostname(self,code):
return 'wikitravel.org'
+ # fix for Wikitravel's mediawiki message setting
+ def mediawiki_message(self,site):
+ # (eo:)
+ if site.lang == 'eo':
+ site._mediawiki_messages['readonly_lag'] = u'The database has been automatically locked while the slave database servers catch up to the master'
+ # (hi:)
+ if site.lang == 'hi':
+ site._mediawiki_messages['readonly'] = u'Database locked'
+ site._mediawiki_messages['readonly_lag'] = u'The database has been automatically locked while the slave database servers catch up to the master'
+ return site
+
def scriptpath(self, code):
- return '/wiki/%s' % code
+ # for Wikitravel Shared (wts:)
+ if code == 'wts':
+ return '/wiki/shared'
+ else:
+ return '/wiki/%s' % code
def shared_image_repository(self, code):
return ('wikitravel_shared', 'wikitravel_shared')
+ # fix for Wikitravel's user page link.
+ def user_page_link(self,site,index):
+ site._isLoggedIn[index] = True
+ site._userName[index] = config.usernames[self.name][site.lang].encode('utf-8')
+ return site
+
def version(self, code):
- return "1.10.1"
+ return "1.11.2"
+
Modified: trunk/pywikipedia/wikipedia.py
===================================================================
--- trunk/pywikipedia/wikipedia.py 2009-09-24 23:24:22 UTC (rev 7295)
+++ trunk/pywikipedia/wikipedia.py 2009-09-24 23:28:58 UTC (rev 7296)
@@ -814,7 +814,7 @@
else:
RversionTab = re.compile(r'<li id="ca-history"><a href=".*?title=.*?&action=history".*?>.*?</a></li>', re.DOTALL)
matchVersionTab = RversionTab.search(text)
- if not matchVersionTab:
+ if not matchVersionTab and not self.site().family.name == 'wikitravel':
raise NoPage(self.site(), self.aslink(forceInterwiki = True),"Page does not exist. In rare cases, if you are certain the page does exist, look into overriding family.RversionTab" )
# Look if the page is on our watchlist
matchWatching = Rwatchlist.search(text)
@@ -1009,6 +1009,10 @@
user_config.py, or using page.put(force=True).
"""
+
+ if self.site().family.name == 'wikitravel': # Wikitravel's bot control.
+ self.site().family.bot_control(self.site())
+
if config.ignore_bot_templates: #Check the "master ignore switch"
return True
@@ -3969,6 +3973,9 @@
cats = getCategoryLinks(s2, site = site)
s2 = removeCategoryLinksAndSeparator(s2.replace(marker,'',cseparatorstripped).strip(), site) + separator + s
newtext = replaceCategoryLinks(s2, cats, site=site, addOnly=True)
+ elif site.family.name == 'wikitravel': # for Wikitravel's language links position.
+ s = separator + s + separator
+ newtext = s2[:firstafter].replace(marker,'') + s + s2[firstafter:]
else:
if template:
# Do we have a noinclude at the end of the template?
@@ -4749,7 +4756,10 @@
'meta': 'userinfo',
'uiprop': 'blockinfo',
}
- data = query.GetData(params, self)['query']['userinfo']
+ if self.versionnumber() == 11: # fix for version 1.11 API.
+ data = query.GetData(params, self)['userinfo']
+ else:
+ data = query.GetData(params, self)['query']['userinfo']
return data.has_key('blockby')
except NotImplementedError:
return False
@@ -5268,6 +5278,9 @@
# No idea what is the user name, and it isn't important
self._userName[index] = None
+ if self.family.name == 'wikitravel': # fix for Wikitravel's user page link.
+ self = self.family.user_page_link(self,index)
+
# Check user groups, if possible (introduced in 1.10)
groupsR = re.compile(r'var wgUserGroups = \[\"(.+)\"\];')
m = groupsR.search(text)
@@ -5436,6 +5449,9 @@
continue
break
+ if self.family.name == 'wikitravel': # fix for Wikitravel's mediawiki message setting
+ self = self.family.mediawiki_message(self)
+
key = key.lower()
try:
return self._mediawiki_messages[key]
More information about the Pywikipedia-svn
mailing list