dataframely 2.5.1__tar.gz → 2.6.0__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.
- {dataframely-2.5.1 → dataframely-2.6.0}/.github/workflows/ci.yml +6 -1
- {dataframely-2.5.1 → dataframely-2.6.0}/.pre-commit-config.yaml +8 -1
- {dataframely-2.5.1 → dataframely-2.6.0}/PKG-INFO +2 -2
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_compat.py +17 -2
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/filter_result.py +7 -3
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/schema.py +3 -4
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/guides/faq.md +9 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/pixi.lock +4644 -957
- {dataframely-2.5.1 → dataframely-2.6.0}/pixi.toml +35 -8
- {dataframely-2.5.1 → dataframely-2.6.0}/pyproject.toml +2 -2
- {dataframely-2.5.1 → dataframely-2.6.0}/.copier-answers.yml +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.envrc +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.gitattributes +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.github/CODEOWNERS +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.github/copilot-instructions.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.github/dependabot.yml +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.github/instructions/tests.instructions.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.github/release-drafter.yml +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.github/workflows/build.yml +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.github/workflows/chore.yml +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.github/workflows/copilot-setup-steps.yml +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.github/workflows/nightly.yml +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.github/workflows/scorecard.yml +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.gitignore +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.prettierignore +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.prettierrc +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/.readthedocs.yml +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/Cargo.lock +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/Cargo.toml +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/LICENSE +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/README.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/SECURITY.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/__init__.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_base_schema.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_deprecation.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_filter.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_match_to_schema.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_native.pyi +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_plugin.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_polars.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_pydantic.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_rule.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_serialization.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_storage/__init__.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_storage/_base.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_storage/_exc.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_storage/constants.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_storage/delta.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_storage/parquet.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/_typing.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/collection/__init__.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/collection/_base.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/collection/collection.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/collection/filter_result.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/__init__.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/_base.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/_mixins.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/_registry.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/_utils.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/any.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/array.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/binary.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/bool.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/categorical.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/datetime.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/decimal.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/enum.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/float.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/integer.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/list.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/object.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/string.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/columns/struct.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/config.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/exc.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/functional.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/py.typed +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/random.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/testing/__init__.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/testing/const.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/testing/factory.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/testing/mask.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/testing/rules.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/dataframely/testing/storage.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docker-compose.yml +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/_static/custom.css +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/_static/favicon.ico +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/_templates/autosummary/class.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/_templates/autosummary/method.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/_templates/classes/column.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/_templates/classes/error.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/_templates/classes/filter_result.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/collection/generation.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/collection/index.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/collection/io.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/collection/metadata.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/collection/operations.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/collection/validation.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/columns/index.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/errors/index.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/filter_result/failure_info.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/filter_result/index.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/index.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/misc/index.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/schema/conversion.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/schema/generation.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/schema/index.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/schema/io.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/schema/metadata.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/api/schema/validation.rst +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/conf.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/css/custom.css +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/guides/development.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/guides/examples/index.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/guides/examples/real-world.ipynb +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/guides/features/column-metadata.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/guides/features/data-generation.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/guides/features/index.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/guides/features/lazy-validation.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/guides/features/primary-keys.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/guides/features/serialization.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/guides/features/sql-generation.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/guides/index.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/guides/migration/index.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/guides/migration/v1-v2.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/guides/quickstart.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/docs/index.md +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/rust-toolchain.toml +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/src/lib.rs +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/src/polars_plugin/mod.rs +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/src/polars_plugin/rule_failure.rs +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/src/polars_plugin/utils.rs +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/src/polars_plugin/validation_error.rs +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/src/regex/errdefs.rs +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/src/regex/mod.rs +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/src/regex/repr.rs +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/benches/conftest.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/benches/test_collection.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/benches/test_failure.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/benches/test_schema.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_base.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_cast.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_collection_future_annotations.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_create_empty.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_filter_one_to_n.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_filter_validate.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_ignore_in_filter.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_implementation.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_join.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_matches.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_optional_members.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_propagate_row_failures.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_repr.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_sample.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_serialization.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_storage.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/collection/test_validate_input.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/column_types/__init__.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/column_types/test_any.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/column_types/test_array.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/column_types/test_binary.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/column_types/test_datetime.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/column_types/test_decimal.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/column_types/test_enum.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/column_types/test_float.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/column_types/test_integer.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/column_types/test_list.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/column_types/test_object.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/column_types/test_string.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/column_types/test_struct.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/columns/__init__.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/columns/test_alias.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/columns/test_base.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/columns/test_check.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/columns/test_default_dtypes.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/columns/test_matches.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/columns/test_metadata.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/columns/test_polars_schema.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/columns/test_pyarrow.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/columns/test_rules.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/columns/test_sample.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/columns/test_sqlalchemy_columns.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/columns/test_str.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/columns/test_utils.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/conftest.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/core_validation/__init__.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/core_validation/test_match_to_schema.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/core_validation/test_rule_evaluation.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/failure_info/test_storage.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/functional/test_concat.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/functional/test_relationships.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/schema/test_base.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/schema/test_cast.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/schema/test_create_empty.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/schema/test_create_empty_if_none.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/schema/test_filter.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/schema/test_inheritance.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/schema/test_matches.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/schema/test_read_write_parquet.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/schema/test_repr.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/schema/test_rule_implementation.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/schema/test_sample.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/schema/test_serialization.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/schema/test_storage.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/schema/test_validate.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/storage/test_delta.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/test_compat.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/test_config.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/test_deprecation.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/test_factory.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/test_native_regex.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/test_pydantic.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/test_random.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/test_serialization.py +0 -0
- {dataframely-2.5.1 → dataframely-2.6.0}/tests/test_typing.py +0 -0
|
@@ -26,7 +26,7 @@ jobs:
|
|
|
26
26
|
- name: Set up pixi
|
|
27
27
|
uses: prefix-dev/setup-pixi@82d477f15f3a381dbcc8adc1206ce643fe110fb7 # v0.9.3
|
|
28
28
|
with:
|
|
29
|
-
environments: default lint
|
|
29
|
+
environments: default lint polars-minimal
|
|
30
30
|
- name: Install Rust
|
|
31
31
|
run: rustup show
|
|
32
32
|
- name: Cache Rust dependencies
|
|
@@ -45,6 +45,7 @@ jobs:
|
|
|
45
45
|
environment: [py310, py311, py312, py313, py314]
|
|
46
46
|
with_optionals: [false]
|
|
47
47
|
include:
|
|
48
|
+
# Test with optional dependencies across OSes
|
|
48
49
|
- os: ubuntu-latest
|
|
49
50
|
environment: py314-optionals
|
|
50
51
|
with_optionals: true
|
|
@@ -54,6 +55,10 @@ jobs:
|
|
|
54
55
|
- os: macos-latest
|
|
55
56
|
environment: py314-optionals
|
|
56
57
|
with_optionals: true
|
|
58
|
+
# Test polars backward compatibility, only one OS
|
|
59
|
+
- os: ubuntu-latest
|
|
60
|
+
environment: polars-minimal
|
|
61
|
+
with_optionals: false
|
|
57
62
|
steps:
|
|
58
63
|
- name: Checkout branch
|
|
59
64
|
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
@@ -6,7 +6,7 @@ repos:
|
|
|
6
6
|
# workaround for https://github.com/prefix-dev/pixi/issues/1482
|
|
7
7
|
- id: pixi-install
|
|
8
8
|
name: pixi-install
|
|
9
|
-
entry: pixi install -e default -e lint
|
|
9
|
+
entry: pixi install -e default -e lint -e polars-minimal
|
|
10
10
|
language: system
|
|
11
11
|
always_run: true
|
|
12
12
|
require_serial: true
|
|
@@ -48,6 +48,13 @@ repos:
|
|
|
48
48
|
language: system
|
|
49
49
|
types: [python]
|
|
50
50
|
require_serial: true
|
|
51
|
+
# mypy with oldest supported polars version
|
|
52
|
+
- id: mypy
|
|
53
|
+
name: mypy-polars-minimal
|
|
54
|
+
entry: pixi run -e default-polars-minimal mypy --cache-dir .mypy_cache_polars_minimal
|
|
55
|
+
language: system
|
|
56
|
+
types: [python]
|
|
57
|
+
require_serial: true
|
|
51
58
|
# cargo-fmt
|
|
52
59
|
- id: cargo-fmt
|
|
53
60
|
name: cargo-fmt
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dataframely
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.6.0
|
|
4
4
|
Classifier: Programming Language :: Python :: 3
|
|
5
5
|
Classifier: Programming Language :: Python :: 3.10
|
|
6
6
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -9,7 +9,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
9
9
|
Classifier: Programming Language :: Python :: 3.14
|
|
10
10
|
Requires-Dist: fsspec>=2025.9
|
|
11
11
|
Requires-Dist: numpy
|
|
12
|
-
Requires-Dist: polars>=1.
|
|
12
|
+
Requires-Dist: polars>=1.35
|
|
13
13
|
Requires-Dist: typing-extensions ; python_full_version < '3.11'
|
|
14
14
|
Requires-Dist: deltalake ; extra == 'deltalake'
|
|
15
15
|
Requires-Dist: pyarrow ; extra == 'pyarrow'
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# Copyright (c) QuantCo 2025-2026
|
|
2
2
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
3
3
|
|
|
4
|
-
|
|
5
4
|
from typing import Any
|
|
6
5
|
|
|
6
|
+
import polars as pl
|
|
7
|
+
|
|
7
8
|
|
|
8
9
|
class _DummyModule: # pragma: no cover
|
|
9
10
|
def __init__(self, module: str) -> None:
|
|
@@ -58,7 +59,6 @@ try:
|
|
|
58
59
|
except ImportError:
|
|
59
60
|
pa = _DummyModule("pyarrow")
|
|
60
61
|
|
|
61
|
-
|
|
62
62
|
# -------------------------------------- PYDANTIC ------------------------------------ #
|
|
63
63
|
|
|
64
64
|
try:
|
|
@@ -71,6 +71,20 @@ try:
|
|
|
71
71
|
except ImportError:
|
|
72
72
|
pydantic_core_schema = _DummyModule("pydantic_core_schema") # type: ignore
|
|
73
73
|
|
|
74
|
+
# --------------------------------------- POLARS ------------------------------------- #
|
|
75
|
+
|
|
76
|
+
_polars_version_tuple = tuple(
|
|
77
|
+
int(part) if part.isdigit() else part for part in pl.__version__.split(".")
|
|
78
|
+
)
|
|
79
|
+
if _polars_version_tuple < (1, 36):
|
|
80
|
+
from polars._typing import ( # type: ignore[attr-defined,unused-ignore]
|
|
81
|
+
PartitioningScheme as PartitionSchemeOrSinkDirectory,
|
|
82
|
+
)
|
|
83
|
+
else:
|
|
84
|
+
from polars.io.partition import ( # type: ignore[no-redef,attr-defined,unused-ignore]
|
|
85
|
+
_SinkDirectory as PartitionSchemeOrSinkDirectory,
|
|
86
|
+
)
|
|
87
|
+
|
|
74
88
|
# ------------------------------------------------------------------------------------ #
|
|
75
89
|
|
|
76
90
|
__all__ = [
|
|
@@ -78,6 +92,7 @@ __all__ = [
|
|
|
78
92
|
"DeltaTable",
|
|
79
93
|
"Dialect",
|
|
80
94
|
"MSDialect_pyodbc",
|
|
95
|
+
"PartitionSchemeOrSinkDirectory",
|
|
81
96
|
"pa",
|
|
82
97
|
"PGDialect_psycopg2",
|
|
83
98
|
"pydantic_core_schema",
|
|
@@ -10,11 +10,11 @@ from pathlib import Path
|
|
|
10
10
|
from typing import IO, TYPE_CHECKING, Any, Generic, TypeVar
|
|
11
11
|
|
|
12
12
|
import polars as pl
|
|
13
|
-
from polars.io.partition import _SinkDirectory as SinkDirectory
|
|
14
13
|
|
|
15
14
|
from dataframely._base_schema import BaseSchema
|
|
16
15
|
from dataframely._compat import deltalake
|
|
17
16
|
|
|
17
|
+
from ._compat import PartitionSchemeOrSinkDirectory
|
|
18
18
|
from ._storage import StorageBackend
|
|
19
19
|
from ._storage.delta import DeltaStorageBackend
|
|
20
20
|
from ._storage.parquet import ParquetStorageBackend
|
|
@@ -32,6 +32,7 @@ UNKNOWN_SCHEMA_NAME = "__DATAFRAMELY_UNKNOWN__"
|
|
|
32
32
|
|
|
33
33
|
S = TypeVar("S", bound=BaseSchema)
|
|
34
34
|
|
|
35
|
+
|
|
35
36
|
# ----------------------------------- FILTER RESULT ---------------------------------- #
|
|
36
37
|
|
|
37
38
|
|
|
@@ -73,7 +74,8 @@ class LazyFilterResult(NamedTuple, Generic[S]):
|
|
|
73
74
|
[self.result.lazy(), self.failure._lf], **kwargs
|
|
74
75
|
)
|
|
75
76
|
return FilterResult(
|
|
76
|
-
|
|
77
|
+
# Whether the type ignore is necessary depends on the polars version.
|
|
78
|
+
result=result_df, # type: ignore[arg-type,unused-ignore]
|
|
77
79
|
failure=FailureInfo(
|
|
78
80
|
failure_df.lazy(), self.failure._rule_columns, self.failure.schema
|
|
79
81
|
),
|
|
@@ -164,7 +166,9 @@ class FailureInfo(Generic[S]):
|
|
|
164
166
|
self._write(ParquetStorageBackend(), file=file, **kwargs)
|
|
165
167
|
|
|
166
168
|
def sink_parquet(
|
|
167
|
-
self,
|
|
169
|
+
self,
|
|
170
|
+
file: str | Path | IO[bytes] | PartitionSchemeOrSinkDirectory,
|
|
171
|
+
**kwargs: Any,
|
|
168
172
|
) -> None:
|
|
169
173
|
"""Stream the failure info to a single parquet file.
|
|
170
174
|
|
|
@@ -15,12 +15,11 @@ from typing import IO, Any, Literal, overload
|
|
|
15
15
|
import polars as pl
|
|
16
16
|
import polars.exceptions as plexc
|
|
17
17
|
from polars._typing import FileSource
|
|
18
|
-
from polars.io.partition import _SinkDirectory as SinkDirectory
|
|
19
18
|
|
|
20
19
|
from dataframely._compat import deltalake
|
|
21
20
|
|
|
22
21
|
from ._base_schema import ORIGINAL_COLUMN_PREFIX, BaseSchema
|
|
23
|
-
from ._compat import pa, sa
|
|
22
|
+
from ._compat import PartitionSchemeOrSinkDirectory, pa, sa
|
|
24
23
|
from ._match_to_schema import match_to_schema
|
|
25
24
|
from ._native import format_rule_failures
|
|
26
25
|
from ._plugin import all_rules, all_rules_horizontal, all_rules_required
|
|
@@ -55,9 +54,9 @@ if sys.version_info >= (3, 11):
|
|
|
55
54
|
else:
|
|
56
55
|
from typing_extensions import Self
|
|
57
56
|
|
|
58
|
-
|
|
59
57
|
_COLUMN_VALID = "__DATAFRAMELY_VALID__"
|
|
60
58
|
|
|
59
|
+
|
|
61
60
|
# ------------------------------------------------------------------------------------ #
|
|
62
61
|
# SCHEMA DEFINITION #
|
|
63
62
|
# ------------------------------------------------------------------------------------ #
|
|
@@ -901,7 +900,7 @@ class Schema(BaseSchema, ABC):
|
|
|
901
900
|
cls,
|
|
902
901
|
lf: LazyFrame[Self],
|
|
903
902
|
/,
|
|
904
|
-
file: str | Path | IO[bytes] |
|
|
903
|
+
file: str | Path | IO[bytes] | PartitionSchemeOrSinkDirectory,
|
|
905
904
|
**kwargs: Any,
|
|
906
905
|
) -> None:
|
|
907
906
|
"""Stream a typed lazy frame with this schema to a parquet file.
|
|
@@ -33,3 +33,12 @@ class UserSchema(dy.Schema):
|
|
|
33
33
|
## How do I fix the ruff error `First argument of a method should be named self`?
|
|
34
34
|
|
|
35
35
|
See our documentation on [group rules](./quickstart.md#group-rules).
|
|
36
|
+
|
|
37
|
+
## What versions of `polars` does `dataframely` support?
|
|
38
|
+
|
|
39
|
+
Our CI automatically tests `dataframely` for a minimal supported version of `polars`, which is currently `1.35.*`,
|
|
40
|
+
and the latest stable version.
|
|
41
|
+
We aim to extend support for new `polars` versions as they are released.
|
|
42
|
+
|
|
43
|
+
If your `polars` version is not in the range of supported versions, `dataframely` may still work, but you may
|
|
44
|
+
encounter unexpected issues.
|