mirror of https://github.com/dbcli/pgcli
Merge 90bd5c7ed8
into 13ca7d2430
This commit is contained in:
commit
c279396565
1
AUTHORS
1
AUTHORS
|
@ -129,6 +129,7 @@ Contributors:
|
|||
* Damien Baty (dbaty)
|
||||
* blag
|
||||
* Rob Berry (rob-b)
|
||||
* A23187 (A-23187)
|
||||
|
||||
Creator:
|
||||
--------
|
||||
|
|
|
@ -59,6 +59,7 @@ Internal:
|
|||
|
||||
* Port to psycopg3 (https://github.com/psycopg/psycopg).
|
||||
* Fix typos
|
||||
* Add support for overriding DSN connection information
|
||||
|
||||
3.4.1 (2022/03/19)
|
||||
==================
|
||||
|
|
|
@ -551,8 +551,8 @@ class PGCli:
|
|||
passwd=service_config.get("password"),
|
||||
)
|
||||
|
||||
def connect_uri(self, uri):
|
||||
kwargs = conninfo_to_dict(uri)
|
||||
def connect_uri(self, uri, **kwargs):
|
||||
kwargs = conninfo_to_dict(uri, **kwargs)
|
||||
remap = {"dbname": "database", "password": "passwd"}
|
||||
kwargs = {remap.get(k, k): v for k, v in kwargs.items()}
|
||||
self.connect(**kwargs)
|
||||
|
@ -1373,7 +1373,9 @@ class PGCli:
|
|||
)
|
||||
@click.argument("dbname", default=lambda: None, envvar="PGDATABASE", nargs=1)
|
||||
@click.argument("username", default=lambda: None, envvar="PGUSER", nargs=1)
|
||||
@click.pass_context
|
||||
def cli(
|
||||
ctx,
|
||||
dbname,
|
||||
username_opt,
|
||||
host,
|
||||
|
@ -1489,7 +1491,21 @@ def cli(
|
|||
fg="red",
|
||||
)
|
||||
exit(1)
|
||||
pgcli.connect_uri(dsn_config)
|
||||
kwargs = {
|
||||
"host": host,
|
||||
"port": port,
|
||||
"username_opt": username_opt,
|
||||
"dbname_opt": dbname_opt,
|
||||
}
|
||||
remap = {"username_opt": "user", "dbname_opt": "dbname"}
|
||||
kwargs = {
|
||||
remap.get(k, k): v
|
||||
for k, v in kwargs.items()
|
||||
if ctx.get_parameter_source(k) is click.core.ParameterSource.COMMANDLINE
|
||||
}
|
||||
if prompt_passwd:
|
||||
kwargs["password"] = ""
|
||||
pgcli.connect_uri(dsn_config, **kwargs)
|
||||
pgcli.dsn_alias = dsn
|
||||
elif "://" in database:
|
||||
pgcli.connect_uri(database)
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
from unittest.mock import patch
|
||||
|
||||
from click.testing import CliRunner
|
||||
|
||||
from pgcli.main import PGCli, cli
|
||||
|
||||
|
||||
def test_dsn_override(tmpdir):
|
||||
old_dsn = "postgresql://old_user:password@old_host:5432/old_db"
|
||||
new_host = "new_host"
|
||||
new_port = 5555
|
||||
new_user = "new_user"
|
||||
new_dbname = "new_db"
|
||||
|
||||
pgclirc = tmpdir.join("rcfile")
|
||||
pgclirc.write(f"[alias_dsn]\ndsn = {old_dsn}")
|
||||
|
||||
with patch.object(
|
||||
PGCli, "connect_uri", autospec=True, return_value=None
|
||||
) as mock_connect_uri:
|
||||
CliRunner().invoke(
|
||||
cli,
|
||||
[
|
||||
"--pgclirc", str(pgclirc),
|
||||
"-D", "dsn",
|
||||
"-h", new_host,
|
||||
"-p", new_port,
|
||||
"-u", new_user,
|
||||
"-d", new_dbname,
|
||||
"-W",
|
||||
],
|
||||
)
|
||||
|
||||
mock_connect_uri.assert_called_once()
|
||||
args, kwargs = mock_connect_uri.call_args
|
||||
assert args[1] == old_dsn
|
||||
assert kwargs["host"] == new_host
|
||||
assert kwargs["port"] == new_port
|
||||
assert kwargs["user"] == new_user
|
||||
assert kwargs["dbname"] == new_dbname
|
||||
assert kwargs["password"] == ""
|
Loading…
Reference in New Issue