1919
2020from __future__ import annotations
2121
22- import warnings
2322from abc import ABC , abstractmethod
2423from typing import TYPE_CHECKING , Any , Protocol
2524
2625import datafusion ._internal as df_internal
27- from datafusion ._internal import EXPECTED_PROVIDER_MSG
28- from datafusion .utils import _normalize_table_provider
2926
3027if TYPE_CHECKING :
3128 import pyarrow as pa
3229
30+ from datafusion import DataFrame
3331 from datafusion .context import TableProviderExportable
3432
3533try :
@@ -139,8 +137,7 @@ def register_table(
139137 Objects implementing ``__datafusion_table_provider__`` are also supported
140138 and treated as table provider instances.
141139 """
142- provider = _normalize_table_provider (table )
143- return self ._raw_schema .register_table (name , provider )
140+ return self ._raw_schema .register_table (name , table )
144141
145142 def deregister_table (self , name : str ) -> None :
146143 """Deregister a table provider from this schema."""
@@ -152,101 +149,37 @@ class Database(Schema):
152149 """See `Schema`."""
153150
154151
155- _InternalRawTable = df_internal .catalog .RawTable
156- _InternalTableProvider = df_internal .TableProvider
157-
158- # Keep in sync with ``datafusion._internal.TableProvider.from_view``.
159- _FROM_VIEW_WARN_STACKLEVEL = 2
160-
161-
162152class Table :
163153 """DataFusion table or table provider wrapper."""
164154
165- __slots__ = ("_table " ,)
155+ __slots__ = ("_inner " ,)
166156
167157 def __init__ (
168158 self ,
169- table : _InternalRawTable | _InternalTableProvider | Table ,
159+ table : DataFrame | TableProviderExportable | pa . dataset . Dataset ,
170160 ) -> None :
171161 """Wrap a low level table or table provider."""
172- if isinstance (table , Table ):
173- table = table .table
174-
175- if not isinstance (table , (_InternalRawTable , _InternalTableProvider )):
176- raise TypeError (EXPECTED_PROVIDER_MSG )
177-
178- self ._table = table
179-
180- def __getattribute__ (self , name : str ) -> Any :
181- """Restrict provider-specific helpers to compatible tables."""
182- if name == "__datafusion_table_provider__" :
183- table = object .__getattribute__ (self , "_table" )
184- if not hasattr (table , "__datafusion_table_provider__" ):
185- raise AttributeError (name )
186- return object .__getattribute__ (self , name )
162+ self ._inner = df_internal .catalog .RawTable (table )
187163
188164 def __repr__ (self ) -> str :
189165 """Print a string representation of the table."""
190- return repr (self ._table )
191-
192- @property
193- def table (self ) -> _InternalRawTable | _InternalTableProvider :
194- """Return the wrapped low level table object."""
195- return self ._table
166+ return repr (self ._inner )
196167
197- @classmethod
198- def from_dataset (cls , dataset : pa .dataset .Dataset ) -> Table :
168+ @deprecated ("Use Table() constructor instead." )
169+ @staticmethod
170+ def from_dataset (dataset : pa .dataset .Dataset ) -> Table :
199171 """Turn a :mod:`pyarrow.dataset` ``Dataset`` into a :class:`Table`."""
200- return cls (_InternalRawTable .from_dataset (dataset ))
201-
202- @classmethod
203- def from_capsule (cls , capsule : Any ) -> Table :
204- """Create a :class:`Table` from a PyCapsule exported provider."""
205- provider = _InternalTableProvider .from_capsule (capsule )
206- return cls (provider )
207-
208- @classmethod
209- def from_dataframe (cls , df : Any ) -> Table :
210- """Create a :class:`Table` from tabular data."""
211- from datafusion .dataframe import DataFrame as DataFrameWrapper
212-
213- dataframe = df if isinstance (df , DataFrameWrapper ) else DataFrameWrapper (df )
214- return dataframe .into_view ()
215-
216- @classmethod
217- def from_view (cls , df : Any ) -> Table :
218- """Deprecated helper for constructing tables from views."""
219- from datafusion .dataframe import DataFrame as DataFrameWrapper
220-
221- if isinstance (df , DataFrameWrapper ):
222- df = df .df
223-
224- provider = _InternalTableProvider .from_view (df )
225- warnings .warn (
226- "Table.from_view is deprecated; use DataFrame.into_view or "
227- "Table.from_dataframe instead." ,
228- category = DeprecationWarning ,
229- stacklevel = _FROM_VIEW_WARN_STACKLEVEL ,
230- )
231- return cls (provider )
172+ return Table (dataset )
232173
233174 @property
234175 def schema (self ) -> pa .Schema :
235176 """Returns the schema associated with this table."""
236- return self ._table .schema
177+ return self ._inner .schema
237178
238179 @property
239180 def kind (self ) -> str :
240181 """Returns the kind of table."""
241- return self ._table .kind
242-
243- def __datafusion_table_provider__ (self ) -> Any :
244- """Expose the wrapped provider for FFI integrations."""
245- exporter = getattr (self ._table , "__datafusion_table_provider__" , None )
246- if exporter is None :
247- msg = "Underlying object does not export __datafusion_table_provider__()"
248- raise AttributeError (msg )
249- return exporter ()
182+ return self ._inner .kind
250183
251184
252185class CatalogProvider (ABC ):
0 commit comments