-
Notifications
You must be signed in to change notification settings - Fork 11
Description
Describe the bug
The target docs say it accepts sqlalchemy_url which will override the other connection details but user and password are still required to run the tap.
sqlalchemy_url [env: TARGET_REDSHIFT__LOCALDEV_SQLALCHEMY_URL]
Sqlalchemy URL: SQLAlchemy connection string. This will override using host, user, password, port, dialect, and all ssl settings. Note that you must escape password special characters properly. See https://docs.sqlalchemy.org/en/20/core/engines.html#escaping-special-characters-such-as-signs-in-passwords
To Reproduce
- Configure the target with
sqlalchemy_url - Run the target (I used
tap-postgresandmeltano el) - Load fails with KeyError for
user
Expected behavior
Target uses credentials from sqlalchemy_url
Additional context
Traceback:
Traceback (most recent call last):
File "/project/.meltano/loaders/target-redshift/venv/bin/target-redshift", line 8, in <module>
sys.exit(TargetRedshift.cli())
File "/project/.meltano/loaders/target-redshift/venv/lib/python3.9/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
File "/project/.meltano/loaders/target-redshift/venv/lib/python3.9/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
File "/project/.meltano/loaders/target-redshift/venv/lib/python3.9/site-packages/singer_sdk/plugin_base.py", line 80, in invoke
return super().invoke(ctx)
File "/project/.meltano/loaders/target-redshift/venv/lib/python3.9/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/project/.meltano/loaders/target-redshift/venv/lib/python3.9/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
File "/project/.meltano/loaders/target-redshift/venv/lib/python3.9/site-packages/singer_sdk/target_base.py", line 571, in invoke
target.listen(file_input)
File "/project/.meltano/loaders/target-redshift/venv/lib/python3.9/site-packages/singer_sdk/_singerlib/encoding/_base.py", line 48, in listen
self._process_lines(file_input or self.default_input)
File "/project/.meltano/loaders/target-redshift/venv/lib/python3.9/site-packages/singer_sdk/target_base.py", line 307, in _process_lines
counter = super()._process_lines(file_input)
File "/project/.meltano/loaders/target-redshift/venv/lib/python3.9/site-packages/singer_sdk/_singerlib/encoding/_base.py", line 67, in _process_lines
self._process_schema_message(line_dict)
File "/project/.meltano/loaders/target-redshift/venv/lib/python3.9/site-packages/singer_sdk/target_base.py", line 422, in _process_schema_message
_ = self.get_sink(
File "/project/.meltano/loaders/target-redshift/venv/lib/python3.9/site-packages/singer_sdk/target_base.py", line 796, in get_sink
return self.add_sqlsink(stream_name, schema, key_properties)
File "/project/.meltano/loaders/target-redshift/venv/lib/python3.9/site-packages/singer_sdk/target_base.py", line 730, in add_sqlsink
sink.setup()
File "/project/.meltano/loaders/target-redshift/venv/lib/python3.9/site-packages/target_redshift/sinks.py", line 77, in setup
with self.connector._connect_cursor() as cursor:
File "/usr/local/lib/python3.9/contextlib.py", line 119, in __enter__
return next(self.gen)
File "/project/.meltano/loaders/target-redshift/venv/lib/python3.9/site-packages/target_redshift/connector.py", line 62, in _connect_cursor
user, password = self.get_credentials()
File "/project/.meltano/loaders/target-redshift/venv/lib/python3.9/site-packages/target_redshift/connector.py", line 521, in get_credentials
return self.config["user"], self.config["password"]
KeyError: 'user'
I believe this is happening because _connect_cursor is using get_credentials directly, but sqlalchemy_url is only used in get_sqlalchemy_url.
| user, password = self.get_credentials() |
target-redshift/target_redshift/connector.py
Line 470 in 11f06de
| if config.get("sqlalchemy_url"): |