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

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: datacontract-cli
3
- Version: 0.10.9
3
+ Version: 0.10.10
4
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
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
@@ -12,10 +12,10 @@ Requires-Python: >=3.10
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
14
  Requires-Dist: typer[all] <0.13,>=0.9
15
- Requires-Dist: pydantic <2.8.0,>=2.5.3
15
+ Requires-Dist: pydantic <2.9.0,>=2.8.2
16
16
  Requires-Dist: pyyaml ~=6.0.1
17
17
  Requires-Dist: requests <2.33,>=2.31
18
- Requires-Dist: fastapi ==0.111.0
18
+ Requires-Dist: fastapi ==0.111.1
19
19
  Requires-Dist: fastparquet ==2024.5.0
20
20
  Requires-Dist: python-multipart ==0.0.9
21
21
  Requires-Dist: rich ~=13.7.0
@@ -50,10 +50,10 @@ Requires-Dist: ruff ; extra == 'dev'
50
50
  Requires-Dist: pre-commit ~=3.7.1 ; extra == 'dev'
51
51
  Requires-Dist: pytest ; extra == 'dev'
52
52
  Requires-Dist: pytest-xdist ; extra == 'dev'
53
- Requires-Dist: moto ; extra == 'dev'
53
+ Requires-Dist: moto ==5.0.11 ; extra == 'dev'
54
54
  Requires-Dist: pymssql ==2.3.0 ; extra == 'dev'
55
55
  Requires-Dist: kafka-python ; extra == 'dev'
56
- Requires-Dist: trino ==0.328.0 ; extra == 'dev'
56
+ Requires-Dist: trino ==0.329.0 ; extra == 'dev'
57
57
  Requires-Dist: testcontainers <4.8,>=4.5 ; extra == 'dev'
58
58
  Requires-Dist: testcontainers[core] ; extra == 'dev'
59
59
  Requires-Dist: testcontainers[minio] ; extra == 'dev'
@@ -300,16 +300,16 @@ Commands
300
300
  Download a datacontract.yaml template and write it to file.
301
301
 
302
302
  ╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────╮
303
- │ location [LOCATION] The location (url or path) of the data contract yaml to create.
304
- │ [default: datacontract.yaml]
303
+ │ location [LOCATION] The location (url or path) of the data contract yaml to create.
304
+ │ [default: datacontract.yaml]
305
305
  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
306
306
  ╭─ Options ────────────────────────────────────────────────────────────────────────────────────╮
307
- │ --template TEXT URL of a template or data contract
308
- │ [default:
309
- │ https://datacontract.com/datacontract.init.yaml]
310
- │ --overwrite --no-overwrite Replace the existing datacontract.yaml
311
- │ [default: no-overwrite]
312
- │ --help Show this message and exit.
307
+ │ --template TEXT URL of a template or data contract
308
+ │ [default:
309
+ │ https://datacontract.com/datacontract.init.yaml]
310
+ │ --overwrite --no-overwrite Replace the existing datacontract.yaml
311
+ │ [default: no-overwrite]
312
+ │ --help Show this message and exit.
313
313
  ╰──────────────────────────────────────────────────────────────────────────────────────────────╯
314
314
  ```
315
315
 
@@ -321,12 +321,12 @@ Commands
321
321
  Validate that the datacontract.yaml is correctly formatted.
322
322
 
323
323
  ╭─ Arguments ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
324
- │ location [LOCATION] The location (url or path) of the data contract yaml. [default: datacontract.yaml]
324
+ │ location [LOCATION] The location (url or path) of the data contract yaml. [default: datacontract.yaml]
325
325
  ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
326
326
  ╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
327
- │ --schema TEXT The location (url or path) of the Data Contract Specification JSON Schema
328
- │ [default: https://datacontract.com/datacontract.schema.json]
329
- │ --help Show this message and exit.
327
+ │ --schema TEXT The location (url or path) of the Data Contract Specification JSON Schema
328
+ │ [default: https://datacontract.com/datacontract.schema.json]
329
+ │ --help Show this message and exit.
330
330
  ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
331
331
  ```
332
332
 
@@ -338,28 +338,28 @@ Commands
338
338
  Run schema and quality tests on configured servers.
339
339
 
340
340
  ╭─ Arguments ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
341
- │ location [LOCATION] The location (url or path) of the data contract yaml. [default: datacontract.yaml]
341
+ │ location [LOCATION] The location (url or path) of the data contract yaml. [default: datacontract.yaml]
342
342
  ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
343
343
  ╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
344
- │ --schema TEXT The location (url or path) of the Data Contract
345
- │ Specification JSON Schema
346
- │ [default:
347
- │ https://datacontract.com/datacontract.schema.json]
348
- │ --server TEXT The server configuration to run the schema and quality
349
- │ tests. Use the key of the server object in the data
350
- │ contract yaml file to refer to a server, e.g.,
351
- │ `production`, or `all` for all servers (default).
352
- │ [default: all]
353
- │ --examples --no-examples Run the schema and quality tests on the example data
354
- │ within the data contract.
355
- │ [default: no-examples]
356
- │ --publish TEXT The url to publish the results after the test
357
- │ [default: None]
358
- │ --publish-to-opentelemetry --no-publish-to-opentelemetry Publish the results to opentelemetry. Use environment
359
- │ variables to configure the OTLP endpoint, headers, etc.
360
- │ [default: no-publish-to-opentelemetry]
361
- │ --logs --no-logs Print logs [default: no-logs]
362
- │ --help Show this message and exit.
344
+ │ --schema TEXT The location (url or path) of the Data Contract
345
+ │ Specification JSON Schema
346
+ │ [default:
347
+ │ https://datacontract.com/datacontract.schema.json]
348
+ │ --server TEXT The server configuration to run the schema and quality
349
+ │ tests. Use the key of the server object in the data
350
+ │ contract yaml file to refer to a server, e.g.,
351
+ │ `production`, or `all` for all servers (default).
352
+ │ [default: all]
353
+ │ --examples --no-examples Run the schema and quality tests on the example data
354
+ │ within the data contract.
355
+ │ [default: no-examples]
356
+ │ --publish TEXT The url to publish the results after the test
357
+ │ [default: None]
358
+ │ --publish-to-opentelemetry --no-publish-to-opentelemetry Publish the results to opentelemetry. Use environment
359
+ │ variables to configure the OTLP endpoint, headers, etc.
360
+ │ [default: no-publish-to-opentelemetry]
361
+ │ --logs --no-logs Print logs [default: no-logs]
362
+ │ --help Show this message and exit.
363
363
  ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
364
364
  ```
365
365
 
@@ -473,7 +473,6 @@ models:
473
473
  | `DATACONTRACT_BIGQUERY_ACCOUNT_INFO_JSON_PATH` | `~/service-access-key.json` | Service Access key as saved on key creation by BigQuery. If this environment variable isn't set, the cli tries to use `GOOGLE_APPLICATION_CREDENTIALS` as a fallback, so if you have that set for using their Python library anyway, it should work seamlessly. |
474
474
 
475
475
 
476
-
477
476
  ### Azure
478
477
 
479
478
  Data Contract CLI can test data that is stored in Azure Blob storage or Azure Data Lake Storage (Gen2) (ADLS) in various formats.
@@ -493,11 +492,11 @@ servers:
493
492
 
494
493
  Authentication works with an Azure Service Principal (SPN) aka App Registration with a secret.
495
494
 
496
- | Environment Variable | Example | Description |
497
- |-----------------------------------|-------------------------------|------------------------------------------------------|
498
- | `DATACONTRACT_AZURE_TENANT_ID` | `79f5b80f-10ff-40b9-9d1f-774b42d605fc` | The Azure Tenant ID |
499
- | `DATACONTRACT_AZURE_CLIENT_ID` | `3cf7ce49-e2e9-4cbc-a922-4328d4a58622` | The ApplicationID / ClientID of the app registration |
500
- | `DATACONTRACT_AZURE_CLIENT_SECRET` | `yZK8Q~GWO1MMXXXXXXXXXXXXX` | The Client Secret value |
495
+ | Environment Variable | Example | Description |
496
+ |------------------------------------|----------------------------------------|------------------------------------------------------|
497
+ | `DATACONTRACT_AZURE_TENANT_ID` | `79f5b80f-10ff-40b9-9d1f-774b42d605fc` | The Azure Tenant ID |
498
+ | `DATACONTRACT_AZURE_CLIENT_ID` | `3cf7ce49-e2e9-4cbc-a922-4328d4a58622` | The ApplicationID / ClientID of the app registration |
499
+ | `DATACONTRACT_AZURE_CLIENT_SECRET` | `yZK8Q~GWO1MMXXXXXXXXXXXXX` | The Client Secret value |
501
500
 
502
501
 
503
502
 
@@ -527,13 +526,13 @@ models:
527
526
 
528
527
  #### Environment Variables
529
528
 
530
- | Environment Variable | Example | Description |
531
- |----------------------------------|--------------------|-------------|
532
- | `DATACONTRACT_SQLSERVER_USERNAME` | `root` | Username |
533
- | `DATACONTRACT_SQLSERVER_PASSWORD` | `toor` | Password |
534
- | `DATACONTRACT_SQLSERVER_TRUSTED_CONNECTION` | `True` | Use windows authentication, instead of login |
535
- | `DATACONTRACT_SQLSERVER_TRUST_SERVER_CERTIFICATE` | `True` | Trust self-signed certificate |
536
- | `DATACONTRACT_SQLSERVER_ENCRYPTED_CONNECTION` | `True` | Use SSL |
529
+ | Environment Variable | Example| Description |
530
+ |---------------------------------------------------|--------|----------------------------------------------|
531
+ | `DATACONTRACT_SQLSERVER_USERNAME` | `root` | Username |
532
+ | `DATACONTRACT_SQLSERVER_PASSWORD` | `toor` | Password |
533
+ | `DATACONTRACT_SQLSERVER_TRUSTED_CONNECTION` | `True` | Use windows authentication, instead of login |
534
+ | `DATACONTRACT_SQLSERVER_TRUST_SERVER_CERTIFICATE` | `True` | Trust self-signed certificate |
535
+ | `DATACONTRACT_SQLSERVER_ENCRYPTED_CONNECTION` | `True` | Use SSL |
537
536
 
538
537
 
539
538
 
@@ -564,8 +563,8 @@ models:
564
563
 
565
564
  | Environment Variable | Example | Description |
566
565
  |----------------------------------------------|--------------------------------------|-------------------------------------------------------|
567
- | `DATACONTRACT_DATABRICKS_TOKEN` | `dapia00000000000000000000000000000` | The personal access token to authenticate |
568
- | `DATACONTRACT_DATABRICKS_HTTP_PATH` | `/sql/1.0/warehouses/b053a3ffffffff` | The HTTP path to the SQL warehouse or compute cluster |
566
+ | `DATACONTRACT_DATABRICKS_TOKEN` | `dapia00000000000000000000000000000` | The personal access token to authenticate |
567
+ | `DATACONTRACT_DATABRICKS_HTTP_PATH` | `/sql/1.0/warehouses/b053a3ffffffff` | The HTTP path to the SQL warehouse or compute cluster |
569
568
 
570
569
 
571
570
  ### Databricks (programmatic)
@@ -610,7 +609,7 @@ run.result
610
609
 
611
610
  Works with Spark DataFrames.
612
611
  DataFrames need to be created as named temporary views.
613
- Multiple temporary views are suppored if your data contract contains multiple models.
612
+ Multiple temporary views are supported if your data contract contains multiple models.
614
613
 
615
614
  Testing DataFrames is useful to test your datasets in a pipeline before writing them to a data source.
616
615
 
@@ -778,7 +777,7 @@ models:
778
777
  │ * --format [jsonschema|pydantic-model|sodacl|dbt|dbt-sources|db The export format. [default: None] [required] │
779
778
  │ t-staging-sql|odcs|rdf|avro|protobuf|great-expectati │
780
779
  │ ons|terraform|avro-idl|sql|sql-query|html|go|bigquer │
781
- │ y|dbml|spark]
780
+ │ y|dbml|spark]
782
781
  │ --output PATH Specify the file path where the exported data will be │
783
782
  │ saved. If no path is provided, the output will be │
784
783
  │ printed to stdout. │
@@ -929,18 +928,19 @@ models:
929
928
  Create a data contract from the given source location. Prints to stdout.
930
929
 
931
930
  ╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
932
- │ * --format [sql|avro|glue|bigquery|jsonschema|unity] The format of the source file. [default: None] [required]
933
- --source TEXT The path to the file or Glue Database that should be imported. │
934
- [default: None]
935
- --glue-table TEXT List of table ids to import from the Glue Database (repeat for
936
- multiple table ids, leave empty for all tables in the dataset).
937
- [default: None]
938
- --bigquery-project TEXT The bigquery project id. [default: None]
939
- │ --bigquery-dataset TEXT The bigquery dataset id. [default: None] │
940
- │ --bigquery-table TEXT List of table ids to import from the bigquery API (repeat for
941
- multiple table ids, leave empty for all tables in the dataset).
942
- [default: None]
943
- --help Show this message and exit.
931
+ │ * --format [sql|avro|glue|bigquery|jsonschema| The format of the source file. [default: None] [required] |
932
+ unity|spark] |
933
+ --source TEXT The path to the file or Glue Database that should be imported.
934
+ [default: None]
935
+ --glue-table TEXT List of table ids to import from the Glue Database (repeat for
936
+ multiple table ids, leave empty for all tables in the dataset).
937
+ [default: None]
938
+ │ --bigquery-project TEXT The bigquery project id. [default: None] │
939
+ │ --bigquery-dataset TEXT The bigquery dataset id. [default: None]
940
+ --bigquery-table TEXT List of table ids to import from the bigquery API (repeat for
941
+ multiple table ids, leave empty for all tables in the dataset).
942
+ [default: None]
943
+ │ --help Show this message and exit. │
944
944
  ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
945
945
  ```
946
946
 
@@ -958,11 +958,11 @@ Available import options:
958
958
  | `avro` | Import from AVRO schemas | ✅ |
959
959
  | `glue` | Import from AWS Glue DataCatalog | ✅ |
960
960
  | `protobuf` | Import from Protobuf schemas | TBD |
961
- | `jsonschema` | Import from JSON Schemas | ✅ |
962
- | `bigquery` | Import from BigQuery Schemas | ✅ |
961
+ | `jsonschema` | Import from JSON Schemas | ✅ |
962
+ | `bigquery` | Import from BigQuery Schemas | ✅ |
963
963
  | `unity` | Import from Databricks Unity Catalog | partial |
964
964
  | `dbt` | Import from dbt models | TBD |
965
- | `odcs` | Import from Open Data Contract Standard (ODCS) | ✅ |
965
+ | `odcs` | Import from Open Data Contract Standard (ODCS) | ✅ |
966
966
  | Missing something? | Please create an issue on GitHub | TBD |
967
967
 
968
968
 
@@ -1005,7 +1005,7 @@ export DATABRICKS_IMPORT_ACCESS_TOKEN=<token>
1005
1005
  datacontract import --format unity --unity-table-full-name <table_full_name>
1006
1006
  ```
1007
1007
 
1008
- ### Glue
1008
+ #### Glue
1009
1009
 
1010
1010
  Importing from Glue reads the necessary Data directly off of the AWS API.
1011
1011
  You may give the `glue-table` parameter to enumerate the tables that should be imported. If no tables are given, _all_ available tables of the database will be imported.
@@ -1022,6 +1022,15 @@ datacontract import --format glue --source <database_name> --glue-table <table_n
1022
1022
  datacontract import --format glue --source <database_name>
1023
1023
  ```
1024
1024
 
1025
+ #### Spark
1026
+
1027
+ Importing from Spark table or view these must be created or accessible in the Spark context. Specify tables list in `source` parameter.
1028
+
1029
+ Example:
1030
+
1031
+ ```bash
1032
+ datacontract import --format spark --source "users,orders"
1033
+ ```
1025
1034
 
1026
1035
  ### breaking
1027
1036
 
@@ -1031,11 +1040,11 @@ datacontract import --format glue --source <database_name>
1031
1040
  Identifies breaking changes between data contracts. Prints to stdout.
1032
1041
 
1033
1042
  ╭─ Arguments ───────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
1034
- │ * location_old TEXT The location (url or path) of the old data contract yaml. [default: None] [required]
1035
- │ * location_new TEXT The location (url or path) of the new data contract yaml. [default: None] [required]
1043
+ │ * location_old TEXT The location (url or path) of the old data contract yaml. [default: None] [required]
1044
+ │ * location_new TEXT The location (url or path) of the new data contract yaml. [default: None] [required]
1036
1045
  ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
1037
1046
  ╭─ Options ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
1038
- │ --help Show this message and exit.
1047
+ │ --help Show this message and exit.
1039
1048
  ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
1040
1049
  ```
1041
1050
 
@@ -1047,11 +1056,11 @@ datacontract import --format glue --source <database_name>
1047
1056
  Generate a changelog between data contracts. Prints to stdout.
1048
1057
 
1049
1058
  ╭─ Arguments ───────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
1050
- │ * location_old TEXT The location (url or path) of the old data contract yaml. [default: None] [required]
1051
- │ * location_new TEXT The location (url or path) of the new data contract yaml. [default: None] [required]
1059
+ │ * location_old TEXT The location (url or path) of the old data contract yaml. [default: None] [required]
1060
+ │ * location_new TEXT The location (url or path) of the new data contract yaml. [default: None] [required]
1052
1061
  ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
1053
1062
  ╭─ Options ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
1054
- │ --help Show this message and exit.
1063
+ │ --help Show this message and exit.
1055
1064
  ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
1056
1065
  ```
1057
1066
 
@@ -1063,8 +1072,8 @@ datacontract import --format glue --source <database_name>
1063
1072
  PLACEHOLDER. Currently works as 'changelog' does.
1064
1073
 
1065
1074
  ╭─ Arguments ───────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
1066
- │ * location_old TEXT The location (url or path) of the old data contract yaml. [default: None] [required]
1067
- │ * location_new TEXT The location (url or path) of the new data contract yaml. [default: None] [required]
1075
+ │ * location_old TEXT The location (url or path) of the old data contract yaml. [default: None] [required]
1076
+ │ * location_new TEXT The location (url or path) of the new data contract yaml. [default: None] [required]
1068
1077
  ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
1069
1078
  ╭─ Options ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
1070
1079
  │ --help Show this message and exit. │
@@ -1080,9 +1089,9 @@ datacontract import --format glue --source <database_name>
1080
1089
  Create an html catalog of data contracts.
1081
1090
 
1082
1091
  ╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
1083
- │ --files TEXT Glob pattern for the data contract files to include in the catalog. [default: *.yaml]
1084
- │ --output TEXT Output directory for the catalog html files. [default: catalog/]
1085
- │ --help Show this message and exit.
1092
+ │ --files TEXT Glob pattern for the data contract files to include in the catalog. [default: *.yaml]
1093
+ │ --output TEXT Output directory for the catalog html files. [default: catalog/]
1094
+ │ --help Show this message and exit.
1086
1095
  ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
1087
1096
  ```
1088
1097
 
@@ -1104,19 +1113,22 @@ datacontract import --format glue --source <database_name>
1104
1113
 
1105
1114
  ## Integrations
1106
1115
 
1107
- | Integration | Option | Description |
1108
- |-------------------|------------------------------|-------------------------------------------------------------------------------------------------------|
1109
- | Data Mesh Manager | `--publish` | Push full results to the [Data Mesh Manager API](https://api.datamesh-manager.com/swagger/index.html) |
1110
- | OpenTelemetry | `--publish-to-opentelemetry` | Push result as gauge metrics |
1116
+ | Integration | Option | Description |
1117
+ |-----------------------|------------------------------|---------------------------------------------------------------------------------------------------------------|
1118
+ | Data Mesh Manager | `--publish` | Push full results to the [Data Mesh Manager API](https://api.datamesh-manager.com/swagger/index.html) |
1119
+ | Data Contract Manager | `--publish` | Push full results to the [Data Contract Manager API](https://api.datacontract-manager.com/swagger/index.html) |
1120
+ | OpenTelemetry | `--publish-to-opentelemetry` | Push result as gauge metrics |
1111
1121
 
1112
1122
  ### Integration with Data Mesh Manager
1113
1123
 
1114
- If you use [Data Mesh Manager](https://datamesh-manager.com/), you can use the data contract URL and append the `--publish` option to send and display the test results. Set an environment variable for your API key.
1124
+ If you use [Data Mesh Manager](https://datamesh-manager.com/) or [Data Contract Manager](https://datacontract-manager.com/), you can use the data contract URL and append the `--publish` option to send and display the test results. Set an environment variable for your API key.
1115
1125
 
1116
1126
  ```bash
1117
1127
  # Fetch current data contract, execute tests on production, and publish result to data mesh manager
1118
1128
  $ EXPORT DATAMESH_MANAGER_API_KEY=xxx
1119
- $ datacontract test https://demo.datamesh-manager.com/demo279750347121/datacontracts/4df9d6ee-e55d-4088-9598-b635b2fdcbbc/datacontract.yaml --server production --publish
1129
+ $ datacontract test https://demo.datamesh-manager.com/demo279750347121/datacontracts/4df9d6ee-e55d-4088-9598-b635b2fdcbbc/datacontract.yaml \
1130
+ --server production \
1131
+ --publish https://api.datamesh-manager.com/api/test-results
1120
1132
  ```
1121
1133
 
1122
1134
  ### Integration with OpenTelemetry
@@ -1126,12 +1138,12 @@ If you use OpenTelemetry, you can use the data contract URL and append the `--pu
1126
1138
  The metric name is "datacontract.cli.test.result" and it uses the following encoding for the result:
1127
1139
 
1128
1140
  | datacontract.cli.test.result | Description |
1129
- |-------|---------------------------------------|
1130
- | 0 | test run passed, no warnings |
1131
- | 1 | test run has warnings |
1132
- | 2 | test run failed |
1133
- | 3 | test run not possible due to an error |
1134
- | 4 | test status unknown |
1141
+ |------------------------------|---------------------------------------|
1142
+ | 0 | test run passed, no warnings |
1143
+ | 1 | test run has warnings |
1144
+ | 2 | test run failed |
1145
+ | 3 | test run not possible due to an error |
1146
+ | 4 | test status unknown |
1135
1147
 
1136
1148
 
1137
1149
  ```bash
@@ -1159,7 +1171,7 @@ Create a data contract based on the actual data. This is the fastest way to get
1159
1171
 
1160
1172
  1. Use an existing physical schema (e.g., SQL DDL) as a starting point to define your logical data model in the contract. Double check right after the import whether the actual data meets the imported logical data model. Just to be sure.
1161
1173
  ```bash
1162
- $ datacontract import --format sql ddl.sql
1174
+ $ datacontract import --format sql --source ddl.sql
1163
1175
  $ datacontract test
1164
1176
  ```
1165
1177
 
@@ -1182,7 +1194,7 @@ Create a data contract based on the actual data. This is the fastest way to get
1182
1194
 
1183
1195
  5. Set up a CI pipeline that executes daily and reports the results to the [Data Mesh Manager](https://datamesh-manager.com). Or to some place else. You can even publish to any opentelemetry compatible system.
1184
1196
  ```bash
1185
- $ datacontract test --publish https://api.datamesh-manager.com/api/runs
1197
+ $ datacontract test --publish https://api.datamesh-manager.com/api/test-results
1186
1198
  ```
1187
1199
 
1188
1200
  ### Contract-First
@@ -1234,7 +1246,7 @@ Examples: adding models or fields
1234
1246
  - Add the models or fields in the datacontract.yaml
1235
1247
  - Increment the minor version of the datacontract.yaml on any change. Simply edit the datacontract.yaml for this.
1236
1248
  - You need a policy that these changes are non-breaking. That means that one cannot use the star expression in SQL to query a table under contract. Make the consequences known.
1237
- - Fail the build in the Pull Request if a datacontract.yaml accidentially adds a breaking change even despite only a minor version change
1249
+ - Fail the build in the Pull Request if a datacontract.yaml accidentally adds a breaking change even despite only a minor version change
1238
1250
  ```bash
1239
1251
  $ datacontract breaking datacontract-from-pr.yaml datacontract-from-main.yaml
1240
1252
  ```
@@ -1435,10 +1447,11 @@ repos:
1435
1447
 
1436
1448
  ### Available Hook IDs
1437
1449
 
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 |
1450
+ | Hook ID | Description | Dependency |
1451
+ | ----------------- | -------------------------------------------------- | ---------- |
1452
+ | datacontract-lint | Runs the lint subcommand. | Python3 |
1453
+ | datacontract-test | Runs the test subcommand. Please look at | Python3 |
1454
+ | | [test](#test) section for all available arguments. | |
1442
1455
 
1443
1456
  ## Release Steps
1444
1457
 
@@ -1460,7 +1473,7 @@ We are happy to receive your contributions. Propose your change in an issue or d
1460
1473
 
1461
1474
  ## Related Tools
1462
1475
 
1463
- - [Data Mesh Manager](https://www.datamesh-manager.com/) is a commercial tool to manage data products and data contracts. It supports the data contract specification and allows the user to import or export data contracts using this specification.
1476
+ - [Data Contract Manager](https://www.datacontract-manager.com/) is a commercial tool to manage data contracts. It contains a web UI, access management, and data governance for a full enterprise data marketplace.
1464
1477
  - [Data Contract GPT](https://gpt.datacontract.com) is a custom GPT that can help you write data contracts.
1465
1478
  - [Data Contract Editor](https://editor.datacontract.com) is an editor for Data Contracts, including a live html preview.
1466
1479
 
@@ -1,6 +1,6 @@
1
1
  datacontract/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- datacontract/cli.py,sha256=sP9YdqMMMQYb7XLiKoAfNcU4QZGpdThtMxIGx1m8CZY,13974
3
- datacontract/data_contract.py,sha256=uhH5c9tRCHBfz5UjRLWnTRdPdpSUzWvqJISOJF5Tqzo,13810
2
+ datacontract/cli.py,sha256=LZYYECXjCk-AZmPaihuRJkknEAuM8OxvGoK40WpAeAs,14261
3
+ datacontract/data_contract.py,sha256=o7lY-n97JXtumt1OX-9cDbXa_nvWlC9f3hivWPFd28s,13842
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
@@ -13,18 +13,18 @@ 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=uhzua13wpJQYIdMIZF9_qxVOxDlRe1azvFt5zvrCE10,7774
16
+ datacontract/engines/soda/check_soda_execute.py,sha256=mqCqVdBFTuJwOiQBf15KSj48ccQgbewFPSMzrAWF_Hk,7820
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=O0DiyBOqa8wijwTjSU4STVQeghtGG0ef_BpbGRZnEDg,6275
20
+ datacontract/engines/soda/connections/duckdb.py,sha256=0IqIGKsWarz8MgfC3Uzj6_Vj9nKgoGtW5IX6yOq6Tz8,6537
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
25
  datacontract/engines/soda/connections/trino.py,sha256=JvKUP9aFg_n095oWE0-bGmfbETSWEOURGEZdQuG8txA,718
26
26
  datacontract/export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- datacontract/export/avro_converter.py,sha256=pcNIJPZdW3MNHhePspFSMyy6qZdR1qb48PbTGbVQxaw,3795
27
+ datacontract/export/avro_converter.py,sha256=CbrGsGQCi-RNrQ7FfxnuGv3oeT9tHrkSl8dhFbLZyjU,3788
28
28
  datacontract/export/avro_idl_converter.py,sha256=-zZxV0OAC76tMkAA9hXbEtp2wtpildKJb0OIbPhgoJE,9794
29
29
  datacontract/export/bigquery_converter.py,sha256=chAxgbYybyLG5v6SwqIweK9PePvE-36FStR7fyA_F_4,4577
30
30
  datacontract/export/csv_type_converter.py,sha256=ZZuJwBgQnafZC7PPvAXsBf2IajPJq8TYZ1l8Qq0GYeI,1290
@@ -40,27 +40,29 @@ datacontract/export/odcs_converter.py,sha256=WngHoTF7R9uMDLCedBso7m2s0yDJQS5HTAC
40
40
  datacontract/export/protobuf_converter.py,sha256=Baqq2uvRg0AHFo6gR-hEYdLyiYRWziC1Q4AujlHgCzo,3192
41
41
  datacontract/export/pydantic_converter.py,sha256=1Lt9F8i6zyQYb44MyQtsXwCWWXYxZ47SmzArr_uPqsU,5579
42
42
  datacontract/export/rdf_converter.py,sha256=nNYVKJ5bQEq-rRz3yHwpvbsNbvjoOMwkCfkev8Y11H0,6436
43
- datacontract/export/sodacl_converter.py,sha256=a-CWXyL1SXpPEBEoUVX1JSXOvrfcLprq9XCz9zDEkSg,7276
43
+ datacontract/export/sodacl_converter.py,sha256=Uv3BOsq20YKCHmSU6mN-6L2hPPF4V9fPxDoJ42okfHs,7280
44
44
  datacontract/export/spark_converter.py,sha256=aVOlVUAcQ0wexqUohXUckU8A4WQh8NdhPnKQSGpb-Mg,6733
45
45
  datacontract/export/sql_converter.py,sha256=grDTj3MGhVc5BbJbZ__LFawJtrsnv4ApmOMX4ohPnCQ,4802
46
46
  datacontract/export/sql_type_converter.py,sha256=aUPsHCOm7m9X4NdZ0C_FguOZwnTzu-1pyz9DVlFkniE,10052
47
47
  datacontract/export/terraform_converter.py,sha256=IFwn-6BWPVkfwDQbj_Gl0GwbJdMKiwKgXCXz5A64cEs,2163
48
- datacontract/imports/avro_importer.py,sha256=Q18MZsd9Yw2qxd4IjKXa4-WlG-YBpP5pC7GPY7vjyHE,5845
48
+ datacontract/imports/avro_importer.py,sha256=ZlqBuWl1CIOtccm_EHyycRdIUJCS9r9lV6IHfpx9tsI,9886
49
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
50
+ datacontract/imports/dbt_importer.py,sha256=IPfMIsV1qzKEyfodgGmZRcF0nqN-oW1VixOoPJe-d6k,3390
51
+ datacontract/imports/glue_importer.py,sha256=YO-ATDMeUx7WCsuaVzk_VhvKGqks9925qmDkpz5oLbs,8031
52
+ datacontract/imports/importer.py,sha256=-hN92fruu__bJAbY3bILWcX1zmikVHt8q3KL83ICpu8,772
53
+ datacontract/imports/importer_factory.py,sha256=xfVyEKY2HXIqKVS9GtWnc5xYrmcJZ-WEpVtExLudyYQ,2999
54
+ datacontract/imports/jsonschema_importer.py,sha256=dvugek0rkUVbfqy1xb6y3msQjziCgooF0HKc2vWBTIw,6776
54
55
  datacontract/imports/odcs_importer.py,sha256=0SQUON2lkTBFopdiUg-s3HVt1ES1oqaVYRP42hZh_7I,7453
56
+ datacontract/imports/spark_importer.py,sha256=5_zMcQlHzIBGznxxL6d5wevivq1XwPI8MbKbftUrtYA,4220
55
57
  datacontract/imports/sql_importer.py,sha256=nNrFJonNgEv8xwaN_SFq9M26LKdmLP0yHvbx31ErmQo,2723
56
58
  datacontract/imports/unity_importer.py,sha256=f2VZYYY9DjxzttPHK6mU0bv5Nv5QKWmxo1r3Lb-1png,5583
57
59
  datacontract/init/download_datacontract_file.py,sha256=pj_4mhWKlEtfueWohDgkb1nyuG5ERDipUDszxKwpZUs,413
58
- datacontract/integration/publish_datamesh_manager.py,sha256=3bWgWrdcJip0V3EzlLmuxBzAQBn6evEHbhrAKx1qEjY,1300
60
+ datacontract/integration/publish_datamesh_manager.py,sha256=TuLRVdZs21UBet-qCqIywd_7WH5m6m-G83tw515G3hI,1489
59
61
  datacontract/integration/publish_opentelemetry.py,sha256=PjU9XH2wgisg0dBP34bUvQazxVZjp37Zfck_xEu5sPQ,3812
60
62
  datacontract/lint/files.py,sha256=tg0vq_w4LQsEr_8A5qr4hUJmHeGalUpsXJXC1t-OGC0,471
61
63
  datacontract/lint/lint.py,sha256=GhgBwfDgihXfWIu1WUfYeJoxfYacVJrwq3L2KO4Z2Io,5076
62
- datacontract/lint/resolve.py,sha256=mdwUn-iJGckyxMAY1ST-SP0qS4tndEFPAW3QP-cJsKY,7311
63
- datacontract/lint/schema.py,sha256=FIzubF1C9TnhEQBeoDsLuhc6HymCMx_v435Hjbcz4U8,838
64
+ datacontract/lint/resolve.py,sha256=KOGKrf5wZYgsa5-Uc0x5-C5GX1aVt6TSftIwD8zxy_Y,8815
65
+ datacontract/lint/schema.py,sha256=php99jF3puwCWrE02JD1ownC5UFEKCZsLH89UGOxMww,1469
64
66
  datacontract/lint/urls.py,sha256=NHTbwadnm1VCxsiF7clfDvsxJ8-D3Mi5AzDj029E6wQ,1325
65
67
  datacontract/lint/linters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
68
  datacontract/lint/linters/description_linter.py,sha256=Cm99NTWo75kDRIW63qz5uEa8xsug_8dFURPRC1twodw,1554
@@ -71,12 +73,12 @@ datacontract/lint/linters/notice_period_linter.py,sha256=oHSOLU2uXd7BDvfEd_VjeXS
71
73
  datacontract/lint/linters/quality_schema_linter.py,sha256=-zaI49okETJYo-qR-J6rQqMRI9QX17UK9ASf1GxgYnk,2181
72
74
  datacontract/lint/linters/valid_constraints_linter.py,sha256=GeeE2hojMt24EoHuSHE1lURA2v2p5Dmxc7Qq8IvZQH0,4915
73
75
  datacontract/model/breaking_change.py,sha256=BIDEUo1U2CQLVT2-I5PyFttxAj6zQPI1UUkEoOOQXMY,2249
74
- datacontract/model/data_contract_specification.py,sha256=UJN1Y3O4F9l0Yl4h7X1rT2XgeX_VvuoN0XHJ5LBTgAA,5923
76
+ datacontract/model/data_contract_specification.py,sha256=1tbaMfV9PVuLbf9wymWvdnJoclLiDNwhbyS8peRtluc,6016
75
77
  datacontract/model/exceptions.py,sha256=zW9NoyzwsND-c9UqgyTVuezUVGEc6KK1Uc2zl12loyo,1178
76
78
  datacontract/model/run.py,sha256=v7QNsPwYS1otQrpjeOaFsLRnxO8OgbdK_d-Z_e3iy0s,2610
77
79
  datacontract/publish/publish.py,sha256=rWnQWWneCjokCpwYv88EAtAlFnA-3hZgl-1k6dak_8w,1191
78
- datacontract/templates/datacontract.html,sha256=C4mqpsbquXUYHk_5m0m4-svSC7QJmnd1FRH3pKWf07o,13434
79
- datacontract/templates/index.html,sha256=wNVCSmcYhvCRNM6hJpCCIl5nxQooupkZN45fbdQkD5s,12495
80
+ datacontract/templates/datacontract.html,sha256=w9xGnjYFtFmmsU90_I1NHVLNcuS22flPw51oIAn56WY,13442
81
+ datacontract/templates/index.html,sha256=dggq8ng61xZEeu6-6tbTQqjNcRFT0JTkn7y75087U58,12503
80
82
  datacontract/templates/partials/datacontract_information.html,sha256=7ZBxgEgi2XndKBypeOpe03oCSRPOujC6NVlN7zexGNM,6221
81
83
  datacontract/templates/partials/datacontract_servicelevels.html,sha256=ed3QgB11B0Qq2h_NwaroGZ4pQMBPEhfeQaoS-qEipqY,11401
82
84
  datacontract/templates/partials/datacontract_terms.html,sha256=1cnJcOTpxwot2BCuZmkLF_SPfiVloLs3c8mj9WfE4sc,1865
@@ -85,9 +87,9 @@ datacontract/templates/partials/example.html,sha256=F1dWbHDIXQScgfs4OVgqM1lR4uV4
85
87
  datacontract/templates/partials/model_field.html,sha256=w5BNqIxr03-T3r7lynvzi_i4LUGgOJMqe-5zF1_XRck,6762
86
88
  datacontract/templates/partials/server.html,sha256=WkWFbz1ZvhIAUQQhH5Lkwb0HZRW907ehEnFmJSkpquQ,6235
87
89
  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,,
90
+ datacontract_cli-0.10.10.dist-info/LICENSE,sha256=23h64qnSeIZ0DKeziWAKC-zBCt328iSbRbWBrXoYRb4,2210
91
+ datacontract_cli-0.10.10.dist-info/METADATA,sha256=b3U9R8eE7T7eO9VMADNMx55Oqj15VZkMOHnhCjGTaes,80778
92
+ datacontract_cli-0.10.10.dist-info/WHEEL,sha256=YiKiUUeZQGmGJoR_0N1Y933DOBowq4AIvDe2-UIy8E4,91
93
+ datacontract_cli-0.10.10.dist-info/entry_points.txt,sha256=D3Eqy4q_Z6bHauGd4ppIyQglwbrm1AJnLau4Ppbw9Is,54
94
+ datacontract_cli-0.10.10.dist-info/top_level.txt,sha256=VIRjd8EIUrBYWjEXJJjtdUgc0UAJdPZjmLiOR8BRBYM,13
95
+ datacontract_cli-0.10.10.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (70.2.0)
2
+ Generator: setuptools (71.0.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5