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.
Files changed (236) hide show
  1. dataframely-2.10.1/.claude/CLAUDE.md +5 -0
  2. {dataframely-2.9.1 → dataframely-2.10.1}/.copier-answers.yml +10 -1
  3. dataframely-2.10.1/.github/workflows/build.yml +118 -0
  4. dataframely-2.9.1/.github/workflows/chore-pr.yml → dataframely-2.10.1/.github/workflows/chore.yml +4 -4
  5. {dataframely-2.9.1 → dataframely-2.10.1}/.github/workflows/ci.yml +9 -7
  6. {dataframely-2.9.1 → dataframely-2.10.1}/.github/workflows/copilot-setup-steps.yml +1 -1
  7. {dataframely-2.9.1 → dataframely-2.10.1}/.github/workflows/nightly.yml +1 -1
  8. dataframely-2.9.1/.github/workflows/chore-main.yml → dataframely-2.10.1/.github/workflows/release-drafter.yml +2 -2
  9. {dataframely-2.9.1 → dataframely-2.10.1}/.github/workflows/scorecard.yml +2 -2
  10. dataframely-2.10.1/.lefthook.yaml +57 -0
  11. dataframely-2.10.1/AGENTS.md +5 -0
  12. {dataframely-2.9.1 → dataframely-2.10.1}/Cargo.lock +1606 -174
  13. {dataframely-2.9.1 → dataframely-2.10.1}/Cargo.toml +4 -5
  14. {dataframely-2.9.1 → dataframely-2.10.1}/PKG-INFO +1 -1
  15. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_base_schema.py +16 -12
  16. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_compat.py +2 -2
  17. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_native.pyi +18 -1
  18. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_plugin.py +35 -6
  19. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_storage/_base.py +0 -1
  20. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/collection/_base.py +49 -26
  21. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/collection/collection.py +37 -22
  22. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/collection/filter_result.py +3 -1
  23. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/_base.py +44 -12
  24. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/any.py +13 -6
  25. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/array.py +25 -12
  26. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/categorical.py +18 -6
  27. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/datetime.py +72 -24
  28. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/decimal.py +18 -6
  29. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/enum.py +19 -7
  30. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/float.py +18 -6
  31. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/integer.py +18 -6
  32. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/list.py +22 -6
  33. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/object.py +13 -9
  34. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/string.py +18 -6
  35. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/struct.py +18 -6
  36. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/config.py +30 -6
  37. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/random.py +2 -3
  38. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/schema.py +22 -2
  39. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/examples/real-world.ipynb +5 -3
  40. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/features/lazy-validation.md +24 -0
  41. {dataframely-2.9.1 → dataframely-2.10.1}/pixi.lock +23455 -23512
  42. {dataframely-2.9.1 → dataframely-2.10.1}/pixi.toml +9 -7
  43. {dataframely-2.9.1 → dataframely-2.10.1}/pyproject.toml +4 -1
  44. {dataframely-2.9.1 → dataframely-2.10.1}/src/polars_plugin/mod.rs +35 -4
  45. dataframely-2.10.1/src/polars_plugin/validation_error.rs +255 -0
  46. dataframely-2.10.1/tests/collection/test_dataframe_members.py +127 -0
  47. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_filter_validate.py +16 -0
  48. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_implementation.py +55 -22
  49. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_repr.py +15 -14
  50. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_serialization.py +49 -0
  51. {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_array.py +34 -0
  52. {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_list.py +16 -0
  53. dataframely-2.10.1/tests/columns/test_description.py +99 -0
  54. {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_matches.py +2 -0
  55. dataframely-2.10.1/tests/schema/test_inheritance.py +46 -0
  56. dataframely-2.10.1/tests/schema/test_repr.py +69 -0
  57. {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_sample.py +32 -0
  58. {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_serialization.py +8 -0
  59. {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_storage.py +14 -1
  60. {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_validate.py +133 -2
  61. {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_config.py +34 -0
  62. dataframely-2.9.1/.github/workflows/build.yml +0 -89
  63. dataframely-2.9.1/.pre-commit-config.yaml +0 -110
  64. dataframely-2.9.1/src/polars_plugin/validation_error.rs +0 -90
  65. dataframely-2.9.1/tests/schema/test_inheritance.py +0 -22
  66. dataframely-2.9.1/tests/schema/test_repr.py +0 -65
  67. {dataframely-2.9.1 → dataframely-2.10.1}/.envrc +0 -0
  68. {dataframely-2.9.1 → dataframely-2.10.1}/.gitattributes +0 -0
  69. {dataframely-2.9.1 → dataframely-2.10.1}/.github/CODEOWNERS +0 -0
  70. {dataframely-2.9.1 → dataframely-2.10.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  71. {dataframely-2.9.1 → dataframely-2.10.1}/.github/copilot-instructions.md +0 -0
  72. {dataframely-2.9.1 → dataframely-2.10.1}/.github/dependabot.yml +0 -0
  73. {dataframely-2.9.1 → dataframely-2.10.1}/.github/instructions/tests.instructions.md +0 -0
  74. {dataframely-2.9.1 → dataframely-2.10.1}/.github/release-drafter.yml +0 -0
  75. {dataframely-2.9.1 → dataframely-2.10.1}/.gitignore +0 -0
  76. {dataframely-2.9.1 → dataframely-2.10.1}/.prettierignore +0 -0
  77. {dataframely-2.9.1 → dataframely-2.10.1}/.prettierrc +0 -0
  78. {dataframely-2.9.1 → dataframely-2.10.1}/.readthedocs.yml +0 -0
  79. {dataframely-2.9.1 → dataframely-2.10.1}/LICENSE +0 -0
  80. {dataframely-2.9.1 → dataframely-2.10.1}/README.md +0 -0
  81. {dataframely-2.9.1 → dataframely-2.10.1}/SECURITY.md +0 -0
  82. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/__init__.py +0 -0
  83. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_deprecation.py +0 -0
  84. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_filter.py +0 -0
  85. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_match_to_schema.py +0 -0
  86. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_polars.py +0 -0
  87. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_pydantic.py +0 -0
  88. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_rule.py +0 -0
  89. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_serialization.py +0 -0
  90. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_storage/__init__.py +0 -0
  91. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_storage/_exc.py +0 -0
  92. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_storage/_fsspec.py +0 -0
  93. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_storage/constants.py +0 -0
  94. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_storage/delta.py +0 -0
  95. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_storage/parquet.py +0 -0
  96. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/_typing.py +0 -0
  97. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/collection/__init__.py +0 -0
  98. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/__init__.py +0 -0
  99. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/_mixins.py +0 -0
  100. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/_registry.py +0 -0
  101. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/_utils.py +0 -0
  102. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/binary.py +0 -0
  103. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/columns/bool.py +0 -0
  104. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/exc.py +0 -0
  105. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/experimental/__init__.py +0 -0
  106. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/experimental/infer_schema.py +0 -0
  107. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/filter_result.py +0 -0
  108. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/functional.py +0 -0
  109. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/py.typed +0 -0
  110. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/testing/__init__.py +0 -0
  111. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/testing/const.py +0 -0
  112. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/testing/factory.py +0 -0
  113. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/testing/mask.py +0 -0
  114. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/testing/rules.py +0 -0
  115. {dataframely-2.9.1 → dataframely-2.10.1}/dataframely/testing/storage.py +0 -0
  116. {dataframely-2.9.1 → dataframely-2.10.1}/docker-compose.yml +0 -0
  117. {dataframely-2.9.1 → dataframely-2.10.1}/docs/_static/custom.css +0 -0
  118. {dataframely-2.9.1 → dataframely-2.10.1}/docs/_static/favicon.ico +0 -0
  119. {dataframely-2.9.1 → dataframely-2.10.1}/docs/_templates/autosummary/class.rst +0 -0
  120. {dataframely-2.9.1 → dataframely-2.10.1}/docs/_templates/autosummary/method.rst +0 -0
  121. {dataframely-2.9.1 → dataframely-2.10.1}/docs/_templates/classes/column.rst +0 -0
  122. {dataframely-2.9.1 → dataframely-2.10.1}/docs/_templates/classes/error.rst +0 -0
  123. {dataframely-2.9.1 → dataframely-2.10.1}/docs/_templates/classes/filter_result.rst +0 -0
  124. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/collection/generation.rst +0 -0
  125. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/collection/index.rst +0 -0
  126. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/collection/io.rst +0 -0
  127. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/collection/metadata.rst +0 -0
  128. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/collection/operations.rst +0 -0
  129. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/collection/validation.rst +0 -0
  130. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/columns/index.rst +0 -0
  131. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/errors/index.rst +0 -0
  132. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/experimental/index.rst +0 -0
  133. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/filter_result/failure_info.rst +0 -0
  134. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/filter_result/index.rst +0 -0
  135. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/index.rst +0 -0
  136. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/misc/index.rst +0 -0
  137. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/schema/conversion.rst +0 -0
  138. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/schema/generation.rst +0 -0
  139. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/schema/index.rst +0 -0
  140. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/schema/io.rst +0 -0
  141. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/schema/metadata.rst +0 -0
  142. {dataframely-2.9.1 → dataframely-2.10.1}/docs/api/schema/validation.rst +0 -0
  143. {dataframely-2.9.1 → dataframely-2.10.1}/docs/conf.py +0 -0
  144. {dataframely-2.9.1 → dataframely-2.10.1}/docs/css/custom.css +0 -0
  145. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/coding-agents.md +0 -0
  146. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/development.md +0 -0
  147. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/examples/index.md +0 -0
  148. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/faq.md +0 -0
  149. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/features/column-metadata.md +0 -0
  150. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/features/data-generation.md +0 -0
  151. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/features/index.md +0 -0
  152. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/features/primary-keys.md +0 -0
  153. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/features/serialization.md +0 -0
  154. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/features/sql-generation.md +0 -0
  155. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/index.md +0 -0
  156. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/migration/index.md +0 -0
  157. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/migration/v1-v2.md +0 -0
  158. {dataframely-2.9.1 → dataframely-2.10.1}/docs/guides/quickstart.md +0 -0
  159. {dataframely-2.9.1 → dataframely-2.10.1}/docs/index.md +0 -0
  160. {dataframely-2.9.1 → dataframely-2.10.1}/rust-toolchain.toml +0 -0
  161. {dataframely-2.9.1 → dataframely-2.10.1}/skills/SKILL.md +0 -0
  162. {dataframely-2.9.1 → dataframely-2.10.1}/src/lib.rs +0 -0
  163. {dataframely-2.9.1 → dataframely-2.10.1}/src/polars_plugin/rule_failure.rs +0 -0
  164. {dataframely-2.9.1 → dataframely-2.10.1}/src/polars_plugin/utils.rs +0 -0
  165. {dataframely-2.9.1 → dataframely-2.10.1}/src/regex/errdefs.rs +0 -0
  166. {dataframely-2.9.1 → dataframely-2.10.1}/src/regex/mod.rs +0 -0
  167. {dataframely-2.9.1 → dataframely-2.10.1}/src/regex/repr.rs +0 -0
  168. {dataframely-2.9.1 → dataframely-2.10.1}/tests/benches/conftest.py +0 -0
  169. {dataframely-2.9.1 → dataframely-2.10.1}/tests/benches/test_collection.py +0 -0
  170. {dataframely-2.9.1 → dataframely-2.10.1}/tests/benches/test_failure.py +0 -0
  171. {dataframely-2.9.1 → dataframely-2.10.1}/tests/benches/test_schema.py +0 -0
  172. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_base.py +0 -0
  173. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_cast.py +0 -0
  174. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_collection_future_annotations.py +0 -0
  175. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_create_empty.py +0 -0
  176. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_filter_one_to_n.py +0 -0
  177. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_ignore_in_filter.py +0 -0
  178. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_join.py +0 -0
  179. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_matches.py +0 -0
  180. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_optional_members.py +0 -0
  181. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_propagate_row_failures.py +0 -0
  182. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_sample.py +0 -0
  183. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_storage.py +0 -0
  184. {dataframely-2.9.1 → dataframely-2.10.1}/tests/collection/test_validate_input.py +0 -0
  185. {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/__init__.py +0 -0
  186. {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_any.py +0 -0
  187. {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_binary.py +0 -0
  188. {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_datetime.py +0 -0
  189. {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_decimal.py +0 -0
  190. {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_enum.py +0 -0
  191. {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_float.py +0 -0
  192. {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_integer.py +0 -0
  193. {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_object.py +0 -0
  194. {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_string.py +0 -0
  195. {dataframely-2.9.1 → dataframely-2.10.1}/tests/column_types/test_struct.py +0 -0
  196. {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/__init__.py +0 -0
  197. {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_alias.py +0 -0
  198. {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_base.py +0 -0
  199. {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_check.py +0 -0
  200. {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_default_dtypes.py +0 -0
  201. {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_metadata.py +0 -0
  202. {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_polars_schema.py +0 -0
  203. {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_pyarrow.py +0 -0
  204. {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_pydantic.py +0 -0
  205. {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_rules.py +0 -0
  206. {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_sample.py +0 -0
  207. {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_sqlalchemy_columns.py +0 -0
  208. {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_str.py +0 -0
  209. {dataframely-2.9.1 → dataframely-2.10.1}/tests/columns/test_utils.py +0 -0
  210. {dataframely-2.9.1 → dataframely-2.10.1}/tests/conftest.py +0 -0
  211. {dataframely-2.9.1 → dataframely-2.10.1}/tests/core_validation/__init__.py +0 -0
  212. {dataframely-2.9.1 → dataframely-2.10.1}/tests/core_validation/test_match_to_schema.py +0 -0
  213. {dataframely-2.9.1 → dataframely-2.10.1}/tests/core_validation/test_rule_evaluation.py +0 -0
  214. {dataframely-2.9.1 → dataframely-2.10.1}/tests/experimental/test_infer_schema.py +0 -0
  215. {dataframely-2.9.1 → dataframely-2.10.1}/tests/failure_info/test_storage.py +0 -0
  216. {dataframely-2.9.1 → dataframely-2.10.1}/tests/functional/test_concat.py +0 -0
  217. {dataframely-2.9.1 → dataframely-2.10.1}/tests/functional/test_relationships.py +0 -0
  218. {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_base.py +0 -0
  219. {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_cast.py +0 -0
  220. {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_create_empty.py +0 -0
  221. {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_create_empty_if_none.py +0 -0
  222. {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_filter.py +0 -0
  223. {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_matches.py +0 -0
  224. {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_pydantic_model.py +0 -0
  225. {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_read_write_parquet.py +0 -0
  226. {dataframely-2.9.1 → dataframely-2.10.1}/tests/schema/test_rule_implementation.py +0 -0
  227. {dataframely-2.9.1 → dataframely-2.10.1}/tests/storage/test_delta.py +0 -0
  228. {dataframely-2.9.1 → dataframely-2.10.1}/tests/storage/test_fsspec.py +0 -0
  229. {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_compat.py +0 -0
  230. {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_deprecation.py +0 -0
  231. {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_factory.py +0 -0
  232. {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_native_regex.py +0 -0
  233. {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_pydantic.py +0 -0
  234. {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_random.py +0 -0
  235. {dataframely-2.9.1 → dataframely-2.10.1}/tests/test_serialization.py +0 -0
  236. {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
- _commit: v0.4.1
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
@@ -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@70d2764d1a7d5d9560b100cbea0077fc8f633987 # v3.0.2
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@70d2764d1a7d5d9560b100cbea0077fc8f633987 # v3.0.2
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@139054aeaa9adc52ab36ddf67437541f039b88e2 # v7.1.1
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
- pre-commit-checks:
17
- name: Pre-commit Checks
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@a0af7a228712d6121d37aba47adf55c1332c9c2e # v0.9.4
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: pre-commit
35
- run: pixi run pre-commit-run --color=always --show-diff-on-failure
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@a0af7a228712d6121d37aba47adf55c1332c9c2e # v0.9.4
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@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
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@a0af7a228712d6121d37aba47adf55c1332c9c2e # v0.9.4
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@a0af7a228712d6121d37aba47adf55c1332c9c2e # v0.9.4
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: Chore
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@139054aeaa9adc52ab36ddf67437541f039b88e2 # v7.1.1
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@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
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@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4
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.