Skip to content

Commit 036c7e9

Browse files
Refactor _get_df_family to raise an error instead.
1 parent 63895dc commit 036c7e9

File tree

1 file changed

+15
-19
lines changed

1 file changed

+15
-19
lines changed

pins/drivers.py

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
from pathlib import Path
22
from typing import Literal, Sequence
33

4-
from typing_extensions import assert_never
5-
64
from .config import PINS_ENV_INSECURE_READ, get_allow_pickle_read
75
from .errors import PinsInsecureReadError
86
from .meta import Meta
@@ -24,7 +22,8 @@ def _assert_is_pandas_df(x, file_type: str) -> None:
2422
)
2523

2624

27-
def _get_df_family(df) -> Literal["unknown", "pandas", "polars"]:
25+
def _get_df_family(df) -> Literal["pandas", "polars"]:
26+
"""Return the type of DataFrame, or raise NotImplementedError if we can't decide."""
2827
try:
2928
import polars as pl
3029
except ModuleNotFoundError:
@@ -36,16 +35,15 @@ def _get_df_family(df) -> Literal["unknown", "pandas", "polars"]:
3635

3736
is_pandas_df = isinstance(df, pd.DataFrame)
3837

39-
if not is_polars_df and not is_pandas_df:
40-
return "unknown"
41-
if is_polars_df and is_pandas_df: # Hybrid DataFrame type!
42-
return "unknown"
38+
if is_polars_df and is_pandas_df:
39+
raise NotImplementedError(
40+
"Hybrid DataFrames (simultaneously pandas and polars) are not supported."
41+
)
4342
elif is_polars_df:
4443
return "polars"
4544
elif is_pandas_df:
4645
return "pandas"
47-
else:
48-
assert_never(df)
46+
raise NotImplementedError(f"Unrecognized DataFrame type: {type(df)}")
4947

5048

5149
def load_path(meta, path_to_version):
@@ -234,15 +232,13 @@ def save_data(obj, fname, type=None, apply_suffix: bool = True) -> "str | Sequen
234232

235233

236234
def default_title(obj, name):
237-
df_family = _get_df_family(obj)
238-
239-
if df_family in ("pandas", "polars"):
240-
# TODO(compat): title says CSV rather than data.frame
241-
# see https://github.com/machow/pins-python/issues/5
242-
shape_str = " x ".join(map(str, obj.shape))
243-
return f"{name}: a pinned {shape_str} DataFrame"
244-
elif df_family == "unknown":
235+
try:
236+
_get_df_family(obj)
237+
except NotImplementedError:
245238
obj_name = type(obj).__qualname__
246239
return f"{name}: a pinned {obj_name} object"
247-
else:
248-
assert_never(df_family)
240+
241+
# TODO(compat): title says CSV rather than data.frame
242+
# see https://github.com/machow/pins-python/issues/5
243+
shape_str = " x ".join(map(str, obj.shape))
244+
return f"{name}: a pinned {shape_str} DataFrame"

0 commit comments

Comments
 (0)