datacontract-cli 0.10.0__py3-none-any.whl → 0.10.37__py3-none-any.whl
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.
- datacontract/__init__.py +13 -0
- datacontract/api.py +260 -0
- datacontract/breaking/breaking.py +242 -12
- datacontract/breaking/breaking_rules.py +37 -1
- datacontract/catalog/catalog.py +80 -0
- datacontract/cli.py +387 -117
- datacontract/data_contract.py +216 -353
- datacontract/engines/data_contract_checks.py +1041 -0
- datacontract/engines/data_contract_test.py +113 -0
- datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +2 -3
- datacontract/engines/datacontract/check_that_datacontract_file_exists.py +1 -1
- datacontract/engines/fastjsonschema/check_jsonschema.py +176 -42
- datacontract/engines/fastjsonschema/s3/s3_read_files.py +16 -1
- datacontract/engines/soda/check_soda_execute.py +100 -56
- datacontract/engines/soda/connections/athena.py +79 -0
- datacontract/engines/soda/connections/bigquery.py +8 -1
- datacontract/engines/soda/connections/databricks.py +12 -3
- datacontract/engines/soda/connections/duckdb_connection.py +241 -0
- datacontract/engines/soda/connections/kafka.py +206 -113
- datacontract/engines/soda/connections/snowflake.py +8 -5
- datacontract/engines/soda/connections/sqlserver.py +43 -0
- datacontract/engines/soda/connections/trino.py +26 -0
- datacontract/export/avro_converter.py +72 -8
- datacontract/export/avro_idl_converter.py +31 -25
- datacontract/export/bigquery_converter.py +130 -0
- datacontract/export/custom_converter.py +40 -0
- datacontract/export/data_caterer_converter.py +161 -0
- datacontract/export/dbml_converter.py +148 -0
- datacontract/export/dbt_converter.py +141 -54
- datacontract/export/dcs_exporter.py +6 -0
- datacontract/export/dqx_converter.py +126 -0
- datacontract/export/duckdb_type_converter.py +57 -0
- datacontract/export/excel_exporter.py +923 -0
- datacontract/export/exporter.py +100 -0
- datacontract/export/exporter_factory.py +216 -0
- datacontract/export/go_converter.py +105 -0
- datacontract/export/great_expectations_converter.py +257 -36
- datacontract/export/html_exporter.py +86 -0
- datacontract/export/iceberg_converter.py +188 -0
- datacontract/export/jsonschema_converter.py +71 -16
- datacontract/export/markdown_converter.py +337 -0
- datacontract/export/mermaid_exporter.py +110 -0
- datacontract/export/odcs_v3_exporter.py +375 -0
- datacontract/export/pandas_type_converter.py +40 -0
- datacontract/export/protobuf_converter.py +168 -68
- datacontract/export/pydantic_converter.py +6 -0
- datacontract/export/rdf_converter.py +13 -6
- datacontract/export/sodacl_converter.py +36 -188
- datacontract/export/spark_converter.py +245 -0
- datacontract/export/sql_converter.py +37 -3
- datacontract/export/sql_type_converter.py +269 -8
- datacontract/export/sqlalchemy_converter.py +170 -0
- datacontract/export/terraform_converter.py +7 -2
- datacontract/imports/avro_importer.py +246 -26
- datacontract/imports/bigquery_importer.py +221 -0
- datacontract/imports/csv_importer.py +143 -0
- datacontract/imports/dbml_importer.py +112 -0
- datacontract/imports/dbt_importer.py +240 -0
- datacontract/imports/excel_importer.py +1111 -0
- datacontract/imports/glue_importer.py +288 -0
- datacontract/imports/iceberg_importer.py +172 -0
- datacontract/imports/importer.py +51 -0
- datacontract/imports/importer_factory.py +128 -0
- datacontract/imports/json_importer.py +325 -0
- datacontract/imports/jsonschema_importer.py +146 -0
- datacontract/imports/odcs_importer.py +60 -0
- datacontract/imports/odcs_v3_importer.py +516 -0
- datacontract/imports/parquet_importer.py +81 -0
- datacontract/imports/protobuf_importer.py +264 -0
- datacontract/imports/spark_importer.py +262 -0
- datacontract/imports/sql_importer.py +274 -35
- datacontract/imports/unity_importer.py +219 -0
- datacontract/init/init_template.py +20 -0
- datacontract/integration/datamesh_manager.py +86 -0
- datacontract/lint/resolve.py +271 -49
- datacontract/lint/resources.py +21 -0
- datacontract/lint/schema.py +53 -17
- datacontract/lint/urls.py +32 -12
- datacontract/model/data_contract_specification/__init__.py +1 -0
- datacontract/model/exceptions.py +4 -1
- datacontract/model/odcs.py +24 -0
- datacontract/model/run.py +49 -29
- datacontract/output/__init__.py +0 -0
- datacontract/output/junit_test_results.py +135 -0
- datacontract/output/output_format.py +10 -0
- datacontract/output/test_results_writer.py +79 -0
- datacontract/py.typed +0 -0
- datacontract/schemas/datacontract-1.1.0.init.yaml +91 -0
- datacontract/schemas/datacontract-1.1.0.schema.json +1975 -0
- datacontract/schemas/datacontract-1.2.0.init.yaml +91 -0
- datacontract/schemas/datacontract-1.2.0.schema.json +2029 -0
- datacontract/schemas/datacontract-1.2.1.init.yaml +91 -0
- datacontract/schemas/datacontract-1.2.1.schema.json +2058 -0
- datacontract/schemas/odcs-3.0.1.schema.json +2634 -0
- datacontract/schemas/odcs-3.0.2.schema.json +2382 -0
- datacontract/templates/datacontract.html +139 -294
- datacontract/templates/datacontract_odcs.html +685 -0
- datacontract/templates/index.html +236 -0
- datacontract/templates/partials/datacontract_information.html +86 -0
- datacontract/templates/partials/datacontract_servicelevels.html +253 -0
- datacontract/templates/partials/datacontract_terms.html +51 -0
- datacontract/templates/partials/definition.html +25 -0
- datacontract/templates/partials/example.html +27 -0
- datacontract/templates/partials/model_field.html +144 -0
- datacontract/templates/partials/quality.html +49 -0
- datacontract/templates/partials/server.html +211 -0
- datacontract/templates/style/output.css +491 -72
- datacontract_cli-0.10.37.dist-info/METADATA +2235 -0
- datacontract_cli-0.10.37.dist-info/RECORD +119 -0
- {datacontract_cli-0.10.0.dist-info → datacontract_cli-0.10.37.dist-info}/WHEEL +1 -1
- {datacontract_cli-0.10.0.dist-info → datacontract_cli-0.10.37.dist-info/licenses}/LICENSE +1 -1
- datacontract/engines/datacontract/check_that_datacontract_str_is_valid.py +0 -48
- datacontract/engines/soda/connections/dask.py +0 -28
- datacontract/engines/soda/connections/duckdb.py +0 -76
- datacontract/export/csv_type_converter.py +0 -36
- datacontract/export/html_export.py +0 -66
- datacontract/export/odcs_converter.py +0 -102
- datacontract/init/download_datacontract_file.py +0 -17
- datacontract/integration/publish_datamesh_manager.py +0 -33
- datacontract/integration/publish_opentelemetry.py +0 -107
- datacontract/lint/lint.py +0 -141
- datacontract/lint/linters/description_linter.py +0 -34
- datacontract/lint/linters/example_model_linter.py +0 -91
- datacontract/lint/linters/field_pattern_linter.py +0 -34
- datacontract/lint/linters/field_reference_linter.py +0 -38
- datacontract/lint/linters/notice_period_linter.py +0 -55
- datacontract/lint/linters/quality_schema_linter.py +0 -52
- datacontract/lint/linters/valid_constraints_linter.py +0 -99
- datacontract/model/data_contract_specification.py +0 -141
- datacontract/web.py +0 -14
- datacontract_cli-0.10.0.dist-info/METADATA +0 -951
- datacontract_cli-0.10.0.dist-info/RECORD +0 -66
- /datacontract/{model → breaking}/breaking_change.py +0 -0
- /datacontract/{lint/linters → export}/__init__.py +0 -0
- {datacontract_cli-0.10.0.dist-info → datacontract_cli-0.10.37.dist-info}/entry_points.txt +0 -0
- {datacontract_cli-0.10.0.dist-info → datacontract_cli-0.10.37.dist-info}/top_level.txt +0 -0
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
from typing import List, Dict
|
|
3
|
-
|
|
4
|
-
import pydantic as pyd
|
|
5
|
-
import yaml
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class Contact(pyd.BaseModel):
|
|
9
|
-
name: str = None
|
|
10
|
-
url: str = None
|
|
11
|
-
email: str = None
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class Server(pyd.BaseModel):
|
|
15
|
-
type: str = None
|
|
16
|
-
format: str = None
|
|
17
|
-
project: str = None
|
|
18
|
-
dataset: str = None
|
|
19
|
-
path: str = None
|
|
20
|
-
delimiter: str = None
|
|
21
|
-
endpointUrl: str = None
|
|
22
|
-
location: str = None
|
|
23
|
-
account: str = None
|
|
24
|
-
database: str = None
|
|
25
|
-
schema_: str = pyd.Field(default=None, alias="schema")
|
|
26
|
-
host: str = None
|
|
27
|
-
port: int = None
|
|
28
|
-
catalog: str = None
|
|
29
|
-
topic: str = None
|
|
30
|
-
http_path: str = None # Use ENV variable
|
|
31
|
-
token: str = None # Use ENV variable
|
|
32
|
-
dataProductId: str = None
|
|
33
|
-
outputPortId: str = None
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
class Terms(pyd.BaseModel):
|
|
37
|
-
usage: str = None
|
|
38
|
-
limitations: str = None
|
|
39
|
-
billing: str = None
|
|
40
|
-
noticePeriod: str = None
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
class Definition(pyd.BaseModel):
|
|
44
|
-
domain: str = None
|
|
45
|
-
name: str = None
|
|
46
|
-
title: str = None
|
|
47
|
-
description: str = None
|
|
48
|
-
type: str = None
|
|
49
|
-
enum: List[str] = []
|
|
50
|
-
format: str = None
|
|
51
|
-
minLength: int = None
|
|
52
|
-
maxLength: int = None
|
|
53
|
-
pattern: str = None
|
|
54
|
-
minimum: int = None
|
|
55
|
-
exclusiveMinimum: int = None
|
|
56
|
-
maximum: int = None
|
|
57
|
-
exclusiveMaximum: int = None
|
|
58
|
-
pii: bool = None
|
|
59
|
-
classification: str = None
|
|
60
|
-
tags: List[str] = []
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
class Field(pyd.BaseModel):
|
|
64
|
-
ref: str = pyd.Field(default=None, alias="$ref")
|
|
65
|
-
ref_obj: Definition = pyd.Field(default=None, exclude=True)
|
|
66
|
-
type: str = None
|
|
67
|
-
format: str = None
|
|
68
|
-
required: bool = None
|
|
69
|
-
primary: bool = None
|
|
70
|
-
unique: bool = None
|
|
71
|
-
references: str = None
|
|
72
|
-
description: str = None
|
|
73
|
-
pii: bool = None
|
|
74
|
-
classification: str = None
|
|
75
|
-
pattern: str = None
|
|
76
|
-
minLength: int = None
|
|
77
|
-
maxLength: int = None
|
|
78
|
-
minimum: int = None
|
|
79
|
-
exclusiveMinimum: int = None
|
|
80
|
-
maximum: int = None
|
|
81
|
-
exclusiveMaximum: int = None
|
|
82
|
-
enum: List[str] = []
|
|
83
|
-
tags: List[str] = []
|
|
84
|
-
fields: Dict[str, "Field"] = {}
|
|
85
|
-
items: "Field" = None
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
class Model(pyd.BaseModel):
|
|
89
|
-
description: str = None
|
|
90
|
-
type: str = None
|
|
91
|
-
namespace: str = None
|
|
92
|
-
fields: Dict[str, Field] = {}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
class Info(pyd.BaseModel):
|
|
96
|
-
title: str = None
|
|
97
|
-
version: str = None
|
|
98
|
-
description: str = None
|
|
99
|
-
owner: str = None
|
|
100
|
-
contact: Contact = None
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
class Example(pyd.BaseModel):
|
|
104
|
-
type: str = None
|
|
105
|
-
description: str = None
|
|
106
|
-
model: str = None
|
|
107
|
-
data: str | object = None
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
class Quality(pyd.BaseModel):
|
|
111
|
-
type: str = None
|
|
112
|
-
specification: str | object = None
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
class DataContractSpecification(pyd.BaseModel):
|
|
116
|
-
dataContractSpecification: str = None
|
|
117
|
-
id: str = None
|
|
118
|
-
info: Info = None
|
|
119
|
-
servers: Dict[str, Server] = {}
|
|
120
|
-
terms: Terms = None
|
|
121
|
-
models: Dict[str, Model] = {}
|
|
122
|
-
definitions: Dict[str, Definition] = {}
|
|
123
|
-
# schema: Dict[str, str]
|
|
124
|
-
examples: List[Example] = []
|
|
125
|
-
quality: Quality = None
|
|
126
|
-
|
|
127
|
-
@classmethod
|
|
128
|
-
def from_file(cls, file):
|
|
129
|
-
if not os.path.exists(file):
|
|
130
|
-
raise (f"The file '{file}' does not exist.")
|
|
131
|
-
with open(file, "r") as file:
|
|
132
|
-
file_content = file.read()
|
|
133
|
-
return DataContractSpecification.from_string(file_content)
|
|
134
|
-
|
|
135
|
-
@classmethod
|
|
136
|
-
def from_string(cls, data_contract_str):
|
|
137
|
-
data = yaml.safe_load(data_contract_str)
|
|
138
|
-
return DataContractSpecification(**data)
|
|
139
|
-
|
|
140
|
-
def to_yaml(self):
|
|
141
|
-
return yaml.dump(self.model_dump(exclude_defaults=True, exclude_none=True), sort_keys=False, allow_unicode=True)
|
datacontract/web.py
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
from typing import Annotated, Union
|
|
2
|
-
|
|
3
|
-
from fastapi import FastAPI, File
|
|
4
|
-
|
|
5
|
-
from datacontract.data_contract import DataContract
|
|
6
|
-
|
|
7
|
-
app = FastAPI()
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
@app.post("/lint")
|
|
11
|
-
def lint(file: Annotated[bytes, File()], linters: Union[str, set[str]] = "all"):
|
|
12
|
-
data_contract = DataContract(data_contract_str=str(file, encoding="utf-8"))
|
|
13
|
-
lint_result = data_contract.lint(enabled_linters=linters)
|
|
14
|
-
return {"result": lint_result.result, "checks": lint_result.checks}
|