datacontract-cli 1.0.16__tar.gz → 1.0.17__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.0.17}/PKG-INFO +2 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/__init__.py +4 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/api.py +88 -3
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/catalog/catalog.py +2 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/cli.py +29 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/command_changelog.py +11 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/command_ci.py +3 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/command_dbt.py +2 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/command_edit.py +2 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/command_export.py +6 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/command_import.py +55 -17
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/command_lint.py +3 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/command_publish.py +4 -2
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/command_test.py +50 -2
- datacontract_cli-1.0.17/datacontract/config/__init__.py +32 -0
- datacontract_cli-1.0.17/datacontract/config/cli_context.py +19 -0
- datacontract_cli-1.0.17/datacontract/config/settings.py +886 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/data_contract.py +25 -2
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/data_contract_test.py +74 -7
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/datacontract/check_azure_blob_file.py +9 -8
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/fastjsonschema/check_jsonschema.py +23 -15
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +5 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/ibis/connections/aws_credentials.py +12 -15
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/ibis/connections/connect.py +220 -145
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/ibis/connections/duckdb_connection.py +15 -13
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/ibis/connections/kafka.py +19 -15
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/ibis/connections/redshift_credentials.py +35 -51
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/ibis/ibis_check_execute.py +43 -2
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/athena_importer.py +5 -3
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/dcs_importer.py +2 -2
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/glue_importer.py +18 -15
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/importer.py +9 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/mysql_importer.py +10 -6
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/object_storage_importer.py +6 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/odcs_importer.py +4 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/oracle_importer.py +6 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/postgres_importer.py +10 -6
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/redshift_importer.py +6 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/snowflake_importer.py +20 -20
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/sqlserver_importer.py +9 -6
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/trino_importer.py +8 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/unity_importer.py +12 -5
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/integration/dbt_sync.py +23 -6
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/integration/entropy_data.py +27 -19
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/lint/files.py +2 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/lint/resolve.py +34 -21
- datacontract_cli-1.0.17/datacontract/lint/resources.py +26 -0
- datacontract_cli-1.0.17/datacontract/lint/s3.py +26 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/lint/urls.py +13 -11
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/model/exceptions.py +0 -18
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/model/run.py +3 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/output/test_results_writer.py +4 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/templates/datacontract.html +1 -0
- datacontract_cli-1.0.17/datacontract/templates/datacontract_odcs.html +47 -0
- datacontract_cli-1.0.17/datacontract/templates/macros/authoritative_definitions.html +25 -0
- datacontract_cli-1.0.17/datacontract/templates/macros/schema.html +226 -0
- datacontract_cli-1.0.17/datacontract/templates/macros/server.html +84 -0
- datacontract_cli-1.0.17/datacontract/templates/macros/support.html +25 -0
- datacontract_cli-1.0.17/datacontract/templates/partials_odcs/custom_properties.html +69 -0
- datacontract_cli-1.0.17/datacontract/templates/partials_odcs/diagram.html +41 -0
- datacontract_cli-1.0.17/datacontract/templates/partials_odcs/dialog_yaml.html +27 -0
- datacontract_cli-1.0.17/datacontract/templates/partials_odcs/footer.html +15 -0
- datacontract_cli-1.0.17/datacontract/templates/partials_odcs/fundamentals.html +113 -0
- datacontract_cli-1.0.17/datacontract/templates/partials_odcs/header.html +16 -0
- datacontract_cli-1.0.17/datacontract/templates/partials_odcs/pricing.html +37 -0
- datacontract_cli-1.0.17/datacontract/templates/partials_odcs/roles.html +91 -0
- datacontract_cli-1.0.17/datacontract/templates/partials_odcs/schema.html +123 -0
- datacontract_cli-1.0.17/datacontract/templates/partials_odcs/servers.html +282 -0
- datacontract_cli-1.0.17/datacontract/templates/partials_odcs/sla.html +95 -0
- datacontract_cli-1.0.17/datacontract/templates/partials_odcs/support.html +79 -0
- datacontract_cli-1.0.17/datacontract/templates/partials_odcs/team.html +236 -0
- datacontract_cli-1.0.17/datacontract/templates/partials_odcs/term_of_use.html +101 -0
- datacontract_cli-1.0.17/datacontract/templates/partials_odcs/title.html +88 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/templates/style/output.css +531 -213
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17/datacontract_cli.egg-info}/PKG-INFO +2 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract_cli.egg-info/SOURCES.txt +32 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract_cli.egg-info/requires.txt +1 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/pyproject.toml +2 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_api.py +126 -0
- datacontract_cli-1.0.17/tests/test_config.py +248 -0
- datacontract_cli-1.0.17/tests/test_config_file.py +140 -0
- datacontract_cli-1.0.17/tests/test_config_require.py +39 -0
- datacontract_cli-1.0.17/tests/test_config_threading.py +96 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_connect_athena.py +15 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_connect_bigquery.py +12 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_connect_databricks.py +15 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_connect_impala.py +15 -0
- datacontract_cli-1.0.17/tests/test_connect_mysql.py +78 -0
- datacontract_cli-1.0.17/tests/test_connect_oracle.py +73 -0
- datacontract_cli-1.0.17/tests/test_connect_postgres.py +87 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_connect_redshift.py +21 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_connect_snowflake.py +73 -4
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_connect_sqlserver.py +24 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_connect_trino.py +19 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_dbt_sync.py +31 -3
- datacontract_cli-1.0.17/tests/test_docs_config_options.py +17 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_edit.py +1 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_object_storage.py +3 -1
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_lint.py +48 -0
- datacontract_cli-1.0.17/tests/test_test_row_filter.py +120 -0
- 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_require_env.py +0 -28
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/LICENSE +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/MANIFEST.in +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/README.md +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/changelog/__init__.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/changelog/changelog.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/changelog/normalize.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/command_api.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/command_catalog.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/command_init.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/VERSION +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/abap-Bs8kvjsq.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/apex-Dspwrl5m.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/assets/editor.worker-4.7.0.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/assets/yaml.worker-4.7.0.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/azcli-k1BiOau1.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/bat-BIP72KWc.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/bicep-VhQeYhS3.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/cameligo-DnuAXtHg.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/clojure-BAuDPsal.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/coffee-BV06qSnj.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/cpp-Cz8Jeyrf.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/csharp-F6hhlXFb.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/csp-KzlEHCyI.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/css-e4FKntZ3.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/cssMode-BNkTa2xp.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/cypher-CpvDGKRr.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/dart-DdHeFWR0.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/datacontract-editor.css +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/datacontract-editor.es.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/dockerfile-aoNXDcio.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/ecl-C4Q0DYuA.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/elixir-C9X42b0T.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/flow9-Bff42pfB.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/freemarker2-Dyfzmb5A.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/fsharp-C6vPAsHG.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/go-DEr8zx9f.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/graphql-BiNBBRFh.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/handlebars-BtDNI-uC.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/hcl-2T9lKuFg.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/html-Cn4TGw_o.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/htmlMode-Bf84vbo2.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/index.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/ini-CZGtssYM.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/java-B260NeH3.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/javascript-B86Kac07.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/jsonMode-Ckgg5lAE.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/julia-kuNLM9c5.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/kotlin-Bz6kAefA.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/less-AZUtS89I.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/lexon-BcmgnyRb.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/liquid-D0NPwuu_.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/logo_fuchsia_v2.svg +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/lua-Dz1RbATg.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/m3-CIMooLFn.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/markdown-C1BsCK9P.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/mdx-QFRSBtVQ.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/mips-BovsnfLQ.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/monaco-4.7.0.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/msdax-CiRB2ZB-.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/mysql-BwdpPE19.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/objective-c-D4nfHfso.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/odcs.svg +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/pascal--j5-PYtz.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/pascaligo-C7TcJxNL.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/perl-BzEWqUb5.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/pgsql-B_KZ0mGX.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/php-A19QHzQV.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/pla-COeKY1hA.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/postiats-BfMp7zJL.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/powerquery-B0TS_5Gb.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/powershell-5jSbKdYB.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/protobuf-YgnOutn3.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/pug-DLej6kn5.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/python-C8RW9B6A.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/qsharp-AhjqtSHB.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/r-D-F4P80w.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/razor-CLZqdY_r.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/redis-hwwIlMnV.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/redshift-Bcm_kjEG.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/restructuredtext-CrdzfPP-.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/ruby-QC2UNm1s.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/rust-5aqiQ3L5.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/sb-B1g1ZfLJ.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/scala-C2U4R5Gb.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/scheme-DeFRbslr.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/scss-RSTCiCmI.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/shell-BpF-iNu8.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/solidity-C00r2mbQ.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/sophia-DVW5ZKDB.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/sparql-B0nmpxeX.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/sql-CJwKPERn.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/st-DPlKG5DT.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/swift-YZBAbVHV.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/systemverilog-CDQSaH63.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/tcl-Dlu8sp6Q.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/tsMode-yleMwhPq.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/twig-C5TO7-kw.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/typescript-CJBeebKU.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/typespec-BsmjDEu7.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/vb-ChHvIDrk.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/wgsl-XEp1ju8c.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/xml-vC-NMVX1.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/editor_assets/yaml-Dlf2VF-T.js +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/__init__.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/checks/__init__.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/checks/check_filter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/checks/check_spec.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/checks/create_checks.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/checks/dimensions.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/checks/physical_type_match.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/checks/type_normalize.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/ibis/__init__.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/ibis/connections/__init__.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/ibis/connections/oracle_patch.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/ibis/connections/redshift_patch.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/ibis/dtype_category.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/ibis/native_type.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/engines/ibis/snowflake_structured_types.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/__init__.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/avro_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/avro_idl_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/bigquery_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/custom_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/data_caterer_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/dbml_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/dbt_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/dcs_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/dqx_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/duckdb_type_converter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/excel_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/exporter_factory.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/go_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/great_expectations_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/html_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/iceberg_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/jsonschema_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/markdown_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/mermaid_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/odcs_export_helper.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/odcs_v3_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/pandas_type_converter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/protobuf_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/pydantic_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/rdf_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/sodacl_check_builder.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/sodacl_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/spark_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/sql_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/sql_type_converter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/export/sqlalchemy_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/avro_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/bigquery_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/csv_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/dbml_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/dbt_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/excel_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/iceberg_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/importer_factory.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/json_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/jsonschema_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/odcs_helper.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/parquet_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/powerbi_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/protobuf_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/spark_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/imports/sql_importer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/init/init_template.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/integration/dbt_test_mapping.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/lint/schema.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/model/changelog.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/model/odcs.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/model/server.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/output/__init__.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/output/ci_output.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/output/json_test_results.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/output/junit_test_results.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/output/output_format.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/output/text_changelog_results.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/py.typed +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/schemas/datacontract-1.2.1.init.yaml +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/schemas/datacontract-1.2.1.schema.json +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/schemas/odcs-3.0.2.schema.json +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/schemas/odcs-3.1.0.init.yaml +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/schemas/odcs-3.1.0.schema.json +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/templates/index.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/templates/partials/datacontract_information.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/templates/partials/datacontract_terms.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/templates/partials/definition.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/templates/partials/example.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/templates/partials/model_field.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/templates/partials/quality.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract/templates/partials/server.html +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract_cli.egg-info/dependency_links.txt +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract_cli.egg-info/entry_points.txt +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/datacontract_cli.egg-info/top_level.txt +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/setup.cfg +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_catalog.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_changelog.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_changelog_engine.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_changelog_normalize.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_changelog_output_text.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_ci_output.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_cli.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_connect_s3_credentials.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_create_checks_nested_type.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_create_checks_physical_type.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_create_checks_primary_key.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_data_contract.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_data_contract_checks.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_data_contract_specification.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_dbt_test_mapping.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_description_linter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_docs_commands.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_docs_ordering.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_download_datacontract_file.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_dtype_category.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_duckdb_json.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_avro.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_avro_idl.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_bigquery.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_complex_data_contract.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_custom.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_custom_exporter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_custom_model.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_data_caterer.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_dbml.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_dbt_models.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_dbt_sources.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_dbt_staging_sql.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_dqx.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_excel.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_go.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_great_expectations.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_html.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_iceberg.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_jsonschema.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_markdown.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_mermaid.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_odcs_v3.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_protobuf.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_pydantic.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_rdf.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_sodacl.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_spark.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_sql.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_sql_clickhouse.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_sql_query.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_export_sqlalchemy.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_ibis_mssql_pattern.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_ibis_mssql_schema.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_ibis_oracle_schema.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_athena.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_avro.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_bigquery.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_csv.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_dbml.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_dbt.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_excel.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_glue.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_iceberg.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_json.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_jsonschema.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_mysql.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_odcs_v3.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_oracle.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_parquet.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_postgres.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_powerbi.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_protobuf.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_redshift.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_snowflake.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_spark.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_sql_oracle.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_sql_postgres.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_sql_snowflake.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_sql_sqlserver.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_sqlserver.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_trino.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_import_unity_file.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_install_extras.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_integration_entropydata.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_native_type_schema_scope.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_oracle_patch.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_physical_type_match.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_redshift_credentials.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_redshift_patch.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_resolve.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_resolve_definitions.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_roundtrip_jsonschema.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_server_type_mssql.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_snowflake_structured_types.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_sql_type_converter_physicaltype.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_api.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_athena_iceberg.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_azure_blob_file.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_azure_remote.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_bigquery.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_checks_filter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_databricks.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_dataframe.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_delta.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_diagnostics.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_dimension_filter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_failed_samples.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_gcs_csv_remote.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_gcs_json_remote.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_kafka.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_kafka_remote.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_local_json.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_local_json_nd.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_mysql.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_oracle.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_oracle_xe.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_output_json.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_output_junit.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_parquet.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_postgres.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_quality.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_quality_id_and_tag_filter.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_quality_local_fallback.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_quality_percent_severity.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_redshift.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_s3_csv.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_s3_delta.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_s3_json.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_s3_json_complex.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_s3_json_multiple_models.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_s3_json_remote.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_schema_evolution.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_server_not_found.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_snowflake.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_soda_connection_error.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_sqlserver.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_test_trino.py +0 -0
- {datacontract_cli-1.0.16 → datacontract_cli-1.0.17}/tests/test_type_normalize.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datacontract-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.17
|
|
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
|
License-Expression: MIT
|
|
@@ -14,6 +14,7 @@ License-File: LICENSE
|
|
|
14
14
|
Requires-Dist: typer<0.28,>=0.18.0
|
|
15
15
|
Requires-Dist: click<9.0.0,>=8.1.0
|
|
16
16
|
Requires-Dist: pydantic<2.14.0,>=2.8.2
|
|
17
|
+
Requires-Dist: pydantic-settings<3.0.0,>=2.5.0
|
|
17
18
|
Requires-Dist: pyyaml~=6.0.1
|
|
18
19
|
Requires-Dist: ruamel.yaml<0.20,>=0.17
|
|
19
20
|
Requires-Dist: requests<2.35,>=2.31
|
|
@@ -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,
|
|
@@ -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.imports.sql_importer import SqlDialect
|
|
11
12
|
|
|
@@ -69,6 +70,7 @@ def import_sql(
|
|
|
69
70
|
"""Import a data contract from a SQL DDL file."""
|
|
70
71
|
enable_debug_logging(debug)
|
|
71
72
|
result = DataContract.import_from_source(
|
|
73
|
+
config=cli_config(),
|
|
72
74
|
format="sql",
|
|
73
75
|
source=source,
|
|
74
76
|
schema=schema,
|
|
@@ -93,7 +95,9 @@ def import_avro(
|
|
|
93
95
|
):
|
|
94
96
|
"""Import a data contract from an Avro schema file."""
|
|
95
97
|
enable_debug_logging(debug)
|
|
96
|
-
result = DataContract.import_from_source(
|
|
98
|
+
result = DataContract.import_from_source(
|
|
99
|
+
config=cli_config(), format="avro", source=source, schema=schema, owner=owner, id=id
|
|
100
|
+
)
|
|
97
101
|
_write_result(result, output)
|
|
98
102
|
|
|
99
103
|
|
|
@@ -118,7 +122,7 @@ def import_dbt(
|
|
|
118
122
|
"""Import a data contract from a dbt manifest file."""
|
|
119
123
|
enable_debug_logging(debug)
|
|
120
124
|
result = DataContract.import_from_source(
|
|
121
|
-
format="dbt", source=source, schema=schema, dbt_model=model, owner=owner, id=id
|
|
125
|
+
config=cli_config(), format="dbt", source=source, schema=schema, dbt_model=model, owner=owner, id=id
|
|
122
126
|
)
|
|
123
127
|
_write_result(result, output)
|
|
124
128
|
|
|
@@ -154,6 +158,7 @@ def import_dbml(
|
|
|
154
158
|
"""Import a data contract from a DBML file."""
|
|
155
159
|
enable_debug_logging(debug)
|
|
156
160
|
result = DataContract.import_from_source(
|
|
161
|
+
config=cli_config(),
|
|
157
162
|
format="dbml",
|
|
158
163
|
source=source,
|
|
159
164
|
schema=odcs_schema,
|
|
@@ -186,7 +191,7 @@ def import_glue(
|
|
|
186
191
|
"""Import a data contract from AWS Glue."""
|
|
187
192
|
enable_debug_logging(debug)
|
|
188
193
|
result = DataContract.import_from_source(
|
|
189
|
-
format="glue", source=database, schema=schema, glue_table=table, owner=owner, id=id
|
|
194
|
+
config=cli_config(), format="glue", source=database, schema=schema, glue_table=table, owner=owner, id=id
|
|
190
195
|
)
|
|
191
196
|
_write_result(result, output)
|
|
192
197
|
|
|
@@ -219,6 +224,7 @@ def import_bigquery(
|
|
|
219
224
|
"""Import a data contract from BigQuery."""
|
|
220
225
|
enable_debug_logging(debug)
|
|
221
226
|
result = DataContract.import_from_source(
|
|
227
|
+
config=cli_config(),
|
|
222
228
|
format="bigquery",
|
|
223
229
|
source=source,
|
|
224
230
|
schema=schema,
|
|
@@ -259,7 +265,13 @@ def import_databricks(
|
|
|
259
265
|
"""Import a data contract from Databricks Unity Catalog."""
|
|
260
266
|
enable_debug_logging(debug)
|
|
261
267
|
result = DataContract.import_from_source(
|
|
262
|
-
|
|
268
|
+
config=cli_config(),
|
|
269
|
+
format="databricks",
|
|
270
|
+
source=source,
|
|
271
|
+
schema=schema,
|
|
272
|
+
unity_table_full_name=table,
|
|
273
|
+
owner=owner,
|
|
274
|
+
id=id,
|
|
263
275
|
)
|
|
264
276
|
_write_result(result, output)
|
|
265
277
|
|
|
@@ -298,7 +310,9 @@ def import_jsonschema(
|
|
|
298
310
|
):
|
|
299
311
|
"""Import a data contract from a JSON Schema file."""
|
|
300
312
|
enable_debug_logging(debug)
|
|
301
|
-
result = DataContract.import_from_source(
|
|
313
|
+
result = DataContract.import_from_source(
|
|
314
|
+
config=cli_config(), format="jsonschema", source=source, schema=schema, owner=owner, id=id
|
|
315
|
+
)
|
|
302
316
|
_write_result(result, output)
|
|
303
317
|
|
|
304
318
|
|
|
@@ -316,7 +330,9 @@ def import_json(
|
|
|
316
330
|
):
|
|
317
331
|
"""Import a data contract from a JSON file."""
|
|
318
332
|
enable_debug_logging(debug)
|
|
319
|
-
result = DataContract.import_from_source(
|
|
333
|
+
result = DataContract.import_from_source(
|
|
334
|
+
config=cli_config(), format="json", source=source, schema=schema, owner=owner, id=id
|
|
335
|
+
)
|
|
320
336
|
_write_result(result, output)
|
|
321
337
|
|
|
322
338
|
|
|
@@ -334,7 +350,9 @@ def import_odcs(
|
|
|
334
350
|
):
|
|
335
351
|
"""Import a data contract from an ODCS file."""
|
|
336
352
|
enable_debug_logging(debug)
|
|
337
|
-
result = DataContract.import_from_source(
|
|
353
|
+
result = DataContract.import_from_source(
|
|
354
|
+
config=cli_config(), format="odcs", source=source, schema=schema, owner=owner, id=id
|
|
355
|
+
)
|
|
338
356
|
_write_result(result, output)
|
|
339
357
|
|
|
340
358
|
|
|
@@ -352,7 +370,9 @@ def import_parquet(
|
|
|
352
370
|
):
|
|
353
371
|
"""Import a data contract from a Parquet file."""
|
|
354
372
|
enable_debug_logging(debug)
|
|
355
|
-
result = DataContract.import_from_source(
|
|
373
|
+
result = DataContract.import_from_source(
|
|
374
|
+
config=cli_config(), format="parquet", source=source, schema=schema, owner=owner, id=id
|
|
375
|
+
)
|
|
356
376
|
_write_result(result, output)
|
|
357
377
|
|
|
358
378
|
|
|
@@ -370,7 +390,9 @@ def import_csv(
|
|
|
370
390
|
):
|
|
371
391
|
"""Import a data contract from a CSV file."""
|
|
372
392
|
enable_debug_logging(debug)
|
|
373
|
-
result = DataContract.import_from_source(
|
|
393
|
+
result = DataContract.import_from_source(
|
|
394
|
+
config=cli_config(), format="csv", source=source, schema=schema, owner=owner, id=id
|
|
395
|
+
)
|
|
374
396
|
_write_result(result, output)
|
|
375
397
|
|
|
376
398
|
|
|
@@ -388,7 +410,9 @@ def import_protobuf(
|
|
|
388
410
|
):
|
|
389
411
|
"""Import a data contract from a Protobuf schema file."""
|
|
390
412
|
enable_debug_logging(debug)
|
|
391
|
-
result = DataContract.import_from_source(
|
|
413
|
+
result = DataContract.import_from_source(
|
|
414
|
+
config=cli_config(), format="protobuf", source=source, schema=schema, owner=owner, id=id
|
|
415
|
+
)
|
|
392
416
|
_write_result(result, output)
|
|
393
417
|
|
|
394
418
|
|
|
@@ -409,7 +433,9 @@ def import_spark(
|
|
|
409
433
|
):
|
|
410
434
|
"""Import a data contract from a Spark schema."""
|
|
411
435
|
enable_debug_logging(debug)
|
|
412
|
-
result = DataContract.import_from_source(
|
|
436
|
+
result = DataContract.import_from_source(
|
|
437
|
+
config=cli_config(), format="spark", source=tables, schema=schema, owner=owner, id=id
|
|
438
|
+
)
|
|
413
439
|
_write_result(result, output)
|
|
414
440
|
|
|
415
441
|
|
|
@@ -432,7 +458,7 @@ def import_iceberg(
|
|
|
432
458
|
"""Import a data contract from an Iceberg schema."""
|
|
433
459
|
enable_debug_logging(debug)
|
|
434
460
|
result = DataContract.import_from_source(
|
|
435
|
-
format="iceberg", source=source, schema=schema, iceberg_table=table, owner=owner, id=id
|
|
461
|
+
config=cli_config(), format="iceberg", source=source, schema=schema, iceberg_table=table, owner=owner, id=id
|
|
436
462
|
)
|
|
437
463
|
_write_result(result, output)
|
|
438
464
|
|
|
@@ -451,7 +477,9 @@ def import_excel(
|
|
|
451
477
|
):
|
|
452
478
|
"""Import a data contract from an Excel file."""
|
|
453
479
|
enable_debug_logging(debug)
|
|
454
|
-
result = DataContract.import_from_source(
|
|
480
|
+
result = DataContract.import_from_source(
|
|
481
|
+
config=cli_config(), format="excel", source=source, schema=schema, owner=owner, id=id
|
|
482
|
+
)
|
|
455
483
|
_write_result(result, output)
|
|
456
484
|
|
|
457
485
|
|
|
@@ -471,7 +499,9 @@ def import_powerbi(
|
|
|
471
499
|
):
|
|
472
500
|
"""Import a data contract from a Power BI semantic model (.pbit, .bim, or .json) file."""
|
|
473
501
|
enable_debug_logging(debug)
|
|
474
|
-
result = DataContract.import_from_source(
|
|
502
|
+
result = DataContract.import_from_source(
|
|
503
|
+
config=cli_config(), format="powerbi", source=source, schema=schema, owner=owner, id=id
|
|
504
|
+
)
|
|
475
505
|
_write_result(result, output)
|
|
476
506
|
|
|
477
507
|
|
|
@@ -491,7 +521,7 @@ def import_snowflake(
|
|
|
491
521
|
"""Import a data contract from a Snowflake workspace."""
|
|
492
522
|
enable_debug_logging(debug)
|
|
493
523
|
result = DataContract.import_from_source(
|
|
494
|
-
format="snowflake", source=source, database=database, schema=schema, owner=owner, id=id
|
|
524
|
+
config=cli_config(), format="snowflake", source=source, database=database, schema=schema, owner=owner, id=id
|
|
495
525
|
)
|
|
496
526
|
_write_result(result, output)
|
|
497
527
|
|
|
@@ -519,6 +549,7 @@ def import_redshift(
|
|
|
519
549
|
"""Import a data contract from an Amazon Redshift schema."""
|
|
520
550
|
enable_debug_logging(debug)
|
|
521
551
|
result = DataContract.import_from_source(
|
|
552
|
+
config=cli_config(),
|
|
522
553
|
format="redshift",
|
|
523
554
|
source=source,
|
|
524
555
|
port=port,
|
|
@@ -554,6 +585,7 @@ def import_postgres(
|
|
|
554
585
|
"""Import a data contract from a Postgres schema."""
|
|
555
586
|
enable_debug_logging(debug)
|
|
556
587
|
result = DataContract.import_from_source(
|
|
588
|
+
config=cli_config(),
|
|
557
589
|
format="postgres",
|
|
558
590
|
source=source,
|
|
559
591
|
port=port,
|
|
@@ -589,7 +621,7 @@ def import_gcs(
|
|
|
589
621
|
"""Import a data contract from files in Google Cloud Storage."""
|
|
590
622
|
enable_debug_logging(debug)
|
|
591
623
|
result = DataContract.import_from_source(
|
|
592
|
-
format="gcs", source=source, file_format=format, delimiter=delimiter, owner=owner, id=id
|
|
624
|
+
config=cli_config(), format="gcs", source=source, file_format=format, delimiter=delimiter, owner=owner, id=id
|
|
593
625
|
)
|
|
594
626
|
_write_result(result, output)
|
|
595
627
|
|
|
@@ -616,7 +648,7 @@ def import_adls(
|
|
|
616
648
|
"""Import a data contract from files in Azure Blob Storage / ADLS."""
|
|
617
649
|
enable_debug_logging(debug)
|
|
618
650
|
result = DataContract.import_from_source(
|
|
619
|
-
format="adls", source=source, file_format=format, delimiter=delimiter, owner=owner, id=id
|
|
651
|
+
config=cli_config(), format="adls", source=source, file_format=format, delimiter=delimiter, owner=owner, id=id
|
|
620
652
|
)
|
|
621
653
|
_write_result(result, output)
|
|
622
654
|
|
|
@@ -642,6 +674,7 @@ def import_trino(
|
|
|
642
674
|
"""Import a data contract from a Trino catalog."""
|
|
643
675
|
enable_debug_logging(debug)
|
|
644
676
|
result = DataContract.import_from_source(
|
|
677
|
+
config=cli_config(),
|
|
645
678
|
format="trino",
|
|
646
679
|
source=source,
|
|
647
680
|
port=port,
|
|
@@ -677,6 +710,7 @@ def import_oracle(
|
|
|
677
710
|
"""Import a data contract from an Oracle database."""
|
|
678
711
|
enable_debug_logging(debug)
|
|
679
712
|
result = DataContract.import_from_source(
|
|
713
|
+
config=cli_config(),
|
|
680
714
|
format="oracle",
|
|
681
715
|
source=source,
|
|
682
716
|
port=port,
|
|
@@ -710,6 +744,7 @@ def import_sqlserver(
|
|
|
710
744
|
"""Import a data contract from a SQL Server database."""
|
|
711
745
|
enable_debug_logging(debug)
|
|
712
746
|
result = DataContract.import_from_source(
|
|
747
|
+
config=cli_config(),
|
|
713
748
|
format="sqlserver",
|
|
714
749
|
source=source,
|
|
715
750
|
port=port,
|
|
@@ -742,6 +777,7 @@ def import_mysql(
|
|
|
742
777
|
"""Import a data contract from a MySQL database."""
|
|
743
778
|
enable_debug_logging(debug)
|
|
744
779
|
result = DataContract.import_from_source(
|
|
780
|
+
config=cli_config(),
|
|
745
781
|
format="mysql",
|
|
746
782
|
source=source,
|
|
747
783
|
port=port,
|
|
@@ -778,6 +814,7 @@ def import_s3(
|
|
|
778
814
|
"""Import a data contract from files in S3."""
|
|
779
815
|
enable_debug_logging(debug)
|
|
780
816
|
result = DataContract.import_from_source(
|
|
817
|
+
config=cli_config(),
|
|
781
818
|
format="s3",
|
|
782
819
|
source=source,
|
|
783
820
|
file_format=format,
|
|
@@ -815,6 +852,7 @@ def import_athena(
|
|
|
815
852
|
"""Import a data contract from an Amazon Athena database."""
|
|
816
853
|
enable_debug_logging(debug)
|
|
817
854
|
result = DataContract.import_from_source(
|
|
855
|
+
config=cli_config(),
|
|
818
856
|
format="athena",
|
|
819
857
|
schema=schema,
|
|
820
858
|
staging_dir=staging_dir,
|
|
@@ -4,6 +4,7 @@ import typer
|
|
|
4
4
|
from typing_extensions import Annotated
|
|
5
5
|
|
|
6
6
|
from datacontract.cli import app, console, debug_option, enable_debug_logging, resolve_output_format
|
|
7
|
+
from datacontract.config import cli_config
|
|
7
8
|
from datacontract.data_contract import DataContract
|
|
8
9
|
from datacontract.output.output_format import OutputFormat
|
|
9
10
|
from datacontract.output.test_results_writer import write_test_result
|
|
@@ -16,7 +17,7 @@ from datacontract.output.test_results_writer import write_test_result
|
|
|
16
17
|
def lint(
|
|
17
18
|
location: Annotated[
|
|
18
19
|
str,
|
|
19
|
-
typer.Argument(help="The location (url or path) of the data contract yaml."),
|
|
20
|
+
typer.Argument(help="The location (url, s3 url, or local path) of the data contract yaml."),
|
|
20
21
|
] = "datacontract.yaml",
|
|
21
22
|
schema: Annotated[
|
|
22
23
|
str,
|
|
@@ -55,6 +56,7 @@ def lint(
|
|
|
55
56
|
|
|
56
57
|
output_format = resolve_output_format(output_format, output)
|
|
57
58
|
run = DataContract(
|
|
59
|
+
config=cli_config(),
|
|
58
60
|
data_contract_file=location,
|
|
59
61
|
schema_location=schema,
|
|
60
62
|
all_errors=all_errors,
|
|
@@ -2,6 +2,7 @@ import typer
|
|
|
2
2
|
from typing_extensions import Annotated
|
|
3
3
|
|
|
4
4
|
from datacontract.cli import app, debug_option, enable_debug_logging
|
|
5
|
+
from datacontract.config import cli_config
|
|
5
6
|
from datacontract.integration.entropy_data import (
|
|
6
7
|
publish_data_contract_to_entropy_data,
|
|
7
8
|
)
|
|
@@ -15,7 +16,7 @@ from datacontract.lint.resolve import resolve_data_contract_dict
|
|
|
15
16
|
def publish(
|
|
16
17
|
location: Annotated[
|
|
17
18
|
str,
|
|
18
|
-
typer.Argument(help="The location (url or path) of the data contract yaml."),
|
|
19
|
+
typer.Argument(help="The location (url, s3 url, or local path) of the data contract yaml."),
|
|
19
20
|
] = "datacontract.yaml",
|
|
20
21
|
schema: Annotated[
|
|
21
22
|
str,
|
|
@@ -33,6 +34,7 @@ def publish(
|
|
|
33
34
|
enable_debug_logging(debug)
|
|
34
35
|
|
|
35
36
|
publish_data_contract_to_entropy_data(
|
|
36
|
-
|
|
37
|
+
config=cli_config(),
|
|
38
|
+
data_contract_dict=resolve_data_contract_dict(location, config=cli_config()),
|
|
37
39
|
ssl_verification=ssl_verification,
|
|
38
40
|
)
|