Skip to content

Commit

Permalink
Merge branch 'main' into 2726-bug-json-schema-union-types-that-contai…
Browse files Browse the repository at this point in the history
…n-boolean-result-in-casting-json-objects-and-arrays-as-boolean-values
  • Loading branch information
edgarrmondragon authored Oct 23, 2024
2 parents f663771 + 3bb3e5f commit 4ffea35
Show file tree
Hide file tree
Showing 8 changed files with 40 additions and 26 deletions.
11 changes: 4 additions & 7 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ env:

jobs:
tests:
name: "Test on ${{ matrix.python-version }} (${{ matrix.session }}) / ${{ matrix.os }} / SQLAlchemy: ${{ matrix.sqlalchemy }}"
name: "Test on ${{ matrix.python-version }} (${{ matrix.session }}) / ${{ matrix.os }}"
runs-on: ${{ matrix.os }}
continue-on-error: true
env:
Expand All @@ -55,12 +55,10 @@ jobs:
- "3.11"
- "3.12"
- "3.13"
sqlalchemy: ["2"]
include:
- { session: tests, python-version: "3.13", os: "ubuntu-latest", sqlalchemy: "1" }
- { session: doctest, python-version: "3.13", os: "ubuntu-latest", sqlalchemy: "2" }
- { session: mypy, python-version: "3.12", os: "ubuntu-latest", sqlalchemy: "2" }
- { session: deps, python-version: "3.12", os: "ubuntu-latest", sqlalchemy: "2" }
- { session: doctest, python-version: "3.13", os: "ubuntu-latest" }
- { session: mypy, python-version: "3.12", os: "ubuntu-latest" }
- { session: deps, python-version: "3.12", os: "ubuntu-latest" }

steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -94,7 +92,6 @@ jobs:

- name: Run Nox
env:
SQLALCHEMY_VERSION: ${{ matrix.sqlalchemy }}
PIP_PRE: "1"
UV_PRERELEASE: allow
run: |
Expand Down
7 changes: 0 additions & 7 deletions noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,6 @@ def tests(session: nox.Session) -> None:
session.install(f".[{','.join(extras)}]")
session.install(*test_dependencies)

sqlalchemy_version = os.environ.get("SQLALCHEMY_VERSION")
if sqlalchemy_version:
session.install(f"sqlalchemy=={sqlalchemy_version}.*")

env = {"COVERAGE_CORE": "sysmon"} if session.python == "3.12" else {}

try:
Expand All @@ -103,9 +99,6 @@ def benches(session: nox.Session) -> None:
"""Run benchmarks."""
session.install(".[jwt,s3]")
session.install(*test_dependencies)
sqlalchemy_version = os.environ.get("SQLALCHEMY_VERSION")
if sqlalchemy_version:
session.install(f"sqlalchemy=={sqlalchemy_version}")
session.run(
"pytest",
"--benchmark-only",
Expand Down
22 changes: 22 additions & 0 deletions singer_sdk/connectors/sql.py
Original file line number Diff line number Diff line change
Expand Up @@ -982,6 +982,28 @@ def prepare_table(
self.to_sql_type(property_def),
)

self.prepare_primary_key(
full_table_name=full_table_name,
primary_keys=primary_keys,
)

def prepare_primary_key(
self,
*,
full_table_name: str | FullyQualifiedName, # noqa: ARG002
primary_keys: t.Sequence[str], # noqa: ARG002
) -> None:
"""Adapt target table primary key to provided schema if possible.
Implement this method in a subclass to adapt the primary key of the target table
to the provided one if possible.
Args:
full_table_name: the target table name.
primary_keys: list of key properties.
"""
self.logger.debug("Primary key adaptation is not implemented")

def prepare_column(
self,
full_table_name: str | FullyQualifiedName,
Expand Down
2 changes: 2 additions & 0 deletions singer_sdk/testing/suites.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
TargetInvalidSchemaTest,
TargetNoPrimaryKeys,
TargetOptionalAttributes,
TargetPrimaryKeyUpdates,
TargetRecordBeforeSchemaTest,
TargetRecordMissingKeyProperty,
TargetRecordMissingOptionalFields,
Expand Down Expand Up @@ -104,6 +105,7 @@ class TestSuite(t.Generic[T]):
# TargetMultipleStateMessages,
TargetNoPrimaryKeys,
TargetOptionalAttributes,
TargetPrimaryKeyUpdates,
TargetRecordBeforeSchemaTest,
TargetRecordMissingKeyProperty,
TargetRecordMissingOptionalFields,
Expand Down
4 changes: 4 additions & 0 deletions singer_sdk/testing/target_test_streams/pk_updates.singer
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{"type": "SCHEMA", "stream": "example_stream", "schema": {"properties": {"id": {"type": "integer"}, "name": {"type": "string"}, "email": {"type": "string"}}, "key_properties": ["id"]}}
{"type": "RECORD", "stream": "example_stream", "record": {"id": 1, "name": "Alice", "email": "[email protected]"}}
{"type": "SCHEMA", "stream": "example_stream", "schema": {"properties": {"id": {"type": "integer"}, "name": {"type": "string"}, "email": {"type": "string"}}, "key_properties": ["email"]}}
{"type": "RECORD", "stream": "example_stream", "record": {"id": 2, "name": "Bob", "email": "[email protected]"}}
6 changes: 6 additions & 0 deletions singer_sdk/testing/target_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,12 @@ class TargetSchemaUpdates(TargetFileTestTemplate):
name = "schema_updates"


class TargetPrimaryKeyUpdates(TargetFileTestTemplate):
"""Test Target handles Primary Key updates."""

name = "pk_updates"


class TargetSpecialCharsInAttributes(TargetFileTestTemplate):
"""Test Target handles special chars in attributes."""

Expand Down
6 changes: 0 additions & 6 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import typing as t

import pytest
import sqlalchemy as sa

from singer_sdk import SQLConnector
from singer_sdk import typing as th
Expand Down Expand Up @@ -44,11 +43,6 @@ def pytest_runtest_setup(item):
pytest.skip(f"cannot run on platform {system}")


def pytest_report_header() -> list[str]:
"""Return a list of strings to be displayed in the header of the report."""
return [f"sqlalchemy: {sa.__version__}"]


@pytest.fixture(autouse=True)
def _reset_envvars(monkeypatch: pytest.MonkeyPatch):
"""Remove envvars that might interfere with tests."""
Expand Down
8 changes: 2 additions & 6 deletions tests/core/test_connector_sql.py
Original file line number Diff line number Diff line change
Expand Up @@ -321,9 +321,7 @@ def test_column_rename(self, connector: DuckDBConnector):
connector.rename_column("test_table", "old_name", "new_name")

with engine.connect() as conn:
result = conn.execute(
sa.text("SELECT * FROM test_table"),
)
result = conn.execute(sa.text("SELECT * FROM test_table"))
assert result.keys() == ["id", "new_name"]

def test_adapt_column_type(self, connector: DuckDBConnector):
Expand All @@ -341,9 +339,7 @@ def test_adapt_column_type(self, connector: DuckDBConnector):
connector._adapt_column_type("test_table", "name", sa.types.String())

with engine.connect() as conn:
result = conn.execute(
sa.text("SELECT * FROM test_table"),
)
result = conn.execute(sa.text("SELECT * FROM test_table"))
assert result.keys() == ["id", "name"]
assert result.cursor.description[1][1] == "STRING"

Expand Down

0 comments on commit 4ffea35

Please sign in to comment.