dcs-sdk 1.5.6__tar.gz → 1.5.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/PKG-INFO +2 -2
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/README.md +1 -1
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/sybase.py +1 -1
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/utils.py +57 -11
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/__version__.py +1 -1
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/pyproject.toml +1 -1
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/__init__.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/__main__.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/abcs/__init__.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/abcs/compiler.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/abcs/database_types.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/config.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/__init__.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/_connect.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/base.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/bigquery.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/clickhouse.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/databricks.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/duckdb.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/mssql.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/mysql.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/oracle.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/postgresql.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/presto.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/redshift.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/snowflake.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/trino.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/databases/vertica.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/diff_tables.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/errors.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/format.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/hashdiff_tables.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/info_tree.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/joindiff_tables.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/lexicographic_space.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/parse_time.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/py.typed +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/queries/__init__.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/queries/api.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/queries/ast_classes.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/queries/base.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/queries/extras.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/query_utils.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/schema.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/table_segment.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/thread_utils.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/data_diff/version.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/__init__.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/__main__.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/cli/__init__.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/cli/cli.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/__init__.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/config/__init__.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/config/config_loader.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/data_diff/__init__.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/data_diff/data_differ.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/rules/__init__.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/rules/rules_mappping.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/rules/rules_repository.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/rules/schema_rules.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/utils/__init__.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/utils/serializer.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/utils/similarity_score/__init__.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/utils/similarity_score/base_provider.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/utils/similarity_score/cosine_similarity_provider.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/utils/similarity_score/jaccard_provider.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/utils/similarity_score/levenshtein_distance_provider.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/utils/table.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/utils/themes.py +0 -0
- {dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/utils/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dcs-sdk
|
|
3
|
-
Version: 1.5.
|
|
3
|
+
Version: 1.5.7
|
|
4
4
|
Summary: SDK for DataChecks
|
|
5
5
|
Author: Waterdip Labs
|
|
6
6
|
Author-email: hello@waterdip.ai
|
|
@@ -61,7 +61,7 @@ Requires-Dist: vertica-python (>=1.4.0) ; extra == "vertica" or extra == "all-db
|
|
|
61
61
|
Description-Content-Type: text/markdown
|
|
62
62
|
|
|
63
63
|
<h1 align="center">
|
|
64
|
-
DCS SDK v1.5.
|
|
64
|
+
DCS SDK v1.5.7
|
|
65
65
|
</h1>
|
|
66
66
|
|
|
67
67
|
> SDK for DataChecks
|
|
@@ -475,7 +475,7 @@ class Sybase(ThreadedDatabase):
|
|
|
475
475
|
username = self._args.get("user", None)
|
|
476
476
|
password = self._args.get("password", None)
|
|
477
477
|
driver = self._args.get("driver", None)
|
|
478
|
-
max_query_timeout = 60 *
|
|
478
|
+
max_query_timeout = 60 * 5 # 5 minutes
|
|
479
479
|
|
|
480
480
|
if self.dialect.sybase_driver_type.is_freetds:
|
|
481
481
|
conn_dict = {
|
|
@@ -629,6 +629,19 @@ def alphanums_to_numbers(s1: str, s2: str):
|
|
|
629
629
|
return n1, n2
|
|
630
630
|
|
|
631
631
|
|
|
632
|
+
def _alphanum_as_int_for_cmp(s: str) -> Optional[int]:
|
|
633
|
+
"""Interpret an alphanum string as base-10 int if it's purely numeric (optional leading minus).
|
|
634
|
+
|
|
635
|
+
Returns None if not purely numeric, in which case callers should fallback to alphanum base ordering.
|
|
636
|
+
"""
|
|
637
|
+
if re.fullmatch(r"-?\d+", s):
|
|
638
|
+
try:
|
|
639
|
+
return int(s)
|
|
640
|
+
except ValueError:
|
|
641
|
+
return None
|
|
642
|
+
return None
|
|
643
|
+
|
|
644
|
+
|
|
632
645
|
@attrs.define(frozen=True, eq=False, order=False, repr=False)
|
|
633
646
|
class ArithAlphanumeric(ArithString):
|
|
634
647
|
_str: str
|
|
@@ -682,20 +695,53 @@ class ArithAlphanumeric(ArithString):
|
|
|
682
695
|
|
|
683
696
|
return NotImplemented
|
|
684
697
|
|
|
685
|
-
def __ge__(self, other) -> bool:
|
|
686
|
-
if not isinstance(other, type(self)):
|
|
687
|
-
return NotImplemented
|
|
688
|
-
return self._str >= other._str
|
|
689
|
-
|
|
690
698
|
def __lt__(self, other) -> bool:
|
|
691
|
-
if
|
|
692
|
-
return
|
|
693
|
-
|
|
699
|
+
if isinstance(other, ArithAlphanumeric):
|
|
700
|
+
return self._str < other._str
|
|
701
|
+
if isinstance(other, int):
|
|
702
|
+
v = _alphanum_as_int_for_cmp(self._str)
|
|
703
|
+
return (v if v is not None else alphanumToNumber(self._str)) < other
|
|
704
|
+
return NotImplemented
|
|
705
|
+
|
|
706
|
+
def __le__(self, other) -> bool:
|
|
707
|
+
if isinstance(other, ArithAlphanumeric):
|
|
708
|
+
return self._str <= other._str
|
|
709
|
+
if isinstance(other, int):
|
|
710
|
+
v = _alphanum_as_int_for_cmp(self._str)
|
|
711
|
+
return (v if v is not None else alphanumToNumber(self._str)) <= other
|
|
712
|
+
return NotImplemented
|
|
713
|
+
|
|
714
|
+
def __gt__(self, other) -> bool:
|
|
715
|
+
if isinstance(other, ArithAlphanumeric):
|
|
716
|
+
return self._str > other._str
|
|
717
|
+
if isinstance(other, int):
|
|
718
|
+
v = _alphanum_as_int_for_cmp(self._str)
|
|
719
|
+
return (v if v is not None else alphanumToNumber(self._str)) > other
|
|
720
|
+
return NotImplemented
|
|
721
|
+
|
|
722
|
+
def __ge__(self, other) -> bool:
|
|
723
|
+
if isinstance(other, ArithAlphanumeric):
|
|
724
|
+
return self._str >= other._str
|
|
725
|
+
if isinstance(other, int):
|
|
726
|
+
v = _alphanum_as_int_for_cmp(self._str)
|
|
727
|
+
return (v if v is not None else alphanumToNumber(self._str)) >= other
|
|
728
|
+
return NotImplemented
|
|
694
729
|
|
|
695
730
|
def __eq__(self, other) -> bool:
|
|
696
|
-
if
|
|
697
|
-
return
|
|
698
|
-
|
|
731
|
+
if isinstance(other, ArithAlphanumeric):
|
|
732
|
+
return self._str == other._str
|
|
733
|
+
if isinstance(other, int):
|
|
734
|
+
v = _alphanum_as_int_for_cmp(self._str)
|
|
735
|
+
return (v if v is not None else alphanumToNumber(self._str)) == other
|
|
736
|
+
return NotImplemented
|
|
737
|
+
|
|
738
|
+
def __ne__(self, other) -> bool:
|
|
739
|
+
if isinstance(other, ArithAlphanumeric):
|
|
740
|
+
return self._str != other._str
|
|
741
|
+
if isinstance(other, int):
|
|
742
|
+
v = _alphanum_as_int_for_cmp(self._str)
|
|
743
|
+
return (v if v is not None else alphanumToNumber(self._str)) != other
|
|
744
|
+
return NotImplemented
|
|
699
745
|
|
|
700
746
|
def new(self, *args, **kw) -> Self:
|
|
701
747
|
return type(self)(*args, **kw, max_len=self._max_len)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/utils/similarity_score/cosine_similarity_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
{dcs_sdk-1.5.6 → dcs_sdk-1.5.7}/dcs_sdk/sdk/utils/similarity_score/levenshtein_distance_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|