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.
Files changed (136) hide show
  1. datacontract/__init__.py +13 -0
  2. datacontract/api.py +260 -0
  3. datacontract/breaking/breaking.py +242 -12
  4. datacontract/breaking/breaking_rules.py +37 -1
  5. datacontract/catalog/catalog.py +80 -0
  6. datacontract/cli.py +387 -117
  7. datacontract/data_contract.py +216 -353
  8. datacontract/engines/data_contract_checks.py +1041 -0
  9. datacontract/engines/data_contract_test.py +113 -0
  10. datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +2 -3
  11. datacontract/engines/datacontract/check_that_datacontract_file_exists.py +1 -1
  12. datacontract/engines/fastjsonschema/check_jsonschema.py +176 -42
  13. datacontract/engines/fastjsonschema/s3/s3_read_files.py +16 -1
  14. datacontract/engines/soda/check_soda_execute.py +100 -56
  15. datacontract/engines/soda/connections/athena.py +79 -0
  16. datacontract/engines/soda/connections/bigquery.py +8 -1
  17. datacontract/engines/soda/connections/databricks.py +12 -3
  18. datacontract/engines/soda/connections/duckdb_connection.py +241 -0
  19. datacontract/engines/soda/connections/kafka.py +206 -113
  20. datacontract/engines/soda/connections/snowflake.py +8 -5
  21. datacontract/engines/soda/connections/sqlserver.py +43 -0
  22. datacontract/engines/soda/connections/trino.py +26 -0
  23. datacontract/export/avro_converter.py +72 -8
  24. datacontract/export/avro_idl_converter.py +31 -25
  25. datacontract/export/bigquery_converter.py +130 -0
  26. datacontract/export/custom_converter.py +40 -0
  27. datacontract/export/data_caterer_converter.py +161 -0
  28. datacontract/export/dbml_converter.py +148 -0
  29. datacontract/export/dbt_converter.py +141 -54
  30. datacontract/export/dcs_exporter.py +6 -0
  31. datacontract/export/dqx_converter.py +126 -0
  32. datacontract/export/duckdb_type_converter.py +57 -0
  33. datacontract/export/excel_exporter.py +923 -0
  34. datacontract/export/exporter.py +100 -0
  35. datacontract/export/exporter_factory.py +216 -0
  36. datacontract/export/go_converter.py +105 -0
  37. datacontract/export/great_expectations_converter.py +257 -36
  38. datacontract/export/html_exporter.py +86 -0
  39. datacontract/export/iceberg_converter.py +188 -0
  40. datacontract/export/jsonschema_converter.py +71 -16
  41. datacontract/export/markdown_converter.py +337 -0
  42. datacontract/export/mermaid_exporter.py +110 -0
  43. datacontract/export/odcs_v3_exporter.py +375 -0
  44. datacontract/export/pandas_type_converter.py +40 -0
  45. datacontract/export/protobuf_converter.py +168 -68
  46. datacontract/export/pydantic_converter.py +6 -0
  47. datacontract/export/rdf_converter.py +13 -6
  48. datacontract/export/sodacl_converter.py +36 -188
  49. datacontract/export/spark_converter.py +245 -0
  50. datacontract/export/sql_converter.py +37 -3
  51. datacontract/export/sql_type_converter.py +269 -8
  52. datacontract/export/sqlalchemy_converter.py +170 -0
  53. datacontract/export/terraform_converter.py +7 -2
  54. datacontract/imports/avro_importer.py +246 -26
  55. datacontract/imports/bigquery_importer.py +221 -0
  56. datacontract/imports/csv_importer.py +143 -0
  57. datacontract/imports/dbml_importer.py +112 -0
  58. datacontract/imports/dbt_importer.py +240 -0
  59. datacontract/imports/excel_importer.py +1111 -0
  60. datacontract/imports/glue_importer.py +288 -0
  61. datacontract/imports/iceberg_importer.py +172 -0
  62. datacontract/imports/importer.py +51 -0
  63. datacontract/imports/importer_factory.py +128 -0
  64. datacontract/imports/json_importer.py +325 -0
  65. datacontract/imports/jsonschema_importer.py +146 -0
  66. datacontract/imports/odcs_importer.py +60 -0
  67. datacontract/imports/odcs_v3_importer.py +516 -0
  68. datacontract/imports/parquet_importer.py +81 -0
  69. datacontract/imports/protobuf_importer.py +264 -0
  70. datacontract/imports/spark_importer.py +262 -0
  71. datacontract/imports/sql_importer.py +274 -35
  72. datacontract/imports/unity_importer.py +219 -0
  73. datacontract/init/init_template.py +20 -0
  74. datacontract/integration/datamesh_manager.py +86 -0
  75. datacontract/lint/resolve.py +271 -49
  76. datacontract/lint/resources.py +21 -0
  77. datacontract/lint/schema.py +53 -17
  78. datacontract/lint/urls.py +32 -12
  79. datacontract/model/data_contract_specification/__init__.py +1 -0
  80. datacontract/model/exceptions.py +4 -1
  81. datacontract/model/odcs.py +24 -0
  82. datacontract/model/run.py +49 -29
  83. datacontract/output/__init__.py +0 -0
  84. datacontract/output/junit_test_results.py +135 -0
  85. datacontract/output/output_format.py +10 -0
  86. datacontract/output/test_results_writer.py +79 -0
  87. datacontract/py.typed +0 -0
  88. datacontract/schemas/datacontract-1.1.0.init.yaml +91 -0
  89. datacontract/schemas/datacontract-1.1.0.schema.json +1975 -0
  90. datacontract/schemas/datacontract-1.2.0.init.yaml +91 -0
  91. datacontract/schemas/datacontract-1.2.0.schema.json +2029 -0
  92. datacontract/schemas/datacontract-1.2.1.init.yaml +91 -0
  93. datacontract/schemas/datacontract-1.2.1.schema.json +2058 -0
  94. datacontract/schemas/odcs-3.0.1.schema.json +2634 -0
  95. datacontract/schemas/odcs-3.0.2.schema.json +2382 -0
  96. datacontract/templates/datacontract.html +139 -294
  97. datacontract/templates/datacontract_odcs.html +685 -0
  98. datacontract/templates/index.html +236 -0
  99. datacontract/templates/partials/datacontract_information.html +86 -0
  100. datacontract/templates/partials/datacontract_servicelevels.html +253 -0
  101. datacontract/templates/partials/datacontract_terms.html +51 -0
  102. datacontract/templates/partials/definition.html +25 -0
  103. datacontract/templates/partials/example.html +27 -0
  104. datacontract/templates/partials/model_field.html +144 -0
  105. datacontract/templates/partials/quality.html +49 -0
  106. datacontract/templates/partials/server.html +211 -0
  107. datacontract/templates/style/output.css +491 -72
  108. datacontract_cli-0.10.37.dist-info/METADATA +2235 -0
  109. datacontract_cli-0.10.37.dist-info/RECORD +119 -0
  110. {datacontract_cli-0.10.0.dist-info → datacontract_cli-0.10.37.dist-info}/WHEEL +1 -1
  111. {datacontract_cli-0.10.0.dist-info → datacontract_cli-0.10.37.dist-info/licenses}/LICENSE +1 -1
  112. datacontract/engines/datacontract/check_that_datacontract_str_is_valid.py +0 -48
  113. datacontract/engines/soda/connections/dask.py +0 -28
  114. datacontract/engines/soda/connections/duckdb.py +0 -76
  115. datacontract/export/csv_type_converter.py +0 -36
  116. datacontract/export/html_export.py +0 -66
  117. datacontract/export/odcs_converter.py +0 -102
  118. datacontract/init/download_datacontract_file.py +0 -17
  119. datacontract/integration/publish_datamesh_manager.py +0 -33
  120. datacontract/integration/publish_opentelemetry.py +0 -107
  121. datacontract/lint/lint.py +0 -141
  122. datacontract/lint/linters/description_linter.py +0 -34
  123. datacontract/lint/linters/example_model_linter.py +0 -91
  124. datacontract/lint/linters/field_pattern_linter.py +0 -34
  125. datacontract/lint/linters/field_reference_linter.py +0 -38
  126. datacontract/lint/linters/notice_period_linter.py +0 -55
  127. datacontract/lint/linters/quality_schema_linter.py +0 -52
  128. datacontract/lint/linters/valid_constraints_linter.py +0 -99
  129. datacontract/model/data_contract_specification.py +0 -141
  130. datacontract/web.py +0 -14
  131. datacontract_cli-0.10.0.dist-info/METADATA +0 -951
  132. datacontract_cli-0.10.0.dist-info/RECORD +0 -66
  133. /datacontract/{model → breaking}/breaking_change.py +0 -0
  134. /datacontract/{lint/linters → export}/__init__.py +0 -0
  135. {datacontract_cli-0.10.0.dist-info → datacontract_cli-0.10.37.dist-info}/entry_points.txt +0 -0
  136. {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}