dataframely 2.5.0__tar.gz → 2.5.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. {dataframely-2.5.0 → dataframely-2.5.1}/PKG-INFO +1 -1
  2. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/__init__.py +1 -1
  3. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_base_schema.py +1 -1
  4. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_deprecation.py +1 -1
  5. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_filter.py +1 -1
  6. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_match_to_schema.py +1 -1
  7. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_plugin.py +1 -1
  8. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_polars.py +1 -1
  9. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_pydantic.py +1 -1
  10. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_rule.py +1 -1
  11. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_serialization.py +1 -1
  12. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_storage/__init__.py +1 -1
  13. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_storage/_base.py +1 -1
  14. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_storage/_exc.py +1 -1
  15. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_storage/constants.py +1 -1
  16. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_storage/delta.py +1 -1
  17. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_storage/parquet.py +1 -1
  18. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_typing.py +1 -1
  19. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/collection/__init__.py +1 -1
  20. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/collection/_base.py +6 -2
  21. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/collection/collection.py +1 -1
  22. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/collection/filter_result.py +1 -1
  23. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/__init__.py +1 -1
  24. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/_base.py +1 -1
  25. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/_mixins.py +1 -1
  26. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/_registry.py +1 -1
  27. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/_utils.py +1 -1
  28. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/any.py +1 -1
  29. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/bool.py +1 -1
  30. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/categorical.py +1 -1
  31. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/datetime.py +1 -1
  32. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/decimal.py +1 -1
  33. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/enum.py +1 -1
  34. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/float.py +1 -1
  35. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/integer.py +1 -1
  36. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/object.py +1 -1
  37. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/string.py +1 -1
  38. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/config.py +1 -1
  39. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/exc.py +1 -1
  40. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/filter_result.py +1 -1
  41. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/functional.py +1 -1
  42. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/random.py +1 -1
  43. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/schema.py +1 -1
  44. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/testing/__init__.py +1 -1
  45. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/testing/const.py +1 -1
  46. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/testing/factory.py +1 -1
  47. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/testing/mask.py +1 -1
  48. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/testing/rules.py +1 -1
  49. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/testing/storage.py +1 -1
  50. {dataframely-2.5.0 → dataframely-2.5.1}/docs/conf.py +1 -1
  51. {dataframely-2.5.0 → dataframely-2.5.1}/pyproject.toml +1 -1
  52. {dataframely-2.5.0 → dataframely-2.5.1}/tests/benches/conftest.py +1 -1
  53. {dataframely-2.5.0 → dataframely-2.5.1}/tests/benches/test_collection.py +1 -1
  54. {dataframely-2.5.0 → dataframely-2.5.1}/tests/benches/test_failure.py +1 -1
  55. {dataframely-2.5.0 → dataframely-2.5.1}/tests/benches/test_schema.py +1 -1
  56. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_base.py +37 -1
  57. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_cast.py +1 -1
  58. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_collection_future_annotations.py +1 -1
  59. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_create_empty.py +1 -1
  60. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_filter_one_to_n.py +1 -1
  61. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_filter_validate.py +1 -1
  62. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_ignore_in_filter.py +1 -1
  63. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_implementation.py +1 -1
  64. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_join.py +1 -1
  65. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_matches.py +1 -1
  66. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_optional_members.py +1 -1
  67. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_propagate_row_failures.py +1 -1
  68. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_repr.py +1 -1
  69. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_sample.py +1 -1
  70. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_serialization.py +1 -1
  71. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_storage.py +1 -1
  72. {dataframely-2.5.0 → dataframely-2.5.1}/tests/collection/test_validate_input.py +1 -1
  73. {dataframely-2.5.0 → dataframely-2.5.1}/tests/column_types/__init__.py +1 -1
  74. {dataframely-2.5.0 → dataframely-2.5.1}/tests/column_types/test_any.py +1 -1
  75. {dataframely-2.5.0 → dataframely-2.5.1}/tests/column_types/test_array.py +1 -1
  76. {dataframely-2.5.0 → dataframely-2.5.1}/tests/column_types/test_binary.py +1 -1
  77. {dataframely-2.5.0 → dataframely-2.5.1}/tests/column_types/test_datetime.py +1 -1
  78. {dataframely-2.5.0 → dataframely-2.5.1}/tests/column_types/test_decimal.py +1 -1
  79. {dataframely-2.5.0 → dataframely-2.5.1}/tests/column_types/test_enum.py +1 -1
  80. {dataframely-2.5.0 → dataframely-2.5.1}/tests/column_types/test_float.py +1 -1
  81. {dataframely-2.5.0 → dataframely-2.5.1}/tests/column_types/test_integer.py +1 -1
  82. {dataframely-2.5.0 → dataframely-2.5.1}/tests/column_types/test_list.py +1 -1
  83. {dataframely-2.5.0 → dataframely-2.5.1}/tests/column_types/test_object.py +1 -1
  84. {dataframely-2.5.0 → dataframely-2.5.1}/tests/column_types/test_string.py +1 -1
  85. {dataframely-2.5.0 → dataframely-2.5.1}/tests/column_types/test_struct.py +1 -1
  86. {dataframely-2.5.0 → dataframely-2.5.1}/tests/columns/__init__.py +1 -1
  87. {dataframely-2.5.0 → dataframely-2.5.1}/tests/columns/test_alias.py +1 -1
  88. {dataframely-2.5.0 → dataframely-2.5.1}/tests/columns/test_base.py +1 -1
  89. {dataframely-2.5.0 → dataframely-2.5.1}/tests/columns/test_check.py +1 -1
  90. {dataframely-2.5.0 → dataframely-2.5.1}/tests/columns/test_default_dtypes.py +1 -1
  91. {dataframely-2.5.0 → dataframely-2.5.1}/tests/columns/test_matches.py +1 -1
  92. {dataframely-2.5.0 → dataframely-2.5.1}/tests/columns/test_metadata.py +1 -1
  93. {dataframely-2.5.0 → dataframely-2.5.1}/tests/columns/test_polars_schema.py +1 -1
  94. {dataframely-2.5.0 → dataframely-2.5.1}/tests/columns/test_pyarrow.py +1 -1
  95. {dataframely-2.5.0 → dataframely-2.5.1}/tests/columns/test_rules.py +1 -1
  96. {dataframely-2.5.0 → dataframely-2.5.1}/tests/columns/test_sample.py +1 -1
  97. {dataframely-2.5.0 → dataframely-2.5.1}/tests/columns/test_str.py +1 -1
  98. {dataframely-2.5.0 → dataframely-2.5.1}/tests/columns/test_utils.py +1 -1
  99. {dataframely-2.5.0 → dataframely-2.5.1}/tests/conftest.py +1 -1
  100. {dataframely-2.5.0 → dataframely-2.5.1}/tests/core_validation/__init__.py +1 -1
  101. {dataframely-2.5.0 → dataframely-2.5.1}/tests/core_validation/test_match_to_schema.py +1 -1
  102. {dataframely-2.5.0 → dataframely-2.5.1}/tests/core_validation/test_rule_evaluation.py +1 -1
  103. {dataframely-2.5.0 → dataframely-2.5.1}/tests/failure_info/test_storage.py +1 -1
  104. {dataframely-2.5.0 → dataframely-2.5.1}/tests/functional/test_concat.py +1 -1
  105. {dataframely-2.5.0 → dataframely-2.5.1}/tests/functional/test_relationships.py +1 -1
  106. {dataframely-2.5.0 → dataframely-2.5.1}/tests/schema/test_base.py +1 -1
  107. {dataframely-2.5.0 → dataframely-2.5.1}/tests/schema/test_cast.py +1 -1
  108. {dataframely-2.5.0 → dataframely-2.5.1}/tests/schema/test_create_empty.py +1 -1
  109. {dataframely-2.5.0 → dataframely-2.5.1}/tests/schema/test_create_empty_if_none.py +1 -1
  110. {dataframely-2.5.0 → dataframely-2.5.1}/tests/schema/test_filter.py +1 -1
  111. {dataframely-2.5.0 → dataframely-2.5.1}/tests/schema/test_inheritance.py +1 -1
  112. {dataframely-2.5.0 → dataframely-2.5.1}/tests/schema/test_matches.py +1 -1
  113. {dataframely-2.5.0 → dataframely-2.5.1}/tests/schema/test_read_write_parquet.py +1 -1
  114. {dataframely-2.5.0 → dataframely-2.5.1}/tests/schema/test_repr.py +1 -1
  115. {dataframely-2.5.0 → dataframely-2.5.1}/tests/schema/test_rule_implementation.py +1 -1
  116. {dataframely-2.5.0 → dataframely-2.5.1}/tests/schema/test_sample.py +1 -1
  117. {dataframely-2.5.0 → dataframely-2.5.1}/tests/schema/test_serialization.py +1 -1
  118. {dataframely-2.5.0 → dataframely-2.5.1}/tests/schema/test_storage.py +1 -1
  119. {dataframely-2.5.0 → dataframely-2.5.1}/tests/schema/test_validate.py +1 -1
  120. {dataframely-2.5.0 → dataframely-2.5.1}/tests/storage/test_delta.py +1 -1
  121. {dataframely-2.5.0 → dataframely-2.5.1}/tests/test_compat.py +1 -1
  122. {dataframely-2.5.0 → dataframely-2.5.1}/tests/test_config.py +1 -1
  123. {dataframely-2.5.0 → dataframely-2.5.1}/tests/test_deprecation.py +1 -1
  124. {dataframely-2.5.0 → dataframely-2.5.1}/tests/test_factory.py +1 -1
  125. {dataframely-2.5.0 → dataframely-2.5.1}/tests/test_native_regex.py +1 -1
  126. {dataframely-2.5.0 → dataframely-2.5.1}/tests/test_pydantic.py +1 -1
  127. {dataframely-2.5.0 → dataframely-2.5.1}/tests/test_random.py +1 -1
  128. {dataframely-2.5.0 → dataframely-2.5.1}/tests/test_serialization.py +1 -1
  129. {dataframely-2.5.0 → dataframely-2.5.1}/tests/test_typing.py +1 -1
  130. {dataframely-2.5.0 → dataframely-2.5.1}/.copier-answers.yml +0 -0
  131. {dataframely-2.5.0 → dataframely-2.5.1}/.envrc +0 -0
  132. {dataframely-2.5.0 → dataframely-2.5.1}/.gitattributes +0 -0
  133. {dataframely-2.5.0 → dataframely-2.5.1}/.github/CODEOWNERS +0 -0
  134. {dataframely-2.5.0 → dataframely-2.5.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  135. {dataframely-2.5.0 → dataframely-2.5.1}/.github/copilot-instructions.md +0 -0
  136. {dataframely-2.5.0 → dataframely-2.5.1}/.github/dependabot.yml +0 -0
  137. {dataframely-2.5.0 → dataframely-2.5.1}/.github/instructions/tests.instructions.md +0 -0
  138. {dataframely-2.5.0 → dataframely-2.5.1}/.github/release-drafter.yml +0 -0
  139. {dataframely-2.5.0 → dataframely-2.5.1}/.github/workflows/build.yml +0 -0
  140. {dataframely-2.5.0 → dataframely-2.5.1}/.github/workflows/chore.yml +0 -0
  141. {dataframely-2.5.0 → dataframely-2.5.1}/.github/workflows/ci.yml +0 -0
  142. {dataframely-2.5.0 → dataframely-2.5.1}/.github/workflows/copilot-setup-steps.yml +0 -0
  143. {dataframely-2.5.0 → dataframely-2.5.1}/.github/workflows/nightly.yml +0 -0
  144. {dataframely-2.5.0 → dataframely-2.5.1}/.github/workflows/scorecard.yml +0 -0
  145. {dataframely-2.5.0 → dataframely-2.5.1}/.gitignore +0 -0
  146. {dataframely-2.5.0 → dataframely-2.5.1}/.pre-commit-config.yaml +0 -0
  147. {dataframely-2.5.0 → dataframely-2.5.1}/.prettierignore +0 -0
  148. {dataframely-2.5.0 → dataframely-2.5.1}/.prettierrc +0 -0
  149. {dataframely-2.5.0 → dataframely-2.5.1}/.readthedocs.yml +0 -0
  150. {dataframely-2.5.0 → dataframely-2.5.1}/Cargo.lock +0 -0
  151. {dataframely-2.5.0 → dataframely-2.5.1}/Cargo.toml +0 -0
  152. {dataframely-2.5.0 → dataframely-2.5.1}/LICENSE +0 -0
  153. {dataframely-2.5.0 → dataframely-2.5.1}/README.md +0 -0
  154. {dataframely-2.5.0 → dataframely-2.5.1}/SECURITY.md +0 -0
  155. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_compat.py +0 -0
  156. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/_native.pyi +0 -0
  157. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/array.py +0 -0
  158. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/binary.py +0 -0
  159. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/list.py +0 -0
  160. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/columns/struct.py +0 -0
  161. {dataframely-2.5.0 → dataframely-2.5.1}/dataframely/py.typed +0 -0
  162. {dataframely-2.5.0 → dataframely-2.5.1}/docker-compose.yml +0 -0
  163. {dataframely-2.5.0 → dataframely-2.5.1}/docs/_static/custom.css +0 -0
  164. {dataframely-2.5.0 → dataframely-2.5.1}/docs/_static/favicon.ico +0 -0
  165. {dataframely-2.5.0 → dataframely-2.5.1}/docs/_templates/autosummary/class.rst +0 -0
  166. {dataframely-2.5.0 → dataframely-2.5.1}/docs/_templates/autosummary/method.rst +0 -0
  167. {dataframely-2.5.0 → dataframely-2.5.1}/docs/_templates/classes/column.rst +0 -0
  168. {dataframely-2.5.0 → dataframely-2.5.1}/docs/_templates/classes/error.rst +0 -0
  169. {dataframely-2.5.0 → dataframely-2.5.1}/docs/_templates/classes/filter_result.rst +0 -0
  170. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/collection/generation.rst +0 -0
  171. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/collection/index.rst +0 -0
  172. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/collection/io.rst +0 -0
  173. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/collection/metadata.rst +0 -0
  174. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/collection/operations.rst +0 -0
  175. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/collection/validation.rst +0 -0
  176. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/columns/index.rst +0 -0
  177. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/errors/index.rst +0 -0
  178. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/filter_result/failure_info.rst +0 -0
  179. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/filter_result/index.rst +0 -0
  180. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/index.rst +0 -0
  181. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/misc/index.rst +0 -0
  182. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/schema/conversion.rst +0 -0
  183. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/schema/generation.rst +0 -0
  184. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/schema/index.rst +0 -0
  185. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/schema/io.rst +0 -0
  186. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/schema/metadata.rst +0 -0
  187. {dataframely-2.5.0 → dataframely-2.5.1}/docs/api/schema/validation.rst +0 -0
  188. {dataframely-2.5.0 → dataframely-2.5.1}/docs/css/custom.css +0 -0
  189. {dataframely-2.5.0 → dataframely-2.5.1}/docs/guides/development.md +0 -0
  190. {dataframely-2.5.0 → dataframely-2.5.1}/docs/guides/examples/index.md +0 -0
  191. {dataframely-2.5.0 → dataframely-2.5.1}/docs/guides/examples/real-world.ipynb +0 -0
  192. {dataframely-2.5.0 → dataframely-2.5.1}/docs/guides/faq.md +0 -0
  193. {dataframely-2.5.0 → dataframely-2.5.1}/docs/guides/features/column-metadata.md +0 -0
  194. {dataframely-2.5.0 → dataframely-2.5.1}/docs/guides/features/data-generation.md +0 -0
  195. {dataframely-2.5.0 → dataframely-2.5.1}/docs/guides/features/index.md +0 -0
  196. {dataframely-2.5.0 → dataframely-2.5.1}/docs/guides/features/lazy-validation.md +0 -0
  197. {dataframely-2.5.0 → dataframely-2.5.1}/docs/guides/features/primary-keys.md +0 -0
  198. {dataframely-2.5.0 → dataframely-2.5.1}/docs/guides/features/serialization.md +0 -0
  199. {dataframely-2.5.0 → dataframely-2.5.1}/docs/guides/features/sql-generation.md +0 -0
  200. {dataframely-2.5.0 → dataframely-2.5.1}/docs/guides/index.md +0 -0
  201. {dataframely-2.5.0 → dataframely-2.5.1}/docs/guides/migration/index.md +0 -0
  202. {dataframely-2.5.0 → dataframely-2.5.1}/docs/guides/migration/v1-v2.md +0 -0
  203. {dataframely-2.5.0 → dataframely-2.5.1}/docs/guides/quickstart.md +0 -0
  204. {dataframely-2.5.0 → dataframely-2.5.1}/docs/index.md +0 -0
  205. {dataframely-2.5.0 → dataframely-2.5.1}/pixi.lock +0 -0
  206. {dataframely-2.5.0 → dataframely-2.5.1}/pixi.toml +0 -0
  207. {dataframely-2.5.0 → dataframely-2.5.1}/rust-toolchain.toml +0 -0
  208. {dataframely-2.5.0 → dataframely-2.5.1}/src/lib.rs +0 -0
  209. {dataframely-2.5.0 → dataframely-2.5.1}/src/polars_plugin/mod.rs +0 -0
  210. {dataframely-2.5.0 → dataframely-2.5.1}/src/polars_plugin/rule_failure.rs +0 -0
  211. {dataframely-2.5.0 → dataframely-2.5.1}/src/polars_plugin/utils.rs +0 -0
  212. {dataframely-2.5.0 → dataframely-2.5.1}/src/polars_plugin/validation_error.rs +0 -0
  213. {dataframely-2.5.0 → dataframely-2.5.1}/src/regex/errdefs.rs +0 -0
  214. {dataframely-2.5.0 → dataframely-2.5.1}/src/regex/mod.rs +0 -0
  215. {dataframely-2.5.0 → dataframely-2.5.1}/src/regex/repr.rs +0 -0
  216. {dataframely-2.5.0 → dataframely-2.5.1}/tests/columns/test_sqlalchemy_columns.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dataframely
3
- Version: 2.5.0
3
+ Version: 2.5.1
4
4
  Classifier: Programming Language :: Python :: 3
5
5
  Classifier: Programming Language :: Python :: 3.10
6
6
  Classifier: Programming Language :: Python :: 3.11
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import importlib.metadata
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import os
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from collections.abc import Callable
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from typing import Literal
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from collections.abc import Iterable
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import datetime as dt
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import base64
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from ._base import StorageBackend
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from abc import ABC, abstractmethod
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
 
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  SCHEMA_METADATA_KEY = "dataframely_schema"
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
  from __future__ import annotations
4
4
 
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from collections.abc import Iterable
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from ._base import BaseCollection
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -202,7 +202,11 @@ class CollectionMeta(ABCMeta):
202
202
  annotations = source["__annotations__"]
203
203
  elif sys.version_info >= (3, 14):
204
204
  if "__annotate_func__" in source:
205
- annotations = source["__annotate_func__"](Format.VALUE)
205
+ annotate_func = source["__annotate_func__"]
206
+ # __annotate_func__ can be None in Python 3.14 when a class
207
+ # has no annotations or in certain metaclass scenarios
208
+ if annotate_func is not None and callable(annotate_func):
209
+ annotations = annotate_func(Format.VALUE)
206
210
  for attr, kls in annotations.items():
207
211
  result.members[attr] = CollectionMeta._derive_member_info(
208
212
  attr, kls, CollectionMember()
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from ._base import Column
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import sys
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from typing import Any, TypeVar
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from collections.abc import Callable
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import contextlib
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
 
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from collections.abc import Sequence
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import datetime as dt
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import annotations
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from .const import (
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import dataframely.columns as dc
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from typing import Any
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import polars as pl
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import polars as pl
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from abc import ABC, abstractmethod
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  # Configuration file for the Sphinx documentation builder.
@@ -27,7 +27,7 @@ description = "A declarative, polars-native data frame validation library"
27
27
  name = "dataframely"
28
28
  readme = "README.md"
29
29
  requires-python = ">=3.10"
30
- version = "2.5.0"
30
+ version = "2.5.1"
31
31
 
32
32
  [project.optional-dependencies]
33
33
  deltalake = ["deltalake"]
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from typing import cast
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import polars as pl
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import numpy as np
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import polars as pl
@@ -1,6 +1,8 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
+ import sys
5
+
4
6
  import polars as pl
5
7
  import pytest
6
8
  from polars.testing import assert_frame_equal
@@ -110,3 +112,37 @@ def test_collect_all_optional() -> None:
110
112
  assert isinstance(out, MyCollection)
111
113
  assert len(out.first.collect()) == 3
112
114
  assert out.second is None
115
+
116
+
117
+ @pytest.mark.skipif(sys.version_info < (3, 14), reason="Python 3.14+ only")
118
+ def test_annotate_func_none_py314() -> None:
119
+ """Test that __annotate_func__ = None doesn't cause TypeError in Python 3.14.
120
+
121
+ In Python 3.14 with PEP 649, __annotate_func__ can be None when:
122
+ - A class has no annotations
123
+ - Annotations are being processed during certain import contexts
124
+ - Classes are created dynamically with __annotate_func__ set to None
125
+
126
+ This test ensures the metaclass handles this gracefully.
127
+ """
128
+ from typing import cast
129
+
130
+ from dataframely.collection._base import BaseCollection, CollectionMeta
131
+
132
+ # Create a namespace with __annotate_func__ = None
133
+ namespace = {
134
+ "__module__": "__main__",
135
+ "__qualname__": "TestCollection",
136
+ "__annotate_func__": None,
137
+ }
138
+
139
+ # This should not raise TypeError
140
+ TestCollection = CollectionMeta(
141
+ "TestCollection",
142
+ (dy.Collection,),
143
+ namespace,
144
+ )
145
+
146
+ # Verify it has no members (since there are no annotations)
147
+ # Cast to BaseCollection to satisfy mypy since CollectionMeta creates Collection classes
148
+ assert cast(type[BaseCollection], TestCollection).members() == {}
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import polars as pl
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from __future__ import (
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
 
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from typing import Any
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import polars as pl
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from typing import Annotated
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from typing import Annotated
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from typing import Annotated, Literal
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import polars as pl
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import polars as pl
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from typing import Annotated
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import textwrap
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from typing import Annotated, Any
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import json
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from typing import Any
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import polars as pl
@@ -1,2 +1,2 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  from typing import Any
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import polars as pl
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import polars as pl
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import datetime as dt
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
 
4
4
  import decimal
@@ -1,4 +1,4 @@
1
- # Copyright (c) QuantCo 2025-2025
1
+ # Copyright (c) QuantCo 2025-2026
2
2
  # SPDX-License-Identifier: BSD-3-Clause
3
3
  import enum
4
4
  from collections.abc import Iterable