Skip to content

Commit 3b074ba

Browse files
Use adaptor for default_title
1 parent 566506d commit 3b074ba

File tree

3 files changed

+41
-12
lines changed

3 files changed

+41
-12
lines changed

pins/adaptors.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ def data_preview(self) -> str:
6767
# TODO(compat): set display none in index.html
6868
return json.dumps({})
6969

70+
def default_title(self, name: str) -> str:
71+
return f"{name}: a pinned {self._obj_name} object"
72+
73+
@property
74+
def _obj_name(self) -> str:
75+
return type(self._d).__qualname__
76+
7077

7178
class _DFAdaptor(_Adaptor):
7279
_d: ClassVar[_DataFrame]
@@ -78,6 +85,10 @@ def __init__(self, data: _DataFrame) -> None:
7885
@abstractmethod
7986
def columns(self) -> list[Any]: ...
8087

88+
@property
89+
@abstractmethod
90+
def shape(self) -> tuple[int, int]: ...
91+
8192
@abstractmethod
8293
def head(self, n: int) -> Self: ...
8394

@@ -96,6 +107,12 @@ def data_preview(self) -> str:
96107

97108
return json.dumps({"data": data_no_nulls, "columns": columns})
98109

110+
def default_title(self, name: str) -> str:
111+
# TODO(compat): title says CSV rather than data.frame
112+
# see https://github.com/machow/pins-python/issues/5
113+
shape_str = " x ".join(map(str, self.shape))
114+
return f"{name}: a pinned {shape_str} DataFrame"
115+
99116

100117
class _PandasAdaptor(_DFAdaptor):
101118
def __init__(self, data: _AbstractPandasFrame) -> None:
@@ -105,6 +122,10 @@ def __init__(self, data: _AbstractPandasFrame) -> None:
105122
def columns(self) -> list[Any]:
106123
return self._d.columns.tolist()
107124

125+
@property
126+
def shape(self) -> tuple[int, int]:
127+
return self._d.shape
128+
108129
def head(self, n: int) -> Self:
109130
return _PandasAdaptor(self._d.head(n))
110131

pins/drivers.py

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from pathlib import Path
2-
from typing import Sequence
2+
from typing import Any, Sequence
33

44
from pins.adaptors import _create_adaptor
55

@@ -176,14 +176,6 @@ def save_data(obj, fname, type=None, apply_suffix: bool = True) -> "str | Sequen
176176
return final_name
177177

178178

179-
def default_title(obj, name):
180-
import pandas as pd
181-
182-
if isinstance(obj, pd.DataFrame):
183-
# TODO(compat): title says CSV rather than data.frame
184-
# see https://github.com/machow/pins-python/issues/5
185-
shape_str = " x ".join(map(str, obj.shape))
186-
return f"{name}: a pinned {shape_str} DataFrame"
187-
else:
188-
obj_name = type(obj).__qualname__
189-
return f"{name}: a pinned {obj_name} object"
179+
def default_title(obj: Any, name: str) -> str:
180+
# Kept for backward compatibility only.
181+
return _create_adaptor(obj).default_title(name)

pins/tests/test_adaptors.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ def test_dict(self):
7272
adaptor = _Adaptor(data)
7373
assert adaptor.data_preview == "{}"
7474

75+
def test_default_title(self):
76+
adaptor = _Adaptor(42)
77+
assert adaptor.default_title("my_data") == "my_data: a pinned int object"
78+
7579

7680
class TestPandasAdaptor:
7781
def test_columns(self):
@@ -81,6 +85,13 @@ def test_columns(self):
8185
assert isinstance(adaptor, _PandasAdaptor)
8286
assert adaptor.columns == ["a", "b"]
8387

88+
def test_shape(self):
89+
df = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
90+
adaptor = _PandasAdaptor(df)
91+
assert isinstance(adaptor, _DFAdaptor)
92+
assert isinstance(adaptor, _PandasAdaptor)
93+
assert adaptor.shape == (3, 2)
94+
8495
def test_head(self):
8596
df = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
8697
adaptor = _PandasAdaptor(df)
@@ -128,6 +139,11 @@ def test_data_preview(self):
128139
)
129140
assert adaptor.data_preview == expected
130141

142+
def test_default_title(self):
143+
df = pd.DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]})
144+
adaptor = _PandasAdaptor(df)
145+
assert adaptor.default_title("my_df") == "my_df: a pinned 3 x 2 DataFrame"
146+
131147

132148
class TestAbstractBackends:
133149
class TestAbstractPandasFrame:

0 commit comments

Comments
 (0)