datacontract-cli 1.0.1__tar.gz → 1.0.2__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.1/datacontract_cli.egg-info → datacontract_cli-1.0.2}/PKG-INFO +8 -2
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/README.md +5 -1
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/command_edit.py +40 -3
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/ibis/connections/connect.py +18 -2
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/ibis/ibis_check_execute.py +28 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2/datacontract_cli.egg-info}/PKG-INFO +8 -2
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract_cli.egg-info/requires.txt +2 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/pyproject.toml +9 -3
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_edit.py +70 -1
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_dataframe.py +26 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/LICENSE +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/MANIFEST.in +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/__init__.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/api.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/catalog/catalog.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/changelog/__init__.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/changelog/changelog.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/changelog/normalize.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/cli.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/command_api.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/command_catalog.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/command_changelog.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/command_ci.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/command_dbt.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/command_export.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/command_import.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/command_init.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/command_lint.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/command_publish.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/command_test.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/data_contract.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/VERSION +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/abap-Bs8kvjsq.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/apex-Dspwrl5m.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/assets/editor.worker-4.7.0.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/assets/yaml.worker-4.7.0.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/azcli-k1BiOau1.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/bat-BIP72KWc.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/bicep-VhQeYhS3.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/cameligo-DnuAXtHg.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/clojure-BAuDPsal.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/coffee-BV06qSnj.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/cpp-Cz8Jeyrf.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/csharp-F6hhlXFb.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/csp-KzlEHCyI.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/css-e4FKntZ3.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/cssMode-BNkTa2xp.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/cypher-CpvDGKRr.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/dart-DdHeFWR0.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/datacontract-editor.css +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/datacontract-editor.es.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/dockerfile-aoNXDcio.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/ecl-C4Q0DYuA.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/elixir-C9X42b0T.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/flow9-Bff42pfB.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/freemarker2-Dyfzmb5A.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/fsharp-C6vPAsHG.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/go-DEr8zx9f.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/graphql-BiNBBRFh.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/handlebars-BtDNI-uC.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/hcl-2T9lKuFg.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/html-Cn4TGw_o.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/htmlMode-Bf84vbo2.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/index.html +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/ini-CZGtssYM.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/java-B260NeH3.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/javascript-B86Kac07.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/jsonMode-Ckgg5lAE.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/julia-kuNLM9c5.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/kotlin-Bz6kAefA.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/less-AZUtS89I.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/lexon-BcmgnyRb.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/liquid-D0NPwuu_.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/logo_fuchsia_v2.svg +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/lua-Dz1RbATg.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/m3-CIMooLFn.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/markdown-C1BsCK9P.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/mdx-QFRSBtVQ.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/mips-BovsnfLQ.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/monaco-4.7.0.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/msdax-CiRB2ZB-.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/mysql-BwdpPE19.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/objective-c-D4nfHfso.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/odcs.svg +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/pascal--j5-PYtz.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/pascaligo-C7TcJxNL.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/perl-BzEWqUb5.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/pgsql-B_KZ0mGX.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/php-A19QHzQV.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/pla-COeKY1hA.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/postiats-BfMp7zJL.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/powerquery-B0TS_5Gb.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/powershell-5jSbKdYB.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/protobuf-YgnOutn3.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/pug-DLej6kn5.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/python-C8RW9B6A.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/qsharp-AhjqtSHB.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/r-D-F4P80w.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/razor-CLZqdY_r.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/redis-hwwIlMnV.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/redshift-Bcm_kjEG.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/restructuredtext-CrdzfPP-.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/ruby-QC2UNm1s.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/rust-5aqiQ3L5.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/sb-B1g1ZfLJ.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/scala-C2U4R5Gb.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/scheme-DeFRbslr.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/scss-RSTCiCmI.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/shell-BpF-iNu8.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/solidity-C00r2mbQ.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/sophia-DVW5ZKDB.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/sparql-B0nmpxeX.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/sql-CJwKPERn.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/st-DPlKG5DT.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/swift-YZBAbVHV.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/systemverilog-CDQSaH63.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/tcl-Dlu8sp6Q.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/tsMode-yleMwhPq.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/twig-C5TO7-kw.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/typescript-CJBeebKU.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/typespec-BsmjDEu7.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/vb-ChHvIDrk.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/wgsl-XEp1ju8c.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/xml-vC-NMVX1.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/yaml-Dlf2VF-T.js +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/__init__.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/checks/__init__.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/checks/check_spec.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/checks/create_checks.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/checks/type_normalize.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/data_contract_test.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/ibis/__init__.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/ibis/connections/__init__.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/ibis/connections/duckdb_connection.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/ibis/connections/kafka.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/ibis/dtype_category.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/__init__.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/avro_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/avro_idl_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/bigquery_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/custom_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/data_caterer_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/dbml_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/dbt_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/dcs_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/dqx_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/duckdb_type_converter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/excel_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/exporter_factory.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/go_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/great_expectations_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/html_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/iceberg_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/jsonschema_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/markdown_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/mermaid_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/odcs_export_helper.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/odcs_v3_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/pandas_type_converter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/protobuf_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/pydantic_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/rdf_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/sodacl_check_builder.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/sodacl_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/spark_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/sql_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/sql_type_converter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/export/sqlalchemy_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/avro_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/bigquery_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/csv_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/dbml_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/dbt_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/dcs_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/excel_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/glue_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/iceberg_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/importer_factory.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/json_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/jsonschema_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/odcs_helper.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/odcs_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/parquet_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/protobuf_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/snowflake_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/spark_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/sql_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/imports/unity_importer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/init/init_template.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/integration/dbt_sync.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/integration/dbt_test_mapping.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/integration/entropy_data.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/lint/files.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/lint/resolve.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/lint/resources.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/lint/schema.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/lint/urls.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/model/changelog.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/model/exceptions.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/model/odcs.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/model/run.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/model/server.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/output/__init__.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/output/ci_output.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/output/json_test_results.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/output/junit_test_results.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/output/output_format.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/output/test_results_writer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/output/text_changelog_results.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/py.typed +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/schemas/datacontract-1.1.0.init.yaml +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/schemas/datacontract-1.2.0.init.yaml +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/schemas/datacontract-1.2.1.init.yaml +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/schemas/datacontract-1.2.1.schema.json +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/schemas/odcs-3.0.2.schema.json +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/schemas/odcs-3.1.0.init.yaml +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/schemas/odcs-3.1.0.schema.json +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/templates/datacontract.html +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/templates/datacontract_odcs.html +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/templates/index.html +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/templates/partials/datacontract_information.html +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/templates/partials/datacontract_terms.html +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/templates/partials/definition.html +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/templates/partials/example.html +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/templates/partials/model_field.html +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/templates/partials/quality.html +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/templates/partials/server.html +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/templates/style/output.css +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract_cli.egg-info/SOURCES.txt +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract_cli.egg-info/dependency_links.txt +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract_cli.egg-info/entry_points.txt +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract_cli.egg-info/top_level.txt +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/setup.cfg +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_api.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_catalog.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_changelog.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_changelog_engine.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_changelog_normalize.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_changelog_output_text.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_ci_output.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_cli.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_connect_databricks.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_connect_sqlserver.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_data_contract.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_data_contract_checks.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_data_contract_specification.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_dbt_sync.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_dbt_test_mapping.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_description_linter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_download_datacontract_file.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_duckdb_json.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_avro.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_avro_idl.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_bigquery.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_complex_data_contract.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_custom.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_custom_exporter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_custom_model.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_data_caterer.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_dbml.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_dbt_models.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_dbt_sources.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_dbt_staging_sql.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_dqx.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_excel.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_go.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_great_expectations.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_html.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_iceberg.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_jsonschema.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_markdown.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_mermaid.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_odcs_v3.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_protobuf.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_pydantic.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_rdf.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_sodacl.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_spark.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_sql.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_sql_query.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_export_sqlalchemy.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_ibis_mssql_pattern.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_avro.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_bigquery.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_csv.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_dbml.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_dbt.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_excel.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_glue.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_iceberg.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_json.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_jsonschema.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_odcs_v3.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_parquet.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_protobuf.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_snowflake.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_spark.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_sql_oracle.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_sql_postgres.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_sql_snowflake.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_sql_sqlserver.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_import_unity_file.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_integration_entropydata.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_lint.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_require_env.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_resolve.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_resolve_definitions.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_roundtrip_jsonschema.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_sql_type_converter_physicaltype.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_api.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_athena_iceberg.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_azure_remote.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_bigquery.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_checks_filter.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_databricks.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_delta.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_diagnostics.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_failed_samples.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_gcs_csv_remote.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_gcs_json_remote.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_kafka.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_kafka_remote.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_local_json.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_local_json_nd.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_mysql.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_oracle.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_output_json.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_output_junit.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_parquet.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_postgres.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_quality.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_quality_percent_severity.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_s3_csv.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_s3_delta.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_s3_json.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_s3_json_complex.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_s3_json_multiple_models.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_s3_json_remote.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_schema_evolution.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_server_not_found.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_snowflake.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_soda_connection_error.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_sqlserver.py +0 -0
- {datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/tests/test_test_trino.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.2
|
|
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
|
|
@@ -51,8 +51,10 @@ Provides-Extra: mysql
|
|
|
51
51
|
Requires-Dist: datacontract-cli[duckdb]; extra == "mysql"
|
|
52
52
|
Provides-Extra: postgres
|
|
53
53
|
Requires-Dist: ibis-framework[postgres]<13.0.0,>=10.0.0; extra == "postgres"
|
|
54
|
+
Requires-Dist: psycopg[binary]<4.0,>=3.1; extra == "postgres"
|
|
54
55
|
Provides-Extra: redshift
|
|
55
56
|
Requires-Dist: ibis-framework[postgres]<13.0.0,>=10.0.0; extra == "redshift"
|
|
57
|
+
Requires-Dist: psycopg[binary]<4.0,>=3.1; extra == "redshift"
|
|
56
58
|
Provides-Extra: s3
|
|
57
59
|
Requires-Dist: s3fs<2027.0.0,>=2025.2.0; extra == "s3"
|
|
58
60
|
Requires-Dist: duckdb-extension-httpfs<1.6.0,>=1.5.0; extra == "s3"
|
|
@@ -430,6 +432,7 @@ Usage: datacontract edit [OPTIONS] [LOCATION]
|
|
|
430
432
|
Starts a local web server that opens the Data Contract Editor for the given file.
|
|
431
433
|
The editor is bundled with the CLI, so no internet access is required.
|
|
432
434
|
Saving in the editor writes directly back to the local file.
|
|
435
|
+
If a URL is given, you are asked whether to download a local copy, which is then edited.
|
|
433
436
|
The server also acts as the editor's test runner: "Run test" in the editor executes
|
|
434
437
|
the data contract tests locally against the servers defined in the data contract.
|
|
435
438
|
Credentials for the data sources must be provided as environment variables, see
|
|
@@ -437,7 +440,9 @@ Usage: datacontract edit [OPTIONS] [LOCATION]
|
|
|
437
440
|
|
|
438
441
|
╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────╮
|
|
439
442
|
│ location [LOCATION] The path of the data contract yaml to edit. If the file does not │
|
|
440
|
-
│ exist, you are asked whether to initialize a new data contract.
|
|
443
|
+
│ exist, you are asked whether to initialize a new data contract. If a │
|
|
444
|
+
│ URL is given, you are asked whether to download a local copy to │
|
|
445
|
+
│ edit. │
|
|
441
446
|
│ [default: datacontract.yaml] │
|
|
442
447
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
443
448
|
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
|
|
@@ -791,6 +796,7 @@ models:
|
|
|
791
796
|
|----------------------------------------------|---------------------------|---------------------------------------------------------|
|
|
792
797
|
| `DATACONTRACT_BIGQUERY_ACCOUNT_INFO_JSON_PATH` | `~/service-access-key.json` | Service Account key JSON file. If not set, ADC/WIF is used automatically. |
|
|
793
798
|
| `DATACONTRACT_BIGQUERY_IMPERSONATION_ACCOUNT` | `sa@project.iam.gserviceaccount.com` | Optional. Service account to impersonate. Works with both key file and ADC auth. |
|
|
799
|
+
| `DATACONTRACT_BIGQUERY_BILLING_PROJECT` | `my-compute-project` | Optional. Google Cloud project ID to bill query jobs to. Use when the data lives in an external project and you want charges routed to your own project. Requires `bigquery.jobUser` on the billing project and `bigquery.dataViewer` on the data project. |
|
|
794
800
|
|
|
795
801
|
</details>
|
|
796
802
|
|
|
@@ -318,6 +318,7 @@ Usage: datacontract edit [OPTIONS] [LOCATION]
|
|
|
318
318
|
Starts a local web server that opens the Data Contract Editor for the given file.
|
|
319
319
|
The editor is bundled with the CLI, so no internet access is required.
|
|
320
320
|
Saving in the editor writes directly back to the local file.
|
|
321
|
+
If a URL is given, you are asked whether to download a local copy, which is then edited.
|
|
321
322
|
The server also acts as the editor's test runner: "Run test" in the editor executes
|
|
322
323
|
the data contract tests locally against the servers defined in the data contract.
|
|
323
324
|
Credentials for the data sources must be provided as environment variables, see
|
|
@@ -325,7 +326,9 @@ Usage: datacontract edit [OPTIONS] [LOCATION]
|
|
|
325
326
|
|
|
326
327
|
╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────╮
|
|
327
328
|
│ location [LOCATION] The path of the data contract yaml to edit. If the file does not │
|
|
328
|
-
│ exist, you are asked whether to initialize a new data contract.
|
|
329
|
+
│ exist, you are asked whether to initialize a new data contract. If a │
|
|
330
|
+
│ URL is given, you are asked whether to download a local copy to │
|
|
331
|
+
│ edit. │
|
|
329
332
|
│ [default: datacontract.yaml] │
|
|
330
333
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
331
334
|
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
|
|
@@ -679,6 +682,7 @@ models:
|
|
|
679
682
|
|----------------------------------------------|---------------------------|---------------------------------------------------------|
|
|
680
683
|
| `DATACONTRACT_BIGQUERY_ACCOUNT_INFO_JSON_PATH` | `~/service-access-key.json` | Service Account key JSON file. If not set, ADC/WIF is used automatically. |
|
|
681
684
|
| `DATACONTRACT_BIGQUERY_IMPERSONATION_ACCOUNT` | `sa@project.iam.gserviceaccount.com` | Optional. Service account to impersonate. Works with both key file and ADC auth. |
|
|
685
|
+
| `DATACONTRACT_BIGQUERY_BILLING_PROJECT` | `my-compute-project` | Optional. Google Cloud project ID to bill query jobs to. Use when the data lives in an external project and you want charges routed to your own project. Requires `bigquery.jobUser` on the billing project and `bigquery.dataViewer` on the data project. |
|
|
682
686
|
|
|
683
687
|
</details>
|
|
684
688
|
|
|
@@ -3,14 +3,16 @@ import mimetypes
|
|
|
3
3
|
import os
|
|
4
4
|
import webbrowser
|
|
5
5
|
from importlib import metadata
|
|
6
|
-
from pathlib import Path
|
|
7
|
-
from urllib.parse import quote
|
|
6
|
+
from pathlib import Path, PurePosixPath
|
|
7
|
+
from urllib.parse import quote, unquote, urlparse
|
|
8
8
|
|
|
9
9
|
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
13
|
from datacontract.init.init_template import get_init_template
|
|
14
|
+
from datacontract.lint.urls import fetch_resource
|
|
15
|
+
from datacontract.model.exceptions import DataContractException
|
|
14
16
|
|
|
15
17
|
EDITOR_ASSETS_URL_TEMPLATE = "https://cdn.jsdelivr.net/npm/datacontract-editor@{version}/dist"
|
|
16
18
|
|
|
@@ -34,6 +36,36 @@ def resolve_editor_assets_url(editor_version: str | None, editor_assets_url: str
|
|
|
34
36
|
return None
|
|
35
37
|
|
|
36
38
|
|
|
39
|
+
def local_copy_filename(url: str) -> str:
|
|
40
|
+
"""Return the filename for the local copy of a remote data contract URL."""
|
|
41
|
+
name = PurePosixPath(unquote(urlparse(url).path)).name
|
|
42
|
+
if name.endswith((".yaml", ".yml")):
|
|
43
|
+
return name
|
|
44
|
+
return "datacontract.yaml"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _download_local_copy(url: str) -> str:
|
|
48
|
+
"""Ask the user to download a local copy of the remote data contract and return its path."""
|
|
49
|
+
local_filename = local_copy_filename(url)
|
|
50
|
+
console.print("The editor edits local files only, but the data contract is available via a URL.")
|
|
51
|
+
if not typer.confirm(f"Download a local copy to '{local_filename}' and edit that?"):
|
|
52
|
+
console.print("Aborted.")
|
|
53
|
+
raise typer.Exit(code=1)
|
|
54
|
+
local_path = Path(local_filename)
|
|
55
|
+
if local_path.exists() and not typer.confirm(f"File '{local_filename}' already exists. Overwrite it?"):
|
|
56
|
+
console.print("Aborted.")
|
|
57
|
+
raise typer.Exit(code=1)
|
|
58
|
+
try:
|
|
59
|
+
content = fetch_resource(url)
|
|
60
|
+
except DataContractException as e:
|
|
61
|
+
console.print(f"[red]Error: {e.reason}[/red]")
|
|
62
|
+
raise typer.Exit(code=1)
|
|
63
|
+
local_path.write_text(content, encoding="utf-8")
|
|
64
|
+
console.print(f"📄 Downloaded {url} to {local_filename}")
|
|
65
|
+
console.print("Note: Saving in the editor writes to the local copy only, not back to the URL.")
|
|
66
|
+
return local_filename
|
|
67
|
+
|
|
68
|
+
|
|
37
69
|
def _cli_version() -> str:
|
|
38
70
|
try:
|
|
39
71
|
return metadata.version("datacontract-cli")
|
|
@@ -238,7 +270,8 @@ def edit(
|
|
|
238
270
|
str,
|
|
239
271
|
typer.Argument(
|
|
240
272
|
help="The path of the data contract yaml to edit. "
|
|
241
|
-
"If the file does not exist, you are asked whether to initialize a new data contract."
|
|
273
|
+
"If the file does not exist, you are asked whether to initialize a new data contract. "
|
|
274
|
+
"If a URL is given, you are asked whether to download a local copy to edit."
|
|
242
275
|
),
|
|
243
276
|
] = "datacontract.yaml",
|
|
244
277
|
port: Annotated[int, typer.Option(help="Bind socket to this port.")] = 4243,
|
|
@@ -270,6 +303,7 @@ def edit(
|
|
|
270
303
|
Starts a local web server that opens the Data Contract Editor for the given file.
|
|
271
304
|
The editor is bundled with the CLI, so no internet access is required.
|
|
272
305
|
Saving in the editor writes directly back to the local file.
|
|
306
|
+
If a URL is given, you are asked whether to download a local copy, which is then edited.
|
|
273
307
|
The server also acts as the editor's test runner: "Run test" in the editor executes
|
|
274
308
|
the data contract tests locally against the servers defined in the data contract.
|
|
275
309
|
Credentials for the data sources must be provided as environment variables, see
|
|
@@ -283,6 +317,9 @@ def edit(
|
|
|
283
317
|
console.print("[red]Install the extra datacontract-cli\\[api] to use edit.[/red]")
|
|
284
318
|
raise typer.Exit(code=1)
|
|
285
319
|
|
|
320
|
+
if location.startswith("http://") or location.startswith("https://"):
|
|
321
|
+
location = _download_local_copy(location)
|
|
322
|
+
|
|
286
323
|
file_path = Path(location).resolve()
|
|
287
324
|
if file_path.suffix not in (".yaml", ".yml"):
|
|
288
325
|
console.print("[red]Error: File must be a YAML file (.yaml or .yml).[/red]")
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/ibis/connections/connect.py
RENAMED
|
@@ -142,12 +142,28 @@ def connect_ibis(
|
|
|
142
142
|
)
|
|
143
143
|
|
|
144
144
|
if server_type == "bigquery":
|
|
145
|
-
kwargs = dict(project_id=server.project, dataset_id=server.dataset)
|
|
146
145
|
credentials_path = os.getenv("DATACONTRACT_BIGQUERY_ACCOUNT_INFO_JSON_PATH")
|
|
146
|
+
credentials = None
|
|
147
147
|
if credentials_path:
|
|
148
148
|
from google.oauth2 import service_account
|
|
149
149
|
|
|
150
|
-
|
|
150
|
+
credentials = service_account.Credentials.from_service_account_file(credentials_path)
|
|
151
|
+
|
|
152
|
+
billing_project = os.getenv("DATACONTRACT_BIGQUERY_BILLING_PROJECT")
|
|
153
|
+
|
|
154
|
+
if billing_project and billing_project != server.project:
|
|
155
|
+
from google.cloud import bigquery as bq_client_lib
|
|
156
|
+
|
|
157
|
+
client = bq_client_lib.Client(project=billing_project, credentials=credentials)
|
|
158
|
+
return ibis.bigquery.connect(
|
|
159
|
+
project_id=server.project,
|
|
160
|
+
dataset_id=server.dataset,
|
|
161
|
+
client=client,
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
kwargs = dict(project_id=server.project, dataset_id=server.dataset)
|
|
165
|
+
if credentials:
|
|
166
|
+
kwargs["credentials"] = credentials
|
|
151
167
|
return ibis.bigquery.connect(**kwargs)
|
|
152
168
|
|
|
153
169
|
if server_type == "sqlserver":
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/engines/ibis/ibis_check_execute.py
RENAMED
|
@@ -848,6 +848,8 @@ def _resolve_col(columns: dict, field: str) -> str:
|
|
|
848
848
|
|
|
849
849
|
def _resolve_table(con, model: str):
|
|
850
850
|
"""Resolve a table by name, tolerating case differences across dialects."""
|
|
851
|
+
if getattr(con, "name", None) == "pyspark":
|
|
852
|
+
return _pyspark_table_unconvertible_as_unknown(con, model)
|
|
851
853
|
try:
|
|
852
854
|
return con.table(model)
|
|
853
855
|
except Exception:
|
|
@@ -861,6 +863,32 @@ def _resolve_table(con, model: str):
|
|
|
861
863
|
return con.table(match)
|
|
862
864
|
|
|
863
865
|
|
|
866
|
+
def _pyspark_table_unconvertible_as_unknown(con, name: str):
|
|
867
|
+
"""Reflect a pyspark table, typing any column whose Spark type Ibis cannot
|
|
868
|
+
convert (e.g. Databricks `VariantType`) as `Unknown`.
|
|
869
|
+
"""
|
|
870
|
+
import ibis
|
|
871
|
+
import ibis.expr.datatypes as dt
|
|
872
|
+
import ibis.expr.operations as ops
|
|
873
|
+
from ibis.backends.pyspark.datatypes import PySparkType
|
|
874
|
+
|
|
875
|
+
fields, unknown_columns = {}, []
|
|
876
|
+
for field in con._session.table(name).schema.fields:
|
|
877
|
+
try:
|
|
878
|
+
fields[field.name] = PySparkType.to_ibis(field.dataType)
|
|
879
|
+
except Exception:
|
|
880
|
+
fields[field.name] = dt.unknown
|
|
881
|
+
unknown_columns.append(f"{field.name} ({field.dataType.simpleString()})")
|
|
882
|
+
if not unknown_columns:
|
|
883
|
+
# Nothing unconvertible, resolve the table normally
|
|
884
|
+
return con.table(name)
|
|
885
|
+
logger.warning(
|
|
886
|
+
f"Model '{name}': column(s) {', '.join(unknown_columns)} have a type ibis cannot represent. "
|
|
887
|
+
f"Type checks for these columns will fail."
|
|
888
|
+
)
|
|
889
|
+
return ops.DatabaseTable(name, schema=ibis.schema(fields), source=con).to_expr()
|
|
890
|
+
|
|
891
|
+
|
|
864
892
|
def _py(value):
|
|
865
893
|
if value is None:
|
|
866
894
|
return None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datacontract-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2
|
|
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
|
|
@@ -51,8 +51,10 @@ Provides-Extra: mysql
|
|
|
51
51
|
Requires-Dist: datacontract-cli[duckdb]; extra == "mysql"
|
|
52
52
|
Provides-Extra: postgres
|
|
53
53
|
Requires-Dist: ibis-framework[postgres]<13.0.0,>=10.0.0; extra == "postgres"
|
|
54
|
+
Requires-Dist: psycopg[binary]<4.0,>=3.1; extra == "postgres"
|
|
54
55
|
Provides-Extra: redshift
|
|
55
56
|
Requires-Dist: ibis-framework[postgres]<13.0.0,>=10.0.0; extra == "redshift"
|
|
57
|
+
Requires-Dist: psycopg[binary]<4.0,>=3.1; extra == "redshift"
|
|
56
58
|
Provides-Extra: s3
|
|
57
59
|
Requires-Dist: s3fs<2027.0.0,>=2025.2.0; extra == "s3"
|
|
58
60
|
Requires-Dist: duckdb-extension-httpfs<1.6.0,>=1.5.0; extra == "s3"
|
|
@@ -430,6 +432,7 @@ Usage: datacontract edit [OPTIONS] [LOCATION]
|
|
|
430
432
|
Starts a local web server that opens the Data Contract Editor for the given file.
|
|
431
433
|
The editor is bundled with the CLI, so no internet access is required.
|
|
432
434
|
Saving in the editor writes directly back to the local file.
|
|
435
|
+
If a URL is given, you are asked whether to download a local copy, which is then edited.
|
|
433
436
|
The server also acts as the editor's test runner: "Run test" in the editor executes
|
|
434
437
|
the data contract tests locally against the servers defined in the data contract.
|
|
435
438
|
Credentials for the data sources must be provided as environment variables, see
|
|
@@ -437,7 +440,9 @@ Usage: datacontract edit [OPTIONS] [LOCATION]
|
|
|
437
440
|
|
|
438
441
|
╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────╮
|
|
439
442
|
│ location [LOCATION] The path of the data contract yaml to edit. If the file does not │
|
|
440
|
-
│ exist, you are asked whether to initialize a new data contract.
|
|
443
|
+
│ exist, you are asked whether to initialize a new data contract. If a │
|
|
444
|
+
│ URL is given, you are asked whether to download a local copy to │
|
|
445
|
+
│ edit. │
|
|
441
446
|
│ [default: datacontract.yaml] │
|
|
442
447
|
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
|
443
448
|
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
|
|
@@ -791,6 +796,7 @@ models:
|
|
|
791
796
|
|----------------------------------------------|---------------------------|---------------------------------------------------------|
|
|
792
797
|
| `DATACONTRACT_BIGQUERY_ACCOUNT_INFO_JSON_PATH` | `~/service-access-key.json` | Service Account key JSON file. If not set, ADC/WIF is used automatically. |
|
|
793
798
|
| `DATACONTRACT_BIGQUERY_IMPERSONATION_ACCOUNT` | `sa@project.iam.gserviceaccount.com` | Optional. Service account to impersonate. Works with both key file and ADC auth. |
|
|
799
|
+
| `DATACONTRACT_BIGQUERY_BILLING_PROJECT` | `my-compute-project` | Optional. Google Cloud project ID to bill query jobs to. Use when the data lives in an external project and you want charges routed to your own project. Requires `bigquery.jobUser` on the billing project and `bigquery.dataViewer` on the data project. |
|
|
794
800
|
|
|
795
801
|
</details>
|
|
796
802
|
|
|
@@ -98,6 +98,7 @@ pyarrow>=18.1.0
|
|
|
98
98
|
|
|
99
99
|
[postgres]
|
|
100
100
|
ibis-framework[postgres]<13.0.0,>=10.0.0
|
|
101
|
+
psycopg[binary]<4.0,>=3.1
|
|
101
102
|
|
|
102
103
|
[protobuf]
|
|
103
104
|
proto-schema-parser<3.0,>=1.0
|
|
@@ -107,6 +108,7 @@ rdflib==7.6.0
|
|
|
107
108
|
|
|
108
109
|
[redshift]
|
|
109
110
|
ibis-framework[postgres]<13.0.0,>=10.0.0
|
|
111
|
+
psycopg[binary]<4.0,>=3.1
|
|
110
112
|
|
|
111
113
|
[s3]
|
|
112
114
|
s3fs<2027.0.0,>=2025.2.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "datacontract-cli"
|
|
3
|
-
version = "1.0.
|
|
3
|
+
version = "1.0.2"
|
|
4
4
|
description = "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
|
license = "MIT"
|
|
6
6
|
readme = "README.md"
|
|
@@ -86,12 +86,18 @@ mysql = [
|
|
|
86
86
|
]
|
|
87
87
|
|
|
88
88
|
postgres = [
|
|
89
|
-
"ibis-framework[postgres]>=10.0.0,<13.0.0"
|
|
89
|
+
"ibis-framework[postgres]>=10.0.0,<13.0.0",
|
|
90
|
+
# psycopg's binary wheels bundle libpq, so the extra works without
|
|
91
|
+
# PostgreSQL client libraries installed on the system.
|
|
92
|
+
"psycopg[binary]>=3.1,<4.0",
|
|
90
93
|
]
|
|
91
94
|
|
|
92
95
|
redshift = [
|
|
93
96
|
# Redshift speaks the postgres wire protocol; ibis has no dedicated backend.
|
|
94
|
-
"ibis-framework[postgres]>=10.0.0,<13.0.0"
|
|
97
|
+
"ibis-framework[postgres]>=10.0.0,<13.0.0",
|
|
98
|
+
# psycopg's binary wheels bundle libpq, so the extra works without
|
|
99
|
+
# PostgreSQL client libraries installed on the system.
|
|
100
|
+
"psycopg[binary]>=3.1,<4.0",
|
|
95
101
|
]
|
|
96
102
|
|
|
97
103
|
# DuckDB extension wheels are bundled for air-gapped installs. The 1.5.x line
|
|
@@ -6,7 +6,12 @@ from fastapi.testclient import TestClient
|
|
|
6
6
|
from typer.testing import CliRunner
|
|
7
7
|
|
|
8
8
|
from datacontract.cli import app
|
|
9
|
-
from datacontract.command_edit import
|
|
9
|
+
from datacontract.command_edit import (
|
|
10
|
+
BUNDLED_EDITOR_ASSETS_DIR,
|
|
11
|
+
create_app,
|
|
12
|
+
local_copy_filename,
|
|
13
|
+
resolve_editor_assets_url,
|
|
14
|
+
)
|
|
10
15
|
|
|
11
16
|
YAML_CONTENT = """apiVersion: v3.1.0
|
|
12
17
|
kind: DataContract
|
|
@@ -49,6 +54,70 @@ def test_edit_aborts_when_initialization_is_declined(tmp_path):
|
|
|
49
54
|
assert not file_path.exists()
|
|
50
55
|
|
|
51
56
|
|
|
57
|
+
def test_edit_downloads_a_local_copy_of_a_url(tmp_path, monkeypatch):
|
|
58
|
+
monkeypatch.chdir(tmp_path)
|
|
59
|
+
runner = CliRunner()
|
|
60
|
+
url = "https://example.com/contracts/orders.yaml"
|
|
61
|
+
with (
|
|
62
|
+
patch("datacontract.command_edit.fetch_resource", return_value=YAML_CONTENT) as mock_fetch,
|
|
63
|
+
patch("uvicorn.run") as mock_run,
|
|
64
|
+
):
|
|
65
|
+
result = runner.invoke(app, ["edit", url, "--no-open"], input="y\n")
|
|
66
|
+
assert result.exit_code == 0
|
|
67
|
+
mock_fetch.assert_called_once_with(url)
|
|
68
|
+
assert (tmp_path / "orders.yaml").read_text(encoding="utf-8") == YAML_CONTENT
|
|
69
|
+
# saving in the editor goes to the local copy, not back to the URL
|
|
70
|
+
assert "local copy" in result.output
|
|
71
|
+
mock_run.assert_called_once()
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def test_edit_downloads_a_url_with_the_entropy_data_api_key(tmp_path, monkeypatch):
|
|
75
|
+
monkeypatch.chdir(tmp_path)
|
|
76
|
+
monkeypatch.setenv("ENTROPY_DATA_API_KEY", "secret-key")
|
|
77
|
+
monkeypatch.delenv("DATAMESH_MANAGER_API_KEY", raising=False)
|
|
78
|
+
monkeypatch.delenv("DATACONTRACT_MANAGER_API_KEY", raising=False)
|
|
79
|
+
runner = CliRunner()
|
|
80
|
+
url = "https://app.entropy-data.com/contracts/orders.yaml"
|
|
81
|
+
response = MagicMock(status_code=200, text=YAML_CONTENT)
|
|
82
|
+
with patch("datacontract.lint.urls.requests.get", return_value=response) as mock_get, patch("uvicorn.run"):
|
|
83
|
+
result = runner.invoke(app, ["edit", url, "--no-open"], input="y\n")
|
|
84
|
+
assert result.exit_code == 0
|
|
85
|
+
mock_get.assert_called_once()
|
|
86
|
+
assert mock_get.call_args.kwargs["headers"]["x-api-key"] == "secret-key"
|
|
87
|
+
assert (tmp_path / "orders.yaml").read_text(encoding="utf-8") == YAML_CONTENT
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def test_edit_aborts_when_local_copy_of_a_url_is_declined(tmp_path, monkeypatch):
|
|
91
|
+
monkeypatch.chdir(tmp_path)
|
|
92
|
+
runner = CliRunner()
|
|
93
|
+
with patch("datacontract.command_edit.fetch_resource") as mock_fetch:
|
|
94
|
+
result = runner.invoke(app, ["edit", "https://example.com/orders.yaml", "--no-open"], input="n\n")
|
|
95
|
+
assert result.exit_code == 1
|
|
96
|
+
mock_fetch.assert_not_called()
|
|
97
|
+
assert not (tmp_path / "orders.yaml").exists()
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def test_edit_asks_before_overwriting_an_existing_local_copy(tmp_path, monkeypatch):
|
|
101
|
+
monkeypatch.chdir(tmp_path)
|
|
102
|
+
existing = tmp_path / "orders.yaml"
|
|
103
|
+
existing.write_text("local changes", encoding="utf-8")
|
|
104
|
+
runner = CliRunner()
|
|
105
|
+
with patch("datacontract.command_edit.fetch_resource") as mock_fetch:
|
|
106
|
+
result = runner.invoke(app, ["edit", "https://example.com/orders.yaml", "--no-open"], input="y\nn\n")
|
|
107
|
+
assert result.exit_code == 1
|
|
108
|
+
mock_fetch.assert_not_called()
|
|
109
|
+
assert existing.read_text(encoding="utf-8") == "local changes"
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def test_local_copy_filename():
|
|
113
|
+
assert local_copy_filename("https://example.com/contracts/orders.yaml") == "orders.yaml"
|
|
114
|
+
assert local_copy_filename("https://example.com/contracts/orders.yml?version=2") == "orders.yml"
|
|
115
|
+
assert local_copy_filename("https://example.com/orders%20v2.yaml") == "orders v2.yaml"
|
|
116
|
+
# URLs without a YAML filename fall back to the default
|
|
117
|
+
assert local_copy_filename("https://example.com/api/contracts/12345") == "datacontract.yaml"
|
|
118
|
+
assert local_copy_filename("https://example.com/") == "datacontract.yaml"
|
|
119
|
+
|
|
120
|
+
|
|
52
121
|
def test_index_serves_editor_page(client, contract_file):
|
|
53
122
|
response = client.get("/")
|
|
54
123
|
assert response.status_code == 200
|
|
@@ -172,3 +172,29 @@ def _prepare_fail_dataframe(spark):
|
|
|
172
172
|
# Create temporary view
|
|
173
173
|
# Name must match the model name in the data contract
|
|
174
174
|
df.createOrReplaceTempView("my_table")
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def test_pyspark_unconvertible_column_as_unknown(spark: SparkSession):
|
|
178
|
+
import ibis
|
|
179
|
+
import ibis.expr.datatypes as dt
|
|
180
|
+
from ibis.backends.pyspark.datatypes import PySparkType
|
|
181
|
+
|
|
182
|
+
from datacontract.engines.ibis.ibis_check_execute import _resolve_table
|
|
183
|
+
|
|
184
|
+
spark.sql("SELECT 1 AS id, INTERVAL '1-2' YEAR TO MONTH AS payload, 10 AS amount").createOrReplaceTempView(
|
|
185
|
+
"unconvertible_model"
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
# Sanity: the fixture column really is unconvertible for ibis
|
|
189
|
+
payload_type = spark.table("unconvertible_model").schema["payload"].dataType
|
|
190
|
+
with pytest.raises(Exception):
|
|
191
|
+
PySparkType.to_ibis(payload_type)
|
|
192
|
+
|
|
193
|
+
con = ibis.pyspark.connect(session=spark)
|
|
194
|
+
t = _resolve_table(con, "unconvertible_model")
|
|
195
|
+
|
|
196
|
+
assert set(t.columns) == {"id", "payload", "amount"} # kept
|
|
197
|
+
assert isinstance(t.schema()["payload"], dt.Unknown) # typed opaque
|
|
198
|
+
assert t.count().execute() == 1 # table is queryable
|
|
199
|
+
assert t.amount.isnull().sum().execute() == 0 # checks on other columns run
|
|
200
|
+
assert t.payload.isnull().sum().execute() == 0 # not-null still works on the opaque column
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/abap-Bs8kvjsq.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/apex-Dspwrl5m.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/azcli-k1BiOau1.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/bat-BIP72KWc.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/bicep-VhQeYhS3.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/cameligo-DnuAXtHg.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/clojure-BAuDPsal.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/coffee-BV06qSnj.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/cpp-Cz8Jeyrf.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/csharp-F6hhlXFb.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/csp-KzlEHCyI.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/css-e4FKntZ3.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/cssMode-BNkTa2xp.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/cypher-CpvDGKRr.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/dart-DdHeFWR0.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/datacontract-editor.css
RENAMED
|
File without changes
|
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/dockerfile-aoNXDcio.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/ecl-C4Q0DYuA.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/elixir-C9X42b0T.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/flow9-Bff42pfB.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/freemarker2-Dyfzmb5A.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/fsharp-C6vPAsHG.js
RENAMED
|
File without changes
|
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/graphql-BiNBBRFh.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/handlebars-BtDNI-uC.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/hcl-2T9lKuFg.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/html-Cn4TGw_o.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/htmlMode-Bf84vbo2.js
RENAMED
|
File without changes
|
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/ini-CZGtssYM.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/java-B260NeH3.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/javascript-B86Kac07.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/jsonMode-Ckgg5lAE.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/julia-kuNLM9c5.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/kotlin-Bz6kAefA.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/less-AZUtS89I.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/lexon-BcmgnyRb.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/liquid-D0NPwuu_.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/logo_fuchsia_v2.svg
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/lua-Dz1RbATg.js
RENAMED
|
File without changes
|
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/markdown-C1BsCK9P.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/mdx-QFRSBtVQ.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/mips-BovsnfLQ.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/monaco-4.7.0.js
RENAMED
|
File without changes
|
{datacontract_cli-1.0.1 → datacontract_cli-1.0.2}/datacontract/editor_assets/msdax-CiRB2ZB-.js
RENAMED
|
File without changes
|