floe-python 0.5.6__tar.gz → 0.6.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. {floe_python-0.5.6 → floe_python-0.6.2}/Cargo.lock +51 -87
  2. {floe_python-0.5.6 → floe_python-0.6.2}/PKG-INFO +1 -1
  3. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/Cargo.toml +7 -3
  4. floe_python-0.6.2/crates/floe-core/README.md +114 -0
  5. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/add_entity.rs +69 -85
  6. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/checks/cast.rs +14 -31
  7. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/checks/mismatch.rs +11 -28
  8. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/checks/mod.rs +16 -19
  9. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/checks/normalize.rs +20 -22
  10. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/checks/not_null.rs +8 -16
  11. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/checks/unique.rs +7 -13
  12. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/config/catalog.rs +15 -13
  13. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/config/location.rs +5 -1
  14. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/config/parse.rs +62 -64
  15. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/config/storage.rs +64 -50
  16. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/config/template.rs +32 -20
  17. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/config/types.rs +17 -13
  18. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/config/validate.rs +339 -271
  19. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/config/yaml_decode.rs +7 -10
  20. floe_python-0.6.2/crates/floe-core/src/errors.rs +221 -0
  21. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/format.rs +26 -41
  22. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/read/csv.rs +13 -16
  23. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/read/json_selector.rs +3 -4
  24. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/read/orc.rs +19 -25
  25. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/read/parquet.rs +9 -11
  26. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/read/xlsx.rs +3 -4
  27. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/core/extensions.rs +5 -3
  28. floe_python-0.6.2/crates/floe-core/src/io/storage/core/uri.rs +135 -0
  29. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/core/validation.rs +5 -3
  30. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/mod.rs +13 -15
  31. floe_python-0.6.2/crates/floe-core/src/io/storage/object_store.rs +277 -0
  32. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/ops/archive.rs +4 -3
  33. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/ops/inputs.rs +18 -31
  34. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/ops/output.rs +4 -3
  35. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/providers/adls.rs +45 -64
  36. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/providers/gcs.rs +14 -31
  37. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/providers/local.rs +91 -36
  38. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/providers/s3.rs +20 -40
  39. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/target.rs +3 -5
  40. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/unique_seed/mod.rs +2 -4
  41. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/arrow_convert.rs +11 -14
  42. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/csv.rs +2 -2
  43. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/delta/commit_metrics.rs +13 -17
  44. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/delta/options.rs +3 -3
  45. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/delta/unity.rs +56 -29
  46. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/delta/unity_tests.rs +34 -0
  47. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/delta.rs +9 -11
  48. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/duckdb/conn.rs +28 -28
  49. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/duckdb/merge.rs +9 -9
  50. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/duckdb.rs +15 -26
  51. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/iceberg/context.rs +8 -9
  52. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/iceberg/glue.rs +31 -30
  53. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/iceberg/rest.rs +26 -11
  54. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/iceberg/schema.rs +24 -24
  55. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/iceberg.rs +31 -27
  56. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/parquet.rs +8 -10
  57. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/sink_format.rs +5 -6
  58. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/strategy/merge/keys.rs +6 -5
  59. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/strategy/merge/mod.rs +5 -5
  60. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/strategy/merge/scd1.rs +5 -7
  61. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/strategy/merge/scd2.rs +20 -21
  62. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/strategy/merge/shared.rs +25 -21
  63. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/strategy/mod.rs +12 -10
  64. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/lib.rs +1 -1
  65. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/lineage/mod.rs +2 -2
  66. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/manifest/builder.rs +29 -11
  67. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/manifest/reconstruct.rs +30 -14
  68. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/profile/parse.rs +34 -34
  69. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/profile/validate.rs +86 -62
  70. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/run/entity/accepted_buffer.rs +5 -8
  71. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/run/entity/mod.rs +6 -5
  72. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/run/entity/pii.rs +185 -22
  73. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/run/entity/precheck.rs +4 -3
  74. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/run/entity/validate_split.rs +15 -18
  75. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/run/mod.rs +9 -9
  76. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/run/output.rs +5 -7
  77. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/state/mod.rs +96 -25
  78. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/vars/resolve.rs +15 -11
  79. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration/iceberg_run.rs +11 -16
  80. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/adls_storage.rs +34 -0
  81. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/pii_validation.rs +35 -0
  82. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/templating.rs +59 -1
  83. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/storage/local.rs +85 -0
  84. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/write/delta_write.rs +4 -13
  85. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/write/iceberg_write.rs +7 -20
  86. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/manifest/mod.rs +110 -0
  87. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-python/Cargo.toml +3 -3
  88. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-python/pyproject.duckdb.toml +2 -2
  89. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-python/src/functions.rs +10 -12
  90. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-python/src/lib.rs +8 -14
  91. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-python/src/observer.rs +10 -10
  92. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-python/src/types/config.rs +4 -1
  93. floe_python-0.6.2/crates/floe-python/src/types/errors.rs +29 -0
  94. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-python/src/types/outcome.rs +15 -15
  95. {floe_python-0.5.6 → floe_python-0.6.2}/pyproject.toml +1 -1
  96. floe_python-0.5.6/crates/floe-core/README.md +0 -90
  97. floe_python-0.5.6/crates/floe-core/src/errors.rs +0 -27
  98. floe_python-0.5.6/crates/floe-core/src/io/storage/core/uri.rs +0 -75
  99. floe_python-0.5.6/crates/floe-core/src/io/storage/object_store.rs +0 -149
  100. floe_python-0.5.6/crates/floe-python/src/types/errors.rs +0 -23
  101. {floe_python-0.5.6 → floe_python-0.6.2}/Cargo.toml +0 -0
  102. {floe_python-0.5.6 → floe_python-0.6.2}/README.md +0 -0
  103. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/config/mod.rs +0 -0
  104. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/mod.rs +0 -0
  105. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/read/avro.rs +0 -0
  106. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/read/fixed_width.rs +0 -0
  107. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/read/json.rs +0 -0
  108. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/read/mod.rs +0 -0
  109. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/read/xml.rs +0 -0
  110. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/read/xml_selector.rs +0 -0
  111. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/core/mod.rs +0 -0
  112. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/core/paths.rs +0 -0
  113. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/core/placement.rs +0 -0
  114. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/core/planner.rs +0 -0
  115. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/ops/mod.rs +0 -0
  116. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/storage/providers/mod.rs +0 -0
  117. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/accepted.rs +0 -0
  118. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/delta/record_batch.rs +0 -0
  119. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/iceberg/data_files.rs +0 -0
  120. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/iceberg/metadata.rs +0 -0
  121. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/metrics.rs +0 -0
  122. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/mod.rs +0 -0
  123. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/parts.rs +0 -0
  124. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/strategy/append.rs +0 -0
  125. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/io/write/strategy/overwrite.rs +0 -0
  126. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/log.rs +0 -0
  127. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/manifest/mod.rs +0 -0
  128. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/manifest/model.rs +0 -0
  129. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/profile/mod.rs +0 -0
  130. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/profile/types.rs +0 -0
  131. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/report/build.rs +0 -0
  132. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/report/entity.rs +0 -0
  133. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/report/mod.rs +0 -0
  134. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/report/output.rs +0 -0
  135. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/run/context.rs +0 -0
  136. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/run/entity/accepted_write.rs +0 -0
  137. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/run/entity/incremental.rs +0 -0
  138. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/run/entity/process.rs +0 -0
  139. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/run/entity/resolve.rs +0 -0
  140. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/run/events.rs +0 -0
  141. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/run/file.rs +0 -0
  142. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/run/perf.rs +0 -0
  143. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/runner/mod.rs +0 -0
  144. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/runner/outcome.rs +0 -0
  145. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/runtime.rs +0 -0
  146. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/vars/mod.rs +0 -0
  147. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/src/warnings.rs +0 -0
  148. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration/archive_run.rs +0 -0
  149. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration/composite_unique.rs +0 -0
  150. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration/delta_run.rs +0 -0
  151. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration/dry_run.rs +0 -0
  152. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration/duckdb_run.rs +0 -0
  153. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration/fixed_width.rs +0 -0
  154. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration/iceberg_gcs_run.rs +0 -0
  155. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration/iceberg_glue_run.rs +0 -0
  156. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration/iceberg_s3_run.rs +0 -0
  157. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration/json_selectors.rs +0 -0
  158. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration/local_run.rs +0 -0
  159. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration/mod.rs +0 -0
  160. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration/path_normalization.rs +0 -0
  161. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration/run_entities_filter.rs +0 -0
  162. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/integration.rs +0 -0
  163. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/common.rs +0 -0
  164. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/add_entity.rs +0 -0
  165. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/adls_validation.rs +0 -0
  166. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/catalogs.rs +0 -0
  167. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/config_validation.rs +0 -0
  168. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/duckdb_validation.rs +0 -0
  169. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/gcs_storage.rs +0 -0
  170. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/gcs_validation.rs +0 -0
  171. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/lineage_validation.rs +0 -0
  172. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/local_storage.rs +0 -0
  173. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/mod.rs +0 -0
  174. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/parse.rs +0 -0
  175. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/remote_base.rs +0 -0
  176. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/config/storage_resolver_uri.rs +0 -0
  177. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/format.rs +0 -0
  178. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/mod.rs +0 -0
  179. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/read/avro_input.rs +0 -0
  180. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/read/csv_nulls.rs +0 -0
  181. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/read/json_array.rs +0 -0
  182. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/read/json_ndjson.rs +0 -0
  183. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/read/json_selector.rs +0 -0
  184. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/read/mod.rs +0 -0
  185. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/read/orc_input.rs +0 -0
  186. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/read/parquet_input.rs +0 -0
  187. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/read/tsv.rs +0 -0
  188. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/read/xlsx_input.rs +0 -0
  189. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/read/xml.rs +0 -0
  190. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/read/xml_selector.rs +0 -0
  191. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/storage/adls.rs +0 -0
  192. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/storage/adls_integration.rs +0 -0
  193. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/storage/gcs.rs +0 -0
  194. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/storage/inputs.rs +0 -0
  195. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/storage/mod.rs +0 -0
  196. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/storage/paths.rs +0 -0
  197. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/storage/planner.rs +0 -0
  198. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/storage/s3.rs +0 -0
  199. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/storage/target.rs +0 -0
  200. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/write/delta_merge.rs +0 -0
  201. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/write/metrics.rs +0 -0
  202. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/write/mod.rs +0 -0
  203. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/write/object_store.rs +0 -0
  204. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/write/parquet_write.rs +0 -0
  205. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/write/parts.rs +0 -0
  206. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/io/write/rejected_csv.rs +0 -0
  207. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/mod.rs +0 -0
  208. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/profile/mod.rs +0 -0
  209. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/profile/parse.rs +0 -0
  210. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/profile/validate.rs +0 -0
  211. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/report/accepted_output.rs +0 -0
  212. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/report/mod.rs +0 -0
  213. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/report/storage.rs +0 -0
  214. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/run/check_order.rs +0 -0
  215. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/run/checks.rs +0 -0
  216. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/run/entity/accepted_output.rs +0 -0
  217. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/run/entity/incremental.rs +0 -0
  218. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/run/entity/mod.rs +0 -0
  219. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/run/lineage.rs +0 -0
  220. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/run/mod.rs +0 -0
  221. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/run/normalize.rs +0 -0
  222. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/run/pii.rs +0 -0
  223. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/run/report.rs +0 -0
  224. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/run/schema_mismatch.rs +0 -0
  225. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/runner/adapter.rs +0 -0
  226. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/runner/mod.rs +0 -0
  227. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/state/mod.rs +0 -0
  228. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/vars/mod.rs +0 -0
  229. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit/vars/resolve.rs +0 -0
  230. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-core/tests/unit.rs +0 -0
  231. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-python/.gitignore +0 -0
  232. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-python/README.md +0 -0
  233. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-python/src/types/mod.rs +0 -0
  234. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-python/tests/fixtures/config.yml +0 -0
  235. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-python/tests/fixtures/in/customer/customers_valid.csv +0 -0
  236. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-python/tests/fixtures/invalid_config.yml +0 -0
  237. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-python/tests/fixtures/profile.yml +0 -0
  238. {floe_python-0.5.6 → floe_python-0.6.2}/crates/floe-python/tests/test_floe.py +0 -0
  239. {floe_python-0.5.6 → floe_python-0.6.2}/python/floe/__init__.py +0 -0
  240. {floe_python-0.5.6 → floe_python-0.6.2}/python/floe/_floe.pyi +0 -0
  241. {floe_python-0.5.6 → floe_python-0.6.2}/python/floe/py.typed +0 -0
@@ -3384,7 +3384,7 @@ dependencies = [
3384
3384
 
3385
3385
  [[package]]
3386
3386
  name = "floe-cli"
3387
- version = "0.5.6"
3387
+ version = "0.6.2"
3388
3388
  dependencies = [
3389
3389
  "assert_cmd",
3390
3390
  "clap",
@@ -3397,12 +3397,13 @@ dependencies = [
3397
3397
 
3398
3398
  [[package]]
3399
3399
  name = "floe-core"
3400
- version = "0.5.6"
3400
+ version = "0.6.2"
3401
3401
  dependencies = [
3402
3402
  "apache-avro 0.16.0",
3403
3403
  "arrow",
3404
3404
  "async-trait",
3405
3405
  "aws-config",
3406
+ "aws-credential-types",
3406
3407
  "aws-sdk-glue",
3407
3408
  "aws-sdk-s3",
3408
3409
  "azure_core",
@@ -3416,6 +3417,7 @@ dependencies = [
3416
3417
  "gcloud-storage",
3417
3418
  "glob",
3418
3419
  "hex",
3420
+ "hmac",
3419
3421
  "iceberg",
3420
3422
  "iceberg-catalog-rest",
3421
3423
  "iceberg-storage-opendal",
@@ -3423,7 +3425,7 @@ dependencies = [
3423
3425
  "orc-rust",
3424
3426
  "polars",
3425
3427
  "rayon",
3426
- "reqwest 0.12.28",
3428
+ "reqwest 0.13.4",
3427
3429
  "roxmltree",
3428
3430
  "rust_xlsxwriter",
3429
3431
  "serde",
@@ -3440,7 +3442,7 @@ dependencies = [
3440
3442
 
3441
3443
  [[package]]
3442
3444
  name = "floe-python"
3443
- version = "0.5.6"
3445
+ version = "0.6.2"
3444
3446
  dependencies = [
3445
3447
  "floe-core",
3446
3448
  "pyo3",
@@ -4363,15 +4365,6 @@ dependencies = [
4363
4365
  "serde_core",
4364
4366
  ]
4365
4367
 
4366
- [[package]]
4367
- name = "indoc"
4368
- version = "2.0.7"
4369
- source = "registry+https://github.com/rust-lang/crates.io-index"
4370
- checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
4371
- dependencies = [
4372
- "rustversion",
4373
- ]
4374
-
4375
4368
  [[package]]
4376
4369
  name = "inout"
4377
4370
  version = "0.1.4"
@@ -4857,15 +4850,6 @@ dependencies = [
4857
4850
  "libc",
4858
4851
  ]
4859
4852
 
4860
- [[package]]
4861
- name = "memoffset"
4862
- version = "0.9.1"
4863
- source = "registry+https://github.com/rust-lang/crates.io-index"
4864
- checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
4865
- dependencies = [
4866
- "autocfg",
4867
- ]
4868
-
4869
4853
  [[package]]
4870
4854
  name = "mime"
4871
4855
  version = "0.3.17"
@@ -4956,17 +4940,17 @@ checksum = "9252111cf132ba0929b6f8e030cac2a24b507f3a4d6db6fb2896f27b354c714b"
4956
4940
 
4957
4941
  [[package]]
4958
4942
  name = "native-tls"
4959
- version = "0.2.14"
4943
+ version = "0.2.18"
4960
4944
  source = "registry+https://github.com/rust-lang/crates.io-index"
4961
- checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e"
4945
+ checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2"
4962
4946
  dependencies = [
4963
4947
  "libc",
4964
4948
  "log",
4965
4949
  "openssl",
4966
- "openssl-probe 0.1.6",
4950
+ "openssl-probe",
4967
4951
  "openssl-sys",
4968
4952
  "schannel",
4969
- "security-framework 2.11.1",
4953
+ "security-framework",
4970
4954
  "security-framework-sys",
4971
4955
  "tempfile",
4972
4956
  ]
@@ -5209,15 +5193,9 @@ dependencies = [
5209
5193
 
5210
5194
  [[package]]
5211
5195
  name = "openssl-probe"
5212
- version = "0.1.6"
5213
- source = "registry+https://github.com/rust-lang/crates.io-index"
5214
- checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
5215
-
5216
- [[package]]
5217
- name = "openssl-probe"
5218
- version = "0.2.0"
5196
+ version = "0.2.1"
5219
5197
  source = "registry+https://github.com/rust-lang/crates.io-index"
5220
- checksum = "9f50d9b3dabb09ecd771ad0aa242ca6894994c130308ca3d7684634df8037391"
5198
+ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
5221
5199
 
5222
5200
  [[package]]
5223
5201
  name = "openssl-src"
@@ -6296,37 +6274,32 @@ dependencies = [
6296
6274
 
6297
6275
  [[package]]
6298
6276
  name = "pyo3"
6299
- version = "0.22.6"
6277
+ version = "0.29.0"
6300
6278
  source = "registry+https://github.com/rust-lang/crates.io-index"
6301
- checksum = "f402062616ab18202ae8319da13fa4279883a2b8a9d9f83f20dbade813ce1884"
6279
+ checksum = "cd274650b21d4bfc26a0a47587962c1edb425f69287324355cd040c3ea66071c"
6302
6280
  dependencies = [
6303
- "cfg-if",
6304
- "indoc",
6305
6281
  "libc",
6306
- "memoffset",
6307
6282
  "once_cell",
6308
6283
  "portable-atomic",
6309
6284
  "pyo3-build-config",
6310
6285
  "pyo3-ffi",
6311
6286
  "pyo3-macros",
6312
- "unindent",
6313
6287
  ]
6314
6288
 
6315
6289
  [[package]]
6316
6290
  name = "pyo3-build-config"
6317
- version = "0.22.6"
6291
+ version = "0.29.0"
6318
6292
  source = "registry+https://github.com/rust-lang/crates.io-index"
6319
- checksum = "b14b5775b5ff446dd1056212d778012cbe8a0fbffd368029fd9e25b514479c38"
6293
+ checksum = "c5e2a7d2f0d013342f295c048ad19237add5154a55b1c5a254c0ec93d4109078"
6320
6294
  dependencies = [
6321
- "once_cell",
6322
6295
  "target-lexicon",
6323
6296
  ]
6324
6297
 
6325
6298
  [[package]]
6326
6299
  name = "pyo3-ffi"
6327
- version = "0.22.6"
6300
+ version = "0.29.0"
6328
6301
  source = "registry+https://github.com/rust-lang/crates.io-index"
6329
- checksum = "9ab5bcf04a2cdcbb50c7d6105de943f543f9ed92af55818fd17b660390fc8636"
6302
+ checksum = "ca85c467da1bbc8d866eea5deff9cf29ea5f7785054a17da36e65bda9c05845b"
6330
6303
  dependencies = [
6331
6304
  "libc",
6332
6305
  "pyo3-build-config",
@@ -6334,9 +6307,9 @@ dependencies = [
6334
6307
 
6335
6308
  [[package]]
6336
6309
  name = "pyo3-macros"
6337
- version = "0.22.6"
6310
+ version = "0.29.0"
6338
6311
  source = "registry+https://github.com/rust-lang/crates.io-index"
6339
- checksum = "0fd24d897903a9e6d80b968368a34e1525aeb719d568dba8b3d4bfa5dc67d453"
6312
+ checksum = "9ac53762fd065daa3194dd09337a38bd793a188100fd1a9304c4ab312d901771"
6340
6313
  dependencies = [
6341
6314
  "proc-macro2",
6342
6315
  "pyo3-macros-backend",
@@ -6346,13 +6319,12 @@ dependencies = [
6346
6319
 
6347
6320
  [[package]]
6348
6321
  name = "pyo3-macros-backend"
6349
- version = "0.22.6"
6322
+ version = "0.29.0"
6350
6323
  source = "registry+https://github.com/rust-lang/crates.io-index"
6351
- checksum = "36c011a03ba1e50152b4b394b479826cad97e7a21eb52df179cd91ac411cbfbe"
6324
+ checksum = "4ca3a1557399783172dc5bf39cfca835157732532cba56b71d2292161e53b362"
6352
6325
  dependencies = [
6353
6326
  "heck 0.5.0",
6354
6327
  "proc-macro2",
6355
- "pyo3-build-config",
6356
6328
  "quote",
6357
6329
  "syn 2.0.117",
6358
6330
  ]
@@ -6800,24 +6772,33 @@ checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3"
6800
6772
  dependencies = [
6801
6773
  "base64",
6802
6774
  "bytes",
6775
+ "encoding_rs",
6776
+ "futures-channel",
6803
6777
  "futures-core",
6804
6778
  "futures-util",
6779
+ "h2 0.4.13",
6805
6780
  "http 1.4.0",
6806
6781
  "http-body 1.0.1",
6807
6782
  "http-body-util",
6808
6783
  "hyper 1.8.1",
6809
6784
  "hyper-rustls 0.27.7",
6785
+ "hyper-tls",
6810
6786
  "hyper-util",
6811
6787
  "js-sys",
6812
6788
  "log",
6789
+ "mime",
6790
+ "native-tls",
6813
6791
  "percent-encoding",
6814
6792
  "pin-project-lite",
6815
6793
  "quinn",
6816
6794
  "rustls 0.23.36",
6817
6795
  "rustls-pki-types",
6818
6796
  "rustls-platform-verifier",
6797
+ "serde",
6798
+ "serde_json",
6819
6799
  "sync_wrapper",
6820
6800
  "tokio",
6801
+ "tokio-native-tls",
6821
6802
  "tokio-rustls 0.26.4",
6822
6803
  "tokio-util",
6823
6804
  "tower",
@@ -7019,12 +7000,11 @@ dependencies = [
7019
7000
 
7020
7001
  [[package]]
7021
7002
  name = "rust_xlsxwriter"
7022
- version = "0.67.0"
7003
+ version = "0.95.0"
7023
7004
  source = "registry+https://github.com/rust-lang/crates.io-index"
7024
- checksum = "05208955a4ca51dfad36960bdae24d9d257d43225711c6f70ed15c5115478384"
7005
+ checksum = "f281b687352597d29efaad39701d1167d5c48aa76fb973e392bc13e9d44e7f36"
7025
7006
  dependencies = [
7026
- "regex",
7027
- "zip 2.4.2",
7007
+ "zip 7.2.0",
7028
7008
  ]
7029
7009
 
7030
7010
  [[package]]
@@ -7088,10 +7068,10 @@ version = "0.8.3"
7088
7068
  source = "registry+https://github.com/rust-lang/crates.io-index"
7089
7069
  checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63"
7090
7070
  dependencies = [
7091
- "openssl-probe 0.2.0",
7071
+ "openssl-probe",
7092
7072
  "rustls-pki-types",
7093
7073
  "schannel",
7094
- "security-framework 3.5.1",
7074
+ "security-framework",
7095
7075
  ]
7096
7076
 
7097
7077
  [[package]]
@@ -7128,7 +7108,7 @@ dependencies = [
7128
7108
  "rustls-native-certs",
7129
7109
  "rustls-platform-verifier-android",
7130
7110
  "rustls-webpki 0.103.13",
7131
- "security-framework 3.5.1",
7111
+ "security-framework",
7132
7112
  "security-framework-sys",
7133
7113
  "webpki-root-certs",
7134
7114
  "windows-sys 0.61.2",
@@ -7272,19 +7252,6 @@ dependencies = [
7272
7252
  "zeroize",
7273
7253
  ]
7274
7254
 
7275
- [[package]]
7276
- name = "security-framework"
7277
- version = "2.11.1"
7278
- source = "registry+https://github.com/rust-lang/crates.io-index"
7279
- checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
7280
- dependencies = [
7281
- "bitflags",
7282
- "core-foundation 0.9.4",
7283
- "core-foundation-sys",
7284
- "libc",
7285
- "security-framework-sys",
7286
- ]
7287
-
7288
7255
  [[package]]
7289
7256
  name = "security-framework"
7290
7257
  version = "3.5.1"
@@ -7613,7 +7580,7 @@ version = "0.8.9"
7613
7580
  source = "registry+https://github.com/rust-lang/crates.io-index"
7614
7581
  checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451"
7615
7582
  dependencies = [
7616
- "heck 0.4.1",
7583
+ "heck 0.5.0",
7617
7584
  "proc-macro2",
7618
7585
  "quote",
7619
7586
  "syn 2.0.117",
@@ -7894,9 +7861,9 @@ dependencies = [
7894
7861
 
7895
7862
  [[package]]
7896
7863
  name = "target-lexicon"
7897
- version = "0.12.16"
7864
+ version = "0.13.5"
7898
7865
  source = "registry+https://github.com/rust-lang/crates.io-index"
7899
- checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
7866
+ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
7900
7867
 
7901
7868
  [[package]]
7902
7869
  name = "tempfile"
@@ -8297,6 +8264,12 @@ dependencies = [
8297
8264
  "syn 2.0.117",
8298
8265
  ]
8299
8266
 
8267
+ [[package]]
8268
+ name = "typed-path"
8269
+ version = "0.12.3"
8270
+ source = "registry+https://github.com/rust-lang/crates.io-index"
8271
+ checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e"
8272
+
8300
8273
  [[package]]
8301
8274
  name = "typeid"
8302
8275
  version = "1.0.3"
@@ -8433,12 +8406,6 @@ version = "0.2.6"
8433
8406
  source = "registry+https://github.com/rust-lang/crates.io-index"
8434
8407
  checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
8435
8408
 
8436
- [[package]]
8437
- name = "unindent"
8438
- version = "0.2.4"
8439
- source = "registry+https://github.com/rust-lang/crates.io-index"
8440
- checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
8441
-
8442
8409
  [[package]]
8443
8410
  name = "untrusted"
8444
8411
  version = "0.7.1"
@@ -9320,32 +9287,29 @@ dependencies = [
9320
9287
 
9321
9288
  [[package]]
9322
9289
  name = "zip"
9323
- version = "2.4.2"
9290
+ version = "6.0.0"
9324
9291
  source = "registry+https://github.com/rust-lang/crates.io-index"
9325
- checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50"
9292
+ checksum = "eb2a05c7c36fde6c09b08576c9f7fb4cda705990f73b58fe011abf7dfb24168b"
9326
9293
  dependencies = [
9327
9294
  "arbitrary",
9328
9295
  "crc32fast",
9329
- "crossbeam-utils",
9330
- "displaydoc",
9331
9296
  "flate2",
9332
9297
  "indexmap 2.13.0",
9333
9298
  "memchr",
9334
- "thiserror 2.0.18",
9335
9299
  "zopfli",
9336
9300
  ]
9337
9301
 
9338
9302
  [[package]]
9339
9303
  name = "zip"
9340
- version = "6.0.0"
9304
+ version = "7.2.0"
9341
9305
  source = "registry+https://github.com/rust-lang/crates.io-index"
9342
- checksum = "eb2a05c7c36fde6c09b08576c9f7fb4cda705990f73b58fe011abf7dfb24168b"
9306
+ checksum = "c42e33efc22a0650c311c2ef19115ce232583abbe80850bc8b66509ebef02de0"
9343
9307
  dependencies = [
9344
- "arbitrary",
9345
9308
  "crc32fast",
9346
9309
  "flate2",
9347
9310
  "indexmap 2.13.0",
9348
9311
  "memchr",
9312
+ "typed-path",
9349
9313
  "zopfli",
9350
9314
  ]
9351
9315
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: floe-python
3
- Version: 0.5.6
3
+ Version: 0.6.2
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.5.6"
3
+ version = "0.6.2"
4
4
  edition = "2021"
5
5
  description = "Core library for Floe, a YAML-driven technical ingestion tool."
6
6
  license = "MIT"
@@ -26,6 +26,9 @@ glob = "0.3"
26
26
  roxmltree = "0.20"
27
27
  aws-config = "1"
28
28
  aws-sdk-s3 = "1"
29
+ # `ProvideCredentials` trait — used to resolve EKS Pod Identity / container credentials for
30
+ # the Iceberg S3 write path (#426).
31
+ aws-credential-types = "1"
29
32
  # Only used by the Iceberg Glue catalog path; gated under the `iceberg` feature.
30
33
  aws-sdk-glue = { version = "1", optional = true }
31
34
  apache-avro = "0.16"
@@ -51,13 +54,14 @@ orc-rust = "0.7.1"
51
54
  # split the RecordBatch type and break `dataframe_to_record_batch` ingestion.
52
55
  duckdb = { version = "=1.10500.0", features = ["bundled", "appender-arrow"], optional = true }
53
56
 
54
- reqwest = { version = "0.12", default-features = true, features = ["native-tls-vendored", "json", "blocking"] }
57
+ reqwest = { version = "0.13", default-features = true, features = ["native-tls-vendored", "json", "blocking"] }
55
58
  sha2 = "0.10"
59
+ hmac = "0.12"
56
60
  hex = "0.4"
57
61
  thiserror = "1"
58
62
 
59
63
  [dev-dependencies]
60
- rust_xlsxwriter = "0.67"
64
+ rust_xlsxwriter = "0.95"
61
65
  mockito = "1"
62
66
 
63
67
  [features]
@@ -0,0 +1,114 @@
1
+ ![Floe logo](docs/assets/floe-banner.png)
2
+
3
+ # Floe
4
+
5
+ **Floe** is a Polars-powered data contract runtime for reliable file ingestion.
6
+ It validates raw files or extracted datasets before they enter your trusted
7
+ layer, routing accepted rows to lakehouse sinks and rejected rows to quarantine
8
+ with audit reports.
9
+
10
+ Use Floe when you already have a platform such as Databricks, Fabric-style
11
+ lakehouses, Snowflake/Open Catalog, MotherDuck, Airflow, or Dagster, but you
12
+ need a lightweight entry gate for file contracts, quality checks, rejected rows,
13
+ and run evidence.
14
+
15
+ Floe complements extract/load tools such as dlt, ingestr, and Airbyte: they get
16
+ data out of source systems; Floe decides what is allowed into trusted storage.
17
+
18
+ ## What Floe does
19
+
20
+ - Defines source, schema, checks, accepted output, rejected output, write mode,
21
+ metadata, and reporting in one human-readable YAML contract.
22
+ - Reads common file exports and extracted datasets from local or cloud storage.
23
+ - Applies schema, casting, nullability, and uniqueness checks before write.
24
+ - Writes accepted rows to Parquet, Delta Lake, Apache Iceberg, or DuckDB.
25
+ - Writes invalid rows separately and emits deterministic JSON run reports.
26
+ - Runs as a CLI binary, Docker image, Python library, or orchestrated job.
27
+
28
+ ## How it works
29
+
30
+ ![Floe architecture](docs/assets/architecture.png)
31
+
32
+ Each `floe run` executes a deterministic gate per entity:
33
+
34
+ | Stage | What happens |
35
+ |---|---|
36
+ | **1. Resolve inputs** | Discover and download source files from local or cloud storage |
37
+ | **2. File-level checks** | Validate schema structure, file format, and headers |
38
+ | **3. Row-level checks** | Apply type casting and `not_null` checks row by row |
39
+ | **4. Entity-level checks** | Apply `unique` / primary-key checks across all input rows plus existing accepted data |
40
+ | **5. Write outputs** | Route valid rows to accepted sinks, invalid rows to rejected sinks, and write reports |
41
+
42
+ Floe uses Rust, Polars, and Arrow for single-node columnar execution. At the
43
+ sink boundary, Arrow RecordBatches are handed to table-format writers without an
44
+ extra serialization hop.
45
+
46
+ - **Inputs:** CSV · TSV · JSON · Parquet · ORC · Avro · XLSX · XML · Fixed-width
47
+ - **Accepted outputs:** Parquet · Delta Lake · Apache Iceberg · DuckDB / MotherDuck
48
+ - **Storage:** local · S3 · ADLS · GCS
49
+ - **Catalogs:** AWS Glue · Iceberg REST (Polaris, Nessie, Snowflake) · Databricks Unity Catalog
50
+
51
+ ## Feature index
52
+
53
+ | Capability | Start here |
54
+ |---|---|
55
+ | Contracts and full YAML reference | [docs/config.md](docs/config.md) |
56
+ | Pipeline phases and execution details | [docs/how-it-works.md](docs/how-it-works.md) |
57
+ | Checks: schema mismatch, cast, `not_null`, `unique` | [docs/checks.md](docs/checks.md) |
58
+ | Supported inputs, outputs, storage, and catalogs | [docs/support-matrix.md](docs/support-matrix.md) |
59
+ | Write modes: `overwrite`, `append`, `merge_scd1`, `merge_scd2` | [docs/write_modes.md](docs/write_modes.md) |
60
+ | Parquet, Delta, Iceberg, and DuckDB sinks | [docs/sinks/parquet.md](docs/sinks/parquet.md), [docs/sinks/delta.md](docs/sinks/delta.md), [docs/sinks/iceberg.md](docs/sinks/iceberg.md), [docs/sinks/duckdb.md](docs/sinks/duckdb.md) |
61
+ | S3, ADLS, and GCS storage | [docs/storages/s3.md](docs/storages/s3.md), [docs/storages/adls.md](docs/storages/adls.md), [docs/storages/gcs.md](docs/storages/gcs.md) |
62
+ | Incremental file state | [docs/incremental.md](docs/incremental.md) |
63
+ | Profiles and variables | [docs/profiles.md](docs/profiles.md), [docs/variables.md](docs/variables.md) |
64
+ | PII masking | [docs/pii.md](docs/pii.md) |
65
+ | Reports, logs, and OpenLineage | [docs/report.md](docs/report.md), [docs/logging.md](docs/logging.md), [docs/lineage.md](docs/lineage.md) |
66
+ | Airflow and Dagster manifests | [docs/manifest.md](docs/manifest.md), [orchestrators/airflow-floe/README.md](orchestrators/airflow-floe/README.md), [orchestrators/dagster-floe/README.md](orchestrators/dagster-floe/README.md) |
67
+ | Python and notebooks | [docs/python-bindings.md](docs/python-bindings.md) |
68
+ | Installation and CLI usage | [docs/installation.md](docs/installation.md), [docs/cli.md](docs/cli.md) |
69
+
70
+ ## Install
71
+
72
+ **macOS / Linux — [Homebrew](https://brew.sh)**
73
+
74
+ ```bash
75
+ brew tap malon64/floe
76
+ brew install floe
77
+ ```
78
+
79
+ **Windows — [Scoop](https://scoop.sh)**
80
+
81
+ ```bash
82
+ scoop bucket add floe https://github.com/malon64/scoop-floe
83
+ scoop install floe
84
+ ```
85
+
86
+ **Docker**
87
+
88
+ ```bash
89
+ docker pull ghcr.io/malon64/floe:latest
90
+ docker run --rm -v "$PWD:/work" ghcr.io/malon64/floe:latest run -c /work/config.yml
91
+ ```
92
+
93
+ Or download a prebuilt binary from [GitHub Releases](https://github.com/malon64/floe/releases), or `cargo install floe-cli`.
94
+ → [Full installation guide](docs/installation.md)
95
+
96
+ **DuckDB sink** is shipped as a companion (the default artifacts are lean): use the
97
+ `ghcr.io/malon64/floe-duckdb` image, a `floe-duckdb` binary on your `PATH`, or the
98
+ off-PyPI `floe-duckdb` wheel. The lean `floe` auto-delegates DuckDB-sink runs to it.
99
+ → [DuckDB support](docs/installation.md#duckdb-support-companion-distribution)
100
+
101
+ ## Quick start
102
+
103
+ ```bash
104
+ floe validate -c config.yml # validate config and schema
105
+ floe run -c config.yml # run the pipeline
106
+ ```
107
+
108
+ → [Config reference](docs/config.md) · [Example config](example/config.yml)
109
+
110
+ For the full documentation entry point, see [docs/summary.md](docs/summary.md).
111
+
112
+ ## License
113
+
114
+ MIT