jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/463441 )
Change subject: Fix diff_checker related errors in Python files of the root directory ......................................................................
Fix diff_checker related errors in Python files of the root directory
Rewrite generate_family_file.FamilyFileGenerator.writefile to use family_template in order to be more readable.
Change-Id: Ifd7cc067d2b176d369512de4ada1da95ccab202f --- M ez_setup.py M generate_family_file.py M generate_user_files.py M tox.ini 4 files changed, 96 insertions(+), 87 deletions(-)
Approvals: Xqt: Looks good to me, approved jenkins-bot: Verified
diff --git a/ez_setup.py b/ez_setup.py index a11e42f..b7d33e9 100644 --- a/ez_setup.py +++ b/ez_setup.py @@ -173,7 +173,7 @@
try: import pkg_resources - pkg_resources.require("setuptools>=" + version) + pkg_resources.require('setuptools>=' + version) # a suitable version is already installed return except ImportError: @@ -249,8 +249,8 @@ """ target = os.path.abspath(target) ps_cmd = ( - "[System.Net.WebRequest]::DefaultWebProxy.Credentials = " - "[System.Net.CredentialCache]::DefaultCredentials; " + '[System.Net.WebRequest]::DefaultWebProxy.Credentials = ' + '[System.Net.CredentialCache]::DefaultCredentials; ' '(new-object System.Net.WebClient).DownloadFile("%(url)s", "%(target)s")' % locals() ) @@ -318,7 +318,7 @@ src.close()
# Write all the data in one block to avoid creating a partial file. - with open(target, "wb") as dst: + with open(target, 'wb') as dst: dst.write(data) download_file_insecure.viable = lambda: True
@@ -352,11 +352,11 @@ """ # making sure we use the absolute path to_dir = os.path.abspath(to_dir) - zip_name = "setuptools-%s.zip" % version + zip_name = 'setuptools-%s.zip' % version url = download_base + zip_name saveto = os.path.join(to_dir, zip_name) if not os.path.exists(saveto): # Avoid repeated downloads - log.warn("Downloading %s", url) + log.warn('Downloading %s', url) downloader = downloader_factory() downloader(url, saveto) return os.path.realpath(saveto) @@ -378,7 +378,7 @@ '--user', dest='user_install', action='store_true', default=False, help='install in user site package') parser.add_option( - '--download-base', dest='download_base', metavar="URL", + '--download-base', dest='download_base', metavar='URL', default=DEFAULT_URL, help='alternative URL from where to download the setuptools package') parser.add_option( diff --git a/generate_family_file.py b/generate_family_file.py index 0a390c7..63eba9e 100755 --- a/generate_family_file.py +++ b/generate_family_file.py @@ -31,9 +31,9 @@ def __init__(self, url=None, name=None, dointerwiki=None): """Initializer.""" if url is None: - url = raw_input("Please insert URL to wiki: ") + url = raw_input('Please insert URL to wiki: ') if name is None: - name = raw_input("Please insert a short name (eg: freeciv): ") + name = raw_input('Please insert a short name (eg: freeciv): ') self.dointerwiki = dointerwiki self.base_url = url self.name = name @@ -43,16 +43,14 @@
def run(self): """Main method, generate family file.""" - print("Generating family file from %s" % self.base_url) + print('Generating family file from ' + self.base_url)
w = Wiki(self.base_url) self.wikis[w.lang] = w - print() - print("==================================") - print("api url: %s" % w.api) - print("MediaWiki version: %s" % w.version) - print("==================================") - print() + print('\n==================================' + '\napi url: {w.api}' + '\nMediaWiki version: {w.version}' + '\n==================================\n'.format(w=w))
self.getlangs(w) self.getapis() @@ -60,76 +58,103 @@
def getlangs(self, w): """Determine language of a site.""" - print("Determining other languages...", end="") + print('Determining other languages...', end='') try: self.langs = w.langs print(' '.join(sorted(wiki['prefix'] for wiki in self.langs))) except Exception as e: self.langs = [] - print(e, "; continuing...") + print(e, '; continuing...')
if len([lang for lang in self.langs if lang['url'] == w.iwpath]) == 0: if w.private_wiki: w.lang = self.name - self.langs.append({u'language': w.lang, - u'local': u'', - u'prefix': w.lang, - u'url': w.iwpath}) + self.langs.append({'language': w.lang, + 'local': '', + 'prefix': w.lang, + 'url': w.iwpath})
if len(self.langs) > 1: if self.dointerwiki is None: makeiw = raw_input( - "\nThere are %i languages available." + '\nThere are %i languages available.' '\nDo you want to generate interwiki links? ' - "This might take a long time. ([y]es/[N]o/[e]dit)" + 'This might take a long time. ([y]es/[N]o/[e]dit)' % len(self.langs)).lower() else: makeiw = self.dointerwiki
- if makeiw == "y": + if makeiw == 'y': pass - elif makeiw == "e": + elif makeiw == 'e': for wiki in self.langs: print(wiki['prefix'], wiki['url']) - do_langs = raw_input("Which languages do you want: ") + 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 wiki['url'] == w.iwpath]
def getapis(self): """Load other language pages.""" - print("Loading wikis... ") + print('Loading wikis... ') for lang in self.langs: - print(" * %s... " % (lang[u'prefix']), end="") + print(' * %s... ' % (lang['prefix']), end='') if lang['prefix'] not in self.wikis: try: self.wikis[lang['prefix']] = Wiki(lang['url']) - print("downloaded") + print('downloaded') except Exception as e: print(e) else: - print("in cache") + print('in cache')
def writefile(self): """Write the family file.""" fn = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'pywikibot', 'families', '{}_family.py'.format(self.name)) - print("Writing %s... " % fn) + print('Writing %s... ' % fn) try: open(fn) - if raw_input("%s already exists. Overwrite? (y/n)" + if raw_input('%s already exists. Overwrite? (y/n)' % fn).lower() == 'n': - print("Terminating.") + print('Terminating.') sys.exit(1) except IOError: # file not found pass - f = codecs.open(fn, 'w', 'utf-8')
- f.write(""" + code_hostname_pairs = '\n '.join( + "'{code}': '{hostname}',".format( + code=k, hostname=urlparse(w.server).netloc + ) for k, w in self.wikis.items()) + + code_path_pairs = '\n '.join( + "'{code}': '{path}',".format(code=k, path=w.scriptpath) + for k, w in self.wikis.items()) + + code_version_pairs = '\n '.join( + "'{code}': None,".format(code=k) if w.version is None else + "'{code}': '{version}',".format(code=k, version=w.version) + for k, w in self.wikis.items()) + + code_protocol_pairs = '\n '.join( + "'{code}': '{protocol}',".format( + code=k, protocol=urlparse(w.server).scheme + ) for k, w in self.wikis.items()) + + with codecs.open(fn, 'w', 'utf-8') as fh: + fh.write(family_template % { + 'url': self.base_url, 'name': self.name, + 'code_hostname_pairs': code_hostname_pairs, + 'code_path_pairs': code_path_pairs, + 'code_version_pairs': code_version_pairs, + 'code_protocol_pairs': code_protocol_pairs}) + + +family_template = """\ # -*- coding: utf-8 -*- """ This family file was auto-generated by generate_family_file.py script. @@ -150,40 +175,25 @@
name = '%(name)s' langs = { -""".lstrip() % {'url': self.base_url, 'name': self.name}) + %(code_hostname_pairs)s + }
- for k, w in self.wikis.items(): - f.write(" '%(lang)s': '%(hostname)s',\n" - % {'lang': k, 'hostname': urlparse(w.server).netloc}) + def scriptpath(self, code): + return { + %(code_path_pairs)s + }[code]
- f.write(' }\n\n') - f.write(" def scriptpath(self, code):\n") - f.write(" return {\n") + @deprecated('APISite.version()') + def version(self, code): + return { + %(code_version_pairs)s + }[code]
- for k, w in self.wikis.items(): - f.write(" '%(lang)s': '%(path)s',\n" - % {'lang': k, 'path': w.scriptpath}) - f.write(" }[code]\n") - f.write("\n") - - f.write(" @deprecated('APISite.version()')\n") - f.write(" def version(self, code):\n") - f.write(" return {\n") - for k, w in self.wikis.items(): - if w.version is None: - f.write(" '%(lang)s': None,\n" % {'lang': k}) - else: - f.write(" '%(lang)s': u'%(ver)s',\n" - % {'lang': k, 'ver': w.version}) - f.write(" }[code]\n") - - f.write("\n") - f.write(" def protocol(self, code):\n") - f.write(" return {\n") - for k, w in self.wikis.items(): - f.write(" '%(lang)s': u'%(protocol)s',\n" - % {'lang': k, 'protocol': urlparse(w.server).scheme}) - f.write(" }[code]\n") + def protocol(self, code): + return { + %(code_protocol_pairs)s + }[code] +"""
def _import_with_no_user_config(*import_args): @@ -200,7 +210,7 @@ return result
-if __name__ == "__main__": +if __name__ == '__main__': # Disable user-config checks so the family can be created first, # and then used when generating the user-config Wiki = _import_with_no_user_config( diff --git a/generate_user_files.py b/generate_user_files.py index 7f642a31..1a40c99 100755 --- a/generate_user_files.py +++ b/generate_user_files.py @@ -41,7 +41,7 @@ pywikibot_dir = sys.path[0]
if console_encoding is None or sys.platform == 'cygwin': - console_encoding = "iso-8859-1" + console_encoding = 'iso-8859-1'
USER_BASENAME = 'user-config.py' PASS_BASENAME = 'user-password.py' @@ -50,24 +50,24 @@ def change_base_dir(): """Create a new user directory.""" while True: - new_base = pywikibot.input("New user directory? ") + new_base = pywikibot.input('New user directory? ') new_base = os.path.abspath(new_base) if os.path.exists(new_base): if os.path.isfile(new_base): - pywikibot.error("there is an existing file with that name.") + pywikibot.error('there is an existing file with that name.') continue # make sure user can read and write this directory if not os.access(new_base, os.R_OK | os.W_OK): - pywikibot.error("directory access restricted") + pywikibot.error('directory access restricted') continue - pywikibot.output("Using existing directory") + pywikibot.output('Using existing directory') else: try: os.mkdir(new_base, pywikibot.config2.private_files_permission) except Exception as e: pywikibot.error('directory creation failed: {0}'.format(e)) continue - pywikibot.output("Created new directory.") + pywikibot.output('Created new directory.') break
if new_base == pywikibot.config2.get_base_dir(new_base): @@ -83,7 +83,7 @@ pywikibot.output(msg) if pywikibot.input_yn('Is this OK?', default=False, automatic_quit=False): return new_base - pywikibot.output("Aborting changes.") + pywikibot.output('Aborting changes.') return False
@@ -115,14 +115,14 @@ if default_family not in known_families: default_family = None fam = pywikibot.bot.input_list_choice( - u"Select family of sites we are working on, " - u"just enter the number or name", + 'Select family of sites we are working on, ' + 'just enter the number or name', known_families, force=force, default=default_family) fam = pywikibot.family.Family.load(fam) - if hasattr(fam, "langs"): - if hasattr(fam, "languages_by_size"): + if hasattr(fam, 'langs'): + if hasattr(fam, 'languages_by_size'): by_size = [code for code in fam.languages_by_size if code in fam.langs.keys()] else: @@ -140,8 +140,8 @@ pywikibot.output('The only known language: {0}'.format(known_langs[0])) default_lang = known_langs[0] else: - pywikibot.output("This is the list of known languages:") - pywikibot.output(u", ".join(known_langs)) + pywikibot.output('This is the list of known languages:') + pywikibot.output(', '.join(known_langs)) if default_lang not in known_langs: if default_lang != 'en' and 'en' in known_langs: default_lang = 'en' @@ -356,7 +356,7 @@
try: # Finally save user-config.py - with codecs.open(_fnc, "w", "utf-8") as f: + with codecs.open(_fnc, 'w', 'utf-8') as f: f.write(config_content.format( main_family=main_family, main_code=main_code, @@ -365,7 +365,7 @@ botpasswords='password_file = ' + ('"{}"'.format(PASS_BASENAME) if botpasswords else 'None'))) - pywikibot.output(u"'%s' written." % _fnc) + pywikibot.output("'%s' written." % _fnc) except BaseException: if os.path.exists(_fnc): os.remove(_fnc) @@ -444,7 +444,7 @@ pywikibot.output('You can abort at any time by pressing ctrl-c') if config.mylang is not None: force = True - pywikibot.output(u'Automatically generating user-config.py') + pywikibot.output('Automatically generating user-config.py') else: force = False # Force default site of en.wikipedia diff --git a/tox.ini b/tox.ini index 996fea9..2ab13a8 100644 --- a/tox.ini +++ b/tox.ini @@ -143,8 +143,7 @@ require-code = true classmethod-decorators = classmethod,classproperty per-file-ignores = - generate_family_file.py : T001, Q000 - generate_user_files.py : Q000 + generate_family_file.py : T001 pwb.py : T001 # pydocstyle cannot handle multiple __all__ variables pywikibot/__init__.py : D999, N806, N802
pywikibot-commits@lists.wikimedia.org