datacontract-cli 1.0.16__tar.gz → 1.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {datacontract_cli-1.0.16/datacontract_cli.egg-info → datacontract_cli-1.1.0}/PKG-INFO +41 -33
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/README.md +2 -13
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/__init__.py +4 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/api.py +88 -3
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/catalog/catalog.py +2 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/cli.py +29 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_changelog.py +11 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_ci.py +3 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_dbt.py +2 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_edit.py +2 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_export.py +6 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_import.py +55 -17
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_lint.py +3 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_publish.py +4 -2
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_test.py +50 -2
- datacontract_cli-1.1.0/datacontract/config/__init__.py +32 -0
- datacontract_cli-1.1.0/datacontract/config/cli_context.py +19 -0
- datacontract_cli-1.1.0/datacontract/config/settings.py +894 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/data_contract.py +25 -2
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/checks/create_checks.py +2 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/data_contract_test.py +74 -7
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/datacontract/check_azure_blob_file.py +9 -8
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/fastjsonschema/check_jsonschema.py +23 -15
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +5 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/connections/aws_credentials.py +12 -15
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/connections/connect.py +257 -158
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/connections/duckdb_connection.py +15 -13
- datacontract_cli-1.1.0/datacontract/engines/ibis/connections/kafka.py +609 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/connections/redshift_credentials.py +35 -51
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/ibis_check_execute.py +43 -2
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/great_expectations_exporter.py +1 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/spark_exporter.py +193 -76
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/athena_importer.py +5 -3
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/dcs_importer.py +2 -2
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/glue_importer.py +18 -15
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/importer.py +9 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/mysql_importer.py +10 -6
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/object_storage_importer.py +6 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/odcs_importer.py +4 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/oracle_importer.py +6 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/postgres_importer.py +10 -6
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/redshift_importer.py +6 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/snowflake_importer.py +20 -20
- datacontract_cli-1.1.0/datacontract/imports/spark_type_json.py +122 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/sqlserver_importer.py +9 -6
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/trino_importer.py +8 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/unity_importer.py +23 -21
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/integration/dbt_sync.py +23 -6
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/integration/entropy_data.py +27 -19
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/lint/files.py +2 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/lint/resolve.py +34 -21
- datacontract_cli-1.1.0/datacontract/lint/resources.py +26 -0
- datacontract_cli-1.1.0/datacontract/lint/s3.py +26 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/lint/urls.py +13 -11
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/model/exceptions.py +0 -18
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/model/run.py +3 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/output/test_results_writer.py +4 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/datacontract.html +1 -0
- datacontract_cli-1.1.0/datacontract/templates/datacontract_odcs.html +47 -0
- datacontract_cli-1.1.0/datacontract/templates/macros/authoritative_definitions.html +25 -0
- datacontract_cli-1.1.0/datacontract/templates/macros/schema.html +226 -0
- datacontract_cli-1.1.0/datacontract/templates/macros/server.html +84 -0
- datacontract_cli-1.1.0/datacontract/templates/macros/support.html +25 -0
- datacontract_cli-1.1.0/datacontract/templates/partials_odcs/custom_properties.html +69 -0
- datacontract_cli-1.1.0/datacontract/templates/partials_odcs/diagram.html +41 -0
- datacontract_cli-1.1.0/datacontract/templates/partials_odcs/dialog_yaml.html +27 -0
- datacontract_cli-1.1.0/datacontract/templates/partials_odcs/footer.html +15 -0
- datacontract_cli-1.1.0/datacontract/templates/partials_odcs/fundamentals.html +113 -0
- datacontract_cli-1.1.0/datacontract/templates/partials_odcs/header.html +16 -0
- datacontract_cli-1.1.0/datacontract/templates/partials_odcs/pricing.html +37 -0
- datacontract_cli-1.1.0/datacontract/templates/partials_odcs/roles.html +91 -0
- datacontract_cli-1.1.0/datacontract/templates/partials_odcs/schema.html +123 -0
- datacontract_cli-1.1.0/datacontract/templates/partials_odcs/servers.html +282 -0
- datacontract_cli-1.1.0/datacontract/templates/partials_odcs/sla.html +95 -0
- datacontract_cli-1.1.0/datacontract/templates/partials_odcs/support.html +79 -0
- datacontract_cli-1.1.0/datacontract/templates/partials_odcs/team.html +236 -0
- datacontract_cli-1.1.0/datacontract/templates/partials_odcs/term_of_use.html +101 -0
- datacontract_cli-1.1.0/datacontract/templates/partials_odcs/title.html +88 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/style/output.css +531 -213
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0/datacontract_cli.egg-info}/PKG-INFO +41 -33
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract_cli.egg-info/SOURCES.txt +35 -3
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract_cli.egg-info/requires.txt +20 -17
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/pyproject.toml +87 -44
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_api.py +126 -0
- datacontract_cli-1.1.0/tests/test_config.py +248 -0
- datacontract_cli-1.1.0/tests/test_config_file.py +140 -0
- datacontract_cli-1.1.0/tests/test_config_require.py +39 -0
- datacontract_cli-1.1.0/tests/test_config_threading.py +96 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_athena.py +15 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_bigquery.py +12 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_databricks.py +15 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_impala.py +15 -0
- datacontract_cli-1.1.0/tests/test_connect_mysql.py +78 -0
- datacontract_cli-1.1.0/tests/test_connect_oracle.py +73 -0
- datacontract_cli-1.1.0/tests/test_connect_postgres.py +87 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_redshift.py +21 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_snowflake.py +73 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_sqlserver.py +24 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_trino.py +19 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_dbt_sync.py +31 -3
- datacontract_cli-1.1.0/tests/test_docs_config_options.py +17 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_edit.py +1 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_sodacl.py +34 -1
- datacontract_cli-1.1.0/tests/test_export_spark.py +191 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_object_storage.py +3 -1
- datacontract_cli-1.1.0/tests/test_import_spark_type_json.py +129 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_lint.py +48 -0
- datacontract_cli-1.1.0/tests/test_test_databricks.py +53 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_kafka.py +3 -13
- datacontract_cli-1.1.0/tests/test_test_kafka_decoding.py +212 -0
- datacontract_cli-1.1.0/tests/test_test_row_filter.py +120 -0
- datacontract_cli-1.0.16/datacontract/engines/ibis/connections/kafka.py +0 -437
- datacontract_cli-1.0.16/datacontract/lint/resources.py +0 -21
- datacontract_cli-1.0.16/datacontract/templates/datacontract_odcs.html +0 -703
- datacontract_cli-1.0.16/tests/test_export_spark.py +0 -180
- datacontract_cli-1.0.16/tests/test_import_spark.py +0 -219
- datacontract_cli-1.0.16/tests/test_require_env.py +0 -28
- datacontract_cli-1.0.16/tests/test_test_databricks.py +0 -27
- datacontract_cli-1.0.16/tests/test_test_dataframe.py +0 -200
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/LICENSE +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/MANIFEST.in +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/changelog/__init__.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/changelog/changelog.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/changelog/normalize.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_api.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_catalog.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/command_init.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/VERSION +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/abap-Bs8kvjsq.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/apex-Dspwrl5m.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/assets/editor.worker-4.7.0.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/assets/yaml.worker-4.7.0.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/azcli-k1BiOau1.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/bat-BIP72KWc.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/bicep-VhQeYhS3.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/cameligo-DnuAXtHg.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/clojure-BAuDPsal.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/coffee-BV06qSnj.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/cpp-Cz8Jeyrf.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/csharp-F6hhlXFb.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/csp-KzlEHCyI.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/css-e4FKntZ3.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/cssMode-BNkTa2xp.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/cypher-CpvDGKRr.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/dart-DdHeFWR0.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/datacontract-editor.css +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/datacontract-editor.es.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/dockerfile-aoNXDcio.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/ecl-C4Q0DYuA.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/elixir-C9X42b0T.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/flow9-Bff42pfB.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/freemarker2-Dyfzmb5A.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/fsharp-C6vPAsHG.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/go-DEr8zx9f.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/graphql-BiNBBRFh.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/handlebars-BtDNI-uC.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/hcl-2T9lKuFg.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/html-Cn4TGw_o.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/htmlMode-Bf84vbo2.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/index.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/ini-CZGtssYM.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/java-B260NeH3.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/javascript-B86Kac07.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/jsonMode-Ckgg5lAE.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/julia-kuNLM9c5.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/kotlin-Bz6kAefA.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/less-AZUtS89I.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/lexon-BcmgnyRb.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/liquid-D0NPwuu_.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/logo_fuchsia_v2.svg +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/lua-Dz1RbATg.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/m3-CIMooLFn.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/markdown-C1BsCK9P.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/mdx-QFRSBtVQ.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/mips-BovsnfLQ.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/monaco-4.7.0.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/msdax-CiRB2ZB-.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/mysql-BwdpPE19.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/objective-c-D4nfHfso.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/odcs.svg +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/pascal--j5-PYtz.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/pascaligo-C7TcJxNL.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/perl-BzEWqUb5.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/pgsql-B_KZ0mGX.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/php-A19QHzQV.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/pla-COeKY1hA.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/postiats-BfMp7zJL.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/powerquery-B0TS_5Gb.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/powershell-5jSbKdYB.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/protobuf-YgnOutn3.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/pug-DLej6kn5.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/python-C8RW9B6A.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/qsharp-AhjqtSHB.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/r-D-F4P80w.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/razor-CLZqdY_r.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/redis-hwwIlMnV.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/redshift-Bcm_kjEG.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/restructuredtext-CrdzfPP-.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/ruby-QC2UNm1s.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/rust-5aqiQ3L5.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/sb-B1g1ZfLJ.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/scala-C2U4R5Gb.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/scheme-DeFRbslr.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/scss-RSTCiCmI.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/shell-BpF-iNu8.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/solidity-C00r2mbQ.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/sophia-DVW5ZKDB.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/sparql-B0nmpxeX.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/sql-CJwKPERn.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/st-DPlKG5DT.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/swift-YZBAbVHV.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/systemverilog-CDQSaH63.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/tcl-Dlu8sp6Q.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/tsMode-yleMwhPq.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/twig-C5TO7-kw.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/typescript-CJBeebKU.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/typespec-BsmjDEu7.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/vb-ChHvIDrk.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/wgsl-XEp1ju8c.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/xml-vC-NMVX1.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/editor_assets/yaml-Dlf2VF-T.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/__init__.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/checks/__init__.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/checks/check_filter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/checks/check_spec.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/checks/dimensions.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/checks/physical_type_match.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/checks/type_normalize.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/__init__.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/connections/__init__.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/connections/oracle_patch.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/connections/redshift_patch.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/dtype_category.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/native_type.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/engines/ibis/snowflake_structured_types.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/__init__.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/avro_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/avro_idl_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/bigquery_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/custom_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/data_caterer_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/dbml_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/dbt_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/dcs_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/dqx_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/duckdb_type_converter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/excel_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/exporter_factory.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/go_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/html_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/iceberg_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/jsonschema_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/markdown_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/mermaid_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/odcs_export_helper.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/odcs_v3_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/pandas_type_converter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/protobuf_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/pydantic_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/rdf_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/sodacl_check_builder.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/sodacl_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/sql_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/sql_type_converter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/export/sqlalchemy_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/avro_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/bigquery_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/csv_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/dbml_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/dbt_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/excel_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/iceberg_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/importer_factory.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/json_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/jsonschema_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/odcs_helper.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/parquet_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/powerbi_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/protobuf_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/spark_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/imports/sql_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/init/init_template.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/integration/dbt_test_mapping.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/lint/schema.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/model/changelog.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/model/odcs.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/model/server.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/output/__init__.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/output/ci_output.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/output/json_test_results.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/output/junit_test_results.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/output/output_format.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/output/text_changelog_results.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/py.typed +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/datacontract-1.2.1.init.yaml +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/datacontract-1.2.1.schema.json +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/odcs-3.0.2.schema.json +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/odcs-3.1.0.init.yaml +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/schemas/odcs-3.1.0.schema.json +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/index.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/datacontract_information.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/datacontract_terms.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/definition.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/example.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/model_field.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/quality.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract/templates/partials/server.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract_cli.egg-info/dependency_links.txt +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract_cli.egg-info/entry_points.txt +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/datacontract_cli.egg-info/top_level.txt +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/setup.cfg +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_catalog.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_changelog.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_changelog_engine.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_changelog_normalize.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_changelog_output_text.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_ci_output.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_cli.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_connect_s3_credentials.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_create_checks_nested_type.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_create_checks_physical_type.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_create_checks_primary_key.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_data_contract.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_data_contract_checks.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_data_contract_specification.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_dbt_test_mapping.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_description_linter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_docs_commands.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_docs_ordering.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_download_datacontract_file.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_dtype_category.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_duckdb_json.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_avro.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_avro_idl.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_bigquery.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_complex_data_contract.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_custom.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_custom_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_custom_model.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_data_caterer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_dbml.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_dbt_models.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_dbt_sources.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_dbt_staging_sql.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_dqx.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_excel.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_go.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_great_expectations.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_html.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_iceberg.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_jsonschema.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_markdown.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_mermaid.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_odcs_v3.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_protobuf.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_pydantic.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_rdf.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_sql.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_sql_clickhouse.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_sql_query.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_export_sqlalchemy.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_ibis_mssql_pattern.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_ibis_mssql_schema.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_ibis_oracle_schema.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_athena.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_avro.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_bigquery.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_csv.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_dbml.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_dbt.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_excel.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_glue.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_iceberg.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_json.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_jsonschema.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_mysql.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_odcs_v3.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_oracle.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_parquet.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_postgres.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_powerbi.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_protobuf.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_redshift.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_snowflake.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_sql_oracle.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_sql_postgres.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_sql_snowflake.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_sql_sqlserver.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_sqlserver.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_trino.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_import_unity_file.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_install_extras.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_integration_entropydata.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_native_type_schema_scope.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_oracle_patch.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_physical_type_match.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_redshift_credentials.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_redshift_patch.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_resolve.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_resolve_definitions.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_roundtrip_jsonschema.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_server_type_mssql.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_snowflake_structured_types.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_sql_type_converter_physicaltype.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_api.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_athena_iceberg.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_azure_blob_file.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_azure_remote.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_bigquery.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_checks_filter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_delta.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_diagnostics.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_dimension_filter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_failed_samples.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_gcs_csv_remote.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_gcs_json_remote.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_kafka_remote.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_local_json.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_local_json_nd.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_mysql.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_oracle.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_oracle_xe.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_output_json.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_output_junit.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_parquet.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_postgres.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_quality.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_quality_id_and_tag_filter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_quality_local_fallback.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_quality_percent_severity.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_redshift.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_s3_csv.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_s3_delta.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_s3_json.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_s3_json_complex.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_s3_json_multiple_models.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_s3_json_remote.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_schema_evolution.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_server_not_found.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_snowflake.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_soda_connection_error.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_sqlserver.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_test_trino.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.1.0}/tests/test_type_normalize.py +0 -0
|
@@ -1,19 +1,36 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datacontract-cli
|
|
3
|
-
Version: 1.0
|
|
3
|
+
Version: 1.1.0
|
|
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
|
-
Author-email: Jochen Christ <jochen.christ@
|
|
5
|
+
Author-email: Jochen Christ <jochen.christ@entropy-data.com>, Stefan Negele <stefan.negele@innoq.com>, Simon Harrer <simon.harrer@entropy-data.com>
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Project-URL: Homepage, https://cli.datacontract.com
|
|
8
|
+
Project-URL: Documentation, https://docs.datacontract.com
|
|
9
|
+
Project-URL: Repository, https://github.com/datacontract/datacontract-cli
|
|
8
10
|
Project-URL: Issues, https://github.com/datacontract/datacontract-cli/issues
|
|
9
|
-
|
|
11
|
+
Project-URL: Changelog, https://docs.datacontract.com/release-notes
|
|
12
|
+
Keywords: data-contract,data-contracts,odcs,open-data-contract-standard,data-quality,data-governance,data-mesh,data-product,data-engineering,schema,dbt,snowflake,databricks,bigquery
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Intended Audience :: Information Technology
|
|
10
17
|
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
24
|
+
Classifier: Topic :: Database
|
|
25
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
26
|
+
Classifier: Topic :: Software Development :: Testing
|
|
11
27
|
Requires-Python: <3.15,>=3.10
|
|
12
28
|
Description-Content-Type: text/markdown
|
|
13
29
|
License-File: LICENSE
|
|
14
30
|
Requires-Dist: typer<0.28,>=0.18.0
|
|
15
31
|
Requires-Dist: click<9.0.0,>=8.1.0
|
|
16
32
|
Requires-Dist: pydantic<2.14.0,>=2.8.2
|
|
33
|
+
Requires-Dist: pydantic-settings<3.0.0,>=2.5.0
|
|
17
34
|
Requires-Dist: pyyaml~=6.0.1
|
|
18
35
|
Requires-Dist: ruamel.yaml<0.20,>=0.17
|
|
19
36
|
Requires-Dist: requests<2.35,>=2.31
|
|
@@ -40,24 +57,26 @@ Requires-Dist: pandas>=2.0.0; extra == "csv"
|
|
|
40
57
|
Provides-Extra: excel
|
|
41
58
|
Requires-Dist: openpyxl<4.0.0,>=3.1.5; extra == "excel"
|
|
42
59
|
Provides-Extra: dataframe
|
|
43
|
-
Requires-Dist: ibis-framework
|
|
44
|
-
Requires-Dist:
|
|
60
|
+
Requires-Dist: ibis-framework<13.0.0,>=10.0.0; extra == "dataframe"
|
|
61
|
+
Requires-Dist: numpy<3,>=1.23.2; extra == "dataframe"
|
|
62
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "dataframe"
|
|
63
|
+
Requires-Dist: pandas<4,>=1.5.3; extra == "dataframe"
|
|
64
|
+
Requires-Dist: pyarrow>=10.0.1; extra == "dataframe"
|
|
65
|
+
Requires-Dist: pyarrow-hotfix>=0.4; extra == "dataframe"
|
|
66
|
+
Requires-Dist: rich>=12.4.4; extra == "dataframe"
|
|
45
67
|
Provides-Extra: databricks
|
|
46
|
-
Requires-Dist: ibis-framework[databricks
|
|
68
|
+
Requires-Dist: ibis-framework[databricks]<13.0.0,>=10.0.0; extra == "databricks"
|
|
47
69
|
Requires-Dist: databricks-sql-connector<4.5.0,>=3.7.0; extra == "databricks"
|
|
48
70
|
Requires-Dist: databricks-sdk<0.123.0; extra == "databricks"
|
|
49
|
-
Requires-Dist:
|
|
71
|
+
Requires-Dist: packaging<27.0,>=21.3; extra == "databricks"
|
|
50
72
|
Provides-Extra: databricks-runtime
|
|
51
|
-
Requires-Dist:
|
|
52
|
-
Requires-Dist: databricks-sql-connector<4.5.0,>=3.7.0; extra == "databricks-runtime"
|
|
53
|
-
Requires-Dist: databricks-sdk<0.123.0; extra == "databricks-runtime"
|
|
54
|
-
Requires-Dist: packaging<27.0,>=21.3; extra == "databricks-runtime"
|
|
73
|
+
Requires-Dist: datacontract-cli[databricks]; extra == "databricks-runtime"
|
|
55
74
|
Provides-Extra: iceberg
|
|
56
75
|
Requires-Dist: pyiceberg==0.11.1; extra == "iceberg"
|
|
57
76
|
Provides-Extra: kafka
|
|
58
|
-
Requires-Dist: datacontract-cli[
|
|
59
|
-
Requires-Dist:
|
|
60
|
-
Requires-Dist:
|
|
77
|
+
Requires-Dist: datacontract-cli[duckdb,parquet]; extra == "kafka"
|
|
78
|
+
Requires-Dist: confluent-kafka<3.0.0,>=2.6.0; extra == "kafka"
|
|
79
|
+
Requires-Dist: fastavro<2.0.0,>=1.9.7; extra == "kafka"
|
|
61
80
|
Provides-Extra: mysql
|
|
62
81
|
Requires-Dist: datacontract-cli[duckdb]; extra == "mysql"
|
|
63
82
|
Provides-Extra: postgres
|
|
@@ -108,12 +127,12 @@ Requires-Dist: pyarrow>=18.1.0; extra == "parquet"
|
|
|
108
127
|
Provides-Extra: rdf
|
|
109
128
|
Requires-Dist: rdflib==7.6.0; extra == "rdf"
|
|
110
129
|
Provides-Extra: api
|
|
111
|
-
Requires-Dist: fastapi<0.
|
|
112
|
-
Requires-Dist: uvicorn<0.
|
|
130
|
+
Requires-Dist: fastapi<0.142.0,>=0.115.0; extra == "api"
|
|
131
|
+
Requires-Dist: uvicorn<0.53.0,>=0.44.0; extra == "api"
|
|
113
132
|
Provides-Extra: protobuf
|
|
114
133
|
Requires-Dist: proto-schema-parser<3.0,>=1.0; extra == "protobuf"
|
|
115
134
|
Provides-Extra: all
|
|
116
|
-
Requires-Dist: datacontract-cli[api,athena,azure,bigquery,csv,databricks,dataframe,dbml,duckdb,excel,gcs,iceberg,impala,kafka,mysql,oracle,parquet,postgres,protobuf,rdf,redshift,s3,snowflake,sqlserver,trino]; extra == "all"
|
|
135
|
+
Requires-Dist: datacontract-cli[api,athena,avro,azure,bigquery,csv,databricks,dataframe,dbml,duckdb,excel,gcs,iceberg,impala,kafka,mysql,oracle,parquet,postgres,protobuf,rdf,redshift,s3,snowflake,sqlserver,trino]; extra == "all"
|
|
117
136
|
Provides-Extra: dev
|
|
118
137
|
Requires-Dist: datacontract-cli[all]; extra == "dev"
|
|
119
138
|
Requires-Dist: httpx==0.28.1; extra == "dev"
|
|
@@ -126,9 +145,9 @@ Requires-Dist: pytest; extra == "dev"
|
|
|
126
145
|
Requires-Dist: pytest-xdist; extra == "dev"
|
|
127
146
|
Requires-Dist: pymssql==2.3.13; extra == "dev"
|
|
128
147
|
Requires-Dist: psycopg2-binary<3.0,>=2.9; extra == "dev"
|
|
129
|
-
Requires-Dist: mysql-connector-python<
|
|
130
|
-
Requires-Dist: ruff==0.16.
|
|
131
|
-
Requires-Dist: testcontainers[kafka,minio,mssql,mysql,postgres]==4.
|
|
148
|
+
Requires-Dist: mysql-connector-python<26.8.0,>=8.0.30; extra == "dev"
|
|
149
|
+
Requires-Dist: ruff==0.16.1; extra == "dev"
|
|
150
|
+
Requires-Dist: testcontainers[kafka,minio,mssql,mysql,postgres]==4.15.0; extra == "dev"
|
|
132
151
|
Requires-Dist: trino==0.338.0; extra == "dev"
|
|
133
152
|
Dynamic: license-file
|
|
134
153
|
|
|
@@ -401,8 +420,8 @@ A list of available extras:
|
|
|
401
420
|
| Google BigQuery | `pip install datacontract-cli[bigquery]` |
|
|
402
421
|
| CSV | `pip install datacontract-cli[csv]` |
|
|
403
422
|
| Databricks Integration | `pip install datacontract-cli[databricks]` |
|
|
404
|
-
| Databricks Runtime | `pip install datacontract-cli[databricks
|
|
405
|
-
| DataFrame (Spark) | `pip install datacontract-cli[dataframe]`
|
|
423
|
+
| Databricks Runtime | `pip install datacontract-cli[databricks]` (also inside Databricks, using the cluster's own Spark session) |
|
|
424
|
+
| DataFrame (Spark) | `pip install datacontract-cli[dataframe]` (PySpark not included — you supply the Spark session) |
|
|
406
425
|
| DBML | `pip install datacontract-cli[dbml]` |
|
|
407
426
|
| DuckDB (local/S3/GCS/Azure file testing) | `pip install datacontract-cli[duckdb]` |
|
|
408
427
|
| Excel | `pip install datacontract-cli[excel]` |
|
|
@@ -443,11 +462,9 @@ It covers everything in depth, including the complete command reference:
|
|
|
443
462
|
|
|
444
463
|
- Install [uv](https://docs.astral.sh/uv/)
|
|
445
464
|
- Python base interpreter should be 3.11.x.
|
|
446
|
-
- A JDK (17 or 21) must be installed for the Spark-based tests (e.g. `test_test_kafka.py`, `test_test_delta.py`, `test_test_dataframe.py`, `test_import_spark.py`). Java 25 is not yet supported. On macOS and Linux you can install one with [SDKMAN](https://sdkman.io): `sdk install java 21.0.11-tem` (or any 21.x build from `sdk list java`). Verify with `java --version`.
|
|
447
465
|
- Docker engine must be running to execute the tests.
|
|
448
466
|
|
|
449
467
|
```bash
|
|
450
|
-
sdk use java 21.0.11-tem
|
|
451
468
|
uv python pin 3.11
|
|
452
469
|
uv venv
|
|
453
470
|
uv pip install -e '.[dev]'
|
|
@@ -480,15 +497,6 @@ Try to sync all groups:
|
|
|
480
497
|
uv sync --all-groups --all-extras
|
|
481
498
|
```
|
|
482
499
|
|
|
483
|
-
#### Errors in tests that use PySpark (e.g. test_test_kafka.py)
|
|
484
|
-
|
|
485
|
-
Ensure you have a JDK 17 or 21 installed. Java 25 causes issues.
|
|
486
|
-
|
|
487
|
-
```
|
|
488
|
-
java --version
|
|
489
|
-
```
|
|
490
|
-
|
|
491
|
-
|
|
492
500
|
### Docker Build
|
|
493
501
|
|
|
494
502
|
```bash
|
|
@@ -267,8 +267,8 @@ A list of available extras:
|
|
|
267
267
|
| Google BigQuery | `pip install datacontract-cli[bigquery]` |
|
|
268
268
|
| CSV | `pip install datacontract-cli[csv]` |
|
|
269
269
|
| Databricks Integration | `pip install datacontract-cli[databricks]` |
|
|
270
|
-
| Databricks Runtime | `pip install datacontract-cli[databricks
|
|
271
|
-
| DataFrame (Spark) | `pip install datacontract-cli[dataframe]`
|
|
270
|
+
| Databricks Runtime | `pip install datacontract-cli[databricks]` (also inside Databricks, using the cluster's own Spark session) |
|
|
271
|
+
| DataFrame (Spark) | `pip install datacontract-cli[dataframe]` (PySpark not included — you supply the Spark session) |
|
|
272
272
|
| DBML | `pip install datacontract-cli[dbml]` |
|
|
273
273
|
| DuckDB (local/S3/GCS/Azure file testing) | `pip install datacontract-cli[duckdb]` |
|
|
274
274
|
| Excel | `pip install datacontract-cli[excel]` |
|
|
@@ -309,11 +309,9 @@ It covers everything in depth, including the complete command reference:
|
|
|
309
309
|
|
|
310
310
|
- Install [uv](https://docs.astral.sh/uv/)
|
|
311
311
|
- Python base interpreter should be 3.11.x.
|
|
312
|
-
- A JDK (17 or 21) must be installed for the Spark-based tests (e.g. `test_test_kafka.py`, `test_test_delta.py`, `test_test_dataframe.py`, `test_import_spark.py`). Java 25 is not yet supported. On macOS and Linux you can install one with [SDKMAN](https://sdkman.io): `sdk install java 21.0.11-tem` (or any 21.x build from `sdk list java`). Verify with `java --version`.
|
|
313
312
|
- Docker engine must be running to execute the tests.
|
|
314
313
|
|
|
315
314
|
```bash
|
|
316
|
-
sdk use java 21.0.11-tem
|
|
317
315
|
uv python pin 3.11
|
|
318
316
|
uv venv
|
|
319
317
|
uv pip install -e '.[dev]'
|
|
@@ -346,15 +344,6 @@ Try to sync all groups:
|
|
|
346
344
|
uv sync --all-groups --all-extras
|
|
347
345
|
```
|
|
348
346
|
|
|
349
|
-
#### Errors in tests that use PySpark (e.g. test_test_kafka.py)
|
|
350
|
-
|
|
351
|
-
Ensure you have a JDK 17 or 21 installed. Java 25 causes issues.
|
|
352
|
-
|
|
353
|
-
```
|
|
354
|
-
java --version
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
|
|
358
347
|
### Docker Build
|
|
359
348
|
|
|
360
349
|
```bash
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import json
|
|
1
2
|
import logging
|
|
2
3
|
import os
|
|
3
4
|
import tempfile
|
|
@@ -10,8 +11,9 @@ from fastapi import Body, Depends, FastAPI, HTTPException, Query, Request, statu
|
|
|
10
11
|
from fastapi.middleware.cors import CORSMiddleware
|
|
11
12
|
from fastapi.responses import PlainTextResponse
|
|
12
13
|
from fastapi.security.api_key import APIKeyHeader
|
|
13
|
-
from pydantic import BaseModel
|
|
14
|
+
from pydantic import BaseModel, ValidationError
|
|
14
15
|
|
|
16
|
+
from datacontract.config import Config, known_env_names
|
|
15
17
|
from datacontract.data_contract import DataContract, ExportFormat
|
|
16
18
|
from datacontract.model.exceptions import DataContractException
|
|
17
19
|
from datacontract.model.run import Run
|
|
@@ -270,6 +272,58 @@ api_key_header = APIKeyHeader(
|
|
|
270
272
|
)
|
|
271
273
|
|
|
272
274
|
|
|
275
|
+
_CONFIG_HEADER_PREFIX = "datacontract-"
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
def config_from_headers(headers) -> "Config | None":
|
|
279
|
+
"""Build a per-request Config from configuration option headers.
|
|
280
|
+
|
|
281
|
+
Header names are matched case-insensitively and map mechanically to the env
|
|
282
|
+
var names: uppercase, dashes to underscores — ``datacontract-snowflake-password``
|
|
283
|
+
→ ``DATACONTRACT_SNOWFLAKE_PASSWORD``, ``entropy-data-api-key`` →
|
|
284
|
+
``ENTROPY_DATA_API_KEY``. Returns None when no config headers are present,
|
|
285
|
+
so env-var-configured deployments behave exactly as before. Unknown
|
|
286
|
+
``datacontract-*`` option names are rejected with a 400.
|
|
287
|
+
"""
|
|
288
|
+
known = known_env_names()
|
|
289
|
+
values = {}
|
|
290
|
+
for name, value in headers.items():
|
|
291
|
+
lowered = name.lower()
|
|
292
|
+
env = lowered.upper().replace("-", "_")
|
|
293
|
+
if lowered.startswith(_CONFIG_HEADER_PREFIX) or env in known:
|
|
294
|
+
values[env] = value
|
|
295
|
+
if not values:
|
|
296
|
+
return None
|
|
297
|
+
try:
|
|
298
|
+
return Config.resolve(values)
|
|
299
|
+
except (ValueError, ValidationError) as e:
|
|
300
|
+
raise HTTPException(
|
|
301
|
+
status_code=status.HTTP_400_BAD_REQUEST,
|
|
302
|
+
detail=f"Invalid datacontract-* configuration header: {e}",
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
def _parse_filters_query(filters: str | None) -> dict[str, str] | None:
|
|
307
|
+
"""Parse the `filters` query parameter (JSON object mapping schema name to predicate)."""
|
|
308
|
+
if filters is None:
|
|
309
|
+
return None
|
|
310
|
+
detail = (
|
|
311
|
+
"The filters parameter must be a JSON object mapping schema name to a SQL predicate, "
|
|
312
|
+
'e.g., {"orders": "ingested_at >= CURRENT_DATE - 1"}.'
|
|
313
|
+
)
|
|
314
|
+
try:
|
|
315
|
+
parsed = json.loads(filters)
|
|
316
|
+
except json.JSONDecodeError:
|
|
317
|
+
raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail=detail)
|
|
318
|
+
if (
|
|
319
|
+
not isinstance(parsed, dict)
|
|
320
|
+
or not parsed
|
|
321
|
+
or not all(isinstance(predicate, str) and predicate.strip() for predicate in parsed.values())
|
|
322
|
+
):
|
|
323
|
+
raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail=detail)
|
|
324
|
+
return {schema_name: predicate.strip() for schema_name, predicate in parsed.items()}
|
|
325
|
+
|
|
326
|
+
|
|
273
327
|
def check_api_key(api_key_header: str | None):
|
|
274
328
|
correct_api_key = os.getenv("DATACONTRACT_CLI_API_KEY")
|
|
275
329
|
if correct_api_key is None or correct_api_key == "":
|
|
@@ -298,7 +352,9 @@ def check_api_key(api_key_header: str | None):
|
|
|
298
352
|
description="""
|
|
299
353
|
Run schema and quality tests. Data Contract CLI connects to the data sources configured in the server section.
|
|
300
354
|
This usually requires credentials to access the data sources.
|
|
301
|
-
Credentials
|
|
355
|
+
Credentials can be provided via environment variables when running the web server, or per request
|
|
356
|
+
via datacontract-* headers (case-insensitive), which map to the environment variable names
|
|
357
|
+
(e.g. datacontract-snowflake-password sets DATACONTRACT_SNOWFLAKE_PASSWORD for this request only).
|
|
302
358
|
POST the data contract YAML as payload.
|
|
303
359
|
""",
|
|
304
360
|
responses={
|
|
@@ -348,12 +404,41 @@ async def test(
|
|
|
348
404
|
examples=["https://api.datamesh-manager.com/api/test-results"],
|
|
349
405
|
),
|
|
350
406
|
] = None,
|
|
407
|
+
filter: Annotated[
|
|
408
|
+
str | None,
|
|
409
|
+
Query(
|
|
410
|
+
description="A SQL predicate to filter the rows under test, in the dialect of the server. "
|
|
411
|
+
"Only works if a single schema is tested; for contracts with multiple schemas, use filters. "
|
|
412
|
+
"Schema checks and custom SQL queries are not filtered.",
|
|
413
|
+
examples=["ingested_at >= CURRENT_DATE - 1"],
|
|
414
|
+
),
|
|
415
|
+
] = None,
|
|
416
|
+
filters: Annotated[
|
|
417
|
+
str | None,
|
|
418
|
+
Query(
|
|
419
|
+
description="Row filters per schema, as a JSON object mapping schema name to SQL predicate. "
|
|
420
|
+
"Schema checks and custom SQL queries are not filtered.",
|
|
421
|
+
examples=['{"orders": "ingested_at >= CURRENT_DATE - 1"}'],
|
|
422
|
+
),
|
|
423
|
+
] = None,
|
|
351
424
|
) -> Run:
|
|
352
425
|
check_api_key(api_key)
|
|
426
|
+
parsed_filters = _parse_filters_query(filters)
|
|
427
|
+
if filter is not None and parsed_filters is not None:
|
|
428
|
+
raise HTTPException(
|
|
429
|
+
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
|
|
430
|
+
detail="Use either the filter or the filters parameter, not both.",
|
|
431
|
+
)
|
|
353
432
|
logging.info("Testing data contract...")
|
|
354
433
|
logging.info(body)
|
|
355
434
|
return DataContract(
|
|
356
|
-
data_contract_str=body,
|
|
435
|
+
data_contract_str=body,
|
|
436
|
+
server=server,
|
|
437
|
+
publish_url=publish_url,
|
|
438
|
+
fastapi_url=str(request.url),
|
|
439
|
+
config=config_from_headers(request.headers),
|
|
440
|
+
filter=filter,
|
|
441
|
+
filters=parsed_filters,
|
|
357
442
|
).test()
|
|
358
443
|
|
|
359
444
|
|
|
@@ -8,6 +8,7 @@ import pytz
|
|
|
8
8
|
from jinja2 import Environment, PackageLoader, select_autoescape
|
|
9
9
|
from open_data_contract_standard.model import OpenDataContractStandard
|
|
10
10
|
|
|
11
|
+
from datacontract.config import cli_config
|
|
11
12
|
from datacontract.data_contract import DataContract
|
|
12
13
|
from datacontract.export.html_exporter import get_version
|
|
13
14
|
|
|
@@ -26,7 +27,7 @@ def _get_owner(odcs: OpenDataContractStandard) -> Optional[str]:
|
|
|
26
27
|
def create_data_contract_html(contracts, file: Path, path: Path, schema: str):
|
|
27
28
|
logging.debug(f"Creating data contract html for file {file} and schema {schema}")
|
|
28
29
|
data_contract = DataContract(
|
|
29
|
-
data_contract_file=f"{file.absolute()}", inline_references=True, schema_location=schema
|
|
30
|
+
data_contract_file=f"{file.absolute()}", inline_references=True, schema_location=schema, config=cli_config()
|
|
30
31
|
)
|
|
31
32
|
html = data_contract.export(export_format="html")
|
|
32
33
|
odcs = data_contract.get_data_contract()
|
|
@@ -5,6 +5,7 @@ from importlib import metadata
|
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
from typing import Iterable, Optional
|
|
7
7
|
|
|
8
|
+
import pydantic
|
|
8
9
|
import typer
|
|
9
10
|
from click import Context
|
|
10
11
|
from dotenv import find_dotenv, load_dotenv
|
|
@@ -13,6 +14,7 @@ from rich.markup import escape
|
|
|
13
14
|
from typer.core import TyperGroup
|
|
14
15
|
from typing_extensions import Annotated
|
|
15
16
|
|
|
17
|
+
from datacontract.config import Config, set_cli_config
|
|
16
18
|
from datacontract.output.output_format import OutputFormat
|
|
17
19
|
|
|
18
20
|
console = Console()
|
|
@@ -151,6 +153,13 @@ def common(
|
|
|
151
153
|
"instead of the bundled CA certificates (e.g. behind a corporate proxy or internal CA).",
|
|
152
154
|
envvar="DATACONTRACT_SYSTEM_TRUSTSTORE",
|
|
153
155
|
),
|
|
156
|
+
config_file: Optional[Path] = typer.Option(
|
|
157
|
+
None,
|
|
158
|
+
"--config-file",
|
|
159
|
+
help="Path to a YAML file with credentials and connection options "
|
|
160
|
+
"(sections per data source, ${VAR} references resolve from the environment). "
|
|
161
|
+
"Defaults to ./datacontract-config.yaml or ~/.datacontract/config.yaml if present.",
|
|
162
|
+
),
|
|
154
163
|
):
|
|
155
164
|
"""
|
|
156
165
|
The datacontract CLI is an open source command-line tool for working with Data Contracts (https://datacontract.com).
|
|
@@ -164,10 +173,30 @@ def common(
|
|
|
164
173
|
# Already-set environment variables take precedence.
|
|
165
174
|
load_dotenv(dotenv_path=find_dotenv(usecwd=True), override=False)
|
|
166
175
|
|
|
176
|
+
set_cli_config(_load_config_file(config_file))
|
|
177
|
+
|
|
167
178
|
if system_truststore:
|
|
168
179
|
inject_system_truststore()
|
|
169
180
|
|
|
170
181
|
|
|
182
|
+
def _load_config_file(config_file: "Optional[Path]"):
|
|
183
|
+
"""Load the --config-file, or the first default location that exists."""
|
|
184
|
+
candidates = (
|
|
185
|
+
[config_file]
|
|
186
|
+
if config_file
|
|
187
|
+
else [Path("datacontract-config.yaml"), Path.home() / ".datacontract" / "config.yaml"]
|
|
188
|
+
)
|
|
189
|
+
for candidate in candidates:
|
|
190
|
+
if candidate.exists():
|
|
191
|
+
try:
|
|
192
|
+
return Config.from_yaml(candidate)
|
|
193
|
+
except (ValueError, pydantic.ValidationError) as e:
|
|
194
|
+
raise typer.BadParameter(str(e), param_hint="--config-file")
|
|
195
|
+
if config_file:
|
|
196
|
+
raise typer.BadParameter(f"Config file {config_file} does not exist.", param_hint="--config-file")
|
|
197
|
+
return None
|
|
198
|
+
|
|
199
|
+
|
|
171
200
|
def enable_debug_logging(debug: bool, otherwise_disable_stderr: bool = False):
|
|
172
201
|
if not debug and otherwise_disable_stderr:
|
|
173
202
|
# some commands render run.logs to the console themselves; a NullHandler keeps
|
|
@@ -2,6 +2,7 @@ import typer
|
|
|
2
2
|
from typing_extensions import Annotated
|
|
3
3
|
|
|
4
4
|
from datacontract.cli import app, console, debug_option, enable_debug_logging
|
|
5
|
+
from datacontract.config import cli_config
|
|
5
6
|
from datacontract.data_contract import DataContract
|
|
6
7
|
from datacontract.output.text_changelog_results import write_text_changelog_results
|
|
7
8
|
|
|
@@ -11,8 +12,14 @@ from datacontract.output.text_changelog_results import write_text_changelog_resu
|
|
|
11
12
|
epilog="Example: datacontract changelog datacontract-v1.yaml datacontract-v2.yaml",
|
|
12
13
|
)
|
|
13
14
|
def changelog(
|
|
14
|
-
v1: Annotated[
|
|
15
|
-
|
|
15
|
+
v1: Annotated[
|
|
16
|
+
str,
|
|
17
|
+
typer.Argument(help="The location (url, s3 url, or local path) of the source (before) data contract YAML."),
|
|
18
|
+
],
|
|
19
|
+
v2: Annotated[
|
|
20
|
+
str,
|
|
21
|
+
typer.Argument(help="The location (url, s3 url, or local path) of the target (after) data contract YAML."),
|
|
22
|
+
],
|
|
16
23
|
inline_references: Annotated[
|
|
17
24
|
bool,
|
|
18
25
|
typer.Option(
|
|
@@ -24,7 +31,7 @@ def changelog(
|
|
|
24
31
|
):
|
|
25
32
|
"""Show a changelog between two data contracts."""
|
|
26
33
|
enable_debug_logging(debug)
|
|
27
|
-
result = DataContract(data_contract_file=v1, inline_references=inline_references).changelog(
|
|
28
|
-
DataContract(data_contract_file=v2, inline_references=inline_references)
|
|
34
|
+
result = DataContract(config=cli_config(), data_contract_file=v1, inline_references=inline_references).changelog(
|
|
35
|
+
DataContract(config=cli_config(), data_contract_file=v2, inline_references=inline_references)
|
|
29
36
|
)
|
|
30
37
|
write_text_changelog_results(result, console)
|
|
@@ -15,6 +15,7 @@ from datacontract.cli import (
|
|
|
15
15
|
resolve_output_format,
|
|
16
16
|
validate_publish_url,
|
|
17
17
|
)
|
|
18
|
+
from datacontract.config import cli_config
|
|
18
19
|
from datacontract.data_contract import DataContract
|
|
19
20
|
from datacontract.output.ci_output import write_ci_output, write_ci_summary, write_json_results
|
|
20
21
|
from datacontract.output.output_format import OutputFormat
|
|
@@ -34,7 +35,7 @@ class FailOn(str, Enum):
|
|
|
34
35
|
def ci(
|
|
35
36
|
locations: Annotated[
|
|
36
37
|
Optional[list[str]],
|
|
37
|
-
typer.Argument(help="The location(s) (url or path) of the data contract yaml file(s)."),
|
|
38
|
+
typer.Argument(help="The location(s) (url, s3 url, or local path) of the data contract yaml file(s)."),
|
|
38
39
|
] = None,
|
|
39
40
|
schema: Annotated[
|
|
40
41
|
str,
|
|
@@ -111,6 +112,7 @@ def ci(
|
|
|
111
112
|
for location in locations:
|
|
112
113
|
out.print(f"Testing {location}")
|
|
113
114
|
run = DataContract(
|
|
115
|
+
config=cli_config(),
|
|
114
116
|
data_contract_file=location,
|
|
115
117
|
schema_location=schema,
|
|
116
118
|
publish_url=publish,
|
|
@@ -14,6 +14,7 @@ from datacontract.cli import (
|
|
|
14
14
|
enable_debug_logging,
|
|
15
15
|
validate_publish_url,
|
|
16
16
|
)
|
|
17
|
+
from datacontract.config import cli_config
|
|
17
18
|
from datacontract.integration.dbt_sync import (
|
|
18
19
|
ModelResolution,
|
|
19
20
|
_ensure_dbt_project,
|
|
@@ -120,7 +121,7 @@ def _maybe_publish(run: Run, odcs, publish: Optional[str], ssl_verification: boo
|
|
|
120
121
|
f"Pass --server to identify the run.[/yellow]"
|
|
121
122
|
)
|
|
122
123
|
return False
|
|
123
|
-
return not publish_test_results_to_entropy_data(run, publish, ssl_verification)
|
|
124
|
+
return not publish_test_results_to_entropy_data(run, publish, ssl_verification, config=cli_config())
|
|
124
125
|
|
|
125
126
|
|
|
126
127
|
def _report_run(run: Run, *, run_only: bool, publish_failed: bool, ctx: _ContractCtx) -> bool:
|
|
@@ -10,6 +10,7 @@ import typer
|
|
|
10
10
|
from typing_extensions import Annotated
|
|
11
11
|
|
|
12
12
|
from datacontract.cli import app, console, debug_option, enable_debug_logging
|
|
13
|
+
from datacontract.config import cli_config
|
|
13
14
|
from datacontract.init.init_template import get_init_template
|
|
14
15
|
from datacontract.lint.urls import fetch_resource
|
|
15
16
|
from datacontract.model.exceptions import DataContractException
|
|
@@ -56,7 +57,7 @@ def _download_local_copy(url: str) -> str:
|
|
|
56
57
|
console.print("Aborted.")
|
|
57
58
|
raise typer.Exit(code=1)
|
|
58
59
|
try:
|
|
59
|
-
content = fetch_resource(url)
|
|
60
|
+
content = fetch_resource(url, cli_config())
|
|
60
61
|
except DataContractException as e:
|
|
61
62
|
console.print(f"[red]Error: {e.reason}[/red]")
|
|
62
63
|
raise typer.Exit(code=1)
|
|
@@ -6,6 +6,7 @@ from rich.console import Console
|
|
|
6
6
|
from typing_extensions import Annotated
|
|
7
7
|
|
|
8
8
|
from datacontract.cli import OrderedCommandsWithMigrationHints, debug_option, enable_debug_logging
|
|
9
|
+
from datacontract.config import cli_config
|
|
9
10
|
from datacontract.data_contract import DataContract
|
|
10
11
|
from datacontract.export.exporter import ExportFormat, SqlServerType
|
|
11
12
|
from datacontract.export.great_expectations_exporter import GreatExpectationsEngine
|
|
@@ -17,7 +18,10 @@ export_app = typer.Typer(cls=OrderedCommandsWithMigrationHints, no_args_is_help=
|
|
|
17
18
|
# ---------------------------------------------------------------------------
|
|
18
19
|
# Shared option type aliases
|
|
19
20
|
# ---------------------------------------------------------------------------
|
|
20
|
-
location_arg = Annotated[
|
|
21
|
+
location_arg = Annotated[
|
|
22
|
+
str,
|
|
23
|
+
typer.Argument(help="The location (url, s3 url, or local path) of the data contract yaml."),
|
|
24
|
+
]
|
|
21
25
|
output_option = Annotated[
|
|
22
26
|
Optional[Path],
|
|
23
27
|
typer.Option(
|
|
@@ -64,6 +68,7 @@ def _export(
|
|
|
64
68
|
clickhouse_order_by: Optional[str] = None,
|
|
65
69
|
):
|
|
66
70
|
result = DataContract(
|
|
71
|
+
config=cli_config(),
|
|
67
72
|
data_contract_file=location,
|
|
68
73
|
schema_location=schema,
|
|
69
74
|
server=server,
|