@@ -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
7178class _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
100117class _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
0 commit comments