X-Git-Url: https://scripts.mit.edu/gitweb/wizard.git/blobdiff_plain/a40affcfa9e624ce6fd9ec4fd2508ed02ea9e0d6..769b3ff3da08e6c00b155d08da475807ad13dbae:/plugins/scripts/wizard_scripts.py?ds=sidebyside diff --git a/plugins/scripts/wizard_scripts.py b/plugins/scripts/wizard_scripts.py index b62f28c..10118c8 100644 --- a/plugins/scripts/wizard_scripts.py +++ b/plugins/scripts/wizard_scripts.py @@ -9,9 +9,10 @@ import logging import urlparse import time import errno +import sqlalchemy import wizard -from wizard import shell, util, user +from wizard import deploy, shell, install, util, user def deploy_web(dir): # try the directory @@ -113,7 +114,7 @@ def sql_auth(url): return None def user_email(name): - # XXX: simplistic strategy which doesn't work most of the time + # XXX: simplistic install which doesn't work most of the time return "%s@scripts.mit.edu" % name def user_operator(): @@ -150,3 +151,44 @@ def user_passwd(dir, uid): name, password, uid, gid, gecos, homedir, console = result.split(":") realname = gecos.split(",")[0] return user.Info(name, uid, gid, realname, homedir, console) + +class MysqlStrategy(install.Strategy): + """ + Performs scripts specific guesses for MySQL variables. This + may create an appropriate database for the user. + """ + side_effects = True + provides = frozenset(["dsn"]) + def prepare(self): + """Uses the SQL programs in the scripts locker""" + if self.application.database != "mysql": + raise install.StrategyFailed + try: + self._triplet = shell.eval("/mit/scripts/sql/bin/get-password").split() + except shell.CallError: + raise install.StrategyFailed + if len(self._triplet) != 3: + raise install.StrategyFailed + self._username = os.getenv('USER') + if self._username is None: + raise install.StrategyFailed + def execute(self, options): + """Creates a new database for the user using ``get-next-database`` and ``create-database``.""" + host, username, password = self._triplet + # race condition + name = shell.eval("/mit/scripts/sql/bin/get-next-database", os.path.basename(self.dir)) + database = shell.eval("/mit/scripts/sql/bin/create-database", name) + options.dsn = sqlalchemy.engine.url.URL("mysql", username=username, password=password, host=host, database=database) + +class EmailStrategy(install.Strategy): + """Performs script specific guess for email.""" + provides = frozenset(["email"]) + def prepare(self): + """Uses :envvar:`USER` and assumes you are an MIT affiliate.""" + # XXX: This might be buggy, because locker might be set to USER + self._user = os.getenv("USER") + if self._user is None: + raise install.StrategyFailed + def execute(self, options): + """No-op.""" + options.email = self._user + "@mit.edu"