[Pywikipedia-l] SVN: [6057] branches/rewrite/pywikibot/family.py
russblau at svn.wikimedia.org
russblau at svn.wikimedia.org
Tue Nov 4 17:43:43 UTC 2008
Revision: 6057
Author: russblau
Date: 2008-11-04 17:43:43 +0000 (Tue, 04 Nov 2008)
Log Message:
-----------
synching family.py to trunk
Modified Paths:
--------------
branches/rewrite/pywikibot/family.py
Modified: branches/rewrite/pywikibot/family.py
===================================================================
--- branches/rewrite/pywikibot/family.py 2008-11-04 17:15:04 UTC (rev 6056)
+++ branches/rewrite/pywikibot/family.py 2008-11-04 17:43:43 UTC (rev 6057)
@@ -7,6 +7,8 @@
import re
import urllib
+from datetime import timedelta
+
logger = logging.getLogger("wiki")
# Parent class for all wiki families
@@ -21,8 +23,8 @@
'zh-min-nan', 'map-bms', 'ba', 'be', 'be-x-old', 'bh', 'bcl', 'bi', 'bar', 'bo',
'bs', 'br', 'bg', 'bxr', 'ca', 'cv', 'ceb', 'cs', 'ch', 'ny',
'sn', 'tum', 'cho', 'co', 'za', 'cy', 'da', 'pdc', 'de', 'dv',
- 'nv', 'dsb', 'dz', 'mh', 'et', 'el', 'eml', 'en', 'es', 'eo',
- 'eu', 'ee', 'fa', 'fo', 'fr', 'fy', 'ff', 'fur', 'ga', 'gv',
+ 'nv', 'dsb', 'dz', 'mh', 'et', 'el', 'eml', 'en', 'myv', 'es', 'eo',
+ 'ext', 'eu', 'ee', 'fa', 'fo', 'hif', 'fr', 'fy', 'ff', 'fur', 'ga', 'gan', 'gv',
'gd', 'gl', 'ki', 'glk', 'gu', 'got', 'zh-classical', 'hak', 'xal', 'ko',
'ha', 'haw', 'hy', 'hi', 'ho', 'hsb', 'hr', 'io', 'ig', 'ilo',
'bpy', 'id', 'ia', 'ie', 'iu', 'ik', 'os', 'xh', 'zu', 'is',
@@ -30,14 +32,14 @@
'kk', 'kw', 'rw', 'ky', 'rn', 'sw', 'kv', 'kg', 'ht', 'kj',
'ku', 'lad', 'lbe', 'lo', 'la', 'lv', 'lb', 'lt', 'lij', 'li',
'ln', 'jbo', 'lg', 'lmo', 'hu', 'mk', 'mg', 'ml', 'mt', 'mi',
- 'mr', 'mzn', 'ms', 'cdo', 'mo', 'mn', 'mus', 'my', 'nah', 'na',
+ 'mr', 'mzn', 'ms', 'cdo', 'mdf', 'mo', 'mn', 'mus', 'my', 'nah', 'na',
'fj', 'nl', 'nds-nl', 'cr', 'ne', 'new', 'ja', 'nap', 'ce', 'pih',
'no', 'nn', 'nrm', 'nov', 'oc', 'or', 'om', 'ng', 'hz', 'ug',
'uz', 'pa', 'pi', 'pag', 'pap', 'ps', 'km', 'pms', 'nds', 'pl',
- 'pt', 'crh', 'ty', 'ksh', 'ro', 'rmy', 'rm', 'qu', 'ru', 'se',
- 'sm', 'sa', 'sg', 'sc', 'sco', 'st', 'tn', 'sq', 'scn', 'si',
- 'simple', 'sd', 'ss', 'sk', 'cu', 'sl', 'so', 'sr', 'sh', 'stq',
- 'su', 'fi', 'sv', 'tl', 'ta', 'kab', 'roa-tara', 'tt', 'te', 'tet',
+ 'pt', 'kaa', 'crh', 'ty', 'ksh', 'ro', 'rmy', 'rm', 'qu', 'ru', 'sah', 'se',
+ 'sm', 'sa', 'sg', 'sc', 'sco', 'stq', 'st', 'tn', 'sq', 'scn', 'si',
+ 'simple', 'sd', 'ss', 'sk', 'cu', 'sl', 'szl', 'so', 'sr', 'sh',
+ 'srn', 'su', 'fi', 'sv', 'tl', 'ta', 'kab', 'roa-tara', 'tt', 'te', 'tet',
'th', 'vi', 'ti', 'tg', 'tpi', 'to', 'chr', 'chy', 've', 'tr',
'tk', 'tw', 'udm', 'bug', 'uk', 'ur', 'vec', 'vo', 'fiu-vro', 'wa',
'vls', 'war', 'wo', 'wuu', 'ts', 'ii', 'yi', 'yo', 'zh-yue', 'cbk-zam',
@@ -45,7 +47,29 @@
]
self.langs = {}
-
+ # The timedelta to GMT of the server.
+ # Exemple for a server running CET :
+ # timedelta(hours=+1)
+ self.servergmtoffset = timedelta()
+
+ # letters that can follow a wikilink and are regarded as part of this link
+ # This depends on the linktrail setting in LanguageXx.php and on
+ # [[MediaWiki:Linktrail]].
+ # Note: this is a regular expression.
+ self.linktrails = {
+ '_default': u'[a-z]*',
+ 'de': u'[a-zäöüß]*',
+ 'da': u'[a-zæøå]*',
+ 'fi': u'[a-zåäö]*',
+ 'fr': u'[a-zàâçéèêîôû]*',
+ 'he': u'[a-zא-ת]*',
+ 'it': u'[a-zàèéìòù]*',
+ 'kk': u'[a-zäçéğıïñöşüýа-яёәғіқңөұүһʺʹ]*',
+ 'nl': u'[a-zäöüïëéèéàç]*',
+ 'pt': u'[a-záâàãéêíóôõúüç]*',
+ 'ru': u'[a-zа-я]*',
+ }
+
# Wikimedia wikis all use "bodyContent" as the id of the <div>
# element that contains the actual page content; change this for
# wikis that use something else (e.g., mozilla family)
@@ -53,7 +77,7 @@
# A dictionary where keys are family codes that can be used in
# inter-family interwiki links. Values are not used yet.
- # Generated from http://tools.wikimedia.de/~daniel/interwiki-en.txt:
+ # Generated from http://toolserver.org/~daniel/interwiki-en.txt:
# remove interlanguage links from file, then run
# f = open('interwiki-en.txt')
# for line in f.readlines():
@@ -510,20 +534,77 @@
# Some languages belong to a group where the possibility is high that
# equivalent articles have identical titles among the group.
self.language_groups = {
+ # languages using the arabic script (incomplete)
+ 'arab' : [
+ 'ar', 'ps', 'sd', 'ur',
+ # languages using multiple scripts, including arabic
+ 'kk', 'ku', 'tt', 'ug'
+ ],
# languages that use chinese symbols
'chinese': [
- 'ja', 'wuu', 'zh', 'zh-classical', 'zh-yue'
+ 'wuu', 'zh', 'zh-classical', 'zh-yue', 'gan', 'ii',
+ # languages using multiple/mixed scripts, including chinese
+ 'ja', 'za'
],
# languages that use the cyrillic alphabet
'cyril': [
- 'ab', 'ba', 'be', 'be-x-old', 'bg', 'ce', 'cv', 'kk', 'kv', 'ky', 'mk',
- 'mn', 'os', 'ru', 'sr', 'tg', 'tk', 'udm', 'uk', 'xal'
+ 'ab', 'av', 'ba', 'be', 'be-x-old', 'bg', 'bxr', 'ce', 'cu', 'cv', 'kv',
+ 'ky', 'mk', 'lbe', 'mdf', 'mn', 'mo', 'myv', 'os', 'ru', 'sah', 'tg',
+ 'tk', 'udm', 'uk', 'xal',
+ # languages using multiple scripts, including cyrillic
+ 'ha', 'kk', 'sh', 'sr', 'tt'
],
+ # languages that use the latin alphabet
+ 'latin': [
+ 'aa', 'af', 'ak', 'als', 'an', 'ang', 'ast', 'ay', 'bar', 'bat-smg',
+ 'bcl', 'bi', 'bm', 'br', 'bs', 'ca', 'cbk-zam', 'cdo', 'ceb', 'ch',
+ 'cho', 'chy', 'co', 'crh', 'cs', 'csb', 'cy', 'da', 'de', 'diq', 'dsb',
+ 'ee', 'eml', 'en', 'eo', 'es', 'et', 'eu', 'ext', 'ff', 'fi', 'fiu-vro',
+ 'fj', 'fo', 'fr', 'frp', 'fur', 'fy', 'ga', 'gd', 'gl', 'gn', 'gv',
+ 'hak', 'haw', 'hif', 'ho', 'hr', 'hsb', 'ht', 'hu', 'hz', 'ia', 'id',
+ 'ie', 'ig', 'ik', 'ilo', 'io', 'is', 'it', 'jbo', 'jv', 'kaa', 'kab',
+ 'kg', 'ki', 'kj', 'kl', 'kr', 'ksh', 'kw', 'la', 'lad', 'lb', 'lg',
+ 'li', 'lij', 'lmo', 'ln', 'lt', 'lv', 'map-bms', 'mg', 'mh', 'mi', 'ms',
+ 'mt', 'mus', 'na', 'nah', 'nap', 'nds', 'nds-nl', 'ng', 'nl', 'nn',
+ 'no', 'nov', 'nrm', 'nv', 'ny', 'oc', 'om', 'pag', 'pam', 'pap', 'pdc',
+ 'pih', 'pl', 'pms', 'pt', 'qu', 'rm', 'rn', 'ro', 'roa-rup', 'roa-tara',
+ 'rw', 'sc', 'scn', 'sco', 'se', 'sg', 'simple', 'sk', 'sl', 'sm', 'sn',
+ 'so', 'sq', 'srn', 'ss', 'st', 'stq', 'su', 'sv', 'sw', 'szl', 'tet',
+ 'tl', 'tn', 'to', 'tpi', 'tr', 'ts', 'tum', 'tw', 'ty', 'uz', 've',
+ 'vec', 'vi', 'vls', 'vo', 'wa', 'war', 'wo', 'xh', 'yo', 'zea',
+ 'zh-min-nan', 'zu',
+ # languages using multiple scripts, including latin
+ 'az', 'chr', 'ha', 'iu', 'kk', 'ku', 'rmy', 'sh', 'sr', 'tt', 'ug', 'za'
+ ],
+ # Scandinavian languages
'scand': [
'da', 'fo', 'is', 'no', 'sv'
],
}
+ # LDAP domain if your wiki uses LDAP authentication,
+ # http://www.mediawiki.org/wiki/Extension:LDAP_Authentication
+ self.ldapDomain = ()
+
+ # 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 = {}
+ #### Examples :
+ ## Allowing linking to pt' 102 NS from any other lang' 0 NS is
+ # self.crossnamespace[0] = {
+ # '_default': { 'pt': [102]}
+ # }
+ ## While allowing linking from pt' 102 NS to any other lang' = NS is
+ # self.crossnamespace[102] = {
+ # 'pt': { '_default': [0]}
+ # }
+
def _addlang(self, code, location, namespaces = {}):
"""Add a new language to the langs and namespaces of the family.
This is supposed to be called in the constructor of the family."""
@@ -628,8 +709,11 @@
if value in v: return v[0]
else:
if value == v: return v
- if value == self.namespace('_default', ns):
- return self.namespace(code, ns)
+ try:
+ if value == self.namespace('_default', ns):
+ return self.namespace(code, ns)
+ except KeyError:
+ pass
return value
def getNamespaceIndex(self, lang, namespace):
@@ -711,19 +795,23 @@
'cy': [u'ail-cyfeirio'],
'el': [u'ΑΝΑΚΑΤΕΥΘΥΝΣΗ'],
'et': [u'suuna'],
- 'eu': [u'bidali'],
'fa': [u'تغییرمسیر'],
'fi': [u'ohjaus', u'uudelleenohjaus'],
'ga': [u'athsheoladh'],
'he': [u'הפניה'],
+ 'hu': [u'átirányítás'],
'id': [u'alih'],
'is': [u'tilvísun'],
'jv': [u'alih'],
'ka': [u'გადამისამართება'],
'kk': [u'айдау'],
+ 'ko': [u'넘겨주기'],
'mzn': [u'تغییرمسیر'],
+ 'nl': [u'DOORVERWIJZING'],
'nn': [u'omdiriger'],
- 'ru': [u'перенаправление', u'перенапр'],
+ 'ru': [u'REDIRECT', u'перенаправление', u'перенапр'], # localised version is not
+ # so usual, so put the default
+ # one as the most used.
'sk': [u'presmeruj'],
'sr': [u'преусмери',u'Преусмери'], # Using lowercase only doesn't work?
'su': [u'redirected', u'alih'],
@@ -822,7 +910,7 @@
"""Return MediaWiki version number as a string."""
# Don't use this, use versionnumber() instead. This only exists
# to not break family files.
- return "1.12alpha"
+ return '1.13alpha'
def versionnumber(self, code):
"""Return an int identifying MediaWiki version.
@@ -879,7 +967,7 @@
return "%s?title=%s:Allmessages&ot=html" % (self.path(code), self.special_namespace_url(code))
def login_address(self, code):
- return '%s?title=%s:Userlogin&action=submit' % (self.path(code), self.special_namespace_url(code))
+ return '%s?title=%s:Userlogin' % (self.path(code), self.special_namespace_url(code))
def captcha_image_address(self, code, id):
return '%s?title=%s:Captcha/image&wpCaptchaId=%s' % (self.path(code), self.special_namespace_url(code), id)
@@ -991,6 +1079,9 @@
def lonelypages_address(self, code, limit=500):
return "%s?title=%s:Lonelypages&limit=%d" % (self.path(code), self.special_namespace_url(code), limit)
+ def protectedpages_address(self, code, limit=500):
+ return "%s?title=%s:ProtectedPages&limit=%d" % (self.path(code), self.special_namespace_url(code), limit)
+
def unwatchedpages_address(self, code, limit=500):
return "%s?title=%s:Unwatchedpages&limit=%d" % (self.path(code), self.special_namespace_url(code), limit)
@@ -1052,3 +1143,22 @@
def shared_image_repository(self, code):
"""Return the shared image repository, if any."""
return (None, None)
+
+ def server_time(self):
+ """Returns a datetime object representing server time"""
+ # TODO : If the local computer time is wrong, result wll be wrong
+ return datetime.utcnow() + self.servergmtoffset
+
+ def isPublic(self):
+ """Does the wiki require logging in before viewing it ?"""
+ return True
+
+ def post_get_convert(self, site, getText):
+ """Does a conversion on the retrieved text from the wiki
+ i.e. Esperanto X-conversion """
+ return getText
+
+ def pre_put_convert(self, site, putText):
+ """Does a conversion on the text to insert on the wiki
+ i.e. Esperanto X-conversion """
+ return putText
More information about the Pywikipedia-l
mailing list