floe-python 0.5.6__tar.gz → 0.6.1__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 (240) hide show
  1. {floe_python-0.5.6 → floe_python-0.6.1}/Cargo.lock +50 -87
  2. {floe_python-0.5.6 → floe_python-0.6.1}/PKG-INFO +1 -1
  3. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/Cargo.toml +4 -3
  4. floe_python-0.6.1/crates/floe-core/README.md +114 -0
  5. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/add_entity.rs +69 -85
  6. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/checks/cast.rs +14 -31
  7. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/checks/mismatch.rs +11 -28
  8. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/checks/mod.rs +16 -19
  9. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/checks/normalize.rs +20 -22
  10. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/checks/not_null.rs +8 -16
  11. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/checks/unique.rs +7 -13
  12. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/config/catalog.rs +15 -13
  13. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/config/location.rs +5 -1
  14. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/config/parse.rs +62 -64
  15. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/config/storage.rs +64 -50
  16. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/config/template.rs +12 -16
  17. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/config/types.rs +17 -13
  18. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/config/validate.rs +339 -271
  19. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/config/yaml_decode.rs +7 -10
  20. floe_python-0.6.1/crates/floe-core/src/errors.rs +221 -0
  21. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/format.rs +26 -41
  22. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/read/csv.rs +13 -16
  23. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/read/json_selector.rs +3 -4
  24. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/read/orc.rs +19 -25
  25. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/read/parquet.rs +9 -11
  26. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/read/xlsx.rs +3 -4
  27. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/core/extensions.rs +5 -3
  28. floe_python-0.6.1/crates/floe-core/src/io/storage/core/uri.rs +135 -0
  29. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/core/validation.rs +5 -3
  30. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/mod.rs +13 -15
  31. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/object_store.rs +13 -11
  32. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/ops/archive.rs +4 -3
  33. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/ops/inputs.rs +18 -31
  34. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/ops/output.rs +4 -3
  35. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/providers/adls.rs +45 -64
  36. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/providers/gcs.rs +14 -31
  37. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/providers/local.rs +91 -36
  38. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/providers/s3.rs +20 -40
  39. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/target.rs +3 -5
  40. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/unique_seed/mod.rs +2 -4
  41. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/arrow_convert.rs +11 -14
  42. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/csv.rs +2 -2
  43. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/delta/commit_metrics.rs +13 -17
  44. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/delta/options.rs +3 -3
  45. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/delta/unity.rs +56 -29
  46. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/delta/unity_tests.rs +34 -0
  47. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/delta.rs +9 -11
  48. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/duckdb/conn.rs +28 -28
  49. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/duckdb/merge.rs +9 -9
  50. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/duckdb.rs +15 -26
  51. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/iceberg/context.rs +8 -9
  52. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/iceberg/glue.rs +31 -30
  53. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/iceberg/rest.rs +15 -11
  54. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/iceberg/schema.rs +24 -24
  55. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/iceberg.rs +17 -27
  56. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/parquet.rs +8 -10
  57. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/sink_format.rs +5 -6
  58. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/strategy/merge/keys.rs +6 -5
  59. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/strategy/merge/mod.rs +5 -4
  60. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/strategy/merge/scd1.rs +5 -7
  61. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/strategy/merge/scd2.rs +20 -21
  62. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/strategy/merge/shared.rs +25 -21
  63. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/strategy/mod.rs +12 -10
  64. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/lib.rs +1 -1
  65. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/lineage/mod.rs +2 -2
  66. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/manifest/builder.rs +16 -4
  67. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/manifest/reconstruct.rs +3 -2
  68. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/profile/parse.rs +34 -34
  69. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/profile/validate.rs +86 -62
  70. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/run/entity/accepted_buffer.rs +5 -8
  71. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/run/entity/mod.rs +6 -5
  72. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/run/entity/pii.rs +185 -22
  73. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/run/entity/precheck.rs +4 -3
  74. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/run/entity/validate_split.rs +15 -18
  75. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/run/mod.rs +9 -9
  76. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/run/output.rs +5 -7
  77. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/state/mod.rs +96 -25
  78. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/vars/resolve.rs +15 -11
  79. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration/iceberg_run.rs +11 -16
  80. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/adls_storage.rs +34 -0
  81. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/pii_validation.rs +35 -0
  82. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/storage/local.rs +85 -0
  83. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/write/delta_write.rs +4 -13
  84. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/write/iceberg_write.rs +7 -20
  85. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-python/Cargo.toml +3 -3
  86. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-python/pyproject.duckdb.toml +2 -2
  87. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-python/src/functions.rs +10 -12
  88. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-python/src/lib.rs +8 -14
  89. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-python/src/observer.rs +10 -10
  90. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-python/src/types/config.rs +4 -1
  91. floe_python-0.6.1/crates/floe-python/src/types/errors.rs +29 -0
  92. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-python/src/types/outcome.rs +15 -15
  93. {floe_python-0.5.6 → floe_python-0.6.1}/pyproject.toml +1 -1
  94. floe_python-0.5.6/crates/floe-core/README.md +0 -90
  95. floe_python-0.5.6/crates/floe-core/src/errors.rs +0 -27
  96. floe_python-0.5.6/crates/floe-core/src/io/storage/core/uri.rs +0 -75
  97. floe_python-0.5.6/crates/floe-python/src/types/errors.rs +0 -23
  98. {floe_python-0.5.6 → floe_python-0.6.1}/Cargo.toml +0 -0
  99. {floe_python-0.5.6 → floe_python-0.6.1}/README.md +0 -0
  100. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/config/mod.rs +0 -0
  101. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/mod.rs +0 -0
  102. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/read/avro.rs +0 -0
  103. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/read/fixed_width.rs +0 -0
  104. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/read/json.rs +0 -0
  105. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/read/mod.rs +0 -0
  106. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/read/xml.rs +0 -0
  107. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/read/xml_selector.rs +0 -0
  108. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/core/mod.rs +0 -0
  109. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/core/paths.rs +0 -0
  110. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/core/placement.rs +0 -0
  111. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/core/planner.rs +0 -0
  112. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/ops/mod.rs +0 -0
  113. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/storage/providers/mod.rs +0 -0
  114. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/accepted.rs +0 -0
  115. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/delta/record_batch.rs +0 -0
  116. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/iceberg/data_files.rs +0 -0
  117. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/iceberg/metadata.rs +0 -0
  118. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/metrics.rs +0 -0
  119. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/mod.rs +0 -0
  120. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/parts.rs +0 -0
  121. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/strategy/append.rs +0 -0
  122. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/io/write/strategy/overwrite.rs +0 -0
  123. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/log.rs +0 -0
  124. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/manifest/mod.rs +0 -0
  125. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/manifest/model.rs +0 -0
  126. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/profile/mod.rs +0 -0
  127. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/profile/types.rs +0 -0
  128. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/report/build.rs +0 -0
  129. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/report/entity.rs +0 -0
  130. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/report/mod.rs +0 -0
  131. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/report/output.rs +0 -0
  132. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/run/context.rs +0 -0
  133. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/run/entity/accepted_write.rs +0 -0
  134. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/run/entity/incremental.rs +0 -0
  135. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/run/entity/process.rs +0 -0
  136. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/run/entity/resolve.rs +0 -0
  137. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/run/events.rs +0 -0
  138. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/run/file.rs +0 -0
  139. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/run/perf.rs +0 -0
  140. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/runner/mod.rs +0 -0
  141. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/runner/outcome.rs +0 -0
  142. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/runtime.rs +0 -0
  143. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/vars/mod.rs +0 -0
  144. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/src/warnings.rs +0 -0
  145. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration/archive_run.rs +0 -0
  146. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration/composite_unique.rs +0 -0
  147. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration/delta_run.rs +0 -0
  148. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration/dry_run.rs +0 -0
  149. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration/duckdb_run.rs +0 -0
  150. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration/fixed_width.rs +0 -0
  151. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration/iceberg_gcs_run.rs +0 -0
  152. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration/iceberg_glue_run.rs +0 -0
  153. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration/iceberg_s3_run.rs +0 -0
  154. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration/json_selectors.rs +0 -0
  155. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration/local_run.rs +0 -0
  156. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration/mod.rs +0 -0
  157. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration/path_normalization.rs +0 -0
  158. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration/run_entities_filter.rs +0 -0
  159. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/integration.rs +0 -0
  160. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/common.rs +0 -0
  161. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/add_entity.rs +0 -0
  162. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/adls_validation.rs +0 -0
  163. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/catalogs.rs +0 -0
  164. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/config_validation.rs +0 -0
  165. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/duckdb_validation.rs +0 -0
  166. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/gcs_storage.rs +0 -0
  167. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/gcs_validation.rs +0 -0
  168. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/lineage_validation.rs +0 -0
  169. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/local_storage.rs +0 -0
  170. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/mod.rs +0 -0
  171. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/parse.rs +0 -0
  172. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/remote_base.rs +0 -0
  173. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/storage_resolver_uri.rs +0 -0
  174. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/config/templating.rs +0 -0
  175. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/format.rs +0 -0
  176. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/mod.rs +0 -0
  177. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/read/avro_input.rs +0 -0
  178. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/read/csv_nulls.rs +0 -0
  179. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/read/json_array.rs +0 -0
  180. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/read/json_ndjson.rs +0 -0
  181. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/read/json_selector.rs +0 -0
  182. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/read/mod.rs +0 -0
  183. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/read/orc_input.rs +0 -0
  184. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/read/parquet_input.rs +0 -0
  185. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/read/tsv.rs +0 -0
  186. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/read/xlsx_input.rs +0 -0
  187. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/read/xml.rs +0 -0
  188. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/read/xml_selector.rs +0 -0
  189. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/storage/adls.rs +0 -0
  190. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/storage/adls_integration.rs +0 -0
  191. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/storage/gcs.rs +0 -0
  192. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/storage/inputs.rs +0 -0
  193. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/storage/mod.rs +0 -0
  194. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/storage/paths.rs +0 -0
  195. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/storage/planner.rs +0 -0
  196. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/storage/s3.rs +0 -0
  197. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/storage/target.rs +0 -0
  198. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/write/delta_merge.rs +0 -0
  199. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/write/metrics.rs +0 -0
  200. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/write/mod.rs +0 -0
  201. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/write/object_store.rs +0 -0
  202. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/write/parquet_write.rs +0 -0
  203. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/write/parts.rs +0 -0
  204. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/io/write/rejected_csv.rs +0 -0
  205. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/manifest/mod.rs +0 -0
  206. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/mod.rs +0 -0
  207. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/profile/mod.rs +0 -0
  208. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/profile/parse.rs +0 -0
  209. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/profile/validate.rs +0 -0
  210. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/report/accepted_output.rs +0 -0
  211. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/report/mod.rs +0 -0
  212. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/report/storage.rs +0 -0
  213. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/run/check_order.rs +0 -0
  214. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/run/checks.rs +0 -0
  215. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/run/entity/accepted_output.rs +0 -0
  216. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/run/entity/incremental.rs +0 -0
  217. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/run/entity/mod.rs +0 -0
  218. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/run/lineage.rs +0 -0
  219. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/run/mod.rs +0 -0
  220. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/run/normalize.rs +0 -0
  221. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/run/pii.rs +0 -0
  222. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/run/report.rs +0 -0
  223. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/run/schema_mismatch.rs +0 -0
  224. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/runner/adapter.rs +0 -0
  225. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/runner/mod.rs +0 -0
  226. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/state/mod.rs +0 -0
  227. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/vars/mod.rs +0 -0
  228. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit/vars/resolve.rs +0 -0
  229. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-core/tests/unit.rs +0 -0
  230. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-python/.gitignore +0 -0
  231. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-python/README.md +0 -0
  232. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-python/src/types/mod.rs +0 -0
  233. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-python/tests/fixtures/config.yml +0 -0
  234. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-python/tests/fixtures/in/customer/customers_valid.csv +0 -0
  235. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-python/tests/fixtures/invalid_config.yml +0 -0
  236. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-python/tests/fixtures/profile.yml +0 -0
  237. {floe_python-0.5.6 → floe_python-0.6.1}/crates/floe-python/tests/test_floe.py +0 -0
  238. {floe_python-0.5.6 → floe_python-0.6.1}/python/floe/__init__.py +0 -0
  239. {floe_python-0.5.6 → floe_python-0.6.1}/python/floe/_floe.pyi +0 -0
  240. {floe_python-0.5.6 → floe_python-0.6.1}/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.1"
3388
3388
  dependencies = [
3389
3389
  "assert_cmd",
3390
3390
  "clap",
@@ -3397,7 +3397,7 @@ dependencies = [
3397
3397
 
3398
3398
  [[package]]
3399
3399
  name = "floe-core"
3400
- version = "0.5.6"
3400
+ version = "0.6.1"
3401
3401
  dependencies = [
3402
3402
  "apache-avro 0.16.0",
3403
3403
  "arrow",
@@ -3416,6 +3416,7 @@ dependencies = [
3416
3416
  "gcloud-storage",
3417
3417
  "glob",
3418
3418
  "hex",
3419
+ "hmac",
3419
3420
  "iceberg",
3420
3421
  "iceberg-catalog-rest",
3421
3422
  "iceberg-storage-opendal",
@@ -3423,7 +3424,7 @@ dependencies = [
3423
3424
  "orc-rust",
3424
3425
  "polars",
3425
3426
  "rayon",
3426
- "reqwest 0.12.28",
3427
+ "reqwest 0.13.4",
3427
3428
  "roxmltree",
3428
3429
  "rust_xlsxwriter",
3429
3430
  "serde",
@@ -3440,7 +3441,7 @@ dependencies = [
3440
3441
 
3441
3442
  [[package]]
3442
3443
  name = "floe-python"
3443
- version = "0.5.6"
3444
+ version = "0.6.1"
3444
3445
  dependencies = [
3445
3446
  "floe-core",
3446
3447
  "pyo3",
@@ -4363,15 +4364,6 @@ dependencies = [
4363
4364
  "serde_core",
4364
4365
  ]
4365
4366
 
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
4367
  [[package]]
4376
4368
  name = "inout"
4377
4369
  version = "0.1.4"
@@ -4857,15 +4849,6 @@ dependencies = [
4857
4849
  "libc",
4858
4850
  ]
4859
4851
 
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
4852
  [[package]]
4870
4853
  name = "mime"
4871
4854
  version = "0.3.17"
@@ -4956,17 +4939,17 @@ checksum = "9252111cf132ba0929b6f8e030cac2a24b507f3a4d6db6fb2896f27b354c714b"
4956
4939
 
4957
4940
  [[package]]
4958
4941
  name = "native-tls"
4959
- version = "0.2.14"
4942
+ version = "0.2.18"
4960
4943
  source = "registry+https://github.com/rust-lang/crates.io-index"
4961
- checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e"
4944
+ checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2"
4962
4945
  dependencies = [
4963
4946
  "libc",
4964
4947
  "log",
4965
4948
  "openssl",
4966
- "openssl-probe 0.1.6",
4949
+ "openssl-probe",
4967
4950
  "openssl-sys",
4968
4951
  "schannel",
4969
- "security-framework 2.11.1",
4952
+ "security-framework",
4970
4953
  "security-framework-sys",
4971
4954
  "tempfile",
4972
4955
  ]
@@ -5209,15 +5192,9 @@ dependencies = [
5209
5192
 
5210
5193
  [[package]]
5211
5194
  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"
5195
+ version = "0.2.1"
5219
5196
  source = "registry+https://github.com/rust-lang/crates.io-index"
5220
- checksum = "9f50d9b3dabb09ecd771ad0aa242ca6894994c130308ca3d7684634df8037391"
5197
+ checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
5221
5198
 
5222
5199
  [[package]]
5223
5200
  name = "openssl-src"
@@ -6296,37 +6273,32 @@ dependencies = [
6296
6273
 
6297
6274
  [[package]]
6298
6275
  name = "pyo3"
6299
- version = "0.22.6"
6276
+ version = "0.29.0"
6300
6277
  source = "registry+https://github.com/rust-lang/crates.io-index"
6301
- checksum = "f402062616ab18202ae8319da13fa4279883a2b8a9d9f83f20dbade813ce1884"
6278
+ checksum = "cd274650b21d4bfc26a0a47587962c1edb425f69287324355cd040c3ea66071c"
6302
6279
  dependencies = [
6303
- "cfg-if",
6304
- "indoc",
6305
6280
  "libc",
6306
- "memoffset",
6307
6281
  "once_cell",
6308
6282
  "portable-atomic",
6309
6283
  "pyo3-build-config",
6310
6284
  "pyo3-ffi",
6311
6285
  "pyo3-macros",
6312
- "unindent",
6313
6286
  ]
6314
6287
 
6315
6288
  [[package]]
6316
6289
  name = "pyo3-build-config"
6317
- version = "0.22.6"
6290
+ version = "0.29.0"
6318
6291
  source = "registry+https://github.com/rust-lang/crates.io-index"
6319
- checksum = "b14b5775b5ff446dd1056212d778012cbe8a0fbffd368029fd9e25b514479c38"
6292
+ checksum = "c5e2a7d2f0d013342f295c048ad19237add5154a55b1c5a254c0ec93d4109078"
6320
6293
  dependencies = [
6321
- "once_cell",
6322
6294
  "target-lexicon",
6323
6295
  ]
6324
6296
 
6325
6297
  [[package]]
6326
6298
  name = "pyo3-ffi"
6327
- version = "0.22.6"
6299
+ version = "0.29.0"
6328
6300
  source = "registry+https://github.com/rust-lang/crates.io-index"
6329
- checksum = "9ab5bcf04a2cdcbb50c7d6105de943f543f9ed92af55818fd17b660390fc8636"
6301
+ checksum = "ca85c467da1bbc8d866eea5deff9cf29ea5f7785054a17da36e65bda9c05845b"
6330
6302
  dependencies = [
6331
6303
  "libc",
6332
6304
  "pyo3-build-config",
@@ -6334,9 +6306,9 @@ dependencies = [
6334
6306
 
6335
6307
  [[package]]
6336
6308
  name = "pyo3-macros"
6337
- version = "0.22.6"
6309
+ version = "0.29.0"
6338
6310
  source = "registry+https://github.com/rust-lang/crates.io-index"
6339
- checksum = "0fd24d897903a9e6d80b968368a34e1525aeb719d568dba8b3d4bfa5dc67d453"
6311
+ checksum = "9ac53762fd065daa3194dd09337a38bd793a188100fd1a9304c4ab312d901771"
6340
6312
  dependencies = [
6341
6313
  "proc-macro2",
6342
6314
  "pyo3-macros-backend",
@@ -6346,13 +6318,12 @@ dependencies = [
6346
6318
 
6347
6319
  [[package]]
6348
6320
  name = "pyo3-macros-backend"
6349
- version = "0.22.6"
6321
+ version = "0.29.0"
6350
6322
  source = "registry+https://github.com/rust-lang/crates.io-index"
6351
- checksum = "36c011a03ba1e50152b4b394b479826cad97e7a21eb52df179cd91ac411cbfbe"
6323
+ checksum = "4ca3a1557399783172dc5bf39cfca835157732532cba56b71d2292161e53b362"
6352
6324
  dependencies = [
6353
6325
  "heck 0.5.0",
6354
6326
  "proc-macro2",
6355
- "pyo3-build-config",
6356
6327
  "quote",
6357
6328
  "syn 2.0.117",
6358
6329
  ]
@@ -6800,24 +6771,33 @@ checksum = "219c5811de6525e5416c7d5d53bb656d3afdbc6c5af816e0802bcfa42dbdc1c3"
6800
6771
  dependencies = [
6801
6772
  "base64",
6802
6773
  "bytes",
6774
+ "encoding_rs",
6775
+ "futures-channel",
6803
6776
  "futures-core",
6804
6777
  "futures-util",
6778
+ "h2 0.4.13",
6805
6779
  "http 1.4.0",
6806
6780
  "http-body 1.0.1",
6807
6781
  "http-body-util",
6808
6782
  "hyper 1.8.1",
6809
6783
  "hyper-rustls 0.27.7",
6784
+ "hyper-tls",
6810
6785
  "hyper-util",
6811
6786
  "js-sys",
6812
6787
  "log",
6788
+ "mime",
6789
+ "native-tls",
6813
6790
  "percent-encoding",
6814
6791
  "pin-project-lite",
6815
6792
  "quinn",
6816
6793
  "rustls 0.23.36",
6817
6794
  "rustls-pki-types",
6818
6795
  "rustls-platform-verifier",
6796
+ "serde",
6797
+ "serde_json",
6819
6798
  "sync_wrapper",
6820
6799
  "tokio",
6800
+ "tokio-native-tls",
6821
6801
  "tokio-rustls 0.26.4",
6822
6802
  "tokio-util",
6823
6803
  "tower",
@@ -7019,12 +6999,11 @@ dependencies = [
7019
6999
 
7020
7000
  [[package]]
7021
7001
  name = "rust_xlsxwriter"
7022
- version = "0.67.0"
7002
+ version = "0.95.0"
7023
7003
  source = "registry+https://github.com/rust-lang/crates.io-index"
7024
- checksum = "05208955a4ca51dfad36960bdae24d9d257d43225711c6f70ed15c5115478384"
7004
+ checksum = "f281b687352597d29efaad39701d1167d5c48aa76fb973e392bc13e9d44e7f36"
7025
7005
  dependencies = [
7026
- "regex",
7027
- "zip 2.4.2",
7006
+ "zip 7.2.0",
7028
7007
  ]
7029
7008
 
7030
7009
  [[package]]
@@ -7088,10 +7067,10 @@ version = "0.8.3"
7088
7067
  source = "registry+https://github.com/rust-lang/crates.io-index"
7089
7068
  checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63"
7090
7069
  dependencies = [
7091
- "openssl-probe 0.2.0",
7070
+ "openssl-probe",
7092
7071
  "rustls-pki-types",
7093
7072
  "schannel",
7094
- "security-framework 3.5.1",
7073
+ "security-framework",
7095
7074
  ]
7096
7075
 
7097
7076
  [[package]]
@@ -7128,7 +7107,7 @@ dependencies = [
7128
7107
  "rustls-native-certs",
7129
7108
  "rustls-platform-verifier-android",
7130
7109
  "rustls-webpki 0.103.13",
7131
- "security-framework 3.5.1",
7110
+ "security-framework",
7132
7111
  "security-framework-sys",
7133
7112
  "webpki-root-certs",
7134
7113
  "windows-sys 0.61.2",
@@ -7272,19 +7251,6 @@ dependencies = [
7272
7251
  "zeroize",
7273
7252
  ]
7274
7253
 
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
7254
  [[package]]
7289
7255
  name = "security-framework"
7290
7256
  version = "3.5.1"
@@ -7613,7 +7579,7 @@ version = "0.8.9"
7613
7579
  source = "registry+https://github.com/rust-lang/crates.io-index"
7614
7580
  checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451"
7615
7581
  dependencies = [
7616
- "heck 0.4.1",
7582
+ "heck 0.5.0",
7617
7583
  "proc-macro2",
7618
7584
  "quote",
7619
7585
  "syn 2.0.117",
@@ -7894,9 +7860,9 @@ dependencies = [
7894
7860
 
7895
7861
  [[package]]
7896
7862
  name = "target-lexicon"
7897
- version = "0.12.16"
7863
+ version = "0.13.5"
7898
7864
  source = "registry+https://github.com/rust-lang/crates.io-index"
7899
- checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
7865
+ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
7900
7866
 
7901
7867
  [[package]]
7902
7868
  name = "tempfile"
@@ -8297,6 +8263,12 @@ dependencies = [
8297
8263
  "syn 2.0.117",
8298
8264
  ]
8299
8265
 
8266
+ [[package]]
8267
+ name = "typed-path"
8268
+ version = "0.12.3"
8269
+ source = "registry+https://github.com/rust-lang/crates.io-index"
8270
+ checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e"
8271
+
8300
8272
  [[package]]
8301
8273
  name = "typeid"
8302
8274
  version = "1.0.3"
@@ -8433,12 +8405,6 @@ version = "0.2.6"
8433
8405
  source = "registry+https://github.com/rust-lang/crates.io-index"
8434
8406
  checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
8435
8407
 
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
8408
  [[package]]
8443
8409
  name = "untrusted"
8444
8410
  version = "0.7.1"
@@ -9320,32 +9286,29 @@ dependencies = [
9320
9286
 
9321
9287
  [[package]]
9322
9288
  name = "zip"
9323
- version = "2.4.2"
9289
+ version = "6.0.0"
9324
9290
  source = "registry+https://github.com/rust-lang/crates.io-index"
9325
- checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50"
9291
+ checksum = "eb2a05c7c36fde6c09b08576c9f7fb4cda705990f73b58fe011abf7dfb24168b"
9326
9292
  dependencies = [
9327
9293
  "arbitrary",
9328
9294
  "crc32fast",
9329
- "crossbeam-utils",
9330
- "displaydoc",
9331
9295
  "flate2",
9332
9296
  "indexmap 2.13.0",
9333
9297
  "memchr",
9334
- "thiserror 2.0.18",
9335
9298
  "zopfli",
9336
9299
  ]
9337
9300
 
9338
9301
  [[package]]
9339
9302
  name = "zip"
9340
- version = "6.0.0"
9303
+ version = "7.2.0"
9341
9304
  source = "registry+https://github.com/rust-lang/crates.io-index"
9342
- checksum = "eb2a05c7c36fde6c09b08576c9f7fb4cda705990f73b58fe011abf7dfb24168b"
9305
+ checksum = "c42e33efc22a0650c311c2ef19115ce232583abbe80850bc8b66509ebef02de0"
9343
9306
  dependencies = [
9344
- "arbitrary",
9345
9307
  "crc32fast",
9346
9308
  "flate2",
9347
9309
  "indexmap 2.13.0",
9348
9310
  "memchr",
9311
+ "typed-path",
9349
9312
  "zopfli",
9350
9313
  ]
9351
9314
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: floe-python
3
- Version: 0.5.6
3
+ Version: 0.6.1
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.1"
4
4
  edition = "2021"
5
5
  description = "Core library for Floe, a YAML-driven technical ingestion tool."
6
6
  license = "MIT"
@@ -51,13 +51,14 @@ orc-rust = "0.7.1"
51
51
  # split the RecordBatch type and break `dataframe_to_record_batch` ingestion.
52
52
  duckdb = { version = "=1.10500.0", features = ["bundled", "appender-arrow"], optional = true }
53
53
 
54
- reqwest = { version = "0.12", default-features = true, features = ["native-tls-vendored", "json", "blocking"] }
54
+ reqwest = { version = "0.13", default-features = true, features = ["native-tls-vendored", "json", "blocking"] }
55
55
  sha2 = "0.10"
56
+ hmac = "0.12"
56
57
  hex = "0.4"
57
58
  thiserror = "1"
58
59
 
59
60
  [dev-dependencies]
60
- rust_xlsxwriter = "0.67"
61
+ rust_xlsxwriter = "0.95"
61
62
  mockito = "1"
62
63
 
63
64
  [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