floe-python 0.6.4__tar.gz → 0.6.6__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.
- {floe_python-0.6.4 → floe_python-0.6.6}/Cargo.lock +3 -3
- {floe_python-0.6.4 → floe_python-0.6.6}/PKG-INFO +1 -1
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/Cargo.toml +1 -1
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/config/location.rs +43 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/iceberg/glue.rs +46 -3
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/iceberg.rs +1 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/manifest/builder.rs +4 -9
- floe_python-0.6.6/crates/floe-core/tests/unit/config/location.rs +44 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/mod.rs +1 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/manifest/mod.rs +36 -7
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/Cargo.toml +2 -2
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/pyproject.duckdb.toml +2 -2
- {floe_python-0.6.4 → floe_python-0.6.6}/pyproject.toml +1 -1
- {floe_python-0.6.4 → floe_python-0.6.6}/Cargo.toml +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/README.md +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/README.md +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/add_entity.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/checks/cast.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/checks/mismatch.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/checks/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/checks/normalize.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/checks/not_null.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/checks/unique.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/config/catalog.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/config/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/config/parse.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/config/storage.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/config/template.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/config/types.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/config/validate.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/config/yaml_decode.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/errors.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/format.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/read/avro.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/read/csv.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/read/fixed_width.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/read/json.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/read/json_selector.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/read/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/read/orc.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/read/parquet.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/read/xlsx.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/read/xml.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/read/xml_selector.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/core/extensions.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/core/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/core/paths.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/core/placement.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/core/planner.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/core/uri.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/core/validation.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/object_store.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/ops/archive.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/ops/inputs.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/ops/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/ops/output.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/providers/adls.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/providers/gcs.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/providers/local.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/providers/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/providers/s3.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/storage/target.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/unique_seed/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/accepted.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/arrow_convert.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/csv.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/delta/commit_metrics.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/delta/options.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/delta/record_batch.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/delta/unity.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/delta/unity_tests.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/delta.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/duckdb/conn.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/duckdb/merge.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/duckdb.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/iceberg/context.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/iceberg/data_files.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/iceberg/metadata.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/iceberg/rest.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/iceberg/schema.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/metrics.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/parquet.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/parts.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/sink_format.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/strategy/append.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/strategy/merge/keys.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/strategy/merge/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/strategy/merge/scd1.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/strategy/merge/scd2.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/strategy/merge/shared.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/strategy/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/strategy/overwrite.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/lib.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/lineage/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/log.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/manifest/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/manifest/model.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/manifest/reconstruct.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/profile/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/profile/parse.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/profile/types.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/profile/validate.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/report/build.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/report/entity.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/report/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/report/output.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/run/context.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/run/entity/accepted_buffer.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/run/entity/accepted_write.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/run/entity/incremental.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/run/entity/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/run/entity/pii.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/run/entity/precheck.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/run/entity/process.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/run/entity/resolve.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/run/entity/validate_split.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/run/events.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/run/file.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/run/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/run/output.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/run/perf.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/runner/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/runner/outcome.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/runtime.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/secret.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/state/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/vars/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/vars/resolve.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/warnings.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration/archive_run.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration/composite_unique.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration/delta_run.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration/dry_run.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration/duckdb_run.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration/fixed_width.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration/iceberg_gcs_run.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration/iceberg_glue_run.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration/iceberg_run.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration/iceberg_s3_run.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration/json_selectors.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration/local_run.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration/path_normalization.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration/run_entities_filter.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/integration.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/common.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/add_entity.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/adls_storage.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/adls_validation.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/catalogs.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/config_validation.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/duckdb_validation.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/gcs_storage.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/gcs_validation.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/lineage_validation.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/local_storage.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/parse.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/pii_validation.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/remote_base.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/storage_resolver_uri.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/config/templating.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/format.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/read/avro_input.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/read/csv_nulls.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/read/json_array.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/read/json_ndjson.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/read/json_selector.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/read/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/read/orc_input.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/read/parquet_input.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/read/tsv.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/read/xlsx_input.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/read/xml.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/read/xml_selector.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/storage/adls.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/storage/adls_integration.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/storage/gcs.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/storage/inputs.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/storage/local.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/storage/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/storage/paths.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/storage/planner.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/storage/s3.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/storage/target.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/write/delta_merge.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/write/delta_write.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/write/iceberg_write.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/write/metrics.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/write/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/write/object_store.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/write/parquet_write.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/write/parts.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/io/write/rejected_csv.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/profile/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/profile/parse.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/profile/validate.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/report/accepted_output.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/report/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/report/storage.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/run/check_order.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/run/checks.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/run/entity/accepted_output.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/run/entity/incremental.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/run/entity/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/run/lineage.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/run/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/run/normalize.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/run/pii.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/run/report.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/run/schema_mismatch.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/runner/adapter.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/runner/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/state/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/vars/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit/vars/resolve.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/tests/unit.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/.gitignore +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/README.md +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/src/functions.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/src/lib.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/src/observer.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/src/types/config.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/src/types/errors.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/src/types/mod.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/src/types/outcome.rs +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/tests/fixtures/config.yml +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/tests/fixtures/in/customer/customers_valid.csv +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/tests/fixtures/invalid_config.yml +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/tests/fixtures/profile.yml +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-python/tests/test_floe.py +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/python/floe/__init__.py +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/python/floe/_floe.pyi +0 -0
- {floe_python-0.6.4 → floe_python-0.6.6}/python/floe/py.typed +0 -0
|
@@ -3340,7 +3340,7 @@ dependencies = [
|
|
|
3340
3340
|
|
|
3341
3341
|
[[package]]
|
|
3342
3342
|
name = "floe-cli"
|
|
3343
|
-
version = "0.6.
|
|
3343
|
+
version = "0.6.6"
|
|
3344
3344
|
dependencies = [
|
|
3345
3345
|
"assert_cmd",
|
|
3346
3346
|
"clap",
|
|
@@ -3353,7 +3353,7 @@ dependencies = [
|
|
|
3353
3353
|
|
|
3354
3354
|
[[package]]
|
|
3355
3355
|
name = "floe-core"
|
|
3356
|
-
version = "0.6.
|
|
3356
|
+
version = "0.6.6"
|
|
3357
3357
|
dependencies = [
|
|
3358
3358
|
"apache-avro",
|
|
3359
3359
|
"arrow",
|
|
@@ -3399,7 +3399,7 @@ dependencies = [
|
|
|
3399
3399
|
|
|
3400
3400
|
[[package]]
|
|
3401
3401
|
name = "floe-python"
|
|
3402
|
-
version = "0.6.
|
|
3402
|
+
version = "0.6.6"
|
|
3403
3403
|
dependencies = [
|
|
3404
3404
|
"floe-core",
|
|
3405
3405
|
"pyo3",
|
|
@@ -10,6 +10,11 @@ pub struct ConfigLocation {
|
|
|
10
10
|
pub path: PathBuf,
|
|
11
11
|
pub base: ConfigBase,
|
|
12
12
|
pub display: String,
|
|
13
|
+
/// URI recorded as `config_uri` / `profile_uri` in the manifest:
|
|
14
|
+
/// `local://<path-as-typed>` for local configs (normalized, not canonicalized,
|
|
15
|
+
/// so a relative `-c` stays relative and the manifest does not depend on where
|
|
16
|
+
/// the file physically lives), or the scheme-normalized remote URI otherwise.
|
|
17
|
+
pub uri: String,
|
|
13
18
|
_temp_dir: Option<TempDir>,
|
|
14
19
|
}
|
|
15
20
|
|
|
@@ -18,10 +23,13 @@ pub fn resolve_config_location(input: &str) -> FloeResult<ConfigLocation> {
|
|
|
18
23
|
let temp_dir = TempDir::new()?;
|
|
19
24
|
let local_path = download_remote_config(input, temp_dir.path())?;
|
|
20
25
|
let base = ConfigBase::remote_from_uri(temp_dir.path().to_path_buf(), input)?;
|
|
26
|
+
// Remote URIs are already environment-independent; keep them absolute.
|
|
27
|
+
let uri = storage::uri::normalize_remote_uri(input).into_owned();
|
|
21
28
|
Ok(ConfigLocation {
|
|
22
29
|
path: local_path,
|
|
23
30
|
base,
|
|
24
31
|
display: input.to_string(),
|
|
32
|
+
uri,
|
|
25
33
|
_temp_dir: Some(temp_dir),
|
|
26
34
|
})
|
|
27
35
|
} else {
|
|
@@ -37,11 +45,46 @@ pub fn resolve_config_location(input: &str) -> FloeResult<ConfigLocation> {
|
|
|
37
45
|
path: canonical.clone(),
|
|
38
46
|
base,
|
|
39
47
|
display: canonical.display().to_string(),
|
|
48
|
+
uri: format!("local://{}", normalize_input_path(input)),
|
|
40
49
|
_temp_dir: None,
|
|
41
50
|
})
|
|
42
51
|
}
|
|
43
52
|
}
|
|
44
53
|
|
|
54
|
+
/// Lexically normalize a local path for `config_uri` / `profile_uri` without
|
|
55
|
+
/// touching the filesystem, so a relative `-c` stays relative and the same path is
|
|
56
|
+
/// produced on any machine. Uses `/` as the separator.
|
|
57
|
+
fn normalize_input_path(input: &str) -> String {
|
|
58
|
+
use std::path::Component;
|
|
59
|
+
|
|
60
|
+
let mut parts: Vec<String> = Vec::new();
|
|
61
|
+
let mut has_prefix = false;
|
|
62
|
+
for comp in Path::new(input).components() {
|
|
63
|
+
match comp {
|
|
64
|
+
Component::CurDir => {}
|
|
65
|
+
Component::Prefix(prefix) => {
|
|
66
|
+
has_prefix = true;
|
|
67
|
+
parts.push(prefix.as_os_str().to_string_lossy().into_owned());
|
|
68
|
+
}
|
|
69
|
+
// A Windows drive/UNC prefix already carries the root; skip the trailing
|
|
70
|
+
// RootDir so we emit `C:/...`, not `C://...` (which looks like a scheme).
|
|
71
|
+
Component::RootDir => {
|
|
72
|
+
if !has_prefix {
|
|
73
|
+
parts.push(String::new());
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
other => parts.push(other.as_os_str().to_string_lossy().into_owned()),
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
let joined = parts.join("/");
|
|
81
|
+
if joined.is_empty() {
|
|
82
|
+
".".to_string()
|
|
83
|
+
} else {
|
|
84
|
+
joined
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
45
88
|
fn download_remote_config(uri: &str, temp_dir: &Path) -> FloeResult<PathBuf> {
|
|
46
89
|
let normalized = storage::uri::normalize_remote_uri(uri);
|
|
47
90
|
let uri = normalized.as_ref();
|
|
@@ -2,10 +2,11 @@ use crate::errors::FloeError;
|
|
|
2
2
|
use aws_config::meta::region::RegionProviderChain;
|
|
3
3
|
use aws_sdk_glue::config::Region as GlueRegion;
|
|
4
4
|
use aws_sdk_glue::types::{
|
|
5
|
-
|
|
6
|
-
TableInput as GlueTableInput,
|
|
5
|
+
Column as GlueColumn, DatabaseInput as GlueDatabaseInput,
|
|
6
|
+
StorageDescriptor as GlueStorageDescriptor, TableInput as GlueTableInput,
|
|
7
7
|
};
|
|
8
8
|
use aws_sdk_glue::Client as GlueClient;
|
|
9
|
+
use iceberg::spec::{PrimitiveType, Schema, Type};
|
|
9
10
|
|
|
10
11
|
use crate::{warnings, FloeResult};
|
|
11
12
|
|
|
@@ -127,6 +128,7 @@ pub(super) async fn upsert_glue_table(
|
|
|
127
128
|
table_root_uri: &str,
|
|
128
129
|
metadata_location: &str,
|
|
129
130
|
version_id: Option<&str>,
|
|
131
|
+
schema: &Schema,
|
|
130
132
|
) -> FloeResult<()> {
|
|
131
133
|
let client = build_glue_client(&glue_cfg.region).await?;
|
|
132
134
|
ensure_glue_database(
|
|
@@ -136,7 +138,7 @@ pub(super) async fn upsert_glue_table(
|
|
|
136
138
|
)
|
|
137
139
|
.await?;
|
|
138
140
|
|
|
139
|
-
let table_input = build_glue_table_input(glue_cfg, table_root_uri, metadata_location);
|
|
141
|
+
let table_input = build_glue_table_input(glue_cfg, table_root_uri, metadata_location, schema);
|
|
140
142
|
|
|
141
143
|
let create_result = client
|
|
142
144
|
.create_table()
|
|
@@ -259,13 +261,54 @@ async fn ensure_glue_database(
|
|
|
259
261
|
}
|
|
260
262
|
}
|
|
261
263
|
|
|
264
|
+
fn iceberg_type_to_glue_type(t: &Type) -> String {
|
|
265
|
+
match t {
|
|
266
|
+
Type::Primitive(p) => match p {
|
|
267
|
+
PrimitiveType::Boolean => "boolean".into(),
|
|
268
|
+
PrimitiveType::Int => "int".into(),
|
|
269
|
+
PrimitiveType::Long => "bigint".into(),
|
|
270
|
+
PrimitiveType::Float => "float".into(),
|
|
271
|
+
PrimitiveType::Double => "double".into(),
|
|
272
|
+
PrimitiveType::Decimal { precision, scale } => {
|
|
273
|
+
format!("decimal({precision},{scale})")
|
|
274
|
+
}
|
|
275
|
+
PrimitiveType::Date => "date".into(),
|
|
276
|
+
PrimitiveType::Time => "string".into(),
|
|
277
|
+
PrimitiveType::Timestamp
|
|
278
|
+
| PrimitiveType::Timestamptz
|
|
279
|
+
| PrimitiveType::TimestampNs
|
|
280
|
+
| PrimitiveType::TimestamptzNs => "timestamp".into(),
|
|
281
|
+
PrimitiveType::String | PrimitiveType::Uuid => "string".into(),
|
|
282
|
+
PrimitiveType::Fixed(_) | PrimitiveType::Binary => "binary".into(),
|
|
283
|
+
},
|
|
284
|
+
Type::Struct(_) => "struct<>".into(),
|
|
285
|
+
Type::List(_) => "array<string>".into(),
|
|
286
|
+
Type::Map(_) => "map<string,string>".into(),
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
262
290
|
fn build_glue_table_input(
|
|
263
291
|
glue_cfg: &GlueIcebergCatalogConfig,
|
|
264
292
|
table_root_uri: &str,
|
|
265
293
|
metadata_location: &str,
|
|
294
|
+
schema: &Schema,
|
|
266
295
|
) -> GlueTableInput {
|
|
296
|
+
let columns: Vec<GlueColumn> = schema
|
|
297
|
+
.as_struct()
|
|
298
|
+
.fields()
|
|
299
|
+
.iter()
|
|
300
|
+
.map(|f| {
|
|
301
|
+
GlueColumn::builder()
|
|
302
|
+
.name(f.name.as_str())
|
|
303
|
+
.r#type(iceberg_type_to_glue_type(&f.field_type))
|
|
304
|
+
.build()
|
|
305
|
+
.expect("glue column builder validated")
|
|
306
|
+
})
|
|
307
|
+
.collect();
|
|
308
|
+
|
|
267
309
|
let storage_descriptor = GlueStorageDescriptor::builder()
|
|
268
310
|
.location(table_root_uri)
|
|
311
|
+
.set_columns(Some(columns))
|
|
269
312
|
.build();
|
|
270
313
|
|
|
271
314
|
GlueTableInput::builder()
|
|
@@ -378,7 +378,10 @@ fn build_common_manifest(
|
|
|
378
378
|
});
|
|
379
379
|
}
|
|
380
380
|
|
|
381
|
-
|
|
381
|
+
// Use `uri` (the path as typed / resolved remote URI), not the host-absolute
|
|
382
|
+
// `display`, so config_uri and the manifest_id derived from it do not depend on
|
|
383
|
+
// where the config file physically lives.
|
|
384
|
+
let config_uri = config_location.uri.clone();
|
|
382
385
|
let config_checksum = std::fs::read(&config_location.path)
|
|
383
386
|
.ok()
|
|
384
387
|
.map(|b| sha256_hex(&b));
|
|
@@ -536,14 +539,6 @@ fn resolved_uri_to_path(uri: &str) -> String {
|
|
|
536
539
|
}
|
|
537
540
|
}
|
|
538
541
|
|
|
539
|
-
fn canonical_config_uri(display: &str) -> String {
|
|
540
|
-
if display.contains("://") {
|
|
541
|
-
display.to_string()
|
|
542
|
-
} else {
|
|
543
|
-
format!("local://{}", display)
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
|
|
547
542
|
fn build_manifest_id(config_uri: &str, config_checksum: Option<&str>) -> String {
|
|
548
543
|
const FNV_OFFSET_BASIS: u64 = 0xcbf29ce484222325;
|
|
549
544
|
const FNV_PRIME: u64 = 0x100000001b3;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
use floe_core::resolve_config_location;
|
|
2
|
+
|
|
3
|
+
fn write_config(dir: &std::path::Path) -> std::path::PathBuf {
|
|
4
|
+
let path = dir.join("config.yml");
|
|
5
|
+
std::fs::write(&path, "version: \"0.1\"\nentities: []\n").expect("write config");
|
|
6
|
+
path
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
#[test]
|
|
10
|
+
fn local_config_uri_uses_local_scheme() {
|
|
11
|
+
let tmp = tempfile::TempDir::new().expect("temp dir");
|
|
12
|
+
let cfg = write_config(tmp.path());
|
|
13
|
+
let loc = resolve_config_location(cfg.to_str().expect("utf8")).expect("resolve");
|
|
14
|
+
assert!(loc.uri.starts_with("local://"), "uri: {}", loc.uri);
|
|
15
|
+
assert!(loc.uri.ends_with("/config.yml"), "uri: {}", loc.uri);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// The path is preserved lexically, not canonicalized: a `.` is dropped and a `..`
|
|
19
|
+
// bounce survives (canonicalize would collapse it), and separators become `/`.
|
|
20
|
+
#[test]
|
|
21
|
+
fn local_config_uri_is_lexically_normalized() {
|
|
22
|
+
let tmp = tempfile::TempDir::new().expect("temp dir");
|
|
23
|
+
let cfg_dir = tmp.path().join("cfg");
|
|
24
|
+
std::fs::create_dir_all(&cfg_dir).expect("cfg dir");
|
|
25
|
+
write_config(&cfg_dir);
|
|
26
|
+
|
|
27
|
+
let bouncy = format!("{}/./../cfg/config.yml", cfg_dir.display());
|
|
28
|
+
let loc = resolve_config_location(&bouncy).expect("resolve");
|
|
29
|
+
assert!(loc.uri.contains("/../cfg/config.yml"), "uri: {}", loc.uri);
|
|
30
|
+
assert!(!loc.uri.contains("/./"), "uri: {}", loc.uri);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// A Windows drive path must yield `local://C:/...`, not `local://C://...` (which the
|
|
34
|
+
// `local://` prefix would turn into a scheme-colliding, invalid URI). Windows-only
|
|
35
|
+
// because drive prefixes are only parsed on Windows targets.
|
|
36
|
+
#[cfg(windows)]
|
|
37
|
+
#[test]
|
|
38
|
+
fn windows_drive_config_uri_has_single_slash_after_drive() {
|
|
39
|
+
let tmp = tempfile::TempDir::new().expect("temp dir");
|
|
40
|
+
let cfg = write_config(tmp.path());
|
|
41
|
+
let loc = resolve_config_location(cfg.to_str().expect("utf8")).expect("resolve");
|
|
42
|
+
assert!(loc.uri.starts_with("local://"), "uri: {}", loc.uri);
|
|
43
|
+
assert!(!loc.uri.contains("C://"), "uri: {}", loc.uri);
|
|
44
|
+
}
|
|
@@ -16,13 +16,10 @@ fn repo_root() -> PathBuf {
|
|
|
16
16
|
|
|
17
17
|
#[test]
|
|
18
18
|
fn manifest_uses_local_uri_for_local_config() {
|
|
19
|
-
|
|
20
|
-
let
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
.expect("canonicalize config path")
|
|
24
|
-
.display()
|
|
25
|
-
);
|
|
19
|
+
// Pass a canonical path so the expected value is independent of the test's cwd.
|
|
20
|
+
let config_path = std::fs::canonicalize(repo_root().join("example/config.yml"))
|
|
21
|
+
.expect("canonicalize config path");
|
|
22
|
+
let expected_config_uri = format!("local://{}", config_path.display());
|
|
26
23
|
|
|
27
24
|
let config_location = resolve_config_location(
|
|
28
25
|
config_path
|
|
@@ -46,6 +43,38 @@ fn manifest_uses_local_uri_for_local_config() {
|
|
|
46
43
|
assert_eq!(value["config_uri"], expected_config_uri);
|
|
47
44
|
}
|
|
48
45
|
|
|
46
|
+
#[test]
|
|
47
|
+
fn manifest_config_uri_is_not_canonicalized() {
|
|
48
|
+
// config_uri reflects the path as typed, not the canonical path: a lexical `..`
|
|
49
|
+
// bounce (which canonicalize() would collapse) surviving in the output proves
|
|
50
|
+
// the path was preserved as-typed.
|
|
51
|
+
let temp_dir = tempfile::TempDir::new().expect("temp dir");
|
|
52
|
+
let cfg_dir = temp_dir.path().join("cfg");
|
|
53
|
+
std::fs::create_dir_all(&cfg_dir).expect("cfg dir");
|
|
54
|
+
let config_path = cfg_dir.join("config.yml");
|
|
55
|
+
std::fs::write(
|
|
56
|
+
&config_path,
|
|
57
|
+
"version: \"0.1\"\nentities:\n - name: orders\n source:\n format: csv\n path: ./in/orders\n sink:\n write_mode: overwrite\n accepted:\n format: parquet\n path: ./out/orders\n policy:\n severity: warn\n schema:\n columns:\n - name: id\n type: string\n",
|
|
58
|
+
)
|
|
59
|
+
.expect("write config");
|
|
60
|
+
|
|
61
|
+
// <cfg_dir>/../cfg/config.yml — canonicalize() would resolve this to
|
|
62
|
+
// <cfg_dir>/config.yml, dropping the "/../".
|
|
63
|
+
let bouncy = format!("{}/../cfg/config.yml", cfg_dir.display());
|
|
64
|
+
let loc = resolve_config_location(&bouncy).expect("resolve config location");
|
|
65
|
+
let config = load_config(&loc.path).expect("load config");
|
|
66
|
+
let payload = build_common_manifest_json(&loc, &config, &[], None, &ManifestOptions::default())
|
|
67
|
+
.expect("manifest");
|
|
68
|
+
let value: Value = serde_json::from_str(&payload).expect("valid json");
|
|
69
|
+
|
|
70
|
+
let uri = value["config_uri"].as_str().expect("config_uri string");
|
|
71
|
+
assert!(
|
|
72
|
+
uri.contains("/../cfg/config.yml"),
|
|
73
|
+
"config_uri was canonicalized (lost the as-typed form): {uri}"
|
|
74
|
+
);
|
|
75
|
+
assert!(value["manifest_id"].as_str().unwrap().starts_with("mfv1-"));
|
|
76
|
+
}
|
|
77
|
+
|
|
49
78
|
#[test]
|
|
50
79
|
fn manifest_id_is_stable_for_same_config() {
|
|
51
80
|
let config_path = repo_root().join("example/config.yml");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "floe-python"
|
|
3
|
-
version = "0.6.
|
|
3
|
+
version = "0.6.6"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
description = "Python bindings for floe-core (PyO3-based)"
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -14,7 +14,7 @@ name = "_floe"
|
|
|
14
14
|
crate-type = ["cdylib"]
|
|
15
15
|
|
|
16
16
|
[dependencies]
|
|
17
|
-
floe-core = { path = "../floe-core", version = "0.6.
|
|
17
|
+
floe-core = { path = "../floe-core", version = "0.6.6", default-features = false }
|
|
18
18
|
pyo3 = { version = "0.29", features = ["extension-module", "abi3-py310"] }
|
|
19
19
|
serde_json = "1"
|
|
20
20
|
|
|
@@ -22,7 +22,7 @@ build-backend = "maturin"
|
|
|
22
22
|
|
|
23
23
|
[project]
|
|
24
24
|
name = "floe-duckdb"
|
|
25
|
-
version = "0.6.
|
|
25
|
+
version = "0.6.6"
|
|
26
26
|
description = "DuckDB companion extension for floe — adds the native DuckDB sink to the floe Python package"
|
|
27
27
|
readme = "README.md"
|
|
28
28
|
requires-python = ">=3.10"
|
|
@@ -46,7 +46,7 @@ classifiers = [
|
|
|
46
46
|
# only contributes the compiled DuckDB extension module into that package. Pin to
|
|
47
47
|
# the exact lean version so the companion's `_floe_duckdb` ABI always matches the
|
|
48
48
|
# `floe` package it plugs into.
|
|
49
|
-
dependencies = ["floe-python==0.6.
|
|
49
|
+
dependencies = ["floe-python==0.6.6"]
|
|
50
50
|
|
|
51
51
|
[project.urls]
|
|
52
52
|
Homepage = "https://github.com/malon64/floe"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/delta/commit_metrics.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/strategy/merge/keys.rs
RENAMED
|
File without changes
|
|
File without changes
|
{floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/strategy/merge/scd1.rs
RENAMED
|
File without changes
|
{floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/strategy/merge/scd2.rs
RENAMED
|
File without changes
|
{floe_python-0.6.4 → floe_python-0.6.6}/crates/floe-core/src/io/write/strategy/merge/shared.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|