Issue 1:
Really curious to explore this tool. Unfortunately, although my connection tests okay (Seems OK!), as soon as I save the db connection, and re-test it, the connection fails with a backtrace. I am suspecting a problem with the way that the encrypted password is stored.

I'm using OSX. Connection string is:

mysql://root:PASSWORD@{BLAH}.rds.amazonaws.com:3306/db_name

Seems OK!

Once I save the connection, the password displayed n the connection string changes to XXXXXXX, I can not see any tables from the db, and I get the following backtrace when trying to re-test the connection:

Traceback (most recent call last):

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/caravel/views.py", line 1029, in testconn

engine.connect()

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2018, in connect

return self._connection_cls(self, **kwargs)

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 72, in init

if connection is not None else engine.raw_connection()

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2104, in raw_connection

self.pool.unique_connection, _connection)

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2078, in _wrap_pool_connect

e, dialect, self)

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1405, in _handle_dbapi_exception_noconnection

exc_info

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 202, in raise_from_cause

reraise(type(exception), exception, tb=exc_tb, cause=cause)

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 2074, in _wrap_pool_connect

return fn()

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/pool.py", line 318, in unique_connection

return _ConnectionFairy._checkout(self)

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/pool.py", line 713, in _checkout

fairy = _ConnectionRecord.checkout(pool)

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/pool.py", line 480, in checkout

rec = pool._do_get()

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/pool.py", line 1060, in _do_get

self._dec_overflow()

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 60, in exit

compat.reraise(exc_type, exc_value, exc_tb)

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/pool.py", line 1057, in _do_get

return self._create_connection()

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/pool.py", line 323, in _create_connection

return _ConnectionRecord(self)

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/pool.py", line 449, in init

self.connection = self.**connect()

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/pool.py", line 607, in __connect

connection = self.__pool._invoke_creator(self)

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 97, in connect

return dialect.connect(_cargs, _cparams)

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 385, in connect

return self.dbapi.connect(_cargs, _cparams)

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/MySQLdb/__init.py", line 81, in Connect

return Connection(_args, *_kwargs)

File "/Users/jkeller/.virtualenvs/muck/lib/python2.7/site-packages/MySQLdb/connections.py", line 193, in init

super(Connection, self).init(_args, *_kwargs2)

OperationalError: (_mysql_exceptions.OperationalError) (1045, "Access denied for user 'root'@'10.0.3.253' (using password: YES)")

Issue 2:
Because the password is substituted with Xs. Could be an easy patch for someone willing to start contributing.