dataframely 2.4.0__tar.gz → 2.5.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.4.0 → dataframely-2.5.0}/.github/workflows/build.yml +8 -8
- {dataframely-2.4.0 → dataframely-2.5.0}/.github/workflows/ci.yml +7 -7
- {dataframely-2.4.0 → dataframely-2.5.0}/.github/workflows/copilot-setup-steps.yml +3 -3
- {dataframely-2.4.0 → dataframely-2.5.0}/.github/workflows/nightly.yml +2 -2
- {dataframely-2.4.0 → dataframely-2.5.0}/.github/workflows/scorecard.yml +3 -3
- {dataframely-2.4.0 → dataframely-2.5.0}/PKG-INFO +1 -1
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_compat.py +4 -1
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/array.py +12 -3
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/binary.py +6 -4
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/list.py +8 -3
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/struct.py +7 -4
- {dataframely-2.4.0 → dataframely-2.5.0}/pixi.lock +7506 -7616
- {dataframely-2.4.0 → dataframely-2.5.0}/pyproject.toml +1 -1
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/columns/test_sqlalchemy_columns.py +9 -4
- {dataframely-2.4.0 → dataframely-2.5.0}/.copier-answers.yml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/.envrc +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/.gitattributes +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/.github/CODEOWNERS +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/.github/copilot-instructions.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/.github/dependabot.yml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/.github/instructions/tests.instructions.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/.github/release-drafter.yml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/.github/workflows/chore.yml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/.gitignore +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/.pre-commit-config.yaml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/.prettierignore +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/.prettierrc +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/.readthedocs.yml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/Cargo.lock +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/Cargo.toml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/LICENSE +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/README.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/SECURITY.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/__init__.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_base_schema.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_deprecation.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_filter.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_match_to_schema.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_native.pyi +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_plugin.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_polars.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_pydantic.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_rule.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_serialization.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_storage/__init__.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_storage/_base.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_storage/_exc.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_storage/constants.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_storage/delta.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_storage/parquet.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/_typing.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/collection/__init__.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/collection/_base.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/collection/collection.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/collection/filter_result.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/__init__.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/_base.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/_mixins.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/_registry.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/_utils.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/any.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/bool.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/categorical.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/datetime.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/decimal.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/enum.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/float.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/integer.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/object.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/columns/string.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/config.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/exc.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/filter_result.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/functional.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/py.typed +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/random.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/schema.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/testing/__init__.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/testing/const.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/testing/factory.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/testing/mask.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/testing/rules.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/dataframely/testing/storage.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docker-compose.yml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/_static/custom.css +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/_static/favicon.ico +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/_templates/autosummary/class.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/_templates/autosummary/method.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/_templates/classes/column.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/_templates/classes/error.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/_templates/classes/filter_result.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/collection/generation.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/collection/index.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/collection/io.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/collection/metadata.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/collection/operations.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/collection/validation.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/columns/index.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/errors/index.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/filter_result/failure_info.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/filter_result/index.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/index.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/misc/index.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/schema/conversion.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/schema/generation.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/schema/index.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/schema/io.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/schema/metadata.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/api/schema/validation.rst +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/conf.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/css/custom.css +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/guides/development.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/guides/examples/index.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/guides/examples/real-world.ipynb +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/guides/faq.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/guides/features/column-metadata.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/guides/features/data-generation.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/guides/features/index.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/guides/features/lazy-validation.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/guides/features/primary-keys.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/guides/features/serialization.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/guides/features/sql-generation.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/guides/index.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/guides/migration/index.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/guides/migration/v1-v2.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/guides/quickstart.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/docs/index.md +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/pixi.toml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/rust-toolchain.toml +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/src/lib.rs +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/src/polars_plugin/mod.rs +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/src/polars_plugin/rule_failure.rs +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/src/polars_plugin/utils.rs +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/src/polars_plugin/validation_error.rs +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/src/regex/errdefs.rs +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/src/regex/mod.rs +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/src/regex/repr.rs +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/benches/conftest.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/benches/test_collection.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/benches/test_failure.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/benches/test_schema.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_base.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_cast.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_collection_future_annotations.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_create_empty.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_filter_one_to_n.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_filter_validate.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_ignore_in_filter.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_implementation.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_join.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_matches.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_optional_members.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_propagate_row_failures.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_repr.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_sample.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_serialization.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_storage.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/collection/test_validate_input.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/column_types/__init__.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/column_types/test_any.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/column_types/test_array.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/column_types/test_binary.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/column_types/test_datetime.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/column_types/test_decimal.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/column_types/test_enum.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/column_types/test_float.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/column_types/test_integer.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/column_types/test_list.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/column_types/test_object.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/column_types/test_string.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/column_types/test_struct.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/columns/__init__.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/columns/test_alias.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/columns/test_base.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/columns/test_check.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/columns/test_default_dtypes.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/columns/test_matches.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/columns/test_metadata.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/columns/test_polars_schema.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/columns/test_pyarrow.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/columns/test_rules.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/columns/test_sample.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/columns/test_str.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/columns/test_utils.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/conftest.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/core_validation/__init__.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/core_validation/test_match_to_schema.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/core_validation/test_rule_evaluation.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/failure_info/test_storage.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/functional/test_concat.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/functional/test_relationships.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/schema/test_base.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/schema/test_cast.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/schema/test_create_empty.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/schema/test_create_empty_if_none.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/schema/test_filter.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/schema/test_inheritance.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/schema/test_matches.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/schema/test_read_write_parquet.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/schema/test_repr.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/schema/test_rule_implementation.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/schema/test_sample.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/schema/test_serialization.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/schema/test_storage.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/schema/test_validate.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/storage/test_delta.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/test_compat.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/test_config.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/test_deprecation.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/test_factory.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/test_native_regex.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/test_pydantic.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/test_random.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/test_serialization.py +0 -0
- {dataframely-2.4.0 → dataframely-2.5.0}/tests/test_typing.py +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
|
|
@@ -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:
|