Revision: 5453 Author: russblau Date: 2008-05-28 13:23:58 +0000 (Wed, 28 May 2008)
Log Message: ----------- add site.code property and separate wiki i.d. code from language (which may be different)
Modified Paths: -------------- branches/rewrite/pywikibot/date.py branches/rewrite/pywikibot/login.py branches/rewrite/pywikibot/page.py branches/rewrite/pywikibot/site.py
Modified: branches/rewrite/pywikibot/date.py =================================================================== --- branches/rewrite/pywikibot/date.py 2008-05-28 12:28:34 UTC (rev 5452) +++ branches/rewrite/pywikibot/date.py 2008-05-28 13:23:58 UTC (rev 5453) @@ -1500,7 +1500,7 @@ self.site = site
def __call__(self, m, d): - return formats['Day_' + enMonthNames[m-1]][self.site.lang](d) + return formats['Day_' + enMonthNames[m-1]][self.site.code](d)
def formatYear(lang, year):
Modified: branches/rewrite/pywikibot/login.py =================================================================== --- branches/rewrite/pywikibot/login.py 2008-05-28 12:28:34 UTC (rev 5452) +++ branches/rewrite/pywikibot/login.py 2008-05-28 13:23:58 UTC (rev 5453) @@ -72,24 +72,24 @@ if sysop: try: self.username = config.sysopnames\ - [self.site.family.name][self.site.language()] + [self.site.family.name][self.site.code] except: raise NoUsername( u'ERROR: Sysop username for %s:%s is undefined.\nIf you have a sysop account for that site, please add such a line to user-config.py:\n\nsysopnames['%s']['%s'] = 'myUsername'' - % (self.site.family.name, self.site.language(), - self.site.family.name, self.site.language())) + % (self.site.family.name, self.site.code, + self.site.family.name, self.site.code)) else: try: self.username = config.usernames\ - [self.site.family.name][self.site.language()] + [self.site.family.name][self.site.code] except: raise NoUsername( u"""ERROR: Username for %s:%s is undefined. If you have an account for that site, please add a line to user-config.py:
usernames['%s']['%s'] = 'myUsername'""" - % (self.site.family.name, self.site.language(), - self.site.family.name, self.site.language())) + % (self.site.family.name, self.site.code, + self.site.family.name, self.site.code)) self.password = password if getattr(config, 'password_file', ''): self.readPassword() @@ -100,8 +100,8 @@ the policy on the respective wiki. """ return True # DEBUG - if botList.has_key(self.site.family.name) and botList[self.site.family.name].has_key(self.site.language()): - botListPageTitle = botList[self.site.family.name][self.site.language()] + if botList.has_key(self.site.family.name) and botList[self.site.family.name].has_key(self.site.code): + botListPageTitle = botList[self.site.family.name][self.site.code] botListPage = pywikibot.Page(self.site, botListPageTitle) for linkedPage in botListPage.linkedPages(): if linkedPage.titleWithoutNamespace() == self.username: @@ -189,7 +189,7 @@ """ filename = config.datafilepath('%s-%s-%s-login.data' % (self.site.family.name, - self.site.language(), + self.site.code, self.username)) f = open(filename, 'w') f.write(data) @@ -217,7 +217,7 @@ if len(entry) == 2: if entry[0] == self.username: self.password = entry[1] elif len(entry) == 4: - if entry[0] == self.site.lang and \ + if entry[0] == self.site.code and \ entry[1] == self.site.family.name and \ entry[2] == self.username: self.password = entry[3] @@ -238,7 +238,7 @@ logging.info(u"Should be logged in now") # Show a warning according to the local bot policy if not self.botAllowed(): - logging.error(u'*** Your username is not listed on [[%s]].\n*** Please make sure you are allowed to use the robot before actually using it!' % botList[self.site.family.name][self.site.lang]) + logging.error(u'*** Your username is not listed on [[%s]].\n*** Please make sure you are allowed to use the robot before actually using it!' % botList[self.site.family.name][self.site.code]) return True else: logging.error(u"Login failed. Wrong password or CAPTCHA answer?")
Modified: branches/rewrite/pywikibot/page.py =================================================================== --- branches/rewrite/pywikibot/page.py 2008-05-28 12:28:34 UTC (rev 5452) +++ branches/rewrite/pywikibot/page.py 2008-05-28 13:23:58 UTC (rev 5453) @@ -155,12 +155,12 @@ if forceInterwiki or ( allowInterwiki and self.site() != pywikibot.Site()): if self.site().family != pywikibot.Site().family \ - and self.site().family.name != self.site().language(): + and self.site().family.name != self.site().code: return u'[[%s:%s:%s]]' % (self.site().family.name, - self.site().language(), + self.site().code, self._title) else: - return u'[[%s:%s]]' % (self.site().language(), + return u'[[%s:%s]]' % (self.site().code, self._title) elif textlink and (self.isImage() or self.isCategory()): return u'[[:%s]]' % title @@ -231,7 +231,7 @@ if not hasattr(self, '_autoFormat'): from pywikibot import date self._autoFormat = date.getAutoFormat( - self.site().language(), + self.site().code, self.title(withNamespace=False) ) return self._autoFormat @@ -416,7 +416,7 @@
""" if not hasattr(self, '_isDisambig'): - locdis = self.site().family.disambig( self.site().lang ) + locdis = self.site().family.disambig(self.site().code) for template in self.templates(): tn = template.title(withNamespace=False) if tn in locdis: @@ -1393,7 +1393,7 @@ if prefix in fam.langs.keys(): newsite = pywikibot.Site(prefix, fam) else: - otherlang = self.site.language() + otherlang = self.site.code familyName = fam.get_known_families(site=self.site)[prefix] if familyName in ['commons', 'meta']: otherlang = familyName
Modified: branches/rewrite/pywikibot/site.py =================================================================== --- branches/rewrite/pywikibot/site.py 2008-05-28 12:28:34 UTC (rev 5452) +++ branches/rewrite/pywikibot/site.py 2008-05-28 13:23:58 UTC (rev 5453) @@ -74,28 +74,28 @@ @type user: str
""" - self._lang = code.lower() + self.__code = code.lower() if isinstance(fam, basestring) or fam is None: self.__family = Family(fam, fatal=False) else: self.__family = fam
# if we got an outdated language code, use the new one instead. - if self.__family.obsolete.has_key(self._lang): - if self.__family.obsolete[self._lang] is not None: - self._lang = self.__family.obsolete[self._lang] + if self.__family.obsolete.has_key(self.__code): + if self.__family.obsolete[self.__code] is not None: + self.__code = self.__family.obsolete[self.__code] else: # no such language anymore raise NoSuchSite("Language %s in family %s is obsolete" - % (self._lang, self.__family.name)) - if self._lang not in self.languages(): - if self._lang == 'zh-classic' and 'zh-classical' in self.languages(): - self._lang = 'zh-classical' + % (self.__code, self.__family.name)) + if self.__code not in self.languages(): + if self.__code == 'zh-classic' and 'zh-classical' in self.languages(): + self.__code = 'zh-classical' # database hack (database is varchar[10] -> zh-classical # is cut to zh-classic. else: raise NoSuchSite("Language %s does not exist in family %s" - % (self._lang, self.__family.name)) + % (self.__code, self.__family.name))
self._username = user
@@ -117,15 +117,13 @@
@property def family(self): - """Return the associated Family object.""" + """The Family object for this Site's wiki family.""" return self.__family
- def language(self): - """Return the site's language code.""" - # N.B. this code does not always identify a language as such, but - # may identify a wiki that is part of any family grouping - # FIXME: need to separate language (for L18N purposes) from code - return self._lang + @property + def code(self): + """The identifying code for this Site.""" + return self.__code
def user(self): """Return the currently-logged in bot user, or None.""" @@ -140,7 +138,7 @@ try: method = getattr(self.family, attr) f = lambda *args, **kwargs: \ - method(self.language(), *args, **kwargs) + method(self.code, *args, **kwargs) if hasattr(method, "__doc__"): f.__doc__ = method.__doc__ return f @@ -150,19 +148,19 @@
def sitename(self): """Return string representing this Site's name and language.""" - return self.family.name+':'+self.language() + return self.family.name+':'+self.code
__str__ = sitename
def __repr__(self): - return 'Site("%s", "%s")' % (self.language(), self.family.name) + return 'Site("%s", "%s")' % (self.code, self.family.name)
def __hash__(self): return hash(repr(self))
def linktrail(self): """Return regex for trailing chars displayed as part of a link.""" - return self.family.linktrail(self.language()) + return self.family.linktrail(self.code)
def languages(self): """Return list of all valid language codes for this site's Family.""" @@ -205,11 +203,11 @@ if self.language() == 'ar': # It won't work with REDIRECT[[]] but it work with the local, # if problems, try to find a work around. FixMe! - return self.family.redirect.get(self.language(), [u"تحويل"])[0] + return self.family.redirect.get(self.code, [u"تحويل"])[0] else: - return self.family.redirect.get(self.language(), [u"REDIRECT"])[0] + return self.family.redirect.get(self.code, [u"REDIRECT"])[0] else: - return self.family.redirect.get(self.language(), None) + return self.family.redirect.get(self.code, None)
def lock_page(self, page, block=True): """Lock page for writing. Must be called before writing any page. @@ -350,7 +348,7 @@
# ANYTHING BELOW THIS POINT IS NOT YET IMPLEMENTED IN __init__() self._mediawiki_messages = {} - self.nocapitalize = self._lang in self.family.nocapitalize + self.nocapitalize = self.__code in self.family.nocapitalize self._userData = [False, False] self._userName = [None, None] self._isLoggedIn = [None, None] @@ -488,6 +486,11 @@ def case(self): return self.getsiteinfo()['case']
+ def language(self): + """Return the code for the language of this Site.""" + # N.B. this code may or may not be the same as self.code + return self.getsiteinfo()['lang'] + def namespaces(self): """Return dict of valid namespaces on this wiki.""" self.getsiteinfo() @@ -1651,21 +1654,21 @@ try: if sysop: try: - username = config.sysopnames[self.family.name][self.language()] + username = config.sysopnames[self.family.name][self.code] except KeyError: raise NoUsername("""\ You tried to perform an action that requires admin privileges, but you haven't entered your sysop name in your user-config.py. Please add sysopnames['%s']['%s']='name' to your user-config.py""" - % (self.family.name, self.language())) + % (self.family.name, self.code)) else: - username = config.usernames[self.family.name][self.language()] + username = config.usernames[self.family.name][self.code] except KeyError: self._cookies[index] = None self._isLoggedIn[index] = False else: tmp = '%s-%s-%s-login.data' % ( - self.family.name, self.language(), username) + self.family.name, self.code, username) fn = config.datafilepath('login-data', tmp) if not os.path.exists(fn): self._cookies[index] = None @@ -2491,8 +2494,8 @@ Use optional Site argument 'othersite' to generate an interwiki link.
""" - if othersite and othersite.lang != self.language(): - return u'[[%s:%s]]' % (self.language(), title) + if othersite and othersite.code != self.code: + return u'[[%s:%s]]' % (self.code, title) else: return u'[[%s]]' % title
@@ -2518,7 +2521,7 @@ if self.ns_index(first): return False if first in interlangTargetFamily.langs: - if first == self.language(): + if first == self.code: return self.isInterwikiLink(rest) else: return True @@ -2541,10 +2544,10 @@ red = u"تحويل" try: if redDefault == red: - redirKeywords = [red] + self.family.redirect[self.language()] + redirKeywords = [red] + self.family.redirect[self.code] redirKeywordsR = r'(?:' + '|'.join(redirKeywords) + ')' else: - redirKeywords = [red] + self.family.redirect[self.language()] + redirKeywords = [red] + self.family.redirect[self.code] redirKeywordsR = r'(?:' + redDefault + '|'.join(redirKeywords) + ')' except KeyError: # no localized keyword for redirects @@ -2561,7 +2564,7 @@
def version(self): """Return MediaWiki version number as a string.""" - return self.family.version(self.language()) + return self.family.version(self.code)
def versionnumber(self): """Return an int identifying MediaWiki version. @@ -2570,7 +2573,7 @@ number; i.e., 'X' in version '1.X.Y'
""" - return self.family.versionnumber(self.language()) + return self.family.versionnumber(self.code)
def live_version(self): """Return the 'real' version number found on [[Special:Version]] @@ -2590,7 +2593,7 @@ self._mw_version = (int(m.group(1)), int(m.group(2)), m.group(3)) else: - self._mw_version = self.family.version(self.language()).split(".") + self._mw_version = self.family.version(self.code).split(".") return self._mw_version
def checkCharset(self, charset): @@ -2607,34 +2610,34 @@
def shared_image_repository(self): """Return a tuple of image repositories used by this site.""" - return self.family.shared_image_repository(self.language()) + return self.family.shared_image_repository(self.code)
def __cmp__(self, other): """Perform equality and inequality tests on Site objects.""" if not isinstance(other, Site): return 1 if self.family == other.family: - return cmp(self.language(), other.lang) + return cmp(self.code, other.code) return cmp(self.family.name, other.family.name)
def category_on_one_line(self): """Return True if this site wants all category links on one line.""" - return self.language() in self.family.category_on_one_line + return self.code in self.family.category_on_one_line
def interwiki_putfirst(self): """Return list of language codes for ordering of interwiki links.""" - return self.family.interwiki_putfirst.get(self.language(), None) + return self.family.interwiki_putfirst.get(self.code, None)
def interwiki_putfirst_doubled(self, list_of_links): # TODO: is this even needed? No family in the framework has this # dictionary defined! - if self.family.interwiki_putfirst_doubled.has_key(self.language()): - if len(list_of_links) >= self.family.interwiki_putfirst_doubled[self.language()][0]: + if self.family.interwiki_putfirst_doubled.has_key(self.code): + if len(list_of_links) >= self.family.interwiki_putfirst_doubled[self.code][0]: list_of_links2 = [] for lang in list_of_links: - list_of_links2.append(lang.language()) + list_of_links2.append(lang.code) list = [] - for lang in self.family.interwiki_putfirst_doubled[self.language()][1]: + for lang in self.family.interwiki_putfirst_doubled[self.code][1]: try: list.append(list_of_links[list_of_links2.index(lang)]) except ValueError: @@ -2658,7 +2661,7 @@ import catlib try: return catlib.Category(self, - self.namespace(14)+':'+self.family.disambcatname[self.language()]) + self.namespace(14)+':'+self.family.disambcatname[self.code]) except KeyError: raise NoPage(u'No page %s.' % page)