X-Git-Url: https://scripts.mit.edu/gitweb/wizard.git/blobdiff_plain/b84acc9f7652f8f5b11a92df8852e898a4c81589..c1b068b03a604652f3eb284fdb92bcb1171d9601:/wizard/sql.py diff --git a/wizard/sql.py b/wizard/sql.py index f19f5e3..548d8a6 100644 --- a/wizard/sql.py +++ b/wizard/sql.py @@ -1,5 +1,7 @@ import sqlalchemy import os +import pkg_resources +import copy from wizard import shell @@ -14,10 +16,13 @@ def connect(url): meta.reflect() return meta -def fill_url(url): +def auth(url): """ If the URL has a database name but no other values, it will use the global configuration, and then try the database name. + + This function implements a plugin interface named + :ref:`wizard.sql.auth`. """ if not url: return None @@ -28,13 +33,12 @@ def fill_url(url): if any((url.host, url.username, url.password)): # don't try for defaults if a few of these were set return url - # this is hook stuff - if url.driver == "mysql": - try: - url.host, url.username, url.password = shell.Shell().eval("/mit/scripts/sql/bin/get-password").split() - return url - except shell.CallError: - pass + for entry in pkg_resources.iter_entry_points("wizard.sql.auth"): + func = entry.load() + r = func(copy.copy(url)) + print r + if r is not None: + return r env_dsn = os.getenv("WIZARD_DSN") if env_dsn: old_url = url