http://www.mediawiki.org/wiki/Special:Code/pywikipedia/10960
Revision: 10960
Author: drtrigon
Date: 2013-01-20 16:03:08 +0000 (Sun, 20 Jan 2013)
Log Message:
-----------
bug fix; follow-up to r10917 in order to properly solve the issues:
* catch the case version=None and import the module as last try (should not be needed at all! -> see next)
* properly determine the directory with _get_program_dir() based on __file__ (should work with PYTHONPATH pointing somewhere else too)
* added a final try...except in order to catch the case when everything breaks (which should never happen!)
* merged with rewrite (the are now exactly the same)
Modified Paths:
--------------
trunk/pywikipedia/pywikibot/version.py
trunk/pywikipedia/version.py
Modified: trunk/pywikipedia/pywikibot/version.py
===================================================================
--- trunk/pywikipedia/pywikibot/version.py 2013-01-20 13:24:15 UTC (rev 10959)
+++ trunk/pywikipedia/pywikibot/version.py 2013-01-20 16:03:08 UTC (rev 10960)
@@ -11,7 +11,6 @@
import os
import time
-import sys
import urllib
cache = None
@@ -19,59 +18,61 @@
class ParseError(Exception):
""" Parsing went wrong """
+def _get_program_dir():
+ _program_dir = os.path.normpath(os.path.split(os.path.dirname(__file__))[0])
+# _program_dir = _program_dir.rstrip(os.path.basename(_program_dir))
+## if not os.path.isabs(_program_dir):
+## _program_dir = os.path.normpath(os.path.join(os.getcwd(), _program_dir))
+ return _program_dir
+
def getversion():
data = getversiondict()
try:
rev2 = int(getversion_onlinerepo())
rev1 = int(str(data['rev']).split()[0])
data['cmp_ver'] = 'OUTDATED' if rev1 < rev2 else 'ok'
- except ParseError:
+ except Exception:
data['cmp_ver'] = 'n/a'
return '%(tag)s (r%(rev)s, %(date)s, %(cmp_ver)s)' % data
-def unknown_version():
- """Version cannot be determined"""
- cache = dict(tag='', rev='-1 (unknown)', date='0 (unknown)')
- return cache
-
def getversiondict():
global cache
if cache:
return cache
try:
(tag, rev, date) = getversion_svn()
- except Exception, e:
+ except Exception:
try:
(tag, rev, date) = getversion_nightly()
- except Exception, e:
- version = getfileversion('wikipedia.py')
- if version:
- try:
- id, file, rev, date, ts, author, dollar = version.split(' ')
- tag = ''
- date = time.strptime('%sT%s' % (date, ts), '%Y-%m-%dT%H:%M:%SZ')
- rev += ' (wikipedia.py)'
- except ValueError:
- # the value is most likely '$Id' + '$', it means that
- # wikipedia.py got imported without using svn at all
- return unknown_version()
- else:
- return unknown_version()
+ except Exception:
+ try:
+ version = getfileversion('wikipedia.py')
+ if not version:
+ # fall-back in case everything breaks (should not be used)
+ import wikipedia
+ version = wikipedia.__version__
+
+ id, file, rev, date, ts, author, dollar = version.split(' ')
+ tag = ''
+ date = time.strptime('%sT%s' % (date, ts), '%Y-%m-%dT%H:%M:%SZ')
+ rev += ' (wikipedia.py)'
+ except: # nothing worked; version unknown (but suppress exceptions)
+ # the value is most likely '$Id' + '$', it means that
+ # wikipedia.py got imported without using svn at all
+ return dict(tag='', rev='-1 (unknown)', date='0 (unknown)')
+
datestring = time.strftime('%Y/%m/%d, %H:%M:%S', date)
cache = dict(tag=tag, rev=rev, date=datestring)
return cache
def getversion_svn(path=None):
- _program_dir = path or os.path.normpath(os.path.dirname(sys.argv[0]))
-# if not os.path.isabs(_program_dir):
-# _program_dir = os.path.normpath(os.path.join(os.getcwd(), _program_dir))
+ _program_dir = path or _get_program_dir()
entries = open(os.path.join(_program_dir, '.svn/entries'))
version = entries.readline().strip()
#use sqlite table for new entries format
if version == "12":
entries.close()
from sqlite3 import dbapi2 as sqlite
- from datetime import datetime
con = sqlite.connect(os.path.join(_program_dir, ".svn/wc.db"))
cur = con.cursor()
cur.execute( '''select local_relpath, repos_path, revision, changed_date from nodes order by revision desc, changed_date desc''')
@@ -124,7 +125,7 @@
# without importing it (thus can be done for any file)
#
def getfileversion(filename):
- _program_dir = os.path.normpath(os.path.dirname(sys.argv[0]))
+ _program_dir = _get_program_dir()
__version__ = None
fn = os.path.join(_program_dir, filename)
if os.path.exists(fn):
Modified: trunk/pywikipedia/version.py
===================================================================
--- trunk/pywikipedia/version.py 2013-01-20 13:24:15 UTC (rev 10959)
+++ trunk/pywikipedia/version.py 2013-01-20 16:03:08 UTC (rev 10960)
@@ -12,6 +12,7 @@
from pywikibot.version import *
import config
+
if __name__ == '__main__':
print 'Pywikipedia %s' % getversion()
print 'Python %s' % sys.version
http://www.mediawiki.org/wiki/Special:Code/pywikipedia/10955
Revision: 10955
Author: multichill
Date: 2013-01-19 20:45:15 +0000 (Sat, 19 Jan 2013)
Log Message:
-----------
def logpages modified a bit to throw a BadTitle exception instead of just "Error". Should probably be expanded to throw proper exceptions for other problems.
Modified Paths:
--------------
trunk/pywikipedia/wikipedia.py
Modified: trunk/pywikipedia/wikipedia.py
===================================================================
--- trunk/pywikipedia/wikipedia.py 2013-01-19 12:57:37 UTC (rev 10954)
+++ trunk/pywikipedia/wikipedia.py 2013-01-19 20:45:15 UTC (rev 10955)
@@ -6864,6 +6864,10 @@
nbresults = 0
while True:
result = query.GetData(params, self)
+ if 'error' in result and result.get('error').get('code')==u'leparam_title':
+ output('%(info)s' % result.get('error'))
+ raise BadTitle
+ # FIXME: Throw proper exceptions instead of "Error"
if 'error' in result or 'warnings' in result:
output('%s' % result)
raise Error
http://www.mediawiki.org/wiki/Special:Code/pywikipedia/10954
Revision: 10954
Author: multichill
Date: 2013-01-19 12:57:37 +0000 (Sat, 19 Jan 2013)
Log Message:
-----------
Implement some logic to update links when a category at Commons gets deleted. If a category is moved and the deleting admin provided a decent deletion summary, the bot will use this to update links.
I hope this will fix a lot of broken links to Commons.
Modified Paths:
--------------
trunk/pywikipedia/commonscat.py
Modified: trunk/pywikipedia/commonscat.py
===================================================================
--- trunk/pywikipedia/commonscat.py 2013-01-19 09:55:14 UTC (rev 10953)
+++ trunk/pywikipedia/commonscat.py 2013-01-19 12:57:37 UTC (rev 10954)
@@ -501,14 +501,30 @@
if pywikibot.verbose:
pywikibot.output("getCommonscat: " + name )
try:
+ commonsSite = pywikibot.getSite("commons", "commons")
#This can throw a pywikibot.BadTitle
- commonsPage = pywikibot.Page(pywikibot.getSite("commons", "commons"),
- "Category:" + name)
+ commonsPage = pywikibot.Page(commonsSite, "Category:" + name)
if not commonsPage.exists():
- if pywikibot.verbose:
- pywikibot.output(u"getCommonscat: The category doesnt exist.")
- return u''
+ logpages = commonsSite.logpages(mode='delete', title=commonsPage.title())
+ try:
+ logitem = logpages.next()
+ (logpage, loguser, logtimestamp, logcomment) = logitem
+ # Some logic to extract the target page.
+ regex = u'moved to \[\[\:?Category:(?P<newcat1>[^\|\}]+)(\|[^\}]+)?\]\]|Robot: Changing Category:(.+) to Category:(?P<newcat2>.+)'
+ m = re.search(regex, logcomment)
+ if m:
+ if m.group('newcat1'):
+ return self.checkCommonscatLink(m.group('newcat1'))
+ elif m.group('newcat2'):
+ return self.checkCommonscatLink(m.group('newcat2'))
+ else:
+ pywikibot.output(u'getCommonscat: Deleted by %s. Couldn\'t find move target in \" %s \"' % (loguser, logcomment))
+ return u''
+ except StopIteration:
+ if pywikibot.verbose:
+ pywikibot.output(u"getCommonscat: The category doesnt exist and nothing found in the deletion log.")
+ return u''
elif commonsPage.isRedirectPage():
if pywikibot.verbose:
pywikibot.output(u"getCommonscat: The category is a redirect")
http://www.mediawiki.org/wiki/Special:Code/pywikipedia/10953
Revision: 10953
Author: drtrigon
Date: 2013-01-19 09:55:14 +0000 (Sat, 19 Jan 2013)
Log Message:
-----------
follow-up; to r10940 in order to properly solve this problem
Modified Paths:
--------------
branches/rewrite/pywikibot/site.py
Modified: branches/rewrite/pywikibot/site.py
===================================================================
--- branches/rewrite/pywikibot/site.py 2013-01-18 13:28:44 UTC (rev 10952)
+++ branches/rewrite/pywikibot/site.py 2013-01-19 09:55:14 UTC (rev 10953)
@@ -971,10 +971,10 @@
"""Return list of localized PAGENAMEE tags for the site."""
return self.getmagicwords("pagenamee")
- def _getsiteinfo(self):
+ def _getsiteinfo(self, force=False):
"""Retrieve siteinfo and namespaces from site."""
sirequest = api.CachedRequest(
- expiry=config.API_config_expiry,
+ expiry=(0 if force else config.API_config_expiry),
site=self,
action="query",
meta="siteinfo",
@@ -1102,17 +1102,16 @@
return self.namespaces()[num]
return self.namespaces()[num][0]
- def live_version(self):
+ def live_version(self, force=False):
"""Return the 'real' version number found on [[Special:Version]]
Return value is a tuple (int, int, str) of the major and minor
version numbers and any other text contained in the version.
"""
- exp = config.API_config_expiry # expire immediately to get
- config.API_config_expiry = 0 # 'live' (!) version data
+ if force:
+ self._getsiteinfo(force=True) # drop/expire cache and reload
versionstring = self.siteinfo['generator']
- config.API_config_expiry = exp
m = re.match(r"^MediaWiki ([0-9]+)\.([0-9]+)(.*)$", versionstring)
if m:
return (int(m.group(1)), int(m.group(2)), m.group(3))