import re import distutils.version import os import datetime import logging import shlex import shutil from wizard import app, deploy, install, scripts, shell, util from wizard.app import php def make_filename_regex(var): return 'LocalSettings.php', re.compile('^(\$' + app.expand_re(var) + r'''\s*=\s*)(.*)(;)''', re.M) make_extractor = app.filename_regex_extractor(make_filename_regex) make_substitution = app.filename_regex_substitution(make_filename_regex) seed = { 'WIZARD_IP': 'IP', # obsolete, remove after we're done 'WIZARD_SITENAME': 'wgSitename', 'WIZARD_SCRIPTPATH': 'wgScriptPath', 'WIZARD_EMERGENCYCONTACT': ('wgEmergencyContact', 'wgPasswordSender'), 'WIZARD_DBSERVER': 'wgDBserver', 'WIZARD_DBNAME': 'wgDBname', 'WIZARD_DBUSER': 'wgDBuser', 'WIZARD_DBPASSWORD': 'wgDBpassword', 'WIZARD_SECRETKEY': ('wgSecretKey', 'wgProxyKey'), } class Application(deploy.Application): parametrized_files = ['LocalSettings.php', 'php.ini'] deprecated_keys = set(['WIZARD_IP']) | php.deprecated_keys @property def extractors(self): if not self._extractors: self._extractors = util.dictmap(make_extractor, seed) self._extractors.update(php.extractors) return self._extractors @property def substitutions(self): if not self._substitutions: self._substitutions = util.dictkmap(make_substitution, seed) self._substitutions.update(php.substitutions) return self._substitutions @property def install_handler(self): handler = install.ArgHandler("mysql", "admin", "email") handler.add(install.Arg("title", help="Title of your new MediaWiki install")) return handler def checkConfig(self, deployment): return os.path.isfile(os.path.join(deployment.location, "LocalSettings.php")) def detectVersion(self, deployment): contents = deployment.read("includes/DefaultSettings.php") regex = make_filename_regex("wgVersion")[1] match = regex.search(contents) if not match: return None return distutils.version.LooseVersion(match.group(2)[1:-1]) def checkWeb(self, d, out=None): page = d.fetch("/index.php?title=Main_Page") if type(out) is list: out.append(page) return page.find("