datacontract-cli 0.10.35__tar.gz → 0.10.36__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.

Potentially problematic release.


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

Files changed (229) hide show
  1. {datacontract_cli-0.10.35/datacontract_cli.egg-info → datacontract_cli-0.10.36}/PKG-INFO +27 -24
  2. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/README.md +21 -18
  3. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/api.py +1 -1
  4. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/cli.py +1 -1
  5. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/data_contract.py +18 -51
  6. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/data_contract_checks.py +280 -19
  7. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/dbt_converter.py +30 -4
  8. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/dqx_converter.py +12 -7
  9. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/excel_exporter.py +3 -3
  10. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/markdown_converter.py +35 -16
  11. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/rdf_converter.py +2 -2
  12. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/sql_type_converter.py +6 -4
  13. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/odcs_v3_importer.py +71 -18
  14. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/unity_importer.py +16 -11
  15. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/init/init_template.py +1 -1
  16. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/lint/resolve.py +1 -1
  17. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/lint/schema.py +1 -1
  18. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.1.0.init.yaml +1 -1
  19. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.2.0.init.yaml +1 -1
  20. datacontract_cli-0.10.36/datacontract/schemas/datacontract-1.2.1.init.yaml +91 -0
  21. datacontract_cli-0.10.36/datacontract/schemas/datacontract-1.2.1.schema.json +2058 -0
  22. datacontract_cli-0.10.36/datacontract/schemas/odcs-3.0.2.schema.json +2382 -0
  23. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/datacontract_odcs.html +60 -41
  24. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36/datacontract_cli.egg-info}/PKG-INFO +27 -24
  25. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/SOURCES.txt +3 -12
  26. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/requires.txt +5 -5
  27. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/pyproject.toml +6 -6
  28. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_api.py +1 -1
  29. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_duckdb_json.py +1 -1
  30. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_bigquery.py +1 -1
  31. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_complex_data_contract.py +1 -1
  32. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_dbml.py +2 -2
  33. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_dbt_models.py +125 -0
  34. datacontract_cli-0.10.36/tests/test_export_dqx.py +212 -0
  35. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_rdf.py +6 -6
  36. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_sodacl.py +1 -1
  37. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_avro.py +18 -18
  38. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_bigquery.py +4 -4
  39. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_csv.py +3 -3
  40. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_dbml.py +3 -3
  41. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_dbt.py +12 -12
  42. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_glue.py +6 -6
  43. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_iceberg.py +1 -1
  44. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_json.py +6 -6
  45. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_jsonschema.py +6 -6
  46. datacontract_cli-0.10.36/tests/test_import_odcs_v3.py +123 -0
  47. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_parquet.py +3 -3
  48. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_protobuf.py +3 -3
  49. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_spark.py +4 -4
  50. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_sql_postgres.py +6 -6
  51. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_sql_sqlserver.py +3 -3
  52. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_unity_file.py +5 -5
  53. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_lint.py +2 -2
  54. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_resolve.py +7 -7
  55. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_roundtrip_jsonschema.py +1 -1
  56. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_bigquery.py +14 -0
  57. datacontract_cli-0.10.36/tests/test_test_dataframe.py +176 -0
  58. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_quality.py +4 -0
  59. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_s3_delta.py +2 -4
  60. datacontract_cli-0.10.35/datacontract/lint/lint.py +0 -142
  61. datacontract_cli-0.10.35/datacontract/lint/linters/description_linter.py +0 -33
  62. datacontract_cli-0.10.35/datacontract/lint/linters/field_pattern_linter.py +0 -34
  63. datacontract_cli-0.10.35/datacontract/lint/linters/field_reference_linter.py +0 -47
  64. datacontract_cli-0.10.35/datacontract/lint/linters/notice_period_linter.py +0 -55
  65. datacontract_cli-0.10.35/datacontract/lint/linters/valid_constraints_linter.py +0 -100
  66. datacontract_cli-0.10.35/datacontract/output/__init__.py +0 -0
  67. datacontract_cli-0.10.35/tests/test_documentation_linter.py +0 -48
  68. datacontract_cli-0.10.35/tests/test_export_dqx.py +0 -319
  69. datacontract_cli-0.10.35/tests/test_field_constraint_linter.py +0 -68
  70. datacontract_cli-0.10.35/tests/test_field_pattern_linter.py +0 -42
  71. datacontract_cli-0.10.35/tests/test_field_reference_linter.py +0 -56
  72. datacontract_cli-0.10.35/tests/test_import_odcs_v3.py +0 -48
  73. datacontract_cli-0.10.35/tests/test_notice_period_linter.py +0 -47
  74. datacontract_cli-0.10.35/tests/test_test_dataframe.py +0 -107
  75. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/LICENSE +0 -0
  76. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/MANIFEST.in +0 -0
  77. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/__init__.py +0 -0
  78. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/breaking/breaking.py +0 -0
  79. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/breaking/breaking_change.py +0 -0
  80. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/breaking/breaking_rules.py +0 -0
  81. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/catalog/catalog.py +0 -0
  82. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/__init__.py +0 -0
  83. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/data_contract_test.py +0 -0
  84. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/datacontract/check_that_datacontract_contains_valid_servers_configuration.py +0 -0
  85. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/datacontract/check_that_datacontract_file_exists.py +0 -0
  86. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/fastjsonschema/check_jsonschema.py +0 -0
  87. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/fastjsonschema/s3/s3_read_files.py +0 -0
  88. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/__init__.py +0 -0
  89. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/check_soda_execute.py +0 -0
  90. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/athena.py +0 -0
  91. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/bigquery.py +0 -0
  92. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/databricks.py +0 -0
  93. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/duckdb_connection.py +0 -0
  94. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/kafka.py +0 -0
  95. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/postgres.py +0 -0
  96. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/snowflake.py +0 -0
  97. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/sqlserver.py +0 -0
  98. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/engines/soda/connections/trino.py +0 -0
  99. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/__init__.py +0 -0
  100. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/avro_converter.py +0 -0
  101. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/avro_idl_converter.py +0 -0
  102. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/bigquery_converter.py +0 -0
  103. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/custom_converter.py +0 -0
  104. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/data_caterer_converter.py +0 -0
  105. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/dbml_converter.py +0 -0
  106. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/dcs_exporter.py +0 -0
  107. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/duckdb_type_converter.py +0 -0
  108. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/exporter.py +0 -0
  109. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/exporter_factory.py +0 -0
  110. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/go_converter.py +0 -0
  111. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/great_expectations_converter.py +0 -0
  112. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/html_exporter.py +0 -0
  113. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/iceberg_converter.py +0 -0
  114. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/jsonschema_converter.py +0 -0
  115. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/mermaid_exporter.py +0 -0
  116. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/odcs_v3_exporter.py +0 -0
  117. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/pandas_type_converter.py +0 -0
  118. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/protobuf_converter.py +0 -0
  119. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/pydantic_converter.py +0 -0
  120. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/sodacl_converter.py +0 -0
  121. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/spark_converter.py +0 -0
  122. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/sql_converter.py +0 -0
  123. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/sqlalchemy_converter.py +0 -0
  124. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/export/terraform_converter.py +0 -0
  125. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/avro_importer.py +0 -0
  126. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/bigquery_importer.py +0 -0
  127. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/csv_importer.py +0 -0
  128. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/dbml_importer.py +0 -0
  129. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/dbt_importer.py +0 -0
  130. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/excel_importer.py +0 -0
  131. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/glue_importer.py +0 -0
  132. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/iceberg_importer.py +0 -0
  133. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/importer.py +0 -0
  134. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/importer_factory.py +0 -0
  135. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/json_importer.py +0 -0
  136. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/jsonschema_importer.py +0 -0
  137. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/odcs_importer.py +0 -0
  138. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/parquet_importer.py +0 -0
  139. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/protobuf_importer.py +0 -0
  140. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/spark_importer.py +0 -0
  141. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/imports/sql_importer.py +0 -0
  142. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/integration/datamesh_manager.py +0 -0
  143. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/lint/files.py +0 -0
  144. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/lint/resources.py +0 -0
  145. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/lint/urls.py +0 -0
  146. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/model/data_contract_specification/__init__.py +0 -0
  147. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/model/exceptions.py +0 -0
  148. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/model/odcs.py +0 -0
  149. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/model/run.py +0 -0
  150. {datacontract_cli-0.10.35/datacontract/lint/linters → datacontract_cli-0.10.36/datacontract/output}/__init__.py +0 -0
  151. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/output/junit_test_results.py +0 -0
  152. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/output/output_format.py +0 -0
  153. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/output/test_results_writer.py +0 -0
  154. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/py.typed +0 -0
  155. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.1.0.schema.json +0 -0
  156. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/schemas/datacontract-1.2.0.schema.json +0 -0
  157. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/schemas/odcs-3.0.1.schema.json +0 -0
  158. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/datacontract.html +0 -0
  159. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/index.html +0 -0
  160. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/datacontract_information.html +0 -0
  161. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/datacontract_servicelevels.html +0 -0
  162. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/datacontract_terms.html +0 -0
  163. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/definition.html +0 -0
  164. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/example.html +0 -0
  165. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/model_field.html +0 -0
  166. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/quality.html +0 -0
  167. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/partials/server.html +0 -0
  168. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract/templates/style/output.css +0 -0
  169. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/dependency_links.txt +0 -0
  170. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/entry_points.txt +0 -0
  171. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/datacontract_cli.egg-info/top_level.txt +0 -0
  172. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/setup.cfg +0 -0
  173. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_breaking.py +0 -0
  174. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_catalog.py +0 -0
  175. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_changelog.py +0 -0
  176. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_cli.py +0 -0
  177. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_data_contract_checks.py +0 -0
  178. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_data_contract_specification.py +0 -0
  179. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_description_linter.py +0 -0
  180. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_download_datacontract_file.py +0 -0
  181. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_avro.py +0 -0
  182. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_avro_idl.py +0 -0
  183. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_custom.py +0 -0
  184. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_custom_exporter.py +0 -0
  185. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_data_caterer.py +0 -0
  186. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_dbt_sources.py +0 -0
  187. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_dbt_staging_sql.py +0 -0
  188. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_excel.py +0 -0
  189. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_go.py +0 -0
  190. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_great_expectations.py +0 -0
  191. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_html.py +0 -0
  192. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_iceberg.py +0 -0
  193. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_jsonschema.py +0 -0
  194. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_markdown.py +0 -0
  195. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_mermaid.py +0 -0
  196. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_odcs_v3.py +0 -0
  197. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_protobuf.py +0 -0
  198. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_pydantic.py +0 -0
  199. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_spark.py +0 -0
  200. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_sql.py +0 -0
  201. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_sql_query.py +0 -0
  202. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_sqlalchemy.py +0 -0
  203. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_export_terraform.py +0 -0
  204. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_import_excel.py +0 -0
  205. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_integration_datameshmanager.py +0 -0
  206. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_spec_fields_field.py +0 -0
  207. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_spec_ref.py +0 -0
  208. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_api.py +0 -0
  209. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_athena_iceberg.py +0 -0
  210. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_azure_remote.py +0 -0
  211. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_databricks.py +0 -0
  212. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_delta.py +0 -0
  213. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_gcs_csv_remote.py +0 -0
  214. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_gcs_json_remote.py +0 -0
  215. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_kafka.py +0 -0
  216. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_kafka_remote.py +0 -0
  217. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_local_json.py +0 -0
  218. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_local_json_nd.py +0 -0
  219. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_output_junit.py +0 -0
  220. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_parquet.py +0 -0
  221. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_postgres.py +0 -0
  222. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_s3_csv.py +0 -0
  223. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_s3_json.py +0 -0
  224. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_s3_json_complex.py +0 -0
  225. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_s3_json_multiple_models.py +0 -0
  226. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_s3_json_remote.py +0 -0
  227. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_snowflake.py +0 -0
  228. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_sqlserver.py +0 -0
  229. {datacontract_cli-0.10.35 → datacontract_cli-0.10.36}/tests/test_test_trino.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacontract-cli
3
- Version: 0.10.35
3
+ Version: 0.10.36
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
@@ -11,7 +11,7 @@ Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.10
12
12
  Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
- Requires-Dist: typer<0.17,>=0.15.1
14
+ Requires-Dist: typer<0.20,>=0.15.1
15
15
  Requires-Dist: pydantic<2.12.0,>=2.8.2
16
16
  Requires-Dist: pyyaml~=6.0.1
17
17
  Requires-Dist: requests<2.33,>=2.31
@@ -28,7 +28,7 @@ Requires-Dist: python-dotenv<2.0.0,>=1.0.0
28
28
  Requires-Dist: boto3<2.0.0,>=1.34.41
29
29
  Requires-Dist: Jinja2<4.0.0,>=3.1.5
30
30
  Requires-Dist: jinja_partials<1.0.0,>=0.2.1
31
- Requires-Dist: datacontract-specification<2.0.0,>=1.2.0
31
+ Requires-Dist: datacontract-specification<2.0.0,>=1.2.3
32
32
  Requires-Dist: open-data-contract-standard<4.0.0,>=3.0.4
33
33
  Provides-Extra: avro
34
34
  Requires-Dist: avro==1.12.0; extra == "avro"
@@ -42,7 +42,7 @@ Provides-Extra: databricks
42
42
  Requires-Dist: soda-core-spark-df<3.6.0,>=3.3.20; extra == "databricks"
43
43
  Requires-Dist: soda-core-spark[databricks]<3.6.0,>=3.3.20; extra == "databricks"
44
44
  Requires-Dist: databricks-sql-connector<4.1.0,>=3.7.0; extra == "databricks"
45
- Requires-Dist: databricks-sdk<0.64.0; extra == "databricks"
45
+ Requires-Dist: databricks-sdk<0.68.0; extra == "databricks"
46
46
  Requires-Dist: pyspark<4.0.0,>=3.5.5; extra == "databricks"
47
47
  Provides-Extra: iceberg
48
48
  Requires-Dist: pyiceberg==0.9.1; extra == "iceberg"
@@ -56,7 +56,7 @@ Provides-Extra: s3
56
56
  Requires-Dist: s3fs<2026.0.0,>=2025.2.0; extra == "s3"
57
57
  Requires-Dist: aiobotocore<2.25.0,>=2.17.0; extra == "s3"
58
58
  Provides-Extra: snowflake
59
- Requires-Dist: snowflake-connector-python[pandas]<3.17,>=3.6; extra == "snowflake"
59
+ Requires-Dist: snowflake-connector-python[pandas]<4.1,>=3.6; extra == "snowflake"
60
60
  Requires-Dist: soda-core-snowflake<3.6.0,>=3.3.20; extra == "snowflake"
61
61
  Provides-Extra: sqlserver
62
62
  Requires-Dist: soda-core-sqlserver<3.6.0,>=3.3.20; extra == "sqlserver"
@@ -83,7 +83,7 @@ Provides-Extra: dev
83
83
  Requires-Dist: datacontract-cli[all]; extra == "dev"
84
84
  Requires-Dist: httpx==0.28.1; extra == "dev"
85
85
  Requires-Dist: kafka-python; extra == "dev"
86
- Requires-Dist: moto==5.1.10; extra == "dev"
86
+ Requires-Dist: moto==5.1.13; extra == "dev"
87
87
  Requires-Dist: pandas>=2.1.0; extra == "dev"
88
88
  Requires-Dist: pre-commit<4.4.0,>=3.7.1; extra == "dev"
89
89
  Requires-Dist: pytest; extra == "dev"
@@ -119,9 +119,9 @@ We have a _servers_ section with endpoint details to the S3 bucket, _models_ for
119
119
 
120
120
  This data contract contains all information to connect to S3 and check that the actual data meets the defined schema and quality requirements. We can use this information to test if the actual data product in S3 is compliant to the data contract.
121
121
 
122
- Let's use [pip](https://pip.pypa.io/en/stable/getting-started/) to install the CLI (or use the [Docker image](#docker)),
122
+ Let's use [uv](https://docs.astral.sh/uv/) to install the CLI (or use the [Docker image](#docker)),
123
123
  ```bash
124
- $ python3 -m pip install 'datacontract-cli[all]'
124
+ $ uv tool install --python python3.11 'datacontract-cli[all]'
125
125
  ```
126
126
 
127
127
 
@@ -1540,18 +1540,22 @@ datacontract import --format bigquery --bigquery-project <project_id> --bigquery
1540
1540
  ```
1541
1541
 
1542
1542
  #### Unity Catalog
1543
-
1544
1543
  ```bash
1545
1544
  # Example import from a Unity Catalog JSON file
1546
1545
  datacontract import --format unity --source my_unity_table.json
1547
1546
  ```
1548
1547
 
1549
1548
  ```bash
1550
- # Example import single table from Unity Catalog via HTTP endpoint
1549
+ # Example import single table from Unity Catalog via HTTP endpoint using PAT
1551
1550
  export DATACONTRACT_DATABRICKS_SERVER_HOSTNAME="https://xyz.cloud.databricks.com"
1552
- export DATACONTRACT_DATABRICKS_HTTP_PATH="/sql/1.0/warehouses/b053a331fa014fb4"
1553
1551
  export DATACONTRACT_DATABRICKS_TOKEN=<token>
1554
1552
  datacontract import --format unity --unity-table-full-name <table_full_name>
1553
+ ```
1554
+ Please Refer to [Databricks documentation](https://docs.databricks.com/aws/en/dev-tools/auth/unified-auth) on how to set up a profile
1555
+ ```bash
1556
+ # Example import single table from Unity Catalog via HTTP endpoint using Profile
1557
+ export DATACONTRACT_DATABRICKS_PROFILE="my-profile"
1558
+ datacontract import --format unity --unity-table-full-name <table_full_name>
1555
1559
  ```
1556
1560
 
1557
1561
  #### dbt
@@ -1610,20 +1614,20 @@ datacontract import --format spark --source "users,orders"
1610
1614
 
1611
1615
  ```bash
1612
1616
  # Example: Import Spark table
1613
- DataContract().import_from_source("spark", "users")
1614
- DataContract().import_from_source(format = "spark", source = "users")
1617
+ DataContract.import_from_source("spark", "users")
1618
+ DataContract.import_from_source(format = "spark", source = "users")
1615
1619
 
1616
1620
  # Example: Import Spark dataframe
1617
- DataContract().import_from_source("spark", "users", dataframe = df_user)
1618
- DataContract().import_from_source(format = "spark", source = "users", dataframe = df_user)
1621
+ DataContract.import_from_source("spark", "users", dataframe = df_user)
1622
+ DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user)
1619
1623
 
1620
1624
  # Example: Import Spark table + table description
1621
- DataContract().import_from_source("spark", "users", description = "description")
1622
- DataContract().import_from_source(format = "spark", source = "users", description = "description")
1625
+ DataContract.import_from_source("spark", "users", description = "description")
1626
+ DataContract.import_from_source(format = "spark", source = "users", description = "description")
1623
1627
 
1624
1628
  # Example: Import Spark dataframe + table description
1625
- DataContract().import_from_source("spark", "users", dataframe = df_user, description = "description")
1626
- DataContract().import_from_source(format = "spark", source = "users", dataframe = df_user, description = "description")
1629
+ DataContract.import_from_source("spark", "users", dataframe = df_user, description = "description")
1630
+ DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user, description = "description")
1627
1631
  ```
1628
1632
 
1629
1633
  #### DBML
@@ -1868,8 +1872,7 @@ Create a data contract based on the actual data. This is the fastest way to get
1868
1872
  $ datacontract test
1869
1873
  ```
1870
1874
 
1871
- 3. Make sure that all the best practices for a `datacontract.yaml` are met using the linter. You
1872
- probably forgot to document some fields and add the terms and conditions.
1875
+ 3. Validate that the `datacontract.yaml` is correctly formatted and adheres to the Data Contract Specification.
1873
1876
  ```bash
1874
1877
  $ datacontract lint
1875
1878
  ```
@@ -1890,8 +1893,7 @@ Create a data contract based on the requirements from use cases.
1890
1893
  ```
1891
1894
 
1892
1895
  2. Create the model and quality guarantees based on your business requirements. Fill in the terms,
1893
- descriptions, etc. Make sure you follow all best practices for a `datacontract.yaml` using the
1894
- linter.
1896
+ descriptions, etc. Validate that your `datacontract.yaml` is correctly formatted.
1895
1897
  ```bash
1896
1898
  $ datacontract lint
1897
1899
  ```
@@ -2085,7 +2087,7 @@ if __name__ == "__main__":
2085
2087
  Output
2086
2088
 
2087
2089
  ```yaml
2088
- dataContractSpecification: 1.2.0
2090
+ dataContractSpecification: 1.2.1
2089
2091
  id: uuid-custom
2090
2092
  info:
2091
2093
  title: my_custom_imported_data
@@ -2111,6 +2113,7 @@ models:
2111
2113
  ```bash
2112
2114
  # make sure uv is installed
2113
2115
  uv python pin 3.11
2116
+ uv venv
2114
2117
  uv pip install -e '.[dev]'
2115
2118
  uv run ruff check
2116
2119
  uv run pytest
@@ -23,9 +23,9 @@ We have a _servers_ section with endpoint details to the S3 bucket, _models_ for
23
23
 
24
24
  This data contract contains all information to connect to S3 and check that the actual data meets the defined schema and quality requirements. We can use this information to test if the actual data product in S3 is compliant to the data contract.
25
25
 
26
- Let's use [pip](https://pip.pypa.io/en/stable/getting-started/) to install the CLI (or use the [Docker image](#docker)),
26
+ Let's use [uv](https://docs.astral.sh/uv/) to install the CLI (or use the [Docker image](#docker)),
27
27
  ```bash
28
- $ python3 -m pip install 'datacontract-cli[all]'
28
+ $ uv tool install --python python3.11 'datacontract-cli[all]'
29
29
  ```
30
30
 
31
31
 
@@ -1444,18 +1444,22 @@ datacontract import --format bigquery --bigquery-project <project_id> --bigquery
1444
1444
  ```
1445
1445
 
1446
1446
  #### Unity Catalog
1447
-
1448
1447
  ```bash
1449
1448
  # Example import from a Unity Catalog JSON file
1450
1449
  datacontract import --format unity --source my_unity_table.json
1451
1450
  ```
1452
1451
 
1453
1452
  ```bash
1454
- # Example import single table from Unity Catalog via HTTP endpoint
1453
+ # Example import single table from Unity Catalog via HTTP endpoint using PAT
1455
1454
  export DATACONTRACT_DATABRICKS_SERVER_HOSTNAME="https://xyz.cloud.databricks.com"
1456
- export DATACONTRACT_DATABRICKS_HTTP_PATH="/sql/1.0/warehouses/b053a331fa014fb4"
1457
1455
  export DATACONTRACT_DATABRICKS_TOKEN=<token>
1458
1456
  datacontract import --format unity --unity-table-full-name <table_full_name>
1457
+ ```
1458
+ Please Refer to [Databricks documentation](https://docs.databricks.com/aws/en/dev-tools/auth/unified-auth) on how to set up a profile
1459
+ ```bash
1460
+ # Example import single table from Unity Catalog via HTTP endpoint using Profile
1461
+ export DATACONTRACT_DATABRICKS_PROFILE="my-profile"
1462
+ datacontract import --format unity --unity-table-full-name <table_full_name>
1459
1463
  ```
1460
1464
 
1461
1465
  #### dbt
@@ -1514,20 +1518,20 @@ datacontract import --format spark --source "users,orders"
1514
1518
 
1515
1519
  ```bash
1516
1520
  # Example: Import Spark table
1517
- DataContract().import_from_source("spark", "users")
1518
- DataContract().import_from_source(format = "spark", source = "users")
1521
+ DataContract.import_from_source("spark", "users")
1522
+ DataContract.import_from_source(format = "spark", source = "users")
1519
1523
 
1520
1524
  # Example: Import Spark dataframe
1521
- DataContract().import_from_source("spark", "users", dataframe = df_user)
1522
- DataContract().import_from_source(format = "spark", source = "users", dataframe = df_user)
1525
+ DataContract.import_from_source("spark", "users", dataframe = df_user)
1526
+ DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user)
1523
1527
 
1524
1528
  # Example: Import Spark table + table description
1525
- DataContract().import_from_source("spark", "users", description = "description")
1526
- DataContract().import_from_source(format = "spark", source = "users", description = "description")
1529
+ DataContract.import_from_source("spark", "users", description = "description")
1530
+ DataContract.import_from_source(format = "spark", source = "users", description = "description")
1527
1531
 
1528
1532
  # Example: Import Spark dataframe + table description
1529
- DataContract().import_from_source("spark", "users", dataframe = df_user, description = "description")
1530
- DataContract().import_from_source(format = "spark", source = "users", dataframe = df_user, description = "description")
1533
+ DataContract.import_from_source("spark", "users", dataframe = df_user, description = "description")
1534
+ DataContract.import_from_source(format = "spark", source = "users", dataframe = df_user, description = "description")
1531
1535
  ```
1532
1536
 
1533
1537
  #### DBML
@@ -1772,8 +1776,7 @@ Create a data contract based on the actual data. This is the fastest way to get
1772
1776
  $ datacontract test
1773
1777
  ```
1774
1778
 
1775
- 3. Make sure that all the best practices for a `datacontract.yaml` are met using the linter. You
1776
- probably forgot to document some fields and add the terms and conditions.
1779
+ 3. Validate that the `datacontract.yaml` is correctly formatted and adheres to the Data Contract Specification.
1777
1780
  ```bash
1778
1781
  $ datacontract lint
1779
1782
  ```
@@ -1794,8 +1797,7 @@ Create a data contract based on the requirements from use cases.
1794
1797
  ```
1795
1798
 
1796
1799
  2. Create the model and quality guarantees based on your business requirements. Fill in the terms,
1797
- descriptions, etc. Make sure you follow all best practices for a `datacontract.yaml` using the
1798
- linter.
1800
+ descriptions, etc. Validate that your `datacontract.yaml` is correctly formatted.
1799
1801
  ```bash
1800
1802
  $ datacontract lint
1801
1803
  ```
@@ -1989,7 +1991,7 @@ if __name__ == "__main__":
1989
1991
  Output
1990
1992
 
1991
1993
  ```yaml
1992
- dataContractSpecification: 1.2.0
1994
+ dataContractSpecification: 1.2.1
1993
1995
  id: uuid-custom
1994
1996
  info:
1995
1997
  title: my_custom_imported_data
@@ -2015,6 +2017,7 @@ models:
2015
2017
  ```bash
2016
2018
  # make sure uv is installed
2017
2019
  uv python pin 3.11
2020
+ uv venv
2018
2021
  uv pip install -e '.[dev]'
2019
2022
  uv run ruff check
2020
2023
  uv run pytest
@@ -10,7 +10,7 @@ from fastapi.security.api_key import APIKeyHeader
10
10
  from datacontract.data_contract import DataContract, ExportFormat
11
11
  from datacontract.model.run import Run
12
12
 
13
- DATA_CONTRACT_EXAMPLE_PAYLOAD = """dataContractSpecification: 1.2.0
13
+ DATA_CONTRACT_EXAMPLE_PAYLOAD = """dataContractSpecification: 1.2.1
14
14
  id: urn:datacontract:checkout:orders-latest
15
15
  info:
16
16
  title: Orders Latest
@@ -331,7 +331,7 @@ def import_(
331
331
  """
332
332
  Create a data contract from the given source location. Saves to file specified by `output` option if present, otherwise prints to stdout.
333
333
  """
334
- result = DataContract().import_from_source(
334
+ result = DataContract.import_from_source(
335
335
  format=format,
336
336
  source=source,
337
337
  spec=spec,
@@ -26,11 +26,6 @@ from datacontract.imports.importer_factory import importer_factory
26
26
  from datacontract.init.init_template import get_init_template
27
27
  from datacontract.integration.datamesh_manager import publish_test_results_to_datamesh_manager
28
28
  from datacontract.lint import resolve
29
- from datacontract.lint.linters.description_linter import DescriptionLinter
30
- from datacontract.lint.linters.field_pattern_linter import FieldPatternLinter
31
- from datacontract.lint.linters.field_reference_linter import FieldReferenceLinter
32
- from datacontract.lint.linters.notice_period_linter import NoticePeriodLinter
33
- from datacontract.lint.linters.valid_constraints_linter import ValidFieldConstraintsLinter
34
29
  from datacontract.model.data_contract_specification import DataContractSpecification, Info
35
30
  from datacontract.model.exceptions import DataContractException
36
31
  from datacontract.model.run import Check, ResultEnum, Run
@@ -64,24 +59,14 @@ class DataContract:
64
59
  self._inline_definitions = inline_definitions
65
60
  self._inline_quality = inline_quality
66
61
  self._ssl_verification = ssl_verification
67
- self.all_linters = {
68
- FieldPatternLinter(),
69
- FieldReferenceLinter(),
70
- NoticePeriodLinter(),
71
- ValidFieldConstraintsLinter(),
72
- DescriptionLinter(),
73
- }
74
62
 
75
63
  @classmethod
76
64
  def init(cls, template: typing.Optional[str], schema: typing.Optional[str] = None) -> DataContractSpecification:
77
65
  template_str = get_init_template(template)
78
66
  return resolve.resolve_data_contract(data_contract_str=template_str, schema_location=schema)
79
67
 
80
- def lint(self, enabled_linters: typing.Union[str, set[str]] = "all") -> Run:
81
- """Lint the data contract by deserializing the contract and checking the schema, as well as calling the configured linters.
82
-
83
- enabled_linters can be either "all" or "none", or a set of linter IDs. The "schema" linter is always enabled, even with enabled_linters="none".
84
- """
68
+ def lint(self) -> Run:
69
+ """Lint the data contract by validating it against the JSON schema."""
85
70
  run = Run.create_run()
86
71
  try:
87
72
  run.log_info("Linting data contract")
@@ -101,27 +86,6 @@ class DataContract:
101
86
  engine="datacontract",
102
87
  )
103
88
  )
104
- if enabled_linters == "none":
105
- linters_to_check = set()
106
- elif enabled_linters == "all":
107
- linters_to_check = self.all_linters
108
- elif isinstance(enabled_linters, set):
109
- linters_to_check = {linter for linter in self.all_linters if linter.id in enabled_linters}
110
- else:
111
- raise RuntimeError(f"Unknown argument enabled_linters={enabled_linters} for lint()")
112
- for linter in linters_to_check:
113
- try:
114
- run.checks.extend(linter.lint(data_contract))
115
- except Exception as e:
116
- run.checks.append(
117
- Check(
118
- type="general",
119
- result=ResultEnum.error,
120
- name=f"Linter '{linter.name}'",
121
- reason=str(e),
122
- engine="datacontract",
123
- )
124
- )
125
89
  run.dataContractId = data_contract.id
126
90
  run.dataContractVersion = data_contract.info.version
127
91
  except DataContractException as e:
@@ -292,10 +256,9 @@ class DataContract:
292
256
  export_args=kwargs,
293
257
  )
294
258
 
295
- # REFACTOR THIS
296
- # could be a class method, not using anything from the instance
259
+ @classmethod
297
260
  def import_from_source(
298
- self,
261
+ cls,
299
262
  format: str,
300
263
  source: typing.Optional[str] = None,
301
264
  template: typing.Optional[str] = None,
@@ -307,7 +270,7 @@ class DataContract:
307
270
  owner = kwargs.get("owner")
308
271
 
309
272
  if spec == Spec.odcs or format == ImportFormat.excel:
310
- data_contract_specification_initial = DataContract.init(template=template, schema=schema)
273
+ data_contract_specification_initial = cls.init(template=template, schema=schema)
311
274
 
312
275
  odcs_imported = importer_factory.create(format).import_source(
313
276
  data_contract_specification=data_contract_specification_initial, source=source, import_args=kwargs
@@ -317,12 +280,12 @@ class DataContract:
317
280
  # convert automatically
318
281
  odcs_imported = to_odcs_v3(odcs_imported)
319
282
 
320
- self._overwrite_id_in_odcs(odcs_imported, id)
321
- self._overwrite_owner_in_odcs(odcs_imported, owner)
283
+ cls._overwrite_id_in_odcs(odcs_imported, id)
284
+ cls._overwrite_owner_in_odcs(odcs_imported, owner)
322
285
 
323
286
  return odcs_imported
324
287
  elif spec == Spec.datacontract_specification:
325
- data_contract_specification_initial = DataContract.init(template=template, schema=schema)
288
+ data_contract_specification_initial = cls.init(template=template, schema=schema)
326
289
 
327
290
  data_contract_specification_imported = importer_factory.create(format).import_source(
328
291
  data_contract_specification=data_contract_specification_initial, source=source, import_args=kwargs
@@ -334,8 +297,8 @@ class DataContract:
334
297
  data_contract_specification_initial, data_contract_specification_imported
335
298
  )
336
299
 
337
- self._overwrite_id_in_data_contract_specification(data_contract_specification_imported, id)
338
- self._overwrite_owner_in_data_contract_specification(data_contract_specification_imported, owner)
300
+ cls._overwrite_id_in_data_contract_specification(data_contract_specification_imported, id)
301
+ cls._overwrite_owner_in_data_contract_specification(data_contract_specification_imported, owner)
339
302
 
340
303
  return data_contract_specification_imported
341
304
  else:
@@ -347,16 +310,18 @@ class DataContract:
347
310
  engine="datacontract",
348
311
  )
349
312
 
313
+ @staticmethod
350
314
  def _overwrite_id_in_data_contract_specification(
351
- self, data_contract_specification: DataContractSpecification, id: str | None
315
+ data_contract_specification: DataContractSpecification, id: str | None
352
316
  ):
353
317
  if not id:
354
318
  return
355
319
 
356
320
  data_contract_specification.id = id
357
321
 
322
+ @staticmethod
358
323
  def _overwrite_owner_in_data_contract_specification(
359
- self, data_contract_specification: DataContractSpecification, owner: str | None
324
+ data_contract_specification: DataContractSpecification, owner: str | None
360
325
  ):
361
326
  if not owner:
362
327
  return
@@ -365,7 +330,8 @@ class DataContract:
365
330
  data_contract_specification.info = Info()
366
331
  data_contract_specification.info.owner = owner
367
332
 
368
- def _overwrite_owner_in_odcs(self, odcs: OpenDataContractStandard, owner: str | None):
333
+ @staticmethod
334
+ def _overwrite_owner_in_odcs(odcs: OpenDataContractStandard, owner: str | None):
369
335
  if not owner:
370
336
  return
371
337
 
@@ -377,7 +343,8 @@ class DataContract:
377
343
  return
378
344
  odcs.customProperties.append(CustomProperty(property="owner", value=owner))
379
345
 
380
- def _overwrite_id_in_odcs(self, odcs: OpenDataContractStandard, id: str | None):
346
+ @staticmethod
347
+ def _overwrite_id_in_odcs(odcs: OpenDataContractStandard, id: str | None):
381
348
  if not id:
382
349
  return
383
350