From eafd6139bb34d24839970e1a807e8ef1ef130b8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?= Date: Thu, 11 Sep 2025 09:26:32 -0600 Subject: [PATCH 1/4] refactor: Update Singer SDK imports --- pyproject.toml | 2 +- uv.lock | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 9b263d01..ce0afb13 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,7 @@ dependencies = [ "psycopg2-binary==2.9.10", "sqlalchemy==2.0.43", "sshtunnel==0.4.0", - "singer-sdk[faker]~=0.49.0", + "singer-sdk[faker,sql]~=0.49.0", ] [project.urls] diff --git a/uv.lock b/uv.lock index 05ce88d9..c2583893 100644 --- a/uv.lock +++ b/uv.lock @@ -501,7 +501,7 @@ source = { editable = "." } dependencies = [ { name = "paramiko" }, { name = "psycopg2-binary" }, - { name = "singer-sdk", extra = ["faker"] }, + { name = "singer-sdk", extra = ["faker", "sql"] }, { name = "sqlalchemy" }, { name = "sshtunnel" }, ] @@ -540,7 +540,7 @@ typing = [ requires-dist = [ { name = "paramiko", specifier = ">=3,<4" }, { name = "psycopg2-binary", specifier = "==2.9.10" }, - { name = "singer-sdk", extras = ["faker"], specifier = "~=0.49.0" }, + { name = "singer-sdk", extras = ["faker", "sql"], specifier = "~=0.49.0" }, { name = "sqlalchemy", specifier = "==2.0.43" }, { name = "sshtunnel", specifier = "==0.4.0" }, ] @@ -1134,6 +1134,9 @@ wheels = [ faker = [ { name = "faker" }, ] +sql = [ + { name = "sqlalchemy" }, +] testing = [ { name = "pytest" }, ] From 07fcf1d4e66f8110c1d368ef5a7be2aba0c76e4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?= Date: Thu, 11 Sep 2025 13:48:29 -0600 Subject: [PATCH 2/4] Update imports --- tap_postgres/client.py | 4 ++-- tap_postgres/tap.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tap_postgres/client.py b/tap_postgres/client.py index f6a216fc..75651f3d 100644 --- a/tap_postgres/client.py +++ b/tap_postgres/client.py @@ -17,10 +17,10 @@ import sqlalchemy as sa import sqlalchemy.types from psycopg2 import extras -from singer_sdk import SQLConnector, SQLStream -from singer_sdk.connectors.sql import SQLToJSONSchema from singer_sdk.helpers._state import increment_state from singer_sdk.helpers._typing import TypeConformanceLevel +from singer_sdk.sql import SQLConnector, SQLStream +from singer_sdk.sql.connector import SQLToJSONSchema from sqlalchemy.dialects import postgresql if t.TYPE_CHECKING: diff --git a/tap_postgres/tap.py b/tap_postgres/tap.py index c89ddd91..1664fb73 100644 --- a/tap_postgres/tap.py +++ b/tap_postgres/tap.py @@ -12,9 +12,10 @@ from typing import TYPE_CHECKING, Any, cast import paramiko -from singer_sdk import SQLStream, SQLTap, Stream +from singer_sdk import Stream from singer_sdk import typing as th # JSON schema typing helpers from singer_sdk.singerlib import Catalog, Metadata, Schema +from singer_sdk.sql import SQLStream, SQLTap from sqlalchemy.engine import URL from sqlalchemy.engine.url import make_url from sshtunnel import SSHTunnelForwarder From e720cac8511556a4219a279f0402e48051a3b782 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?= Date: Thu, 11 Sep 2025 15:47:28 -0600 Subject: [PATCH 3/4] test: Fail on warnings --- pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index ce0afb13..fa421db3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -132,3 +132,6 @@ convention = "google" [tool.pytest.ini_options] addopts = '--durations=10' +filterwarnings = [ + "error", +] From 30cf2eb24462d95deeba688e82332b19146d2364 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edgar=20Ram=C3=ADrez=20Mondrag=C3=B3n?= Date: Thu, 11 Sep 2025 15:50:01 -0600 Subject: [PATCH 4/4] Fix deprecation warning --- tap_postgres/tap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tap_postgres/tap.py b/tap_postgres/tap.py index 1664fb73..60fda64f 100644 --- a/tap_postgres/tap.py +++ b/tap_postgres/tap.py @@ -500,7 +500,7 @@ def ssh_tunnel_connect(self, *, ssh_config: dict[str, Any], url: URL) -> URL: self.ssh_tunnel: SSHTunnelForwarder = SSHTunnelForwarder( ssh_address_or_host=(ssh_config["host"], ssh_config["port"]), ssh_username=ssh_config["username"], - ssh_private_key=self.guess_key_type(ssh_config["private_key"]), + ssh_pkey=self.guess_key_type(ssh_config["private_key"]), ssh_private_key_password=ssh_config.get("private_key_password"), remote_bind_address=(url.host, url.port), )