jenkins-bot has submitted this change and it was merged.
Change subject: [PEP8] changes ......................................................................
[PEP8] changes
Change-Id: If89abf69b9199fd7cee5e76e6c3d269404783664 --- M generate_family_file.py 1 file changed, 95 insertions(+), 55 deletions(-)
Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
diff --git a/generate_family_file.py b/generate_family_file.py index 1607ead..8a01e1f 100644 --- a/generate_family_file.py +++ b/generate_family_file.py @@ -4,17 +4,19 @@ Hackish, etc. Regexps, yes. Sorry, jwz.
""" -__version__ = "$Id$" - # -# (C) Merlijn van Deen, 2010 -# (C) Pywikipedia bot team, 2010 +# (C) Merlijn van Deen, 2010-2013 +# (C) Pywikibot team, 2010-2013 # # Distributed under the terms of the MIT license # +__version__ = "$Id$" +#
# system imports -import sys, re +import sys +import re +import os import codecs from distutils.version import LooseVersion as V
@@ -24,8 +26,12 @@ # retrieving urls import urllib2 from urllib2 import HTTPError + + def urlopen(url): - req = urllib2.Request(url, headers = {'User-agent': 'Pywikipedia family generator 0.1 - pywikipediabot.sf.net'}) + req = urllib2.Request( + url, + headers={'User-agent': 'Pywikibot family generator 0.1 - pywikipediabot.sf.net'}) return urllib2.urlopen(req)
# Monkey-patching wikipediatools to prevent questions about user_config.py @@ -33,13 +39,11 @@ wikipediatools.get_base_dir = lambda: '.'
# Set some config settings, but monkey-patch os.path.exists to prevent loading user_config.py -import os oldexists = os.path.exists os.path.exists = lambda x: False
import config config.mylang = 'en' - os.path.exists = oldexists
# Now we can boot the framework @@ -55,18 +59,19 @@ except ImportError: import simplejson as json
+ class FamilyFileGenerator(object): def __init__(self, url=None, name=None, dointerwiki=None): - if url == None: + if url is None: url = raw_input("Please insert URL to wiki: ") - if name == None: + if name is None: name = raw_input("Please insert a short name (eg: freeciv): ") self.dointerwiki = dointerwiki self.base_url = url self.name = name
- self.wikis = {} # {'http://wiki/$1': Wiki('http://wiki/$1'), ...} - self.langs = [] # [Wiki('http://wiki/$1'), ...] + self.wikis = {} # {'http://wiki/$1': Wiki('http://wiki/$1'), ...} + self.langs = [] # [Wiki('http://wiki/$1'), ...]
self.namespaces = NamespaceStorage()
@@ -90,10 +95,14 @@ def getlangs(self, w): print "Determining other languages...", try: - iw = json.load(urlopen(w.api + "?action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local&format=json")) + iw = json.load(urlopen( + w.api + + "?action=query&meta=siteinfo&siprop=interwikimap&sifilteriw=local&format=json")) if 'error' in iw: - raise RuntimeError ('%s - %s' % (iw['error']['code'], iw['error']['info'])) - self.langs = [wiki for wiki in iw['query']['interwikimap'] if u'language' in wiki] + raise RuntimeError('%s - %s' % (iw['error']['code'], + iw['error']['info'])) + self.langs = [wiki for wiki in iw['query']['interwikimap'] + if u'language' in wiki] print u' '.join(sorted([wiki[u'prefix'] for wiki in self.langs])) except HTTPError, e: self.langs = [] @@ -106,20 +115,25 @@ u'url': w.iwpath})
if len(self.langs) > 1: - if self.dointerwiki is None: - makeiw = raw_input("\nThere are %i languages available.\nDo you want to generate interwiki links? This might take a long time. ([y]es/[N]o/[e]dit)" % len(self.langs)).lower() - else: - makeiw = self.dointerwiki - - if makeiw == "y": - pass - elif makeiw == "e": - for wiki in self.langs: - print wiki['prefix'], wiki['url'] - do_langs = raw_input("Which languages do you want: ") - self.langs = [wiki for wiki in self.langs if wiki['prefix'] in do_langs or wiki['url'] == w.iwpath] - else: - self.langs = [wiki for wiki in self.langs if wiki[u'url'] == w.iwpath] + if self.dointerwiki is None: + makeiw = raw_input( + "\nThere are %i languages available.\nDo you want to generate interwiki links? This might take a long time. ([y]es/[N]o/[e]dit)" + % len(self.langs)).lower() + else: + makeiw = self.dointerwiki + + if makeiw == "y": + pass + elif makeiw == "e": + for wiki in self.langs: + print wiki['prefix'], wiki['url'] + do_langs = raw_input("Which languages do you want: ") + self.langs = [wiki for wiki in self.langs + if wiki['prefix'] in do_langs + or wiki['url'] == w.iwpath] + else: + self.langs = [wiki for wiki in self.langs + if wiki[u'url'] == w.iwpath]
def getapis(self): print "Loading wikis... " @@ -151,10 +165,11 @@ print "Writing %s... " % fn try: open(fn) - if raw_input("%s already exists. Overwrite? (y/n)" % fn).lower() == 'n': + if raw_input("%s already exists. Overwrite? (y/n)" + % fn).lower() == 'n': print "Terminating." sys.exit(1) - except IOError: # file not found + except IOError: # file not found pass f = codecs.open(fn, 'w', 'utf-8')
@@ -179,7 +194,8 @@ """.lstrip() % {'url': self.base_url, 'name': self.name})
for w in self.wikis.itervalues(): - f.write(" '%(lang)s': '%(hostname)s',\n" % {'lang': w.lang, 'hostname': urlparse(w.server).netloc}) + f.write(" '%(lang)s': '%(hostname)s',\n" + % {'lang': w.lang, 'hostname': urlparse(w.server).netloc})
f.write(" }\n\n")
@@ -190,18 +206,21 @@ f.write(" return {\n")
for w in self.wikis.itervalues(): - f.write(" '%(lang)s': '%(path)s',\n" % {'lang': w.lang, 'path': w.scriptpath}) + f.write(" '%(lang)s': '%(path)s',\n" + % {'lang': w.lang, 'path': w.scriptpath}) f.write(" }[code]\n") f.write("\n")
f.write(" def version(self, code):\n") f.write(" return {\n") for w in self.wikis.itervalues(): - if w.version == None: + if w.version is None: f.write(" '%(lang)s': None,\n" % {'lang': w.lang}) else: - f.write(" '%(lang)s': u'%(ver)s',\n" % {'lang': w.lang, 'ver': w.version}) + f.write(" '%(lang)s': u'%(ver)s',\n" + % {'lang': w.lang, 'ver': w.version}) f.write(" }[code]\n") +
class NamespaceStorage(object): def __init__(self): @@ -209,9 +228,13 @@ self.f = family.Family()
def addfromwiki(self, w): - jdata = json.load(urlopen(w.api + "?action=query&format=json&meta=siteinfo&siprop=namespaces|namespacealiases")) + jdata = json.load(urlopen( + w.api + + "?action=query&format=json&meta=siteinfo&siprop=namespaces|namespacealiases")) if 'query' not in jdata: - jdata = json.load(urlopen(w.api + "?action=query&format=json&meta=siteinfo&siprop=namespaces")) + jdata = json.load(urlopen( + w.api + + "?action=query&format=json&meta=siteinfo&siprop=namespaces")) if 'query' not in jdata: jdata = {'query': {}} # empty
@@ -227,15 +250,19 @@ for ns in data['namespacealiases']: self.add(ns['id'], w.lang, ns['*']) else: - print "\n*** Notice: cannot retrieve namespace aliases for %s" % w.lang + print("\n*** Notice: cannot retrieve namespace aliases for %s" + % w.lang)
def add(self, ns, lang, translation): - """ Contains logic for determining whether to define a namespace or not """ + """ Contains logic for determining whether to define a namespace or not + + """ ns = int(ns) - if ns == 0: # never translate the article namespace + if ns == 0: # never translate the article namespace return try: - if translation != self.f.namespace(lang, ns): # self.f.namespace might return KeyError itself + # self.f.namespace might return KeyError itself + if translation != self.f.namespace(lang, ns): raise KeyError except KeyError: self._store(ns, lang, translation) @@ -248,11 +275,13 @@ data = "" for nsid, langs in self.nsinfo.iteritems(): data += " " * indent - data += "self.namespaces[%(nsid)i] = self.namespaces.get(%(nsid)i, {})" % locals() + data += ("self.namespaces[%(nsid)i] = self.namespaces.get(%(nsid)i, {})" + % locals()) data += "\n" for lang, translations in langs.iteritems(): data += " " * indent - data += "self.namespaces[%(nsid)i][%(lang)r] = %(translations)r" % locals() + data += ("self.namespaces[%(nsid)i][%(lang)r] = %(translations)r" + % locals()) data += "\n" return data
@@ -268,7 +297,7 @@ def __init__(self, fromurl): self.fromurl = fromurl if fromurl.endswith("$1"): - fromurl = fromurl[:-2] + fromurl = fromurl[:-2] try: data = urlopen(fromurl).read() except HTTPError, e: @@ -279,7 +308,10 @@
bs = BeautifulSoup(data) try: - self.version = bs.find("meta", attrs={'name': "generator"})['content'].replace("MediaWiki ", "") + self.version = bs.find( + "meta", + attrs={'name': "generator"})['content'].replace("MediaWiki ", + "") except Exception: self.version = "0.0"
@@ -290,7 +322,8 @@
def _parse_pre_117(self, data): if not self.REwgEnableApi.search(data): - print "*** WARNING: Api does not seem to be enabled on %s" % self.fromurl + print("*** WARNING: Api does not seem to be enabled on %s" + % self.fromurl) try: self.version = self.REwgVersion.search(data).groups()[0] except AttributeError: @@ -301,42 +334,49 @@ self.articlepath = self.REwgArticlePath.search(data).groups()[0] self.lang = self.REwgContentLanguage.search(data).groups()[0]
- if self.version == None: + if self.version is None: # try to get version using api try: d = json.load(urlopen(self.api + "?version&format=json")) - self.version = filter(lambda x: x.startswith("MediaWiki"), [l.strip() for l in d['error']['*'].split("\n")])[0].split()[1] + self.version = filter( + lambda x: x.startswith("MediaWiki"), + [l.strip() + for l in d['error']['*'].split("\n")])[0].split()[1] except Exception: pass
def _parse_post_117(self, bs, fromurl): apipath = bs.find("link", rel='EditURI')['href'].split("?")[0] fullurl = urljoin(fromurl, apipath) - info = json.load(urlopen(fullurl + "?action=query&meta=siteinfo&format=json"))['query']['general'] + info = json.load(urlopen( + fullurl + + "?action=query&meta=siteinfo&format=json"))['query']['general']
self.server = urljoin(fromurl, info['server']) for item in ['scriptpath', 'articlepath', 'lang']: setattr(self, item, info[item])
def __cmp__(self, other): - return (self.server + self.scriptpath == other.server + other.scriptpath) + return (self.server + self.scriptpath == + other.server + other.scriptpath)
def __hash__(self): return hash(self.server + self.scriptpath)
@property def api(self): - return self.server + self.scriptpath + "/api.php" + return self.server + self.scriptpath + "/api.php"
@property def iwpath(self): - return self.server + self.articlepath + return self.server + self.articlepath
if __name__ == "__main__": if len(sys.argv) != 3: - print "Usage: %s <url> <short name>" % sys.argv[0] - print "Example: %s http://www.mywiki.bogus/wiki/Main_Page mywiki" % sys.argv[0] - print "This will create the file families/mywiki_family.py" + print("Usage: %s <url> <short name>" % sys.argv[0]) + print("Example: %s http://www.mywiki.bogus/wiki/Main_Page mywiki" + % sys.argv[0]) + print("This will create the file families/mywiki_family.py")
FamilyFileGenerator(*sys.argv[1:]).run()
pywikibot-commits@lists.wikimedia.org