datacontract-cli 0.10.8__py3-none-any.whl → 0.10.9__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.

Potentially problematic release.


This version of datacontract-cli might be problematic. Click here for more details.

Files changed (36) hide show
  1. datacontract/catalog/catalog.py +4 -2
  2. datacontract/cli.py +29 -18
  3. datacontract/data_contract.py +9 -51
  4. datacontract/engines/soda/check_soda_execute.py +5 -0
  5. datacontract/engines/soda/connections/duckdb.py +28 -12
  6. datacontract/engines/soda/connections/trino.py +26 -0
  7. datacontract/export/exporter.py +3 -2
  8. datacontract/export/exporter_factory.py +132 -39
  9. datacontract/export/jsonschema_converter.py +7 -7
  10. datacontract/export/sodacl_converter.py +16 -11
  11. datacontract/export/spark_converter.py +211 -0
  12. datacontract/export/sql_type_converter.py +28 -0
  13. datacontract/imports/avro_importer.py +8 -0
  14. datacontract/imports/bigquery_importer.py +17 -0
  15. datacontract/imports/glue_importer.py +115 -32
  16. datacontract/imports/importer.py +29 -0
  17. datacontract/imports/importer_factory.py +72 -0
  18. datacontract/imports/jsonschema_importer.py +8 -0
  19. datacontract/imports/odcs_importer.py +8 -0
  20. datacontract/imports/sql_importer.py +8 -0
  21. datacontract/imports/unity_importer.py +23 -9
  22. datacontract/lint/resolve.py +22 -1
  23. datacontract/model/data_contract_specification.py +34 -4
  24. datacontract/templates/datacontract.html +17 -2
  25. datacontract/templates/partials/datacontract_information.html +20 -0
  26. datacontract/templates/partials/datacontract_terms.html +7 -0
  27. datacontract/templates/partials/definition.html +9 -1
  28. datacontract/templates/partials/model_field.html +23 -6
  29. datacontract/templates/partials/server.html +49 -16
  30. datacontract/templates/style/output.css +42 -0
  31. {datacontract_cli-0.10.8.dist-info → datacontract_cli-0.10.9.dist-info}/METADATA +203 -28
  32. {datacontract_cli-0.10.8.dist-info → datacontract_cli-0.10.9.dist-info}/RECORD +36 -32
  33. {datacontract_cli-0.10.8.dist-info → datacontract_cli-0.10.9.dist-info}/WHEEL +1 -1
  34. {datacontract_cli-0.10.8.dist-info → datacontract_cli-0.10.9.dist-info}/LICENSE +0 -0
  35. {datacontract_cli-0.10.8.dist-info → datacontract_cli-0.10.9.dist-info}/entry_points.txt +0 -0
  36. {datacontract_cli-0.10.8.dist-info → datacontract_cli-0.10.9.dist-info}/top_level.txt +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datacontract-cli
3
- Version: 0.10.8
4
- Summary: Test data contracts
5
- Author-email: Jochen Christ <jochen.christ@innoq.com>, Stefan Negele <stefan.negele@innoq.com>
3
+ Version: 0.10.9
4
+ Summary: The datacontract CLI is an open source command-line tool for working with Data Contracts. It uses data contract YAML files to lint the data contract, connect to data sources and execute schema and quality tests, detect breaking changes, and export to different formats. The tool is written in Python. It can be used as a standalone CLI tool, in a CI/CD pipeline, or directly as a Python library.
5
+ Author-email: Jochen Christ <jochen.christ@innoq.com>, Stefan Negele <stefan.negele@innoq.com>, Simon Harrer <simon.harrer@innoq.com>
6
6
  Project-URL: Homepage, https://cli.datacontract.com
7
- Project-URL: Issues, https://github.com/datacontract/cli/issues
7
+ Project-URL: Issues, https://github.com/datacontract/datacontract-cli/issues
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: License :: OSI Approved :: MIT License
10
10
  Classifier: Operating System :: OS Independent
@@ -28,18 +28,18 @@ Requires-Dist: python-dotenv ~=1.0.0
28
28
  Requires-Dist: rdflib ==7.0.0
29
29
  Requires-Dist: opentelemetry-exporter-otlp-proto-grpc ~=1.16
30
30
  Requires-Dist: opentelemetry-exporter-otlp-proto-http ~=1.16
31
- Requires-Dist: boto3 <1.34.130,>=1.34.41
32
- Requires-Dist: botocore <1.34.128,>=1.34.41
31
+ Requires-Dist: boto3 <1.34.137,>=1.34.41
32
+ Requires-Dist: botocore <1.34.137,>=1.34.41
33
33
  Requires-Dist: jinja-partials >=0.2.1
34
34
  Provides-Extra: all
35
- Requires-Dist: datacontract-cli[bigquery,databricks,deltalake,kafka,postgres,s3,snowflake,sqlserver] ; extra == 'all'
35
+ Requires-Dist: datacontract-cli[bigquery,databricks,deltalake,kafka,postgres,s3,snowflake,sqlserver,trino] ; extra == 'all'
36
36
  Provides-Extra: avro
37
37
  Requires-Dist: avro ==1.11.3 ; extra == 'avro'
38
38
  Provides-Extra: bigquery
39
39
  Requires-Dist: soda-core-bigquery <3.4.0,>=3.3.1 ; extra == 'bigquery'
40
40
  Provides-Extra: databricks
41
41
  Requires-Dist: soda-core-spark-df <3.4.0,>=3.3.1 ; extra == 'databricks'
42
- Requires-Dist: databricks-sql-connector <3.2.0,>=3.1.2 ; extra == 'databricks'
42
+ Requires-Dist: databricks-sql-connector <3.3.0,>=3.1.2 ; extra == 'databricks'
43
43
  Requires-Dist: soda-core-spark[databricks] <3.4.0,>=3.3.1 ; extra == 'databricks'
44
44
  Provides-Extra: deltalake
45
45
  Requires-Dist: deltalake <0.19,>=0.17 ; extra == 'deltalake'
@@ -53,7 +53,9 @@ Requires-Dist: pytest-xdist ; extra == 'dev'
53
53
  Requires-Dist: moto ; extra == 'dev'
54
54
  Requires-Dist: pymssql ==2.3.0 ; extra == 'dev'
55
55
  Requires-Dist: kafka-python ; extra == 'dev'
56
- Requires-Dist: testcontainers ~=4.5.0 ; extra == 'dev'
56
+ Requires-Dist: trino ==0.328.0 ; extra == 'dev'
57
+ Requires-Dist: testcontainers <4.8,>=4.5 ; extra == 'dev'
58
+ Requires-Dist: testcontainers[core] ; extra == 'dev'
57
59
  Requires-Dist: testcontainers[minio] ; extra == 'dev'
58
60
  Requires-Dist: testcontainers[postgres] ; extra == 'dev'
59
61
  Requires-Dist: testcontainers[kafka] ; extra == 'dev'
@@ -64,12 +66,14 @@ Requires-Dist: soda-core-spark-df <3.4.0,>=3.3.1 ; extra == 'kafka'
64
66
  Provides-Extra: postgres
65
67
  Requires-Dist: soda-core-postgres <3.4.0,>=3.3.1 ; extra == 'postgres'
66
68
  Provides-Extra: s3
67
- Requires-Dist: s3fs ==2024.6.0 ; extra == 's3'
69
+ Requires-Dist: s3fs ==2024.6.1 ; extra == 's3'
68
70
  Provides-Extra: snowflake
69
- Requires-Dist: snowflake-connector-python[pandas] <3.11,>=3.6 ; extra == 'snowflake'
71
+ Requires-Dist: snowflake-connector-python[pandas] <3.12,>=3.6 ; extra == 'snowflake'
70
72
  Requires-Dist: soda-core-snowflake <3.4.0,>=3.3.1 ; extra == 'snowflake'
71
73
  Provides-Extra: sqlserver
72
74
  Requires-Dist: soda-core-sqlserver <3.4.0,>=3.3.1 ; extra == 'sqlserver'
75
+ Provides-Extra: trino
76
+ Requires-Dist: soda-core-trino <3.4.0,>=3.3.1 ; extra == 'trino'
73
77
 
74
78
  # Data Contract CLI
75
79
 
@@ -258,17 +262,18 @@ pip install datacontract-cli[all]
258
262
 
259
263
  A list of available extras:
260
264
 
261
- | Dependency | Installation Command |
262
- |-------------------------|-------------------------------------------------------------|
263
- | Avro Support | `pip install datacontract-cli[avro]` |
264
- | Google BigQuery | `pip install datacontract-cli[bigquery]` |
265
- | Databricks Integration | `pip install datacontract-cli[databricks]` |
266
- | Deltalake Integration | `pip install datacontract-cli[deltalake]` |
267
- | Kafka Integration | `pip install datacontract-cli[kafka]` |
268
- | PostgreSQL Integration | `pip install datacontract-cli[postgres]` |
269
- | S3 Integration | `pip install datacontract-cli[s3]` |
270
- | Snowflake Integration | `pip install datacontract-cli[snowflake]` |
271
- | Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
265
+ | Dependency | Installation Command |
266
+ |------------------------|--------------------------------------------|
267
+ | Avro Support | `pip install datacontract-cli[avro]` |
268
+ | Google BigQuery | `pip install datacontract-cli[bigquery]` |
269
+ | Databricks Integration | `pip install datacontract-cli[databricks]` |
270
+ | Deltalake Integration | `pip install datacontract-cli[deltalake]` |
271
+ | Kafka Integration | `pip install datacontract-cli[kafka]` |
272
+ | PostgreSQL Integration | `pip install datacontract-cli[postgres]` |
273
+ | S3 Integration | `pip install datacontract-cli[s3]` |
274
+ | Snowflake Integration | `pip install datacontract-cli[snowflake]` |
275
+ | Microsoft SQL Server | `pip install datacontract-cli[sqlserver]` |
276
+ | Trino | `pip install datacontract-cli[trino]` |
272
277
 
273
278
 
274
279
 
@@ -384,6 +389,7 @@ Supported server types:
384
389
  - [snowflake](#snowflake)
385
390
  - [kafka](#kafka)
386
391
  - [postgres](#postgres)
392
+ - [trino](#trino)
387
393
  - [local](#local)
388
394
 
389
395
  Supported formats:
@@ -429,11 +435,12 @@ servers:
429
435
 
430
436
  #### Environment Variables
431
437
 
432
- | Environment Variable | Example | Description |
433
- |-----------------------------------|-------------------------------|-----------------------|
434
- | `DATACONTRACT_S3_REGION` | `eu-central-1` | Region of S3 bucket |
435
- | `DATACONTRACT_S3_ACCESS_KEY_ID` | `AKIAXV5Q5QABCDEFGH` | AWS Access Key ID |
436
- | `DATACONTRACT_S3_SECRET_ACCESS_KEY` | `93S7LRrJcqLaaaa/XXXXXXXXXXXXX` | AWS Secret Access Key |
438
+ | Environment Variable | Example | Description |
439
+ |-------------------------------------|---------------------------------|----------------------------------------|
440
+ | `DATACONTRACT_S3_REGION` | `eu-central-1` | Region of S3 bucket |
441
+ | `DATACONTRACT_S3_ACCESS_KEY_ID` | `AKIAXV5Q5QABCDEFGH` | AWS Access Key ID |
442
+ | `DATACONTRACT_S3_SECRET_ACCESS_KEY` | `93S7LRrJcqLaaaa/XXXXXXXXXXXXX` | AWS Secret Access Key |
443
+ | `DATACONTRACT_S3_SESSION_TOKEN` | `AQoDYXdzEJr...` | AWS temporary session token (optional) |
437
444
 
438
445
 
439
446
 
@@ -724,6 +731,35 @@ models:
724
731
  | `DATACONTRACT_POSTGRES_PASSWORD` | `mysecretpassword` | Password |
725
732
 
726
733
 
734
+ ### Trino
735
+
736
+ Data Contract CLI can test data in Trino.
737
+
738
+ #### Example
739
+
740
+ datacontract.yaml
741
+ ```yaml
742
+ servers:
743
+ trino:
744
+ type: trino
745
+ host: localhost
746
+ port: 8080
747
+ catalog: my_catalog
748
+ schema: my_schema
749
+ models:
750
+ my_table_1: # corresponds to a table
751
+ type: table
752
+ fields:
753
+ my_column_1: # corresponds to a column
754
+ type: varchar
755
+ ```
756
+
757
+ #### Environment Variables
758
+
759
+ | Environment Variable | Example | Description |
760
+ |-------------------------------|--------------------|-------------|
761
+ | `DATACONTRACT_TRINO_USERNAME` | `trino` | Username |
762
+ | `DATACONTRACT_TRINO_PASSWORD` | `mysecretpassword` | Password |
727
763
 
728
764
 
729
765
 
@@ -742,7 +778,7 @@ models:
742
778
  │ * --format [jsonschema|pydantic-model|sodacl|dbt|dbt-sources|db The export format. [default: None] [required] │
743
779
  │ t-staging-sql|odcs|rdf|avro|protobuf|great-expectati │
744
780
  │ ons|terraform|avro-idl|sql|sql-query|html|go|bigquer │
745
- │ y|dbml] │
781
+ │ y|dbml|spark] │
746
782
  │ --output PATH Specify the file path where the exported data will be │
747
783
  │ saved. If no path is provided, the output will be │
748
784
  │ printed to stdout. │
@@ -792,6 +828,7 @@ Available export options:
792
828
  | `go` | Export to Go types | ✅ |
793
829
  | `pydantic-model` | Export to pydantic models | ✅ |
794
830
  | `DBML` | Export to a DBML Diagram description | ✅ |
831
+ | `spark` | Export to a Spark StructType | ✅ |
795
832
  | Missing something? | Please create an issue on GitHub | TBD |
796
833
 
797
834
  #### Great Expectations
@@ -838,6 +875,10 @@ The export function converts the logical data types of the datacontract into the
838
875
  if a server is selected via the `--server` option (based on the `type` of that server). If no server is selected, the
839
876
  logical data types are exported.
840
877
 
878
+ #### Spark
879
+
880
+ The export function converts the data contract specification into a StructType Spark schema. The returned value is a Python code picture of the model schemas.
881
+ Spark DataFrame schema is defined as StructType. For more details about Spark Data Types please see [the spark documentation](https://spark.apache.org/docs/latest/sql-ref-datatypes.html)
841
882
 
842
883
  #### Avro
843
884
 
@@ -1214,6 +1255,121 @@ Examples: Removing or renaming models and fields.
1214
1255
  $ datacontract changelog datacontract-from-pr.yaml datacontract-from-main.yaml
1215
1256
  ```
1216
1257
 
1258
+ ## Customizing Exporters and Importers
1259
+
1260
+ ### Custom Exporter
1261
+ Using the exporter factory to add a new custom exporter
1262
+ ```python
1263
+
1264
+ from datacontract.data_contract import DataContract
1265
+ from datacontract.export.exporter import Exporter
1266
+ from datacontract.export.exporter_factory import exporter_factory
1267
+
1268
+
1269
+ # Create a custom class that implements export method
1270
+ class CustomExporter(Exporter):
1271
+ def export(self, data_contract, model, server, sql_server_type, export_args) -> dict:
1272
+ result = {
1273
+ "title": data_contract.info.title,
1274
+ "version": data_contract.info.version,
1275
+ "description": data_contract.info.description,
1276
+ "email": data_contract.info.contact.email,
1277
+ "url": data_contract.info.contact.url,
1278
+ "model": model,
1279
+ "model_columns": ", ".join(list(data_contract.models.get(model).fields.keys())),
1280
+ "export_args": export_args,
1281
+ "custom_args": export_args.get("custom_arg", ""),
1282
+ }
1283
+ return result
1284
+
1285
+
1286
+ # Register the new custom class into factory
1287
+ exporter_factory.register_exporter("custom", CustomExporter)
1288
+
1289
+
1290
+ if __name__ == "__main__":
1291
+ # Create a DataContract instance
1292
+ data_contract = DataContract(
1293
+ data_contract_file="/path/datacontract.yaml"
1294
+ )
1295
+ # call export
1296
+ result = data_contract.export(
1297
+ export_format="custom", model="orders", server="production", custom_arg="my_custom_arg"
1298
+ )
1299
+ print(result)
1300
+
1301
+ ```
1302
+ Output
1303
+ ```python
1304
+ {
1305
+ 'title': 'Orders Unit Test',
1306
+ 'version': '1.0.0',
1307
+ 'description': 'The orders data contract',
1308
+ 'email': 'team-orders@example.com',
1309
+ 'url': 'https://wiki.example.com/teams/checkout',
1310
+ 'model': 'orders',
1311
+ 'model_columns': 'order_id, order_total, order_status',
1312
+ 'export_args': {'server': 'production', 'custom_arg': 'my_custom_arg'},
1313
+ 'custom_args': 'my_custom_arg'
1314
+ }
1315
+ ```
1316
+
1317
+ ### Custom Importer
1318
+ Using the importer factory to add a new custom importer
1319
+ ```python
1320
+
1321
+ from datacontract.model.data_contract_specification import DataContractSpecification
1322
+ from datacontract.data_contract import DataContract
1323
+ from datacontract.imports.importer import Importer
1324
+ from datacontract.imports.importer_factory import importer_factory
1325
+ import json
1326
+
1327
+ # Create a custom class that implements import_source method
1328
+ class CustomImporter(Importer):
1329
+ def import_source(
1330
+ self, data_contract_specification: DataContractSpecification, source: str, import_args: dict
1331
+ ) -> dict:
1332
+ source_dict = json.loads(source)
1333
+ data_contract_specification.id = source_dict.get("id_custom")
1334
+ data_contract_specification.info.title = source_dict.get("title")
1335
+ data_contract_specification.info.description = source_dict.get("description_from_app")
1336
+
1337
+ return data_contract_specification
1338
+
1339
+
1340
+ # Register the new custom class into factory
1341
+ importer_factory.register_importer("custom_company_importer", CustomImporter)
1342
+
1343
+
1344
+ if __name__ == "__main__":
1345
+ # get a custom da
1346
+ json_from_custom_app = '{"id_custom":"uuid-custom","version":"0.0.2", "title":"my_custom_imported_data", "description_from_app": "Custom contract description"}'
1347
+ # Create a DataContract instance
1348
+ data_contract = DataContract()
1349
+
1350
+ # call import_from
1351
+ result = data_contract.import_from_source(
1352
+ format="custom_company_importer", data_contract_specification=DataContract.init(), source=json_from_custom_app
1353
+ )
1354
+ print(dict(result))
1355
+
1356
+ ```
1357
+ Output
1358
+
1359
+ ```python
1360
+ {
1361
+ 'dataContractSpecification': '0.9.3',
1362
+ 'id': 'uuid-custom',
1363
+ 'info': Info(title='my_custom_imported_data', version='0.0.1', status=None, description='Custom contract description', owner=None, contact=None),
1364
+ 'servers': {},
1365
+ 'terms': None,
1366
+ 'models': {},
1367
+ 'definitions': {},
1368
+ 'examples': [],
1369
+ 'quality': None,
1370
+ 'servicelevels': None
1371
+ }
1372
+ ```
1217
1373
  ## Development Setup
1218
1374
 
1219
1375
  Python base interpreter should be 3.11.x (unless working on 3.12 release candidate).
@@ -1263,7 +1419,26 @@ docker compose run --rm datacontract --version
1263
1419
 
1264
1420
  This command runs the container momentarily to check the version of the `datacontract` CLI. The `--rm` flag ensures that the container is automatically removed after the command executes, keeping your environment clean.
1265
1421
 
1422
+ ## Use with pre-commit
1423
+
1424
+ To run `datacontract-cli` as part of a [pre-commit](https://pre-commit.com/) workflow, add something like the below to the `repos` list in the project's `.pre-commit-config.yaml`:
1425
+
1426
+ ```yaml
1427
+ repos:
1428
+ - repo: https://github.com/datacontract/datacontract-cli
1429
+ rev: "v0.10.9"
1430
+ hooks:
1431
+ - id: datacontract-lint
1432
+ - id: datacontract-test
1433
+ args: ["--server", "production"]
1434
+ ```
1435
+
1436
+ ### Available Hook IDs
1266
1437
 
1438
+ | Hook ID | Description | Dependency |
1439
+ | ----------------- | ------------------------ | ---------- |
1440
+ | datacontract-lint | Runs the lint subcommand. | Python3 |
1441
+ | datacontract-test | Runs the test subcommand. Please look at [test](#test) section for all available arguments. | Python3 |
1267
1442
 
1268
1443
  ## Release Steps
1269
1444
 
@@ -1,11 +1,11 @@
1
1
  datacontract/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- datacontract/cli.py,sha256=Qd_8bLgHbZSnwg-l2xLpgwyXumr_x-pXW8vDFti5ucE,13320
3
- datacontract/data_contract.py,sha256=Bxq1vmo2MLmLZWXlrvWZPUalzNkrpiiinehdwIZlYFk,15849
2
+ datacontract/cli.py,sha256=sP9YdqMMMQYb7XLiKoAfNcU4QZGpdThtMxIGx1m8CZY,13974
3
+ datacontract/data_contract.py,sha256=uhH5c9tRCHBfz5UjRLWnTRdPdpSUzWvqJISOJF5Tqzo,13810
4
4
  datacontract/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  datacontract/web.py,sha256=Ov50NJVbQiaxjHXnVOvRw9moMkKHHcxFhdzwbA13QOw,2134
6
6
  datacontract/breaking/breaking.py,sha256=l0ZwUX8G4QK_0nLRLJHArpwgTWTD7WQYMuAp3l_y1bY,12184
7
7
  datacontract/breaking/breaking_rules.py,sha256=Qj7XbsyD-BynNwhrNiETTk7_Hs_tHrtrZmSU634zEJI,3157
8
- datacontract/catalog/catalog.py,sha256=GMBGZPVo5lGZQDmdWCwWb5-upXlUz6R6eTMg9xI9a3s,2640
8
+ datacontract/catalog/catalog.py,sha256=reT2NDKGbjnid8itlBVL5gH9lJI_Z2V3NJa8AR7uGhA,2691
9
9
  datacontract/engines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py,sha256=TXO47ON3NjwYI4Y2eBYklMOCo7vAtYzqLPAhZhii6dg,1565
11
11
  datacontract/engines/datacontract/check_that_datacontract_file_exists.py,sha256=XHvxX6BrTdZk2wN55zd6ER4k7ILDyGzjbCbZxQAJ2iE,665
@@ -13,15 +13,16 @@ datacontract/engines/datacontract/check_that_datacontract_str_is_valid.py,sha256
13
13
  datacontract/engines/fastjsonschema/check_jsonschema.py,sha256=rXGfGDu9-RJomj9WcVe8vEfluR25vn2rOS7BeOVQ0XA,5748
14
14
  datacontract/engines/fastjsonschema/s3/s3_read_files.py,sha256=HS1dgwkUp3CwuI6VtZnRpOUnTd04E3yMgLbkK5jcW7o,1057
15
15
  datacontract/engines/soda/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- datacontract/engines/soda/check_soda_execute.py,sha256=_aF6jcji3FmIHgGs3XpQfYSlPtYcuDA_aH4tJEWDu9I,7477
16
+ datacontract/engines/soda/check_soda_execute.py,sha256=uhzua13wpJQYIdMIZF9_qxVOxDlRe1azvFt5zvrCE10,7774
17
17
  datacontract/engines/soda/connections/bigquery.py,sha256=C-8kxmzpYe88bJp80ObHFLMh4rpnIjnUQ7XOj0Ke7lk,903
18
18
  datacontract/engines/soda/connections/dask.py,sha256=Yy6Et2n_vDVsdjtqyBWDSZt7mnjPzPk_MZ-92VZHfnY,1496
19
19
  datacontract/engines/soda/connections/databricks.py,sha256=lpMju-o_TzLZeF0EEVwePPr8JahqvFnj5xRYjF15fc8,561
20
- datacontract/engines/soda/connections/duckdb.py,sha256=2wzUWnK7CLi7EJTT2Mh8Arv2pg6XGToe_9DdvLu0cNY,5585
20
+ datacontract/engines/soda/connections/duckdb.py,sha256=O0DiyBOqa8wijwTjSU4STVQeghtGG0ef_BpbGRZnEDg,6275
21
21
  datacontract/engines/soda/connections/kafka.py,sha256=vh7z-4ZsmpXiYcogf3oTkagrAPcq6HG2SccnxNwFeVQ,5635
22
22
  datacontract/engines/soda/connections/postgres.py,sha256=9GTF4Es3M5vb7ocSGqAxXmslvkS5CjsPQGIuo020CFc,626
23
23
  datacontract/engines/soda/connections/snowflake.py,sha256=y1t2a1DWY4_tr5k-X5_nhLE6v1rfCwTahzhtHR91x9A,719
24
24
  datacontract/engines/soda/connections/sqlserver.py,sha256=RzGLbCUdRyfmDcqtM_AB9WZ-Xk-XYX91nkXpVNpYbvc,1440
25
+ datacontract/engines/soda/connections/trino.py,sha256=JvKUP9aFg_n095oWE0-bGmfbETSWEOURGEZdQuG8txA,718
25
26
  datacontract/export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
27
  datacontract/export/avro_converter.py,sha256=pcNIJPZdW3MNHhePspFSMyy6qZdR1qb48PbTGbVQxaw,3795
27
28
  datacontract/export/avro_idl_converter.py,sha256=-zZxV0OAC76tMkAA9hXbEtp2wtpildKJb0OIbPhgoJE,9794
@@ -29,33 +30,36 @@ datacontract/export/bigquery_converter.py,sha256=chAxgbYybyLG5v6SwqIweK9PePvE-36
29
30
  datacontract/export/csv_type_converter.py,sha256=ZZuJwBgQnafZC7PPvAXsBf2IajPJq8TYZ1l8Qq0GYeI,1290
30
31
  datacontract/export/dbml_converter.py,sha256=dIx7iMxLrJkDPFt_pCc_r5VkremGjsoUpNWNYNSzet4,3693
31
32
  datacontract/export/dbt_converter.py,sha256=QfapVeunwab7bWn_B9-J_1U8fm1wdsPBW_Ws2b99o1E,9390
32
- datacontract/export/exporter.py,sha256=qHDZhqwynsOLJtreziKfMAvF2bbxlIWR1QD7aQFD4q4,2794
33
- datacontract/export/exporter_factory.py,sha256=H7X0JK23Ez0ZQlp36xXaMonzB16OAUWpWJwjQVkRX9Q,2984
33
+ datacontract/export/exporter.py,sha256=Z1t9ctQSwTLNpM1wYBFeLDgBwwCJVqdk8bBAW72qz8I,2844
34
+ datacontract/export/exporter_factory.py,sha256=CgYTx5m11Ec0vQV_-5tHxilTIH3qpRvUDvifsOybiZk,4756
34
35
  datacontract/export/go_converter.py,sha256=oWkEjOXBIGN8emTaxeJD8xpB3VYP4sVaNzKX-Oeqgw0,3330
35
36
  datacontract/export/great_expectations_converter.py,sha256=LIuWHn3h7xRrDDs1YoibHOI8NVF2Izh5IZOQFLeWN7k,5302
36
37
  datacontract/export/html_export.py,sha256=i7jckL80osA8incF0YoJdq3NaYmV1_3OU0cZBfPdNDs,2578
37
- datacontract/export/jsonschema_converter.py,sha256=bP1hbLnEN-2fhKrjcAa4ORn0djC4SWfCQshRSuErTdI,4960
38
+ datacontract/export/jsonschema_converter.py,sha256=xxJMB4b78m66X30RUb_-qWVwvffLdj0zeiojBt9r7ks,5044
38
39
  datacontract/export/odcs_converter.py,sha256=WngHoTF7R9uMDLCedBso7m2s0yDJQS5HTACtH3AhG-E,4673
39
40
  datacontract/export/protobuf_converter.py,sha256=Baqq2uvRg0AHFo6gR-hEYdLyiYRWziC1Q4AujlHgCzo,3192
40
41
  datacontract/export/pydantic_converter.py,sha256=1Lt9F8i6zyQYb44MyQtsXwCWWXYxZ47SmzArr_uPqsU,5579
41
42
  datacontract/export/rdf_converter.py,sha256=nNYVKJ5bQEq-rRz3yHwpvbsNbvjoOMwkCfkev8Y11H0,6436
42
- datacontract/export/sodacl_converter.py,sha256=NSiaztzpvHaU3x2ba5ebA3NbA27bmNVM2Fp0M1_RQC0,6962
43
+ datacontract/export/sodacl_converter.py,sha256=a-CWXyL1SXpPEBEoUVX1JSXOvrfcLprq9XCz9zDEkSg,7276
44
+ datacontract/export/spark_converter.py,sha256=aVOlVUAcQ0wexqUohXUckU8A4WQh8NdhPnKQSGpb-Mg,6733
43
45
  datacontract/export/sql_converter.py,sha256=grDTj3MGhVc5BbJbZ__LFawJtrsnv4ApmOMX4ohPnCQ,4802
44
- datacontract/export/sql_type_converter.py,sha256=tS2mrh-yXacbZg06nEUuZ-BQozU_00qPPExvmdJEA5A,8980
46
+ datacontract/export/sql_type_converter.py,sha256=aUPsHCOm7m9X4NdZ0C_FguOZwnTzu-1pyz9DVlFkniE,10052
45
47
  datacontract/export/terraform_converter.py,sha256=IFwn-6BWPVkfwDQbj_Gl0GwbJdMKiwKgXCXz5A64cEs,2163
46
- datacontract/imports/avro_importer.py,sha256=3QTnGNps-g1dxnJjLOLr8vk64jRNebHgN1EHrdcMiXc,5559
47
- datacontract/imports/bigquery_importer.py,sha256=HzVx8XH7Rrgks2EL4CT-1MvjPYwCfJaCbUxaRcS9smY,7695
48
- datacontract/imports/glue_importer.py,sha256=EkSAsh-f5TpgvW_sg9HuoO8pVOvhAzHHg2JqNEkBYHs,5709
49
- datacontract/imports/jsonschema_importer.py,sha256=f_x8DbWo423b6xcSIvY7jbk_rs2FM4lMMF75fSRE3sk,6329
50
- datacontract/imports/odcs_importer.py,sha256=h4HUjApyhwWiZq1-uO9M0Sw18bHXudUaDxn3IDCvrr8,7167
51
- datacontract/imports/sql_importer.py,sha256=tCSayA0YK_zr_R_KElfz0GOQwP0Tzz3TdBHAICnPN84,2419
52
- datacontract/imports/unity_importer.py,sha256=BOsuVKOwhH7Qg-VIK8LoIXvDaiT0UdLHyL-JRwYQgVs,5019
48
+ datacontract/imports/avro_importer.py,sha256=Q18MZsd9Yw2qxd4IjKXa4-WlG-YBpP5pC7GPY7vjyHE,5845
49
+ datacontract/imports/bigquery_importer.py,sha256=frBs5a9GuNVtNWF3DtEvsOiIemGI3dfDOEH475l1_84,8399
50
+ datacontract/imports/glue_importer.py,sha256=in2KIhtQaHJBJSCCnFpoGkqHddsWcOn499Y1RnlREk8,8031
51
+ datacontract/imports/importer.py,sha256=BztwaTljlC79rRxKXDhfg3uM0xMKikQIfyop-J-dIlY,711
52
+ datacontract/imports/importer_factory.py,sha256=BjyQjKhoLw5D3hE4sP6FpFgFXgI0Fr-FJz6tyoEKdK0,2643
53
+ datacontract/imports/jsonschema_importer.py,sha256=z17GMxziLadkkrlDrQOvicX2zLqgDoqV7q-U2vSLP-w,6627
54
+ datacontract/imports/odcs_importer.py,sha256=0SQUON2lkTBFopdiUg-s3HVt1ES1oqaVYRP42hZh_7I,7453
55
+ datacontract/imports/sql_importer.py,sha256=nNrFJonNgEv8xwaN_SFq9M26LKdmLP0yHvbx31ErmQo,2723
56
+ datacontract/imports/unity_importer.py,sha256=f2VZYYY9DjxzttPHK6mU0bv5Nv5QKWmxo1r3Lb-1png,5583
53
57
  datacontract/init/download_datacontract_file.py,sha256=pj_4mhWKlEtfueWohDgkb1nyuG5ERDipUDszxKwpZUs,413
54
58
  datacontract/integration/publish_datamesh_manager.py,sha256=3bWgWrdcJip0V3EzlLmuxBzAQBn6evEHbhrAKx1qEjY,1300
55
59
  datacontract/integration/publish_opentelemetry.py,sha256=PjU9XH2wgisg0dBP34bUvQazxVZjp37Zfck_xEu5sPQ,3812
56
60
  datacontract/lint/files.py,sha256=tg0vq_w4LQsEr_8A5qr4hUJmHeGalUpsXJXC1t-OGC0,471
57
61
  datacontract/lint/lint.py,sha256=GhgBwfDgihXfWIu1WUfYeJoxfYacVJrwq3L2KO4Z2Io,5076
58
- datacontract/lint/resolve.py,sha256=hi7MQJw69G197MYJa7IO9LskI9z8QFCGemIDjrHp6ko,6465
62
+ datacontract/lint/resolve.py,sha256=mdwUn-iJGckyxMAY1ST-SP0qS4tndEFPAW3QP-cJsKY,7311
59
63
  datacontract/lint/schema.py,sha256=FIzubF1C9TnhEQBeoDsLuhc6HymCMx_v435Hjbcz4U8,838
60
64
  datacontract/lint/urls.py,sha256=NHTbwadnm1VCxsiF7clfDvsxJ8-D3Mi5AzDj029E6wQ,1325
61
65
  datacontract/lint/linters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -67,23 +71,23 @@ datacontract/lint/linters/notice_period_linter.py,sha256=oHSOLU2uXd7BDvfEd_VjeXS
67
71
  datacontract/lint/linters/quality_schema_linter.py,sha256=-zaI49okETJYo-qR-J6rQqMRI9QX17UK9ASf1GxgYnk,2181
68
72
  datacontract/lint/linters/valid_constraints_linter.py,sha256=GeeE2hojMt24EoHuSHE1lURA2v2p5Dmxc7Qq8IvZQH0,4915
69
73
  datacontract/model/breaking_change.py,sha256=BIDEUo1U2CQLVT2-I5PyFttxAj6zQPI1UUkEoOOQXMY,2249
70
- datacontract/model/data_contract_specification.py,sha256=1z1ecGw4u0ktQn4343H9bRbH-ctnxlsRiQSWIykvgMA,5319
74
+ datacontract/model/data_contract_specification.py,sha256=UJN1Y3O4F9l0Yl4h7X1rT2XgeX_VvuoN0XHJ5LBTgAA,5923
71
75
  datacontract/model/exceptions.py,sha256=zW9NoyzwsND-c9UqgyTVuezUVGEc6KK1Uc2zl12loyo,1178
72
76
  datacontract/model/run.py,sha256=v7QNsPwYS1otQrpjeOaFsLRnxO8OgbdK_d-Z_e3iy0s,2610
73
77
  datacontract/publish/publish.py,sha256=rWnQWWneCjokCpwYv88EAtAlFnA-3hZgl-1k6dak_8w,1191
74
- datacontract/templates/datacontract.html,sha256=GeXjcQU43IRKZE7KSDU_PnLkRao17JC15quzSo2YPr0,12306
78
+ datacontract/templates/datacontract.html,sha256=C4mqpsbquXUYHk_5m0m4-svSC7QJmnd1FRH3pKWf07o,13434
75
79
  datacontract/templates/index.html,sha256=wNVCSmcYhvCRNM6hJpCCIl5nxQooupkZN45fbdQkD5s,12495
76
- datacontract/templates/partials/datacontract_information.html,sha256=Q55v2XZcOdG_G9paEDHdNl_kIcAAB65qCzDusMWAJtc,2478
80
+ datacontract/templates/partials/datacontract_information.html,sha256=7ZBxgEgi2XndKBypeOpe03oCSRPOujC6NVlN7zexGNM,6221
77
81
  datacontract/templates/partials/datacontract_servicelevels.html,sha256=ed3QgB11B0Qq2h_NwaroGZ4pQMBPEhfeQaoS-qEipqY,11401
78
- datacontract/templates/partials/datacontract_terms.html,sha256=ASgoxLjT4Rd11Uhyv0PSoQDR3xUFPGnv5tPCYZDoMmc,1595
79
- datacontract/templates/partials/definition.html,sha256=p0ICZL34gbIUMZvSZYIFCxWrv-euMyL7jhEzwCWnfHs,6404
82
+ datacontract/templates/partials/datacontract_terms.html,sha256=1cnJcOTpxwot2BCuZmkLF_SPfiVloLs3c8mj9WfE4sc,1865
83
+ datacontract/templates/partials/definition.html,sha256=jEvjThHghHT2bo4oMAfe3H0lzc4ZuqDsJFOpN9w3Nho,7085
80
84
  datacontract/templates/partials/example.html,sha256=F1dWbHDIXQScgfs4OVgqM1lR4uV4xX5j6suasXHNM88,1204
81
- datacontract/templates/partials/model_field.html,sha256=Xy8fauErx61HuTSPLLQHgAHfX3_ilRbE0c17-nX9jAY,5072
82
- datacontract/templates/partials/server.html,sha256=bJdLAn-9FqP3D2zA1aBR3WdzSFUUaWvUrf-8wKfG2Fk,5321
83
- datacontract/templates/style/output.css,sha256=6j8ZRXrRd_d0ex1i54z3I7AAahhx-w0h4VvNonT__IE,25118
84
- datacontract_cli-0.10.8.dist-info/LICENSE,sha256=23h64qnSeIZ0DKeziWAKC-zBCt328iSbRbWBrXoYRb4,2210
85
- datacontract_cli-0.10.8.dist-info/METADATA,sha256=Er2c6xRtjGg2ebGTQ-augKIibT82ct1W4Ckmamx7gyc,73238
86
- datacontract_cli-0.10.8.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
87
- datacontract_cli-0.10.8.dist-info/entry_points.txt,sha256=D3Eqy4q_Z6bHauGd4ppIyQglwbrm1AJnLau4Ppbw9Is,54
88
- datacontract_cli-0.10.8.dist-info/top_level.txt,sha256=VIRjd8EIUrBYWjEXJJjtdUgc0UAJdPZjmLiOR8BRBYM,13
89
- datacontract_cli-0.10.8.dist-info/RECORD,,
85
+ datacontract/templates/partials/model_field.html,sha256=w5BNqIxr03-T3r7lynvzi_i4LUGgOJMqe-5zF1_XRck,6762
86
+ datacontract/templates/partials/server.html,sha256=WkWFbz1ZvhIAUQQhH5Lkwb0HZRW907ehEnFmJSkpquQ,6235
87
+ datacontract/templates/style/output.css,sha256=F3oEhUpuv8kA_dWr4pJymBS_Ju6huIIZdLMkJzPzMmU,25647
88
+ datacontract_cli-0.10.9.dist-info/LICENSE,sha256=23h64qnSeIZ0DKeziWAKC-zBCt328iSbRbWBrXoYRb4,2210
89
+ datacontract_cli-0.10.9.dist-info/METADATA,sha256=IwuPXyGrQsCqeS7uLMK72sPaoqC3gpqQj-H7G8xyHM4,79619
90
+ datacontract_cli-0.10.9.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
91
+ datacontract_cli-0.10.9.dist-info/entry_points.txt,sha256=D3Eqy4q_Z6bHauGd4ppIyQglwbrm1AJnLau4Ppbw9Is,54
92
+ datacontract_cli-0.10.9.dist-info/top_level.txt,sha256=VIRjd8EIUrBYWjEXJJjtdUgc0UAJdPZjmLiOR8BRBYM,13
93
+ datacontract_cli-0.10.9.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (70.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5