Skip to content

Commit

Permalink
Add pytest to ensure all pyo3 exposed objects are also exposed in our…
Browse files Browse the repository at this point in the history
… wrappers so we don't miss any functions or classes
  • Loading branch information
timsaucer committed Jul 27, 2024
1 parent 6a865fb commit 63f59b9
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions python/datafusion/tests/test_wrapper_coverage.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import datafusion
import datafusion.functions
import datafusion.object_store
import datafusion.substrait


def missing_exports(internal_obj, wrapped_obj) -> None:
for attr in dir(internal_obj):
assert attr in dir(wrapped_obj)

internal_attr = getattr(internal_obj, attr)
wrapped_attr = getattr(wrapped_obj, attr)

assert wrapped_attr is not None if internal_attr is not None else True

if attr in ["__self__", "__class__"]:
continue
if isinstance(internal_attr, list):
assert isinstance(wrapped_attr, list)
for val in internal_attr:
assert val in wrapped_attr
elif hasattr(internal_attr, "__dict__"):
missing_exports(internal_attr, wrapped_attr)


def test_datafusion_missing_exports() -> None:
"""Check for any missing pythone exports.
This test verifies that every exposed class, attribute, and function in
the internal (pyo3) module is also exposed in our python wrappers.
"""
missing_exports(datafusion._internal, datafusion)

0 comments on commit 63f59b9

Please sign in to comment.