floe-python 0.6.3__tar.gz → 0.6.5__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 (238) hide show
  1. {floe_python-0.6.3 → floe_python-0.6.5}/Cargo.lock +25 -143
  2. {floe_python-0.6.3 → floe_python-0.6.5}/PKG-INFO +1 -1
  3. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/Cargo.toml +5 -4
  4. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/config/parse.rs +4 -3
  5. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/config/types.rs +9 -5
  6. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/object_store.rs +21 -7
  7. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/delta/unity.rs +8 -7
  8. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/delta/unity_tests.rs +1 -1
  9. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/duckdb/conn.rs +10 -8
  10. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/iceberg/context.rs +48 -6
  11. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/iceberg/glue.rs +46 -3
  12. floe_python-0.6.5/crates/floe-core/src/io/write/iceberg/metadata.rs +202 -0
  13. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/iceberg/rest.rs +13 -2
  14. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/iceberg.rs +38 -3
  15. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/lib.rs +2 -0
  16. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/manifest/builder.rs +1 -1
  17. floe_python-0.6.5/crates/floe-core/src/secret.rs +129 -0
  18. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/catalogs.rs +2 -2
  19. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/config_validation.rs +2 -10
  20. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/parse.rs +1 -1
  21. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/write/object_store.rs +23 -3
  22. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/Cargo.toml +2 -2
  23. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/pyproject.duckdb.toml +2 -2
  24. {floe_python-0.6.3 → floe_python-0.6.5}/pyproject.toml +1 -1
  25. floe_python-0.6.3/crates/floe-core/src/io/write/iceberg/metadata.rs +0 -105
  26. {floe_python-0.6.3 → floe_python-0.6.5}/Cargo.toml +0 -0
  27. {floe_python-0.6.3 → floe_python-0.6.5}/README.md +0 -0
  28. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/README.md +0 -0
  29. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/add_entity.rs +0 -0
  30. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/checks/cast.rs +0 -0
  31. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/checks/mismatch.rs +0 -0
  32. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/checks/mod.rs +0 -0
  33. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/checks/normalize.rs +0 -0
  34. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/checks/not_null.rs +0 -0
  35. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/checks/unique.rs +0 -0
  36. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/config/catalog.rs +0 -0
  37. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/config/location.rs +0 -0
  38. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/config/mod.rs +0 -0
  39. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/config/storage.rs +0 -0
  40. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/config/template.rs +0 -0
  41. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/config/validate.rs +0 -0
  42. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/config/yaml_decode.rs +0 -0
  43. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/errors.rs +0 -0
  44. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/format.rs +0 -0
  45. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/mod.rs +0 -0
  46. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/read/avro.rs +0 -0
  47. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/read/csv.rs +0 -0
  48. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/read/fixed_width.rs +0 -0
  49. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/read/json.rs +0 -0
  50. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/read/json_selector.rs +0 -0
  51. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/read/mod.rs +0 -0
  52. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/read/orc.rs +0 -0
  53. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/read/parquet.rs +0 -0
  54. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/read/xlsx.rs +0 -0
  55. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/read/xml.rs +0 -0
  56. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/read/xml_selector.rs +0 -0
  57. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/core/extensions.rs +0 -0
  58. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/core/mod.rs +0 -0
  59. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/core/paths.rs +0 -0
  60. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/core/placement.rs +0 -0
  61. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/core/planner.rs +0 -0
  62. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/core/uri.rs +0 -0
  63. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/core/validation.rs +0 -0
  64. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/mod.rs +0 -0
  65. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/ops/archive.rs +0 -0
  66. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/ops/inputs.rs +0 -0
  67. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/ops/mod.rs +0 -0
  68. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/ops/output.rs +0 -0
  69. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/providers/adls.rs +0 -0
  70. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/providers/gcs.rs +0 -0
  71. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/providers/local.rs +0 -0
  72. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/providers/mod.rs +0 -0
  73. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/providers/s3.rs +0 -0
  74. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/storage/target.rs +0 -0
  75. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/unique_seed/mod.rs +0 -0
  76. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/accepted.rs +0 -0
  77. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/arrow_convert.rs +0 -0
  78. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/csv.rs +0 -0
  79. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/delta/commit_metrics.rs +0 -0
  80. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/delta/options.rs +0 -0
  81. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/delta/record_batch.rs +0 -0
  82. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/delta.rs +0 -0
  83. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/duckdb/merge.rs +0 -0
  84. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/duckdb.rs +0 -0
  85. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/iceberg/data_files.rs +0 -0
  86. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/iceberg/schema.rs +0 -0
  87. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/metrics.rs +0 -0
  88. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/mod.rs +0 -0
  89. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/parquet.rs +0 -0
  90. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/parts.rs +0 -0
  91. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/sink_format.rs +0 -0
  92. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/strategy/append.rs +0 -0
  93. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/strategy/merge/keys.rs +0 -0
  94. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/strategy/merge/mod.rs +0 -0
  95. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/strategy/merge/scd1.rs +0 -0
  96. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/strategy/merge/scd2.rs +0 -0
  97. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/strategy/merge/shared.rs +0 -0
  98. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/strategy/mod.rs +0 -0
  99. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/io/write/strategy/overwrite.rs +0 -0
  100. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/lineage/mod.rs +0 -0
  101. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/log.rs +0 -0
  102. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/manifest/mod.rs +0 -0
  103. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/manifest/model.rs +0 -0
  104. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/manifest/reconstruct.rs +0 -0
  105. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/profile/mod.rs +0 -0
  106. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/profile/parse.rs +0 -0
  107. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/profile/types.rs +0 -0
  108. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/profile/validate.rs +0 -0
  109. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/report/build.rs +0 -0
  110. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/report/entity.rs +0 -0
  111. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/report/mod.rs +0 -0
  112. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/report/output.rs +0 -0
  113. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/run/context.rs +0 -0
  114. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/run/entity/accepted_buffer.rs +0 -0
  115. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/run/entity/accepted_write.rs +0 -0
  116. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/run/entity/incremental.rs +0 -0
  117. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/run/entity/mod.rs +0 -0
  118. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/run/entity/pii.rs +0 -0
  119. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/run/entity/precheck.rs +0 -0
  120. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/run/entity/process.rs +0 -0
  121. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/run/entity/resolve.rs +0 -0
  122. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/run/entity/validate_split.rs +0 -0
  123. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/run/events.rs +0 -0
  124. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/run/file.rs +0 -0
  125. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/run/mod.rs +0 -0
  126. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/run/output.rs +0 -0
  127. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/run/perf.rs +0 -0
  128. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/runner/mod.rs +0 -0
  129. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/runner/outcome.rs +0 -0
  130. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/runtime.rs +0 -0
  131. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/state/mod.rs +0 -0
  132. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/vars/mod.rs +0 -0
  133. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/vars/resolve.rs +0 -0
  134. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/src/warnings.rs +0 -0
  135. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration/archive_run.rs +0 -0
  136. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration/composite_unique.rs +0 -0
  137. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration/delta_run.rs +0 -0
  138. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration/dry_run.rs +0 -0
  139. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration/duckdb_run.rs +0 -0
  140. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration/fixed_width.rs +0 -0
  141. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration/iceberg_gcs_run.rs +0 -0
  142. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration/iceberg_glue_run.rs +0 -0
  143. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration/iceberg_run.rs +0 -0
  144. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration/iceberg_s3_run.rs +0 -0
  145. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration/json_selectors.rs +0 -0
  146. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration/local_run.rs +0 -0
  147. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration/mod.rs +0 -0
  148. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration/path_normalization.rs +0 -0
  149. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration/run_entities_filter.rs +0 -0
  150. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/integration.rs +0 -0
  151. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/common.rs +0 -0
  152. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/add_entity.rs +0 -0
  153. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/adls_storage.rs +0 -0
  154. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/adls_validation.rs +0 -0
  155. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/duckdb_validation.rs +0 -0
  156. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/gcs_storage.rs +0 -0
  157. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/gcs_validation.rs +0 -0
  158. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/lineage_validation.rs +0 -0
  159. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/local_storage.rs +0 -0
  160. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/mod.rs +0 -0
  161. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/pii_validation.rs +0 -0
  162. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/remote_base.rs +0 -0
  163. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/storage_resolver_uri.rs +0 -0
  164. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/config/templating.rs +0 -0
  165. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/format.rs +0 -0
  166. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/mod.rs +0 -0
  167. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/read/avro_input.rs +0 -0
  168. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/read/csv_nulls.rs +0 -0
  169. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/read/json_array.rs +0 -0
  170. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/read/json_ndjson.rs +0 -0
  171. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/read/json_selector.rs +0 -0
  172. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/read/mod.rs +0 -0
  173. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/read/orc_input.rs +0 -0
  174. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/read/parquet_input.rs +0 -0
  175. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/read/tsv.rs +0 -0
  176. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/read/xlsx_input.rs +0 -0
  177. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/read/xml.rs +0 -0
  178. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/read/xml_selector.rs +0 -0
  179. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/storage/adls.rs +0 -0
  180. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/storage/adls_integration.rs +0 -0
  181. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/storage/gcs.rs +0 -0
  182. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/storage/inputs.rs +0 -0
  183. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/storage/local.rs +0 -0
  184. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/storage/mod.rs +0 -0
  185. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/storage/paths.rs +0 -0
  186. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/storage/planner.rs +0 -0
  187. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/storage/s3.rs +0 -0
  188. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/storage/target.rs +0 -0
  189. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/write/delta_merge.rs +0 -0
  190. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/write/delta_write.rs +0 -0
  191. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/write/iceberg_write.rs +0 -0
  192. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/write/metrics.rs +0 -0
  193. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/write/mod.rs +0 -0
  194. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/write/parquet_write.rs +0 -0
  195. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/write/parts.rs +0 -0
  196. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/io/write/rejected_csv.rs +0 -0
  197. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/manifest/mod.rs +0 -0
  198. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/mod.rs +0 -0
  199. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/profile/mod.rs +0 -0
  200. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/profile/parse.rs +0 -0
  201. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/profile/validate.rs +0 -0
  202. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/report/accepted_output.rs +0 -0
  203. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/report/mod.rs +0 -0
  204. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/report/storage.rs +0 -0
  205. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/run/check_order.rs +0 -0
  206. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/run/checks.rs +0 -0
  207. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/run/entity/accepted_output.rs +0 -0
  208. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/run/entity/incremental.rs +0 -0
  209. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/run/entity/mod.rs +0 -0
  210. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/run/lineage.rs +0 -0
  211. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/run/mod.rs +0 -0
  212. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/run/normalize.rs +0 -0
  213. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/run/pii.rs +0 -0
  214. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/run/report.rs +0 -0
  215. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/run/schema_mismatch.rs +0 -0
  216. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/runner/adapter.rs +0 -0
  217. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/runner/mod.rs +0 -0
  218. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/state/mod.rs +0 -0
  219. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/vars/mod.rs +0 -0
  220. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit/vars/resolve.rs +0 -0
  221. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-core/tests/unit.rs +0 -0
  222. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/.gitignore +0 -0
  223. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/README.md +0 -0
  224. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/src/functions.rs +0 -0
  225. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/src/lib.rs +0 -0
  226. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/src/observer.rs +0 -0
  227. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/src/types/config.rs +0 -0
  228. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/src/types/errors.rs +0 -0
  229. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/src/types/mod.rs +0 -0
  230. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/src/types/outcome.rs +0 -0
  231. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/tests/fixtures/config.yml +0 -0
  232. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/tests/fixtures/in/customer/customers_valid.csv +0 -0
  233. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/tests/fixtures/invalid_config.yml +0 -0
  234. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/tests/fixtures/profile.yml +0 -0
  235. {floe_python-0.6.3 → floe_python-0.6.5}/crates/floe-python/tests/test_floe.py +0 -0
  236. {floe_python-0.6.3 → floe_python-0.6.5}/python/floe/__init__.py +0 -0
  237. {floe_python-0.6.3 → floe_python-0.6.5}/python/floe/_floe.pyi +0 -0
  238. {floe_python-0.6.3 → floe_python-0.6.5}/python/floe/py.typed +0 -0
@@ -8,12 +8,6 @@ version = "2.0.1"
8
8
  source = "registry+https://github.com/rust-lang/crates.io-index"
9
9
  checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
10
10
 
11
- [[package]]
12
- name = "adler32"
13
- version = "1.2.0"
14
- source = "registry+https://github.com/rust-lang/crates.io-index"
15
- checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
16
-
17
11
  [[package]]
18
12
  name = "aes"
19
13
  version = "0.8.4"
@@ -145,29 +139,6 @@ version = "1.0.100"
145
139
  source = "registry+https://github.com/rust-lang/crates.io-index"
146
140
  checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
147
141
 
148
- [[package]]
149
- name = "apache-avro"
150
- version = "0.16.0"
151
- source = "registry+https://github.com/rust-lang/crates.io-index"
152
- checksum = "ceb7c683b2f8f40970b70e39ff8be514c95b96fcb9c4af87e1ed2cb2e10801a0"
153
- dependencies = [
154
- "digest",
155
- "lazy_static",
156
- "libflate",
157
- "log",
158
- "num-bigint",
159
- "quad-rand",
160
- "rand 0.8.5",
161
- "regex-lite",
162
- "serde",
163
- "serde_json",
164
- "strum 0.25.0",
165
- "strum_macros 0.25.3",
166
- "thiserror 1.0.69",
167
- "typed-builder 0.16.2",
168
- "uuid",
169
- ]
170
-
171
142
  [[package]]
172
143
  name = "apache-avro"
173
144
  version = "0.21.0"
@@ -186,8 +157,8 @@ dependencies = [
186
157
  "serde",
187
158
  "serde_bytes",
188
159
  "serde_json",
189
- "strum 0.27.2",
190
- "strum_macros 0.27.2",
160
+ "strum",
161
+ "strum_macros",
191
162
  "thiserror 2.0.18",
192
163
  "uuid",
193
164
  "zstd",
@@ -1635,7 +1606,7 @@ version = "4.5.49"
1635
1606
  source = "registry+https://github.com/rust-lang/crates.io-index"
1636
1607
  checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671"
1637
1608
  dependencies = [
1638
- "heck 0.5.0",
1609
+ "heck",
1639
1610
  "proc-macro2",
1640
1611
  "quote",
1641
1612
  "syn 2.0.117",
@@ -1792,15 +1763,6 @@ version = "0.8.7"
1792
1763
  source = "registry+https://github.com/rust-lang/crates.io-index"
1793
1764
  checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
1794
1765
 
1795
- [[package]]
1796
- name = "core2"
1797
- version = "0.4.0"
1798
- source = "registry+https://github.com/rust-lang/crates.io-index"
1799
- checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
1800
- dependencies = [
1801
- "memchr",
1802
- ]
1803
-
1804
1766
  [[package]]
1805
1767
  name = "cpufeatures"
1806
1768
  version = "0.2.17"
@@ -2075,12 +2037,6 @@ dependencies = [
2075
2037
  "syn 2.0.117",
2076
2038
  ]
2077
2039
 
2078
- [[package]]
2079
- name = "dary_heap"
2080
- version = "0.3.8"
2081
- source = "registry+https://github.com/rust-lang/crates.io-index"
2082
- checksum = "06d2e3287df1c007e74221c49ca10a95d557349e54b3a75dc2fb14712c751f04"
2083
-
2084
2040
  [[package]]
2085
2041
  name = "dashmap"
2086
2042
  version = "6.1.0"
@@ -2809,7 +2765,7 @@ dependencies = [
2809
2765
  "rustc_version",
2810
2766
  "serde",
2811
2767
  "serde_json",
2812
- "strum 0.27.2",
2768
+ "strum",
2813
2769
  "thiserror 2.0.18",
2814
2770
  "tokio",
2815
2771
  "tracing",
@@ -2929,7 +2885,7 @@ dependencies = [
2929
2885
  "serde",
2930
2886
  "serde_json",
2931
2887
  "sqlparser 0.59.0",
2932
- "strum 0.27.2",
2888
+ "strum",
2933
2889
  "thiserror 2.0.18",
2934
2890
  "tokio",
2935
2891
  "tracing",
@@ -3158,7 +3114,7 @@ dependencies = [
3158
3114
  "num",
3159
3115
  "num-integer",
3160
3116
  "rust_decimal",
3161
- "strum 0.27.2",
3117
+ "strum",
3162
3118
  ]
3163
3119
 
3164
3120
  [[package]]
@@ -3384,7 +3340,7 @@ dependencies = [
3384
3340
 
3385
3341
  [[package]]
3386
3342
  name = "floe-cli"
3387
- version = "0.6.3"
3343
+ version = "0.6.5"
3388
3344
  dependencies = [
3389
3345
  "assert_cmd",
3390
3346
  "clap",
@@ -3397,9 +3353,9 @@ dependencies = [
3397
3353
 
3398
3354
  [[package]]
3399
3355
  name = "floe-core"
3400
- version = "0.6.3"
3356
+ version = "0.6.5"
3401
3357
  dependencies = [
3402
- "apache-avro 0.16.0",
3358
+ "apache-avro",
3403
3359
  "arrow",
3404
3360
  "async-trait",
3405
3361
  "aws-config",
@@ -3422,6 +3378,7 @@ dependencies = [
3422
3378
  "iceberg-catalog-rest",
3423
3379
  "iceberg-storage-opendal",
3424
3380
  "mockito",
3381
+ "opendal",
3425
3382
  "orc-rust",
3426
3383
  "polars",
3427
3384
  "rayon",
@@ -3442,7 +3399,7 @@ dependencies = [
3442
3399
 
3443
3400
  [[package]]
3444
3401
  name = "floe-python"
3445
- version = "0.6.3"
3402
+ version = "0.6.5"
3446
3403
  dependencies = [
3447
3404
  "floe-core",
3448
3405
  "pyo3",
@@ -3873,12 +3830,6 @@ dependencies = [
3873
3830
  "hashbrown 0.16.1",
3874
3831
  ]
3875
3832
 
3876
- [[package]]
3877
- name = "heck"
3878
- version = "0.4.1"
3879
- source = "registry+https://github.com/rust-lang/crates.io-index"
3880
- checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
3881
-
3882
3833
  [[package]]
3883
3834
  name = "heck"
3884
3835
  version = "0.5.0"
@@ -4141,7 +4092,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
4141
4092
  checksum = "4d9c3fc1f55c84ff64645c0d2ee35159f5574d33f729fc0860783bc247c8b8c5"
4142
4093
  dependencies = [
4143
4094
  "anyhow",
4144
- "apache-avro 0.21.0",
4095
+ "apache-avro",
4145
4096
  "array-init",
4146
4097
  "arrow-arith",
4147
4098
  "arrow-array",
@@ -4179,7 +4130,7 @@ dependencies = [
4179
4130
  "serde_json",
4180
4131
  "serde_repr",
4181
4132
  "serde_with",
4182
- "strum 0.27.2",
4133
+ "strum",
4183
4134
  "tokio",
4184
4135
  "typed-builder 0.20.1",
4185
4136
  "typetag",
@@ -4679,30 +4630,6 @@ dependencies = [
4679
4630
  "zip 6.0.0",
4680
4631
  ]
4681
4632
 
4682
- [[package]]
4683
- name = "libflate"
4684
- version = "2.2.1"
4685
- source = "registry+https://github.com/rust-lang/crates.io-index"
4686
- checksum = "e3248b8d211bd23a104a42d81b4fa8bb8ac4a3b75e7a43d85d2c9ccb6179cd74"
4687
- dependencies = [
4688
- "adler32",
4689
- "core2",
4690
- "crc32fast",
4691
- "dary_heap",
4692
- "libflate_lz77",
4693
- ]
4694
-
4695
- [[package]]
4696
- name = "libflate_lz77"
4697
- version = "2.2.0"
4698
- source = "registry+https://github.com/rust-lang/crates.io-index"
4699
- checksum = "a599cb10a9cd92b1300debcef28da8f70b935ec937f44fcd1b70a7c986a11c5c"
4700
- dependencies = [
4701
- "core2",
4702
- "hashbrown 0.16.1",
4703
- "rle-decode-fast",
4704
- ]
4705
-
4706
4633
  [[package]]
4707
4634
  name = "libm"
4708
4635
  version = "0.2.15"
@@ -5584,7 +5511,7 @@ dependencies = [
5584
5511
  "serde",
5585
5512
  "simdutf8",
5586
5513
  "streaming-iterator",
5587
- "strum_macros 0.27.2",
5514
+ "strum_macros",
5588
5515
  "version_check",
5589
5516
  "zstd",
5590
5517
  ]
@@ -5620,7 +5547,7 @@ dependencies = [
5620
5547
  "ryu",
5621
5548
  "serde",
5622
5549
  "strength_reduce",
5623
- "strum_macros 0.27.2",
5550
+ "strum_macros",
5624
5551
  "version_check",
5625
5552
  ]
5626
5553
 
@@ -5654,7 +5581,7 @@ dependencies = [
5654
5581
  "regex",
5655
5582
  "serde",
5656
5583
  "serde_json",
5657
- "strum_macros 0.27.2",
5584
+ "strum_macros",
5658
5585
  "uuid",
5659
5586
  "version_check",
5660
5587
  "xxhash-rust",
@@ -5853,7 +5780,7 @@ dependencies = [
5853
5780
  "rayon",
5854
5781
  "regex",
5855
5782
  "regex-syntax",
5856
- "strum_macros 0.27.2",
5783
+ "strum_macros",
5857
5784
  "unicode-normalization",
5858
5785
  "unicode-reverse",
5859
5786
  "version_check",
@@ -5928,7 +5855,7 @@ dependencies = [
5928
5855
  "regex",
5929
5856
  "sha2",
5930
5857
  "slotmap",
5931
- "strum_macros 0.27.2",
5858
+ "strum_macros",
5932
5859
  "version_check",
5933
5860
  ]
5934
5861
 
@@ -6041,7 +5968,7 @@ dependencies = [
6041
5968
  "polars-utils",
6042
5969
  "rayon",
6043
5970
  "regex",
6044
- "strum_macros 0.27.2",
5971
+ "strum_macros",
6045
5972
  ]
6046
5973
 
6047
5974
  [[package]]
@@ -6323,7 +6250,7 @@ version = "0.29.0"
6323
6250
  source = "registry+https://github.com/rust-lang/crates.io-index"
6324
6251
  checksum = "4ca3a1557399783172dc5bf39cfca835157732532cba56b71d2292161e53b362"
6325
6252
  dependencies = [
6326
- "heck 0.5.0",
6253
+ "heck",
6327
6254
  "proc-macro2",
6328
6255
  "quote",
6329
6256
  "syn 2.0.117",
@@ -6880,12 +6807,6 @@ dependencies = [
6880
6807
  "syn 1.0.109",
6881
6808
  ]
6882
6809
 
6883
- [[package]]
6884
- name = "rle-decode-fast"
6885
- version = "1.0.3"
6886
- source = "registry+https://github.com/rust-lang/crates.io-index"
6887
- checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422"
6888
-
6889
6810
  [[package]]
6890
6811
  name = "rmp"
6891
6812
  version = "0.8.15"
@@ -7580,7 +7501,7 @@ version = "0.8.9"
7580
7501
  source = "registry+https://github.com/rust-lang/crates.io-index"
7581
7502
  checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451"
7582
7503
  dependencies = [
7583
- "heck 0.5.0",
7504
+ "heck",
7584
7505
  "proc-macro2",
7585
7506
  "quote",
7586
7507
  "syn 2.0.117",
@@ -7727,32 +7648,13 @@ version = "0.11.1"
7727
7648
  source = "registry+https://github.com/rust-lang/crates.io-index"
7728
7649
  checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
7729
7650
 
7730
- [[package]]
7731
- name = "strum"
7732
- version = "0.25.0"
7733
- source = "registry+https://github.com/rust-lang/crates.io-index"
7734
- checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
7735
-
7736
7651
  [[package]]
7737
7652
  name = "strum"
7738
7653
  version = "0.27.2"
7739
7654
  source = "registry+https://github.com/rust-lang/crates.io-index"
7740
7655
  checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf"
7741
7656
  dependencies = [
7742
- "strum_macros 0.27.2",
7743
- ]
7744
-
7745
- [[package]]
7746
- name = "strum_macros"
7747
- version = "0.25.3"
7748
- source = "registry+https://github.com/rust-lang/crates.io-index"
7749
- checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0"
7750
- dependencies = [
7751
- "heck 0.4.1",
7752
- "proc-macro2",
7753
- "quote",
7754
- "rustversion",
7755
- "syn 2.0.117",
7657
+ "strum_macros",
7756
7658
  ]
7757
7659
 
7758
7660
  [[package]]
@@ -7761,7 +7663,7 @@ version = "0.27.2"
7761
7663
  source = "registry+https://github.com/rust-lang/crates.io-index"
7762
7664
  checksum = "7695ce3845ea4b33927c055a39dc438a45b059f7c1b3d91d38d10355fb8cbca7"
7763
7665
  dependencies = [
7764
- "heck 0.5.0",
7666
+ "heck",
7765
7667
  "proc-macro2",
7766
7668
  "quote",
7767
7669
  "syn 2.0.117",
@@ -8204,15 +8106,6 @@ version = "2.1.2"
8204
8106
  source = "registry+https://github.com/rust-lang/crates.io-index"
8205
8107
  checksum = "9ea3136b675547379c4bd395ca6b938e5ad3c3d20fad76e7fe85f9e0d011419c"
8206
8108
 
8207
- [[package]]
8208
- name = "typed-builder"
8209
- version = "0.16.2"
8210
- source = "registry+https://github.com/rust-lang/crates.io-index"
8211
- checksum = "34085c17941e36627a879208083e25d357243812c30e7d7387c3b954f30ade16"
8212
- dependencies = [
8213
- "typed-builder-macro 0.16.2",
8214
- ]
8215
-
8216
8109
  [[package]]
8217
8110
  name = "typed-builder"
8218
8111
  version = "0.20.1"
@@ -8231,17 +8124,6 @@ dependencies = [
8231
8124
  "typed-builder-macro 0.23.0",
8232
8125
  ]
8233
8126
 
8234
- [[package]]
8235
- name = "typed-builder-macro"
8236
- version = "0.16.2"
8237
- source = "registry+https://github.com/rust-lang/crates.io-index"
8238
- checksum = "f03ca4cb38206e2bef0700092660bb74d696f808514dae47fa1467cbfe26e96e"
8239
- dependencies = [
8240
- "proc-macro2",
8241
- "quote",
8242
- "syn 2.0.117",
8243
- ]
8244
-
8245
8127
  [[package]]
8246
8128
  name = "typed-builder-macro"
8247
8129
  version = "0.20.1"
@@ -9035,7 +8917,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
9035
8917
  checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
9036
8918
  dependencies = [
9037
8919
  "anyhow",
9038
- "heck 0.5.0",
8920
+ "heck",
9039
8921
  "wit-parser",
9040
8922
  ]
9041
8923
 
@@ -9046,7 +8928,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
9046
8928
  checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
9047
8929
  dependencies = [
9048
8930
  "anyhow",
9049
- "heck 0.5.0",
8931
+ "heck",
9050
8932
  "indexmap 2.13.0",
9051
8933
  "prettyplease",
9052
8934
  "syn 2.0.117",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: floe-python
3
- Version: 0.6.3
3
+ Version: 0.6.5
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Intended Audience :: Science/Research
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "floe-core"
3
- version = "0.6.3"
3
+ version = "0.6.5"
4
4
  edition = "2021"
5
5
  description = "Core library for Floe, a YAML-driven technical ingestion tool."
6
6
  license = "MIT"
@@ -31,7 +31,7 @@ aws-sdk-s3 = "1"
31
31
  aws-credential-types = "1"
32
32
  # Only used by the Iceberg Glue catalog path; gated under the `iceberg` feature.
33
33
  aws-sdk-glue = { version = "1", optional = true }
34
- apache-avro = "0.16"
34
+ apache-avro = "0.21"
35
35
  google-cloud-storage = { package = "gcloud-storage", version = "1.2.0" }
36
36
  tempfile = "3"
37
37
  tokio = { version = "1", features = ["rt", "rt-multi-thread", "fs", "io-util"] }
@@ -46,7 +46,8 @@ uuid = "1"
46
46
  arrow = "57"
47
47
  iceberg = { version = "0.9.0", optional = true }
48
48
  iceberg-catalog-rest = { version = "0.9.0", optional = true }
49
- iceberg-storage-opendal = { version = "0.9.1", features = ["opendal-s3", "opendal-gcs"], optional = true }
49
+ iceberg-storage-opendal = { version = "0.9.1", features = ["opendal-s3", "opendal-gcs", "opendal-azdls"], optional = true }
50
+ opendal = { version = "0.55", features = ["services-azdls"], optional = true }
50
51
  df-interchange = { version = "0.3.2", features = ["arrow_57", "polars_0_52"] }
51
52
  orc-rust = "0.7.1"
52
53
  # Pinned exactly: 1.10500.0 bundles DuckDB 1.5.0 (native MERGE INTO) and depends on
@@ -77,6 +78,6 @@ mockito = "1"
77
78
  # enables both the writer and its tests.
78
79
  default = ["delta", "iceberg"]
79
80
  delta = ["dep:deltalake"]
80
- iceberg = ["dep:iceberg", "dep:iceberg-catalog-rest", "dep:iceberg-storage-opendal", "dep:aws-sdk-glue"]
81
+ iceberg = ["dep:iceberg", "dep:iceberg-catalog-rest", "dep:iceberg-storage-opendal", "dep:aws-sdk-glue", "dep:opendal"]
81
82
  duckdb = ["dep:duckdb"]
82
83
  vendored-openssl = []
@@ -1,4 +1,5 @@
1
1
  use crate::errors::FloeError;
2
+ use crate::secret::Secret;
2
3
  use std::collections::HashMap;
3
4
  use std::path::Path;
4
5
 
@@ -707,7 +708,7 @@ fn parse_sink_duckdb_options(value: &Yaml, ctx: &str) -> FloeResult<DuckDbSinkTa
707
708
  table: get_string(hash, "table", ctx)?,
708
709
  schema: opt_string(hash, "schema", ctx)?,
709
710
  connection: blank_to_none(opt_string(hash, "connection", ctx)?),
710
- token: blank_to_none(opt_string(hash, "token", ctx)?),
711
+ token: blank_to_none(opt_string(hash, "token", ctx)?).map(Secret::from),
711
712
  })
712
713
  }
713
714
 
@@ -852,7 +853,7 @@ fn parse_catalog_type_config(
852
853
  }),
853
854
  "rest" => Ok(CatalogTypeConfig::Rest {
854
855
  uri: get_string(hash, "uri", context)?,
855
- credential: opt_string(hash, "credential", context)?,
856
+ credential: opt_string(hash, "credential", context)?.map(Secret::from),
856
857
  warehouse: opt_string(hash, "warehouse", context)?,
857
858
  oauth2_server_uri: opt_string(hash, "oauth2_server_uri", context)?,
858
859
  scope: opt_string(hash, "scope", context)?,
@@ -861,7 +862,7 @@ fn parse_catalog_type_config(
861
862
  host: get_string(hash, "host", context)?,
862
863
  catalog: get_string(hash, "catalog", context)?,
863
864
  schema: get_string(hash, "schema", context)?,
864
- token: get_string(hash, "token", context)?,
865
+ token: Secret::from(get_string(hash, "token", context)?),
865
866
  create_schema_if_missing: opt_bool(hash, "create_schema_if_missing", context)?
866
867
  .unwrap_or(false),
867
868
  }),
@@ -1,4 +1,5 @@
1
1
  use crate::errors::FloeError;
2
+ use crate::secret::Secret;
2
3
  use std::collections::HashMap;
3
4
  use std::path::Path;
4
5
 
@@ -375,8 +376,9 @@ pub struct DuckDbSinkTargetConfig {
375
376
  /// MotherDuck instead of a local file and `SinkTarget.path` is ignored.
376
377
  pub connection: Option<String>,
377
378
  /// MotherDuck access token. Supports `${ENV}` substitution. Required for MotherDuck unless
378
- /// the `motherduck_token` environment variable is set in the process.
379
- pub token: Option<String>,
379
+ /// the `motherduck_token` environment variable is set in the process. Redacted in
380
+ /// `Debug`/`Display`; the manifest builder additionally drops literal tokens.
381
+ pub token: Option<Secret>,
380
382
  }
381
383
 
382
384
  /// True if `connection` is a MotherDuck connection string (`md:` scheme).
@@ -431,7 +433,8 @@ pub enum CatalogTypeConfig {
431
433
  /// REST catalog endpoint URI (e.g. `https://<host>/api/catalog`).
432
434
  uri: String,
433
435
  /// Credential string: `"token:<token>"` or `"client_credentials:<id>:<secret>"`.
434
- credential: Option<String>,
436
+ /// Redacted in `Debug`/`Display`.
437
+ credential: Option<Secret>,
435
438
  /// Warehouse / catalog identifier (e.g. `"my_catalog"` or `"my_catalog.my_schema"`).
436
439
  warehouse: Option<String>,
437
440
  /// OAuth2 token endpoint URI (required for Snowflake Polaris).
@@ -448,8 +451,9 @@ pub enum CatalogTypeConfig {
448
451
  catalog: String,
449
452
  /// Unity schema (database) name (e.g. "my_schema").
450
453
  schema: String,
451
- /// Personal Access Token or value from env-var substitution.
452
- token: String,
454
+ /// Personal Access Token or value from env-var substitution. Redacted in
455
+ /// `Debug`/`Display`.
456
+ token: Secret,
453
457
  /// Create the Unity schema if it does not already exist (default: false).
454
458
  create_schema_if_missing: bool,
455
459
  },
@@ -4,7 +4,8 @@ use std::collections::HashMap;
4
4
 
5
5
  #[cfg(feature = "iceberg")]
6
6
  use iceberg::io::{
7
- CLIENT_REGION, S3_ACCESS_KEY_ID, S3_REGION, S3_SECRET_ACCESS_KEY, S3_SESSION_TOKEN,
7
+ ADLS_ACCOUNT_KEY, ADLS_ACCOUNT_NAME, ADLS_SAS_TOKEN, CLIENT_REGION, S3_ACCESS_KEY_ID,
8
+ S3_REGION, S3_SECRET_ACCESS_KEY, S3_SESSION_TOKEN,
8
9
  };
9
10
  #[cfg(feature = "delta")]
10
11
  use url::Url;
@@ -113,7 +114,7 @@ pub fn delta_store_config(
113
114
  pub fn iceberg_store_config(
114
115
  target: &Target,
115
116
  resolver: &config::StorageResolver,
116
- entity: &config::EntityConfig,
117
+ _entity: &config::EntityConfig,
117
118
  ) -> FloeResult<IcebergStoreConfig> {
118
119
  match target {
119
120
  Target::Local { base_path, .. } => Ok(IcebergStoreConfig {
@@ -144,11 +145,24 @@ pub fn iceberg_store_config(
144
145
  warehouse_location: uri.to_string(),
145
146
  file_io_props: HashMap::new(),
146
147
  }),
147
- Target::Adls { .. } => Err(FloeError::config(format!(
148
- "entity.name={} iceberg sink is only supported on local, s3, or gcs storage for now",
149
- entity.name
150
- ))
151
- .into()),
148
+ Target::Adls { uri, account, .. } => {
149
+ let mut file_io_props = HashMap::new();
150
+ let warehouse_location = uri
151
+ .strip_prefix("abfs://")
152
+ .map(|rest| format!("abfss://{rest}"))
153
+ .unwrap_or_else(|| uri.to_string());
154
+ file_io_props.insert(ADLS_ACCOUNT_NAME.to_string(), account.to_string());
155
+ if let Ok(key) = std::env::var("AZURE_STORAGE_ACCOUNT_KEY") {
156
+ file_io_props.insert(ADLS_ACCOUNT_KEY.to_string(), key);
157
+ }
158
+ if let Ok(sas) = std::env::var("AZURE_STORAGE_SAS_TOKEN") {
159
+ file_io_props.insert(ADLS_SAS_TOKEN.to_string(), sas);
160
+ }
161
+ Ok(IcebergStoreConfig {
162
+ warehouse_location,
163
+ file_io_props,
164
+ })
165
+ }
152
166
  }
153
167
  }
154
168
 
@@ -1,4 +1,5 @@
1
1
  use crate::errors::FloeError;
2
+ use crate::secret::Secret;
2
3
  use std::time::Duration;
3
4
 
4
5
  use serde::{Deserialize, Serialize};
@@ -24,8 +25,8 @@ pub(crate) struct UnityCatalogConfig {
24
25
  pub(crate) schema: String,
25
26
  /// Table name.
26
27
  pub(crate) table: String,
27
- /// Personal Access Token.
28
- pub(crate) token: String,
28
+ /// Personal Access Token (redacted in `Debug`/`Display`).
29
+ pub(crate) token: Secret,
29
30
  /// Create the schema if it does not exist.
30
31
  pub(crate) create_schema_if_missing: bool,
31
32
  }
@@ -45,7 +46,7 @@ impl UnityCatalogConfig {
45
46
  unity_catalog: catalog.clone(),
46
47
  schema: resolved.schema.clone(),
47
48
  table: resolved.table.clone(),
48
- token: expand_env_token(token, &resolved.catalog_name)?,
49
+ token: Secret::new(expand_env_token(token.expose(), &resolved.catalog_name)?),
49
50
  create_schema_if_missing: *create_schema_if_missing,
50
51
  }),
51
52
  // The resolved target is guaranteed to be Unity by validate_delta_catalog_binding.
@@ -147,7 +148,7 @@ pub(crate) async fn register_unity_table(
147
148
  "{}/api/2.1/unity-catalog/tables/{}",
148
149
  cfg.host, full_name
149
150
  ))
150
- .bearer_auth(&cfg.token)
151
+ .bearer_auth(cfg.token.expose())
151
152
  .send()
152
153
  .await
153
154
  .map_err(|err| {
@@ -200,7 +201,7 @@ pub(crate) async fn register_unity_table(
200
201
  // 3. Create the table.
201
202
  let create_resp = client
202
203
  .post(format!("{}/api/2.1/unity-catalog/tables", cfg.host))
203
- .bearer_auth(&cfg.token)
204
+ .bearer_auth(cfg.token.expose())
204
205
  .json(&CreateTableRequest {
205
206
  name: &cfg.table,
206
207
  catalog_name: &cfg.unity_catalog,
@@ -251,7 +252,7 @@ async fn ensure_schema(cfg: &UnityCatalogConfig, client: &reqwest::Client) -> Fl
251
252
  "{}/api/2.1/unity-catalog/schemas/{}",
252
253
  cfg.host, schema_full
253
254
  ))
254
- .bearer_auth(&cfg.token)
255
+ .bearer_auth(cfg.token.expose())
255
256
  .send()
256
257
  .await
257
258
  .map_err(|err| {
@@ -266,7 +267,7 @@ async fn ensure_schema(cfg: &UnityCatalogConfig, client: &reqwest::Client) -> Fl
266
267
 
267
268
  let create_resp = client
268
269
  .post(format!("{}/api/2.1/unity-catalog/schemas", cfg.host))
269
- .bearer_auth(&cfg.token)
270
+ .bearer_auth(cfg.token.expose())
270
271
  .json(&CreateSchemaRequest {
271
272
  name: &cfg.schema,
272
273
  catalog_name: &cfg.unity_catalog,
@@ -79,7 +79,7 @@ fn test_cfg(server_url: &str) -> UnityCatalogConfig {
79
79
  unity_catalog: "main".to_string(),
80
80
  schema: "bronze".to_string(),
81
81
  table: "orders".to_string(),
82
- token: "test-token".to_string(),
82
+ token: crate::secret::Secret::from("test-token"),
83
83
  create_schema_if_missing: false,
84
84
  }
85
85
  }
@@ -15,6 +15,7 @@ use ::duckdb::{Config, Connection};
15
15
 
16
16
  use crate::config::DuckDbSinkTargetConfig;
17
17
  use crate::io::storage::Target;
18
+ use crate::secret::Secret;
18
19
  use crate::FloeResult;
19
20
 
20
21
  /// MotherDuck connection strings are identified by the `md:` scheme prefix.
@@ -35,9 +36,10 @@ pub(crate) enum DuckDbTarget {
35
36
  MotherDuck {
36
37
  /// The full `md:<db>` connection string.
37
38
  connection: String,
38
- /// Already `${ENV}`-expanded token (never logged), or `None` to rely on
39
- /// the ambient `motherduck_token` environment variable.
40
- token: Option<String>,
39
+ /// Already `${ENV}`-expanded token (redacted in `Debug`/`Display`, never
40
+ /// logged), or `None` to rely on the ambient `motherduck_token`
41
+ /// environment variable.
42
+ token: Option<Secret>,
41
43
  cache_key: String,
42
44
  },
43
45
  }
@@ -91,8 +93,8 @@ pub(crate) fn resolve_target(
91
93
  if let Some(connection) = cfg.connection.as_deref() {
92
94
  let connection = connection.trim();
93
95
  if is_motherduck_connection(connection) {
94
- let token = match cfg.token.as_deref() {
95
- Some(raw) => Some(expand_env_token(raw, entity_name)?),
96
+ let token = match cfg.token.as_ref() {
97
+ Some(raw) => Some(expand_env_token(raw.expose(), entity_name)?),
96
98
  None => None,
97
99
  };
98
100
  // The cache key must distinguish the same `md:` database opened with
@@ -113,7 +115,7 @@ pub(crate) fn resolve_target(
113
115
  let cache_key = motherduck_cache_key(connection, fingerprint_token.as_deref());
114
116
  return Ok(DuckDbTarget::MotherDuck {
115
117
  connection: connection.to_string(),
116
- token,
118
+ token: token.map(Secret::new),
117
119
  cache_key,
118
120
  });
119
121
  }
@@ -263,7 +265,7 @@ fn open_connection(target: &DuckDbTarget) -> FloeResult<Connection> {
263
265
  // Pass the token via the connection Config rather than a `SET`
264
266
  // statement so it never appears in any SQL string we build.
265
267
  let config = Config::default()
266
- .with("motherduck_token", token)
268
+ .with("motherduck_token", token.expose())
267
269
  .map_err(|err| {
268
270
  FloeError::run(format!(
269
271
  "duckdb motherduck token configuration failed: {err}"
@@ -471,7 +473,7 @@ mod tests {
471
473
  table: "t".to_string(),
472
474
  schema: None,
473
475
  connection: Some(connection.to_string()),
474
- token: token.map(str::to_string),
476
+ token: token.map(Secret::from),
475
477
  }
476
478
  }
477
479