data-validation-engine 0.8.3__tar.gz → 0.8.5__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.
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/PKG-INFO +1 -1
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/pyproject.toml +3 -3
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/duckdb/duckdb_helpers.py +24 -19
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/spark/spark_helpers.py +25 -23
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/metadata_parser/utilities.py +20 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/pipeline/pipeline.py +5 -1
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/reporting/excel_report.py +0 -11
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/LICENSE +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/README.md +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/common/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/common/error_utils.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/base/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/base/auditing.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/base/backend.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/base/contract.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/base/core.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/base/reader.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/base/reference_data.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/base/rules.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/base/utilities.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/exceptions.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/duckdb/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/duckdb/auditing.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/duckdb/contract.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/duckdb/readers/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/duckdb/readers/csv.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/duckdb/readers/json.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/duckdb/readers/xml.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/duckdb/reference_data.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/duckdb/rules.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/duckdb/types.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/duckdb/utilities.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/spark/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/spark/auditing.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/spark/backend.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/spark/contract.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/spark/readers/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/spark/readers/csv.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/spark/readers/json.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/spark/readers/xml.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/spark/reference_data.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/spark/rules.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/spark/types.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/implementations/spark/utilities.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/metadata/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/metadata/contract.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/metadata/reporting.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/metadata/rules.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/readers/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/readers/csv.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/readers/utilities.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/readers/xml.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/readers/xml_linting.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/types.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/utilities.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/configuration/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/configuration/base.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/configuration/v1/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/configuration/v1/filters.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/configuration/v1/rule_stores/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/configuration/v1/rule_stores/models.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/configuration/v1/steps.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/constants.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/engine.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/exceptions.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/functions/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/functions/implementations.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/loggers.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/message.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/models.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/templating.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/type_hints.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/validation.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/metadata_parser/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/metadata_parser/domain_types.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/metadata_parser/exc.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/metadata_parser/function_library.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/metadata_parser/function_wrapper.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/metadata_parser/model_generator.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/metadata_parser/models.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/parser/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/parser/exceptions.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/parser/file_handling/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/parser/file_handling/helpers.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/parser/file_handling/implementations/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/parser/file_handling/implementations/base.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/parser/file_handling/implementations/dbfs.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/parser/file_handling/implementations/file.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/parser/file_handling/implementations/s3.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/parser/file_handling/log_handler.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/parser/file_handling/service.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/parser/file_handling/utilities.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/parser/type_hints.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/parser/utilities.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/pipeline/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/pipeline/duckdb_pipeline.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/pipeline/foundry_ddb_pipeline.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/pipeline/spark_pipeline.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/pipeline/utils.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/reporting/__init__.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/reporting/constants.py +0 -0
- {data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/reporting/error_report.py +0 -0
|
@@ -25,7 +25,7 @@ Issues = "https://github.com/NHSDigital/data-validation-engine/issues"
|
|
|
25
25
|
Changelog = "https://github.com/NHSDigital/data-validation-engine/blob/main/CHANGELOG.md"
|
|
26
26
|
|
|
27
27
|
[tool.poetry]
|
|
28
|
-
version = "0.8.
|
|
28
|
+
version = "0.8.5"
|
|
29
29
|
packages = [
|
|
30
30
|
{ include = "dve", from = "src" },
|
|
31
31
|
]
|
|
@@ -69,7 +69,7 @@ optional = true
|
|
|
69
69
|
behave = "1.3.3"
|
|
70
70
|
coverage = "7.11.0"
|
|
71
71
|
moto = {extras = ["s3"], version = "4.2.14"}
|
|
72
|
-
cryptography = "
|
|
72
|
+
cryptography = "50.0.0" # dependency of `moto`
|
|
73
73
|
requests = "2.33.0" # dependency of `moto`
|
|
74
74
|
Werkzeug = "3.1.6"
|
|
75
75
|
pytest = "9.0.3"
|
|
@@ -106,7 +106,7 @@ click = "8.2.1"
|
|
|
106
106
|
mkdocs = "1.6.1"
|
|
107
107
|
mkdocstrings = { version = "1.0.3", extras = ["python"] }
|
|
108
108
|
griffelib = "2.0.1"
|
|
109
|
-
pymdown-extensions = "
|
|
109
|
+
pymdown-extensions = "11.0.1"
|
|
110
110
|
zensical = "0.0.46"
|
|
111
111
|
|
|
112
112
|
[tool.ruff]
|
|
@@ -24,6 +24,7 @@ from dve.core_engine.backends.base.utilities import _get_non_heterogenous_type
|
|
|
24
24
|
from dve.core_engine.backends.utilities import DEFAULT_ISO_FORMATS, datetime_format_to_regex
|
|
25
25
|
from dve.core_engine.constants import RECORD_INDEX_COLUMN_NAME
|
|
26
26
|
from dve.core_engine.type_hints import URI, EntityName
|
|
27
|
+
from dve.metadata_parser.utilities import resilient_get
|
|
27
28
|
from dve.parser.file_handling.service import LocalFilesystemImplementation, _get_implementation
|
|
28
29
|
|
|
29
30
|
|
|
@@ -451,23 +452,27 @@ def get_duckdb_cast_statement_from_annotation(
|
|
|
451
452
|
raise ValueError(f"dict must be `typing.TypedDict` subclass, got {type_annotation!r}")
|
|
452
453
|
|
|
453
454
|
for type_ in type_annotation.mro():
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
455
|
+
if issubclass(type_, (date, time)):
|
|
456
|
+
_date_format: str = resilient_get(
|
|
457
|
+
type_, "DATE_FORMAT", "TIME_FORMAT"
|
|
458
|
+
) or DEFAULT_ISO_FORMATS.get(
|
|
459
|
+
type_, DEFAULT_ISO_FORMATS.get(datetime)
|
|
460
|
+
) # type: ignore
|
|
461
|
+
dt_cast_statement = rf"CASE WHEN REGEXP_FULL_MATCH(TRIM({quoted_name}), '{datetime_format_to_regex(_date_format)}') THEN TRY_STRPTIME(TRIM({quoted_name}), '{_date_format}') ELSE NULL END" # pylint: disable=C0301
|
|
462
|
+
|
|
463
|
+
# datetime is subclass of date, so needs to be handled first
|
|
464
|
+
if issubclass(type_, datetime):
|
|
465
|
+
stmt = rf"TRY_CAST({dt_cast_statement} as TIMESTAMP)"
|
|
466
|
+
return stmt
|
|
467
|
+
if issubclass(type_, date):
|
|
468
|
+
stmt = rf"TRY_CAST({dt_cast_statement} as DATE)"
|
|
469
|
+
return stmt
|
|
470
|
+
if issubclass(type_, time):
|
|
471
|
+
stmt = rf"TRY_CAST({dt_cast_statement} as TIME)"
|
|
472
|
+
return stmt
|
|
473
|
+
else:
|
|
474
|
+
duck_type = get_duckdb_type_from_annotation(type_)
|
|
475
|
+
if duck_type:
|
|
476
|
+
stmt = f"TRIM({quoted_name})"
|
|
477
|
+
return _cast_as_ddb_type(stmt, type_) if parent_element else stmt
|
|
473
478
|
raise ValueError(f"No equivalent DuckDB type for {type_annotation!r}")
|
|
@@ -593,29 +593,31 @@ def get_spark_cast_statement_from_annotation(
|
|
|
593
593
|
raise ValueError(f"dict must be `typing.TypedDict` subclass, got {type_annotation!r}")
|
|
594
594
|
|
|
595
595
|
for type_ in type_annotation.mro():
|
|
596
|
-
_date_format: str = getattr( # type: ignore
|
|
597
|
-
type_,
|
|
598
|
-
"DATE_FORMAT",
|
|
599
|
-
DEFAULT_ISO_FORMATS.get(type_, DEFAULT_ISO_FORMATS.get(dt.datetime)),
|
|
600
|
-
)
|
|
601
|
-
|
|
602
|
-
# pylint: disable=C0301
|
|
603
|
-
dt_cast_statement = f"CASE WHEN REGEXP(TRIM({quoted_name}), '{datetime_format_to_regex(_date_format)}') THEN TRY_TO_TIMESTAMP(TRIM({quoted_name}), \"{python_to_java_datetime_format(_date_format)}\") ELSE NULL END" # pylint: disable=C0301
|
|
604
|
-
# datetime is subclass of date, so needs to be handled first
|
|
605
|
-
if issubclass(type_, dt.datetime):
|
|
606
|
-
return (
|
|
607
|
-
_cast_as_spark_type(dt_cast_statement, type_)
|
|
608
|
-
if parent_element
|
|
609
|
-
else dt_cast_statement
|
|
610
|
-
)
|
|
611
596
|
if issubclass(type_, dt.date):
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
597
|
+
_date_format: str = getattr( # type: ignore
|
|
598
|
+
type_,
|
|
599
|
+
"DATE_FORMAT",
|
|
600
|
+
DEFAULT_ISO_FORMATS.get(type_, DEFAULT_ISO_FORMATS.get(dt.datetime)),
|
|
616
601
|
)
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
602
|
+
|
|
603
|
+
# pylint: disable=C0301
|
|
604
|
+
dt_cast_statement = f"CASE WHEN REGEXP(TRIM({quoted_name}), '{datetime_format_to_regex(_date_format)}') THEN TRY_TO_TIMESTAMP(TRIM({quoted_name}), \"{python_to_java_datetime_format(_date_format)}\") ELSE NULL END" # pylint: disable=C0301
|
|
605
|
+
# datetime is subclass of date, so needs to be handled first
|
|
606
|
+
if issubclass(type_, dt.datetime):
|
|
607
|
+
return (
|
|
608
|
+
_cast_as_spark_type(dt_cast_statement, type_)
|
|
609
|
+
if parent_element
|
|
610
|
+
else dt_cast_statement
|
|
611
|
+
)
|
|
612
|
+
if issubclass(type_, dt.date):
|
|
613
|
+
return (
|
|
614
|
+
_cast_as_spark_type(dt_cast_statement, type_)
|
|
615
|
+
if parent_element
|
|
616
|
+
else dt_cast_statement
|
|
617
|
+
)
|
|
618
|
+
else:
|
|
619
|
+
spark_type = get_type_from_annotation(type_)
|
|
620
|
+
if spark_type:
|
|
621
|
+
stmt = f"TRIM({quoted_name})"
|
|
622
|
+
return _cast_as_spark_type(stmt, type_) if parent_element else stmt
|
|
621
623
|
raise ValueError(f"No equivalent Spark type for {type_annotation!r}")
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/metadata_parser/utilities.py
RENAMED
|
@@ -52,3 +52,23 @@ def chain_get(
|
|
|
52
52
|
return result
|
|
53
53
|
|
|
54
54
|
raise exc.TypeNotFoundError(f"Callable or type ({item!r}) not found")
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def resilient_get(item: object, *attribute_names: str) -> Any:
|
|
58
|
+
"""Given a number of attribute names, try to get attribute value
|
|
59
|
+
sequentially. Returns the first value found, and if no attributes found
|
|
60
|
+
returns None.
|
|
61
|
+
|
|
62
|
+
Args:
|
|
63
|
+
item (object): The object to obtain attributes from (where possible)
|
|
64
|
+
attribute_names (str): The attribute names to search for
|
|
65
|
+
|
|
66
|
+
Returns:
|
|
67
|
+
Any: The first found attribute, otherwise None
|
|
68
|
+
"""
|
|
69
|
+
for attr in attribute_names:
|
|
70
|
+
try:
|
|
71
|
+
return getattr(item, attr)
|
|
72
|
+
except AttributeError:
|
|
73
|
+
continue
|
|
74
|
+
return None
|
|
@@ -852,7 +852,11 @@ class BaseDVEPipeline:
|
|
|
852
852
|
summary_items = er.SummaryItems(
|
|
853
853
|
submission_status=submission_status,
|
|
854
854
|
summary_dict=summary_dict,
|
|
855
|
-
row_headings=[
|
|
855
|
+
row_headings=[
|
|
856
|
+
e.reporting_name
|
|
857
|
+
for e in ErrorReportCategories
|
|
858
|
+
if e != ErrorReportCategories.RECORD_REJECTION
|
|
859
|
+
],
|
|
856
860
|
)
|
|
857
861
|
|
|
858
862
|
workbook = er.ExcelFormat(
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/reporting/excel_report.py
RENAMED
|
@@ -153,17 +153,6 @@ class SummaryItems:
|
|
|
153
153
|
), # pylint: disable=C0301
|
|
154
154
|
]
|
|
155
155
|
)
|
|
156
|
-
if status not in (
|
|
157
|
-
ErrorReportStatus.PROCESSING_FAILED,
|
|
158
|
-
ErrorReportStatus.FILE_REJECTION,
|
|
159
|
-
):
|
|
160
|
-
summary.append(
|
|
161
|
-
[
|
|
162
|
-
"",
|
|
163
|
-
"Total Number of Records Rejected",
|
|
164
|
-
self.submission_status.number_of_records_rejected,
|
|
165
|
-
]
|
|
166
|
-
)
|
|
167
156
|
summary.append(["", ""])
|
|
168
157
|
|
|
169
158
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/__init__.py
RENAMED
|
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
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/backends/types.py
RENAMED
|
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
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/constants.py
RENAMED
|
File without changes
|
|
File without changes
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/loggers.py
RENAMED
|
File without changes
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/message.py
RENAMED
|
File without changes
|
|
File without changes
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/templating.py
RENAMED
|
File without changes
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/type_hints.py
RENAMED
|
File without changes
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/core_engine/validation.py
RENAMED
|
File without changes
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/metadata_parser/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/metadata_parser/exc.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/metadata_parser/models.py
RENAMED
|
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
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/pipeline/duckdb_pipeline.py
RENAMED
|
File without changes
|
|
File without changes
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/pipeline/spark_pipeline.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/reporting/constants.py
RENAMED
|
File without changes
|
{data_validation_engine-0.8.3 → data_validation_engine-0.8.5}/src/dve/reporting/error_report.py
RENAMED
|
File without changes
|