dataframely 2.9.1__tar.gz → 2.10.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.10.1/.claude/CLAUDE.md +5 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/.copier-answers.yml +10 -1
- dataframely-2.10.1/.github/workflows/build.yml +118 -0
- dataframely-2.9.1/.github/workflows/chore-pr.yml → dataframely-2.10.1/.github/workflows/chore.yml +4 -4
- {dataframely-2.9.1 → dataframely-2.10.1}/.github/workflows/ci.yml +9 -7
- {dataframely-2.9.1 → dataframely-2.10.1}/.github/workflows/copilot-setup-steps.yml +1 -1
- {dataframely-2.9.1 → dataframely-2.10.1}/.github/workflows/nightly.yml +1 -1
- dataframely-2.9.1/.github/workflows/chore-main.yml → dataframely-2.10.1/.github/workflows/release-drafter.yml +2 -2
- {dataframely-2.9.1 → dataframely-2.10.1}/.github/workflows/scorecard.yml +2 -2
- dataframely-2.10.1/.lefthook.yaml +57 -0
- dataframely-2.10.1/AGENTS.md +5 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/Cargo.lock +1606 -174
- {dataframely-2.9.1 → dataframely-2.10.1}/Cargo.toml +4 -5
- {dataframely-2.9.1 → dataframely-2.10.1}/PKG-INFO +1 -1
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_base_schema.py +16 -12
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_compat.py +2 -2
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_native.pyi +18 -1
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_plugin.py +35 -6
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_storage/_base.py +0 -1
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/collection/_base.py +49 -26
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/collection/collection.py +37 -22
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/collection/filter_result.py +3 -1
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/_base.py +44 -12
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/any.py +13 -6
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/array.py +25 -12
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/categorical.py +18 -6
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/datetime.py +72 -24
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/decimal.py +18 -6
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/enum.py +19 -7
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/float.py +18 -6
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/integer.py +18 -6
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/list.py +22 -6
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/object.py +13 -9
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/string.py +18 -6
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/struct.py +18 -6
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/config.py +30 -6
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/random.py +2 -3
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/schema.py +22 -2
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/examples/real-world.ipynb +5 -3
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/features/lazy-validation.md +24 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/pixi.lock +23455 -23512
- {dataframely-2.9.1 → dataframely-2.10.1}/pixi.toml +9 -7
- {dataframely-2.9.1 → dataframely-2.10.1}/pyproject.toml +4 -1
- {dataframely-2.9.1 → dataframely-2.10.1}/src/polars_plugin/mod.rs +35 -4
- dataframely-2.10.1/src/polars_plugin/validation_error.rs +255 -0
- dataframely-2.10.1/tests/collection/test_dataframe_members.py +127 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_filter_validate.py +16 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_implementation.py +55 -22
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_repr.py +15 -14
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_serialization.py +49 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_array.py +34 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_list.py +16 -0
- dataframely-2.10.1/tests/columns/test_description.py +99 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_matches.py +2 -0
- dataframely-2.10.1/tests/schema/test_inheritance.py +46 -0
- dataframely-2.10.1/tests/schema/test_repr.py +69 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_sample.py +32 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_serialization.py +8 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_storage.py +14 -1
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_validate.py +133 -2
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_config.py +34 -0
- dataframely-2.9.1/.github/workflows/build.yml +0 -89
- dataframely-2.9.1/.pre-commit-config.yaml +0 -110
- dataframely-2.9.1/src/polars_plugin/validation_error.rs +0 -90
- dataframely-2.9.1/tests/schema/test_inheritance.py +0 -22
- dataframely-2.9.1/tests/schema/test_repr.py +0 -65
- {dataframely-2.9.1 → dataframely-2.10.1}/.envrc +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/.gitattributes +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/.github/CODEOWNERS +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/.github/copilot-instructions.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/.github/dependabot.yml +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/.github/instructions/tests.instructions.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/.github/release-drafter.yml +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/.gitignore +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/.prettierignore +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/.prettierrc +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/.readthedocs.yml +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/LICENSE +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/README.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/SECURITY.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/__init__.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_deprecation.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_filter.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_match_to_schema.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_polars.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_pydantic.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_rule.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_serialization.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_storage/__init__.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_storage/_exc.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_storage/_fsspec.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_storage/constants.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_storage/delta.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_storage/parquet.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_typing.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/collection/__init__.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/__init__.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/_mixins.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/_registry.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/_utils.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/binary.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/bool.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/exc.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/experimental/__init__.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/experimental/infer_schema.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/filter_result.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/functional.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/py.typed +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/testing/__init__.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/testing/const.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/testing/factory.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/testing/mask.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/testing/rules.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/testing/storage.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docker-compose.yml +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/_static/custom.css +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/_static/favicon.ico +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/_templates/autosummary/class.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/_templates/autosummary/method.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/_templates/classes/column.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/_templates/classes/error.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/_templates/classes/filter_result.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/collection/generation.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/collection/index.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/collection/io.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/collection/metadata.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/collection/operations.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/collection/validation.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/columns/index.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/errors/index.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/experimental/index.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/filter_result/failure_info.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/filter_result/index.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/index.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/misc/index.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/schema/conversion.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/schema/generation.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/schema/index.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/schema/io.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/schema/metadata.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/schema/validation.rst +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/conf.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/css/custom.css +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/coding-agents.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/development.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/examples/index.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/faq.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/features/column-metadata.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/features/data-generation.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/features/index.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/features/primary-keys.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/features/serialization.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/features/sql-generation.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/index.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/migration/index.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/migration/v1-v2.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/quickstart.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/docs/index.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/rust-toolchain.toml +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/skills/SKILL.md +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/src/lib.rs +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/src/polars_plugin/rule_failure.rs +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/src/polars_plugin/utils.rs +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/src/regex/errdefs.rs +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/src/regex/mod.rs +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/src/regex/repr.rs +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/benches/conftest.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/benches/test_collection.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/benches/test_failure.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/benches/test_schema.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_base.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_cast.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_collection_future_annotations.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_create_empty.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_filter_one_to_n.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_ignore_in_filter.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_join.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_matches.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_optional_members.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_propagate_row_failures.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_sample.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_storage.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_validate_input.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/__init__.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_any.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_binary.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_datetime.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_decimal.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_enum.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_float.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_integer.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_object.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_string.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_struct.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/__init__.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_alias.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_base.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_check.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_default_dtypes.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_metadata.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_polars_schema.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_pyarrow.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_pydantic.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_rules.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_sample.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_sqlalchemy_columns.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_str.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_utils.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/conftest.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/core_validation/__init__.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/core_validation/test_match_to_schema.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/core_validation/test_rule_evaluation.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/experimental/test_infer_schema.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/failure_info/test_storage.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/functional/test_concat.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/functional/test_relationships.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_base.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_cast.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_create_empty.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_create_empty_if_none.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_filter.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_matches.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_pydantic_model.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_read_write_parquet.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_rule_implementation.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/storage/test_delta.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/storage/test_fsspec.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_compat.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_deprecation.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_factory.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_native_regex.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_pydantic.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_random.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_serialization.py +0 -0
- {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_typing.py +0 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
Lockfiles must be consistent with package metadata. After any change to `pixi.toml`, run `pixi lock`.
|
|
2
|
+
|
|
3
|
+
Everything runs in a pixi environment. Any command (like `pytest`) must be prefixed with `pixi run` (e.g. `pixi run pytest`).
|
|
4
|
+
|
|
5
|
+
Code formatting must align with our standards. Run `pixi run lint` before `git commit`s to ensure this.
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# This file is managed by Copier; DO NOT EDIT OR REMOVE.
|
|
2
|
-
|
|
2
|
+
#
|
|
3
|
+
# If you want to change any of the copier answers, run one of the following:
|
|
4
|
+
# 1. If you want to answer _all_ questions again:
|
|
5
|
+
# `copier update --trust --vcs-ref=:current: .`
|
|
6
|
+
# 2. If you want to answer a _specific_ question again:
|
|
7
|
+
# `copier update --trust --defaults --vcs-ref=:current: --data answer_name=answer_value .`
|
|
8
|
+
#
|
|
9
|
+
# If you want to run this as a one-off command, prefix with:
|
|
10
|
+
# `pixi exec --spec copier --spec ruamel.yaml -- {command}`
|
|
11
|
+
_commit: v0.5.2
|
|
3
12
|
_src_path: https://github.com/quantco/copier-template-python-open-source
|
|
4
13
|
add_autobump_workflow: false
|
|
5
14
|
author_email: oliver.borchert@quantco.com
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
name: Build
|
|
2
|
+
on:
|
|
3
|
+
pull_request:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
release:
|
|
7
|
+
types: [published]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build-sdist:
|
|
11
|
+
name: Build Sdist
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
17
|
+
with:
|
|
18
|
+
fetch-depth: 0
|
|
19
|
+
- name: Set up pixi
|
|
20
|
+
uses: prefix-dev/setup-pixi@1b2de7f3351f171c8b4dfeb558c639cb58ed4ec0 # v0.9.5
|
|
21
|
+
with:
|
|
22
|
+
environments: build
|
|
23
|
+
- name: Set version
|
|
24
|
+
run: pixi run -e build set-version
|
|
25
|
+
- name: Build project
|
|
26
|
+
run: pixi run -e build build-sdist
|
|
27
|
+
- name: Upload package
|
|
28
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
29
|
+
with:
|
|
30
|
+
name: sdist
|
|
31
|
+
path: dist/*
|
|
32
|
+
|
|
33
|
+
build-wheel:
|
|
34
|
+
name: Build Wheel (${{ matrix.target-platform }})
|
|
35
|
+
runs-on: ${{ matrix.os }}
|
|
36
|
+
strategy:
|
|
37
|
+
fail-fast: false
|
|
38
|
+
matrix:
|
|
39
|
+
include:
|
|
40
|
+
- target-platform: linux-64
|
|
41
|
+
os: ubuntu-latest
|
|
42
|
+
- target-platform: linux-aarch64
|
|
43
|
+
os: ubuntu-24.04-arm
|
|
44
|
+
- target-platform: osx-64
|
|
45
|
+
os: macos-15-intel
|
|
46
|
+
- target-platform: osx-arm64
|
|
47
|
+
os: macos-latest
|
|
48
|
+
- target-platform: win-64
|
|
49
|
+
os: windows-latest
|
|
50
|
+
steps:
|
|
51
|
+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
52
|
+
with:
|
|
53
|
+
fetch-depth: 0
|
|
54
|
+
- name: Set up pixi
|
|
55
|
+
uses: prefix-dev/setup-pixi@1b2de7f3351f171c8b4dfeb558c639cb58ed4ec0 # v0.9.5
|
|
56
|
+
with:
|
|
57
|
+
environments: build
|
|
58
|
+
- name: Set version
|
|
59
|
+
run: pixi run -e build set-version
|
|
60
|
+
- name: Install cargo-auditable
|
|
61
|
+
if: github.event_name == 'release' && runner.os != 'Linux'
|
|
62
|
+
run: cargo install cargo-auditable@0.7.4 --locked
|
|
63
|
+
- name: Prepare cargo-auditable wrapper (macOS)
|
|
64
|
+
if: github.event_name == 'release' && runner.os == 'macOS'
|
|
65
|
+
run: |
|
|
66
|
+
# cargo-auditable must be invoked as "cargo auditable <cmd>", not as a direct CARGO
|
|
67
|
+
# replacement — the latter does not support "cargo rustc --profile". A wrapper delegates
|
|
68
|
+
# to the real cargo via PATH (no recursion risk since CARGO is set via env, not PATH).
|
|
69
|
+
printf '#!/bin/sh\nexec cargo auditable "$@"\n' > /usr/local/bin/cargo-auditable-wrapper
|
|
70
|
+
chmod +x /usr/local/bin/cargo-auditable-wrapper
|
|
71
|
+
echo "CARGO=/usr/local/bin/cargo-auditable-wrapper" >> "$GITHUB_ENV"
|
|
72
|
+
- name: Prepare cargo-auditable wrapper (Windows)
|
|
73
|
+
if: github.event_name == 'release' && runner.os == 'Windows'
|
|
74
|
+
shell: bash
|
|
75
|
+
run: |
|
|
76
|
+
printf '@cargo auditable %%*\n' > "C:/cargo-auditable-wrapper.cmd"
|
|
77
|
+
echo "CARGO=C:\\cargo-auditable-wrapper.cmd" >> "$GITHUB_ENV"
|
|
78
|
+
- name: Prepare cargo-auditable wrapper (Linux)
|
|
79
|
+
# The wrapper itself is created inside the manylinux container by
|
|
80
|
+
# `before-script-linux` below; here we only point CARGO at it on the
|
|
81
|
+
# host so maturin-action forwards the value via `-e CARGO=...`.
|
|
82
|
+
if: github.event_name == 'release' && runner.os == 'Linux'
|
|
83
|
+
run: echo "CARGO=/usr/local/bin/cargo-auditable-wrapper" >> "$GITHUB_ENV"
|
|
84
|
+
- name: Build wheel
|
|
85
|
+
uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1.51.0 # zizmor: ignore[cache-poisoning]
|
|
86
|
+
with:
|
|
87
|
+
command: build
|
|
88
|
+
args: --out dist --release -i python3.10
|
|
89
|
+
manylinux: auto
|
|
90
|
+
sccache: ${{ github.event_name != 'release' }}
|
|
91
|
+
# NOTE: We also need to set up cargo-auditable inside the docker container
|
|
92
|
+
# where the linux build is performed.
|
|
93
|
+
docker-options: ${{ case(github.event_name == 'release', format('-e CARGO={0}', env.CARGO), '') }}
|
|
94
|
+
before-script-linux: |
|
|
95
|
+
${{ case(github.event_name == 'release', 'cargo install cargo-auditable@0.7.4 --locked && printf ''#!/bin/sh\nexec cargo auditable "$@"\n'' > /usr/local/bin/cargo-auditable-wrapper && chmod +x /usr/local/bin/cargo-auditable-wrapper', '') }}
|
|
96
|
+
- name: Check package
|
|
97
|
+
run: pixi run -e build check-wheel
|
|
98
|
+
- name: Upload package
|
|
99
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
100
|
+
with:
|
|
101
|
+
name: wheel-${{ matrix.target-platform }}
|
|
102
|
+
path: dist/*
|
|
103
|
+
|
|
104
|
+
release:
|
|
105
|
+
name: Publish package
|
|
106
|
+
if: github.event_name == 'release'
|
|
107
|
+
needs: build-wheel
|
|
108
|
+
runs-on: ubuntu-latest
|
|
109
|
+
permissions:
|
|
110
|
+
id-token: write
|
|
111
|
+
environment: pypi
|
|
112
|
+
steps:
|
|
113
|
+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
114
|
+
with:
|
|
115
|
+
path: dist
|
|
116
|
+
merge-multiple: true
|
|
117
|
+
- name: Publish package on PyPi
|
|
118
|
+
uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # v1.14.0
|
dataframely-2.9.1/.github/workflows/chore-pr.yml → dataframely-2.10.1/.github/workflows/chore.yml
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
name: Chore
|
|
2
2
|
on:
|
|
3
|
-
pull_request_target:
|
|
3
|
+
pull_request_target: # zizmor: ignore[dangerous-triggers]
|
|
4
4
|
branches: [main]
|
|
5
5
|
types: [opened, reopened, edited, synchronize]
|
|
6
6
|
|
|
@@ -25,7 +25,7 @@ jobs:
|
|
|
25
25
|
GITHUB_TOKEN: ${{ github.token }}
|
|
26
26
|
- name: Post comment about invalid PR title
|
|
27
27
|
if: failure()
|
|
28
|
-
uses: marocchino/sticky-pull-request-comment@
|
|
28
|
+
uses: marocchino/sticky-pull-request-comment@0ea0beb66eb9baf113663a64ec522f60e49231c0 # v3.0.4
|
|
29
29
|
with:
|
|
30
30
|
header: conventional-commit-pr-title
|
|
31
31
|
message: |
|
|
@@ -42,7 +42,7 @@ jobs:
|
|
|
42
42
|
</details>
|
|
43
43
|
- name: Delete comment about invalid PR title
|
|
44
44
|
if: success()
|
|
45
|
-
uses: marocchino/sticky-pull-request-comment@
|
|
45
|
+
uses: marocchino/sticky-pull-request-comment@0ea0beb66eb9baf113663a64ec522f60e49231c0 # v3.0.4
|
|
46
46
|
with:
|
|
47
47
|
header: conventional-commit-pr-title
|
|
48
48
|
delete: true
|
|
@@ -54,6 +54,6 @@ jobs:
|
|
|
54
54
|
pull-requests: write
|
|
55
55
|
steps:
|
|
56
56
|
- name: Assign labels
|
|
57
|
-
uses: release-drafter/release-drafter/autolabeler@
|
|
57
|
+
uses: release-drafter/release-drafter/autolabeler@5de93583980a40bd78603b6dfdcda5b4df377b32 # v7.2.0
|
|
58
58
|
with:
|
|
59
59
|
token: ${{ github.token }}
|
|
@@ -13,8 +13,8 @@ permissions:
|
|
|
13
13
|
contents: read
|
|
14
14
|
|
|
15
15
|
jobs:
|
|
16
|
-
|
|
17
|
-
name:
|
|
16
|
+
lint:
|
|
17
|
+
name: Lint
|
|
18
18
|
timeout-minutes: 30
|
|
19
19
|
runs-on: ubuntu-latest
|
|
20
20
|
steps:
|
|
@@ -24,15 +24,17 @@ jobs:
|
|
|
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@1b2de7f3351f171c8b4dfeb558c639cb58ed4ec0 # v0.9.5
|
|
28
28
|
with:
|
|
29
29
|
environments: default lint polars-minimal
|
|
30
30
|
- name: Install Rust
|
|
31
31
|
run: rustup show
|
|
32
32
|
- name: Cache Rust dependencies
|
|
33
33
|
uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1
|
|
34
|
-
- name:
|
|
35
|
-
run: pixi run
|
|
34
|
+
- name: Run linting
|
|
35
|
+
run: pixi run lint
|
|
36
|
+
env:
|
|
37
|
+
CLICOLOR_FORCE: 1
|
|
36
38
|
|
|
37
39
|
unit-tests:
|
|
38
40
|
name: Unit Tests (${{ contains(matrix.os, 'ubuntu') && 'Linux' || (contains(matrix.os, 'windows') && 'Windows' || 'macOS') }}) - ${{ matrix.environment }}
|
|
@@ -63,7 +65,7 @@ jobs:
|
|
|
63
65
|
- name: Checkout branch
|
|
64
66
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
65
67
|
- name: Set up pixi
|
|
66
|
-
uses: prefix-dev/setup-pixi@
|
|
68
|
+
uses: prefix-dev/setup-pixi@1b2de7f3351f171c8b4dfeb558c639cb58ed4ec0 # v0.9.5
|
|
67
69
|
with:
|
|
68
70
|
environments: ${{ matrix.environment }}
|
|
69
71
|
# FIXME: Remove when `s3_server` fixture does not start a process anymore
|
|
@@ -77,7 +79,7 @@ jobs:
|
|
|
77
79
|
- name: Run pytest
|
|
78
80
|
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
|
|
79
81
|
- name: Upload codecov
|
|
80
|
-
uses: codecov/codecov-action@
|
|
82
|
+
uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0
|
|
81
83
|
with:
|
|
82
84
|
files: ./coverage.xml
|
|
83
85
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
@@ -15,7 +15,7 @@ jobs:
|
|
|
15
15
|
- name: Checkout branch
|
|
16
16
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
17
17
|
- name: Set up pixi
|
|
18
|
-
uses: prefix-dev/setup-pixi@
|
|
18
|
+
uses: prefix-dev/setup-pixi@1b2de7f3351f171c8b4dfeb558c639cb58ed4ec0 # v0.9.5
|
|
19
19
|
with:
|
|
20
20
|
environments: default
|
|
21
21
|
- name: Install Rust
|
|
@@ -25,7 +25,7 @@ jobs:
|
|
|
25
25
|
- name: Checkout branch
|
|
26
26
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
27
27
|
- name: Set up pixi
|
|
28
|
-
uses: prefix-dev/setup-pixi@
|
|
28
|
+
uses: prefix-dev/setup-pixi@1b2de7f3351f171c8b4dfeb558c639cb58ed4ec0 # v0.9.5
|
|
29
29
|
with:
|
|
30
30
|
environments: nightly
|
|
31
31
|
- name: Install polars nightly
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name:
|
|
1
|
+
name: Release Drafter
|
|
2
2
|
on:
|
|
3
3
|
push:
|
|
4
4
|
branches: [main]
|
|
@@ -16,6 +16,6 @@ jobs:
|
|
|
16
16
|
pull-requests: read
|
|
17
17
|
steps:
|
|
18
18
|
- name: Update release draft
|
|
19
|
-
uses: release-drafter/release-drafter@
|
|
19
|
+
uses: release-drafter/release-drafter@5de93583980a40bd78603b6dfdcda5b4df377b32 # v7.2.0
|
|
20
20
|
with:
|
|
21
21
|
token: ${{ github.token }}
|
|
@@ -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@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
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@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4
|
|
78
78
|
with:
|
|
79
79
|
sarif_file: results.sarif
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/evilmartians/lefthook/refs/heads/master/schema.json
|
|
2
|
+
output: [summary]
|
|
3
|
+
templates:
|
|
4
|
+
run: run --as-is --quiet --no-progress
|
|
5
|
+
no_auto_install: true
|
|
6
|
+
pre-commit:
|
|
7
|
+
fail_on_changes: always
|
|
8
|
+
exclude:
|
|
9
|
+
- assets/**/*
|
|
10
|
+
jobs:
|
|
11
|
+
- name: pixi-install
|
|
12
|
+
run: pixi install
|
|
13
|
+
- group:
|
|
14
|
+
parallel: true
|
|
15
|
+
jobs:
|
|
16
|
+
- name: ruff-check
|
|
17
|
+
glob: "*.{py,pyi}"
|
|
18
|
+
run: pixi {run} ruff check --fix --exit-non-zero-on-fix --force-exclude
|
|
19
|
+
- name: ruff-format
|
|
20
|
+
glob: "*.{py,pyi}"
|
|
21
|
+
run: pixi {run} ruff format --force-exclude
|
|
22
|
+
- name: mypy
|
|
23
|
+
glob: "*.py"
|
|
24
|
+
run: pixi {run} mypy {staged_files}
|
|
25
|
+
- name: prettier
|
|
26
|
+
glob: "*.{md,yml,yaml}"
|
|
27
|
+
run: pixi {run} prettier --write --no-error-on-unmatched-pattern --list-different --ignore-unknown {staged_files}
|
|
28
|
+
- name: taplo
|
|
29
|
+
glob: "*.toml"
|
|
30
|
+
run: pixi {run} taplo format {staged_files}
|
|
31
|
+
- name: cargo-fmt
|
|
32
|
+
glob: "*.rs"
|
|
33
|
+
run: pixi {run} cargo fmt
|
|
34
|
+
- name: cargo-clippy
|
|
35
|
+
glob: "*.rs"
|
|
36
|
+
run: pixi {run} cargo clippy --all-targets
|
|
37
|
+
- name: trailing-whitespace-fixer
|
|
38
|
+
glob: "*"
|
|
39
|
+
file_types: text
|
|
40
|
+
run: pixi {run} trailing-whitespace-fixer {staged_files}
|
|
41
|
+
- name: end-of-file-fixer
|
|
42
|
+
glob: "*"
|
|
43
|
+
file_types: text
|
|
44
|
+
run: pixi {run} end-of-file-fixer {staged_files}
|
|
45
|
+
- name: check-merge-conflict
|
|
46
|
+
glob: "*"
|
|
47
|
+
file_types: text
|
|
48
|
+
run: pixi {run} check-merge-conflict --assume-in-merge {staged_files}
|
|
49
|
+
exclude:
|
|
50
|
+
- "*.rst"
|
|
51
|
+
- name: typos
|
|
52
|
+
glob: "*"
|
|
53
|
+
file_types: text
|
|
54
|
+
run: pixi {run} typos --force-exclude {staged_files}
|
|
55
|
+
- name: zizmor
|
|
56
|
+
glob: "*.{yml,yaml}"
|
|
57
|
+
run: pixi {run} zizmor --no-progress --min-severity high --fix --offline .
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
Lockfiles must be consistent with package metadata. After any change to `pixi.toml`, run `pixi lock`.
|
|
2
|
+
|
|
3
|
+
Everything runs in a pixi environment. Any command (like `pytest`) must be prefixed with `pixi run` (e.g. `pixi run pytest`).
|
|
4
|
+
|
|
5
|
+
Code formatting must align with our standards. Run `pixi run lint` before `git commit`s to ensure this.
|