dataframely 2.4.0__tar.gz → 2.5.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.
- {dataframely-2.4.0 → dataframely-2.5.1}/.github/workflows/build.yml +8 -8
- {dataframely-2.4.0 → dataframely-2.5.1}/.github/workflows/ci.yml +7 -7
- {dataframely-2.4.0 → dataframely-2.5.1}/.github/workflows/copilot-setup-steps.yml +3 -3
- {dataframely-2.4.0 → dataframely-2.5.1}/.github/workflows/nightly.yml +2 -2
- {dataframely-2.4.0 → dataframely-2.5.1}/.github/workflows/scorecard.yml +3 -3
- {dataframely-2.4.0 → dataframely-2.5.1}/PKG-INFO +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/__init__.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_base_schema.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_compat.py +4 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_deprecation.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_filter.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_match_to_schema.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_plugin.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_polars.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_pydantic.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_rule.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_serialization.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_storage/__init__.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_storage/_base.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_storage/_exc.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_storage/constants.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_storage/delta.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_storage/parquet.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_typing.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/collection/__init__.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/collection/_base.py +6 -2
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/collection/collection.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/collection/filter_result.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/__init__.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/_base.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/_mixins.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/_registry.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/_utils.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/any.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/array.py +12 -3
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/binary.py +6 -4
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/bool.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/categorical.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/datetime.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/decimal.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/enum.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/float.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/integer.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/list.py +8 -3
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/object.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/string.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/columns/struct.py +7 -4
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/config.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/exc.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/filter_result.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/functional.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/random.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/schema.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/testing/__init__.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/testing/const.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/testing/factory.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/testing/mask.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/testing/rules.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/testing/storage.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/conf.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/pixi.lock +7506 -7616
- {dataframely-2.4.0 → dataframely-2.5.1}/pyproject.toml +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/benches/conftest.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/benches/test_collection.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/benches/test_failure.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/benches/test_schema.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_base.py +37 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_cast.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_collection_future_annotations.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_create_empty.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_filter_one_to_n.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_filter_validate.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_ignore_in_filter.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_implementation.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_join.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_matches.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_optional_members.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_propagate_row_failures.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_repr.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_sample.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_serialization.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_storage.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/collection/test_validate_input.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/column_types/__init__.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/column_types/test_any.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/column_types/test_array.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/column_types/test_binary.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/column_types/test_datetime.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/column_types/test_decimal.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/column_types/test_enum.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/column_types/test_float.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/column_types/test_integer.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/column_types/test_list.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/column_types/test_object.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/column_types/test_string.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/column_types/test_struct.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/columns/__init__.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/columns/test_alias.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/columns/test_base.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/columns/test_check.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/columns/test_default_dtypes.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/columns/test_matches.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/columns/test_metadata.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/columns/test_polars_schema.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/columns/test_pyarrow.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/columns/test_rules.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/columns/test_sample.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/columns/test_sqlalchemy_columns.py +9 -4
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/columns/test_str.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/columns/test_utils.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/conftest.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/core_validation/__init__.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/core_validation/test_match_to_schema.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/core_validation/test_rule_evaluation.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/failure_info/test_storage.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/functional/test_concat.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/functional/test_relationships.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/schema/test_base.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/schema/test_cast.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/schema/test_create_empty.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/schema/test_create_empty_if_none.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/schema/test_filter.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/schema/test_inheritance.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/schema/test_matches.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/schema/test_read_write_parquet.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/schema/test_repr.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/schema/test_rule_implementation.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/schema/test_sample.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/schema/test_serialization.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/schema/test_storage.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/schema/test_validate.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/storage/test_delta.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/test_compat.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/test_config.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/test_deprecation.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/test_factory.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/test_native_regex.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/test_pydantic.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/test_random.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/test_serialization.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/tests/test_typing.py +1 -1
- {dataframely-2.4.0 → dataframely-2.5.1}/.copier-answers.yml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/.envrc +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/.gitattributes +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/.github/CODEOWNERS +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/.github/copilot-instructions.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/.github/dependabot.yml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/.github/instructions/tests.instructions.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/.github/release-drafter.yml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/.github/workflows/chore.yml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/.gitignore +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/.pre-commit-config.yaml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/.prettierignore +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/.prettierrc +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/.readthedocs.yml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/Cargo.lock +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/Cargo.toml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/LICENSE +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/README.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/SECURITY.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/_native.pyi +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/dataframely/py.typed +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docker-compose.yml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/_static/custom.css +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/_static/favicon.ico +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/_templates/autosummary/class.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/_templates/autosummary/method.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/_templates/classes/column.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/_templates/classes/error.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/_templates/classes/filter_result.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/collection/generation.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/collection/index.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/collection/io.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/collection/metadata.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/collection/operations.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/collection/validation.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/columns/index.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/errors/index.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/filter_result/failure_info.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/filter_result/index.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/index.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/misc/index.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/schema/conversion.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/schema/generation.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/schema/index.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/schema/io.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/schema/metadata.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/api/schema/validation.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/css/custom.css +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/guides/development.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/guides/examples/index.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/guides/examples/real-world.ipynb +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/guides/faq.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/guides/features/column-metadata.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/guides/features/data-generation.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/guides/features/index.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/guides/features/lazy-validation.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/guides/features/primary-keys.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/guides/features/serialization.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/guides/features/sql-generation.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/guides/index.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/guides/migration/index.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/guides/migration/v1-v2.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/guides/quickstart.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/docs/index.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/pixi.toml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/rust-toolchain.toml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/src/lib.rs +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/src/polars_plugin/mod.rs +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/src/polars_plugin/rule_failure.rs +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/src/polars_plugin/utils.rs +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/src/polars_plugin/validation_error.rs +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/src/regex/errdefs.rs +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/src/regex/mod.rs +0 -0
- {dataframely-2.4.0 → dataframely-2.5.1}/src/regex/repr.rs +0 -0
|
@@ -13,11 +13,11 @@ jobs:
|
|
|
13
13
|
permissions:
|
|
14
14
|
contents: read
|
|
15
15
|
steps:
|
|
16
|
-
- uses: actions/checkout@
|
|
16
|
+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
17
17
|
with:
|
|
18
18
|
fetch-depth: 0
|
|
19
19
|
- name: Set up pixi
|
|
20
|
-
uses: prefix-dev/setup-pixi@
|
|
20
|
+
uses: prefix-dev/setup-pixi@82d477f15f3a381dbcc8adc1206ce643fe110fb7 # v0.9.3
|
|
21
21
|
with:
|
|
22
22
|
environments: build
|
|
23
23
|
- name: Set version
|
|
@@ -25,7 +25,7 @@ jobs:
|
|
|
25
25
|
- name: Build project
|
|
26
26
|
run: pixi run -e build build-sdist
|
|
27
27
|
- name: Upload package
|
|
28
|
-
uses: actions/upload-artifact@
|
|
28
|
+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
|
29
29
|
with:
|
|
30
30
|
name: sdist
|
|
31
31
|
path: dist/*
|
|
@@ -48,16 +48,16 @@ jobs:
|
|
|
48
48
|
- target-platform: win-64
|
|
49
49
|
os: windows-latest
|
|
50
50
|
steps:
|
|
51
|
-
- uses: actions/checkout@
|
|
51
|
+
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
52
52
|
with:
|
|
53
53
|
fetch-depth: 0
|
|
54
54
|
- name: Set up pixi
|
|
55
|
-
uses: prefix-dev/setup-pixi@
|
|
55
|
+
uses: prefix-dev/setup-pixi@82d477f15f3a381dbcc8adc1206ce643fe110fb7 # v0.9.3
|
|
56
56
|
with:
|
|
57
57
|
environments: build
|
|
58
58
|
- name: Set version
|
|
59
59
|
run: pixi run -e build set-version
|
|
60
|
-
- uses: actions/setup-python@
|
|
60
|
+
- uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
|
|
61
61
|
with:
|
|
62
62
|
python-version: "3.10"
|
|
63
63
|
- name: Build wheel
|
|
@@ -70,7 +70,7 @@ jobs:
|
|
|
70
70
|
- name: Check package
|
|
71
71
|
run: pixi run -e build check-wheel
|
|
72
72
|
- name: Upload package
|
|
73
|
-
uses: actions/upload-artifact@
|
|
73
|
+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
|
74
74
|
with:
|
|
75
75
|
name: wheel-${{ matrix.target-platform }}
|
|
76
76
|
path: dist/*
|
|
@@ -84,7 +84,7 @@ jobs:
|
|
|
84
84
|
id-token: write
|
|
85
85
|
environment: pypi
|
|
86
86
|
steps:
|
|
87
|
-
- uses: actions/download-artifact@
|
|
87
|
+
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
|
88
88
|
with:
|
|
89
89
|
path: dist
|
|
90
90
|
merge-multiple: true
|
|
@@ -19,18 +19,18 @@ jobs:
|
|
|
19
19
|
runs-on: ubuntu-latest
|
|
20
20
|
steps:
|
|
21
21
|
- name: Checkout branch
|
|
22
|
-
uses: actions/checkout@
|
|
22
|
+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
23
23
|
with:
|
|
24
24
|
# needed for 'pre-commit-mirrors-insert-license'
|
|
25
25
|
fetch-depth: 0
|
|
26
26
|
- name: Set up pixi
|
|
27
|
-
uses: prefix-dev/setup-pixi@
|
|
27
|
+
uses: prefix-dev/setup-pixi@82d477f15f3a381dbcc8adc1206ce643fe110fb7 # v0.9.3
|
|
28
28
|
with:
|
|
29
29
|
environments: default lint
|
|
30
30
|
- name: Install Rust
|
|
31
31
|
run: rustup show
|
|
32
32
|
- name: Cache Rust dependencies
|
|
33
|
-
uses: Swatinem/rust-cache@
|
|
33
|
+
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
|
34
34
|
- name: pre-commit
|
|
35
35
|
run: pixi run pre-commit-run --color=always --show-diff-on-failure
|
|
36
36
|
|
|
@@ -56,9 +56,9 @@ jobs:
|
|
|
56
56
|
with_optionals: true
|
|
57
57
|
steps:
|
|
58
58
|
- name: Checkout branch
|
|
59
|
-
uses: actions/checkout@
|
|
59
|
+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
60
60
|
- name: Set up pixi
|
|
61
|
-
uses: prefix-dev/setup-pixi@
|
|
61
|
+
uses: prefix-dev/setup-pixi@82d477f15f3a381dbcc8adc1206ce643fe110fb7 # v0.9.3
|
|
62
62
|
with:
|
|
63
63
|
environments: ${{ matrix.environment }}
|
|
64
64
|
# FIXME: Remove when `s3_server` fixture does not start a process anymore
|
|
@@ -66,13 +66,13 @@ jobs:
|
|
|
66
66
|
- name: Install Rust
|
|
67
67
|
run: rustup show
|
|
68
68
|
- name: Cache Rust dependencies
|
|
69
|
-
uses: Swatinem/rust-cache@
|
|
69
|
+
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
|
70
70
|
- name: Install repository
|
|
71
71
|
run: pixi run -e ${{ matrix.environment }} postinstall
|
|
72
72
|
- name: Run pytest
|
|
73
73
|
run: pixi run -e ${{ matrix.environment }} test-coverage --color=yes ${{ matrix.with_optionals && '-m with_optionals' || '-m "not with_optionals"'}} --cov=dataframely --cov-report=xml
|
|
74
74
|
- name: Upload codecov
|
|
75
|
-
uses: codecov/codecov-action@
|
|
75
|
+
uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
|
|
76
76
|
with:
|
|
77
77
|
files: ./coverage.xml
|
|
78
78
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
@@ -13,14 +13,14 @@ jobs:
|
|
|
13
13
|
id-token: write
|
|
14
14
|
steps:
|
|
15
15
|
- name: Checkout branch
|
|
16
|
-
uses: actions/checkout@
|
|
16
|
+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
17
17
|
- name: Set up pixi
|
|
18
|
-
uses: prefix-dev/setup-pixi@
|
|
18
|
+
uses: prefix-dev/setup-pixi@82d477f15f3a381dbcc8adc1206ce643fe110fb7 # v0.9.3
|
|
19
19
|
with:
|
|
20
20
|
environments: default
|
|
21
21
|
- name: Install Rust
|
|
22
22
|
run: rustup show
|
|
23
23
|
- name: Cache Rust dependencies
|
|
24
|
-
uses: Swatinem/rust-cache@
|
|
24
|
+
uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
|
25
25
|
- name: Install repository
|
|
26
26
|
run: pixi run postinstall
|
|
@@ -23,9 +23,9 @@ jobs:
|
|
|
23
23
|
os: [ubuntu-latest, windows-latest]
|
|
24
24
|
steps:
|
|
25
25
|
- name: Checkout branch
|
|
26
|
-
uses: actions/checkout@
|
|
26
|
+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
27
27
|
- name: Set up pixi
|
|
28
|
-
uses: prefix-dev/setup-pixi@
|
|
28
|
+
uses: prefix-dev/setup-pixi@82d477f15f3a381dbcc8adc1206ce643fe110fb7 # v0.9.3
|
|
29
29
|
with:
|
|
30
30
|
environments: nightly
|
|
31
31
|
- name: Install polars nightly
|
|
@@ -35,7 +35,7 @@ jobs:
|
|
|
35
35
|
|
|
36
36
|
steps:
|
|
37
37
|
- name: "Checkout code"
|
|
38
|
-
uses: actions/checkout@
|
|
38
|
+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
|
|
39
39
|
with:
|
|
40
40
|
persist-credentials: false
|
|
41
41
|
|
|
@@ -65,7 +65,7 @@ jobs:
|
|
|
65
65
|
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
|
|
66
66
|
# format to the repository Actions tab.
|
|
67
67
|
- name: "Upload artifact"
|
|
68
|
-
uses: actions/upload-artifact@
|
|
68
|
+
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
|
69
69
|
with:
|
|
70
70
|
name: SARIF file
|
|
71
71
|
path: results.sarif
|
|
@@ -74,6 +74,6 @@ jobs:
|
|
|
74
74
|
# Upload the results to GitHub's code scanning dashboard (optional).
|
|
75
75
|
# Commenting out will disable upload of results to your repo's Code Scanning dashboard
|
|
76
76
|
- name: "Upload to code-scanning"
|
|
77
|
-
uses: github/codeql-action/upload-sarif@
|
|
77
|
+
uses: github/codeql-action/upload-sarif@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v3.29.5
|
|
78
78
|
with:
|
|
79
79
|
sarif_file: results.sarif
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) QuantCo 2025-
|
|
1
|
+
# Copyright (c) QuantCo 2025-2026
|
|
2
2
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
3
3
|
|
|
4
4
|
|
|
@@ -29,6 +29,7 @@ except ImportError:
|
|
|
29
29
|
try:
|
|
30
30
|
import sqlalchemy as sa
|
|
31
31
|
import sqlalchemy.dialects.mssql as sa_mssql
|
|
32
|
+
import sqlalchemy.dialects.postgresql as sa_postgresql
|
|
32
33
|
from sqlalchemy import Dialect
|
|
33
34
|
from sqlalchemy.dialects.mssql.pyodbc import MSDialect_pyodbc
|
|
34
35
|
from sqlalchemy.dialects.postgresql.psycopg2 import PGDialect_psycopg2
|
|
@@ -36,6 +37,7 @@ try:
|
|
|
36
37
|
except ImportError:
|
|
37
38
|
sa = _DummyModule("sqlalchemy") # type: ignore
|
|
38
39
|
sa_mssql = _DummyModule("sqlalchemy") # type: ignore
|
|
40
|
+
sa_postgresql = _DummyModule("sqlalchemy") # type: ignore
|
|
39
41
|
|
|
40
42
|
class sa_TypeEngine: # type: ignore # noqa: N801
|
|
41
43
|
pass
|
|
@@ -81,6 +83,7 @@ __all__ = [
|
|
|
81
83
|
"pydantic_core_schema",
|
|
82
84
|
"pydantic",
|
|
83
85
|
"sa_mssql",
|
|
86
|
+
"sa_postgresql",
|
|
84
87
|
"sa_TypeEngine",
|
|
85
88
|
"sa",
|
|
86
89
|
]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) QuantCo 2025-
|
|
1
|
+
# Copyright (c) QuantCo 2025-2026
|
|
2
2
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
@@ -202,7 +202,11 @@ class CollectionMeta(ABCMeta):
|
|
|
202
202
|
annotations = source["__annotations__"]
|
|
203
203
|
elif sys.version_info >= (3, 14):
|
|
204
204
|
if "__annotate_func__" in source:
|
|
205
|
-
|
|
205
|
+
annotate_func = source["__annotate_func__"]
|
|
206
|
+
# __annotate_func__ can be None in Python 3.14 when a class
|
|
207
|
+
# has no annotations or in certain metaclass scenarios
|
|
208
|
+
if annotate_func is not None and callable(annotate_func):
|
|
209
|
+
annotations = annotate_func(Format.VALUE)
|
|
206
210
|
for attr, kls in annotations.items():
|
|
207
211
|
result.members[attr] = CollectionMeta._derive_member_info(
|
|
208
212
|
attr, kls, CollectionMember()
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) QuantCo 2025-
|
|
1
|
+
# Copyright (c) QuantCo 2025-2026
|
|
2
2
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
@@ -97,8 +97,17 @@ class Array(Column):
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
def sqlalchemy_dtype(self, dialect: sa.Dialect) -> sa_TypeEngine:
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
match dialect.name:
|
|
101
|
+
case "postgresql":
|
|
102
|
+
# Note that the length of the array in each dimension is not supported in SQLAlchemy
|
|
103
|
+
# That is because PostgreSQL does not enforce the length anyway
|
|
104
|
+
return sa.ARRAY(
|
|
105
|
+
self.inner.sqlalchemy_dtype(dialect), dimensions=len(self.shape)
|
|
106
|
+
)
|
|
107
|
+
case _:
|
|
108
|
+
raise NotImplementedError(
|
|
109
|
+
f"SQL column cannot have 'Array' type for dialect '{dialect}'."
|
|
110
|
+
)
|
|
102
111
|
|
|
103
112
|
def _pyarrow_field_of_shape(self, shape: Sequence[int]) -> pa.Field:
|
|
104
113
|
if shape:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) QuantCo 2025-
|
|
1
|
+
# Copyright (c) QuantCo 2025-2026
|
|
2
2
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
@@ -21,9 +21,11 @@ class Binary(Column):
|
|
|
21
21
|
return pl.Binary()
|
|
22
22
|
|
|
23
23
|
def sqlalchemy_dtype(self, dialect: sa.Dialect) -> sa_TypeEngine:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
match dialect.name:
|
|
25
|
+
case "mssql":
|
|
26
|
+
return sa.VARBINARY()
|
|
27
|
+
case _:
|
|
28
|
+
return sa.LargeBinary()
|
|
27
29
|
|
|
28
30
|
@property
|
|
29
31
|
def pyarrow_dtype(self) -> pa.DataType:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) QuantCo 2025-
|
|
1
|
+
# Copyright (c) QuantCo 2025-2026
|
|
2
2
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
@@ -120,8 +120,13 @@ class List(Column):
|
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
def sqlalchemy_dtype(self, dialect: sa.Dialect) -> sa_TypeEngine:
|
|
123
|
-
|
|
124
|
-
|
|
123
|
+
match dialect.name:
|
|
124
|
+
case "postgresql":
|
|
125
|
+
return sa.ARRAY(self.inner.sqlalchemy_dtype(dialect))
|
|
126
|
+
case _:
|
|
127
|
+
raise NotImplementedError(
|
|
128
|
+
f"SQL column cannot have 'List' type for dialect '{dialect}'."
|
|
129
|
+
)
|
|
125
130
|
|
|
126
131
|
@property
|
|
127
132
|
def pyarrow_dtype(self) -> pa.DataType:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) QuantCo 2025-
|
|
1
|
+
# Copyright (c) QuantCo 2025-2026
|
|
2
2
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
@@ -8,7 +8,7 @@ from typing import Any, cast
|
|
|
8
8
|
|
|
9
9
|
import polars as pl
|
|
10
10
|
|
|
11
|
-
from dataframely._compat import pa, sa, sa_TypeEngine
|
|
11
|
+
from dataframely._compat import pa, sa, sa_postgresql, sa_TypeEngine
|
|
12
12
|
from dataframely._polars import PolarsDataType
|
|
13
13
|
from dataframely.random import Generator
|
|
14
14
|
|
|
@@ -107,8 +107,11 @@ class Struct(Column):
|
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
def sqlalchemy_dtype(self, dialect: sa.Dialect) -> sa_TypeEngine:
|
|
110
|
-
|
|
111
|
-
|
|
110
|
+
match dialect.name:
|
|
111
|
+
case "postgresql":
|
|
112
|
+
return sa_postgresql.JSONB()
|
|
113
|
+
case _:
|
|
114
|
+
raise NotImplementedError("SQL column cannot have 'Struct' type.")
|
|
112
115
|
|
|
113
116
|
@property
|
|
114
117
|
def pyarrow_dtype(self) -> pa.DataType:
|