From 566dfef4455532307a0b214badbf7f8048c7c451 Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 9 Jan 2024 16:17:11 -0700 Subject: [PATCH 1/2] fix for Warning: poetry.lock is not consistent with pyproject.toml --- poetry.lock | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 073367c0..ff2b5f97 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1476,6 +1476,8 @@ files = [ {file = "psycopg2-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:426f9f29bde126913a20a96ff8ce7d73fd8a216cfb323b1f04da402d452853c3"}, {file = "psycopg2-2.9.9-cp311-cp311-win32.whl", hash = "sha256:ade01303ccf7ae12c356a5e10911c9e1c51136003a9a1d92f7aa9d010fb98372"}, {file = "psycopg2-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:121081ea2e76729acfb0673ff33755e8703d45e926e416cb59bae3a86c6a4981"}, + {file = "psycopg2-2.9.9-cp312-cp312-win32.whl", hash = "sha256:d735786acc7dd25815e89cc4ad529a43af779db2e25aa7c626de864127e5a024"}, + {file = "psycopg2-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:a7653d00b732afb6fc597e29c50ad28087dcb4fbfb28e86092277a559ae4e693"}, {file = "psycopg2-2.9.9-cp37-cp37m-win32.whl", hash = "sha256:5e0d98cade4f0e0304d7d6f25bbfbc5bd186e07b38eac65379309c4ca3193efa"}, {file = "psycopg2-2.9.9-cp37-cp37m-win_amd64.whl", hash = "sha256:7e2dacf8b009a1c1e843b5213a87f7c544b2b042476ed7755be813eaf4e8347a"}, {file = "psycopg2-2.9.9-cp38-cp38-win32.whl", hash = "sha256:ff432630e510709564c01dafdbe996cb552e0b9f3f065eb89bdce5bd31fabf4c"}, @@ -2300,6 +2302,7 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [extras] +all-oss-supported-dbs = ["clickhouse-driver", "cryptography", "duckdb", "mysql-connector-python", "oracledb", "preql", "presto-python-client", "psycopg2", "snowflake-connector-python", "trino", "vertica-python"] clickhouse = ["clickhouse-driver"] duckdb = ["duckdb"] mssql = ["pyodbc"] @@ -2316,4 +2319,4 @@ vertica = ["vertica-python"] [metadata] lock-version = "2.0" python-versions = "^3.8.0" -content-hash = "54f5248145c8920e27de3e781bb01461b3f68bc6335d75d8793b19dffd5f4163" +content-hash = "ffdcb49e5602f6064e068f3924c64ab15d377cc320ae2c55df2d8c73d10f9588" From e84164908f30461e29ae9a17be1a4d104cb8453f Mon Sep 17 00:00:00 2001 From: Dan Date: Tue, 9 Jan 2024 16:34:08 -0700 Subject: [PATCH 2/2] fix send_event_json convert sets to list, don't include _ignored_columns_lock: threading.Lock in events --- data_diff/diff_tables.py | 2 ++ data_diff/tracking.py | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/data_diff/diff_tables.py b/data_diff/diff_tables.py index 74376f63..0086b878 100644 --- a/data_diff/diff_tables.py +++ b/data_diff/diff_tables.py @@ -213,6 +213,8 @@ def diff_tables(self, table1: TableSegment, table2: TableSegment, info_tree: Inf def _diff_tables_wrapper(self, table1: TableSegment, table2: TableSegment, info_tree: InfoTree) -> DiffResult: if is_tracking_enabled(): options = attrs.asdict(self, recurse=False) + # not a useful event attribute + options.pop("_ignored_columns_lock") options["differ_name"] = type(self).__name__ event_json = create_start_event_json(options) run_as_daemon(send_event_json, event_json) diff --git a/data_diff/tracking.py b/data_diff/tracking.py index 0fad464a..2f2a3370 100644 --- a/data_diff/tracking.py +++ b/data_diff/tracking.py @@ -201,10 +201,27 @@ def create_email_signup_event_json(email: str) -> Dict[str, Any]: } +def convert_sets_to_lists(obj): + """ + Recursively convert sets in the given object to lists. + """ + if isinstance(obj, set): + return list(obj) + elif isinstance(obj, dict): + return {k: convert_sets_to_lists(v) for k, v in obj.items()} + elif isinstance(obj, list): + return [convert_sets_to_lists(elem) for elem in obj] + else: + return obj + + def send_event_json(event_json) -> None: if not g_tracking_enabled: raise RuntimeError("Won't send; tracking is disabled!") + # Convert sets to lists in event_json + event_json = convert_sets_to_lists(event_json) + headers = { "Content-Type": "application/json", "Authorization": "Basic MkhndE00SGNxOUJtZWlDcU5ZaHo3Tzl0a2pNOg==",