X-Git-Url: https://scripts.mit.edu/gitweb/wizard.git/blobdiff_plain/927306192de34246cb2babe858262e8184a1b57d..ab821ded0093db5f0f2b70e161542292c4f5c7c5:/wizard/app/mediawiki.py diff --git a/wizard/app/mediawiki.py b/wizard/app/mediawiki.py index d0888e8..3fdec14 100644 --- a/wizard/app/mediawiki.py +++ b/wizard/app/mediawiki.py @@ -1,44 +1,72 @@ import re +import distutils.version import os +import datetime +import logging +import shlex +import shutil -from wizard import app, deploy, install, util +from wizard import app, deploy, install, scripts, shell, util from wizard.app import php def make_filename_regex(var): - return 'LocalSettings.php', re.compile('^(\$' + re.escape(var) + r'''\s*=\s*)(.*)(;)$''', re.M) + 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, - {'WIZARD_IP': 'IP' # obsolete, remove after we're done - ,'WIZARD_SITENAME': 'wgSitename' - ,'WIZARD_SCRIPTPATH': 'wgScriptPath' - ,'WIZARD_EMERGENCYCONTACT': 'wgEmergencyContact' - ,'WIZARD_DBSERVER': 'wgDBserver' - ,'WIZARD_DBNAME': 'wgDBname' - ,'WIZARD_DBUSER': 'wgDBuser' - ,'WIZARD_DBPASSWORD': 'wgDBpassword' - ,'WIZARD_PROXYKEY': 'wgProxyKey' - }) + 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 install(self, options): + 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("