deltacat 2.0.0b2__tar.gz → 2.0.0b6__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.
Files changed (359) hide show
  1. {deltacat-2.0.0b2/deltacat.egg-info → deltacat-2.0.0b6}/PKG-INFO +1 -1
  2. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/__init__.py +2 -3
  3. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/catalog/iceberg/impl.py +15 -2
  4. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/catalog/iceberg/overrides.py +12 -14
  5. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/catalog/main/impl.py +1 -1
  6. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/examples/iceberg/iceberg_bucket_writer.py +64 -17
  7. deltacat-2.0.0b6/deltacat/experimental/daft/__init__.py +4 -0
  8. deltacat-2.0.0b6/deltacat/experimental/daft/daft_catalog.py +229 -0
  9. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/manifest.py +49 -0
  10. deltacat-2.0.0b6/deltacat/tests/storage/model/test_manifest.py +129 -0
  11. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/daft.py +2 -5
  12. deltacat-2.0.0b6/deltacat/utils/ray_utils/__init__.py +0 -0
  13. {deltacat-2.0.0b2 → deltacat-2.0.0b6/deltacat.egg-info}/PKG-INFO +1 -1
  14. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat.egg-info/SOURCES.txt +4 -0
  15. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat.egg-info/requires.txt +2 -2
  16. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/setup.py +3 -2
  17. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/LICENSE +0 -0
  18. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/MANIFEST.in +0 -0
  19. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/README.md +0 -0
  20. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/annotations.py +0 -0
  21. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/api.py +0 -0
  22. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/aws/__init__.py +0 -0
  23. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/aws/clients.py +0 -0
  24. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/aws/constants.py +0 -0
  25. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/aws/s3u.py +0 -0
  26. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/benchmarking/__init__.py +0 -0
  27. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/benchmarking/benchmark_engine.py +0 -0
  28. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/benchmarking/benchmark_parquet_reads.py +0 -0
  29. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/benchmarking/benchmark_report.py +0 -0
  30. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/benchmarking/benchmark_suite.py +0 -0
  31. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/benchmarking/conftest.py +0 -0
  32. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/benchmarking/data/__init__.py +0 -0
  33. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/benchmarking/data/random_row_generator.py +0 -0
  34. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/benchmarking/data/row_generator.py +0 -0
  35. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/benchmarking/test_benchmark_pipeline.py +0 -0
  36. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/catalog/__init__.py +0 -0
  37. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/catalog/delegate.py +0 -0
  38. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/catalog/iceberg/__init__.py +0 -0
  39. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/catalog/iceberg/iceberg_catalog_config.py +0 -0
  40. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/catalog/interface.py +0 -0
  41. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/catalog/main/__init__.py +0 -0
  42. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/catalog/model/__init__.py +0 -0
  43. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/catalog/model/catalog.py +0 -0
  44. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/catalog/model/properties.py +0 -0
  45. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/catalog/model/table_definition.py +0 -0
  46. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/__init__.py +0 -0
  47. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/__init__.py +0 -0
  48. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/compaction_session.py +0 -0
  49. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/model/__init__.py +0 -0
  50. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/model/compact_partition_params.py +0 -0
  51. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/model/compaction_session_audit_info.py +0 -0
  52. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/model/compactor_version.py +0 -0
  53. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/model/dedupe_result.py +0 -0
  54. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/model/delta_annotated.py +0 -0
  55. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/model/delta_file_envelope.py +0 -0
  56. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/model/delta_file_locator.py +0 -0
  57. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/model/hash_bucket_result.py +0 -0
  58. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/model/materialize_result.py +0 -0
  59. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/model/primary_key_index.py +0 -0
  60. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/model/pyarrow_write_result.py +0 -0
  61. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/model/repartition_result.py +0 -0
  62. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/model/round_completion_info.py +0 -0
  63. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/model/table_object_store.py +0 -0
  64. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/repartition_session.py +0 -0
  65. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/steps/__init__.py +0 -0
  66. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/steps/dedupe.py +0 -0
  67. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/steps/hash_bucket.py +0 -0
  68. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/steps/materialize.py +0 -0
  69. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/steps/repartition.py +0 -0
  70. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/utils/__init__.py +0 -0
  71. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/utils/io.py +0 -0
  72. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/utils/primary_key_index.py +0 -0
  73. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/utils/round_completion_file.py +0 -0
  74. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/utils/sort_key.py +0 -0
  75. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor/utils/system_columns.py +0 -0
  76. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/__init__.py +0 -0
  77. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/compaction_session.py +0 -0
  78. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/constants.py +0 -0
  79. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/deletes/__init__.py +0 -0
  80. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/deletes/delete_file_envelope.py +0 -0
  81. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/deletes/delete_strategy.py +0 -0
  82. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/deletes/delete_strategy_equality_delete.py +0 -0
  83. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/deletes/model.py +0 -0
  84. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/deletes/utils.py +0 -0
  85. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/model/__init__.py +0 -0
  86. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/model/evaluate_compaction_result.py +0 -0
  87. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/model/hash_bucket_input.py +0 -0
  88. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/model/hash_bucket_result.py +0 -0
  89. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/model/merge_file_group.py +0 -0
  90. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/model/merge_input.py +0 -0
  91. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/model/merge_result.py +0 -0
  92. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/private/__init__.py +0 -0
  93. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/private/compaction_utils.py +0 -0
  94. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/steps/__init__.py +0 -0
  95. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/steps/hash_bucket.py +0 -0
  96. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/steps/merge.py +0 -0
  97. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/utils/__init__.py +0 -0
  98. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/utils/content_type_params.py +0 -0
  99. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/utils/dedupe.py +0 -0
  100. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/utils/delta.py +0 -0
  101. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/utils/io.py +0 -0
  102. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/utils/merge.py +0 -0
  103. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/utils/primary_key_index.py +0 -0
  104. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/compactor_v2/utils/task_options.py +0 -0
  105. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/__init__.py +0 -0
  106. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/constants.py +0 -0
  107. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/converter_session.py +0 -0
  108. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/model/__init__.py +0 -0
  109. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/model/convert_input.py +0 -0
  110. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/model/convert_input_files.py +0 -0
  111. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/model/converter_session_params.py +0 -0
  112. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/pyiceberg/__init__.py +0 -0
  113. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/pyiceberg/catalog.py +0 -0
  114. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/pyiceberg/overrides.py +0 -0
  115. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/pyiceberg/update_snapshot_overrides.py +0 -0
  116. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/steps/__init__.py +0 -0
  117. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/steps/convert.py +0 -0
  118. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/steps/dedupe.py +0 -0
  119. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/utils/__init__.py +0 -0
  120. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/utils/convert_task_options.py +0 -0
  121. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/utils/converter_session_utils.py +0 -0
  122. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/utils/iceberg_columns.py +0 -0
  123. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/utils/io.py +0 -0
  124. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/converter/utils/s3u.py +0 -0
  125. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/merge_on_read/__init__.py +0 -0
  126. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/merge_on_read/daft.py +0 -0
  127. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/merge_on_read/model/__init__.py +0 -0
  128. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/merge_on_read/model/merge_on_read_params.py +0 -0
  129. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/merge_on_read/utils/__init__.py +0 -0
  130. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/merge_on_read/utils/delta.py +0 -0
  131. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/resource_estimation/__init__.py +0 -0
  132. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/resource_estimation/delta.py +0 -0
  133. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/resource_estimation/manifest.py +0 -0
  134. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/resource_estimation/model.py +0 -0
  135. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/resource_estimation/parquet.py +0 -0
  136. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/stats/__init__.py +0 -0
  137. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/stats/models/__init__.py +0 -0
  138. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/stats/models/delta_column_stats.py +0 -0
  139. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/stats/models/delta_stats.py +0 -0
  140. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/stats/models/delta_stats_cache_result.py +0 -0
  141. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/stats/models/manifest_entry_stats.py +0 -0
  142. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/stats/models/stats_result.py +0 -0
  143. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/compute/stats/types.py +0 -0
  144. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/constants.py +0 -0
  145. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/env.py +0 -0
  146. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/examples/__init__.py +0 -0
  147. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/examples/basic_logging.py +0 -0
  148. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/examples/common/__init__.py +0 -0
  149. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/examples/common/fixtures.py +0 -0
  150. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/examples/hello_world.py +0 -0
  151. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/examples/iceberg/__init__.py +0 -0
  152. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/examples/iceberg/iceberg_reader.py +0 -0
  153. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/exceptions.py +0 -0
  154. {deltacat-2.0.0b2/deltacat/io → deltacat-2.0.0b6/deltacat/experimental}/__init__.py +0 -0
  155. {deltacat-2.0.0b2/deltacat/storage/iceberg → deltacat-2.0.0b6/deltacat/io}/__init__.py +0 -0
  156. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/io/file_object_store.py +0 -0
  157. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/io/memcached_object_store.py +0 -0
  158. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/io/object_store.py +0 -0
  159. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/io/ray_plasma_object_store.py +0 -0
  160. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/io/redis_object_store.py +0 -0
  161. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/io/s3_object_store.py +0 -0
  162. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/logs.py +0 -0
  163. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/__init__.py +0 -0
  164. {deltacat-2.0.0b2/deltacat/storage/main → deltacat-2.0.0b6/deltacat/storage/iceberg}/__init__.py +0 -0
  165. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/iceberg/iceberg_scan_planner.py +0 -0
  166. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/iceberg/impl.py +0 -0
  167. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/iceberg/model.py +0 -0
  168. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/interface.py +0 -0
  169. {deltacat-2.0.0b2/deltacat/storage/model → deltacat-2.0.0b6/deltacat/storage/main}/__init__.py +0 -0
  170. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/main/impl.py +0 -0
  171. {deltacat-2.0.0b2/deltacat/storage/model/scan → deltacat-2.0.0b6/deltacat/storage/model}/__init__.py +0 -0
  172. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/delta.py +0 -0
  173. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/interop.py +0 -0
  174. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/list_result.py +0 -0
  175. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/locator.py +0 -0
  176. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/metafile.py +0 -0
  177. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/namespace.py +0 -0
  178. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/partition.py +0 -0
  179. {deltacat-2.0.0b2/deltacat/storage/rivulet/arrow → deltacat-2.0.0b6/deltacat/storage/model/scan}/__init__.py +0 -0
  180. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/scan/push_down.py +0 -0
  181. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/scan/scan_plan.py +0 -0
  182. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/scan/scan_task.py +0 -0
  183. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/schema.py +0 -0
  184. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/shard.py +0 -0
  185. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/sort_key.py +0 -0
  186. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/stream.py +0 -0
  187. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/table.py +0 -0
  188. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/table_version.py +0 -0
  189. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/transaction.py +0 -0
  190. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/transform.py +0 -0
  191. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/model/types.py +0 -0
  192. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/__init__.py +0 -0
  193. {deltacat-2.0.0b2/deltacat/storage/rivulet/fs → deltacat-2.0.0b6/deltacat/storage/rivulet/arrow}/__init__.py +0 -0
  194. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/arrow/serializer.py +0 -0
  195. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/dataset.py +0 -0
  196. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/dataset_executor.py +0 -0
  197. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/feather/__init__.py +0 -0
  198. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/feather/file_reader.py +0 -0
  199. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/feather/serializer.py +0 -0
  200. {deltacat-2.0.0b2/deltacat/storage/rivulet/metastore → deltacat-2.0.0b6/deltacat/storage/rivulet/fs}/__init__.py +0 -0
  201. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/fs/file_provider.py +0 -0
  202. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/fs/file_store.py +0 -0
  203. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/fs/input_file.py +0 -0
  204. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/fs/output_file.py +0 -0
  205. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/logical_plan.py +0 -0
  206. {deltacat-2.0.0b2/deltacat/storage/rivulet/reader → deltacat-2.0.0b6/deltacat/storage/rivulet/metastore}/__init__.py +0 -0
  207. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/metastore/delta.py +0 -0
  208. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/metastore/json_sst.py +0 -0
  209. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/metastore/sst.py +0 -0
  210. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/metastore/sst_interval_tree.py +0 -0
  211. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/mvp/Table.py +0 -0
  212. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/mvp/__init__.py +0 -0
  213. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/parquet/__init__.py +0 -0
  214. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/parquet/data_reader.py +0 -0
  215. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/parquet/file_reader.py +0 -0
  216. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/parquet/serializer.py +0 -0
  217. {deltacat-2.0.0b2/deltacat/storage/rivulet/schema → deltacat-2.0.0b6/deltacat/storage/rivulet/reader}/__init__.py +0 -0
  218. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/reader/block_scanner.py +0 -0
  219. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/reader/data_reader.py +0 -0
  220. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/reader/data_scan.py +0 -0
  221. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/reader/dataset_metastore.py +0 -0
  222. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/reader/dataset_reader.py +0 -0
  223. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/reader/pyarrow_data_reader.py +0 -0
  224. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/reader/query_expression.py +0 -0
  225. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/reader/reader_type_registrar.py +0 -0
  226. {deltacat-2.0.0b2/deltacat/storage/rivulet/writer → deltacat-2.0.0b6/deltacat/storage/rivulet/schema}/__init__.py +0 -0
  227. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/schema/datatype.py +0 -0
  228. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/schema/schema.py +0 -0
  229. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/serializer.py +0 -0
  230. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/serializer_factory.py +0 -0
  231. {deltacat-2.0.0b2/deltacat/storage/util → deltacat-2.0.0b6/deltacat/storage/rivulet/writer}/__init__.py +0 -0
  232. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/writer/dataset_writer.py +0 -0
  233. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/rivulet/writer/memtable_dataset_writer.py +0 -0
  234. {deltacat-2.0.0b2/deltacat/tests → deltacat-2.0.0b6/deltacat/storage/util}/__init__.py +0 -0
  235. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/storage/util/scan_planner.py +0 -0
  236. {deltacat-2.0.0b2/deltacat/tests/aws → deltacat-2.0.0b6/deltacat/tests}/__init__.py +0 -0
  237. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/_io/__init__.py +0 -0
  238. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/_io/test_cloudpickle_bug_fix.py +0 -0
  239. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/_io/test_file_object_store.py +0 -0
  240. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/_io/test_memcached_object_store.py +0 -0
  241. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/_io/test_ray_plasma_object_store.py +0 -0
  242. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/_io/test_redis_object_store.py +0 -0
  243. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/_io/test_s3_object_store.py +0 -0
  244. {deltacat-2.0.0b2/deltacat/tests/catalog → deltacat-2.0.0b6/deltacat/tests/aws}/__init__.py +0 -0
  245. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/aws/test_clients.py +0 -0
  246. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/aws/test_s3u.py +0 -0
  247. {deltacat-2.0.0b2/deltacat/tests/compute → deltacat-2.0.0b6/deltacat/tests/catalog}/__init__.py +0 -0
  248. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/catalog/test_catalogs.py +0 -0
  249. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/catalog/test_default_catalog_impl.py +0 -0
  250. {deltacat-2.0.0b2/deltacat/tests/compute/compactor → deltacat-2.0.0b6/deltacat/tests/compute}/__init__.py +0 -0
  251. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/compact_partition_multiple_rounds_test_cases.py +0 -0
  252. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/compact_partition_rebase_test_cases.py +0 -0
  253. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/compact_partition_rebase_then_incremental_test_cases.py +0 -0
  254. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/compact_partition_test_cases.py +0 -0
  255. {deltacat-2.0.0b2/deltacat/tests/compute/compactor/steps → deltacat-2.0.0b6/deltacat/tests/compute/compactor}/__init__.py +0 -0
  256. {deltacat-2.0.0b2/deltacat/tests/compute/compactor/utils → deltacat-2.0.0b6/deltacat/tests/compute/compactor/steps}/__init__.py +0 -0
  257. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/compactor/steps/test_repartition.py +0 -0
  258. {deltacat-2.0.0b2/deltacat/tests/compute/compactor_v2 → deltacat-2.0.0b6/deltacat/tests/compute/compactor/utils}/__init__.py +0 -0
  259. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/compactor/utils/test_io.py +0 -0
  260. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/compactor/utils/test_round_completion_file.py +0 -0
  261. {deltacat-2.0.0b2/deltacat/tests/compute/compactor_v2/utils → deltacat-2.0.0b6/deltacat/tests/compute/compactor_v2}/__init__.py +0 -0
  262. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/compactor_v2/test_compaction_session.py +0 -0
  263. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/compactor_v2/test_hashlib.py +0 -0
  264. {deltacat-2.0.0b2/deltacat/tests/compute/converter → deltacat-2.0.0b6/deltacat/tests/compute/compactor_v2/utils}/__init__.py +0 -0
  265. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/compactor_v2/utils/test_task_options.py +0 -0
  266. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/conftest.py +0 -0
  267. {deltacat-2.0.0b2/deltacat/tests/compute/resource_estimation → deltacat-2.0.0b6/deltacat/tests/compute/converter}/__init__.py +0 -0
  268. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/converter/conftest.py +0 -0
  269. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/converter/test_convert_session.py +0 -0
  270. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/converter/utils.py +0 -0
  271. {deltacat-2.0.0b2/deltacat/tests/compute/resource_estimation/data → deltacat-2.0.0b6/deltacat/tests/compute/resource_estimation}/__init__.py +0 -0
  272. {deltacat-2.0.0b2/deltacat/tests/storage → deltacat-2.0.0b6/deltacat/tests/compute/resource_estimation/data}/__init__.py +0 -0
  273. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/resource_estimation/test_delta.py +0 -0
  274. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/resource_estimation/test_manifest.py +0 -0
  275. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/test_compact_partition_incremental.py +0 -0
  276. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/test_compact_partition_multiple_rounds.py +0 -0
  277. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/test_compact_partition_params.py +0 -0
  278. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/test_compact_partition_rebase.py +0 -0
  279. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/test_compact_partition_rebase_then_incremental.py +0 -0
  280. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/test_util_common.py +0 -0
  281. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/test_util_constant.py +0 -0
  282. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/compute/test_util_create_table_deltas_repo.py +0 -0
  283. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/local_deltacat_storage/__init__.py +0 -0
  284. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/local_deltacat_storage/exceptions.py +0 -0
  285. {deltacat-2.0.0b2/deltacat/tests/storage/main → deltacat-2.0.0b6/deltacat/tests/storage}/__init__.py +0 -0
  286. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/conftest.py +0 -0
  287. {deltacat-2.0.0b2/deltacat/tests/storage/model → deltacat-2.0.0b6/deltacat/tests/storage/main}/__init__.py +0 -0
  288. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/main/test_main_storage.py +0 -0
  289. {deltacat-2.0.0b2/deltacat/tests/storage/rivulet → deltacat-2.0.0b6/deltacat/tests/storage/model}/__init__.py +0 -0
  290. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/model/test_delete_parameters.py +0 -0
  291. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/model/test_metafile_io.py +0 -0
  292. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/model/test_schema.py +0 -0
  293. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/model/test_shard.py +0 -0
  294. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/model/test_table_version.py +0 -0
  295. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/model/test_transaction.py +0 -0
  296. {deltacat-2.0.0b2/deltacat/tests/storage/rivulet/fs → deltacat-2.0.0b6/deltacat/tests/storage/rivulet}/__init__.py +0 -0
  297. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/rivulet/conftest.py +0 -0
  298. {deltacat-2.0.0b2/deltacat/tests/storage/rivulet/schema → deltacat-2.0.0b6/deltacat/tests/storage/rivulet/fs}/__init__.py +0 -0
  299. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/rivulet/fs/test_file_location_provider.py +0 -0
  300. {deltacat-2.0.0b2/deltacat/tests/storage/rivulet/writer → deltacat-2.0.0b6/deltacat/tests/storage/rivulet/schema}/__init__.py +0 -0
  301. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/rivulet/schema/test_schema.py +0 -0
  302. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/rivulet/test_dataset.py +0 -0
  303. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/rivulet/test_manifest.py +0 -0
  304. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/rivulet/test_sst_interval_tree.py +0 -0
  305. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/rivulet/test_utils.py +0 -0
  306. {deltacat-2.0.0b2/deltacat/tests/test_utils → deltacat-2.0.0b6/deltacat/tests/storage/rivulet/writer}/__init__.py +0 -0
  307. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/rivulet/writer/test_dataset_write_then_read.py +0 -0
  308. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/rivulet/writer/test_dataset_writer.py +0 -0
  309. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/storage/rivulet/writer/test_memtable_dataset_writer.py +0 -0
  310. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/test_deltacat_api.py +0 -0
  311. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/test_exceptions.py +0 -0
  312. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/test_logs.py +0 -0
  313. {deltacat-2.0.0b2/deltacat/tests/utils → deltacat-2.0.0b6/deltacat/tests/test_utils}/__init__.py +0 -0
  314. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/test_utils/constants.py +0 -0
  315. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/test_utils/filesystem.py +0 -0
  316. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/test_utils/message_pack_utils.py +0 -0
  317. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/test_utils/pyarrow.py +0 -0
  318. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/test_utils/storage.py +0 -0
  319. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/test_utils/utils.py +0 -0
  320. {deltacat-2.0.0b2/deltacat/tests/utils/data → deltacat-2.0.0b6/deltacat/tests/utils}/__init__.py +0 -0
  321. {deltacat-2.0.0b2/deltacat/tests/utils/ray_utils → deltacat-2.0.0b6/deltacat/tests/utils/data}/__init__.py +0 -0
  322. {deltacat-2.0.0b2/deltacat/types → deltacat-2.0.0b6/deltacat/tests/utils/ray_utils}/__init__.py +0 -0
  323. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/utils/ray_utils/test_concurrency.py +0 -0
  324. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/utils/ray_utils/test_dataset.py +0 -0
  325. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/utils/test_cloudpickle.py +0 -0
  326. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/utils/test_daft.py +0 -0
  327. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/utils/test_metrics.py +0 -0
  328. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/utils/test_placement.py +0 -0
  329. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/utils/test_pyarrow.py +0 -0
  330. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/utils/test_record_batch_tables.py +0 -0
  331. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/tests/utils/test_resources.py +0 -0
  332. {deltacat-2.0.0b2/deltacat/utils → deltacat-2.0.0b6/deltacat/types}/__init__.py +0 -0
  333. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/types/media.py +0 -0
  334. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/types/partial_download.py +0 -0
  335. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/types/tables.py +0 -0
  336. {deltacat-2.0.0b2/deltacat/utils/ray_utils → deltacat-2.0.0b6/deltacat/utils}/__init__.py +0 -0
  337. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/arguments.py +0 -0
  338. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/cloudpickle.py +0 -0
  339. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/common.py +0 -0
  340. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/export.py +0 -0
  341. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/filesystem.py +0 -0
  342. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/metafile_locator.py +0 -0
  343. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/metrics.py +0 -0
  344. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/numpy.py +0 -0
  345. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/pandas.py +0 -0
  346. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/performance.py +0 -0
  347. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/placement.py +0 -0
  348. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/pyarrow.py +0 -0
  349. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/ray_utils/collections.py +0 -0
  350. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/ray_utils/concurrency.py +0 -0
  351. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/ray_utils/dataset.py +0 -0
  352. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/ray_utils/performance.py +0 -0
  353. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/ray_utils/runtime.py +0 -0
  354. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/resources.py +0 -0
  355. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/s3fs.py +0 -0
  356. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat/utils/schema.py +0 -0
  357. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat.egg-info/dependency_links.txt +0 -0
  358. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/deltacat.egg-info/top_level.txt +0 -0
  359. {deltacat-2.0.0b2 → deltacat-2.0.0b6}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deltacat
3
- Version: 2.0.0b2
3
+ Version: 2.0.0b6
4
4
  Summary: A portable, scalable, fast, and Pythonic Data Lakehouse for AI.
5
5
  Home-page: https://github.com/ray-project/deltacat
6
6
  Author: Ray Team
@@ -59,7 +59,7 @@ from deltacat.types.tables import TableWriteMode
59
59
 
60
60
  __iceberg__ = []
61
61
  if importlib.util.find_spec("pyiceberg") is not None:
62
- from deltacat.catalog.iceberg import impl as IcebergCatalog
62
+ from deltacat.catalog.iceberg import impl as IcebergCatalog # noqa: F401
63
63
 
64
64
  __iceberg__ = [
65
65
  "IcebergCatalog",
@@ -67,7 +67,7 @@ if importlib.util.find_spec("pyiceberg") is not None:
67
67
 
68
68
  deltacat.logs.configure_deltacat_logger(logging.getLogger(__name__))
69
69
 
70
- __version__ = "2.0.0b2"
70
+ __version__ = "2.0.0b6"
71
71
 
72
72
 
73
73
  __all__ = [
@@ -104,7 +104,6 @@ __all__ = [
104
104
  "Dataset",
105
105
  "Datatype",
106
106
  "Field",
107
- "IcebergCatalog",
108
107
  "LifecycleState",
109
108
  "ListResult",
110
109
  "LocalDataset",
@@ -2,10 +2,13 @@ import logging
2
2
 
3
3
  from typing import Any, Dict, List, Optional, Union
4
4
 
5
- from daft import DataFrame
5
+ from daft import DataFrame, context
6
+ from daft.daft import ScanOperatorHandle, StorageConfig
7
+ from daft.logical.builder import LogicalPlanBuilder
6
8
 
7
9
  from deltacat import logs
8
10
  from deltacat.catalog.model.table_definition import TableDefinition
11
+ from deltacat.daft.daft_scan import DeltaCatScanOperator
9
12
  from deltacat.exceptions import TableAlreadyExistsError
10
13
  from deltacat.storage.iceberg.iceberg_scan_planner import IcebergScanPlanner
11
14
  from deltacat.storage.iceberg.model import PartitionSchemeMapper, SchemaMapper
@@ -144,7 +147,17 @@ def read_table(
144
147
  table: str, *args, namespace: Optional[str] = None, **kwargs
145
148
  ) -> DistributedDataset:
146
149
  """Read a table into a distributed dataset."""
147
- raise NotImplementedError("read_table not implemented")
150
+ # TODO: more proper IO configuration
151
+ io_config = context.get_context().daft_planning_config.default_io_config
152
+ multithreaded_io = context.get_context().get_or_create_runner().name != "ray"
153
+
154
+ storage_config = StorageConfig(multithreaded_io, io_config)
155
+
156
+ dc_table = get_table(name=table, namespace=namespace, **kwargs)
157
+ dc_scan_operator = DeltaCatScanOperator(dc_table, storage_config)
158
+ handle = ScanOperatorHandle.from_python_scan_operator(dc_scan_operator)
159
+ builder = LogicalPlanBuilder.from_tabular_scan(scan_operator=handle)
160
+ return DataFrame(builder)
148
161
 
149
162
 
150
163
  def alter_table(
@@ -5,12 +5,11 @@ from typing import Iterator, List
5
5
  from pyarrow.fs import FileSystem
6
6
 
7
7
  from pyiceberg.io.pyarrow import (
8
- fill_parquet_file_metadata,
8
+ data_file_statistics_from_parquet_metadata,
9
9
  compute_statistics_plan,
10
10
  parquet_path_to_id_mapping,
11
11
  )
12
- from pyiceberg.table import Table, _MergingSnapshotProducer
13
- from pyiceberg.table.snapshots import Operation
12
+ from pyiceberg.table import Table
14
13
  from pyiceberg.manifest import DataFile, DataFileContent, FileFormat
15
14
  from pyiceberg.types import StructType, NestedField, IntegerType
16
15
  from pyiceberg.typedef import Record
@@ -24,11 +23,10 @@ def append(table: Table, paths: List[str]) -> None:
24
23
  # raise ValueError("Cannot write to tables with a sort-order")
25
24
 
26
25
  data_files = write_file(table, paths)
27
- merge = _MergingSnapshotProducer(operation=Operation.APPEND, table=table)
28
- for data_file in data_files:
29
- merge.append_data_file(data_file)
30
-
31
- merge.commit()
26
+ with table.transaction() as txn:
27
+ with txn.update_snapshot().fast_append() as snapshot_update:
28
+ for data_file in data_files:
29
+ snapshot_update.append_data_file(data_file)
32
30
 
33
31
 
34
32
  def write_file(table: Table, paths: Iterator[str]) -> Iterator[DataFile]:
@@ -41,6 +39,11 @@ def write_file(table: Table, paths: Iterator[str]) -> Iterator[DataFile]:
41
39
  fs_path = fs_tuple[1]
42
40
  with fs.open_input_file(fs_path) as native_file:
43
41
  parquet_metadata = pq.read_metadata(native_file)
42
+ statistics = data_file_statistics_from_parquet_metadata(
43
+ parquet_metadata=parquet_metadata,
44
+ stats_columns=compute_statistics_plan(table.schema(), table.properties),
45
+ parquet_column_mapping=parquet_path_to_id_mapping(table.schema()),
46
+ )
44
47
  data_file = DataFile(
45
48
  content=DataFileContent.DATA,
46
49
  file_path=file_path,
@@ -63,12 +66,7 @@ def write_file(table: Table, paths: Iterator[str]) -> Iterator[DataFile]:
63
66
  spec_id=table.spec().spec_id,
64
67
  equality_ids=None,
65
68
  key_metadata=None,
66
- )
67
- fill_parquet_file_metadata(
68
- data_file=data_file,
69
- parquet_metadata=parquet_metadata,
70
- stats_columns=compute_statistics_plan(table.schema(), table.properties),
71
- parquet_column_mapping=parquet_path_to_id_mapping(table.schema()),
69
+ **statistics.to_serialized_dict(),
72
70
  )
73
71
  data_files.append(data_file)
74
72
  return data_files
@@ -709,7 +709,7 @@ def _get_deltas_from_partition_filter(
709
709
 
710
710
  def _get_storage(**kwargs):
711
711
  """
712
- Returns the implementation of `deltacat.storage.interface` to use with this catalog.
712
+ Returns the implementation of `deltacat.storage.interface` to use with this catalog
713
713
 
714
714
  This is configured in the `CatalogProperties` stored during initialization and passed through `delegate.py`
715
715
  """
@@ -1,11 +1,15 @@
1
1
  import os
2
2
  import logging
3
3
 
4
+ import uuid
4
5
  import daft
6
+ from pyiceberg.catalog import CatalogType
7
+
5
8
  import deltacat as dc
6
9
 
7
10
  from deltacat import logs
8
11
  from deltacat import IcebergCatalog
12
+ from deltacat.catalog.iceberg import IcebergCatalogConfig
9
13
  from deltacat.examples.common.fixtures import (
10
14
  store_cli_args_in_os_environ,
11
15
  )
@@ -30,6 +34,24 @@ driver_logger = logs.configure_application_logger(logging.getLogger(__name__))
30
34
 
31
35
 
32
36
  def run(warehouse="s3://my-bucket/my/key/prefix", **kwargs):
37
+ """
38
+ This is an e2e example that
39
+ 1. creates a DeltaCAT Table (backed by an Iceberg Table) in Glue
40
+ 2. writes data into the DeltaCAT Table
41
+ 3. reads data from the DeltaCAT Table using Daft
42
+
43
+ To run the script:
44
+ 1. prepare an AWS Account
45
+ 1. prepare a S3 location where the data will be written to, which will be used in Step 3.
46
+ 2. prepare an IAM Role that has access to the S3 location and Glue
47
+ 2. retrieve the IAM Role AWS Credential and cache locally in ~/.aws/credentials
48
+ 3. run below command to execute the example
49
+ ```
50
+ make venv && source venv/bin/activate
51
+ python -m deltacat.examples.iceberg.iceberg_bucket_writer --warehouse=s3://<YOUR_S3_LOCATION>
52
+ ```
53
+
54
+ """
33
55
  # create any runtime environment required to run the example
34
56
  runtime_env = create_ray_runtime_environment()
35
57
 
@@ -38,6 +60,7 @@ def run(warehouse="s3://my-bucket/my/key/prefix", **kwargs):
38
60
  # Only the `iceberg` data catalog is provided so it will become the default.
39
61
  # If initializing multiple catalogs, use the `default_catalog_name` param
40
62
  # to specify which catalog should be the default.
63
+
41
64
  dc.init(
42
65
  catalogs={
43
66
  # the name of the DeltaCAT catalog is "iceberg"
@@ -49,11 +72,13 @@ def run(warehouse="s3://my-bucket/my/key/prefix", **kwargs):
49
72
  name="example-iceberg-catalog",
50
73
  # for additional properties see:
51
74
  # https://py.iceberg.apache.org/configuration/
52
- properties={
53
- "type": "glue",
54
- "region_name": "us-east-1",
55
- "warehouse": warehouse,
56
- },
75
+ config=IcebergCatalogConfig(
76
+ type=CatalogType.GLUE,
77
+ properties={
78
+ "warehouse": warehouse,
79
+ "region_name": "us-east-1",
80
+ },
81
+ ),
57
82
  )
58
83
  },
59
84
  # pass the runtime environment into ray.init()
@@ -89,10 +114,10 @@ def run(warehouse="s3://my-bucket/my/key/prefix", **kwargs):
89
114
  }
90
115
  )
91
116
 
92
- # write to a table named `test_namespace.test_table_bucketed`
117
+ # write to a table named `test_namespace.test_table_bucketed-<SUFFIX>`
93
118
  # we don't need to specify which catalog to create this table in since
94
119
  # only the "iceberg" catalog is available
95
- table_name = "test_table_bucketed"
120
+ table_name = f"test_table_bucketed-{uuid.uuid4().hex[:8]}"
96
121
  namespace = "test_namespace"
97
122
  print(f"Creating Glue Table: {namespace}.{table_name}")
98
123
  dc.write_to_table(
@@ -106,9 +131,40 @@ def run(warehouse="s3://my-bucket/my/key/prefix", **kwargs):
106
131
  )
107
132
 
108
133
  print(f"Getting Glue Table: {namespace}.{table_name}")
109
- table_definition = dc.get_table(table_name, namespace)
134
+ table_definition = dc.get_table(name=table_name, namespace=namespace)
110
135
  print(f"Retrieved Glue Table: {table_definition}")
111
136
 
137
+ # Read Data from DeltaCAT Table (backed by Iceberg) using Daft
138
+ daft_dataframe = dc.read_table(table=table_name, namespace=namespace)
139
+
140
+ daft_dataframe.where(df["bid"] > 200.0).show()
141
+ # Expected result:
142
+ # ╭────────┬─────────┬─────────╮
143
+ # │ symbol ┆ bid ┆ ask │
144
+ # │ --- ┆ --- ┆ --- │
145
+ # │ Utf8 ┆ Float64 ┆ Float64 │
146
+ # ╞════════╪═════════╪═════════╡
147
+ # │ meta ┆ 392.03 ┆ 392.09 │
148
+ # ├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌┤
149
+ # │ msft ┆ 403.25 ┆ 403.27 │
150
+ # ╰────────┴─────────┴─────────╯
151
+
152
+ daft_dataframe.select("symbol").show()
153
+ # Expected result:
154
+ # ╭────────╮
155
+ # │ symbol │
156
+ # │ --- │
157
+ # │ Utf8 │
158
+ # ╞════════╡
159
+ # │ meta │
160
+ # ├╌╌╌╌╌╌╌╌┤
161
+ # │ amzn │
162
+ # ├╌╌╌╌╌╌╌╌┤
163
+ # │ goog │
164
+ # ├╌╌╌╌╌╌╌╌┤
165
+ # │ msft │
166
+ # ╰────────╯
167
+
112
168
 
113
169
  if __name__ == "__main__":
114
170
  example_script_args = [
@@ -121,15 +177,6 @@ if __name__ == "__main__":
121
177
  "type": str,
122
178
  },
123
179
  ),
124
- (
125
- [
126
- "--STAGE",
127
- ],
128
- {
129
- "help": "Example runtime environment stage (e.g. dev, alpha, beta, prod).",
130
- "type": str,
131
- },
132
- ),
133
180
  ]
134
181
 
135
182
  # store any CLI args in the runtime environment
@@ -0,0 +1,4 @@
1
+ """Daft integration package for DeltaCAT.
2
+
3
+ This package provides integration between DeltaCAT and Daft.
4
+ """
@@ -0,0 +1,229 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Tuple, Optional
4
+
5
+ from deltacat.catalog.model.catalog import Catalog as DCCatalog
6
+ from deltacat.catalog.model.table_definition import TableDefinition
7
+
8
+ from daft.catalog import Catalog, Identifier, Table
9
+ from daft.dataframe import DataFrame
10
+ from daft.logical.schema import Schema
11
+ from deltacat.constants import DEFAULT_NAMESPACE
12
+
13
+
14
+ class DaftCatalog(Catalog):
15
+ """
16
+ Wrapper class to create a Daft catalog from a DeltaCAT catalog.
17
+
18
+ The initialization of DeltaCAT and Daft catalogs is managed in `deltacat.catalog.catalog.py`. The user
19
+ is just expected to initialize catalogs through the DeltaCAT public interface (init / put_catalog).
20
+
21
+ TODO (mccember) in follow up PR we need to consider how to keep the DeltaCAT Catalogs class and Daft session in sync,
22
+ and the user-facing entrypoint to get a Daft catalog
23
+
24
+ This class itself expects a `Catalog` and will invoke the underlying implementation
25
+ similar to `deltacat.catalog.delegate.py`, like:
26
+ catalog.impl.create_namespace(namespace, inner=catalog.inner)
27
+
28
+ We cannot route calls through the higher level catalog registry / delegate since this wrapper class is at a lower
29
+ layer and does not manage registering catalogs.
30
+ """
31
+
32
+ def __init__(self, catalog: DCCatalog, name: str):
33
+ """
34
+ Initialize given DeltaCAT catalog. This catalog is also registered with DeltaCAT (via deltacat.put_catalog) given the provided Name
35
+
36
+ :param catalog: DeltaCAT Catalog object. If None, the catalog will be fetched from `deltacat.Catalogs`
37
+ given the catalog name.
38
+
39
+ :param name: Name of DeltaCAT catalog. If the name is not yet registered with `deltacat.Catalogs`,
40
+ it will be registered upon creation to ensure that the DeltaCAT and Daft catalogs keep in sync.
41
+
42
+ :param kwargs: Additional keyword arguments passed to deltacat.get_catalog or deltacat.put_catalog,
43
+ such as 'namespace' for tests.
44
+ """
45
+ self.dc_catalog = catalog
46
+ self._name = name
47
+
48
+ @property
49
+ def name(self) -> str:
50
+ return self._name
51
+
52
+ ###
53
+ # create_*
54
+ ###
55
+ def create_namespace(self, identifier: Identifier | str):
56
+ """Create a new namespace in the catalog."""
57
+ if isinstance(identifier, Identifier):
58
+ identifier = str(identifier)
59
+ self.dc_catalog.impl.create_namespace(identifier, inner=self.dc_catalog.inner)
60
+
61
+ def create_table(
62
+ self, identifier: Identifier | str, source: Schema | DataFrame, **kwargs
63
+ ) -> Table:
64
+ """
65
+ Create a DeltaCAT table via Daft catalog API
66
+
67
+ End users calling create_table through the daft table API may provide kwargs which will be plumbed through
68
+ to deltacat create_table. For full list of keyword arguments accepted by create_table.
69
+
70
+ Note: as of 4/22, Daft create_table does not yet support kwargs. Tracked at: https://github.com/Eventual-Inc/Daft/issues/4195
71
+
72
+ :param identifier: Daft table identifier. Sequence of strings of the format (namespace) or (namespace, table)
73
+ or (namespace, table, table version). If this is a string, it is a dot delimited string of the same format.
74
+ Identifiers can be created either like Identifier("namespace", "table", "version") OR
75
+ Identifier.from_str("namespace.table.version")
76
+
77
+ :param source: a TableSource, either a Daft DataFrame, Daft Schema, or str (filesystem path)
78
+ """
79
+ if isinstance(source, DataFrame):
80
+ return self._create_table_from_df(identifier, source)
81
+ elif isinstance(source, Schema):
82
+ return self._create_table_from_schema(identifier, source)
83
+ else:
84
+ raise Exception(
85
+ f"Expected table source to be Schema or DataFrame. Found: {type(source)}"
86
+ )
87
+
88
+ def _create_table_from_df(
89
+ self, ident: Identifier | str, source: DataFrame, **kwargs
90
+ ) -> Table:
91
+ """
92
+ Create a table from a DataFrame.
93
+ """
94
+ t = self._create_table_from_schema(ident, source.schema(), **kwargs)
95
+ # TODO (mccember) append data upon creation
96
+ return t
97
+
98
+ def _create_table_from_schema(
99
+ self, ident: Identifier | str, source: Schema, **kwargs
100
+ ) -> Table:
101
+ """
102
+ Create a table from a schema.
103
+ """
104
+ namespace, name, version = self._extract_namespace_name_version(ident)
105
+
106
+ # Convert the Daft schema to a DeltaCAT schema
107
+ # This is a simplified version, would need to be enhanced for production
108
+ deltacat_schema = self._convert_schema_to_deltacat(source)
109
+
110
+ # Create the table in DeltaCAT
111
+ table_def = self.dc_catalog.impl.create_table(
112
+ name,
113
+ namespace=namespace,
114
+ version=version,
115
+ schema=deltacat_schema,
116
+ inner=self.dc_catalog.inner,
117
+ **kwargs,
118
+ )
119
+
120
+ return DaftTable._from_obj(table_def)
121
+
122
+ ###
123
+ # drop_*
124
+ ###
125
+
126
+ def drop_namespace(self, identifier: Identifier | str):
127
+ raise NotImplementedError()
128
+
129
+ def drop_table(self, identifier: Identifier | str):
130
+ raise NotImplementedError()
131
+
132
+ ###
133
+ # get_*
134
+ ###
135
+
136
+ def get_table(self, identifier: Identifier | str, **kwargs) -> Table:
137
+ namespace, table, version = self._extract_namespace_name_version(identifier)
138
+
139
+ table_def = self.dc_catalog.impl.get_table(
140
+ table,
141
+ namespace=namespace,
142
+ table_version=version,
143
+ inner=self.dc_catalog.inner,
144
+ **kwargs,
145
+ )
146
+
147
+ if not table_def:
148
+ raise ValueError(f"Table {identifier} not found")
149
+
150
+ return DaftTable._from_obj(table_def)
151
+
152
+ ###
153
+ # list_*
154
+ ###
155
+
156
+ def list_namespaces(self, pattern: str | None = None) -> list[Identifier]:
157
+ raise NotImplementedError("Not implemented")
158
+
159
+ def list_tables(self, pattern: str | None = None) -> list[str]:
160
+ raise NotImplementedError("Not implemented")
161
+
162
+ def _extract_namespace_name_version(
163
+ self, ident: Identifier | str
164
+ ) -> Tuple[str, str, Optional[str]]:
165
+ """
166
+ Extract namespace, name,version from identifier
167
+
168
+ Returns a 3-tuple. If no namespace is provided, uses DeltaCAT defualt namespace
169
+ """
170
+ default_namespace = DEFAULT_NAMESPACE
171
+
172
+ if isinstance(ident, str):
173
+ ident = Identifier.from_str(ident)
174
+
175
+ if isinstance(ident, Identifier):
176
+ if len(ident) == 1:
177
+ return (default_namespace, ident[0], None)
178
+ elif len(ident) == 2:
179
+ return (ident[0], ident[1], None)
180
+ elif len(ident) == 3:
181
+ return (ident[0], ident[1], ident[2])
182
+ else:
183
+ raise ValueError(
184
+ f"Expected table identifier to be in format (table) or (namespace, table)"
185
+ f"or (namespace, table, version). Found: {ident}"
186
+ )
187
+
188
+ def _convert_schema_to_deltacat(self, schema: Schema):
189
+ """Convert Daft schema to DeltaCAT schema.
190
+ For now, just use PyArrow schema as intermediary
191
+ TODO look into how enhancements on schema can be propagated between Daft<=>DeltaCAT
192
+ """
193
+ from deltacat.storage.model.schema import Schema as DeltaCATSchema
194
+
195
+ return DeltaCATSchema.of(schema=schema.to_pyarrow_schema())
196
+
197
+
198
+ class DaftTable(Table):
199
+ """
200
+ Wrapper class to create a Daft table from a DeltaCAT table
201
+ """
202
+
203
+ _inner: TableDefinition
204
+
205
+ _read_options = set()
206
+ _write_options = set()
207
+
208
+ def __init__(self, inner: TableDefinition):
209
+ self._inner = inner
210
+
211
+ @property
212
+ def name(self) -> str:
213
+ """Return the table name."""
214
+ return self._inner.table_version.table_name
215
+
216
+ @staticmethod
217
+ def _from_obj(obj: object) -> DaftTable:
218
+ """Returns a DeltaCATTable if the given object can be adapted so."""
219
+ if isinstance(obj, TableDefinition):
220
+ t = DaftTable.__new__(DaftTable)
221
+ t._inner = obj
222
+ return t
223
+ raise ValueError(f"Unsupported DeltaCAT table type: {type(obj)}")
224
+
225
+ def read(self, **options) -> DataFrame:
226
+ raise NotImplementedError("Not implemented")
227
+
228
+ def write(self, df: DataFrame | object, mode: str = "append", **options):
229
+ raise NotImplementedError("Not implemented")
@@ -11,6 +11,8 @@ from deltacat import logs
11
11
 
12
12
  from deltacat.storage.model.schema import FieldLocator
13
13
 
14
+ import json
15
+
14
16
  logger = logs.configure_deltacat_logger(logging.getLogger(__name__))
15
17
 
16
18
 
@@ -192,6 +194,20 @@ class Manifest(dict):
192
194
  manifest = Manifest._build_manifest(meta, entries, author, uuid)
193
195
  return manifest
194
196
 
197
+ @staticmethod
198
+ def from_json(json_string: str) -> Manifest:
199
+ parsed_dict = json.loads(json_string)
200
+ return Manifest.of(
201
+ entries=ManifestEntryList.of(
202
+ [
203
+ ManifestEntry.from_dict(entry)
204
+ for entry in parsed_dict.get("entries", [])
205
+ ]
206
+ ),
207
+ author=ManifestAuthor.from_dict(parsed_dict.get("author")),
208
+ uuid=parsed_dict.get("id"),
209
+ )
210
+
195
211
  @staticmethod
196
212
  def merge_manifests(
197
213
  manifests: List[Manifest], author: Optional[ManifestAuthor] = None
@@ -264,6 +280,23 @@ class ManifestMeta(dict):
264
280
  manifest_meta["entry_params"] = entry_params
265
281
  return manifest_meta
266
282
 
283
+ @staticmethod
284
+ def from_dict(obj: dict) -> Optional[ManifestMeta]:
285
+ if obj is None:
286
+ return None
287
+
288
+ return ManifestMeta.of(
289
+ record_count=obj.get("record_count"),
290
+ content_length=obj.get("content_length"),
291
+ content_type=obj.get("content_type"),
292
+ content_encoding=obj.get("content_encoding"),
293
+ source_content_length=obj.get("source_content_length"),
294
+ credentials=obj.get("credentials"),
295
+ content_type_parameters=obj.get("content_type_parameters"),
296
+ entry_type=obj.get("entry_type"),
297
+ entry_params=obj.get("entry_params"),
298
+ )
299
+
267
300
  @property
268
301
  def record_count(self) -> Optional[int]:
269
302
  return self.get("record_count")
@@ -358,6 +391,16 @@ class ManifestEntry(dict):
358
391
  manifest_entry = ManifestEntry.of(url, manifest_entry_meta)
359
392
  return manifest_entry
360
393
 
394
+ @staticmethod
395
+ def from_dict(obj: dict) -> ManifestEntry:
396
+ return ManifestEntry.of(
397
+ url=obj.get("url"),
398
+ uri=obj.get("uri"),
399
+ meta=ManifestMeta.from_dict(obj.get("meta")),
400
+ mandatory=obj.get("mandatory", True),
401
+ uuid=obj.get("id"),
402
+ )
403
+
361
404
  @property
362
405
  def uri(self) -> Optional[str]:
363
406
  return self.get("uri")
@@ -392,6 +435,12 @@ class ManifestAuthor(dict):
392
435
  manifest_author["version"] = version
393
436
  return manifest_author
394
437
 
438
+ @staticmethod
439
+ def from_dict(obj: dict) -> Optional[ManifestAuthor]:
440
+ if obj is None:
441
+ return None
442
+ return ManifestAuthor.of(obj.get("name"), obj.get("version"))
443
+
395
444
  @property
396
445
  def name(self) -> Optional[str]:
397
446
  return self.get("name")